Skip to content
Snippets Groups Projects
Unverified Commit a932adce authored by Gigg, Martyn Anthony's avatar Gigg, Martyn Anthony Committed by GitHub
Browse files

Merge pull request #28225 from mantidproject/detector_count

Determine the total number of detectors used in the spectrum info
parents 419191fb 302c2882
No related branches found
No related tags found
No related merge requests found
...@@ -56,6 +56,7 @@ public: ...@@ -56,6 +56,7 @@ public:
~SpectrumInfo(); ~SpectrumInfo();
size_t size() const; size_t size() const;
size_t detectorCount() const;
const SpectrumDefinition &spectrumDefinition(const size_t index) const; const SpectrumDefinition &spectrumDefinition(const size_t index) const;
const Kernel::cow_ptr<std::vector<SpectrumDefinition>> & const Kernel::cow_ptr<std::vector<SpectrumDefinition>> &
......
...@@ -59,6 +59,8 @@ public: ...@@ -59,6 +59,8 @@ public:
return m_spectrumInfo->hasUniqueDetector(m_index); return m_spectrumInfo->hasUniqueDetector(m_index);
} }
bool hasDetectors() const { return m_spectrumInfo->hasDetectors(m_index); }
const Mantid::SpectrumDefinition &spectrumDefinition() const { const Mantid::SpectrumDefinition &spectrumDefinition() const {
return m_spectrumInfo->spectrumDefinition(m_index); return m_spectrumInfo->spectrumDefinition(m_index);
} }
......
...@@ -33,6 +33,10 @@ SpectrumInfo::~SpectrumInfo() = default; ...@@ -33,6 +33,10 @@ SpectrumInfo::~SpectrumInfo() = default;
/// Returns the size of the SpectrumInfo, i.e., the number of spectra. /// Returns the size of the SpectrumInfo, i.e., the number of spectra.
size_t SpectrumInfo::size() const { return m_spectrumInfo.size(); } size_t SpectrumInfo::size() const { return m_spectrumInfo.size(); }
size_t SpectrumInfo::detectorCount() const {
return m_spectrumInfo.detectorCount();
}
/// Returns a const reference to the SpectrumDefinition of the spectrum. /// Returns a const reference to the SpectrumDefinition of the spectrum.
const SpectrumDefinition & const SpectrumDefinition &
SpectrumInfo::spectrumDefinition(const size_t index) const { SpectrumInfo::spectrumDefinition(const size_t index) const {
......
...@@ -46,6 +46,7 @@ public: ...@@ -46,6 +46,7 @@ public:
Kernel::cow_ptr<std::vector<SpectrumDefinition>> spectrumDefinition); Kernel::cow_ptr<std::vector<SpectrumDefinition>> spectrumDefinition);
size_t size() const; size_t size() const;
size_t detectorCount() const;
const SpectrumDefinition &spectrumDefinition(const size_t index) const; const SpectrumDefinition &spectrumDefinition(const size_t index) const;
void setSpectrumDefinition(const size_t index, SpectrumDefinition def); void setSpectrumDefinition(const size_t index, SpectrumDefinition def);
......
...@@ -26,6 +26,15 @@ size_t SpectrumInfo::size() const { ...@@ -26,6 +26,15 @@ size_t SpectrumInfo::size() const {
return m_spectrumDefinition->size(); return m_spectrumDefinition->size();
} }
/// Return count of all detectors used within spectrum
size_t SpectrumInfo::detectorCount() const {
size_t count = 0;
for (const auto &spec : *m_spectrumDefinition) {
count += spec.size();
}
return count;
}
/// Returns a const reference to the SpectrumDefinition of the spectrum. /// Returns a const reference to the SpectrumDefinition of the spectrum.
const SpectrumDefinition & const SpectrumDefinition &
SpectrumInfo::spectrumDefinition(const size_t index) const { SpectrumInfo::spectrumDefinition(const size_t index) const {
......
...@@ -107,4 +107,17 @@ public: ...@@ -107,4 +107,17 @@ public:
(std::pair<size_t, size_t>(i, 0))); (std::pair<size_t, size_t>(i, 0)));
} }
} }
void test_detectorCount() {
SpectrumDefinition def1;
def1.add(1);
def1.add(2);
SpectrumDefinition def2;
def2.add(1);
SpectrumInfo info{2};
info.setSpectrumDefinition(0, def1);
info.setSpectrumDefinition(1, def2);
TS_ASSERT_EQUALS(info.size(), 2);
TS_ASSERT_EQUALS(info.detectorCount(), 3);
}
}; };
...@@ -76,5 +76,7 @@ void export_SpectrumInfo() { ...@@ -76,5 +76,7 @@ void export_SpectrumInfo() {
.def("getSpectrumDefinition", &SpectrumInfo::spectrumDefinition, .def("getSpectrumDefinition", &SpectrumInfo::spectrumDefinition,
return_value_policy<return_by_value>(), (arg("self"), arg("index")), return_value_policy<return_by_value>(), (arg("self"), arg("index")),
"Returns the SpectrumDefinition of the spectrum with the given " "Returns the SpectrumDefinition of the spectrum with the given "
"index."); "index.")
.def("detectorCount", &SpectrumInfo::detectorCount, arg("self"),
"Returns the total number of detectors used across spectrum info.");
} }
...@@ -27,6 +27,8 @@ void export_SpectrumInfoItem() { ...@@ -27,6 +27,8 @@ void export_SpectrumInfoItem() {
.add_property("signedTwoTheta", .add_property("signedTwoTheta",
&SpectrumInfoItem<SpectrumInfo>::signedTwoTheta) &SpectrumInfoItem<SpectrumInfo>::signedTwoTheta)
.add_property("l2", &SpectrumInfoItem<SpectrumInfo>::l2) .add_property("l2", &SpectrumInfoItem<SpectrumInfo>::l2)
.add_property("hasDetectors",
&SpectrumInfoItem<SpectrumInfo>::hasDetectors)
.add_property("hasUniqueDetector", .add_property("hasUniqueDetector",
&SpectrumInfoItem<SpectrumInfo>::hasUniqueDetector) &SpectrumInfoItem<SpectrumInfo>::hasUniqueDetector)
.add_property( .add_property(
......
...@@ -40,6 +40,13 @@ class SpectrumInfoTest(unittest.TestCase): ...@@ -40,6 +40,13 @@ class SpectrumInfoTest(unittest.TestCase):
info = self._ws.spectrumInfo() info = self._ws.spectrumInfo()
self.assertEqual(info.size(), 3) self.assertEqual(info.size(), 3)
def test_detectorCount(self):
""" Check total detector count """
info = self._ws.spectrumInfo()
# One detector cleared. So not counted.
self.assertEqual(info.detectorCount(), 2)
def test_isMonitor(self): def test_isMonitor(self):
""" Check if a monitor is present. """ """ Check if a monitor is present. """
info = self._ws.spectrumInfo() info = self._ws.spectrumInfo()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment