BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
IDetector Class Referenceabstract

Description

Abstract detector interface.

Handles also "region of interest" (ROI). In general, the ROI is the whole detector, and all methods related to ROI work on the whole detector. If a ROI different to the detector size is explicitly set, then ROI-related methods work on this reduced ROI. Therefore, when calling ROI related methods, the distinction between "explicit ROI exists: yes/no" does not have to be made by the caller, but it is handled in here. For access to the whole detector, even if a smaller ROI is explicitly defined, use the non-ROI-related methods like totalSize() or axes(). Any method which is not speaking of "explicit ROI" handles the "implicit ROI", i.e. uses an explicitly set ROI or the whole detector if no explicit ROI exists. To access the explicitly set ROI, use the methods which have the explicit in its name, like sizeOfExplicitRegionOfInterest().

Definition at line 57 of file IDetector.h.

Inheritance diagram for IDetector:
[legend]
Collaboration diagram for IDetector:
[legend]

Classes

struct  RoiOfAxis
 Keeps RegionOfInterest (ROI) data of one axis. More...
 

Public Types

using const_iterator = const SimulationAreaIterator &
 

Public Member Functions

 IDetector ()
 
 ~IDetector () override
 
std::vector< size_t > active_indices () const
 Returns vector of unmasked detector indices. More...
 
void addDetAxis (const IAxis &axis)
 
void addMask (const IShape2D &shape, bool mask_value=true)
 Adds mask of given shape to the stack of detector masks. The mask value 'true' means that the channel will be excluded from the simulation. The mask which is added last has priority. More...
 
const PolFilteranalyzer () const
 Returns detection properties. More...
 
void applyDetectorResolution (Datafield *p_intensity_map) const
 Applies the detector resolution to the given intensity maps. More...
 
OwningVector< IAxisaxesClippedToRegionOfInterest () const
 Returns the axes clipped to the region of interest. If no region of interest is explicitly defined, then the whole detector is taken as "region of interest". More...
 
const IAxisaxis (size_t index) const
 One axis of the complete detector. Any region of interest is not taken into account. More...
 
size_t axisBinIndex (size_t index, size_t selected_axis) const
 Calculate axis index for given global index. More...
 
SimulationAreaIterator beginNonMaskedPoints () const
 Create begin-iterator to iterate over all points which are not masked and lay within the "Region of Interest". More...
 
SimulationAreaIterator beginRegionOfInterestPoints () const
 Create begin-iterator to iterate over all points which lay within the "Region of Interest". If no region of interest is explicitly defined, then the whole detector is taken as "region of interest". No matter whether masked or not. More...
 
void checkNodeArgs () const
 Raises exception if a parameter value is invalid. More...
 
virtual std::string className () const =0
 Returns the class name, to be hard-coded in each leaf class that inherits from INode. More...
 
IDetectorclone () const override=0
 
std::unique_ptr< DetectorContextcreateContext () const
 
DatafieldcreateDetectorIntensity (const std::vector< std::unique_ptr< DiffuseElement >> &elements) const
 Returns new intensity map with resolution applied, and cropped to ROI if applicable. More...
 
std::unique_ptr< DatafieldcreateDetectorMap () const
 Returns empty detector map in given axes units. This map is a data array limited to the size of the "Region of interest". More...
 
virtual IPixelcreatePixel (size_t index) const =0
 Creates an IPixel for the given Datafield object and index. More...
 
virtual Coords defaultCoords () const =0
 Return default axes units. More...
 
size_t detectorIndexToRegionOfInterestIndex (size_t detectorIndex) const
 
const DetectorMaskdetectorMask () const
 
const IDetectorResolutiondetectorResolution () const
 Returns a pointer to detector resolution object. More...
 
SimulationAreaIterator endNonMaskedPoints () const
 Create end-iterator to iterate over all points which are not masked and lay within the "Region of Interest". More...
 
SimulationAreaIterator endRegionOfInterestPoints () const
 Create end-iterator to iterate over all points which lay within the "Region of Interest". If no region of interest is explicitly defined, then the whole detector is taken as "region of interest". No matter whether masked or not. More...
 
bool hasExplicitRegionOfInterest () const
 True if a region of interest is explicitly set. More...
 
virtual size_t indexOfSpecular (const Beam &beam) const =0
 Returns index of pixel that contains the specular wavevector. If no pixel contains this specular wavevector, the number of pixels is returned. This corresponds to an overflow index. More...
 
void iterateOverNonMaskedPoints (std::function< void(const_iterator)> func) const
 Iterate over all non-masked points within "region of interest". If no region of interest is explicitly defined, then the whole detector is taken as "region of interest". More...
 
void iterateOverRegionOfInterest (std::function< void(const_iterator)> func) const
 Iterate over all points within "region of interest", no matter whether they are masked or not. If no region of interest is explicitly defined, then the whole detector is taken as "region of interest". More...
 
void maskAll ()
 Put the mask for all detector channels (i.e. exclude whole detector from the analysis) More...
 
std::vector< const INode * > nodeChildren () const override
 Returns all children. More...
 
std::vector< const INode * > nodeOffspring () const
 Returns all descendants. More...
 
size_t numberOfElements () const
 Returns number of simulation elements. More...
 
virtual ICoordSystemoffspecCoords (IAxis *beamAxis, const Direction &beamDirection) const =0
 
virtual std::vector< ParaMetaparDefs () const
 Returns the parameter definitions, to be hard-coded in each leaf class. More...
 
size_t rank () const
 Returns number of defined axes. More...
 
std::pair< double, double > regionOfInterestBounds (size_t iAxis) const
 The lower and upper bound of the region of interest. If no region of interest is explicitly defined, then the whole detector is taken as "region of interest". More...
 
size_t regionOfInterestIndexToDetectorIndex (size_t regionOfInterestIndex) const
 Convert an index of the region of interest to an index of the detector. If no region of interest is set, then the index stays unmodified (since ROI == detector area). More...
 
void resetRegionOfInterest ()
 Resets region of interest making whole detector plane available for the simulation. More...
 
virtual CoordSystem2DscatteringCoords (const Beam &beam) const =0
 
void setAnalyzer (R3 direction, double efficiency, double total_transmission)
 Sets the polarization analyzer characteristics of the detector. More...
 
virtual void setDetectorNormal (const Direction &)
 Inits detector with the beam settings. More...
 
void setDetectorParameters (size_t n_x, double x_min, double x_max, size_t n_y, double y_min, double y_max)
 Sets equidistant axes. More...
 
void setDetectorResolution (const IDetectorResolution &p_detector_resolution)
 Sets the detector resolution. More...
 
void setRegionOfInterest (double xlow, double ylow, double xup, double yup)
 Sets rectangular region of interest with lower left and upper right corners defined. More...
 
void setResolutionFunction (const IResolutionFunction2D &resFunc)
 
size_t sizeOfRegionOfInterest () const
 The size of the "Region of Interest". Same as totalSize() if no region of interest has been explicitly set. More...
 
size_t totalSize () const
 Returns total number of pixels. Any region of interest is not taken into account. More...
 
virtual void transferToCPP ()
 Used for Python overriding of clone (see swig/tweaks.py) More...
 

Protected Member Functions

 IDetector (const IDetector &other)
 
virtual std::string axisName (size_t index) const =0
 Returns the name for the axis with given index. More...
 
virtual std::pair< double, double > boundsOfExplicitRegionOfInterest (size_t iAxis) const
 Lower and upper bound of one axis of an explicitly set ROI. Return 0/0 if no ROI has been explicitly set. More...
 
void clear ()
 
size_t getGlobalIndex (size_t x, size_t y) const
 Calculate global index from two axis indices. More...
 
virtual size_t sizeOfExplicitRegionOfInterest () const
 Return 0 if no ROI has been explicitly set. Size means number of data points. More...
 

Protected Attributes

std::vector< RoiOfAxism_explicitROI
 an explicitly defined region of interest. Empty if no ROI has been defined. Vector index corresponds to axis index in m_axes More...
 
std::vector< double > m_P
 

Private Attributes

OwningVector< IAxism_axes
 
std::shared_ptr< DetectorMaskm_detector_mask
 
std::unique_ptr< IDetectorResolutionm_detector_resolution
 
PolFilter m_polAnalyzer
 

Member Typedef Documentation

◆ const_iterator

Definition at line 59 of file IDetector.h.

Constructor & Destructor Documentation

◆ IDetector() [1/2]

IDetector::IDetector ( )

Definition at line 42 of file IDetector.cpp.

42 {}

◆ ~IDetector()

IDetector::~IDetector ( )
overridedefault

◆ IDetector() [2/2]

IDetector::IDetector ( const IDetector other)
protected

Definition at line 44 of file IDetector.cpp.

45  : INode()
47  , m_axes(other.m_axes)
50 {
51  if (other.m_detector_resolution)
53 }
OwningVector< IAxis > m_axes
Definition: IDetector.h:248
PolFilter m_polAnalyzer
Definition: IDetector.h:249
std::unique_ptr< IDetectorResolution > m_detector_resolution
Definition: IDetector.h:250
void setDetectorResolution(const IDetectorResolution &p_detector_resolution)
Sets the detector resolution.
Definition: IDetector.cpp:152
std::vector< RoiOfAxis > m_explicitROI
an explicitly defined region of interest. Empty if no ROI has been defined. Vector index corresponds ...
Definition: IDetector.h:242
std::shared_ptr< DetectorMask > m_detector_mask
Definition: IDetector.h:251
INode()=default

References m_detector_resolution, and setDetectorResolution().

Here is the call graph for this function:

Member Function Documentation

◆ active_indices()

std::vector< size_t > IDetector::active_indices ( ) const

Returns vector of unmasked detector indices.

Definition at line 346 of file IDetector.cpp.

347 {
348  std::vector<size_t> result;
349 
350  iterateOverNonMaskedPoints([&](const_iterator it) { result.push_back(it.detectorIndex()); });
351 
352  return result;
353 }
const SimulationAreaIterator & const_iterator
Definition: IDetector.h:59
void iterateOverNonMaskedPoints(std::function< void(const_iterator)> func) const
Iterate over all non-masked points within "region of interest". If no region of interest is explicitl...
Definition: IDetector.cpp:252

References SimulationAreaIterator::detectorIndex(), and iterateOverNonMaskedPoints().

Referenced by DetectorContext::setup_context().

Here is the call graph for this function:

◆ addDetAxis()

void IDetector::addDetAxis ( const IAxis axis)

Definition at line 57 of file IDetector.cpp.

58 {
60  if (rank() == 2)
61  m_detector_mask.reset(new DetectorMask(*m_axes[0], *m_axes[1]));
62 }
Collection of detector masks.
Definition: DetectorMask.h:42
virtual IAxis * clone() const =0
const IAxis & axis(size_t index) const
One axis of the complete detector. Any region of interest is not taken into account.
Definition: IDetector.cpp:74
size_t rank() const
Returns number of defined axes.
Definition: IDetector.cpp:64
void emplace_back(T *e)
Definition: OwningVector.h:62

References axis(), IAxis::clone(), OwningVector< T >::emplace_back(), m_axes, m_detector_mask, and rank().

Referenced by setDetectorParameters().

Here is the call graph for this function:

◆ addMask()

void IDetector::addMask ( const IShape2D shape,
bool  mask_value = true 
)

Adds mask of given shape to the stack of detector masks. The mask value 'true' means that the channel will be excluded from the simulation. The mask which is added last has priority.

Parameters
shapeThe shape of mask (Rectangle, Polygon, Line, Ellipse)
mask_valueThe value of mask

Definition at line 360 of file IDetector.cpp.

361 {
362  m_detector_mask->addMask(shape, mask_value);
363 }

References m_detector_mask.

Referenced by ISimulation2D::addMask(), and maskAll().

◆ analyzer()

const PolFilter& IDetector::analyzer ( ) const
inline

Returns detection properties.

Definition at line 204 of file IDetector.h.

204 { return m_polAnalyzer; }

References m_polAnalyzer.

Referenced by ISimulation2D::force_polarized(), ISimulation2D::generateElements(), and DetectorContext::setup_context().

◆ applyDetectorResolution()

void IDetector::applyDetectorResolution ( Datafield p_intensity_map) const

Applies the detector resolution to the given intensity maps.

Definition at line 169 of file IDetector.cpp.

170 {
171  ASSERT(p_intensity_map);
172 
173  if (m_detector_resolution) {
174  m_detector_resolution->applyDetectorResolution(p_intensity_map);
175  if (detectorMask() && detectorMask()->hasMasks()) {
176  // sets amplitude in masked areas to zero
177  std::unique_ptr<Datafield> buff(new Datafield(p_intensity_map->frame().cloned_axes()));
179  (*buff)[it.roiIndex()] = (*p_intensity_map)[it.roiIndex()];
180  });
181  p_intensity_map->setVector(buff->flatVector());
182  }
183  }
184 }
#define ASSERT(condition)
Definition: Assert.h:45
Stores radiation power per bin.
Definition: Datafield.h:30
void setVector(const std::vector< double > &data_vector)
Sets new values to raw data vector.
Definition: Datafield.cpp:69
const Frame & frame() const
Definition: Datafield.cpp:86
std::vector< IAxis * > cloned_axes() const
Returns cloned axes.
Definition: Frame.cpp:32
const DetectorMask * detectorMask() const
Definition: IDetector.cpp:372

References ASSERT, Frame::cloned_axes(), detectorMask(), Datafield::frame(), iterateOverNonMaskedPoints(), m_detector_resolution, SimulationAreaIterator::roiIndex(), and Datafield::setVector().

Referenced by createDetectorIntensity(), and OffspecSimulation::transferDetectorImage().

Here is the call graph for this function:

◆ axesClippedToRegionOfInterest()

OwningVector< IAxis > IDetector::axesClippedToRegionOfInterest ( ) const

Returns the axes clipped to the region of interest. If no region of interest is explicitly defined, then the whole detector is taken as "region of interest".

Definition at line 136 of file IDetector.cpp.

137 {
138  OwningVector<IAxis> result;
139  for (size_t iAxis = 0; iAxis < m_axes.size(); ++iAxis) {
140  auto* axis = m_axes[iAxis]->clone();
142  result.emplace_back(axis);
143  }
144  return result;
145 }
virtual void clip(double lower, double upper)
Clips this axis to the given values.
Definition: IAxis.cpp:35
std::pair< double, double > regionOfInterestBounds(size_t iAxis) const
The lower and upper bound of the region of interest. If no region of interest is explicitly defined,...
Definition: IDetector.cpp:227
size_t size() const
Definition: OwningVector.h:70

References axis(), IAxis::clip(), OwningVector< T >::emplace_back(), m_axes, regionOfInterestBounds(), and OwningVector< T >::size().

Referenced by RectangularDetector::offspecCoords(), SphericalDetector::offspecCoords(), RectangularDetector::scatteringCoords(), and SphericalDetector::scatteringCoords().

Here is the call graph for this function:

◆ axis()

const IAxis & IDetector::axis ( size_t  index) const

One axis of the complete detector. Any region of interest is not taken into account.

Definition at line 74 of file IDetector.cpp.

75 {
76  ASSERT(index < rank());
77  return *m_axes[index];
78 }

References ASSERT, m_axes, and rank().

Referenced by IDetector::RoiOfAxis::RoiOfAxis(), addDetAxis(), axesClippedToRegionOfInterest(), createDetectorMap(), RectangularDetector::createPixel(), SphericalDetector::createPixel(), getGlobalIndex(), RectangularDetector::height(), RectangularDetector::indexOfSpecular(), SphericalDetector::indexOfSpecular(), OffspecSimulation::intensityMapSize(), OffspecSimulation::pack_result(), setRegionOfInterest(), OffspecSimulation::transferDetectorImage(), RectangularDetector::width(), RectangularDetector::xSize(), and RectangularDetector::ySize().

Here is the call graph for this function:

◆ axisBinIndex()

size_t IDetector::axisBinIndex ( size_t  index,
size_t  selected_axis 
) const

Calculate axis index for given global index.

Definition at line 80 of file IDetector.cpp.

81 {
82  const size_t dim = rank();
83  size_t remainder(index);
84  size_t i_axis = dim;
85  for (size_t i = 0; i < dim; ++i) {
86  --i_axis;
87  if (selected_axis == i_axis)
88  return remainder % m_axes[i_axis]->size();
89  remainder /= m_axes[i_axis]->size();
90  }
91  ASSERT(0);
92 }

References ASSERT, m_axes, rank(), and OwningVector< T >::size().

Referenced by RectangularDetector::createPixel(), and SphericalDetector::createPixel().

Here is the call graph for this function:

◆ axisName()

virtual std::string IDetector::axisName ( size_t  index) const
protectedpure virtual

Returns the name for the axis with given index.

Implemented in SphericalDetector, and RectangularDetector.

Referenced by setDetectorParameters().

◆ beginNonMaskedPoints()

SimulationAreaIterator IDetector::beginNonMaskedPoints ( ) const

Create begin-iterator to iterate over all points which are not masked and lay within the "Region of Interest".

Definition at line 261 of file IDetector.cpp.

262 {
264 }
@ notMasked
iterate over all points in "region of interest" and not masked
static SimulationAreaIterator createBegin(const IDetector *detector, Mode mode)
Create begin-iterator to iterate over all points according to the given mode.

References SimulationAreaIterator::createBegin(), and SimulationAreaIterator::notMasked.

Referenced by createDetectorIntensity(), and iterateOverNonMaskedPoints().

Here is the call graph for this function:

◆ beginRegionOfInterestPoints()

SimulationAreaIterator IDetector::beginRegionOfInterestPoints ( ) const

Create begin-iterator to iterate over all points which lay within the "Region of Interest". If no region of interest is explicitly defined, then the whole detector is taken as "region of interest". No matter whether masked or not.

Definition at line 271 of file IDetector.cpp.

272 {
274 }
@ regionOfInterest
iterate over all points in "region of interest", no matter whether masked

References SimulationAreaIterator::createBegin(), and SimulationAreaIterator::regionOfInterest.

Referenced by iterateOverRegionOfInterest().

Here is the call graph for this function:

◆ boundsOfExplicitRegionOfInterest()

std::pair< double, double > IDetector::boundsOfExplicitRegionOfInterest ( size_t  iAxis) const
protectedvirtual

Lower and upper bound of one axis of an explicitly set ROI. Return 0/0 if no ROI has been explicitly set.

Definition at line 106 of file IDetector.cpp.

107 {
108  ASSERT(iAxis < rank());
109  if (iAxis < m_explicitROI.size())
110  return {m_explicitROI[iAxis].lower, m_explicitROI[iAxis].upper};
111  return {0., 0.};
112 }

References ASSERT, m_explicitROI, and rank().

Referenced by regionOfInterestBounds().

Here is the call graph for this function:

◆ checkNodeArgs()

void INode::checkNodeArgs ( ) const
inherited

Raises exception if a parameter value is invalid.

Definition at line 27 of file INode.cpp.

28 {
29  size_t nP = m_P.size();
30  if (parDefs().size() != nP) {
31  std::cerr << "BUG in class " << className() << std::endl;
32  std::cerr << "#m_P = " << nP << std::endl;
33  std::cerr << "#PDf = " << parDefs().size() << std::endl;
34  for (const ParaMeta& pm : parDefs())
35  std::cerr << " PDf: " << pm.name << std::endl;
36  ASSERT(0);
37  }
38  ASSERT(parDefs().size() == nP);
39  for (size_t i = 0; i < nP; ++i) {
40  const ParaMeta pm = parDefs()[i];
41 
43  if (pm.vMin == -INF) {
44  ASSERT(pm.vMax == +INF);
45  // nothing to do
46  } else if (pm.vMax == +INF) {
47  ASSERT(pm.vMin == 0);
48  limits = RealLimits::nonnegative();
49  } else {
50  limits = RealLimits::limited(pm.vMin, pm.vMax);
51  }
52  limits.check(pm.name, m_P[i]);
53  }
54 }
const double INF
Definition: INode.h:26
virtual std::vector< ParaMeta > parDefs() const
Returns the parameter definitions, to be hard-coded in each leaf class.
Definition: INode.h:51
std::vector< double > m_P
Definition: INode.h:63
virtual std::string className() const =0
Returns the class name, to be hard-coded in each leaf class that inherits from INode.
Limits for a real fit parameter.
Definition: RealLimits.h:24
static RealLimits limitless()
Creates an object without bounds (default)
Definition: RealLimits.cpp:139
void check(const std::string &name, double value) const
Throws if value is outside limits. Parameter 'name' is for exception message.
Definition: RealLimits.cpp:170
static RealLimits nonnegative()
Creates an object which can have only positive values with 0. included.
Definition: RealLimits.cpp:124
static RealLimits limited(double left_bound_value, double right_bound_value)
Creates an object bounded from the left and right.
Definition: RealLimits.cpp:134
Metadata of one model parameter.
Definition: INode.h:29
double vMin
Definition: INode.h:33
double vMax
Definition: INode.h:34
std::string name
Definition: INode.h:30

References ASSERT, RealLimits::check(), INode::className(), INF, RealLimits::limited(), RealLimits::limitless(), INode::m_P, ParaMeta::name, RealLimits::nonnegative(), INode::parDefs(), ParaMeta::vMax, and ParaMeta::vMin.

Referenced by BarGauss::BarGauss(), BarLorentz::BarLorentz(), Bipyramid4::Bipyramid4(), Box::Box(), CantellatedCube::CantellatedCube(), Cone::Cone(), ConstantBackground::ConstantBackground(), CosineRippleBox::CosineRippleBox(), CosineRippleGauss::CosineRippleGauss(), CosineRippleLorentz::CosineRippleLorentz(), Cylinder::Cylinder(), DistributionCosine::DistributionCosine(), DistributionGate::DistributionGate(), DistributionGaussian::DistributionGaussian(), DistributionLogNormal::DistributionLogNormal(), DistributionLorentz::DistributionLorentz(), DistributionTrapezoid::DistributionTrapezoid(), Dodecahedron::Dodecahedron(), EllipsoidalCylinder::EllipsoidalCylinder(), FootprintGauss::FootprintGauss(), FootprintSquare::FootprintSquare(), FuzzySphere::FuzzySphere(), GaussSphere::GaussSphere(), HemiEllipsoid::HemiEllipsoid(), HollowSphere::HollowSphere(), HorizontalCylinder::HorizontalCylinder(), Icosahedron::Icosahedron(), LongBoxGauss::LongBoxGauss(), LongBoxLorentz::LongBoxLorentz(), PlatonicOctahedron::PlatonicOctahedron(), PlatonicTetrahedron::PlatonicTetrahedron(), Prism3::Prism3(), Prism6::Prism6(), Profile1DCauchy::Profile1DCauchy(), Profile1DCosine::Profile1DCosine(), Profile1DGate::Profile1DGate(), Profile1DGauss::Profile1DGauss(), Profile1DTriangle::Profile1DTriangle(), Profile1DVoigt::Profile1DVoigt(), Profile2DCauchy::Profile2DCauchy(), Profile2DCone::Profile2DCone(), Profile2DGate::Profile2DGate(), Profile2DGauss::Profile2DGauss(), Profile2DVoigt::Profile2DVoigt(), Pyramid2::Pyramid2(), Pyramid3::Pyramid3(), Pyramid4::Pyramid4(), Pyramid6::Pyramid6(), RotationEuler::RotationEuler(), RotationX::RotationX(), RotationY::RotationY(), RotationZ::RotationZ(), SawtoothRippleBox::SawtoothRippleBox(), SawtoothRippleGauss::SawtoothRippleGauss(), SawtoothRippleLorentz::SawtoothRippleLorentz(), Sphere::Sphere(), Spheroid::Spheroid(), TruncatedCube::TruncatedCube(), TruncatedSphere::TruncatedSphere(), and TruncatedSpheroid::TruncatedSpheroid().

Here is the call graph for this function:

◆ className()

virtual std::string INode::className ( ) const
pure virtualinherited

Returns the class name, to be hard-coded in each leaf class that inherits from INode.

Implemented in Particle, SphericalDetector, SpecularSimulation, ScatteringSimulation, OffspecSimulation, DepthProbeSimulation, PoissonBackground, ConstantBackground, GaussSphere, FuzzySphere, RotationEuler, RotationZ, RotationY, RotationX, IdentityRotation, ParticleCoreShell, ParticleComposition, MesoCrystal, Crystal, MultiLayer, Layer, Lattice3D, HexagonalLattice2D, SquareLattice2D, BasicLattice2D, LayerRoughness, LayerInterface, TruncatedSpheroid, TruncatedSphere, TruncatedCube, Spheroid, Sphere, SawtoothRippleLorentz, SawtoothRippleGauss, SawtoothRippleBox, Pyramid6, Pyramid4, Pyramid3, Pyramid2, Prism6, Prism3, PlatonicTetrahedron, PlatonicOctahedron, LongBoxLorentz, LongBoxGauss, Icosahedron, HorizontalCylinder, HollowSphere, HemiEllipsoid, EllipsoidalCylinder, Dodecahedron, Cylinder, CosineRippleLorentz, CosineRippleGauss, CosineRippleBox, Cone, CantellatedCube, Box, Bipyramid4, BarLorentz, BarGauss, Profile2DVoigt, Profile2DCone, Profile2DGate, Profile2DGauss, Profile2DCauchy, Profile1DVoigt, Profile1DCosine, Profile1DTriangle, Profile1DGate, Profile1DGauss, Profile1DCauchy, MisesGaussPeakShape, MisesFisherGaussPeakShape, LorentzFisherPeakShape, GaussFisherPeakShape, IsotropicLorentzPeakShape, IsotropicGaussPeakShape, ParticleLayout, InterferenceTwin, InterferenceRadialParaCrystal, InterferenceNone, InterferenceHardDisk, InterferenceFinite3DLattice, InterferenceFinite2DLattice, Interference3DLattice, Interference2DSuperLattice, Interference2DParaCrystal, Interference2DLattice, Interference1DLattice, DistributionTrapezoid, DistributionCosine, DistributionLogNormal, DistributionGaussian, DistributionLorentz, DistributionGate, ResolutionFunction2DGaussian, ConvolutionDetectorResolution, PolFilter, RectangularDetector, FootprintSquare, FootprintGauss, and Beam.

Referenced by INode::checkNodeArgs(), ExemplarySamples::createBasic2DParaCrystalWithFTDis(), IProfile1D::pythonConstructor(), IProfile2D::pythonConstructor(), IFormFactor::pythonConstructor(), and IFormFactor::shapeName().

◆ clear()

void IDetector::clear ( )
protected

Definition at line 69 of file IDetector.cpp.

70 {
71  m_axes.clear();
72 }
void clear()
Definition: OwningVector.h:63

References OwningVector< T >::clear(), and m_axes.

Referenced by setDetectorParameters().

Here is the call graph for this function:

◆ clone()

IDetector* IDetector::clone ( ) const
overridepure virtual

Implements ICloneable.

Implemented in SphericalDetector, and RectangularDetector.

◆ createContext()

std::unique_ptr< DetectorContext > IDetector::createContext ( ) const

Definition at line 355 of file IDetector.cpp.

356 {
357  return std::make_unique<DetectorContext>(this);
358 }

Referenced by ISimulation2D::prepareSimulation().

◆ createDetectorIntensity()

Datafield * IDetector::createDetectorIntensity ( const std::vector< std::unique_ptr< DiffuseElement >> &  elements) const

Returns new intensity map with resolution applied, and cropped to ROI if applicable.

Definition at line 191 of file IDetector.cpp.

193 {
194  std::unique_ptr<Datafield> detectorMap(createDetectorMap());
195  ASSERT(detectorMap);
196  size_t elementIndex = 0;
197  for (auto it = beginNonMaskedPoints(); it != endNonMaskedPoints(); ++it)
198  (*detectorMap)[it.roiIndex()] = elements[elementIndex++]->intensity();
200  applyDetectorResolution(detectorMap.get());
201 
202  return detectorMap.release();
203 }
SimulationAreaIterator beginNonMaskedPoints() const
Create begin-iterator to iterate over all points which are not masked and lay within the "Region of I...
Definition: IDetector.cpp:261
std::unique_ptr< Datafield > createDetectorMap() const
Returns empty detector map in given axes units. This map is a data array limited to the size of the "...
Definition: IDetector.cpp:205
SimulationAreaIterator endNonMaskedPoints() const
Create end-iterator to iterate over all points which are not masked and lay within the "Region of Int...
Definition: IDetector.cpp:266
void applyDetectorResolution(Datafield *p_intensity_map) const
Applies the detector resolution to the given intensity maps.
Definition: IDetector.cpp:169

References applyDetectorResolution(), ASSERT, beginNonMaskedPoints(), createDetectorMap(), endNonMaskedPoints(), and m_detector_resolution.

Here is the call graph for this function:

◆ createDetectorMap()

std::unique_ptr< Datafield > IDetector::createDetectorMap ( ) const

Returns empty detector map in given axes units. This map is a data array limited to the size of the "Region of interest".

Definition at line 205 of file IDetector.cpp.

206 {
207  const size_t dim = rank();
208  ASSERT(dim != 0);
209 
210  std::vector<IAxis*> axes;
211  for (size_t iAxis = 0; iAxis < dim; ++iAxis) {
212  IAxis* tmp = axis(iAxis).clone();
213  tmp->clip(regionOfInterestBounds(iAxis));
214  axes.emplace_back(tmp);
215  }
216 
217  return std::make_unique<Datafield>(axes);
218 }
Abstract base class for one-dimensional axes.
Definition: IAxis.h:27

References ASSERT, axis(), IAxis::clip(), IAxis::clone(), rank(), and regionOfInterestBounds().

Referenced by createDetectorIntensity().

Here is the call graph for this function:

◆ createPixel()

virtual IPixel* IDetector::createPixel ( size_t  index) const
pure virtual

Creates an IPixel for the given Datafield object and index.

Implemented in SphericalDetector, and RectangularDetector.

Referenced by DetectorContext::setup_context().

◆ defaultCoords()

virtual Coords IDetector::defaultCoords ( ) const
pure virtual

Return default axes units.

Implemented in SphericalDetector, and RectangularDetector.

◆ detectorIndexToRegionOfInterestIndex()

size_t IDetector::detectorIndexToRegionOfInterestIndex ( size_t  detectorIndex) const

Definition at line 294 of file IDetector.cpp.

295 {
296  if (m_explicitROI.size() != 2)
297  return detectorIndex;
298 
299  const auto& x = m_explicitROI[0];
300  const auto& y = m_explicitROI[1];
301 
302  const size_t ny = ycoord(detectorIndex, y.detectorSize);
303  if (ny < y.lowerIndex || ny > y.upperIndex)
304  throw std::runtime_error("IDetector::detectorIndexToRegionOfInterestIndex() -> Error.");
305 
306  const size_t nx = xcoord(detectorIndex, x.detectorSize, y.detectorSize);
307  if (nx < x.lowerIndex || nx > x.upperIndex)
308  throw std::runtime_error("IDetector::detectorIndexToRegionOfInterestIndex() -> Error.");
309 
310  return ny - y.lowerIndex + (nx - x.lowerIndex) * y.roiSize;
311 }

References m_explicitROI.

◆ detectorMask()

const DetectorMask * IDetector::detectorMask ( ) const

Definition at line 372 of file IDetector.cpp.

373 {
374  return m_detector_mask.get();
375 }

References m_detector_mask.

Referenced by applyDetectorResolution(), and SimulationAreaIterator::isMasked().

◆ detectorResolution()

const IDetectorResolution * IDetector::detectorResolution ( ) const

Returns a pointer to detector resolution object.

Definition at line 186 of file IDetector.cpp.

187 {
188  return m_detector_resolution.get();
189 }

References m_detector_resolution.

◆ endNonMaskedPoints()

SimulationAreaIterator IDetector::endNonMaskedPoints ( ) const

Create end-iterator to iterate over all points which are not masked and lay within the "Region of Interest".

Definition at line 266 of file IDetector.cpp.

267 {
269 }
SimulationAreaIterator createEnd() const
Convenience function to create an end-iterator matching to this iterator.

References SimulationAreaIterator::createEnd(), and SimulationAreaIterator::notMasked.

Referenced by createDetectorIntensity(), and iterateOverNonMaskedPoints().

Here is the call graph for this function:

◆ endRegionOfInterestPoints()

SimulationAreaIterator IDetector::endRegionOfInterestPoints ( ) const

Create end-iterator to iterate over all points which lay within the "Region of Interest". If no region of interest is explicitly defined, then the whole detector is taken as "region of interest". No matter whether masked or not.

Definition at line 276 of file IDetector.cpp.

References SimulationAreaIterator::createEnd(), and SimulationAreaIterator::regionOfInterest.

Referenced by iterateOverRegionOfInterest().

Here is the call graph for this function:

◆ getGlobalIndex()

size_t IDetector::getGlobalIndex ( size_t  x,
size_t  y 
) const
protected

Calculate global index from two axis indices.

Definition at line 377 of file IDetector.cpp.

378 {
379  if (rank() != 2)
380  return totalSize();
381  return x * axis(1).size() + y;
382 }
virtual size_t size() const =0
Returns the number of bins.
size_t totalSize() const
Returns total number of pixels. Any region of interest is not taken into account.
Definition: IDetector.cpp:114

References axis(), rank(), IAxis::size(), and totalSize().

Referenced by RectangularDetector::indexOfSpecular(), and SphericalDetector::indexOfSpecular().

Here is the call graph for this function:

◆ hasExplicitRegionOfInterest()

bool IDetector::hasExplicitRegionOfInterest ( ) const

True if a region of interest is explicitly set.

Definition at line 131 of file IDetector.cpp.

132 {
133  return !m_axes.empty() && (m_explicitROI.size() == m_axes.size());
134 }
bool empty() const
Definition: OwningVector.h:71

References OwningVector< T >::empty(), m_axes, m_explicitROI, and OwningVector< T >::size().

Here is the call graph for this function:

◆ indexOfSpecular()

virtual size_t IDetector::indexOfSpecular ( const Beam beam) const
pure virtual

Returns index of pixel that contains the specular wavevector. If no pixel contains this specular wavevector, the number of pixels is returned. This corresponds to an overflow index.

Implemented in SphericalDetector, and RectangularDetector.

Referenced by ISimulation2D::generateElements().

◆ iterateOverNonMaskedPoints()

void IDetector::iterateOverNonMaskedPoints ( std::function< void(const_iterator)>  func) const

Iterate over all non-masked points within "region of interest". If no region of interest is explicitly defined, then the whole detector is taken as "region of interest".

Definition at line 252 of file IDetector.cpp.

253 {
254  if (this->rank() == 0)
255  return;
256 
257  for (auto it = beginNonMaskedPoints(); it != endNonMaskedPoints(); ++it)
258  func(it);
259 }

References beginNonMaskedPoints(), endNonMaskedPoints(), and rank().

Referenced by active_indices(), applyDetectorResolution(), and numberOfElements().

Here is the call graph for this function:

◆ iterateOverRegionOfInterest()

void IDetector::iterateOverRegionOfInterest ( std::function< void(const_iterator)>  func) const

Iterate over all points within "region of interest", no matter whether they are masked or not. If no region of interest is explicitly defined, then the whole detector is taken as "region of interest".

Definition at line 243 of file IDetector.cpp.

244 {
245  if (this->rank() == 0)
246  return;
247 
248  for (auto it = beginRegionOfInterestPoints(); it != endRegionOfInterestPoints(); ++it)
249  func(it);
250 }
SimulationAreaIterator beginRegionOfInterestPoints() const
Create begin-iterator to iterate over all points which lay within the "Region of Interest"....
Definition: IDetector.cpp:271
SimulationAreaIterator endRegionOfInterestPoints() const
Create end-iterator to iterate over all points which lay within the "Region of Interest"....
Definition: IDetector.cpp:276

References beginRegionOfInterestPoints(), endRegionOfInterestPoints(), and rank().

Referenced by ScatteringSimulation::intensityMapSize().

Here is the call graph for this function:

◆ maskAll()

void IDetector::maskAll ( )

Put the mask for all detector channels (i.e. exclude whole detector from the analysis)

Definition at line 365 of file IDetector.cpp.

366 {
367  if (rank() != 2)
368  return;
369  addMask(InfinitePlane(), true);
370 }
void addMask(const IShape2D &shape, bool mask_value=true)
Adds mask of given shape to the stack of detector masks. The mask value 'true' means that the channel...
Definition: IDetector.cpp:360
The infinite plane is used for masking the entire detector.
Definition: InfinitePlane.h:28

References addMask(), and rank().

Referenced by ISimulation2D::maskAll().

Here is the call graph for this function:

◆ nodeChildren()

std::vector< const INode * > IDetector::nodeChildren ( ) const
overridevirtual

Returns all children.

Reimplemented from INode.

Definition at line 238 of file IDetector.cpp.

239 {
240  return std::vector<const INode*>() << &m_polAnalyzer << m_detector_resolution;
241 }

References m_detector_resolution, and m_polAnalyzer.

◆ nodeOffspring()

std::vector< const INode * > INode::nodeOffspring ( ) const
inherited

Returns all descendants.

Definition at line 61 of file INode.cpp.

62 {
63  std::vector<const INode*> result;
64  result.push_back(this);
65  for (const auto* child : nodeChildren()) {
66  for (const auto* p : child->nodeOffspring())
67  result.push_back(p);
68  }
69  return result;
70 }
virtual std::vector< const INode * > nodeChildren() const
Returns all children.
Definition: INode.cpp:56

References INode::nodeChildren().

Here is the call graph for this function:

◆ numberOfElements()

size_t IDetector::numberOfElements ( ) const

Returns number of simulation elements.

Definition at line 220 of file IDetector.cpp.

221 {
222  size_t result(0);
223  iterateOverNonMaskedPoints([&result](const_iterator) { ++result; });
224  return result;
225 }

References iterateOverNonMaskedPoints().

Here is the call graph for this function:

◆ offspecCoords()

virtual ICoordSystem* IDetector::offspecCoords ( IAxis beamAxis,
const Direction beamDirection 
) const
pure virtual

◆ parDefs()

virtual std::vector<ParaMeta> INode::parDefs ( ) const
inlinevirtualinherited

Returns the parameter definitions, to be hard-coded in each leaf class.

Reimplemented in ConstantBackground, GaussSphere, FuzzySphere, RotationEuler, RotationZ, RotationY, RotationX, Crystal, Layer, HexagonalLattice2D, SquareLattice2D, BasicLattice2D, LayerRoughness, TruncatedSpheroid, TruncatedSphere, TruncatedCube, Spheroid, Sphere, SawtoothRippleLorentz, SawtoothRippleGauss, SawtoothRippleBox, Pyramid6, Pyramid4, Pyramid3, Pyramid2, Prism6, Prism3, PlatonicTetrahedron, PlatonicOctahedron, LongBoxLorentz, LongBoxGauss, Icosahedron, HorizontalCylinder, HollowSphere, HemiEllipsoid, EllipsoidalCylinder, Dodecahedron, Cylinder, CosineRippleLorentz, CosineRippleGauss, CosineRippleBox, Cone, CantellatedCube, Box, Bipyramid4, BarLorentz, BarGauss, Profile2DVoigt, Profile2DCone, Profile2DGate, Profile2DGauss, Profile2DCauchy, Profile1DVoigt, Profile1DCosine, Profile1DTriangle, Profile1DGate, Profile1DGauss, Profile1DCauchy, MisesGaussPeakShape, MisesFisherGaussPeakShape, LorentzFisherPeakShape, GaussFisherPeakShape, IsotropicLorentzPeakShape, IsotropicGaussPeakShape, ParticleLayout, InterferenceTwin, InterferenceRadialParaCrystal, InterferenceHardDisk, Interference2DSuperLattice, Interference2DParaCrystal, Interference1DLattice, DistributionTrapezoid, DistributionCosine, DistributionLogNormal, DistributionGaussian, DistributionLorentz, DistributionGate, ResolutionFunction2DGaussian, PolFilter, FootprintSquare, and FootprintGauss.

Definition at line 51 of file INode.h.

51 { return {}; }

Referenced by INode::checkNodeArgs(), and IFormFactor::pythonConstructor().

◆ rank()

size_t IDetector::rank ( ) const

Returns number of defined axes.

Definition at line 64 of file IDetector.cpp.

65 {
66  return m_axes.size();
67 }

References m_axes, and OwningVector< T >::size().

Referenced by addDetAxis(), axis(), axisBinIndex(), boundsOfExplicitRegionOfInterest(), createDetectorMap(), getGlobalIndex(), RectangularDetector::indexOfSpecular(), SphericalDetector::indexOfSpecular(), iterateOverNonMaskedPoints(), iterateOverRegionOfInterest(), maskAll(), setRegionOfInterest(), totalSize(), and OffspecSimulation::transferDetectorImage().

Here is the call graph for this function:

◆ regionOfInterestBounds()

std::pair< double, double > IDetector::regionOfInterestBounds ( size_t  iAxis) const

The lower and upper bound of the region of interest. If no region of interest is explicitly defined, then the whole detector is taken as "region of interest".

Definition at line 227 of file IDetector.cpp.

228 {
229  ASSERT(iAxis < m_axes.size());
230 
231  const auto explicitBounds = boundsOfExplicitRegionOfInterest(iAxis);
232  if (explicitBounds.first != 0 || explicitBounds.second != 0)
233  return explicitBounds;
234 
235  return m_axes[iAxis]->bounds();
236 }
virtual std::pair< double, double > boundsOfExplicitRegionOfInterest(size_t iAxis) const
Lower and upper bound of one axis of an explicitly set ROI. Return 0/0 if no ROI has been explicitly ...
Definition: IDetector.cpp:106

References ASSERT, boundsOfExplicitRegionOfInterest(), m_axes, and OwningVector< T >::size().

Referenced by axesClippedToRegionOfInterest(), createDetectorMap(), and RectangularDetector::regionOfInterestPixel().

Here is the call graph for this function:

◆ regionOfInterestIndexToDetectorIndex()

size_t IDetector::regionOfInterestIndexToDetectorIndex ( size_t  regionOfInterestIndex) const

Convert an index of the region of interest to an index of the detector. If no region of interest is set, then the index stays unmodified (since ROI == detector area).

Definition at line 281 of file IDetector.cpp.

282 {
283  if (m_explicitROI.size() != 2)
284  return regionOfInterestIndex;
285 
286  const auto& x = m_explicitROI[0];
287  const auto& y = m_explicitROI[1];
288 
289  const size_t globalIndex0 = y.lowerIndex + x.lowerIndex * y.detectorSize;
290  return globalIndex0 + ycoord(regionOfInterestIndex, y.roiSize)
291  + xcoord(regionOfInterestIndex, x.roiSize, y.roiSize) * y.detectorSize;
292 }

References m_explicitROI.

Referenced by SimulationAreaIterator::detectorIndex(), and SimulationAreaIterator::isMasked().

◆ resetRegionOfInterest()

void IDetector::resetRegionOfInterest ( )

Resets region of interest making whole detector plane available for the simulation.

Definition at line 164 of file IDetector.cpp.

165 {
166  m_explicitROI.clear();
167 }

References m_explicitROI.

◆ scatteringCoords()

virtual CoordSystem2D* IDetector::scatteringCoords ( const Beam beam) const
pure virtual

Implemented in SphericalDetector, and RectangularDetector.

◆ setAnalyzer()

void IDetector::setAnalyzer ( R3  direction,
double  efficiency,
double  total_transmission 
)

Sets the polarization analyzer characteristics of the detector.

Definition at line 147 of file IDetector.cpp.

148 {
149  m_polAnalyzer = PolFilter(direction, efficiency, total_transmission);
150 }
Detector properties (efficiency, transmission).
Definition: PolFilter.h:27

References m_polAnalyzer.

◆ setDetectorNormal()

virtual void IDetector::setDetectorNormal ( const Direction )
inlinevirtual

Inits detector with the beam settings.

Reimplemented in RectangularDetector.

Definition at line 67 of file IDetector.h.

67 {} // nontrivial only for RectangularDetector

◆ setDetectorParameters()

void IDetector::setDetectorParameters ( size_t  n_x,
double  x_min,
double  x_max,
size_t  n_y,
double  y_min,
double  y_max 
)

Sets equidistant axes.

Definition at line 329 of file IDetector.cpp.

331 {
332  clear();
333  addDetAxis(FixedBinAxis(axisName(0), n_x, x_min, x_max));
334  addDetAxis(FixedBinAxis(axisName(1), n_y, y_min, y_max));
335 }
Axis with fixed bin size.
Definition: FixedBinAxis.h:23
void addDetAxis(const IAxis &axis)
Definition: IDetector.cpp:57
virtual std::string axisName(size_t index) const =0
Returns the name for the axis with given index.
void clear()
Definition: IDetector.cpp:69

References addDetAxis(), axisName(), and clear().

Referenced by RectangularDetector::RectangularDetector(), and SphericalDetector::SphericalDetector().

Here is the call graph for this function:

◆ setDetectorResolution()

void IDetector::setDetectorResolution ( const IDetectorResolution p_detector_resolution)

Sets the detector resolution.

Definition at line 152 of file IDetector.cpp.

153 {
154  m_detector_resolution.reset(p_detector_resolution.clone());
155 }
IDetectorResolution * clone() const override=0

References IDetectorResolution::clone(), and m_detector_resolution.

Referenced by IDetector(), and setResolutionFunction().

Here is the call graph for this function:

◆ setRegionOfInterest()

void IDetector::setRegionOfInterest ( double  xlow,
double  ylow,
double  xup,
double  yup 
)

Sets rectangular region of interest with lower left and upper right corners defined.

Definition at line 337 of file IDetector.cpp.

338 {
339  ASSERT(rank() == 2);
340 
341  m_explicitROI.clear();
342  m_explicitROI.emplace_back(axis(0), xlow, xup);
343  m_explicitROI.emplace_back(axis(1), ylow, yup);
344 }

References ASSERT, axis(), m_explicitROI, and rank().

Referenced by ISimulation2D::setRegionOfInterest().

Here is the call graph for this function:

◆ setResolutionFunction()

void IDetector::setResolutionFunction ( const IResolutionFunction2D resFunc)

Definition at line 158 of file IDetector.cpp.

159 {
160  ConvolutionDetectorResolution convFunc(resFunc);
161  setDetectorResolution(convFunc);
162 }
Convolutes the intensity in 1 or 2 dimensions with a resolution function.

References setDetectorResolution().

Here is the call graph for this function:

◆ sizeOfExplicitRegionOfInterest()

size_t IDetector::sizeOfExplicitRegionOfInterest ( ) const
protectedvirtual

Return 0 if no ROI has been explicitly set. Size means number of data points.

Definition at line 94 of file IDetector.cpp.

95 {
96  if (m_explicitROI.size() != m_axes.size())
97  return 0;
98 
99  size_t s = 1;
100  for (const auto& roiOfAxis : m_explicitROI)
101  s *= roiOfAxis.roiSize;
102 
103  return s;
104 }

References m_axes, m_explicitROI, and OwningVector< T >::size().

Referenced by sizeOfRegionOfInterest().

Here is the call graph for this function:

◆ sizeOfRegionOfInterest()

size_t IDetector::sizeOfRegionOfInterest ( ) const

The size of the "Region of Interest". Same as totalSize() if no region of interest has been explicitly set.

Definition at line 125 of file IDetector.cpp.

126 {
127  const auto explicitSize = sizeOfExplicitRegionOfInterest();
128  return (explicitSize != 0) ? explicitSize : totalSize();
129 }
virtual size_t sizeOfExplicitRegionOfInterest() const
Return 0 if no ROI has been explicitly set. Size means number of data points.
Definition: IDetector.cpp:94

References sizeOfExplicitRegionOfInterest(), and totalSize().

Referenced by SimulationAreaIterator::createEnd().

Here is the call graph for this function:

◆ totalSize()

size_t IDetector::totalSize ( ) const

Returns total number of pixels. Any region of interest is not taken into account.

Definition at line 114 of file IDetector.cpp.

115 {
116  const size_t dim = rank();
117  if (dim == 0)
118  return 0;
119  size_t result = 1;
120  for (size_t i_axis = 0; i_axis < dim; ++i_axis)
121  result *= m_axes[i_axis]->size();
122  return result;
123 }

References m_axes, and rank().

Referenced by getGlobalIndex(), RectangularDetector::indexOfSpecular(), SphericalDetector::indexOfSpecular(), and sizeOfRegionOfInterest().

Here is the call graph for this function:

◆ transferToCPP()

virtual void ICloneable::transferToCPP ( )
inlinevirtualinherited

Used for Python overriding of clone (see swig/tweaks.py)

Definition at line 32 of file ICloneable.h.

Member Data Documentation

◆ m_axes

◆ m_detector_mask

std::shared_ptr<DetectorMask> IDetector::m_detector_mask
private

Definition at line 251 of file IDetector.h.

Referenced by addDetAxis(), addMask(), and detectorMask().

◆ m_detector_resolution

std::unique_ptr<IDetectorResolution> IDetector::m_detector_resolution
private

◆ m_explicitROI

std::vector<RoiOfAxis> IDetector::m_explicitROI
protected

an explicitly defined region of interest. Empty if no ROI has been defined. Vector index corresponds to axis index in m_axes

Definition at line 242 of file IDetector.h.

Referenced by boundsOfExplicitRegionOfInterest(), detectorIndexToRegionOfInterestIndex(), hasExplicitRegionOfInterest(), regionOfInterestIndexToDetectorIndex(), resetRegionOfInterest(), setRegionOfInterest(), and sizeOfExplicitRegionOfInterest().

◆ m_P

◆ m_polAnalyzer

PolFilter IDetector::m_polAnalyzer
private

Definition at line 249 of file IDetector.h.

Referenced by analyzer(), nodeChildren(), and setAnalyzer().


The documentation for this class was generated from the following files: