Question on ToF scatter estimation

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




-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

Dear Jan,

You got most things right with scatter estimations and TOF.
In the function iEventPET::SetScatterRate(int a_bin, FLTNBDATA a_value), for TOF data, a_bin is the TOF bin, so for TOF list-mode data it would be 0 anyway because the event contains a single count. The description of the function should be improved though.
As you simulated list-mode data that have almost continuous TOF measurements, then yes you should provide a continuous estimation of the scattered coincidences. The CASToR TOF list-mode datafile is regarded as having quantized TOF measurements only if you provide the size of the quantization TOF bin in the CASToR datafile header, which you have not done, as you don't have quantized TOF measurements.
If you generate your estimations of scattered coincidences in the form of a scatter sinogram or histogram, for instance for a cumulative TOF bin of 80ps, then yes you should divide your estimation by the SPATIAL size of the TOF bin (in mm)! and write it into the CASToR datafile having continuous TOF measurements.

I guess that you did not try to correct for scatter using the truth from the Monte Carlo simulation? because the GATE to CASToR converter does not manage the estimations of scattered coincidences for TOF data.

Let me know if the correction works or not!