STIR  6.2.0
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
stir::MatchTrackerAndScanner Class Reference

A class for finding the coordinate transformation between tracker and scanner coordinate systems. More...

#include "stir_experimental/motion/MatchTrackerAndScanner.h"

Inheritance diagram for stir::MatchTrackerAndScanner:
Inheritance graph
[legend]

Public Member Functions

 MatchTrackerAndScanner (const char *const par_filename)
 
Succeeded run ()
 finds the match when all parameters have been set More...
 
const TimeFrameDefinitionsget_time_frame_defs () const
 
double get_frame_start_time (unsigned frame_num) const
 
double get_frame_end_time (unsigned frame_num) const
 
const std::string & get_image_filename_prefix () const
 
const RigidObject3DMotionget_motion () const
 
const RigidObject3DTransformationget_transformation_from_scanner_coords () const
 
- Public Member Functions inherited from stir::ParsingObject
 ParsingObject (const ParsingObject &)
 
ParsingObjectoperator= (const ParsingObject &)
 
void ask_parameters ()
 
virtual std::string parameter_info ()
 
bool parse (std::istream &f)
 
bool parse (const char *const filename)
 

Protected Member Functions

void set_defaults () override
 parsing functions
 
void initialise_keymap () override
 Initialise all keywords.
 
bool post_processing () override
 This will be called at the end of the parsing. More...
 
- Protected Member Functions inherited from stir::ParsingObject
virtual void set_key_values ()
 This will be called before parsing or parameter_info is called. More...
 

Protected Attributes

TimeFrameDefinitions frame_defs
 
int scan_start_time_secs_since_1970_UTC
 
double _current_frame_end_time
 
double _current_frame_start_time
 
std::string frame_definition_filename
 parsing variables
 
double scan_start_time
 
std::string _image_filename_prefix
 
float relative_threshold
 
- Protected Attributes inherited from stir::ParsingObject
KeyParser parser
 

Detailed Description

A class for finding the coordinate transformation between tracker and scanner coordinate systems.

Input data

You need to have performed a scan where the '0' marker of the tracker is filled with some radioactive material, and the marker is then moved to various stationary positions inside the scanner, while performing a (list-mode) scan, while the tracker is running. Remember: discrete movements.

Then you need to make a frame-definition file where all non-stationary parts are skipped. Then you sort the list mode data into sinograms, and reconstruct images (preferably with large zoom) for each of these discrete positions.

What does it do?

This implements Horn's method, as discussed in detail in Roger Fulton's thesis. Briefly:

Note that if you have movement within a time frame, the diagnostics will tell you, but your fit will be wrong.

Example par file
  MoveImage Parameters:=
  ; see TimeFrameDefinitions
  time frame_definition filename := frame_definition_filename

  ; next parameter is optional (and not normally necessary)
  ; it can be used if the frame definitions are relative to another scan as what
  ; is used to for the rigid object motion (i.e. currently the list mode data used
  ;  for the Polaris synchronisation)
  ; scan_start_time_secs_since_1970_UTC


  ; specify motion, see stir::RigidObject3DMotion
  Rigid Object 3D Motion Type := type

  ; optional field to determine relative threshold to apply to
  ; the image before taking the centre of gravity
  ; it is relative to the maximum in each image (i.e. .5 would be at half the maximum)
  ; default is .1
  relative threshold := .2
  ; prefix for finding the images
  ; filenames will be constructed by appending _f#g1d0b0 (and the extension .hv)
  image_filename_prefix :=
  END :=
Warning
Currently the motion object needs to be defined using a transformation_from_scanner_coords file. However, the value of the transformation is completely ignored by the current class.

Member Function Documentation

◆ run()

Succeeded stir::MatchTrackerAndScanner::run ( )

finds the match when all parameters have been set

will store the transformation as part of this object, but also write it to stdout

References stir::error(), stir::find_centre_of_gravity_in_mm(), stir::DiscretisedDensityOnCartesianGrid< num_dimensions, elemT >::get_grid_spacing(), stir::indices_at_maximum(), stir::read_from_file(), stir::square(), stir::threshold_lower(), and stir::warning().

◆ post_processing()

bool stir::MatchTrackerAndScanner::post_processing ( )
overrideprotectedvirtual

This will be called at the end of the parsing.

Returns
false if everything OK, true if not

Reimplemented from stir::ParsingObject.

References stir::warning().


The documentation for this class was generated from the following files: