Support curved detector
Currently, we only support planar detector planes. However, it is desirable to support different kinds of detector planes, specifically, a curved detector.
This is a good way of extending and overhauling a couple of things.
- The
DataDescriptor
hierarchy
Our current idea, is that we want to add the notion of detector plane to our descriptor class hierarchy. As it inherently affects the way data was captured. So, we would add some kind of abstract subclass along the way of DetectorDescriptor
, from which we would further derive two classes for planar and curved detectors.
Our current design has a non abstract base class with a couple of derived classes. Tobias and I concluded that it would be a little cleaner to put the functionality of the base class into another derived class (current name VolumeDescriptor
, any better/other ideas?)
This would in theory make it possible to make the distinction of DataContainer
s if they are describing volume data or detector data. If wanted, this can be further investigated.
- Geometry and Ray generation
With the above change, the ray generation has to change depending on the type of detector. Therefore, this is one of the crucial features of the new descriptors. For this to work and give a nice API, it most likely is necessary/makes sense to include the geometry data in the DetectorDescriptor
. This is not a major change, but it will require some adaption on the projectors side.
- Iterator-like interface for traversal
This is not really connected, but as I'm already working on the general area, this could be a nice change. Currently, we construct a traversal object and call a couple of functions, which just update the current state of the traversal. This could be changed nicely into a iterator-like interface. With operator++
calling the update function and operator*
returning the current voxel and distance.
I'll start with making the DataDescriptor
a abstract base class and create the new derived class. After this is merged, I'll start working on the other things.
TODOs:
-
Abstract DataDescriptor -
Planar version of DetectorDescriptor
-
Curved version of DetectorDescriptor
-
Adapting API to store Geometry (maybe other information) in DetectorDescriptor -
Adapting Projectors to be aware of Detector type (if necessary, hopefully not) -
Iterator-like interface for traversal