BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
IDetector.h
Go to the documentation of this file.
1 // ************************************************************************** //
2 //
3 // BornAgain: simulate and fit scattering at grazing incidence
4 //
5 //! @file Device/Detector/IDetector.h
6 //! @brief Defines common detector interface.
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************** //
14 
15 #ifndef BORNAGAIN_CORE_DETECTOR_IDETECTOR_H
16 #define BORNAGAIN_CORE_DETECTOR_IDETECTOR_H
17 
22 
23 class Beam;
24 class DetectorMask;
25 class IAxis;
28 template <class T> class OutputData;
29 class SimulationElement;
30 class RegionOfInterest;
31 
32 //! Abstract detector interface.
33 //! @ingroup detector
34 
35 class IDetector : public ICloneable, public INode
36 {
37 public:
39  IDetector();
40 
41  IDetector* clone() const override = 0;
42 
43  virtual ~IDetector();
44 
45  //! Inits detector with the beam settings
46  virtual void init(const Beam&) {}
47 
48  void addAxis(const IAxis& axis);
49 
50  const IAxis& getAxis(size_t index) const;
51 
52  //! Returns actual dimensionality of the detector (number of defined axes)
53  size_t dimension() const;
54 
55  //! Calculate axis index for given global index
56  size_t axisBinIndex(size_t index, size_t selected_axis) const;
57 
58  //! Returns total number of pixels
59  size_t totalSize() const;
60 
61  //! Returns detector masks container
62  virtual const DetectorMask* detectorMask() const = 0;
63 
64  //! Sets the polarization analyzer characteristics of the detector
65  void setAnalyzerProperties(const kvector_t direction, double efficiency,
66  double total_transmission);
67 
68  //! Sets the detector resolution
69  void setDetectorResolution(const IDetectorResolution& p_detector_resolution);
70  void setResolutionFunction(const IResolutionFunction2D& resFunc);
71 
72  //! Applies the detector resolution to the given intensity maps
73  void applyDetectorResolution(OutputData<double>* p_intensity_map) const;
74 
75  //! Removes detector resolution function.
77 
78  //! Returns a pointer to detector resolution object
80 
81 #ifndef SWIG
82  //! Returns empty detector map in given axes units.
83  std::unique_ptr<OutputData<double>> createDetectorMap() const;
84 #endif // SWIG
85 
86  //! Returns region of interest if exists.
87  virtual const RegionOfInterest* regionOfInterest() const = 0;
88 
89  //! Resets region of interest making whole detector plane available for the simulation.
90  virtual void resetRegionOfInterest() = 0;
91 
92  //! Returns detection properties
94 
95  //! Returns new intensity map with detector resolution applied. Map will be cropped to ROI
96  //! if ROI is present.
98  createDetectorIntensity(const std::vector<SimulationElement>& elements) const;
99 
100  //! Return default axes units
101  virtual Axes::Units defaultAxesUnits() const { return Axes::Units::DEFAULT; }
102 
103  //! Returns number of simulation elements.
104  size_t numberOfSimulationElements() const;
105 
106  std::vector<const INode*> getChildren() const override;
107 
108  void iterate(std::function<void(const_iterator)> func, bool visit_masks = false) const;
109 
110 protected:
111  IDetector(const IDetector& other);
112 
113  void clear();
114 
115  //! Returns the name for the axis with given index
116  virtual std::string axisName(size_t index) const = 0;
117 
118  //! Generates an axis with correct name and default binning for given index
119  virtual std::unique_ptr<IAxis> createAxis(size_t index, size_t n_bins, double min,
120  double max) const;
121 
122 private:
123  void setDataToDetectorMap(OutputData<double>& detectorMap,
124  const std::vector<SimulationElement>& elements) const;
125 
128  std::unique_ptr<IDetectorResolution> mP_detector_resolution;
129 };
130 
131 #endif // BORNAGAIN_CORE_DETECTOR_IDETECTOR_H
Defines and implements templated class CloneableVector.
Defines class DetectionProperties.
Defines interface IUnitConverter and possible axis units.
Defines class SimulationAreaIterator.
Beam defined by wavelength, direction and intensity.
Definition: Beam.h:27
Detector properties (efficiency, transmission).
Collection of detector masks.
Definition: DetectorMask.h:29
Interface for one-dimensional axes.
Definition: IAxis.h:25
Interface for polymorphic classes that should not be copied, except by explicit cloning.
Definition: ICloneable.h:25
Interface for detector resolution algorithms.
Abstract detector interface.
Definition: IDetector.h:36
void setDataToDetectorMap(OutputData< double > &detectorMap, const std::vector< SimulationElement > &elements) const
Definition: IDetector.cpp:179
void applyDetectorResolution(OutputData< double > *p_intensity_map) const
Applies the detector resolution to the given intensity maps.
Definition: IDetector.cpp:117
std::unique_ptr< IDetectorResolution > mP_detector_resolution
Definition: IDetector.h:128
virtual std::string axisName(size_t index) const =0
Returns the name for the axis with given index.
virtual ~IDetector()
virtual const DetectorMask * detectorMask() const =0
Returns detector masks container.
const SimulationAreaIterator & const_iterator
Definition: IDetector.h:38
void clear()
Definition: IDetector.cpp:49
size_t dimension() const
Returns actual dimensionality of the detector (number of defined axes)
Definition: IDetector.cpp:44
size_t axisBinIndex(size_t index, size_t selected_axis) const
Calculate axis index for given global index.
Definition: IDetector.cpp:61
virtual std::unique_ptr< IAxis > createAxis(size_t index, size_t n_bins, double min, double max) const
Generates an axis with correct name and default binning for given index.
Definition: IDetector.cpp:76
std::vector< const INode * > getChildren() const override
Returns a vector of children (const).
Definition: IDetector.cpp:196
size_t totalSize() const
Returns total number of pixels.
Definition: IDetector.cpp:87
size_t numberOfSimulationElements() const
Returns number of simulation elements.
Definition: IDetector.cpp:189
const IAxis & getAxis(size_t index) const
Definition: IDetector.cpp:54
void setResolutionFunction(const IResolutionFunction2D &resFunc)
Definition: IDetector.cpp:111
DetectionProperties m_detection_properties
Definition: IDetector.h:127
CloneableVector< IAxis > m_axes
Definition: IDetector.h:126
void setAnalyzerProperties(const kvector_t direction, double efficiency, double total_transmission)
Sets the polarization analyzer characteristics of the detector.
Definition: IDetector.cpp:98
virtual void init(const Beam &)
Inits detector with the beam settings.
Definition: IDetector.h:46
void addAxis(const IAxis &axis)
Definition: IDetector.cpp:39
OutputData< double > * createDetectorIntensity(const std::vector< SimulationElement > &elements) const
Returns new intensity map with detector resolution applied.
Definition: IDetector.cpp:148
void setDetectorResolution(const IDetectorResolution &p_detector_resolution)
Sets the detector resolution.
Definition: IDetector.cpp:104
std::unique_ptr< OutputData< double > > createDetectorMap() const
Returns empty detector map in given axes units.
Definition: IDetector.cpp:162
virtual void resetRegionOfInterest()=0
Resets region of interest making whole detector plane available for the simulation.
void iterate(std::function< void(const_iterator)> func, bool visit_masks=false) const
Definition: IDetector.cpp:201
IDetector * clone() const override=0
const IDetectorResolution * detectorResolution() const
Returns a pointer to detector resolution object.
Definition: IDetector.cpp:142
void removeDetectorResolution()
Removes detector resolution function.
Definition: IDetector.cpp:137
virtual const RegionOfInterest * regionOfInterest() const =0
Returns region of interest if exists.
virtual Axes::Units defaultAxesUnits() const
Return default axes units.
Definition: IDetector.h:101
const DetectionProperties & detectionProperties() const
Returns detection properties.
Definition: IDetector.h:93
Base class for tree-like structures containing parameterized objects.
Definition: INode.h:49
Interface providing two-dimensional resolution function.
Template class to store data of any type in multi-dimensional space.
Definition: OutputData.h:33
Defines rectangular area for the detector which will be simulated/fitted.
An iterator for SimulationArea.
Data stucture containing both input and output of a single detector cell.