CTL  0.6.1
Computed Tomography Library
abstractdynamicvolumedata.h
1 #ifndef CTL_ABSTRACTDYNAMICVOLUMEDATA_H
2 #define CTL_ABSTRACTDYNAMICVOLUMEDATA_H
3 
4 #include "spectralvolumedata.h"
5 #include "models/xydataseries.h"
6 #include "processing/range.h" // for Range<T>
7 
8 /*
9  * NOTE: This is header only.
10  */
11 
12 namespace CTL {
13 
15 {
16  // abstract interface
17  protected:virtual void updateVolume() = 0;
18  public: SpectralVolumeData* clone() const override = 0;
19 
20 public:
22 
23  virtual XYDataSeries timeCurve(uint x, uint y, uint z, const std::vector<float>& timePoints);
24 
25  void setTime(double seconds);
26  double time() const;
27  XYDataSeries timeCurve(uint x, uint y, uint z, float tStart, float tEnd, uint nbSamples);
28  XYDataSeries timeCurve(uint x, uint y, uint z, SamplingRange timeRange, uint nbSamples);
29 
30 protected:
33  AbstractDynamicVolumeData& operator=(const AbstractDynamicVolumeData&) = default;
35 
36 private:
37  double _time = 0.0;
38 };
39 
44  : SpectralVolumeData(other)
45 {
46 }
47 
58  const std::vector<float>& timePoints)
59 {
60  XYDataSeries ret;
61  const auto timePtCache = time();
62 
63  for(const auto& smp : timePoints)
64  {
65  setTime(smp);
66  ret.append(smp, this->operator()(x,y,z));
67  }
68 
69  // reset time point to initial value
70  setTime(timePtCache);
71 
72  return ret;
73 }
74 
75 inline void AbstractDynamicVolumeData::setTime(double seconds)
76 {
77  _time = seconds;
78  updateVolume();
79 }
80 
81 inline double AbstractDynamicVolumeData::time() const { return _time; }
82 
90  float tStart, float tEnd, uint nbSamples)
91 {
92  return timeCurve(x, y, z, SamplingRange(tStart, tEnd).linspace(nbSamples));
93 }
94 
104  SamplingRange timeRange, uint nbSamples)
105 {
106  return timeCurve(x, y, z, timeRange.linspace(nbSamples));
107 }
108 
109 } // namespace CTL
110 
111 #endif // CTL_ABSTRACTDYNAMICVOLUMEDATA_H
double _time
current time in milliseconds
Definition: abstractdynamicvolumedata.h:37
std::vector< T > linspace(uint nbSamples, bool endpoint=true) const
Generates a vector with nbSamples points that are equally distributed across this range.
Definition: range.h:203
virtual XYDataSeries timeCurve(uint x, uint y, uint z, const std::vector< float > &timePoints)
Definition: abstractdynamicvolumedata.h:57
AbstractDynamicVolumeData(const SpectralVolumeData &other)
Definition: abstractdynamicvolumedata.h:43
The XYDataSeries class is container for a series of data points, each representing x and y value pair...
Definition: xydataseries.h:60
unsigned int uint
Qt style alias for unsigned int.
Definition: modulelayout.h:6
The SpectralVolumeData class holds voxelized data (for a single material) along with information on i...
Definition: spectralvolumedata.h:40
void append(const QPointF &sample)
Definition: xydataseries.cpp:295
Definition: abstractdynamicvolumedata.h:14