Skip to content
Snippets Groups Projects
Commit 62f35659 authored by Yurov, Dmitry's avatar Yurov, Dmitry
Browse files

Enabled IDetector in SimulationArea

Redmine: #1895
parent 901cc842
No related branches found
No related tags found
No related merge requests found
......@@ -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;
}
......
......@@ -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)
{}
......
......@@ -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;
......
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