CTL  0.6.1
Computed Tomography Library
preparesteps.h
1 #ifndef CTL_PREPARESTEPS_H
2 #define CTL_PREPARESTEPS_H
3 
4 #include "abstractpreparestep.h"
5 #include "simplectsystem.h"
6 #include "mat/matrix_utils.h"
7 #include "processing/range.h"
8 
9 #include <QSizeF>
10 
11 namespace CTL {
12 namespace prepare {
13 
14 // ### ### ### ###
15 // ### GANTRIES ###
16 // ### ### ### ###
17 
19 {
21 
22 public:
23  void setRotationAngle(double rotation) { _newRotationAngle = {true, rotation}; }
24  void setPitchPosition(double pitch) { _newPitchPosition = {true, pitch}; }
25  void setTiltAngle(double tilt) { _newTiltAngle = {true, tilt}; }
26 
27  // AbstractPrepareStep interface
28  void prepare(SimpleCTSystem& system) const override;
29  bool isApplicableTo(const CTSystem &system) const override;
30  void fromVariant(const QVariant& variant) override; // de-serialization
31  QVariant toVariant() const override; // serialization
32 
33  // single parameter factories
34  static std::shared_ptr<TubularGantryParam> forRotationAngle(double rotation);
35  static std::shared_ptr<TubularGantryParam> forPitchPosition(double pitch);
36  static std::shared_ptr<TubularGantryParam> forTiltAngle(double tilt);
37 
38 private:
39  QPair<bool,double> _newRotationAngle = {false, 0.0};
40  QPair<bool,double> _newPitchPosition = {false, 0.0};
41  QPair<bool,double> _newTiltAngle = {false, 0.0};
42 };
43 
45 {
47 
48 public:
49  void setLocation(const mat::Location& location) { _newLocation = {true, location}; }
50  void setCarmSpan(double span) { _newCarmSpan = {true, span}; }
51 
52  // AbstractPrepareStep interface
53  void prepare(SimpleCTSystem& system) const override;
54  bool isApplicableTo(const CTSystem &system) const override;
55  void fromVariant(const QVariant& variant) override; // de-serialization
56  QVariant toVariant() const override; // serialization
57 
58  // single parameter factories
59  static std::shared_ptr<CarmGantryParam> forLocation(const mat::Location& location);
60  static std::shared_ptr<CarmGantryParam> forCarmSpan(double span);
61 
62 private:
63  QPair<bool,mat::Location> _newLocation = {false, mat::Location()};
64  QPair<bool,double> _newCarmSpan = {false, 0.0};
65 };
66 
68 {
70 
71 public:
72  void setDetectorLocation(const mat::Location& location) { _newDetectorLocation = {true, location}; }
73  void setSourceLocation(const mat::Location& location) { _newSourceLocation = {true, location}; }
74 
75  // AbstractPrepareStep interface
76  void prepare(SimpleCTSystem& system) const override;
77  bool isApplicableTo(const CTSystem &system) const override;
78  void fromVariant(const QVariant& variant) override; // de-serialization
79  QVariant toVariant() const override; // serialization
80 
81  // single parameter factories
82  static std::shared_ptr<GenericGantryParam> forDetectorLocation(const mat::Location& location);
83  static std::shared_ptr<GenericGantryParam> forSourceLocation(const mat::Location& location);
84 
85 private:
86  QPair<bool,mat::Location> _newDetectorLocation = {false, mat::Location()};
87  QPair<bool,mat::Location> _newSourceLocation = {false, mat::Location()};
88 };
89 
91 {
93 
94 public:
95  void setDetectorDisplacement(const mat::Location& displacement) { _newDetectorDisplacement = {true, displacement}; }
96  void setGantryDisplacement(const mat::Location& displacement) { _newGantryDisplacement = {true, displacement}; }
97  void setSourceDisplacement(const mat::Location& displacement) { _newSourceDisplacement = {true, displacement}; }
98 
99  void incrementDetectorDisplacement(const mat::Location& increment) { _detectorDisplacementIncrement = {true, increment}; }
100  void incrementSourceDisplacement(const mat::Location& increment) { _sourceDisplacementIncrement = {true, increment}; }
101 
102  // AbstractPrepareStep interface
103  void prepare(SimpleCTSystem& system) const override;
104  bool isApplicableTo(const CTSystem &system) const override;
105  void fromVariant(const QVariant& variant) override; // de-serialization
106  QVariant toVariant() const override; // serialization
107 
108  // single parameter factories
109  static std::shared_ptr<GantryDisplacementParam>
110  forDetectorDisplacement(const mat::Location& displacement);
111  static std::shared_ptr<GantryDisplacementParam>
112  forGantryDisplacement(const mat::Location& displacement);
113  static std::shared_ptr<GantryDisplacementParam>
114  forSourceDisplacement(const mat::Location& displacement);
115  static std::shared_ptr<GantryDisplacementParam>
116  forDetectorDisplacementIncrement(const mat::Location& increment);
117  static std::shared_ptr<GantryDisplacementParam>
118  forSourceDisplacementIncrement(const mat::Location& increment);
119 
120 private:
121  QPair<bool,mat::Location> _newDetectorDisplacement = {false, mat::Location()};
122  QPair<bool,mat::Location> _newGantryDisplacement = {false, mat::Location()};
123  QPair<bool,mat::Location> _newSourceDisplacement = {false, mat::Location()};
124  QPair<bool,mat::Location> _detectorDisplacementIncrement = {false, mat::Location()};
125  QPair<bool,mat::Location> _sourceDisplacementIncrement = {false, mat::Location()};
126 };
127 
128 // ### ### ### ###
129 // ### SOURCES ###
130 // ### ### ### ###
131 
133 {
135 
136 public:
137  void setEnergyRangeRestriction(const Range<float>& range) { _energyRangeRestr = {true, range}; }
138  void setFluxModifier(double modifier) { _newFluxModifier = {true, modifier}; }
139  void setFocalSpotSize(const QSizeF &size) { _newFocalSpotSize = {true, size}; }
140  void setFocalSpotPosition(const Vector3x1 &position) { _newSpotPosition = {true, position}; }
141 
142  // AbstractPrepareStep interface
143  void prepare(SimpleCTSystem& system) const override;
144  bool isApplicableTo(const CTSystem &system) const override;
145  void fromVariant(const QVariant& variant) override; // de-serialization
146  QVariant toVariant() const override; // serialization
147 
148  // single parameter factories
149  static std::shared_ptr<SourceParam> forEnergyRangeRestriction(const Range<float>& range);
150  static std::shared_ptr<SourceParam> forFluxModifier(double modifier);
151  static std::shared_ptr<SourceParam> forFocalSpotSize(const QSizeF& size);
152  static std::shared_ptr<SourceParam> forFocalSpotPosition(const Vector3x1& position);
153 
154 protected:
155  QPair<bool,double> _newFluxModifier = {false, 0.0};
156  QPair<bool,QSizeF> _newFocalSpotSize = {false, QSizeF(0.0, 0.0)};
157  QPair<bool,Vector3x1> _newSpotPosition = {false, Vector3x1(0.0)};
158  QPair<bool,Range<float>> _energyRangeRestr = {false, { 0.0f, 0.0f } };
159 };
160 
162 {
164 
165 public:
166  void setPhotonEnergy(double energy) { _newPhotonEnergy = {true, energy}; }
167  void setPower(double power) { _newPower = {true, power}; }
168 
169  // AbstractPrepareStep interface
170  void prepare(SimpleCTSystem& system) const override;
171  bool isApplicableTo(const CTSystem &system) const override;
172  void fromVariant(const QVariant& variant) override; // de-serialization
173  QVariant toVariant() const override; // serialization
174 
175  // single parameter factories
176  static std::shared_ptr<XrayLaserParam> forPhotonEnergy(double energy);
177  static std::shared_ptr<XrayLaserParam> forPower(double power);
178 
179 private:
180  QPair<bool,double> _newPhotonEnergy = {false, 0.0};
181  QPair<bool,double> _newPower = {false, 0.0};
182 };
183 
185 {
187 
188 public:
189  void setTubeVoltage(double voltage) { _newTubeVoltage = {true, voltage}; }
190  void setMilliampereSeconds(double mAs) { _newEmissionCurrent = {true, mAs}; }
191 
192  // AbstractPrepareStep interface
193  void prepare(SimpleCTSystem& system) const override;
194  bool isApplicableTo(const CTSystem &system) const override;
195  void fromVariant(const QVariant& variant) override; // de-serialization
196  QVariant toVariant() const override; // serialization
197 
198  // single parameter factories
199  static std::shared_ptr<XrayTubeParam> forTubeVoltage(double voltage);
200  static std::shared_ptr<XrayTubeParam> forMilliampereSeconds(double mAs);
201 
202 private:
203  QPair<bool,double> _newTubeVoltage = {false, 0.0};
204  QPair<bool,double> _newEmissionCurrent = {false, 0.0};
205 };
206 
207 
208 // ### ### ### ###
209 // ### DETECTOR ###
210 // ### ### ### ###
211 
213 {
215 
216 public:
217  void setModuleLocations(QVector<mat::Location> moduleLocations) { _newModuleLocations = {true, moduleLocations}; }
218  void setPixelSize(const QSizeF& size) { _newPixelSize = {true, size}; }
219  void setSkewAngle(double skewAngle) { _newSkewAngle = {true, skewAngle}; }
220 
221  // AbstractPrepareStep interface
222  void prepare(SimpleCTSystem& system) const override;
223  bool isApplicableTo(const CTSystem &system) const override;
224  void fromVariant(const QVariant& variant) override; // de-serialization
225  QVariant toVariant() const override; // serialization
226 
227  // single parameter factories
228  static std::shared_ptr<GenericDetectorParam>
229  forModuleLocations(QVector<mat::Location> moduleLocations);
230  static std::shared_ptr<GenericDetectorParam> forPixelSize(const QSizeF& size);
231  static std::shared_ptr<GenericDetectorParam> forSkewAngle(double skewAngle);
232 
233 private:
234  QPair<bool,QVector<mat::Location>> _newModuleLocations = {false, QVector<mat::Location>()};
235  QPair<bool,QSizeF> _newPixelSize = {false, QSizeF()};
236  QPair<bool,double> _newSkewAngle = {false, 0.0};
237 };
238 
239 } // namespace prepare
240 } // namespace CTL
241 
242 #endif // CTL_PREPARESTEPS_H
QVariant toVariant() const override
Definition: preparesteps.cpp:200
void fromVariant(const QVariant &variant) override
Definition: preparesteps.cpp:639
bool isApplicableTo(const CTSystem &system) const override
Definition: preparesteps.cpp:507
Definition: preparesteps.h:212
bool isApplicableTo(const CTSystem &system) const override
Definition: preparesteps.cpp:569
Definition: preparesteps.h:184
Definition: preparesteps.h:90
Definition: preparesteps.h:132
bool isApplicableTo(const CTSystem &system) const override
Definition: preparesteps.cpp:39
QVariant toVariant() const override
Definition: preparesteps.cpp:57
void prepare(SimpleCTSystem &system) const override
Definition: preparesteps.cpp:95
void prepare(SimpleCTSystem &system) const override
Definition: preparesteps.cpp:615
Base class for preparation steps used within an AcquisitionSetup.
Definition: abstractpreparestep.h:46
void prepare(SimpleCTSystem &system) const override
Definition: preparesteps.cpp:230
bool isApplicableTo(const CTSystem &system) const override
Definition: preparesteps.cpp:403
void fromVariant(const QVariant &variant) override
Definition: preparesteps.cpp:45
void prepare(SimpleCTSystem &system) const override
Definition: preparesteps.cpp:553
void prepare(SimpleCTSystem &system) const override
Definition: preparesteps.cpp:381
QVariant toVariant() const override
Definition: preparesteps.cpp:525
bool isApplicableTo(const CTSystem &system) const override
Definition: preparesteps.cpp:633
QVariant toVariant() const override
Definition: preparesteps.cpp:130
void fromVariant(const QVariant &variant) override
Definition: preparesteps.cpp:182
Definition: preparesteps.h:18
bool isApplicableTo(const CTSystem &system) const override
Definition: preparesteps.cpp:273
QVariant toVariant() const override
Definition: preparesteps.cpp:587
Definition: matrix_utils.h:27
Definition: preparesteps.h:44
Definition: preparesteps.h:161
QVariant toVariant() const override
Definition: preparesteps.cpp:314
#define CTL_TYPE_ID(newIndex)
Definition: serializationinterface.h:189
QVariant toVariant() const override
Definition: preparesteps.cpp:670
bool isApplicableTo(const CTSystem &system) const override
Definition: preparesteps.cpp:110
void fromVariant(const QVariant &variant) override
Definition: preparesteps.cpp:278
bool isApplicableTo(const CTSystem &system) const override
Definition: preparesteps.cpp:176
void prepare(SimpleCTSystem &system) const override
Definition: preparesteps.cpp:491
QVariant toVariant() const override
Definition: preparesteps.cpp:434
void fromVariant(const QVariant &variant) override
Definition: preparesteps.cpp:575
void prepare(SimpleCTSystem &system) const override
Definition: preparesteps.cpp:22
void fromVariant(const QVariant &variant) override
Definition: preparesteps.cpp:513
void prepare(SimpleCTSystem &system) const override
Definition: preparesteps.cpp:158
Definition: preparesteps.h:67
The Range class holds start and end point of a value range (or interval) and provides a few convenien...
Definition: sparsevoxelvolume.h:12
void fromVariant(const QVariant &variant) override
Definition: preparesteps.cpp:116
void fromVariant(const QVariant &variant) override
Definition: preparesteps.cpp:408