Skip to content

Commit 5c44061

Browse files
NeXusFile slow roll, take it easy -- ornl-next (#39258)
NeXusFile slow roll, take it easy (#39245) * simple changes * nx compression * east const repr * east const repr * Save progress * some file changes * tests * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * actual useful advice from cppcheck -- first time ever! * let's try that again * comeon cppcheck * save progress * dumb enum * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * this compiled locally * cmon man * uncomment lines from cmake * i'm dumb * finalize * fixup! finalize * shut up cppcheck * windows is a fake operating system that is unfit for scientific computing * i hate you windows * windows is stupid and doesn't understand constant pointers --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent fdbec10 commit 5c44061

30 files changed

+650
-486
lines changed

Framework/DataHandling/inc/MantidDataHandling/SaveNexusProcessed.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,10 @@ class MANTID_DATAHANDLING_DLL SaveNexusProcessed : public API::Algorithm {
5353

5454
void saveSpectraDetectorMapNexus(const API::MatrixWorkspace &ws, ::NeXus::File *file,
5555
const std::vector<int> &wsIndices,
56-
const ::NeXus::NXcompression compression = ::NeXus::LZW) const;
56+
const NXcompression compression = NXcompression::LZW) const;
5757

5858
void saveSpectrumNumbersNexus(const API::MatrixWorkspace &ws, ::NeXus::File *file, const std::vector<int> &wsIndices,
59-
const ::NeXus::NXcompression compression = ::NeXus::LZW) const;
59+
const NXcompression compression = NXcompression::LZW) const;
6060

6161
virtual bool saveLegacyInstrument() { return true; }
6262

Framework/DataHandling/inc/MantidDataHandling/SaveNexusProcessedHelper.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ class MANTID_DATAHANDLING_DLL NexusFileIO {
9090
/// C++ API file handle
9191
std::shared_ptr<::NeXus::File> m_filehandle;
9292
/// Nexus compression method
93-
::NeXus::NXcompression m_nexuscompression;
93+
NXcompression m_nexuscompression;
9494
/// Allow an externally supplied progress object to be used
9595
API::Progress *m_progress;
9696
/// Write a simple value plus possible attributes

Framework/DataHandling/src/LoadEventNexus.cpp

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -337,24 +337,18 @@ void LoadEventNexus::setTopEntryName() {
337337
return;
338338
}
339339

340-
try {
341-
while (true) {
342-
const auto entry = m_file->getNextEntry();
343-
if (entry.second == "NXentry") {
344-
if ((entry.first == "entry") || (entry.first == "raw_data_1")) {
345-
m_top_entry_name = entry.first;
346-
break;
347-
}
348-
} else if (entry == ::NeXus::EOD_ENTRY) {
349-
g_log.error() << "Unable to determine name of top level NXentry - assuming "
350-
"\"entry\".\n";
351-
m_top_entry_name = "entry";
352-
break;
353-
}
340+
std::string firstGoodEntry("");
341+
std::set<std::string> goodEntries{"entry", "raw_data_1"};
342+
auto allEntries = m_file->getEntries();
343+
for (std::string goodEntry : goodEntries) {
344+
if (allEntries.count(goodEntry) != 0 && allEntries[goodEntry] != "SDS") {
345+
firstGoodEntry = goodEntry;
346+
break;
354347
}
355-
} catch (const std::exception &) {
356-
g_log.error() << "Unable to determine name of top level NXentry - assuming "
357-
"\"entry\".\n";
348+
}
349+
m_top_entry_name = firstGoodEntry;
350+
if (m_top_entry_name.empty()) {
351+
g_log.error() << "Unable to determine name of top level NXentry - assuming \"entry\".\n";
358352
m_top_entry_name = "entry";
359353
}
360354
}

Framework/DataHandling/src/SaveNexusProcessed.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -305,16 +305,16 @@ void SaveNexusProcessed::doExec(const Workspace_sptr &inputWorkspace,
305305
workspaceTypeGroupName = "workspace";
306306

307307
nexusFile->writeNexusProcessedData2D(matrixWorkspace, uniformSpectra, raggedSpectra, indices,
308-
workspaceTypeGroupName, true);
308+
workspaceTypeGroupName.c_str(), true);
309309
}
310310

311311
if (saveLegacyInstrument()) {
312312
nexusFile->filehandle()->openGroup("instrument", "NXinstrument");
313313
nexusFile->filehandle()->makeGroup("detector", "NXdetector", true);
314314

315315
nexusFile->filehandle()->putAttr("version", 1);
316-
saveSpectraDetectorMapNexus(*matrixWorkspace, nexusFile->filehandle().get(), indices, ::NeXus::LZW);
317-
saveSpectrumNumbersNexus(*matrixWorkspace, nexusFile->filehandle().get(), indices, ::NeXus::LZW);
316+
saveSpectraDetectorMapNexus(*matrixWorkspace, nexusFile->filehandle().get(), indices, NXcompression::LZW);
317+
saveSpectrumNumbersNexus(*matrixWorkspace, nexusFile->filehandle().get(), indices, NXcompression::LZW);
318318
nexusFile->filehandle()->closeGroup();
319319
nexusFile->filehandle()->closeGroup();
320320
}
@@ -559,7 +559,7 @@ bool SaveNexusProcessed::processGroups() {
559559
*/
560560
void SaveNexusProcessed::saveSpectraDetectorMapNexus(const MatrixWorkspace &ws, ::NeXus::File *file,
561561
const std::vector<int> &wsIndices,
562-
const ::NeXus::NXcompression compression) const {
562+
const NXcompression compression) const {
563563

564564
std::vector<int32_t> detector_index;
565565
std::vector<int32_t> detector_count;
@@ -624,7 +624,7 @@ void SaveNexusProcessed::saveSpectraDetectorMapNexus(const MatrixWorkspace &ws,
624624
*/
625625
void SaveNexusProcessed::saveSpectrumNumbersNexus(const API::MatrixWorkspace &ws, ::NeXus::File *file,
626626
const std::vector<int> &wsIndices,
627-
const ::NeXus::NXcompression compression) const {
627+
const NXcompression compression) const {
628628
const auto numberSpec = int(wsIndices.size());
629629
std::vector<int32_t> spectra;
630630
spectra.reserve(static_cast<size_t>(numberSpec));

Framework/DataHandling/src/SaveNexusProcessedHelper.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,12 @@ Logger g_log("NexusFileIO");
4545
} // namespace
4646

4747
/// Empty default constructor
48-
NexusFileIO::NexusFileIO() : m_filehandle(), m_nexuscompression(::NeXus::LZW), m_progress(nullptr), m_filename() {}
48+
NexusFileIO::NexusFileIO()
49+
: m_filehandle(), m_nexuscompression(NXcompression::LZW), m_progress(nullptr), m_filename() {}
4950

5051
/// Constructor that supplies a progress object
5152
NexusFileIO::NexusFileIO(Progress *prog)
52-
: m_filehandle(), m_nexuscompression(::NeXus::LZW), m_progress(prog), m_filename() {}
53+
: m_filehandle(), m_nexuscompression(NXcompression::LZW), m_progress(prog), m_filename() {}
5354

5455
void NexusFileIO::resetProgress(Progress *prog) { m_progress = prog; }
5556

@@ -97,8 +98,7 @@ void NexusFileIO::openNexusWrite(const std::string &fileName, NexusFileIO::optio
9798

9899
else {
99100
if (fileName.find(".xml") < fileName.size() || fileName.find(".XML") < fileName.size()) {
100-
mode = NXACC_CREATEXML;
101-
m_nexuscompression = ::NeXus::NONE;
101+
throw Exception::FileError("Cannot save XML files", fileName);
102102
}
103103
mantidEntryName = "mantid_workspace_1";
104104
}
@@ -225,8 +225,8 @@ void _writeChunkedData(std::shared_ptr<::NeXus::File> dest, // Must have open gr
225225
const std::string &name,
226226
std::shared_ptr<const WS> src, // Do not pass std::shared_ptr<..> by reference!
227227
const std::vector<int> &indices, _VAccessor<V, WS> vData, bool raggedSpectra = false,
228-
::NeXus::NXcompression compressionType = ::NeXus::NXcompression::NONE,
229-
double fillValue = _DEFAULT_FILL_VALUE, bool closeData = true) {
228+
NXcompression compressionType = NXcompression::NONE, double fillValue = _DEFAULT_FILL_VALUE,
229+
bool closeData = true) {
230230

231231
const size_t N_chunk = indices.size(); // number of spectra
232232

@@ -380,8 +380,8 @@ int NexusFileIO::writeNexusProcessedData2D(const API::MatrixWorkspace_const_sptr
380380

381381
} else {
382382
_writeChunkedData<HistogramX, MatrixWorkspace>(
383-
m_filehandle, "axis1", localworkspace, indices, &MatrixWorkspace::x, raggedSpectra,
384-
::NeXus::NXcompression::NONE, raggedSpectra ? std::numeric_limits<double>::quiet_NaN() : _DEFAULT_FILL_VALUE,
383+
m_filehandle, "axis1", localworkspace, indices, &MatrixWorkspace::x, raggedSpectra, NXcompression::NONE,
384+
raggedSpectra ? std::numeric_limits<double>::quiet_NaN() : _DEFAULT_FILL_VALUE,
385385
false // don't close the dataset
386386
);
387387
}
@@ -587,7 +587,7 @@ int NexusFileIO::writeNexusTableWorkspace(const API::ITableWorkspace_const_sptr
587587
writeTableColumn<bool, bool>(NXnumtype::UINT8, "", *col, str);
588588
} else if (col->isType<std::string>()) {
589589
// determine max string size
590-
size_t maxStr = 0;
590+
std::size_t maxStr = 0;
591591
for (int ii = 0; ii < nRows; ii++) {
592592
if (col->cell<std::string>(ii).size() > maxStr)
593593
maxStr = col->cell<std::string>(ii).size();
@@ -600,7 +600,7 @@ int NexusFileIO::writeNexusTableWorkspace(const API::ITableWorkspace_const_sptr
600600
const ::NeXus::DimVector dims_array = {nRows, static_cast<::NeXus::dimsize_t>(maxStr)};
601601
const ::NeXus::DimSizeVector asize = {1, dims_array[1]};
602602

603-
m_filehandle->makeCompData(str, NXnumtype::CHAR, dims_array, ::NeXus::LZW, asize);
603+
m_filehandle->makeCompData(str, NXnumtype::CHAR, dims_array, NXcompression::LZW, asize);
604604

605605
m_filehandle->openData(str);
606606
auto toNexus = new char[maxStr * nRows];

Framework/DataHandling/test/SaveNexusProcessedTest.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1007,7 +1007,7 @@ class SaveNexusProcessedTest : public CxxTest::TestSuite {
10071007
wsIndex.emplace_back(i);
10081008
}
10091009
SaveNexusProcessed alg;
1010-
TS_ASSERT_THROWS_NOTHING(alg.saveSpectraDetectorMapNexus(*ws, th.file.get(), wsIndex, ::NeXus::LZW);)
1010+
TS_ASSERT_THROWS_NOTHING(alg.saveSpectraDetectorMapNexus(*ws, th.file.get(), wsIndex, NXcompression::LZW);)
10111011
TS_ASSERT_THROWS_NOTHING(th.file->openData("detector_index"))
10121012
std::vector<int32_t> data;
10131013
TS_ASSERT_THROWS_NOTHING(th.file->getData(data))
@@ -1042,7 +1042,7 @@ class SaveNexusProcessedTest : public CxxTest::TestSuite {
10421042
wsIndex.emplace_back(i);
10431043
}
10441044
SaveNexusProcessed alg;
1045-
TS_ASSERT_THROWS_NOTHING(alg.saveSpectrumNumbersNexus(*ws, th.file.get(), wsIndex, ::NeXus::LZW);)
1045+
TS_ASSERT_THROWS_NOTHING(alg.saveSpectrumNumbersNexus(*ws, th.file.get(), wsIndex, NXcompression::LZW);)
10461046
TS_ASSERT_THROWS_NOTHING(th.file->openData("spectra"))
10471047
std::vector<int32_t> data;
10481048
TS_ASSERT_THROWS_NOTHING(th.file->getData(data))

Framework/DataObjects/src/BoxControllerNeXusIO.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -237,14 +237,14 @@ void BoxControllerNeXusIO::prepareNxSToWrite_CurVersion() {
237237

238238
// Now the chunk size.
239239
// m_Blocksize == (number_events_to_write_at_a_time, data_items_per_event)
240-
std::vector<int64_t> chunk(m_BlockSize);
241-
chunk[0] = static_cast<int64_t>(m_dataChunk);
240+
::NeXus::DimSizeVector chunk(m_BlockSize);
241+
chunk[0] = static_cast<::NeXus::dimsize_t>(m_dataChunk);
242242

243243
// Make and open the data
244244
if (m_CoordSize == 4)
245-
m_File->makeCompData("event_data", NXnumtype::FLOAT32, m_BlockSize, ::NeXus::NONE, chunk, true);
245+
m_File->makeCompData("event_data", NXnumtype::FLOAT32, m_BlockSize, NXcompression::NONE, chunk, true);
246246
else
247-
m_File->makeCompData("event_data", NXnumtype::FLOAT64, m_BlockSize, ::NeXus::NONE, chunk, true);
247+
m_File->makeCompData("event_data", NXnumtype::FLOAT64, m_BlockSize, NXcompression::NONE, chunk, true);
248248

249249
// A little bit of description for humans to read later
250250
m_File->putAttr("description", m_EventsTypeHeaders[m_EventType]);
@@ -296,9 +296,9 @@ void BoxControllerNeXusIO::getDiskBufferFileData() {
296296
freeSpaceBlocks.resize(2, 0); // Needs a minimum size
297297

298298
// // Get a vector of the free space blocks to save to the file
299-
std::vector<int64_t> free_dims(2, 2);
299+
::NeXus::DimVector free_dims(2, 2);
300300
free_dims[0] = int64_t(freeSpaceBlocks.size() / 2);
301-
std::vector<int64_t> free_chunk(2, 2);
301+
::NeXus::DimSizeVector free_chunk(2, 2);
302302
free_chunk[0] = int64_t(m_dataChunk);
303303

304304
std::map<std::string, std::string> groupEntries;

Framework/DataObjects/src/LeanElasticPeaksWorkspace.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -595,7 +595,7 @@ void LeanElasticPeaksWorkspace::saveNexus(::NeXus::File *file) const {
595595
file->closeData();
596596

597597
// Shape
598-
std::vector<int64_t> dims;
598+
::NeXus::DimVector dims;
599599
dims.emplace_back(np);
600600
dims.emplace_back(static_cast<int>(maxShapeJSONLength));
601601
const std::string name = "column_14";

Framework/DataObjects/src/MDBoxFlatTree.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -235,18 +235,18 @@ void MDBoxFlatTree::saveBoxStructure(::NeXus::File *hFile) {
235235
hFile->putAttr("box_controller_xml", m_bcXMLDescr);
236236
}
237237

238-
std::vector<int64_t> exents_dims(2, 0);
239-
exents_dims[0] = (int64_t(maxBoxes));
238+
::NeXus::DimVector exents_dims(2, 0);
239+
exents_dims[0] = (::NeXus::dimsize_t(maxBoxes));
240240
exents_dims[1] = (m_nDim * 2);
241-
std::vector<int64_t> exents_chunk(2, 0);
242-
exents_chunk[0] = int64_t(16384);
241+
::NeXus::DimVector exents_chunk(2, 0);
242+
exents_chunk[0] = ::NeXus::dimsize_t(16384);
243243
exents_chunk[1] = (m_nDim * 2);
244244

245-
std::vector<int64_t> box_2_dims(2, 0);
246-
box_2_dims[0] = int64_t(maxBoxes);
245+
::NeXus::DimVector box_2_dims(2, 0);
246+
box_2_dims[0] = ::NeXus::dimsize_t(maxBoxes);
247247
box_2_dims[1] = (2);
248-
std::vector<int64_t> box_2_chunk(2, 0);
249-
box_2_chunk[0] = int64_t(16384);
248+
::NeXus::DimVector box_2_chunk(2, 0);
249+
box_2_chunk[0] = ::NeXus::dimsize_t(16384);
250250
box_2_chunk[1] = (2);
251251

252252
if (create) {

Framework/DataObjects/src/PeaksWorkspace.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -890,7 +890,7 @@ void PeaksWorkspace::saveNexus(::NeXus::File *file) const {
890890
file->closeData();
891891

892892
// Shape
893-
std::vector<int64_t> dims;
893+
::NeXus::DimVector dims;
894894
dims.emplace_back(np);
895895
dims.emplace_back(static_cast<int>(maxShapeJSONLength));
896896
const std::string name = "column_16";

0 commit comments

Comments
 (0)