CTL  0.6.1
Computed Tomography Library
standardpipeline.h
Go to the documentation of this file.
1 #ifndef CTL_STANDARDPIPELINE_H
2 #define CTL_STANDARDPIPELINE_H
3 
4 #include "projectionpipeline.h"
5 
6 namespace CTL {
7 
8 namespace OCL {
9  class RayCasterProjector;
10 } // namespace OCL
11 class ArealFocalSpotExtension;
12 class DetectorSaturationExtension;
13 class PoissonNoiseExtension;
14 class SpectralEffectsExtension;
15 
16 
94 {
96 
97  class SettingsAFS;
101  class SettingsRayCaster;
102 
103 public:
105  {
109  };
110 
112  StandardPipeline(const StandardPipeline&) = delete;
113  StandardPipeline& operator=(const StandardPipeline&) = delete;
114  StandardPipeline(StandardPipeline&& other) noexcept;
115  StandardPipeline& operator=(StandardPipeline&& other) noexcept;
116  ~StandardPipeline() override;
117 
118  void configure(const AcquisitionSetup& setup) override;
119  ProjectionData project(const VolumeData& volume) override;
120  ProjectionData projectComposite(const CompositeVolume& volume) override;
121  ProjectionData projectSparse(const SparseVoxelVolume& volume) override;
122  bool isLinear() const override;
123  ProjectorNotifier* notifier() override;
124 
125  // SerializationInterface interface
126  void fromVariant(const QVariant& variant) override;
127  QVariant toVariant() const override;
128 
129  // configuration methods
130  void enableArealFocalSpot(bool enable = true);
131  void enableDetectorSaturation(bool enable = true);
132  void enablePoissonNoise(bool enable = true);
133  void enableSpectralEffects(bool enable = true);
134 
135  SettingsAFS& settingsArealFocalSpot();
136  SettingsDetectorSaturation& settingsDetectorSaturation();
137  SettingsPoissonNoise& settingsPoissonNoise();
138  SettingsSpectralEffects& settingsSpectralEffects();
139  SettingsRayCaster& settingsRayCaster();
140 
141 private:
143 
149 
150  template <class Ext>
151  class Settings
152  {
153  public:
154  Settings(const Settings&) = delete;
155  Settings& operator=(const Settings&) = delete;
156 
157  protected:
158  Settings(Settings&&) = default;
159  Settings& operator=(Settings&&) = default;
160  ~Settings() = default;
161 
162  explicit Settings(Ext& ext) : _instance(ext) {}
163  Ext& extension() const { return _instance.get(); }
164 
165  private:
166  std::reference_wrapper<Ext> _instance;
167  };
168 
169  class SettingsRayCaster : public Settings<OCL::RayCasterProjector>
170  {
171  public:
172  void setInterpolation(bool enabled);
173  void setRaysPerPixel(const QSize& sampling);
174  void setRaySampling(float sampling);
175  void setVolumeUpSampling(uint upSamplingFactor);
176 
177  private:
178  using Settings::Settings;
179 
180  friend class StandardPipeline;
181  } _settingsRayCaster;
182 
183  class SettingsAFS : public Settings<ArealFocalSpotExtension>
184  {
185  public:
186  void setDiscretization(const QSize& discretization);
187  void enableLowExtinctionApproximation(bool enable = true);
188 
189  private:
190  using Settings::Settings;
191 
192  friend class StandardPipeline;
193  } _settingsAFS;
194 
195  class SettingsDetectorSaturation : public Settings<DetectorSaturationExtension>
196  {
197  public:
198  void setSpectralSamples(uint nbSamples);
199 
200  private:
201  using Settings::Settings;
202 
203  friend class StandardPipeline;
204  } _settingsDetSat;
205 
206  class SettingsPoissonNoise : public Settings<PoissonNoiseExtension>
207  {
208  public:
209  void setFixedSeed(uint seed);
210  void setRandomSeedMode();
211  void setParallelizationMode(bool enabled);
212 
213  private:
214  using Settings::Settings;
215 
216  friend class StandardPipeline;
217  } _settingsPoisson;
218 
219  class SettingsSpectralEffects : public Settings<SpectralEffectsExtension>
220  {
221  public:
222  void setSamplingResolution(float energyBinWidth);
223 
224  private:
225  using Settings::Settings;
226 
227  friend class StandardPipeline;
228  } _settingsSpectral;
229 
230  uint posAFS() const;
231  uint posDetSat() const;
232  uint posPoisson() const;
233  uint posSpectral() const;
234 
236  bool _arealFSEnabled = false;
237  bool _detSatEnabled = false;
238  bool _spectralEffEnabled = false;
239  bool _poissonEnabled = false;
240 };
241 
242 } // namespace CTL
243 
245 
248 #endif // CTL_STANDARDPIPELINE_H
The RayCasterProjector class is an implementation of a simple OpenCL-based ray casting projector that...
Definition: raycasterprojector.h:20
DetectorSaturationExtension * _extDetSat
Pointer to the DetectorSaturationExtension.
Definition: standardpipeline.h:146
SpectralEffectsExtension * _extSpectral
Pointer to the SpectralEffectsExtension.
Definition: standardpipeline.h:148
ApproximationPolicy _approxMode
approximation level for the simulation
Definition: standardpipeline.h:235
ProjectionData projectComposite(const CompositeVolume &volume) override
Creates projection data from the composite volume volume.
Definition: standardpipeline.cpp:137
Definition: standardpipeline.h:107
Definition: standardpipeline.h:183
The PoissonNoiseExtension class is an extension for forward projectors that adds Poisson-distributed ...
Definition: poissonnoiseextension.h:62
Definition: standardpipeline.h:219
The ProjectionPipeline class is a convenience class to manage a composition of a projector and additi...
Definition: projectionpipeline.h:74
ProjectorNotifier * notifier() override
Returns a pointer to the notifier of the projector.
Definition: standardpipeline.cpp:158
bool _detSatEnabled
enabled/disabled state variable for detector saturation
Definition: standardpipeline.h:237
ArealFocalSpotExtension * _extAFS
Pointer to the ArealFocalSpotExtension.
Definition: standardpipeline.h:145
The SpectralEffectsExtension class is an extension for forward projectors that provides functionality...
Definition: spectraleffectsextension.h:75
bool _poissonEnabled
enabled/disabled state variable for Poisson noise
Definition: standardpipeline.h:239
ApproximationPolicy
Definition: standardpipeline.h:104
The StandardPipeline class is a convenience class to work with a predefined processing pipeline for c...
Definition: standardpipeline.h:93
SettingsRayCaster & settingsRayCaster()
Definition: standardpipeline.cpp:401
StandardPipeline(ApproximationPolicy policy=StandardPipeline::Default_Approximation)
Definition: standardpipeline.cpp:18
Definition: standardpipeline.h:195
void enableDetectorSaturation(bool enable=true)
Definition: standardpipeline.cpp:230
bool isLinear() const override
Definition: standardpipeline.cpp:156
SettingsAFS & settingsArealFocalSpot()
Definition: standardpipeline.cpp:303
ProjectionData projectSparse(const SparseVoxelVolume &volume) override
Creates projection data from the sparse volume volume.
Definition: standardpipeline.cpp:148
ProjectionData project(const VolumeData &volume) override
Creates projection data from volume.
Definition: standardpipeline.cpp:126
Holds a CTSystem together with the information about the system settings for all views from which pro...
Definition: acquisitionsetup.h:175
The ProjectionData class is the container class used to store all projections from all views.
Definition: projectiondata.h:19
Definition: sparsevoxelvolume.h:14
The AbstractProjector class is the abstract base class defining the interfaces for forward projectors...
Definition: abstractprojector.h:68
Definition: standardpipeline.h:108
void configure(const AcquisitionSetup &setup) override
Sets the acquisition setup for the simulation to setup.
Definition: standardpipeline.cpp:118
uint posAFS() const
Definition: standardpipeline.cpp:414
The CompositeVolume class is a container to hold multiple volume datasets of any type from the CTL.
Definition: compositevolume.h:108
SettingsDetectorSaturation & settingsDetectorSaturation()
Definition: standardpipeline.cpp:325
OCL::RayCasterProjector * _projector
Pointer to the ray caster projector.
Definition: standardpipeline.h:144
SettingsSpectralEffects & settingsSpectralEffects()
Definition: standardpipeline.cpp:372
The ArealFocalSpotExtension class is an extension for forward projectors that considers the finite di...
Definition: arealfocalspotextension.h:65
Definition: standardpipeline.h:206
Definition: standardpipeline.h:106
The DetectorSaturationExtension class is an extension for forward projectors that considers over- and...
Definition: detectorsaturationextension.h:57
#define CTL_TYPE_ID(newIndex)
Definition: serializationinterface.h:189
uint posSpectral() const
Definition: standardpipeline.cpp:446
unsigned int uint
Qt style alias for unsigned int.
Definition: modulelayout.h:6
uint posDetSat() const
Definition: standardpipeline.cpp:423
PoissonNoiseExtension * _extPoisson
Pointer to the PoissonNoiseExtension.
Definition: standardpipeline.h:147
The SpectralVolumeData class holds voxelized data (for a single material) along with information on i...
Definition: spectralvolumedata.h:40
void enableSpectralEffects(bool enable=true)
Definition: standardpipeline.cpp:271
ProjectionPipeline _pipeline
The pipeline object; owns the projector and all extensions.
Definition: standardpipeline.h:142
QVariant toVariant() const override
Stores the contents of this instance in a QVariant.
Definition: standardpipeline.cpp:187
bool _spectralEffEnabled
enabled/disabled state variable for spectral effects
Definition: standardpipeline.h:238
Helper class that can emit signals during calculations of a certain projector.
Definition: abstractprojector.h:53
bool _arealFSEnabled
enabled/disabled state variable for areal focal spot
Definition: standardpipeline.h:236
SettingsPoissonNoise & settingsPoissonNoise()
Definition: standardpipeline.cpp:351
void enableArealFocalSpot(bool enable=true)
Definition: standardpipeline.cpp:210
uint posPoisson() const
Definition: standardpipeline.cpp:434
Definition: standardpipeline.h:151
void fromVariant(const QVariant &variant) override
Sets the contents of the object based on the QVariant variant.
Definition: standardpipeline.cpp:160
void enablePoissonNoise(bool enable=true)
Definition: standardpipeline.cpp:246
Definition: standardpipeline.h:169