Dear Marina, dear other CASToR developers,
I am struggling with the scatter correction in CASToR due to ToF and it would be greatly appreciated if you could help me out.
First, let me introduce my setup: My list-mode dataset is simulated using GATE and I specify the scanner’s time resolution in the GATE file (e.g. 320ps).
When creating a CASToR data-file, I want to include corrections for scatter (and randoms, eventually). The implemented scatter correction rate calculated by CASToR using the Monte-Carlo truth on the file itself is obviously too good (due to the usage of the MC-truth).
Therefore, I want to provide my own scatter estimation when generating the CASToR list-mode dataset using the castor-GATERootToCastor toolkit. I implemented a way to provide the correction factor by calling the iEventPET::SetScatterRate(int a_bin, FLTNBDATA a_value) function with a pre-calculated value that is given to the toolkit (in a binary file using an extra command line option, see below). This is where the first question pops up: The first parameter of this function should probably be 0 (zero) in a PET coincidence? The description of the parameter is “(0 if only one line)”.
I can now set the scatter estimate (in 1/s) for the event, but I do not know which value to set, because I am confused with the ToF bins.
My list-mode dataset contains almost continuous TOF measurements due to the GATE simulation. Therefore, the general documentation suggests that “the scatter should be estimated as a (almost) continuous function. This estimation can be done by some scatter estimation methods, or it can be approximated from TOF bin scatter estimation by dividing each TOF bin scatter estimation by the spatial width of the TOF bin.”
The big question is: How do I tell CASToR that the data and especially my scatter estimates are for almost continuous TOF measurements? Do I have to tell it? Is the “standard” scatter ToF bin for list-mode files only one ToF bin spanning [0, coincidence time window] or is the standard scatter ToF bin 1ps long? The latter seems to be implied by the general documentation (as I understand the above snippet).
How to scale the estimates from a scatter histogram? Let’s say I create a scatter histogram/sinogram (in scatter events per second) which is ToF binned with a cumulative (to stick with the terms of your paper) bin width of 80ps. The value I would put into the SetScatterRate function would be 1/80th of the scatter histogram bin value? Even when I take the value that is generated in the scatter sinogram with 80ps ToF bins, the images look not corrected at all.
Can/should I specify the scatter ToF bin width in the CASToR data-file or in the reconstruction process? How would I do this? Or should I rather upscale the scatter of each ToF bin by the number of ToF (equidistant) bins on that LOR?
Below are the actual commands that I execute for completeness.
It would be great if you could explain how the scatter ToF binning works and how it can be controlled.
Thanks in advance for the help and congratulations on your paper on ToF! J
Cheers
Jan
castor-GATERootToCastor
-il datafiles.txt -m GateMacro.mac -s myscanner -o CastorDataFile -atn MuMap.hdr:joseph (all fairly standard)
-TOF_reso 320 (this is named “system time-of-flight resolution” in the documentation and I think that means CRT?)
-ots (omitting randoms for now)
-scatcorrl oneEighthOf80psScatterRate.bin (my custom way of providing the value to the toolkit)
castor-recon -df CastorDataFile -atn MuMap.hdr -sens Sensitivity.hdr -fout images -oit 1:40 -it 40:1 -off 0.,0.,0. -opti MLEM -proj joseph -th 0 -dim 288,288,90 -fov 576.,576.,180. -flip-out Y