diff --git a/Device/IO/IOFactory.cpp b/Device/IO/IOFactory.cpp index 13158eafa9b706a15468f5decc3da7971b08dda8..ab749e168f2df3dd6468149ce2c0805521f9325e 100644 --- a/Device/IO/IOFactory.cpp +++ b/Device/IO/IOFactory.cpp @@ -108,7 +108,7 @@ void stream2file(const std::string& file_name, std::stringstream& s) fout.close(); } -bool fileTypeMatchesLoaderSelector(const std::string& fileName, IO::LoaderSelector selector) +bool fileTypeMatchesFiletype2D(const std::string& fileName, IO::Filetype2D selector) { switch (selector) { case IO::bornagain: @@ -117,7 +117,7 @@ bool fileTypeMatchesLoaderSelector(const std::string& fileName, IO::LoaderSelect return DataUtil::Format::isNicosFile(fileName); case IO::tiff: return DataUtil::Format::isTiffFile(fileName); - case IO::automatic: + case IO::auto2D: return false; } @@ -127,12 +127,11 @@ bool fileTypeMatchesLoaderSelector(const std::string& fileName, IO::LoaderSelect } // namespace -Datafield* IO::readData2D(const std::string& file_name, LoaderSelector selector) +Datafield* IO::readData2D(const std::string& file_name, Filetype2D selector) { - const auto readAs = [=](LoaderSelector testForSelector) { + const auto readAs = [=](Filetype2D testForSelector) { return (selector == testForSelector) - || (selector == automatic - && ::fileTypeMatchesLoaderSelector(file_name, testForSelector)); + || (selector == auto2D && ::fileTypeMatchesFiletype2D(file_name, testForSelector)); }; auto s = ::file2stream(file_name); diff --git a/Device/IO/IOFactory.h b/Device/IO/IOFactory.h index b0848e59de1c4fa2f9e40900491a30bc63fe7a9c..35a578834ebb08efd2b06dce8b09aeb16f147829 100644 --- a/Device/IO/IOFactory.h +++ b/Device/IO/IOFactory.h @@ -21,19 +21,20 @@ class Datafield; namespace IO { -enum LoaderSelector { automatic, bornagain, tiff, nicos }; +enum Filetype2D { auto2D, bornagain, tiff, nicos }; +enum Filetype1D { auto1D, mft }; //! Reads file and returns newly created Datafield object. -//! If selector is 'automatic', then the file extension will determine the loader to be used. +//! If selector is 'auto2D', 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, LoaderSelector selector = automatic); +Datafield* readData2D(const std::string& file_name, Filetype2D selector = auto2D); Datafield* readReflectometryData(const std::string& file_name); //! Writes Datafield to file. -//! If selector is 'automatic', then the file extension will determine the loader to be used. +//! If selector is 'auto2D', 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 zipped on the fly. void writeDatafield(const Datafield& data, const std::string& file_name); diff --git a/Device/IO/ReadWriteNicos.h b/Device/IO/ReadWriteNicos.h index 9cd70c360aa3cb0c9e83a6f3ecdbabaf9b71b81d..936ba0917e24c878d47c5b80a1775fb56e250062 100644 --- a/Device/IO/ReadWriteNicos.h +++ b/Device/IO/ReadWriteNicos.h @@ -24,6 +24,6 @@ namespace Util::RW { //! Read/write SANSDRaw files written by Nicos (*.001). Datafield* readNicos(std::istream& input_stream); -}; +}; // namespace Util::RW #endif // BORNAGAIN_DEVICE_IO_READWRITENICOS_H diff --git a/GUI/View/Import/ImportDataUtil.cpp b/GUI/View/Import/ImportDataUtil.cpp index 64577c000ff79df1ff2901f3a39cebd252b7312f..3ff6ba9b703fa391d1e52796e37db124d7400edd 100644 --- a/GUI/View/Import/ImportDataUtil.cpp +++ b/GUI/View/Import/ImportDataUtil.cpp @@ -33,7 +33,7 @@ const QString filter_string_ascii = "Intensity File (*.int *.int.gz *.txt *.csv //! Currently used for all 2D, and some 1D data files. std::unique_ptr<Datafield> ImportKnownData(const QString& fileName, - IO::LoaderSelector loader = IO::automatic) + IO::Filetype2D loader = IO::auto2D) { // Try to use the canonical tools for importing data std::unique_ptr<Datafield> result; @@ -52,7 +52,7 @@ std::unique_ptr<Datafield> ImportKnownData(const QString& fileName, std::unique_ptr<Datafield> GUI::View::ImportDataUtil::Import2dData(const QString& fileName, - IO::LoaderSelector loader) + IO::Filetype2D loader) { return ImportKnownData(fileName, loader); } diff --git a/GUI/View/Import/ImportDataUtil.h b/GUI/View/Import/ImportDataUtil.h index ac931285b99b2af6b3f6afca2d4eaf7012a52af7..38ca1a1f60f6ca13509e393977dce0a2df95fece 100644 --- a/GUI/View/Import/ImportDataUtil.h +++ b/GUI/View/Import/ImportDataUtil.h @@ -29,7 +29,7 @@ class AbstractDataLoader; namespace GUI::View::ImportDataUtil { //! Imports 2D data, stores them as Datafield, and returns owning pointer. -std::unique_ptr<Datafield> Import2dData(const QString& fileName, IO::LoaderSelector loader); +std::unique_ptr<Datafield> Import2dData(const QString& fileName, IO::Filetype2D loader); //! Imports 1D data into the given item. diff --git a/GUI/View/Import/RealDataSelectorWidget.cpp b/GUI/View/Import/RealDataSelectorWidget.cpp index 5e6bdd7ff824250e661b4da89e8fb421225882a5..f6ea07d54eb55a2992cb808fb2cafa0fe92d602f 100644 --- a/GUI/View/Import/RealDataSelectorWidget.cpp +++ b/GUI/View/Import/RealDataSelectorWidget.cpp @@ -282,10 +282,10 @@ void RealDataSelectorWidget::importData1D() void RealDataSelectorWidget::importData2D() { - QMap<QString, IO::LoaderSelector> loaderOfFilter; + QMap<QString, IO::Filetype2D> loaderOfFilter; QString filters; - const auto addFilter = [&](IO::LoaderSelector loaderSelector, const QString& filter) { + const auto addFilter = [&](IO::Filetype2D loaderSelector, const QString& filter) { if (!filters.isEmpty()) filters += ";;"; filters += filter; @@ -294,8 +294,8 @@ void RealDataSelectorWidget::importData2D() addFilter(IO::tiff, "TIFF (*.tif *.tiff *.tif.gz)"); addFilter(IO::nicos, "Nicos/SANSDRaw (*.001)"); addFilter(IO::bornagain, "BornAgain (*.int.gz)"); - addFilter(IO::automatic, "CSV (*.txt *.csv *.dat)"); - addFilter(IO::automatic, "All (*.*)"); + addFilter(IO::auto2D, "CSV (*.txt *.csv *.dat)"); + addFilter(IO::auto2D, "All (*.*)"); QString selectedFilter = ProjectManager::instance()->recentlyUsedImportFilter2D(); @@ -310,7 +310,7 @@ void RealDataSelectorWidget::importData2D() ProjectManager::instance()->setImportDirFromFilePath(fileNames[0]); ProjectManager::instance()->setRecentlyUsedImportFilter2D(selectedFilter); - const auto selectedLoader = loaderOfFilter.value(selectedFilter, IO::automatic); + const auto selectedLoader = loaderOfFilter.value(selectedFilter, IO::auto2D); for (const auto& fileName : fileNames) { std::unique_ptr<Datafield> data = diff --git a/Tests/Unit/Device/ReadSANSDRawTest.cpp b/Tests/Unit/Device/ReadSANSDRawTest.cpp index 822cefa0caf527e09ba713f6615f8d2c0cb8def9..5fa6b9ee33ce3c59665e272a3a7d3760a0b9a1df 100644 --- a/Tests/Unit/Device/ReadSANSDRawTest.cpp +++ b/Tests/Unit/Device/ReadSANSDRawTest.cpp @@ -6,7 +6,7 @@ TEST(ReadSANSDRawTest, Read) { const auto fname = BATesting::ExampleDataDir() + "/SANSDRaw.001"; - Datafield* data = IO::readData2D(fname, IO::automatic); + Datafield* data = IO::readData2D(fname, IO::auto2D); EXPECT_NE(data, nullptr); if (!data) return; diff --git a/auto/Wrap/libBornAgainDevice.py b/auto/Wrap/libBornAgainDevice.py index f1df29624efdbe47619d5c77a64c483de2f4c0df..44fc50324ea0e5af7d6d7c08c3203c6edae97755 100644 --- a/auto/Wrap/libBornAgainDevice.py +++ b/auto/Wrap/libBornAgainDevice.py @@ -2989,7 +2989,7 @@ class SphericalDetector(IDetector): # Register SphericalDetector in _libBornAgainDevice: _libBornAgainDevice.SphericalDetector_swigregister(SphericalDetector) -automatic = _libBornAgainDevice.automatic +auto2D = _libBornAgainDevice.auto2D bornagain = _libBornAgainDevice.bornagain @@ -2997,10 +2997,14 @@ tiff = _libBornAgainDevice.tiff nicos = _libBornAgainDevice.nicos +auto1D = _libBornAgainDevice.auto1D -def readDatafield(*args): - r"""readDatafield(std::string const & file_name, IOFactory::LoaderSelector selector=automatic) -> Datafield""" - return _libBornAgainDevice.readDatafield(*args) +mft = _libBornAgainDevice.mft + + +def readData2D(*args): + r"""readData2D(std::string const & file_name, IO::Filetype2D selector=auto2D) -> Datafield""" + return _libBornAgainDevice.readData2D(*args) def readReflectometryData(file_name): r"""readReflectometryData(std::string const & file_name) -> Datafield""" diff --git a/auto/Wrap/libBornAgainDevice_wrap.cpp b/auto/Wrap/libBornAgainDevice_wrap.cpp index 775ab95d4f4c717489a3f55880fbacb03fb3563c..860e7ab79c5aa5f0940161aa36416327f2a8e842 100644 --- a/auto/Wrap/libBornAgainDevice_wrap.cpp +++ b/auto/Wrap/libBornAgainDevice_wrap.cpp @@ -36182,10 +36182,10 @@ SWIGINTERN PyObject *SphericalDetector_swiginit(PyObject *SWIGUNUSEDPARM(self), return SWIG_Python_InitShadowInstance(args); } -SWIGINTERN PyObject *_wrap_readDatafield__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) { +SWIGINTERN PyObject *_wrap_readData2D__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) { PyObject *resultobj = 0; std::string *arg1 = 0 ; - IOFactory::LoaderSelector arg2 ; + IO::Filetype2D arg2 ; int res1 = SWIG_OLDOBJ ; int val2 ; int ecode2 = 0 ; @@ -36196,19 +36196,19 @@ SWIGINTERN PyObject *_wrap_readDatafield__SWIG_0(PyObject *self, Py_ssize_t nobj std::string *ptr = (std::string *)0; res1 = SWIG_AsPtr_std_string(swig_obj[0], &ptr); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "readDatafield" "', argument " "1"" of type '" "std::string const &""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "readData2D" "', argument " "1"" of type '" "std::string const &""'"); } if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "readDatafield" "', argument " "1"" of type '" "std::string const &""'"); + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "readData2D" "', argument " "1"" of type '" "std::string const &""'"); } arg1 = ptr; } ecode2 = SWIG_AsVal_int(swig_obj[1], &val2); if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "readDatafield" "', argument " "2"" of type '" "IOFactory::LoaderSelector""'"); + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "readData2D" "', argument " "2"" of type '" "IO::Filetype2D""'"); } - arg2 = static_cast< IOFactory::LoaderSelector >(val2); - result = (Datafield *)IOFactory::readDatafield((std::string const &)*arg1,arg2); + arg2 = static_cast< IO::Filetype2D >(val2); + result = (Datafield *)IO::readData2D((std::string const &)*arg1,arg2); resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Datafield, 0 | 0 ); if (SWIG_IsNewObj(res1)) delete arg1; return resultobj; @@ -36218,7 +36218,7 @@ fail: } -SWIGINTERN PyObject *_wrap_readDatafield__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) { +SWIGINTERN PyObject *_wrap_readData2D__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) { PyObject *resultobj = 0; std::string *arg1 = 0 ; int res1 = SWIG_OLDOBJ ; @@ -36229,14 +36229,14 @@ SWIGINTERN PyObject *_wrap_readDatafield__SWIG_1(PyObject *self, Py_ssize_t nobj std::string *ptr = (std::string *)0; res1 = SWIG_AsPtr_std_string(swig_obj[0], &ptr); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "readDatafield" "', argument " "1"" of type '" "std::string const &""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "readData2D" "', argument " "1"" of type '" "std::string const &""'"); } if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "readDatafield" "', argument " "1"" of type '" "std::string const &""'"); + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "readData2D" "', argument " "1"" of type '" "std::string const &""'"); } arg1 = ptr; } - result = (Datafield *)IOFactory::readDatafield((std::string const &)*arg1); + result = (Datafield *)IO::readData2D((std::string const &)*arg1); resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Datafield, 0 | 0 ); if (SWIG_IsNewObj(res1)) delete arg1; return resultobj; @@ -36246,20 +36246,20 @@ fail: } -SWIGINTERN PyObject *_wrap_readDatafield(PyObject *self, PyObject *args) { +SWIGINTERN PyObject *_wrap_readData2D(PyObject *self, PyObject *args) { Py_ssize_t argc; PyObject *argv[3] = { 0 }; - if (!(argc = SWIG_Python_UnpackTuple(args, "readDatafield", 0, 2, argv))) SWIG_fail; + if (!(argc = SWIG_Python_UnpackTuple(args, "readData2D", 0, 2, argv))) SWIG_fail; --argc; if (argc == 1) { int _v = 0; int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0)); _v = SWIG_CheckState(res); if (_v) { - return _wrap_readDatafield__SWIG_1(self, argc, argv); + return _wrap_readData2D__SWIG_1(self, argc, argv); } } if (argc == 2) { @@ -36272,16 +36272,16 @@ SWIGINTERN PyObject *_wrap_readDatafield(PyObject *self, PyObject *args) { _v = SWIG_CheckState(res); } if (_v) { - return _wrap_readDatafield__SWIG_0(self, argc, argv); + return _wrap_readData2D__SWIG_0(self, argc, argv); } } } fail: - SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'readDatafield'.\n" + SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'readData2D'.\n" " Possible C/C++ prototypes are:\n" - " IOFactory::readDatafield(std::string const &,IOFactory::LoaderSelector)\n" - " IOFactory::readDatafield(std::string const &)\n"); + " IO::readData2D(std::string const &,IO::Filetype2D)\n" + " IO::readData2D(std::string const &)\n"); return 0; } @@ -36306,7 +36306,7 @@ SWIGINTERN PyObject *_wrap_readReflectometryData(PyObject *self, PyObject *args) } arg1 = ptr; } - result = (Datafield *)IOFactory::readReflectometryData((std::string const &)*arg1); + result = (Datafield *)IO::readReflectometryData((std::string const &)*arg1); resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Datafield, 0 | 0 ); if (SWIG_IsNewObj(res1)) delete arg1; return resultobj; @@ -36345,7 +36345,7 @@ SWIGINTERN PyObject *_wrap_writeDatafield(PyObject *self, PyObject *args) { } arg2 = ptr; } - IOFactory::writeDatafield((Datafield const &)*arg1,(std::string const &)*arg2); + IO::writeDatafield((Datafield const &)*arg1,(std::string const &)*arg2); resultobj = SWIG_Py_Void(); if (SWIG_IsNewObj(res2)) delete arg2; return resultobj; @@ -36395,7 +36395,7 @@ SWIGINTERN PyObject *_wrap_filesAgree(PyObject *self, PyObject *args) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "filesAgree" "', argument " "3"" of type '" "double""'"); } arg3 = static_cast< double >(val3); - result = (bool)IOUtil::filesAgree((std::string const &)*arg1,(std::string const &)*arg2,arg3); + result = (bool)Util::RW::filesAgree((std::string const &)*arg1,(std::string const &)*arg2,arg3); resultobj = SWIG_From_bool(static_cast< bool >(result)); if (SWIG_IsNewObj(res1)) delete arg1; if (SWIG_IsNewObj(res2)) delete arg2; @@ -38188,7 +38188,7 @@ static PyMethodDef SwigMethods[] = { { "SphericalDetector_indexOfSpecular", _wrap_SphericalDetector_indexOfSpecular, METH_VARARGS, "SphericalDetector_indexOfSpecular(SphericalDetector self, Beam beam) -> size_t"}, { "SphericalDetector_swigregister", SphericalDetector_swigregister, METH_O, NULL}, { "SphericalDetector_swiginit", SphericalDetector_swiginit, METH_VARARGS, NULL}, - { "readDatafield", _wrap_readDatafield, METH_VARARGS, "readDatafield(std::string const & file_name, IOFactory::LoaderSelector selector=automatic) -> Datafield"}, + { "readData2D", _wrap_readData2D, METH_VARARGS, "readData2D(std::string const & file_name, IO::Filetype2D selector=auto2D) -> Datafield"}, { "readReflectometryData", _wrap_readReflectometryData, METH_O, "readReflectometryData(std::string const & file_name) -> 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"}, @@ -39187,10 +39187,12 @@ SWIG_init(void) { SWIG_Python_SetConstant(d, "RectangularDetector_PERPENDICULAR_TO_SAMPLE",SWIG_From_int(static_cast< int >(RectangularDetector::PERPENDICULAR_TO_SAMPLE))); SWIG_Python_SetConstant(d, "RectangularDetector_PERPENDICULAR_TO_DIRECT_BEAM",SWIG_From_int(static_cast< int >(RectangularDetector::PERPENDICULAR_TO_DIRECT_BEAM))); SWIG_Python_SetConstant(d, "RectangularDetector_PERPENDICULAR_TO_REFLECTED_BEAM",SWIG_From_int(static_cast< int >(RectangularDetector::PERPENDICULAR_TO_REFLECTED_BEAM))); - SWIG_Python_SetConstant(d, "automatic",SWIG_From_int(static_cast< int >(IOFactory::automatic))); - SWIG_Python_SetConstant(d, "bornagain",SWIG_From_int(static_cast< int >(IOFactory::bornagain))); - SWIG_Python_SetConstant(d, "tiff",SWIG_From_int(static_cast< int >(IOFactory::tiff))); - SWIG_Python_SetConstant(d, "nicos",SWIG_From_int(static_cast< int >(IOFactory::nicos))); + SWIG_Python_SetConstant(d, "auto2D",SWIG_From_int(static_cast< int >(IO::auto2D))); + 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))); + SWIG_Python_SetConstant(d, "auto1D",SWIG_From_int(static_cast< int >(IO::auto1D))); + SWIG_Python_SetConstant(d, "mft",SWIG_From_int(static_cast< int >(IO::mft))); #if PY_VERSION_HEX >= 0x03000000 return m; #else