[Gate-users] use of doseactor, voxelized phantom and source to generate dose and edep map

Matthew Strugari matthew.strugari at dal.ca
Mon Jun 1 22:28:16 CEST 2020


Hi Park,

Bear with me and hopefully we can get this straightened out for you. I suspect you will need to relate the counts in your image to the radioactivity in the FOV which generated your image (using the linear translator). Suppose I have a PET image from a 50 MBq acquisition for some time t and that image contains 10,000,000 counts. Obviously, voxels with higher counts correspond to regions with more radioactivity. So, for my linear translator, I would set the scale to (50,000,000 Bq / 10,000,000 counts = 5 Bq) such that each unit of intensity in the image corresponds to 5 Bq. If a voxel had a value of 10, it would represent 50 Bq of F-18.

I believe this is where your confusion stems from since in your initial email, from what I understood and correct me if I’m wrong, you used the same configuration of 500000 primaries while changing only the input PET/CT images. In these PET images, data is acquired at different time points for different amounts of time and so the images contain differing numbers of counts. If your image has few counts, the 500000 generated primaries will be concentrated in a small region and you will see a large dose in those voxels. If your image has many counts which are dispersed throughout the image, the 500000 generated primaries will be distributed over a larger region. In both cases, you generate 500000 primaries but of course, the dose and edep is radically different since each primary generated represents one decay event of F-18. Contrary to what you state, the total number of primaries is in fact NOT “relevant with the radioactivity the phantom contains”.

To clarify, you could use 500000 primaries to represent a fraction of any treatment/acquisition, or you could use 500000 primaries to represent a 2s treatment/acquisition of 250 kBq of F-18, or you could even use 500000 primaries to represent a 1s treatment/acquisition of 500 kBq of F-18. It is up to you to decipher what your output data represents. This ties in with how you could instead use setTimeStart, setTimeSlice and setTimeStop. When using these commands, you would specifically set the activity of F-18 (i.e. 100uCi) and then assign for:

  *   The first acquisition: setTimeStart = 0s, setTimeSlice = 6600s, setTimeStop = 6600s;
  *   The second acquisition: setTimeStart = 6600s, setTimeSlice = 6600s, setTimeStop = 13200s; and
  *   The third acquisition: setTimeStart = 13200s, setTimeSlice = 6600s, setTimeStop = 19800s.

Lastly, you would only be able to relate the number of primaries to the uncertainty after a simulation is complete. Using a priori knowledge, you could then configure each simulation separately to achieve your desired uncertainty. Unless your imagesets represent the same information, there will not be an obvious common number of primaries for every source. This is to the best of my understanding so again, hopefully others can provide additional or more useful information.

Positively,
Matthew



From: Hyun Soo Park <hyuns at snu.ac.kr>
Date: Monday, June 1, 2020 at 10:12
To: Matthew Strugari <matthew.strugari at dal.ca>, "pharaon_m at hotmail.com" <pharaon_m at hotmail.com>
Cc: "gate-users at lists.opengatecollaboration.org" <gate-users at lists.opengatecollaboration.org>
Subject: Re: [Gate-users] use of doseactor, voxelized phantom and source to generate dose and edep map

CAUTION: The Sender of this email is not from within Dalhousie.
Matthew and Pharaon,

To address our issue more specifically, we've performed a simulation with voxelized phantom and source of varying radioactivity (exactly 100 microcuries, 50 microcuries, and 25 microcuries) using current code.

Without any modification for the code, the simulation returned the same result for the voxelized source of varying radioactivity, while we expected that radioactivity dependently decreases in the dose. Expected results came out only when we set TotalNumberOfPrimaries with 100000, 50000, 25000 for respective simulations; because we considered that the total number of primaries should be relevant with the radioactivity the phantom contains. We don't have any more ideas to control the decay of the radioactivity.

I am sure that this issue stemmed from the absence of the time information you commented on. And we would like simulation output to take the time into consideration. Your comment and explanation were very helpful but there are further questions:

1) how could we set setTimeStart, setTimeSlice and setTimeStop for above case of simulation? we can assume that F-18 containing phantom was scanned repeatedly at t0 (t = 0 min), t1/2 (110 min) and t/14 (220 min), respectively.

2) what is the relationship between the radioactivity specified in the voxelized source and the number of primaries? We used the linear translator but it seems that GATE do not consider that voxel values as the radioactivity.

3) When it comes to the uncertainty, how could we get enough uncertainty if we can set a common number of primaries for simulation for every voxelized source.

Closing wonderful weekends and welcome bright Monday,

Park

On Sun, May 31, 2020 at 1:54 AM Hyun Soo Park <hyuns at snu.ac.kr<mailto:hyuns at snu.ac.kr>> wrote:
Matthew,

thanks for your ideas of our macro. it is nice to hear that the macro is set reasonably.

by the way, about “non-sense” results of ours, we need more detailed explanation.

our PET/CT data was acquired at 2, 5, 10, 30, 60, 90, 240, 360 post injection of the tracer with scan time of 15s, 30s, 60s, 60s, 240s, 240s, 20 min and 40 min.  and for the PET, voxels were set to have Bq values so we thought that the linear translator is ok with setScale of 1 Bq. of course PET values were not-decay corrected when it was used as voxelized source.

we repeated the run for the each PET/CT images without any different conditions and parameters in the macro. then the “non-sense” results came out; the radioactivity distributed in the kidney decreased from the first to the last, the dose and edep is increased. we did’t gave GATE any time information for the simulation.

you suggested that the total number of primaries may be problematic. as you see we set the total number of primaries commonly for every voxelized source. so I think the dividing the same value will make no difference on the present result. where did I lost? would you please give us more details about ‘the number of decay events in your PET acquisition ‘ from “If you divide... which could then be scaled according to the number of decay events in your PET acquisition.”

cheers,

park







On Sat, May 30, 2020 at 11:39 PM Matthew Strugari <matthew.strugari at dal.ca<mailto:matthew.strugari at dal.ca>> wrote:
Hi Park,

I hope others may provide additional info, but from a quick glance at your code, everything appears reasonable in terms of your settings.

Your confusion with “non-sense results” may stem from your configuration with total number of primaries since your simulation output does not take time into consideration. Setting 500000 total primaries will generate particles without any respect to decay time. So, if you linearly increase the number of primaries, you will linearly increase the dose deposited. In other words, your dose and Edep output are a total based on the total number of primaries generated. If you divide your output by 500000 then you would have dose in terms of Gy/decay, for example, which could then be scaled according to the number of decay events in your PET acquisition. An alternative approach would be to use the setTimeStart, setTimeSlide, and setTimeStop commands which would generate the number of primaries based on radioactive decay and time. This would again produce the total dose and Edep output as described above for the total number of primaries generated.

In case there is any confusion on your linear translator scale, note that 1 Bq means that pixel values are represented directly in Bq. The total number of primaries are then distributed amongst the source voxels according to their activity. So, if you only had two non-zero voxels in your source image with values of 2 and 3, your simulation in the current configuration would generate 200000 and 300000 primaries in each voxel, respectively.

To measure dose to a specific organ, you could use a segmentation of a region of interest (ROI)  to mask the dose. All dose outside the ROI would be zero which would allow for computation of the dose volume histogram for any organ of interest.

Positively,
Matthew


From: Gate-users <gate-users-bounces at lists.opengatecollaboration.org<mailto:gate-users-bounces at lists.opengatecollaboration.org>> on behalf of Hyun Soo Park <hyuns at snu.ac.kr<mailto:hyuns at snu.ac.kr>>
Date: Saturday, May 30, 2020 at 09:43
To: "gate-users at lists.opengatecollaboration.org<mailto:gate-users at lists.opengatecollaboration.org>" <gate-users at lists.opengatecollaboration.org<mailto:gate-users at lists.opengatecollaboration.org>>
Subject: [Gate-users] use of doseactor, voxelized phantom and source to generate dose and edep map

CAUTION: The Sender of this email is not from within Dalhousie.
Hello, Gate users,

We just have a  relatively simple task of estimating internal radiation dosimetry of 18F-labeled PET tracer using doseactor, voxelized phantom and source. However, me and my colleagues are struggling with this beautiful research tool because of lack of experiences and not enough understandings about it.

We acquired PET/CT images using the radiotracer at varying time points to describe the biodistribution of the tracer. CT images were the voxelized phantom and PET images were the matched voxelized source.

By following to many contributors’ exercices and examples, we’ve finally generated following macro that returns common outputs of internal dosimetry by GATE (i.e., Dose and Edep, etc).

Our questions are obvious:

1) is the following macro defined well to generate Dose and Edep map for given voxelized phantom and source?

2) definition of the fluorine-18 was appropriate?

3) how could we measure dose of a specific organ, such as kidney, using dose map? Could it be done by common VOI analysis measuring voxel mean value?

4) the latest simulation gave us non-sense results of showing continuously increasing dose in a organ, while the radioactivity is apparently decreasing as time. how could it be explained?

Best wishes, and have a great weekend!

Park

#=====================================================
# VEROBOSITY
#=====================================================

/control/execute  mac/verbose.mac

#=====================================================
# VISUALISATION
#=====================================================

/control/execute mac/visu.mac

#=====================================================
# GEOMETRY
#=====================================================

/gate/geometry/setMaterialDatabase data/GateMaterials.db

# World
/gate/world/geometry/setXLength 10 cm
/gate/world/geometry/setYLength 10 cm
/gate/world/geometry/setZLength 10 cm
/gate/world/setMaterial Air
/gate/world/vis/setVisible 1
/gate/world/vis/forceWireframe

# Voxel phantom
/gate/world/daughters/name                      ct
/gate/world/daughters/insert                    ImageRegularParametrisedVolume
/gate/ct/geometry/setRangeToMaterialFile     data/range_geo.dat
/gate/ct/geometry/setImage                   data/ct-gate.mhd
/gate/ct/setSkipEqualMaterials 1
/gate/ct/vis/setVisible 1
# /gate/ct/vis/setColor blue
/gate/ct/vis/forceWireframe

# /gate/geometry/rebuild

#=====================================================
# PHYSICS
#=====================================================

/gate/physics/addPhysicsList emstandard_opt3
/gate/physics/addProcess RadioactiveDecay #to generate decay process of F-18

#=====================================================
# DETECTORS
#=====================================================

/gate/actor/addActor                                DoseActor  doseDistribution
/gate/actor/doseDistribution/attachTo       ct
/gate/actor/doseDistribution/stepHitType            random
/gate/actor/doseDistribution/setSize                30 28.8 99 mm #Size in mm
/gate/actor/doseDistribution/setPosition            0 0 0 cm # Origin
/gate/actor/doseDistribution/setResolution          58 48 165 #Size (pixel)
/gate/actor/doseDistribution/enableEdep             true
/gate/actor/doseDistribution/enableUncertaintyEdep  true
/gate/actor/doseDistribution/enableSquaredEdep      false
/gate/actor/doseDistribution/enableDose             true #from true
/gate/actor/doseDistribution/setDoseAlgorithm VolumeWeighting
# /gate/actor/doseDistribution/enableDoseToWater      true #new set
/gate/actor/doseDistribution/enableUncertaintyDose  true #from true
/gate/actor/doseDistribution/enableSquaredDose      false
/gate/actor/doseDistribution/enableNumberOfHits     true
/gate/actor/doseDistribution/save                   output/output.mhd

/gate/actor/addActor               SimulationStatisticActor stat
/gate/actor/stat/save               output/stat.txt
/gate/actor/stat/saveEveryNSeconds 60

#=====================================================
# INITIALISATION
#=====================================================

/gate/run/initialize

#=====================================================
# SOURCE :
#=====================================================

#Description

#Ion
/gate/source/addSource ion voxel
/gate/source/ion/reader/insert image
/gate/source/ion/imageReader/translator/insert linear
/gate/source/ion/imageReader/linearTranslator/setScale 1. Bq
/gate/source/ion/imageReader/readFile data/pt-gate.mhd
/gate/source/ion/imageReader/verbose 1
/gate/source/ion/setPosition -15.0 -14.4 -49.5 mm

/gate/source/ion/gps/particle ion
/gate/source/ion/gps/ion 9 18 0 0 #F-18
/gate/source/ion/gps/energytype Mono
/gate/source/ion/gps/monoenergy 0. keV
/gate/source/ion/gps/angtype iso
/gate/source/ion/setForcedUnstableFlag true
/gate/source/ion/useDefaultHalfLife 6586 s


/gate/source/ion/dump                                   1

# /gate/source/list

#=====================================================
# RANDOM
#=====================================================
/gate/random/setEngineName MersenneTwister
/gate/random/setEngineSeed auto

#=====================================================
# START
#=====================================================

/gate/application/noGlobalOutput
/vis/enable
/gate/application/setTotalNumberOfPrimaries 500000 #acceptable uncertainty is at 500000
/gate/application/start

--
연구중점교수, 분당서울대학교병원
전화번호:
(사무실) +82-31-787-2936
(휴대전화) +82-10-8833-2806
팩스: +82-31-787-4018
이메일: hyuns at snu.ac.kr
<mailto:hyuns at snu.ac.kr>

Hyun Soo Park, PhD
--
Research professor
Department of Nuclear Medicine
Seoul National University Bundang Hospital, Seongnam, Korea
Telephone:
(Office) +82-31-787-2936
(Mobile) +82-10-8833-2806
Fax: +82-31-787-4018
email: hyuns at snu.ac.kr<mailto:hyuns at snu.ac.kr>
--
연구중점교수, 분당서울대학교병원
전화번호:
(사무실) +82-31-787-2936
(휴대전화) +82-10-8833-2806
팩스: +82-31-787-4018
이메일: hyuns at snu.ac.kr
<mailto:hyuns at snu.ac.kr>

Hyun Soo Park, PhD
--
Research professor
Department of Nuclear Medicine
Seoul National University Bundang Hospital, Seongnam, Korea
Telephone:
(Office) +82-31-787-2936
(Mobile) +82-10-8833-2806
Fax: +82-31-787-4018
email: hyuns at snu.ac.kr<mailto:hyuns at snu.ac.kr>


--
연구중점교수, 분당서울대학교병원
전화번호:
(사무실) +82-31-787-2936
(휴대전화) +82-10-8833-2806
팩스: +82-31-787-4018
이메일: hyuns at snu.ac.kr
<mailto:hyuns at snu.ac.kr>

Hyun Soo Park, PhD
--
Research professor
Department of Nuclear Medicine
Seoul National University Bundang Hospital, Seongnam, Korea
Telephone:
(Office) +82-31-787-2936
(Mobile) +82-10-8833-2806
Fax: +82-31-787-4018
email: hyuns at snu.ac.kr<mailto:hyuns at snu.ac.kr>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opengatecollaboration.org/pipermail/gate-users/attachments/20200601/7e8d2f26/attachment-0001.html>


More information about the Gate-users mailing list