[Castor-users] Possible problem with multiSiddon projector random sampling

Maxime Toussaint maxime.toussaint at usherbrooke.ca
Mon Jun 18 20:13:19 CEST 2018


Hi,

I think there is an error in the GetRdmPositionsAndOrientations function 
of the file iScannerPET.cc. In short, the vectors used to create a 
random position in a detector are not orthogonal between each other and 
two of them are not guaranteed to have a norm of one.

The long version:
mp_crystalOrientation gives us a vector that goes along the depth of the 
current detector. However, CASToR does not keep a similar vector for the 
detector's transaxial and axial axes. For simplicity, let's define 
(mp_crystalOrientationX, mp_crystalOrientationY, mp_crystalOrientationZ) 
as (uX, uY, uZ). Currently, the transaxial axis of the detector is 
defined as (in the function GetRdmPositionsAndOrientations):
(uY, uX, 0)
while the axial axis of the detector is defined as:
(uX*uZ, uY*uZ, sqrt(1-uZ**2))
 From there, we can observe several problems. Two examples:
1) (uX, uY, uZ) (uY, uX, 0)' = uX*uY + uY*uX =/= 0 (Most of the time.)
2) || (uY, uX, 0) || =/= 1 if uZ =/= 0 (Since ||(uX, uY, uZ)|| = 1.)
Thus, the set of positions generated by that function does not 
correspond exactly to the detector.

A possible correction: (it needs to be applied on the computation of 
ap_Position1 and ap_Position2)
Replace (uY, uX, 0) by (uY, -uX, 0) / || (uY, -uX, 0) ||
Replace (uX*uZ, uY*uZ, sqrt(1-uZ**2)) by (-uX*uZ, -uY*uZ, 1-uZ**2) / ||  
(-uX*uZ, -uY*uZ, 1-uZ**2) ||

Note: Since mp_crystalOrientationZ is 0.0 for all detectors in most 
scanner, this error might have negligible repercussions in practice. I 
am not sure, since I didn't test its repercussions in reconstruction.

I have another question. In the comments prior to the function 
GetRdmPositionsAndOrientations, there is the following line: "fix the 
possibility to draw LOR outside the actual crystal volume (if 
mp_meanDepthOfInteraction != 0.5)". From what I understand, that 
function never uses that parameter. Was that comment meant for the 
function GetPositionsAndOrientations or did I miss something?

Have a nice day,
Maxime Toussaint



More information about the Castor-users mailing list