34 #pragma warning(disable : 4244 4275)
44 return (selector == testForSelector)
55 else if (readAs(
nicos))
58 #ifdef BA_TIFF_SUPPORT
59 else if (readAs(
tiff))
61 [](std::istream& s) {
return ReadWriteTiff().readDatafield(s); });
85 #ifdef BA_TIFF_SUPPORT
88 [&](std::ostream& s) { ReadWriteTiff().writeDatafield(data, s); });
96 std::function<
void(std::ostream&)> writeData)
101 std::ios_base::openmode openmode = std::ios::out;
103 openmode = std::ios::out | std::ios_base::binary;
108 fout.open(file_name, openmode);
112 throw std::runtime_error(
"Cannot open file for writing: " + file_name);
114 throw std::runtime_error(
"File is not good, probably it is a directory: " + file_name);
115 std::stringstream ss;
118 boost::iostreams::filtering_streambuf<boost::iostreams::input> input_filtered;
120 input_filtered.push(boost::iostreams::gzip_compressor());
122 input_filtered.push(boost::iostreams::bzip2_compressor());
123 input_filtered.push(ss);
125 boost::iostreams::copy(input_filtered, fout);
153 std::function<
Datafield*(std::istream&)> readData)
156 throw std::runtime_error(
"File does not exist: " + file_name);
159 std::ifstream input_stream;
160 std::ios_base::openmode openmode = std::ios::in;
162 openmode = std::ios::in | std::ios_base::binary;
167 input_stream.open(file_name, openmode);
170 if (!input_stream.is_open())
171 throw std::runtime_error(
"Cannot open file for reading: " + file_name);
172 if (!input_stream.good())
173 throw std::runtime_error(
"File is not good, probably it is a directory:" + file_name);
175 boost::iostreams::filtering_streambuf<boost::iostreams::input> input_filtered;
177 input_filtered.push(boost::iostreams::gzip_decompressor());
179 input_filtered.push(boost::iostreams::bzip2_decompressor());
180 input_filtered.push(input_stream);
182 std::stringstream str;
183 boost::iostreams::copy(input_filtered, str);
185 return readData(str);
191 std::unique_ptr<Datafield> datDat;
194 }
catch (
const std::runtime_error& ex) {
195 std::cerr <<
"File comparison: Could not read data from file " << datFileName
196 <<
". Runtime error: " << ex.what() << std::endl;
197 }
catch (
const std::exception& ex) {
198 std::cerr <<
"File comparison: Could not read data from file " << datFileName
199 <<
". Exception: " << ex.what() << std::endl;
201 std::cerr <<
"File comparison: Could not read data from file " << datFileName
202 <<
". Unknown exception." << std::endl;
207 std::unique_ptr<Datafield> refDat;
211 std::cerr <<
"File comparison: Could not read reference data from file " << refFileName
Defines the macro ASSERT.
#define ASSERT(condition)
Defines namespace DataUtils.
Defines namespace FileSystemUtils.
Defines ReadReflectometry.
Defines function IO::readNicosData.
Defines ReadWriteNumpyTXT.
Defines class ReadWriteTiff.
Defines class SimulationResult.
Contains boost streams related headers.
Stores radiation power per bin.
static bool fileTypeMatchesLoaderSelector(const std::string &fileName, LoaderSelector selector)
static void writeSimulationResult(const SimulationResult &result, const std::string &file_name)
Writes Datafield contained in the given SimulationResult object.
static void writeDatafield(const Datafield &data, const std::string &file_name)
Writes Datafield in file.
static Datafield * readReflectometryData(const std::string &file_name)
static Datafield * readDatafield(const std::string &file_name, LoaderSelector selector=automatic)
Reads file and returns newly created Datafield object. If selector is automatic, then the file extens...
Class for reading reflectometry data from ASCII file.
Datafield * readDatafield(std::istream &inStream)
Class for reading and writing BornAgain native IntensityData from ASCII file.
Datafield * readDatafield(std::istream &input_stream)
void writeDatafield(const Datafield &data, std::ostream &output_stream)
Class for reading and writing Datafield from simple ASCII file with the layout as in numpy....
void writeDatafield(const Datafield &data, std::ostream &output_stream)
Datafield * readDatafield(std::istream &input_stream)
Wrapper around Datafield that also provides unit conversions.
Datafield * datafield(Coords units=Coords::UNDEFINED) const
std::wstring convert_utf8_to_utf16(const std::string &str)
Converts utf8 string represented by std::string to utf16 string represented by std::wstring.
bool IsFileExists(const std::string &path)
Returns true if file with given name exists on disk.
bool checkRelativeDifference(const std::vector< double > &dat, const std::vector< double > &ref, double threshold)
Returns true is relative difference is below threshold; prints informative output.
bool filesAgree(const std::string &datFileName, const std::string &refFileName, double tol)
Returns true if data in both files agree.
Datafield * readNicosData(std::istream &input_stream)