[Castor-users] Scatter rate estimation for LM-TOF-MLEM

STUTE Simon simon.stute at chu-nantes.fr
Thu Jan 27 18:33:46 CET 2022


Hi Jakub,

Sorry I forgot, I have just had a look.

About the "CASToR scatter correction", as it is indeed what you say, you can totally forget it and looking at the results would be misleading. I suggest that you only compare "trues only" to "including scatters and using your correction". Did you try to compute the scatter correction by yourself for the cuboid study ?

Is the GATEtoCASToR tool able to provide a histogram datafile ? If not, I really do not understand how it may be able to provide a the number of scatter counts for a given LOR. If yes, then I suggest that you first try a non-TOF histogram reconstruction to validate your scatter correction method. Then with histogram data, you would be able to dump the EventValue beside the additive corrections. If you want to stick with listmode data, I suggest that you try to include the scatters and your scatter correction without TOF first. Then once it works, you add TOF.

The benchmark is adapted from a really FDG scan with all corrections computed from the manufacturer's software.
The multiplicativeFactor as dump from the code is a combination of all multiplicate correction terms: the attenuation correction factor, the normalization factor, the decay correction factor, the frame duration and the calibration factor that you mention. So I am surprised it is 1 in your case. If you take the frame duration into account, it should be 1/500.
About the calibration factor, it is the standard calibration factor embedded into any PET scanner enabling absolute quantification. Without this factor, you would reconstruct the "seen activity" but not the "actual activity included within the field of view of the scanner".

All the best
Simon



________________________________________
De : jbaran <jbaran at ifj.edu.pl>
Envoyé : jeudi 27 janvier 2022 00:02
À : Castor Users
Cc : STUTE Simon
Objet : Re: [Castor-users] Scatter rate estimation for LM-TOF-MLEM

Hi Simon,

I would like to kindly ask if you found some time to investigate the
issue we discussed here.

All the best,
Jakub

On 2022-01-13 11:07, jbaran wrote:
> Hi Simon.
>
> On 2022-01-04 17:42, STUTE Simon wrote:
>> Hi Jakub,
>>
>> I am confused as you give two different legends for the cuboid data in
>> your two latest emails.
>
> Sorry for the mistake. I double-ckecked and the legend for the plot
> (cuboid_fdur.png) is as follows:
> TOP LEFT: true coincidences
> TOP RIGHT: true + scatter coincidences
> BOTTOM LEFT: true + scatter coincidences scatter corrected
> BOTTOM RIGHT: profiles along the orange line from previous plots.
>
>>
>> OK for being both simulated data, indeed, otherwise you could not
>> perform your SSRB-like scatter estimation... Sorry.
>>
>> Your frame duration is significant. As you take it into account when
>> computing the scatter estimation (with your method), I do not
>> understand why you initially forced it to be ignored in the
>> reconstruction ? You should always take it into account.
>
> I ignore it as it was from the previous study and I forget to turn it
> off :) The last results are with the scan duration information
> incorporated into reconstruction as you suggested.
>
>>
>> The way you estimate the scatter seems to be in agreement with what is
>> expected into CASToR.
>>
>> For the cuboid data, I still do not understand how CASToR is including
>> a scatter correction. It may be that the real scatter count of each
>> LOR is written as a rate in the scatter correction term. If so, then,
>> it is not in agreement with the model used in CASToR as the scatter
>> rate is included in the forward model (in other words, it is not
>> subtracted).
>
> I think it is done like you said. From my understanding, CASToR
> calculate the number of scatters and trues and then put the
> information about the scatter rate term into list-mode as the number
> of coincidences divided by the scan time.
>
>> Anyway, if it is done this way, then it should not be
>> done this way and you should not take this as a reference or so.
>> You should definitely prefer your SSRB-like method of smoothing the
>> scatter estimate.
>>
>> About your cdh file, everything looks fine.
>>
>> About what to look for in the datafile, I would like to see the total
>> number of prompts VS total number of scatters, based on the CASToR
>> datafile, and also the total number of corrected counts. You will be
>> able to check if the scatter fraction is in agreement with the data
>> coming out from GATE.
>
> We are using the list-mode reconstruction so if it is satisfactory for
> you I can give you the numbers of forward projection
> (vOptimizer::DataStep1ForwardProjectModel( ... ) method) from the
> line: m2p_forwardValues[a_th][b] +=
> ap_Event->GetAdditiveCorrections(b) *
> mp_ImageDimensionsAndQuantification->GetFrameDurationInSec(a_bed,
> a_timeFrame)
>
> In the attached files I provide a sample of the dumped data for
> consecutive events. The values in columns correspond to:
> 1) m2p_forwardValues[a_th][b] (before adding the
>  > additiveCorrections)
> 2) ap_Event->GetAdditiveCorrections(b)
> 3) m2p_forwardValues[a_th][b] (after adding the  additiveCorrections) -
>
> The simulation time is 500 seconds. I dumped the data from 4
> iterations for first 957 events. The two files correspond to the two
> cases. In the first case (castor_dev_factor1.txt) we used the values
> as described above. In the second case (castor_dev_factor20000.txt) we
> added an extra factor =20000 that multiply the scattering estimates.
> The factor was obtained just by trial and guess to match the scale
> between the additive correction part (scatter) and forward projection
> of the image estimate.
>
> Besides I also attached two short presentations of one of my colleague
> where he summarizes quantitatively all the staff we discuss. There is
> also comparison between our data (Scatter_factor_CASTOR_part_V) and
> the CAStoR benchmark (Scatter_factor_CASTOR_part_VI).
>
> Concerning the differences I also have another question. We have
> analyzed the benchmark data from the castor website (GE SIGNA PET/MR
> scanner). We found that the multiplicative factor -
> m_multiplicativeCorrection (oProjectionLine::ForwardProject(FLTNB*
> ap_image) fromm line value /= m_multiplicativeCorrection;) is 1 in our
> case and have various values in castor benchmark data. It seems that
> it is a crucial difference in those cases (as seen in the
> presentations). Could you elaborate what is its definition and how is
> it calculated?
>
> The last thing which I would like to ask is a calibration factor given
> in list-mode header from your benchmark data. Its value is Calibration
> factor: 1.45762e+08. What is the definition of this value? CASToR
> documentation states only: "The calibration factor associated to the
> current scanner settings (default: 1.)"
>
> All the best,
> Jakub
>
>>
>> Best
>> Simon
>> ________________________________________
>> De : jbaran <jbaran at ifj.edu.pl>
>> Envoyé : lundi 3 janvier 2022 13:39
>> À : STUTE Simon
>> Cc : Castor Users
>> Objet : Re: [Castor-users] Scatter rate estimation for LM-TOF-MLEM
>>
>> Hi Simon,
>>
>> I forget to add the proper legend to the cuboid.png file:
>>
>> The legend for the plot (cuboid_fdur.png) is as follows:
>> TOP LEFT: true coincidences
>> TOP RIGHT: true + scatter coincidences
>> BOTTOM LEFT: true + scatter coincidences scatter corrected
>> BOTTOM RIGHT: profiles along the orange line from previous plots.
>>
>> All the best
>> Jakub
>>
>> On 2022-01-03 13:36, jbaran wrote:
>>> Hi Simon,
>>>
>>> Happy New Year for you also.
>>>
>>> All datasets which I shown are from the simulation datasets.
>>>
>>> On 2022-01-03 12:47, STUTE Simon wrote:
>>>> Hi Jakub,
>>>>
>>>> Happy new year to you and your project !
>>>>
>>>> About real data, what is the scan duration ? Could you share the
>>>> header of the datafile ?
>>>
>>> I assumed that you mean the data from NEMA IEC siulation. The header
>>> looks as follows:
>>>
>>> Data filename: factor_20000_df.Cdf
>>> Number of events: 298175691
>>> Data mode: list-mode
>>> Data type: PET
>>> Start time (s): 0
>>> Duration (s): 500
>>> Scanner name: TB_JPET_2nd_gen
>>> Calibration factor: 1
>>> Isotope: unknown
>>> TOF information flag: 1
>>> TOF resolution (ps): 230
>>> List TOF measurement range (ps): 3000
>>> List TOF quantization bin size (ps): 100
>>> Scatter correction flag: 1
>>>
>>>
>>>> I will try to modify as soon as possible the DatafileExplorer
>>>> toolkit
>>>> to display the total corrected counts in addition to the total
>>>> number
>>>> of counts, that that you will be able to see if everything is
>>>> globally
>>>> correct in the datafile.
>>>
>>> We developed such a toolkit (more like dumping the data to the
>>> external file). Could you please tell me what I should look like for?
>>>
>>>>
>>>> About simulated data, CASToR does not perform any scatter
>>>> correction,
>>>> so there is something I do not understand.
>>>> I am not used to the Gate2CASToR toolkit, sorry.
>>>> Anyway, in the figure you attached, I cannot believe that bottom
>>>> left
>>>> is true coincidences only, there should be something wrong.
>>>
>>> I am sorry I made a mistake in the description of the cuboid.png
>>> file.
>>> It should be as follows:
>>>
>>> The legend for the plot (cuboid_fdu.png) is as follows:
>>> TOP LEFT: true + scatter coincidences scatter corrected
>>> TOP RIGHT: true + scatter coincidences
>>> BOTTOM LEFT: true coincidences
>>> BOTTOM RIGHT: profiles along the orange line from previous plots.
>>>
>>>> How many iterations/subsets are you using in the reconstructions ?
>>>
>>> We used 20 iterations. The results which I sent are for the 15th
>>> iteration.
>>>
>>>>
>>>> Best
>>>> Simon
>>>> ________________________________________
>>>> De : jbaran <jbaran at ifj.edu.pl>
>>>> Envoyé : lundi 20 décembre 2021 10:08
>>>> À : STUTE Simon
>>>> Cc : Castor Users
>>>> Objet : Re: [Castor-users] Scatter rate estimation for LM-TOF-MLEM
>>>>
>>>> Hi Simon,
>>>>
>>>> thanks for your prompt reply. and sorry for the late response.
>>>>
>>>> I did as you suggest. I remove the -ignore-corr fdur flag from the
>>>> reconstruction. I attached the results for both, NEMA IEC phantom
>>>> (scatter fraction calculated by ourselves) - NEMA_IEC_fdur.png - and
>>>> the
>>>> cuboid phantom (scatter correction calculated by CASToR) -
>>>> cuboid_fdur.png.
>>>>
>>>> For the NEMA IEC plot, all presented images are reconstructed with
>>>> scatter correction implemented and tested by ourselves. The
>>>> difference
>>>> is in an applied -ignore-corr fdur flag and scaling factor of the
>>>> scatter rates and the legend is as follows:
>>>> TOP LEFT: scalling factor = 20000 with -ignore-corr fdur
>>>> TOP RIGHT: scalling factor = 1  (without -ignore-corr fdur frame
>>>> duration is incorporated)
>>>> BOTTOM LEFT: scalling factor = 20000 superimposed on scalling factor
>>>> =
>>>> 1
>>>> with -ignore-corr fdur (the images looks the same)
>>>> BOTTOM RIGHT: profiles along the orange line from previous plots
>>>>
>>>> You can see that three of the reconstructed images looks very
>>>> similar.
>>>> The most significant difference is in the image on TOP LEFT so the
>>>> one
>>>> with scalling factor = 20000 with -ignore-corr fdur. But still the
>>>> effect of the scatters is observable.
>>>>
>>>> Regarding the way of scatter rate estimation we did in principle as
>>>> follows. We calculate the scatter corrections for each TOF bin. Then
>>>> we
>>>> merge some LORs to calculate the let say downsampled scatter rate.
>>>> Then
>>>> we divided this number by the number of LORs and time. In principle
>>>> you
>>>> can find some similarity to the SSRB procedure.
>>>>
>>>> For the cuboid study where the CASToR calculate the scatter rate
>>>> factors
>>>> internally, the results doesn't change. For this case I reconstruct
>>>> images once again but without -ignore-corr fdur flag. Incorporation
>>>> of
>>>> the scatter rate does not give any improvement of the image quality.
>>>> It
>>>> seems that even with nonTOF data these is something wrong with
>>>> scatter
>>>> correction.
>>>>
>>>> The legend for the plot (cuboid_fdu.png) is as follows:
>>>> TOP LEFT: true + scatter coincidences scatter corrected
>>>> TOP RIGHT: true + scatter coincidences
>>>> BOTTOM LEFT: true coincidences
>>>> BOTTOM RIGHT: profiles along the orange line from previous plots.
>>>>
>>>> All the best,
>>>> Jakub
>>>>
>>>>
>>>>
>>>> On 2021-12-07 11:51, STUTE Simon wrote:
>>>>> Hi,
>>>>>
>>>>> OK thanks for the explanations.
>>>>>
>>>>> Why ignoring the frame duration in the reconstruction ?
>>>>>
>>>>> As the scatter correction is supplied as a rate, you really need
>>>>> the
>>>>> frame duration to rescale the scatters to the prompt coincidences.
>>>>>
>>>>> Could you try to reconstruct with the frame duration taken into
>>>>> account
>>>>> ?
>>>>>
>>>>> How did you translate the estimation of the scatter rates based on
>>>>> a
>>>>> sinogram to the list-mode data ? Did you take the binning size into
>>>>> account ? You need to divide your scatter rate for a TOF bin by the
>>>>> size of the TOF bin to get an "almost" continuous measurement.
>>>>>
>>>>> Simon
>>>>>
>>>>> ________________________________________
>>>>> De : jbaran <jbaran at ifj.edu.pl>
>>>>> Envoyé : mardi 7 décembre 2021 10:59
>>>>> À : STUTE Simon
>>>>> Cc : Castor Users
>>>>> Objet : Re: [Castor-users] Scatter rate estimation for LM-TOF-MLEM
>>>>>
>>>>> Hi Simon,
>>>>>
>>>>> many thanks for the quick response. The answers are as follows:
>>>>>
>>>>>
>>>>> On 2021-12-07 09:56, STUTE Simon wrote:
>>>>>> Hello Jakub,
>>>>>>
>>>>>> Thanks for the detailed email !
>>>>>>
>>>>>> Do you take the scan duration into account in the datafile header
>>>>>> ?
>>>>>
>>>>> Yes, I added the information about the scan duration in the header.
>>>>> On
>>>>> the other hand in the reconstruction I used -ignore-corr fdur
>>>>> option.
>>>>>
>>>>>>
>>>>>> You say that you estimated the scatter rate for each TOF bin
>>>>>> independently to be 1-2. Is it "1 or 2" (which would be insanely
>>>>>> high)
>>>>>> or "e-2" ?
>>>>>
>>>>> I was not explicit here. The scatter rate passed to the castor lm
>>>>> is
>>>>> ranging from 0 to 2. However most values are in the range from 1e-3
>>>>> to
>>>>> 1e-1.
>>>>>
>>>>>>
>>>>>> How did you compute this estimated scatter rate ?
>>>>>
>>>>> We made basic estimation based on Monte Carlo simulations - NEMA
>>>>> IEC
>>>>> study. For the cubic study we use -sc flag during the conversion of
>>>>> the
>>>>> ROOT data to CASToR. For this the scatter rate is at the level of
>>>>> about
>>>>> 1e-4.
>>>>>
>>>>>>
>>>>>> And how did you translate this information into your list-mode
>>>>>> file
>>>>>> ?
>>>>>
>>>>> We adapt the CASToR code to read the scatter correction rate factor
>>>>> from
>>>>> the matrix provided by ourselves.
>>>>>
>>>>>>
>>>>>> Best
>>>>>> Simon
>>>>>
>>>>> All the best,
>>>>> Jakub
>>>>> _______________________________________________
>>>>> Castor-users mailing list
>>>>> Castor-users at lists.castor-project.org
>>>>> https://lists.castor-project.org/mailman/listinfo/castor-users
>>>>>
>>>>> To look for something in the mailing-list archives, use the search
>>>>> box
>>>>> at:
>>>>> https://castor-project.org/mailing-list
>> _______________________________________________
>> Castor-users mailing list
>> Castor-users at lists.castor-project.org
>> https://lists.castor-project.org/mailman/listinfo/castor-users
>>
>> To look for something in the mailing-list archives, use the search box
>> at:
>> https://castor-project.org/mailing-list
>
> _______________________________________________
> Castor-users mailing list
> Castor-users at lists.castor-project.org
> https://lists.castor-project.org/mailman/listinfo/castor-users
>
> To look for something in the mailing-list archives, use the search box
> at:
> https://castor-project.org/mailing-list


More information about the Castor-users mailing list