CTL  0.6.1
Computed Tomography Library
radiationencoder.h
1 #ifndef CTL_RADIATIONENCODER_H
2 #define CTL_RADIATIONENCODER_H
3 
4 #include "acquisitionsetup.h"
6 #include "models/intervaldataseries.h"
7 
8 namespace CTL {
9 
10 // forward declaration
11 class SpectralInformation;
12 
14 {
15 public:
16  explicit RadiationEncoder(const SimpleCTSystem* system);
17 
18  void assignSystem(const SimpleCTSystem* system);
19  IntervalDataSeries finalSpectrum(uint nbSamples) const;
20  IntervalDataSeries finalSpectrum(EnergyRange range, uint nbSamples) const;
21  double finalPhotonFlux() const;
22 
23  float photonsPerPixelMean() const;
24  float photonsPerPixel(uint module) const;
25  std::vector<float> photonsPerPixel() const;
26 
27  float detectiveQuantumEfficiency() const;
28  float detectiveMeanEnergy() const;
29 
30  const SimpleCTSystem* system() const;
31 
32  static SpectralInformation spectralInformation(AcquisitionSetup setup, float energyResolution = 0.0f);
33 
34 private:
35  // member variables
37 };
38 
40 {
41 public:
43  {
44  std::vector<double> intensities; // for each view
45  std::vector<double> adjustedFluxMods; // for each view
46  float energy;
47  };
48 
49  uint nbEnergyBins() const;
50  float binWidth() const;
51  const BinInformation& bin(uint binIdx) const;
52  const std::vector<double>& totalIntensity() const;
53  const Range<float>& fullCoverageRange() const;
54  float highestReso() const;
55 
56  void reserveMemory(uint nbBins, uint nbViews);
57 
58 private:
59  float _binWidth{};
60  std::vector<BinInformation> _bins; // for each bin
61  std::vector<double> _totalIntensities; // for each view
62  Range<float> _fullCoverage = { std::numeric_limits<float>::max(), 0.0f };
63  float _bestReso = std::numeric_limits<float>::max();
64 
65  void extractViewSpectrum(const RadiationEncoder* encoder, uint viewIdx);
66 
67  friend class RadiationEncoder;
68 };
69 
70 } // namespace CTL
71 
72 #endif // CTL_RADIATIONENCODER_H
float detectiveQuantumEfficiency() const
Definition: radiationencoder.cpp:122
void assignSystem(const SimpleCTSystem *system)
Definition: radiationencoder.cpp:20
Definition: radiationencoder.h:13
Holds a CTSystem together with the information about the system settings for all views from which pro...
Definition: acquisitionsetup.h:175
std::vector< float > photonsPerPixel() const
Definition: radiationencoder.cpp:101
double finalPhotonFlux() const
Definition: radiationencoder.cpp:64
The IntervalDataSeries class is a container for a series of values sampled in equidistant steps (i....
Definition: intervaldataseries.h:65
Definition: radiationencoder.h:39
float detectiveMeanEnergy() const
Definition: radiationencoder.cpp:139
float photonsPerPixelMean() const
Definition: radiationencoder.cpp:82
const SimpleCTSystem * _system
Pointer to system whose radiation shall be encoded.
Definition: radiationencoder.h:36
unsigned int uint
Qt style alias for unsigned int.
Definition: modulelayout.h:6
The SimpleCTSystem class is a specialized sub-class of CTSystem for simple systems (i....
Definition: simplectsystem.h:95
IntervalDataSeries finalSpectrum(uint nbSamples) const
Definition: radiationencoder.cpp:32
Definition: radiationencoder.h:42