- Module A collection of error functions.
- replace with boost::erf
- Module A collection of error functions.
- replace with boost::erf
- Module A collection of error functions.
- replace with boost::erf
- File abs_image.cxx
- Potentially, in the future it should be included in stir_math as an option.
- File apply_normfactors.cxx
- should be replaced by using stir::BinNormalisationFromML2D
- File apply_patlak_to_images.cxx
Reimplement the method for image-based input function.
Add to the Doxygen documentation a reference to their paper and how exactly this utility works.
- File attenuation_coefficients_to_projections.cxx
- get threshold from command line
- File BackProjectorByBinNiftyPET.h
NiftyPET limitations - currently limited to the Siemens mMR scanner and requires to CUDA.
STIR wrapper limitations - currently only projects all of the data (no subsets). NiftyPET currently supports spans 0, 1 and 11, but the STIR wrapper has only been tested for span-11.
- File BasicCoordinate.h
- The arithmetic operations might at some point be moved to a derived class stir::CartesianCoordinate.
- File BinNormalisationFromECAT8.cxx
- merge ECAT7 and 8 code
- File BinNormalisationFromGEHDF5.cxx
- remove duplication
- File Bland_Altman_plot.cxx
- Add to the Doxygen documentation a reference to their paper and how exactly this utility works.
- Module caching-related methods
- It should be possible to read only part of the cache in memory.
- File convecat6_if.cxx
- This could easily be used to convert to other file formats. For images, this simply involves changing the OutputFileFormat. For projection data, we would have to extend OutputFileFormat to handle projection data.
- Module copy_fill
current mechanism requires overloading for specific classes. This could be resolved using SFINAE.
- Module data_buildblock
- move projection data etc in here
- File distributableMPICacheEnabled.cxx
- merge with distributable.cxx
- File distributed_test_functions.h
- Currently no independent test functions are implemented. The tests are used by embedding them into the reconstruction functions and calling them once.
- File ForwardProjectorByBinNiftyPET.h
NiftyPET limitations - currently limited to the Siemens mMR scanner and requires to CUDA.
STIR wrapper limitations - currently only projects all of the data (no subsets). NiftyPET currently supports spans 0, 1 and 11, but the STIR wrapper has only been tested for span-11.
- File GenerateImage.h
- Code duplicates things from stir::InterfileHeader. This is bad as it might miss new features being added there.
- File index_at_maximum.h
- move implementations to .cxx
- File line_distances.h
- move implementations to .cxx
- File line_profiles_through_projdata.cxx
- put the output profile name as a first argument after the command, to follow STIR conventions.
- File list_TAC_ROI_values.cxx
Add the –V option to include the volume information for the sample region.
Merge it with the list_ROI_values.cxx utility.
- File LmToProjDataNiftyPET.h
NiftyPET limitations - currently limited to the Siemens mMR scanner and requires to CUDA.
STIR wrapper limitations - currently only projects all of the data (no subsets). NiftyPET currently supports spans 0, 1 and 11, but the STIR wrapper has only been tested for span-11.
- File mult_image_parameters.cxx
Make a generic utility which will multiply all the parameters together and store them in a multiple image file.
It might be possible to integrate it into the stir_math.cxx, in the future.
- File mult_model_with_dyn_images.cxx
- Add to the Doxygen documentation how exactly this utility works.
- File NiftyPETHelper.h
NiftyPET limitations - currently limited to the Siemens mMR scanner and requires to CUDA.
STIR wrapper limitations - currently only projects all of the data (no subsets). NiftyPET currently supports spans 0, 1 and 11, but the STIR wrapper has only been tested for span-11.
- Class stir::AnalyticReconstruction
- Currently the template argument uses DiscretisedDensity because of conversion problems with stir::shared_ptr. Maybe it will be possible to correct this once we use boost:shared_ptr.
- Member stir::angle (const BasicCoordinate< num_dimensions, coordT > &p1, const BasicCoordinate< num_dimensions, coordT > &p2)
- move to a new CartesianCoordinate class
- Member stir::apply_array_functions_on_each_index (Array< num_dim, elemT > &out_array, const Array< num_dim, elemT > &in_array, FunctionObjectPtrIter start, FunctionObjectPtrIter stop)
- Add a specialisation such that this function would handle iterators of function objects and (smart) pointers to function objects. At the moment, it's only the latter.
- Member stir::apply_array_functions_on_each_index (Array< num_dim, elemT > &out_array, const Array< num_dim, elemT > &in_array, ActualFunctionObjectPtrIter start, ActualFunctionObjectPtrIter stop)
- Modify such that this function would handle function objects and (smart) pointers to ArrayFunctionObject objects. At the moment, it's only the latter.
- Member stir::ArcCorrection::get_arc_corrected_proj_data_info_sptr () const
- return a shared_ptr<ProjDataInfoCylindricalArcCorr> after switching to boost::shared_ptr.
- Member stir::ArcCorrection::get_not_arc_corrected_proj_data_info_sptr () const
- return a shared_ptr<ProjDataInfoCylindricalNoArcCorr> after switching to boost::shared_ptr.
- Class stir::ArrayFilter1DUsingConvolution< elemT >
- implement other boundary conditions
- Member stir::Bin::operator/= (const float dx)
- It is zero division proof in a similar way to divide<,,>(), though I am not sure if it should be.
- Class stir::BinNormalisationFromAttenuationImage
- Add mechanism for caching the attenuation correction factors, such that they will be calculated only once. However, caching should by default be disabled, as most applications need them only once anyway.
- Class stir::BinNormalisationPETFromComponents
This class should probably be derived from BinNormalisationWithCalibration.
The class currently does not handle "compressed" projection data (i.e. span etc).
Currently, set_up() creates a ProjDataInMemory object with the PET detection efficiencies. This uses a lot of memory unfortunately.
- Class stir::BSpline::BSplines1DRegularGrid< out_elemT, in_elemT, constantsT >
- remove overlap with the n-dimensional version BSplinesRegularGrid
- Member stir::BSpline::BSplinesRegularGrid< num_dimensions, out_elemT, in_elemT, constantsT >::gradient (const BasicCoordinate< num_dimensions, pos_type > &relative_positions) const
- should probably be templated in pos_type.
- Member stir::BSpline::BSplinesRegularGrid< num_dimensions, out_elemT, in_elemT, constantsT >::operator() (const BasicCoordinate< num_dimensions, pos_type > &relative_positions) const
- should probably be templated in pos_type.
- Member stir::BSpline::BSplinesRegularGrid< num_dimensions, out_elemT, in_elemT, constantsT >::set_coef (const Array< num_dimensions, in_elemT > &input)
- rename
- Class stir::CListEvent
- this is still under development. Things to add are for instance energy windows and time-of-flight info. Also, get_bin() would need time info or so for rotating scanners.
- Class stir::CListEventPENN
- Fix the rotation
- Member stir::CListModeDataSAFIR< CListRecordT >::has_delayeds () const override
- Implement this properly to check for delayed events in LM files.
- Member stir::CListModeDataSAFIR< CListRecordT >::save_get_position () override
- Maybe provide real implementation?
- Class stir::CombinedShape3D< operation >
document more
Parsing cannot work yet because of template (can be solved by explicit instantiation)
- Class stir::CorrectProjDataApplication
- Preliminary class interface. At some point, this class should move to the library, instead of being in correct_projdata.cxx.
- Member stir::cos_angle (const BasicCoordinate< num_dimensions, coordT > &p1, const BasicCoordinate< num_dimensions, coordT > &p2)
- move to a new CartesianCoordinate class
- Class stir::CudaRelativeDifferencePrior< elemT >
- Limitation: currently only weights of size 3x3x3 are supported. Therefore, single slice images will lead to an error being thrown.
- Class stir::DataSymmetriesForBins
- I have used Bin here to have the 4 coordinates, but Bin has data as well which is not really necessary here.
- Member stir::Densel
- This might at some point evolve into a class, similar to Bin.
- Class stir::DetectionPosition< coordT >
- document directions
- Member stir::determinant (const Array< 2, elemT > &m)
- Only works for low dimensions for now.
- Member stir::DiscretisedDensityOnCartesianGrid< num_dimensions, elemT >::actual_get_index_coordinates_for_relative_coordinates (const CartesianCoordinate3D< float > &coords) const override
- cope with non-standard orientations
- Member stir::DiscretisedDensityOnCartesianGrid< num_dimensions, elemT >::actual_get_relative_coordinates_for_indices (const BasicCoordinate< num_dimensions, float > &indices) const override
- cope with non-standard orientations
- Member stir::DiscretisedShape3D::operator== (const Shape3D &) const override
- currently not implemented (will call error()
- Member stir::DiscretisedShape3D::scale (const CartesianCoordinate3D< float > &scale3D) override
- Not implemented (will call error())
- Member stir::distributable_computation (const shared_ptr< ForwardProjectorByBin > &forward_projector_sptr, const shared_ptr< BackProjectorByBin > &back_projector_sptr, const shared_ptr< DataSymmetriesForViewSegmentNumbers > &symmetries_sptr, DiscretisedDensity< 3, float > *output_image_ptr, const DiscretisedDensity< 3, float > *input_image_ptr, const shared_ptr< ProjData > &proj_data_ptr, const bool read_from_proj_data, int subset_num, int num_subsets, int min_segment_num, int max_segment_num, bool zero_seg0_end_planes, double *double_out_ptr, const shared_ptr< ProjData > &additive_binwise_correction, const shared_ptr< BinNormalisation > normalise_sptr, const double start_time_of_frame, const double end_time_of_frame, RPC_process_related_viewgrams_type *RPC_process_related_viewgrams, DistributedCachingInformation *caching_info_ptr, int min_timing_pos_num, int max_timing_pos_num)
- The subset-scheme should be moved somewhere else (a Subset class?).
- Member stir::distributable_computation_cache_enabled (const shared_ptr< ForwardProjectorByBin > &forward_projector_ptr, const shared_ptr< BackProjectorByBin > &back_projector_ptr, const shared_ptr< DataSymmetriesForViewSegmentNumbers > &symmetries_ptr, DiscretisedDensity< 3, float > *output_image_ptr, const DiscretisedDensity< 3, float > *input_image_ptr, const shared_ptr< ProjData > &proj_data_sptr, const bool read_from_proj_data, int subset_num, int num_subsets, int min_segment_num, int max_segment_num, bool zero_seg0_end_planes, double *double_out_ptr, const shared_ptr< ProjData > &additive_binwise_correction, const shared_ptr< BinNormalisation > normalise_sptr, const double start_time_of_frame, const double end_time_of_frame, RPC_process_related_viewgrams_type *RPC_process_related_viewgrams, DistributedCachingInformation *caching_info_ptr, int min_timing_pos_num, int max_timing_pos_num)
- Merge this functionality into distributable_computation()
- Class stir::DistributedWorker< TargetT >
The log_likelihood_ptr argument to the RPC function is currently always NULL.
Currently the only computation that is supported corresponds to the gradient computation. It would be trivial to add others.
- Class stir::DynamicDiscretisedDensity
- template in
elemT
and numDimensions?
- Class stir::DynamicProjData
Move read_from_file, write_to_ecat7 to usual registry methods
Interfile support currently doesn't set start_time_in_secs_since_1970
- Class stir::ecat::BinNormalisationFromECAT8
- dead-time is not yet implemented
- Class stir::ecat::CListEventECAT8_32bit
This implementation only works if the list-mode data is stored without axial compression.
If the target sinogram has the same characteristics as the sinogram encoding used in the list file (via the offset), the code could be sped-up dramatically by using the information. At present, we go a huge round-about (offset->sinogram->detectors->sinogram->offset)
- Member stir::ecat::CListModeDataECAT8_32bit::has_delayeds () const override
- this might depend on the acquisition parameters
- Class stir::ecat::ecat7::CListEventDataECAT962
- use DetectionPosition etc.
- Class stir::ecat::ecat7::CListModeDataECAT< CListRecordT >
- This class currently relies in the fact that vector<>::size_type == SavedPosition
- Member stir::ecat::ecat7::CListModeDataECAT< CListRecordT >::CListModeDataECAT (const std::string &listmode_filename_prefix)
- Maybe allow for passing e.g. something_2.lm in case the first lm file is missing.
- Member stir::ecat::ecat7::CListModeDataECAT< CListRecordT >::get_next_record (CListRecord &record) const
- Currently switches over to the next .lm file whenever get_next_record() on the current file fails. This even happens when it failed not because of EOF, or if the listmode file is shorter than 2 GB.
- Member stir::ecat::ecat7::CListModeDataECAT< CListRecordT >::has_delayeds () const
- this might depend on the acquisition parameters
- Member stir::error (const char *const s,...)
- As opposed to using printf-style calling sequence, use a syntax like stir::info
- Member stir::error (const STRING &string)
- At a later stage, it will also write to a log-file.
- Class stir::ExamInfo
this is very incomplete at the moment. Things like bed positions, gating, isotopes etc etc are all missing
This should be an abtract registered object, in order to serve as a complete base function for every input data type.
- Member stir::extract_line (const Array< 3, elemT > &, const BasicCoordinate< 3, int > &index, const int dimension)
- make n-dimensional version
- Class stir::FactoryRegistry< Key, Factory, Compare >
- Probably it would be better to store pointers to factories. However, in that case, the destructor of FactoryRegistry would have to deallocate these factory objects. This would mean that factories have to be allocated with new, and hence would prevent using simple function pointers.
- Class stir::Filter1D< T >
- apply() members can't be const as they call TimedObject::start_timers()
- Member stir::find_centre_of_gravity (const Array< num_dimensions, T > &)
- better error handling
- Class stir::FrameSinglesRates
- This class does not store rates, but totals! Naming is all wrong.
- Class stir::FullArrayIterator< topleveliterT, restiterT, elemT, _Ref, _Ptr >
- use std::enable_if and std::is_convertible as opposed to boost::enable_if_convertible
- Class stir::GE::RDF_HDF5::BinNormalisationFromGEHDF5
- dead-time is not yet implemented
- Member stir::GE::RDF_HDF5::CListModeDataGEHDF5::has_delayeds () const override
- this depends on the acquisition parameters
- Class stir::GE::RDF_HDF5::InputStreamWithRecordsFromHDF5< RecordT >
- Allow choosing between allocation with
new
or on the stack.
- Class stir::GE::RDF_HDF5::SinglesRatesFromGEHDF5
- expose GE::RDF_HDF5::GEHDF5Wrapper.get_exam_info_sptr()
- Class stir::GeneralisedObjectiveFunction< TargetT >
- Currently, there is subset code in both IterativeReconstruction and here. This is confusing and leads to repetition. It probably should all be moved here.
- Member stir::GeneralisedObjectiveFunction< TargetT >::fill_nonidentifiable_target_parameters (TargetT &target, const float value) const
- The type of the value should really be derived from e.g. TargetT::full_iterator.
- Member stir::GeneralisedObjectiveFunction< TargetT >::get_prior_ptr () const
- It would be nicer to not return a pointer.
- Member stir::GeneralisedPriorTests::GeneralisedPriorTests (char const *density_filename=nullptr)
- it would be better to parse an objective function. That would allow us to set all parameters from the command line.
- Member stir::get_min_indices (const Array< num_dimensions, T > &a)
- If the array
- Member stir::HUToMuImageProcessor< TargetT >::virtual_set_up (const TargetT &image) override
- could get manufacturer name, kVp from the image later on, when these become available
- Member stir::in_place_apply_array_function_on_1st_index (Array< num_dim, elemT > &array, FunctionObjectPtr f)
Add a 1D specialisation as the current implementation would be really inefficient in this case.
Add a specialisation such that this function would handle function objects and (smart) pointers to function objects. At the moment, it's only the latter.
- Member stir::in_place_apply_array_functions_on_each_index (Array< num_dim, elemT > &array, FunctionObjectPtrIter start, FunctionObjectPtrIter stop)
- Add a specialisation such that this function would handle function objects and (smart) pointers to function objects. At the moment, it's only the latter.
- Member stir::index_at_maximum (const VectorWithOffset< elemT > &v)
- make iterator version, or something that works on std::vector
- Member stir::indices_at_maximum (const Array< 3, elemT > &input_array)
generalise to arbitrary dimensions
implementation currently cycles through the data twice
- Member stir::info (const STRING &string, const int verbosity_level=1)
- At a later stage, it will also write to a log-file.
- Member stir::inner_product (const BasicCoordinate< num_dimensions, coordT > &p1, const BasicCoordinate< num_dimensions, coordT > &p2)
- move to a new CartesianCoordinate class
- Class stir::InputFileFormat< DataT >
should be able to open for input-output maybe
there is overlap between function having filenames or istreams. This is a bit of a mess. Also, some file formats we might only have an API for using C-style FILE.
- Class stir::InputStreamWithRecords< RecordT, OptionsT >
- Allow choosing between allocation with
new
or on the stack.
- Class stir::InputStreamWithRecordsFromUPENNtxt
- write functions
- Member stir::interpolate_projdata (ProjData &proj_data_out, const ProjData &proj_data_in, const BSpline::BSplineType spline_type, const bool remove_interleaving=false)
- This currently only works for direct sinograms (i.e. segment 0).
- Class stir::IOTests< A >
- Delete STIRtmp.* files, but that's a bit difficult as we don't know which ones are written.
- Class stir::IOTests_DiscretisedDensity
- Delete STIRtmp.* files, but that's a bit difficult as we don't know which ones are written.
- Class stir::IOTests_DynamicDiscretisedDensity
- Delete STIRtmp.* files, but that's a bit difficult as we don't know which ones are written.
- Class stir::IOTests_ParametricDiscretisedDensity
- Delete STIRtmp.* files, but that's a bit difficult as we don't know which ones are written.
- Class stir::IterativeReconstruction< TargetT >
move subset things somewhere else
all the compute
functions should be const
.
- Member stir::IterativeReconstruction< TargetT >::get_initial_data_ptr () const
Dependency on explicit strings "1" or "0" in IterativeReconstruction::initial_data_filename is not nice.
should not return a 'bare' pointer.
- Class stir::KeyArgument
- Should be made a protected enum of KeyParser
- Class stir::KeyParser
add checking functions in the map, as in
add facilities for checking (while parsing) if a keyword was present before the current one
- Member stir::KeyParser::ask_parameters ()
- any consistency checks are currently done by post_processing() at the end of the parsing. It should be possible to have checks after every question such that it can be repeated.
- Member stir::KeyParser::post_processing ()
return Succeeded instead.
rename to post_parsing()
- Class stir::ListEvent
- this is still under development. Things to add are for instance energy windows and time-of-flight info. Also, get_bin() would need time info or so for rotating scanners.
- Member stir::ListEvent::get_bin (Bin &bin, const ProjDataInfo &) const
- get_bin() might need time info or so for rotating scanners.
- Member stir::ListEvent::get_LOR () const =0
- This function might need time info or so for rotating scanners.
- Class stir::ListModeData_dummy
Currently, it can only be used in combination with SIRF.
A possibility is to complete this as a class for cache files.
- Class stir::ListTime
- this is still under development. Things to add are angles or so for rotating scanners. Also, some info on the maximum (and actual?) number of gates would be useful.
- Class stir::LmToProjData
Currently, there is no support for gating or energy windows. This could in principle be added by a derived class, but it would be better to do it here.
Timing info or so for get_bin_from_event() for rotating scanners etc.
There is overlap between the normalisation and the current treatment of bin.get_bin_value(). This is really because we should be using something like a EventNormalisation class for pre-normalisation.
- Member stir::LmToProjData::get_bin_from_event (Bin &bin, const ListEvent &) const
- Would need timing info or so for e.g. time dependent normalisation or angle info for a rotating scanner.
- Member stir::LmToProjData::get_compression_count (const Bin &bin) const
- it is not compatiable with e.g. HiDAC doesn't belong here anyway (more ProjDataInfo?)
- Member stir::LogcoshPrior< elemT >::weights
- This member is mutable at present because some const functions initialise it. That initialisation should be moved to a new set_up() function.
- Class stir::map_element
- make private class in KeyParser
- Member stir::max_eigenvector_using_power_method (elemT &max_eigenvalue, Array< 1, elemT > &max_eigenvector, const Array< 2, elemT > &m, const Array< 1, elemT > &start, const double tolerance=.03, const unsigned long max_num_iterations=10000UL)
- the algorithm would work with hermitian matrices, but the code needs one small adjustment.
- Class stir::MaximalArrayFilter3D< elemT >
Currently, the mask is determined in terms of the mask radius (in pixels), where size = 2*radius+1. This could easily be relaxed.
generalise to n-dimensions
- Class stir::MedianArrayFilter3D< elemT >
Currently, the mask is determined in terms of the mask radius (in pixels), where size = 2*radius+1. This could easily be relaxed.
generalise to n-dimensions
- Class stir::MinimalArrayFilter3D< elemT >
Currently, the mask is determined in terms of the mask radius (in pixels), where size = 2*radius+1. This could easily be relaxed.
generalise to n-dimensions
- Member stir::ModelMatrix< num_param >::multiply_dynamic_image_with_model (ParametricVoxelsOnCartesianGrid ¶metric_image, const DynamicDiscretisedDensity &dynamic_image) const
- current implementation first fills first argument with 0 and then calls multiply_dynamic_image_with_model_and_add_to_input(). This is somewhat inefficient.
- Member stir::ModelMatrix< num_param >::multiply_parametric_image_with_model (DynamicDiscretisedDensity &dynamic_image, const ParametricVoxelsOnCartesianGrid ¶metric_image) const
- current implementation first fills first argument with 0 and then calls multiply_dynamic_image_with_model_and_add_to_input(). This is somewhat inefficient.
- Class stir::NestedIteratorTests
- Code is ugly. Copy-paste with tiny modifications.
- Member stir::norm (const BasicCoordinate< num_dimensions, coordT > &p1)
- move to a new CartesianCoordinate class
- Member stir::norm_squared (const BasicCoordinate< num_dimensions, coordT > &p1)
- move to a new CartesianCoordinate class
- Class stir::OSSPSReconstruction< TargetT >
- split into a preconditioned subgradient descent class and something that computes the preconditioner.
- Class stir::OutputFileFormat< DataT >
Support projection data
Provide functions that enable the user to inquire about capabilities. For instance, supports_multi_time_frames(), supports_different_xy_pixel_size() etc.
- Class stir::OutputFileFormatTests
- Delete STIRtmp.* files, but that's a bit difficult as we don't know which ones are written.
- Member stir::ParametricQuadraticPrior< TargetT >::weights
- This member is mutable at present because some const functions initialise it. That initialisation should be moved to a new set_up() function.
- Class stir::ParseAndCreateFrom< DiscretisedDensity< 3, elemT >, ExamDataT >
- Currently only supports VoxelsOnCartesianGrid parameters (we could introduce another keyword to differentiate between types).
- Member stir::ParseAndCreateFrom< OutputT, InputT, ParserT >::create (const InputT &) const
- Currently we're assuming this returns a bare pointer (to a new object). This is due to limitations in the reconstruction classes. It will need to change to a
std::unique
pointer.
- Class stir::PatlakPlot
- Should be derived from LinearModels, but when non-linear models will be introduced, as well.
- Member stir::PatlakPlot::apply_linear_regression (ParametricVoxelsOnCartesianGrid &par_image, const DynamicDiscretisedDensity &dyn_image) const
- There is currently no check if the time frame definitions from dyn_image are the same as the ones encoded in the model.
- Member stir::PatlakPlot::get_dynamic_image_from_parametric_image (DynamicDiscretisedDensity &dyn_image, const ParametricVoxelsOnCartesianGrid &par_image) const
- Should be a virtual function declared in the KineticModel class.
- Member stir::PatlakPlot::multiply_dynamic_image_with_model_gradient (ParametricVoxelsOnCartesianGrid ¶metric_image, const DynamicDiscretisedDensity &dyn_image) const
- Should be a virtual function declared in the KineticModel class.
- Member stir::PatlakPlot::multiply_dynamic_image_with_model_gradient_and_add_to_input (ParametricVoxelsOnCartesianGrid ¶metric_image, const DynamicDiscretisedDensity &dyn_image) const
- Should be a virtual function declared in the KineticModel class.
- Member stir::PlasmaData::PlasmaData (const std::vector< PlasmaSample > &plasma_blood_plot)
- Better to use iterators
- Member stir::PlasmaData::read_plasma_data (const std::string input_string)
- Implementation to set the input units.
- Class stir::PlasmaSample
- This currently assumes sampling, while in practice we often have data accumulated over time, but this can currently not be encoded.
- Member stir::PLSPrior< elemT >::set_up (shared_ptr< const DiscretisedDensity< 3, elemT >> const &target_sptr) override
- set the anatomical image to zero if not defined
- Member stir::PoissonLogLikelihoodWithLinearKineticModelAndDynamicProjectionData< TargetT >::add_subset_sensitivity (TargetT &sensitivity, const int subset_num) const override
- Current implementation does NOT add to the subset sensitivity, but overwrites
- Member stir::PoissonLogLikelihoodWithLinearModelForMeanAndListModeData< TargetT >::cache_path
- add the ability to set a filename.
- Member stir::PoissonLogLikelihoodWithLinearModelForMeanAndListModeData< TargetT >::frame_defs
- This is currently used to be able to compute the gradient for one time frame. However, it probably does not belong here. For instance when fitting kinetic model parameters from list mode data, time frames are in principle irrelevant. So, we will probably shift this to the derived class.
- Member stir::PoissonLogLikelihoodWithLinearModelForMeanAndListModeData< TargetT >::recompute_cache
- multiple cache files need to be supported!
- Member stir::PoissonLogLikelihoodWithLinearModelForMeanAndListModeData< TargetT >::set_skip_lm_input_file (const bool arg)
replace with reading from a custom-listmode file (although this would have to support the additive term).
in the future the following statements should be removed.
in the future the following statements should be removed.
- Class stir::PoissonLogLikelihoodWithLinearModelForMeanAndListModeDataWithProjMatrixByBin< TargetT >
- implement a subset scheme based on events
- Member stir::PoissonLogLikelihoodWithLinearModelForMeanAndListModeDataWithProjMatrixByBinTests::PoissonLogLikelihoodWithLinearModelForMeanAndListModeDataWithProjMatrixByBinTests (char const *const lm_data_filename, char const *const density_filename=0)
- it would be better to parse an objective function. That would allow us to set all parameters from the command line.
- Member stir::PoissonLogLikelihoodWithLinearModelForMeanAndProjData< TargetT >::actual_add_multiplication_with_approximate_sub_Hessian_without_penalty (TargetT &output, const TargetT &input, const int subset_num) const override
- Two work-arounds for the noisy estimate of the Hessian are listed below, but they are currently not implemented.
- Member stir::PoissonLogLikelihoodWithLinearModelForMeanAndProjDataTests::PoissonLogLikelihoodWithLinearModelForMeanAndProjDataTests (char const *const proj_data_filename=0, char const *const density_filename=0)
- it would be better to parse an objective function. That would allow us to set all parameters from the command line.
- Member stir::ProjDataInfo::set_tof_mash_factor (const int new_num)
- N.E: This function is very ugly and unnessesary complicated. Could be much better.
- Member stir::ProjDataInfoCylindrical::set_tof_mash_factor (const int new_num) override
- N.E. Would be nice to have all the points of the scanner in cache.
- Class stir::ProjDataInfoCylindricalNoArcCorr
- The detector specific functions possibly do not belong in this class. One can easily imagine a case where the theta,phi,s,t coordinates are as described, but there is no real correspondence with detectors (for instance, a rotating system). Maybe they should be moved somewhere else?
- Member stir::ProjDataInfoCylindricalNoArcCorr::get_all_det_pos_pairs_for_bin (std::vector< DetectionPositionPair<>> &, const Bin &, bool ignore_non_spatial_dimensions=true) const
- It might be possible to return some weight factors in case there is no many-to-one correspondence between detection positions and bins (for instance for continuous detectors, or rotating scanners, or arc-corrected data).
- Member stir::ProjDataInfoCylindricalNoArcCorr::get_bin_for_det_pos_pair (Bin &, const DetectionPositionPair<> &) const
- use member template for the coordT type to support continuous detectors.
- Member stir::ProjDataInfoCylindricalNoArcCorr::get_det_pos_pair_for_bin (DetectionPositionPair<> &, const Bin &) const
- use member template for the coordT type to support continuous detectors.
- Member stir::ProjDataInfoCylindricalNoArcCorr::ProjDataInfoCylindricalNoArcCorr (const shared_ptr< Scanner > scanner_ptr, const VectorWithOffset< int > &num_axial_pos_per_segment, const VectorWithOffset< int > &min_ring_diff_v, const VectorWithOffset< int > &max_ring_diff_v, const int num_views, const int num_tangential_poss, const int tof_mash_factor=0)
- only suitable for full-ring PET scanners
- Class stir::ProjDataInfoGeneric
- change hierarchy order, i.e. derive from ProjDataInfoCylindrical from ProjDataInfoGeneric.
- Member stir::ProjDataInfoGenericNoArcCorr::get_all_det_pos_pairs_for_bin (std::vector< DetectionPositionPair<>> &, const Bin &) const
- It might be possible to return some weight factors in case there is no many-to-one correspondence between detection positions and bins (for instance for continuous detectors, or rotating scanners, or arc-corrected data).
- Member stir::ProjDataInfoGenericNoArcCorr::get_bin_for_det_pos_pair (Bin &, const DetectionPositionPair<> &) const
- use member template for the coordT type to support continuous detectors.
- Member stir::ProjDataInfoGenericNoArcCorr::get_det_pos_pair_for_bin (DetectionPositionPair<> &, const Bin &) const
- use member template for the coordT type to support continuous detectors.
- Class stir::ProjDataRebinning
- there should be a method to rebin the data without writing the result to disk
- Member stir::ProjectorByBinPair::get_symmetries_used () const
- determine set of minimal symmetries
- Class stir::ProjMatrixByBinFromFile
- this class currently only works with VoxelsOnCartesianGrid. To fix this, we would need a DiscretisedDensityInfo class, and be able to have constructed the appropriate symmetries object by parsing the .par file
- Class stir::ProjMatrixByBinSinglePhoton
- This is a horrible work-around for the fact that STIR currently insists on working on a density.
- Class stir::ProjMatrixElemsForOneBin
Most of the members of this class would work just as well for a (not yet existing) class ProjMatrixElemsForOneDensel. This means that we should derived both from a common base class, templated in the type of element.
It might be useful to template this class in terms of the element-type as well. That way, we could have 'compact' elements, efficient elements, etc. However, doing this will probably only be useful if all ProjMatrixByBin classes are then templated as well, which would be a pain.
- Class stir::ProjMatrixElemsForOneDenselValue
- Simply derived from Bin for now.
- Class stir::PullLinearInterpolator< elemT >
- preliminary. We might want to derive this from a class or so.
- Class stir::PullNearestNeighbourInterpolator< elemT >
- preliminary. We might want to derive this from a class or so.
- Class stir::PushNearestNeighbourInterpolator< elemT >
- preliminary. We might want to derive this from a class or so.
- Class stir::PushTransposeLinearInterpolator< elemT >
- preliminary. We might want to derive this from a class or so.
- Member stir::QuadraticPrior< elemT >::weights
- This member is mutable at present because some const functions initialise it. That initialisation should be moved to a new set_up() function.
- Member stir::randoms_from_singles (ProjData &proj_data, const SinglesRates &singles, float coincidence_time_window=-1.F, float radionuclide_halflife=-1.F)
- Dead-time is currently completely ignored.
- Member stir::Reconstruction< TargetT >::initialise (const std::string ¶meter_filename)
- It currently calls error() when something goes wrong. It should return Succeeded (or throw an exception).
- Member stir::Reconstruction< TargetT >::set_up (shared_ptr< TargetT > const &target_data_sptr)
- Currently, set_up() is called by reconstruct(). This is in contrast with some other class hierarchies in STIR where set_up() has to be called before any actual processing. Maybe this should be made consistent.
- Class stir::RegisteredObject< Root >
- Currently there is a hard-wired value of "None" for the default key (with a 0 factory). This is inappropriate in some cases.
- Member stir::RegisteredParsingObject< Derived, Base, Parent >::read_from_stream (std::istream *)
- Currently, the return value is a Base*. Preferably, it should be a Derived*, but it seems the registration machinery would need extra (unsafe) reinterpret_casts to get that to work. (TODO find a remedy).
- Member stir::RegisteredParsingObject< Derived, Base, Parent >::RegisterIt::~RegisterIt ()
- At present, the object remain in the registry, as there is a potential conflict in the order of destruction of the registry and the RegisterIt objects. This can be solved with shared_ptr s.
- Member stir::RelatedViewgrams< elemT >::RelatedViewgrams (const std::vector< Viewgram< elemT >> &viewgrams, const shared_ptr< DataSymmetriesForViewSegmentNumbers > &symmetries_used)
- Currently public for the STIR_MPI version
- Member stir::RelativeDifferencePrior< elemT >::weights
- This member is mutable at present because some const functions initialise it. That initialisation should be moved to a new set_up() function.
- Member stir::RigidObject3DMotion::get_rel_time_of_samples (const double start_time, const double end_time) const =0
- Really only makes sense for motion tracking that happens via sampling. One could imagine having simulated motion, and then this function wouldn't make a lot of sense. So, it probably should be moved to a derived class
SampledRigidObject3DMotion
or so.
- Class stir::RigidObject3DMotionFromPolaris
- move synchronisation out of this class
- Class stir::RigidObject3DTransformation
Document sign choice for rotation.
define Euler angles (the code is derived from the Polaris manual)
- Class stir::RigidObject3DTransformationTests
- tests on inverse of transform_bin fail with some rotations (too large difference in round-trip).
- Class stir::ROITests
- Tests are currently somewhat simplistic
- Member stir::round_to (integerT &result, const float x)
- add code to check that
integerT
is really an integer type at compilation time
- Member stir::sample_function_on_regular_grid (Array< 3, elemT > &out, FunctionType func, const BasicCoordinate< 3, positionT > &offset, const BasicCoordinate< 3, positionT > &step)
- At the moment, only the 3D version is implemented, but this could be templated.
- Member stir::sample_function_using_index_converter (Array< 3, elemT > &out, FunctionType func, Lambda &&index_converter)
- At the moment, only the 3D version is implemented, but this could be templated.
- Class stir::Scanner
Some scanners do not have all info filled in at present. Values are then set to 0.
derive from ParsingObject
a hierarchy distinguishing between different types of scanners
- Member stir::Scanner::get_axial_length () const
- Need to update this function when enabling different spacing between blocks and buckets etc.
- Member stir::Scanner::get_default_num_arccorrected_bins () const
- change name, mabe refering to the fan of detectors in coincidence or so
- Member stir::Scanner::get_max_num_non_arccorrected_bins () const
- change name
- Member stir::Scanner::get_num_virtual_axial_crystals_per_block () const
- The current list is bound to be incomplete. would be better to stick it in set_params().
- Member stir::Scanner::get_num_virtual_transaxial_crystals_per_block () const
- The current list is bound to be incomplete. would be better to stick it in set_params().
- Member stir::Scanner::get_size_of_timing_pos () const
- change name to
get_size_of_timing_pos_in_ps
- Member stir::Scanner::get_timing_resolution () const
- change name to
get_size_of_timing_pos_in_ps
- Member stir::Scanner::set_num_virtual_axial_crystals_per_block (int)
- Can currently only set to hard-wired values. Otherwise calls error()
- Member stir::Scanner::set_num_virtual_transaxial_crystals_per_block (int)
- Can currently only set to hard-wired values. Otherwise calls error()
- Class stir::ScatterEstimation
The code should throw an error if 2D input data are loaded. It should just deactivate the final upsampling.
Currently FBP reconstruction is not working and just throws an error.
This code needs far more documentation.
- Class stir::ScatterSimulation
detector coordinates are derived from ProjDataInfo, but areas and orientations are determined by using a cylindrical scanner.
variables/function named density
really should use attenuation
. This is currently only done for a few variables, but parsing keywords are correct.
- Member stir::setup_distributable_computation (const shared_ptr< ProjectorByBinPair > &proj_pair_sptr, const shared_ptr< const ExamInfo > &exam_info_sptr, const shared_ptr< const ProjDataInfo > proj_data_info_sptr, const shared_ptr< const DiscretisedDensity< 3, float >> &target_sptr, const bool zero_seg0_end_planes, const bool distributed_cache_enabled)
- currently uses some global variables for configuration in the distributed namespace. This needs to be converted to a class, e.g.
DistributedMaster
- Class stir::Shape3D
This could/should be generalised to allow general fuzzy shapes. Probably the only thing to change is to let is_inside_shape() return a float (between 0 and 1). This would solve some issues with DiscretisedDhape3D.
The restriction to the 3D case for this base class largely comes from the construct_volume() member (and the origin parsing members)
This base class really should have no origin member. For example, DiscretisedShape3D now has effectively two. Instead, we should have an additional class Shape3DWithOrigin. Easy to do.
- Member stir::Shape3D::construct_volume (VoxelsOnCartesianGrid< float > &image, const CartesianCoordinate3D< int > &num_samples) const
Get rid of restriction to allow only VoxelsOnCartesianGrid<float> (but that's rather hard)
Potentially this should fill a DiscretisedShape3D.
- Member stir::Shape3D::is_inside_shape (const CartesianCoordinate3D< float > &coord) const =0
- replace by floating point return value?
- Class stir::Shape3DWithOrientation
- A previous release had Euler angle code. However, it is currently disabled as there were bugs in it.
- Class stir::SingleScatterSimulation
- The class is specific to PET so should be renamed accordingly.
- Class stir::SPECTListEvent
- this is still under development. Things to add are for instance energy windows and time-of-flight info. Also, get_bin() would need time info or so for rotating scanners.
- Member stir::SSRB (const ProjDataInfo &in_proj_data_info, const int num_segments_to_combine, const int num_views_to_combine=1, const int num_tangential_poss_to_trim=0, const int max_in_segment_num_to_process=-1, const int num_tof_bins_to_combine=1)
get rid of both restrictions flagged as warnings in the documentation for this function.
rename to something much more general than SSRB
- Class stir::SumOfGeneralisedObjectiveFunctions< ObjFuncT, TargetT, ParentT >
document why use of ParentT template
doc subsets
- Member stir::SumOfGeneralisedObjectiveFunctions< ObjFuncT, TargetT, ParentT >::actual_subsets_are_approximately_balanced (std::string &warning_message) const
- doc subset
- Member stir::transform_3d_object (DiscretisedDensity< 3, float > &out_density, const DiscretisedDensity< 3, float > &in_density, const RigidObject3DTransformation &transformation_in_to_out)
- cannot use ObjectTransformation yet as it needs the inverse transformation
- Member stir::transpose_of_transform_3d_object (DiscretisedDensity< 3, float > &out_density, const DiscretisedDensity< 3, float > &in_density, const RigidObject3DTransformation &transformation_in_to_out)
- cannot use ObjectTransformation yet as it needs the inverse transformation
- Class stir::TrivialBinNormalisation
- Make sure that the keyword value
None
corresponds to this class.
- Class stir::Utah_phantom
- dims here are wrong A: cylinder, 20cm diam, 10cm height B: cylinder, 18cm diam, 15cm height C: outer annulus, 20cm extern.diam, 2cm thick, 15cm height D: cylinder in B, 4.5cm diam, 18cm??? height E: shorter cylinder in B, 4.5cm diam, 5.5cm height
- Class stir::VectorWithOffset< T >
- add allocator template as in std::vector. This is non-trivial as we would have to use uninitialized_copy etc. in some places.
- Member stir::VectorWithOffset< T >::resize (const int min_index, const int max_index)
- in principle reallocation could be avoided when the new range would fit in the old one by shifting.
- Member stir::warning (const STRING &string, const int verbosity_level=1)
- At a later stage, it will also write to a log-file.
- File test_IO.h
- The current implementation requires that the output file format as also readable by stir::read_from_file. At least we should provide a run-time switch to not run that part of the tests.
- File test_IO_DiscretisedDensity.cxx
- The current implementation requires that the output file format as also readable by stir::read_from_file. At least we should provide a run-time switch to not run that part of the tests.
- File test_IO_DynamicDiscretisedDensity.cxx
- The current implementation requires that the output file format as also readable by stir::read_from_file. At least we should provide a run-time switch to not run that part of the tests.
- File test_IO_ParametricDiscretisedDensity.cxx
- The current implementation requires that the output file format as also readable by stir::read_from_file. At least we should provide a run-time switch to not run that part of the tests.
- File test_OutputFileFormat.cxx
- The current implementation requires that the output file format as also readable by stir::read_from_file. At least we should provide a run-time switch to not run that part of the tests.
- File test_proj_data_info_LOR.cxx
test stir::ProjDataInfo::get_LOR and stir::ProjDataInfo::get_bin
use stir::RunTests
- File TimeGateDefinitions.h
- This files needs proper test
- Module Variables for STIR_MPI
- move to protected area