CTL  0.6.1
Computed Tomography Library
spectraleffectsextension.h
1 #ifndef CTL_SPECTRALEFFECTSEXTENSION_H
2 #define CTL_SPECTRALEFFECTSEXTENSION_H
3 
4 #include "projectorextension.h"
5 #include "acquisition/acquisitionsetup.h"
6 #include "acquisition/radiationencoder.h"
7 
8 namespace CTL {
9 
76 {
78 
79  // abstract interface
80  public: void configure(const AcquisitionSetup& setup) override;
81  public: ProjectionData project(const VolumeData& volume) override;
82 
83 public:
84  SpectralEffectsExtension() = default;
85  explicit SpectralEffectsExtension(float energyBinWidth);
87 
88  ProjectionData projectComposite(const CompositeVolume& volume) override;
89  ProjectionData projectSparse(const SparseVoxelVolume &volume) override;
90  bool isLinear() const override;
91 
92  // SerializationInterface interface
93  QVariant toVariant() const override;
94  QVariant parameter() const override;
95  void setParameter(const QVariant& parameter) override;
96 
97  void setSpectralSamplingResolution(float energyBinWidth);
98 
99 private:
101  bool canBypassExtension(const CompositeVolume& volume) const;
102  void applyDetectorResponse(ProjectionData& intensity, float energy) const;
103 
105 
108  ProjectionData singleBinIntensityLinear(const std::vector<ProjectionData>& materialProjs,
109  const std::vector<float>& massAttenCoeffs,
110  const BinInformation& binInfo);
112  const BinInformation& binInfo);
113 
114  void addDummyPrepareSteps();
116  void replaceDummyPrepareSteps(const BinInformation& binInfo, float binWidth);
117 
118  SpectralInformation _spectralInfo;
120  float _deltaE{ 0.0f };
121 };
122 
123 
124 } // namespace CTL
125 
126 #endif // CTL_SPECTRALEFFECTSEXTENSION_H
QVariant toVariant() const override
Stores the contents of this instance in a QVariant.
Definition: spectraleffectsextension.cpp:116
ProjectionData singleBinIntensityNonLinear(const CompositeVolume &volume, const BinInformation &binInfo)
Definition: spectraleffectsextension.cpp:383
void replaceDummyPrepareSteps(const BinInformation &binInfo, float binWidth)
Definition: spectraleffectsextension.cpp:439
ProjectionData project(const VolumeData &volume) override
Definition: spectraleffectsextension.cpp:57
The SpectralEffectsExtension class is an extension for forward projectors that provides functionality...
Definition: spectraleffectsextension.h:75
ProjectionData projectComposite(const CompositeVolume &volume) override
Definition: spectraleffectsextension.cpp:88
Holds a CTSystem together with the information about the system settings for all views from which pro...
Definition: acquisitionsetup.h:175
void setParameter(const QVariant &parameter) override
Sets the parameters of this instance based on the passed QVariant parameter. Parameters need to follo...
Definition: spectraleffectsextension.cpp:143
The ProjectionData class is the container class used to store all projections from all views.
Definition: projectiondata.h:19
Definition: sparsevoxelvolume.h:14
void configure(const AcquisitionSetup &setup) override
Definition: spectraleffectsextension.cpp:25
bool isLinear() const override
Definition: spectraleffectsextension.cpp:113
Definition: radiationencoder.h:39
void removeDummyPrepareSteps()
Definition: spectraleffectsextension.cpp:428
ProjectionData projectSparse(const SparseVoxelVolume &volume) override
Provides the functionality to forward project SparseVoxelVolume data.
Definition: spectraleffectsextension.cpp:102
The CompositeVolume class is a container to hold multiple volume datasets of any type from the CTL.
Definition: compositevolume.h:108
ProjectionData singleBinIntensityLinear(const std::vector< ProjectionData > &materialProjs, const std::vector< float > &massAttenCoeffs, const BinInformation &binInfo)
Definition: spectraleffectsextension.cpp:347
ProjectionData projectNonLinear(const CompositeVolume &volume)
Definition: spectraleffectsextension.cpp:306
void addDummyPrepareSteps()
Definition: spectraleffectsextension.cpp:418
#define CTL_TYPE_ID(newIndex)
Definition: serializationinterface.h:189
QVariant parameter() const override
Definition: spectraleffectsextension.cpp:133
The SpectralVolumeData class holds voxelized data (for a single material) along with information on i...
Definition: spectralvolumedata.h:40
void setSpectralSamplingResolution(float energyBinWidth)
Definition: spectraleffectsextension.cpp:158
ProjectionData projectLinear(const CompositeVolume &volume)
Definition: spectraleffectsextension.cpp:229
void applyDetectorResponse(ProjectionData &intensity, float energy) const
Definition: spectraleffectsextension.cpp:211
void updateSpectralInformation()
Definition: spectraleffectsextension.cpp:171
AcquisitionSetup _setup
A copy of the setup used for acquisition.
Definition: spectraleffectsextension.h:119
The ProjectorExtension class provides the interface to extend projectors with additional functionalit...
Definition: projectorextension.h:136
Definition: radiationencoder.h:42
bool canBypassExtension(const CompositeVolume &volume) const
Definition: spectraleffectsextension.cpp:183