diff --git a/Framework/DataHandling/test/LoadEmptyInstrumentTest.h b/Framework/DataHandling/test/LoadEmptyInstrumentTest.h index 1c2f93c517f9b3b685570f6ada260dcaa5516ff2..79eabc9f886c063d638a387dcfd1e7d2e1f575e2 100644 --- a/Framework/DataHandling/test/LoadEmptyInstrumentTest.h +++ b/Framework/DataHandling/test/LoadEmptyInstrumentTest.h @@ -1043,6 +1043,33 @@ public: TS_ASSERT_EQUALS(1, detectorInfo.detectorIDs()[1]) } + void test_compare_wish_idf_vs_nexus() { + // Now rerun + LoadEmptyInstrument alg; + alg.setChild(true); + alg.initialize(); + alg.setPropertyValue("Filename", "WISH_Definition_10Panels.hdf5"); + alg.setPropertyValue("OutputWorkspace", "dummy"); + alg.execute(); + Mantid::API::MatrixWorkspace_sptr wish_nexus = + alg.getProperty("OutputWorkspace"); + + // Now re-run + alg.setPropertyValue("Filename", "WISH_Definition_10Panels.xml"); + alg.execute(); + Mantid::API::MatrixWorkspace_sptr wish_xml = + alg.getProperty("OutputWorkspace"); + + const auto &wish_nexus_detinfo = wish_nexus->detectorInfo(); + const auto &wish_xml_detinfo = wish_xml->detectorInfo(); + TS_ASSERT_EQUALS(wish_nexus_detinfo.size(), wish_xml_detinfo.size()); + for (size_t i = 0; i < wish_nexus_detinfo.size(); ++i) { + TSM_ASSERT_EQUALS("Detector position mismatch", + wish_nexus_detinfo.position(i), + wish_xml_detinfo.position(i)); + } + } + private: std::string inputFile; std::string wsName; diff --git a/Framework/NexusGeometry/src/NexusGeometryParser.cpp b/Framework/NexusGeometry/src/NexusGeometryParser.cpp index 2d6c7547da73266087a95ecf019ce3c6502efb27..7e7b82c64f4d57f74855d50348723c7f14256577 100644 --- a/Framework/NexusGeometry/src/NexusGeometryParser.cpp +++ b/Framework/NexusGeometry/src/NexusGeometryParser.cpp @@ -578,7 +578,8 @@ void parseAndAddSample(const H5File &file, const Group &root, builder.addSample(sampleName, samplePos); } -void parseMonitors(const H5::Group &root, InstrumentBuilder &builder) { +void parseMonitors(const H5File &file, const H5::Group &root, + InstrumentBuilder &builder) { std::vector<Group> rawDataGroupPaths = openSubGroups(root, NX_ENTRY); // Open all instrument groups within rawDataGroups @@ -591,9 +592,10 @@ void parseMonitors(const H5::Group &root, InstrumentBuilder &builder) { auto detectorId = get1DDataset<int64_t>(DETECTOR_ID, monitor)[0]; bool proxy = false; auto monitorShape = parseNexusShape(monitor, proxy); - builder.addMonitor(std::to_string(detectorId), - static_cast<int32_t>(detectorId), - Eigen::Vector3d{0, 0, 0}, monitorShape); + auto monitorTransforms = getTransformations(file, monitor); + builder.addMonitor( + std::to_string(detectorId), static_cast<int32_t>(detectorId), + monitorTransforms * Eigen::Vector3d{0, 0, 0}, monitorShape); } } } @@ -652,7 +654,7 @@ extractInstrument(const H5File &file, const Group &root) { // Parse source and sample and add to instrument parseAndAddSample(file, root, builder); parseAndAddSource(file, root, builder); - parseMonitors(root, builder); + parseMonitors(file, root, builder); return builder.createInstrument(); } } // namespace