From 28da3f000dcb48d85bd240adf8c7518cbdcde0b3 Mon Sep 17 00:00:00 2001 From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de> Date: Tue, 23 May 2023 07:33:17 +0200 Subject: [PATCH] distinguish unknown2D from csv2D; rm nonsensical 2D call from 1D importer --- Device/IO/IOFactory.cpp | 4 ++-- Device/IO/IOFactory.h | 6 ++--- GUI/View/Import/ImportDataUtil.cpp | 26 +--------------------- GUI/View/Import/RealDataSelectorWidget.cpp | 4 ++-- auto/Wrap/libBornAgainDevice.py | 6 +++-- auto/Wrap/libBornAgainDevice_wrap.cpp | 5 +++-- 6 files changed, 15 insertions(+), 36 deletions(-) diff --git a/Device/IO/IOFactory.cpp b/Device/IO/IOFactory.cpp index 345ac63c115..927abec5c74 100644 --- a/Device/IO/IOFactory.cpp +++ b/Device/IO/IOFactory.cpp @@ -171,7 +171,7 @@ IO::Filetype2D IO::filename2type2D(const std::string& filename) return nicos; if (s == ".tif" || s == ".tiff") return tiff; - return any2D; + return csv2D; } Datafield* IO::readData1D(const std::string& file_name, Filetype1D ftype) @@ -189,7 +189,7 @@ Datafield* IO::readData1D(const std::string& file_name, Filetype1D ftype) Datafield* IO::readData2D(const std::string& file_name, Filetype2D ftype) { - if (ftype == any2D) + if (ftype == unknown2D) ftype = filename2type2D(file_name); std::stringstream s = ::file2stream(file_name); diff --git a/Device/IO/IOFactory.h b/Device/IO/IOFactory.h index fc4c974080c..7c1d38e0500 100644 --- a/Device/IO/IOFactory.h +++ b/Device/IO/IOFactory.h @@ -22,7 +22,7 @@ class Datafield; namespace IO { enum Filetype1D { any1D, bornagain1D, refltab, mft }; -enum Filetype2D { any2D, bornagain, tiff, nicos }; +enum Filetype2D { unknown2D, csv2D, bornagain, tiff, nicos }; #ifndef SWIG bool isCompressed(const std::string& name); @@ -38,11 +38,11 @@ Filetype2D filename2type2D(const std::string& filename); Datafield* readData1D(const std::string& file_name, Filetype1D ftype = any1D); //! Reads 2D data file and returns newly created Datafield object. -//! If selector is 'any2D', then the file extension will determine the loader to be used. +//! If selector is 'unknown2D', then the file extension will determine the loader to be used. //! For any other selector, the file extension is ignored. //! If file name ends with "*.gz" or "*.bz2" the file will be unzipped on the fly. //! May throw, but will never return nullptr. -Datafield* readData2D(const std::string& file_name, Filetype2D ftype = any2D); +Datafield* readData2D(const std::string& file_name, Filetype2D ftype = unknown2D); //! Writes Datafield to file. //! The format is determined by the file extension. diff --git a/GUI/View/Import/ImportDataUtil.cpp b/GUI/View/Import/ImportDataUtil.cpp index aedff3b1fa2..3ecb04d4088 100644 --- a/GUI/View/Import/ImportDataUtil.cpp +++ b/GUI/View/Import/ImportDataUtil.cpp @@ -28,26 +28,6 @@ const QString filter_string_ba = "Intensity File (*.int *.gz *.tif *.tiff *.txt const QString filter_string_ascii = "Intensity File (*.int *.int.gz *.txt *.csv *.dat *.ascii);;" "Ascii column-wise data (*.*)"; -//! Imports for 2D or 1D data, using given loader. -//! Allocates Datafield, and returns owning pointer. -//! Currently used for all 2D, and some 1D data files. - -std::unique_ptr<Datafield> ImportKnownData(const QString& fileName, - IO::Filetype2D ftype = IO::any2D) -{ - // Try to use the canonical tools for importing data - std::unique_ptr<Datafield> result; - try { - result.reset(IO::readData2D(fileName.toStdString(), ftype)); - } catch (std::exception& ex) { - QString message = QString("Error while trying to read file\n\n'%1'\n\n%2") - .arg(fileName) - .arg(QString::fromStdString(std::string(ex.what()))); - QMessageBox::warning(nullptr, "IO Problem", message); - } - return result; -} - } // namespace @@ -61,11 +41,7 @@ QString GUI::View::ImportDataUtil::Import1dData(RealItem* realItem, IO::Filetype1D ftype = IO::filename2type1D(fileNameStdString); if (IO::isCompressed(fileNameStdString) || ftype == IO::bornagain1D) { try { - ImportDataInfo info(ImportKnownData(fileName), Coords::QSPACE); - if (info) { - realItem->setImportData(std::move(info)); - return QString(); - } + throw std::runtime_error("Unsupported case"); } catch (std::exception& ex) { // Try with CSV import ? TODO check the logic, simplify if (ftype != IO::bornagain1D || IO::isCompressed(fileNameStdString)) diff --git a/GUI/View/Import/RealDataSelectorWidget.cpp b/GUI/View/Import/RealDataSelectorWidget.cpp index 09bac31fbc8..a7928ac9a8b 100644 --- a/GUI/View/Import/RealDataSelectorWidget.cpp +++ b/GUI/View/Import/RealDataSelectorWidget.cpp @@ -286,8 +286,8 @@ void RealDataSelectorWidget::importData2D() {"TIFF (*.tif *.tiff *.tif.gz)", IO::tiff}, {"Nicos/SANSDRaw (*.001)", IO::nicos}, {"BornAgain (*.int.gz)", IO::bornagain}, - {"CSV (*.txt *.csv *.dat)", IO::any2D}, - {"All (*.*)", IO::any2D}}; + {"CSV (*.txt *.csv *.dat)", IO::csv2D}, + {"All (*.*)", IO::unknown2D}}; QString filters; for (const auto& it : filters2D) { diff --git a/auto/Wrap/libBornAgainDevice.py b/auto/Wrap/libBornAgainDevice.py index bf8d4e64969..14260aeb31e 100644 --- a/auto/Wrap/libBornAgainDevice.py +++ b/auto/Wrap/libBornAgainDevice.py @@ -2997,7 +2997,9 @@ refltab = _libBornAgainDevice.refltab mft = _libBornAgainDevice.mft -any2D = _libBornAgainDevice.any2D +unknown2D = _libBornAgainDevice.unknown2D + +csv2D = _libBornAgainDevice.csv2D bornagain = _libBornAgainDevice.bornagain @@ -3011,7 +3013,7 @@ def readData1D(*args): return _libBornAgainDevice.readData1D(*args) def readData2D(*args): - r"""readData2D(std::string const & file_name, IO::Filetype2D ftype=any2D) -> Datafield""" + r"""readData2D(std::string const & file_name, IO::Filetype2D ftype=unknown2D) -> Datafield""" return _libBornAgainDevice.readData2D(*args) def writeDatafield(data, file_name): diff --git a/auto/Wrap/libBornAgainDevice_wrap.cpp b/auto/Wrap/libBornAgainDevice_wrap.cpp index 735efdd2fba..765fca8dd4c 100644 --- a/auto/Wrap/libBornAgainDevice_wrap.cpp +++ b/auto/Wrap/libBornAgainDevice_wrap.cpp @@ -38266,7 +38266,7 @@ static PyMethodDef SwigMethods[] = { { "SphericalDetector_swigregister", SphericalDetector_swigregister, METH_O, NULL}, { "SphericalDetector_swiginit", SphericalDetector_swiginit, METH_VARARGS, NULL}, { "readData1D", _wrap_readData1D, METH_VARARGS, "readData1D(std::string const & file_name, IO::Filetype1D ftype=any1D) -> Datafield"}, - { "readData2D", _wrap_readData2D, METH_VARARGS, "readData2D(std::string const & file_name, IO::Filetype2D ftype=any2D) -> Datafield"}, + { "readData2D", _wrap_readData2D, METH_VARARGS, "readData2D(std::string const & file_name, IO::Filetype2D ftype=unknown2D) -> Datafield"}, { "writeDatafield", _wrap_writeDatafield, METH_VARARGS, "writeDatafield(Datafield data, std::string const & file_name)"}, { "filesAgree", _wrap_filesAgree, METH_VARARGS, "filesAgree(std::string const & datFileName, std::string const & refFileName, double tol) -> bool"}, { "new_SimulationResult", _wrap_new_SimulationResult, METH_VARARGS, "\n" @@ -39270,7 +39270,8 @@ SWIG_init(void) { SWIG_Python_SetConstant(d, "bornagain1D",SWIG_From_int(static_cast< int >(IO::bornagain1D))); SWIG_Python_SetConstant(d, "refltab",SWIG_From_int(static_cast< int >(IO::refltab))); SWIG_Python_SetConstant(d, "mft",SWIG_From_int(static_cast< int >(IO::mft))); - SWIG_Python_SetConstant(d, "any2D",SWIG_From_int(static_cast< int >(IO::any2D))); + SWIG_Python_SetConstant(d, "unknown2D",SWIG_From_int(static_cast< int >(IO::unknown2D))); + SWIG_Python_SetConstant(d, "csv2D",SWIG_From_int(static_cast< int >(IO::csv2D))); SWIG_Python_SetConstant(d, "bornagain",SWIG_From_int(static_cast< int >(IO::bornagain))); SWIG_Python_SetConstant(d, "tiff",SWIG_From_int(static_cast< int >(IO::tiff))); SWIG_Python_SetConstant(d, "nicos",SWIG_From_int(static_cast< int >(IO::nicos))); -- GitLab