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

jbaran jbaran at ifj.edu.pl
Thu Jan 27 00:02:49 CET 2022


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