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