CTL  0.6.1
Computed Tomography Library
abstractsubsetgenerator.h
1 #ifndef CTL_ABSTRACTSUBSETGENERATOR_H
2 #define CTL_ABSTRACTSUBSETGENERATOR_H
3 
4 #include "img/projectiondataview.h"
6 
7 #include <random>
8 
9 namespace CTL {
10 
11 class AcquisitionSetup;
12 
58 {
60 
61  protected:virtual std::vector<ProjectionDataView> generateSubsetsImpl(uint iteration) const = 0;
62 
63 public:
64  virtual ~AbstractSubsetGenerator() = default;
65 
66  // SerializationInterface interface
67  void fromVariant(const QVariant& variant) override;
68  QVariant toVariant() const override;
69 
70  virtual void setSetup(const AcquisitionSetup&) {}
72 
73  // convenience combined setter
75 
76  std::vector<ProjectionDataView> generateSubsets(uint iteration) const;
77  virtual std::vector<std::vector<ProjectionDataView>> generateAllSubsets(uint nbIterations);
78 
79  bool isSubsetPermutationEnabled() const;
80  const ProjectionDataView& projections() const;
81  uint randomGeneratorSeed() const;
82  void setRandomGeneratorSeed(uint seed = std::random_device{}());
83  void setSubsetPermutationEnabled(bool enabled);
84 
85 protected:
89  AbstractSubsetGenerator& operator=(const AbstractSubsetGenerator&) = default;
90  AbstractSubsetGenerator& operator=(AbstractSubsetGenerator&&) = default;
91 
92  virtual void shuffleSubsets(std::vector<ProjectionDataView>& subsets) const;
93 
95  mutable std::mt19937 _rng;
96  uint _rngSeed = 42;
97  bool _permuteSubsets = true;
98 };
99 
118 {
120 
121 public:
122  uint nbSubsets() const;
124 
125  // SerializationInterface interface
126  void fromVariant(const QVariant& variant) override;
127  QVariant toVariant() const override;
128 
129 protected:
131 
132  uint _nbSubsets = 1u;
133 };
134 
135 
136 namespace assist {
137 
138 enum class SubsetArrangement { Evenly, LastIsLargest, LastIsSmallest };
139 
140 std::vector<uint> subsetSizes(uint nbViews, uint nbSubsets, SubsetArrangement arrangement = SubsetArrangement::Evenly);
141 
142 } // namespace assist
143 
144 
145 } // namespace CTL
146 
147 #endif // CTL_ABSTRACTSUBSETGENERATOR_H
ProjectionDataView _fullProjections
The projection data view this instance operates on.
Definition: abstractsubsetgenerator.h:94
virtual void shuffleSubsets(std::vector< ProjectionDataView > &subsets) const
Randomly permutes the order of the subsets in subsets.
Definition: abstractsubsetgenerator.cpp:47
static ProjectionDataView invalidView()
Creates a ProjectionDataView that does not reference any data.
Definition: projectiondataview.cpp:60
bool isSubsetPermutationEnabled() const
Returns true if subset permutation is enabled; false otherwise.
Definition: abstractsubsetgenerator.cpp:175
uint nbSubsets() const
Returns the number of subsets that are generated.
Definition: abstractsubsetgenerator.cpp:224
QVariant toVariant() const override
Definition: abstractsubsetgenerator.cpp:248
QVariant toVariant() const override
Definition: abstractsubsetgenerator.cpp:66
Holds a CTSystem together with the information about the system settings for all views from which pro...
Definition: acquisitionsetup.h:175
The ProjectionDataView class is a read-only wrapper for a reference to ProjectionData.
Definition: projectiondataview.h:51
bool _permuteSubsets
state variable if subset permutation is enabled
Definition: abstractsubsetgenerator.h:97
std::vector< uint > subsetSizes(uint nbViews, uint nbSubsets, SubsetArrangement arrangement)
Convenience helper function that calculates sizes for subsets given the total number of projections n...
Definition: abstractsubsetgenerator.cpp:295
Specify an interface for de-/serialization from/to QVariants.
Definition: serializationinterface.h:17
void fromVariant(const QVariant &variant) override
Definition: abstractsubsetgenerator.cpp:238
std::mt19937 _rng
random number generator (RNG) instance
Definition: abstractsubsetgenerator.h:95
virtual void setProjections(ProjectionDataView projections)
Sets the projections that this instance shall operate on to projections.
Definition: abstractsubsetgenerator.cpp:90
AbstractSubsetGenerator()
Constructs an AbstractSubsetGenerator.
Definition: abstractsubsetgenerator.cpp:33
void fromVariant(const QVariant &variant) override
Definition: abstractsubsetgenerator.cpp:53
virtual std::vector< std::vector< ProjectionDataView > > generateAllSubsets(uint nbIterations)
Convenience method to generate subsets for a certain number of iterations.
Definition: abstractsubsetgenerator.cpp:161
uint _rngSeed
value used to seed the RNG
Definition: abstractsubsetgenerator.h:96
virtual void setSetup(const AcquisitionSetup &)
Sets the AcquisitionSetup that belongs to the projection data to setup.
Definition: abstractsubsetgenerator.h:70
#define CTL_TYPE_ID(newIndex)
Definition: serializationinterface.h:189
void setRandomGeneratorSeed(uint seed=std::random_device{}())
Sets the seed of the RNG to seed and actually seeds the RNG.
Definition: abstractsubsetgenerator.cpp:194
unsigned int uint
Qt style alias for unsigned int.
Definition: modulelayout.h:6
The AbstractSubsetGenerator class is the abstract base class for subset generators.
Definition: abstractsubsetgenerator.h:57
const ProjectionDataView & projections() const
Returns the ProjectionDataView that has been set via setProjections().
Definition: abstractsubsetgenerator.cpp:180
virtual std::vector< ProjectionDataView > generateSubsetsImpl(uint iteration) const =0
Implementation of the generation algorithm for subsets in the iteration -th iteration.
void setSubsetPermutationEnabled(bool enabled)
Sets the use of subset permutation to enabled.
Definition: abstractsubsetgenerator.cpp:207
void setNbSubsets(uint nbSubsets)
Sets the number of subsets that will be generated to nbSubsets.
Definition: abstractsubsetgenerator.cpp:229
The AbstractFixedSizeSubsetGenerator class specializes the AbstractSubsetGenerator for generators tha...
Definition: abstractsubsetgenerator.h:117
void setData(ProjectionDataView projections, const AcquisitionSetup &setup)
Sets the projections to projections and the corresponding acquisition setup to setup.
Definition: abstractsubsetgenerator.cpp:120
std::vector< ProjectionDataView > generateSubsets(uint iteration) const
Generates the subsets for iteration iteration.
Definition: abstractsubsetgenerator.cpp:137
uint randomGeneratorSeed() const
Returns the seed that has been used to seed the RNG of this instance.
Definition: abstractsubsetgenerator.cpp:189