CASToR  1.0
Tomographic Reconstruction (PET/SPECT)
Public Member Functions | Private Member Functions | Private Attributes
iScannerPET Class Reference

This class is used to represent any cylindrical PET scanner. More...

#include <iScannerPET.hh>

Inheritance diagram for iScannerPET:
Inheritance graph
[legend]
Collaboration diagram for iScannerPET:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 iScannerPET ()
 iScannerPET constructor. Initialize the member variables to their default values.
 ~iScannerPET ()
 iScannerPET destructor.
int Instantiate (bool a_scannerFileIsLUT)
 Get mandatory informations from the scanner file and allocate memory for the member variables.
int CheckParameters ()
 Check if all parameters have been correctly initialized.
int Initialize ()
 Check general initialization and set several parameters to their default value.
int BuildLUT (bool a_scannerFileIsLUT)
 Call the functions to generate the LUT or read the user-made LUT depending on the user choice.
int GetPositionsAndOrientations (int a_index1, int a_index2, FLTNB ap_Position1[3], FLTNB ap_Position2[3], FLTNB ap_Orientation1[3], FLTNB ap_Orientation2[3], FLTNB *ap_POI1=NULL, FLTNB *ap_POI2=NULL)
 Get the central positions and orientations of the scanner elements from their indices.
int GetRdmPositionsAndOrientations (int a_index1, int a_index2, FLTNB ap_Position1[3], FLTNB ap_Position2[3], FLTNB ap_Orientation1[3], FLTNB ap_Orientation2[3])
 Get random positions of the scanner elements and their orientations from their indices.
int GetPositionWithRandomDepth (int a_index1, int a_index2, FLTNB ap_Position1[3], FLTNB ap_Position2[3])
 Get the positions and orientations of scanner elements from their indices, with a random depth.
int GetTwoCorners (int a_index1, int a_index2, FLTNB ap_CornerInf1[3], FLTNB ap_CornerSup1[3], FLTNB ap_CornerInf2[3], FLTNB ap_CornerSup2[3])
 Get the cartesian coordinaters of the two opposite corners of a scanner element.
int GetSystemNbElts ()
int GetScannerLayerNbRings (int a_layer)
 Return the number of rings for a specific crystal layer.
int IsAvailableLOR (int a_elt1, int a_elt2)
 Check if the LOR formed by the crystalf whose indices are passed in parameters is available according to the scanner restrictions.
int GetGeometricInfoFromDatafile (string a_pathToDataFilename)
 Retrieve PET geometric informations from the datafile.
int SetPETMaxRingDiff (int a_maxRingDiff)
 Set the maximal ring difference (if any)
void ShowHelp ()
 Display help.
int PROJ_GetPETSpecificParameters (int *ap_maxRingDiff)
 Set pointers passed in argument with the related PET specific variables This function is used to recover these values in the datafile object.

Private Member Functions

int LoadLUT ()
 Load a precomputed scanner LUT.
int ComputeLUT ()
 Compute the LUT of the scanner from a generic (.geom) file.
int GetLayer (int a_idx)
 Get the layer from which the 'a_index' crystal belongs to.
int GetRingID (int a_idx)
 Get the ring which the #a_idx crystal belongs to.

Private Attributes

int m_nbLayers
int m_nbCrystals
int * mp_nbRings
int * mp_nbCrystalsInLayer
FLTNBmp_crystalCentralPositionX
FLTNBmp_crystalCentralPositionY
FLTNBmp_crystalCentralPositionZ
FLTNBmp_crystalOrientationX
FLTNBmp_crystalOrientationY
FLTNBmp_crystalOrientationZ
FLTNBmp_sizeCrystalTrans
FLTNBmp_sizeCrystalAxial
FLTNBmp_sizeCrystalDepth
FLTNBmp_meanDepthOfInteraction
FLTNB m_minAngleDifference
int m_maxRingDiff

Detailed Description

This class is used to represent any cylindrical PET scanner.

Inherits from vScanner

Definition at line 21 of file iScannerPET.hh.


Constructor & Destructor Documentation

iScannerPET constructor. Initialize the member variables to their default values.

Definition at line 31 of file iScannerPET.cc.

iScannerPET destructor.

Definition at line 70 of file iScannerPET.cc.


Member Function Documentation

int iScannerPET::BuildLUT ( bool  a_scannerFileIsLUT) [virtual]

Call the functions to generate the LUT or read the user-made LUT depending on the user choice.

Parameters:
a_scannerFileIsLUT: boolean indicating if the file describing the SPECT camera is a generic file (0) or custom Look-up-table (1)
Returns:
0 if success, positive value otherwise

Implements vScanner.

Definition at line 212 of file iScannerPET.cc.

Here is the call graph for this function:

int iScannerPET::CheckParameters ( ) [virtual]

Check if all parameters have been correctly initialized.

Returns:
0 if success, positive value otherwise

Implements vScanner.

Definition at line 253 of file iScannerPET.cc.

int iScannerPET::ComputeLUT ( ) [private, virtual]

Compute the LUT of the scanner from a generic (.geom) file.

Read mandatory data from the geom file. Then compute the LUT elements for each crystal from the geometry described in the file

Compute the look-up-tables of the system containing the locations of the scanner elements center in space and their orientations

Returns:
0 if success, positive value otherwise

Reimplemented from vScanner.

Definition at line 473 of file iScannerPET.cc.

Here is the call graph for this function:

Here is the caller graph for this function:

int iScannerPET::GetGeometricInfoFromDatafile ( string  a_pathToDataFilename) [virtual]

Retrieve PET geometric informations from the datafile.

Recover the (axial) max ring difference

Returns:
0 if success, positive value otherwise

Implements vScanner.

Definition at line 1430 of file iScannerPET.cc.

Here is the call graph for this function:

int iScannerPET::GetLayer ( int  a_idx) [private]

Get the layer from which the 'a_index' crystal belongs to.

Parameters:
a_idx: index of the crystal in the loaded LUT
Returns:
layer index

Definition at line 1296 of file iScannerPET.cc.

Here is the caller graph for this function:

int iScannerPET::GetPositionsAndOrientations ( int  a_index1,
int  a_index2,
FLTNB  ap_Position1[3],
FLTNB  ap_Position2[3],
FLTNB  ap_Orientation1[3],
FLTNB  ap_Orientation2[3],
FLTNB ap_POI1 = NULL,
FLTNB ap_POI2 = NULL 
) [virtual]

Get the central positions and orientations of the scanner elements from their indices.

Parameters:
a_index1: index of the 1st crystal
a_index2: index of the 2nd crystal
ap_Position1[3]: x,y,z cartesian position of center of the 1st crystal
ap_Position2[3]: x,y,z cartesian position of center of the 2nd crystal
ap_Orientation1[3]: x,y,z components of the orientation vector related to the 1st crystal
ap_Orientation2[3]: x,y,z components of the orientation vector related to the 2nd crystal
ap_POI1: x,y,z components of the Point Of Interation related to the 1st crystal
ap_POI2: x,y,z components of the Point Of Interation related to the 2nd crystal

This method is very general and is used by the vProjector. From these positions and orientations, other methods can be used by specific projectors to get specific positions. Position calculations include POI and mean depth of interaction

Returns:
0 if success, positive value otherwise

Implements vScanner.

Definition at line 970 of file iScannerPET.cc.

Here is the call graph for this function:

int iScannerPET::GetPositionWithRandomDepth ( int  a_index1,
int  a_index2,
FLTNB  ap_Position1[3],
FLTNB  ap_Position2[3] 
) [virtual]

Get the positions and orientations of scanner elements from their indices, with a random depth.

Parameters:
a_index1: index of the 1st crystal
a_index2: index of the 2nd crystal
ap_Position1[3]: x,y,z cartesian position of the point related to the 1st index (see child function for more details)
ap_Position2[3]: x,y,z cartesian position of the point related to the 2st index (see child function for more details)

Method for testing purposes. Does not include POI and mean depth of interaction

Returns:
0 if success, positive value otherwise

Implements vScanner.

Definition at line 1207 of file iScannerPET.cc.

Here is the call graph for this function:

int iScannerPET::GetRdmPositionsAndOrientations ( int  a_index1,
int  a_index2,
FLTNB  ap_Position1[3],
FLTNB  ap_Position2[3],
FLTNB  ap_Orientation1[3],
FLTNB  ap_Orientation2[3] 
) [virtual]

Get random positions of the scanner elements and their orientations from their indices.

Parameters:
a_index1: index of the 1st crystal
a_index2: index of the 2nd crystal
ap_Position1[3]: x,y,z cartesian position of center of the 1st crystal
ap_Position2[3]: x,y,z cartesian position of center of the 2nd crystal
ap_Orientation1[3]: x,y,z components of the orientation vector related to the 1st crystal
ap_Orientation2[3]: x,y,z components of the orientation vector related to the 2nd crystal
  • Find the scanner elements described by the two indexes passed in parameters.
  • Compute random positions inside the elements described by the indexes passed in parameters
  • Find the scanner elements described by the two indexes passed in parameters.
  • Write the corresponding random cartesian coordinates in the positions parameters.

Position calculations include POI and mean depth of interaction

Returns:
0 if success, positive value otherwise

Implements vScanner.

Definition at line 1093 of file iScannerPET.cc.

Here is the call graph for this function:

int iScannerPET::GetRingID ( int  a_idx) [private]

Get the ring which the #a_idx crystal belongs to.

Parameters:
a_idx: index of the crystal in the loaded LUT
Returns:
layer index

Definition at line 1332 of file iScannerPET.cc.

Here is the call graph for this function:

Here is the caller graph for this function:

int iScannerPET::GetScannerLayerNbRings ( int  a_layer) [inline, virtual]

Return the number of rings for a specific crystal layer.

Parameters:
a_layer
Returns:
the number rings for the layer, or -1 (error) if the layer index not consistent with the nb of layer in the system

Reimplemented from vScanner.

Definition at line 154 of file iScannerPET.hh.

int iScannerPET::GetSystemNbElts ( ) [inline, virtual]
Returns:
the number of crystals in the PET system

Implements vScanner.

Definition at line 145 of file iScannerPET.hh.

int iScannerPET::GetTwoCorners ( int  a_index1,
int  a_index2,
FLTNB  ap_CornerInf1[3],
FLTNB  ap_CornerSup1[3],
FLTNB  ap_CornerInf2[3],
FLTNB  ap_CornerSup2[3] 
) [virtual]

Get the cartesian coordinaters of the two opposite corners of a scanner element.

Parameters:
a_index1: index of the 1st crystal
a_index2: index of the 2nd crystal
ap_CornerInf1[3]
ap_CornerSup1[3]
ap_CornerInf2[3]
ap_CornerSup2[3]
Returns:
0 if success, positive value otherwise

Implements vScanner.

Definition at line 1257 of file iScannerPET.cc.

Here is the call graph for this function:

int iScannerPET::Initialize ( ) [virtual]

Check general initialization and set several parameters to their default value.

Returns:
0 if success, positive value otherwise

Implements vScanner.

Definition at line 359 of file iScannerPET.cc.

int iScannerPET::Instantiate ( bool  a_scannerFileIsLUT) [virtual]

Get mandatory informations from the scanner file and allocate memory for the member variables.

Parameters:
a_scannerFileIsLUT: boolean indicating if the file describing the system is a generic file (0) or custom Look-up-table (1)
Returns:
0 if success, positive value otherwise

Implements vScanner.

Definition at line 96 of file iScannerPET.cc.

Here is the call graph for this function:

int iScannerPET::IsAvailableLOR ( int  a_elt1,
int  a_elt2 
) [virtual]

Check if the LOR formed by the crystalf whose indices are passed in parameters is available according to the scanner restrictions.

Parameters:
a_elt1: index of the 1st crystal
a_elt2: index of the 2nd crystal

This function is dedicated to analytic projection and list-mode sensitivity image generation
The PET implementation checks the LOR availability according to the minimal (transaxial) angle difference and the maximal ring difference between two crystals

Returns:
1 if the LOR is available, 0 otherwise

Reimplemented from vScanner.

Definition at line 1386 of file iScannerPET.cc.

Here is the call graph for this function:

int iScannerPET::LoadLUT ( ) [private, virtual]

Load a precomputed scanner LUT.

Read mandatory data from the header of the LUT.
Then load the LUT elements for each crystal

Returns:
0 if success, positive value otherwise

Reimplemented from vScanner.

Definition at line 393 of file iScannerPET.cc.

Here is the call graph for this function:

Here is the caller graph for this function:

int iScannerPET::PROJ_GetPETSpecificParameters ( int *  ap_maxRingDiff) [virtual]

Set pointers passed in argument with the related PET specific variables This function is used to recover these values in the datafile object.

Parameters:
ap_maxRingDiff
Returns:
0 if success, positive value otherwise

Reimplemented from vScanner.

Definition at line 1457 of file iScannerPET.cc.

int iScannerPET::SetPETMaxRingDiff ( int  a_maxRingDiff) [inline, virtual]

Set the maximal ring difference (if any)

Parameters:
a_maxRingDiff

Reimplemented from vScanner.

Definition at line 183 of file iScannerPET.hh.

void iScannerPET::ShowHelp ( ) [virtual]

Display help.

Implements vScanner.

Definition at line 1484 of file iScannerPET.cc.


Member Data Documentation

Maximal ring difference for a specific acquisition

Definition at line 269 of file iScannerPET.hh.

Minimal transaxial angle difference for the system

Definition at line 267 of file iScannerPET.hh.

Total number of crystal in the scanner

Definition at line 250 of file iScannerPET.hh.

int iScannerPET::m_nbLayers [private]

Number of crystal layers in the scanner

Definition at line 249 of file iScannerPET.hh.

Cartesian coordinate on X-axis of the center of each crystal

Definition at line 254 of file iScannerPET.hh.

Cartesian coordinate on Y-axis of the center of each crystal

Definition at line 255 of file iScannerPET.hh.

Cartesian coordinate on Z-axis of the center of each crystal

Definition at line 256 of file iScannerPET.hh.

X-axis orientation of each crystal

Definition at line 258 of file iScannerPET.hh.

Y-axis orientation of each crystal

Definition at line 259 of file iScannerPET.hh.

Z-axis orientation of each crystal

Definition at line 260 of file iScannerPET.hh.

Mean depth of interaction in a crystal (for each layer)

Definition at line 265 of file iScannerPET.hh.

Number of crystals (for each layer)

Definition at line 252 of file iScannerPET.hh.

int* iScannerPET::mp_nbRings [private]

Number of rings (for each layer)

Definition at line 251 of file iScannerPET.hh.

Axial size of a crystal (for each layer)

Definition at line 263 of file iScannerPET.hh.

Depth of a crystal (for each layer)

Definition at line 264 of file iScannerPET.hh.

Transaxial size of a crystal (for each layer)

Definition at line 262 of file iScannerPET.hh.


The documentation for this class was generated from the following files:
 All Classes Files Functions Variables Typedefs Defines