From 62f356598da8985361d62d2e3a1c4fad6a1fd0ec Mon Sep 17 00:00:00 2001 From: Dmitry Yurov <d.yurov@fz-juelich.de> Date: Tue, 21 Nov 2017 15:40:27 +0100 Subject: [PATCH] Enabled IDetector in SimulationArea Redmine: #1895 --- Core/Instrument/IDetector2D.cpp | 7 ++----- Core/Instrument/SimulationArea.cpp | 24 +++++++++++++----------- Core/Instrument/SimulationArea.h | 11 ++++++----- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/Core/Instrument/IDetector2D.cpp b/Core/Instrument/IDetector2D.cpp index 3f20aeac080..ce3f9b94fa7 100644 --- a/Core/Instrument/IDetector2D.cpp +++ b/Core/Instrument/IDetector2D.cpp @@ -147,13 +147,10 @@ SimulationElement IDetector2D::getSimulationElement(size_t index, const Beam &be size_t IDetector2D::numberOfSimulationElements() const { size_t result(0); - try { + if (this->dimension() != 0) { SimulationArea area(this); - for(SimulationArea::iterator it = area.begin(); it!=area.end(); ++it) + for (SimulationArea::iterator it = area.begin(); it != area.end(); ++it) ++result; - } catch (Exceptions::RuntimeErrorException e) - { - (void)e; // do nothing, just return zero } return result; } diff --git a/Core/Instrument/SimulationArea.cpp b/Core/Instrument/SimulationArea.cpp index 8833ac3a3f0..3a62e449366 100644 --- a/Core/Instrument/SimulationArea.cpp +++ b/Core/Instrument/SimulationArea.cpp @@ -14,25 +14,26 @@ // ************************************************************************** // #include "SimulationArea.h" -#include "IDetector2D.h" +#include "IDetector.h" #include "Exceptions.h" +#include "DetectorMask.h" #include "Rectangle.h" #include "IntensityDataFunctions.h" #include "BornAgainNamespace.h" #include "RegionOfInterest.h" #include <sstream> -SimulationArea::SimulationArea(const IDetector2D* detector) +SimulationArea::SimulationArea(const IDetector* detector) : m_detector(detector) , m_max_index(0) { - if(m_detector==nullptr) - throw Exceptions::RuntimeErrorException("SimulationArea::SimulationArea: nullpointer passed" - " as detector"); + if (m_detector == nullptr) + throw std::runtime_error("SimulationArea::SimulationArea: null pointer passed" + " as detector"); - if (m_detector->dimension()!=2) - throw Exceptions::RuntimeErrorException( - "SimulationArea::SimulationArea: detector is not two-dimensional"); + if (m_detector->dimension() == 0) + throw std::runtime_error( + "SimulationArea::SimulationArea: detector of unspecified dimensionality"); if(m_detector->regionOfInterest()) m_max_index = m_detector->regionOfInterest()->roiSize(); @@ -56,10 +57,11 @@ bool SimulationArea::isMasked(size_t index) const std::ostringstream message; message << "SimulationArea::isActive: index " << index << " is out of range, " << "total size = " << totalSize(); - throw Exceptions::RuntimeErrorException(message.str()); + throw std::runtime_error(message.str()); } - return m_detector->detectorMask()->isMasked(detectorIndex(index)); + return (m_detector->detectorMask() + && m_detector->detectorMask()->isMasked(detectorIndex(index))); } size_t SimulationArea::roiIndex(size_t index) const @@ -77,7 +79,7 @@ size_t SimulationArea::detectorIndex(size_t index) const // -------------------------------------------------------------------------------------- -SimulationRoiArea::SimulationRoiArea(const IDetector2D *detector) +SimulationRoiArea::SimulationRoiArea(const IDetector *detector) : SimulationArea(detector) {} diff --git a/Core/Instrument/SimulationArea.h b/Core/Instrument/SimulationArea.h index 06dda609a64..c51909383f2 100644 --- a/Core/Instrument/SimulationArea.h +++ b/Core/Instrument/SimulationArea.h @@ -18,7 +18,8 @@ #include "WinDllMacros.h" #include "SimulationAreaIterator.h" -class IDetector2D; + +class IDetector; //! Holds iteration logic over active detector channels in the presence of masked areas //! and RegionOfInterest defined. @@ -28,13 +29,13 @@ class BA_CORE_API_ SimulationArea { public: using iterator = SimulationAreaIterator; - explicit SimulationArea(const IDetector2D* detector); + explicit SimulationArea(const IDetector* detector); virtual ~SimulationArea() {} SimulationAreaIterator begin(); SimulationAreaIterator end(); - //! returns trus if given iterator index correspond to masked detector channel + //! returns true if given iterator index correspond to masked detector channel virtual bool isMasked(size_t index) const; size_t totalSize() const; @@ -46,7 +47,7 @@ public: size_t detectorIndex(size_t index) const; protected: - const IDetector2D* m_detector; + const IDetector* m_detector; size_t m_max_index; }; @@ -63,7 +64,7 @@ inline size_t SimulationArea::totalSize() const class BA_CORE_API_ SimulationRoiArea : public SimulationArea { public: - explicit SimulationRoiArea(const IDetector2D* detector); + explicit SimulationRoiArea(const IDetector* detector); virtual bool isMasked(size_t) const; -- GitLab