CIEMAT, July 2012 GAMOS 1
GAMOSan easy and flexible framework for
GEANT4 simulations
Pedro Arce
(CIEMAT, Madrid)
CIEMAT, 5th July 2012
CIEMAT, July 2012 GAMOS 2
Introduction MC applications GAMOS objectives
Defining the input Geometry from text files Movements Primary generator Physics
Extracting detailed data GAMOS data Filtering Classifying Scoring Sensitive detectors Histogramming Parameter management Verbosity
Optimisation
Outline
GAMOS plug-in’s
Applications PET/SPECT
Radiotherapy Accelerator geometry Phase space files Phantom voxelised geometries Dose in phantom Analysis and visualization Optimisationn
Installation/Documentation/User
support
Installation
Documentation
Release and user support
Summary
CIEMAT, July 2012 GAMOS 3
Introduction
CIEMAT, July 2012 GAMOS 4
Often the use a MC simulation is a difficult task for a non-expert software user– In the case of Geant4 most of the application has to be written in C++
Several applications try to facilitate the use of MC in a specific field
• Providing an scripting language tailored to the field
MC applications
CIEMAT, July 2012 GAMOS 5
But users find some problems with these applications
1. User wants to describe some input not included in the application A peculiar volume shape, a new primary generator position distribution,
some option in the physics,…
2. User wants to have some kind of output or detailed information to debug or understand some part of the simulation, and the application only provides a limited amount of output possibilities Dose from the gammas that entered the phantom with small energy,
energy lost by particle traversing a volume as a function of the initial energy, …
3. The available applications cover a limited amount of physics fields, and many users do not find an appropriate one for their needs
MC applications
CIEMAT, July 2012 GAMOS 6
After almost ten years providing different utilities to make easier the use of Geant4 we created GAMOS with the objectives:
to provide a framework not only easy-to-use but also flexible, that may cover the needs of a wide range of Geant4 users
(a framework should not become an obstacle for an advanced user who wants to exploit all the functionality that Geant4 offers)
Comprehensive scripting language Very wide range of input possibilities Allow extraction of detailed information at any moment of
the simulation
Easily extendible with new user code Provide a mechanism so that users can easily extend the
framework functionalities with their code - Without the need to understand how GAMOS works internally
GAMOS objectives
CIEMAT, July 2012 GAMOS 7
GAMOS became a framework during first months of 2007 to help in the simulation of CIEMAT PET detector projects
it was soon extended for radiotherapy applications
GAMOS is the fruit of +10 years experience developing Geant4-based
frameworks Member of Geant4 since 1998 Coordination of the CMS Geant4 framework during its first years
The first LHC Geant4 framework to be fully operative
Coordination the HARP (PS) Geant4 framework (by nomination from S. Giani,
first Geant4 spokesman)
CIEMAT group had several years experience with PET detectors and
radiotherapy
GAMOS history
Defining the input
CIEMAT, July 2012 GAMOS 9
To do simulation with Geant4 a user has first to define the input: Geometry
Optionally if a volume is a sensitive detector Primary generator (initial particles) Physics
There is no predefined physics in Geant4, user has to choose the one
more appropriate for her/his simulation
And the output: Histograms Scores (counts) Files with data for later analysis
The output is mainly obtained through: User actions Sensitive detectors / hits Scorers
Geant4 simulation
CIEMAT, July 2012 GAMOS 10
Three different ways to define it:
C++ code: The usual GEANT4 way Add one line to transform your class in a plug-inDEFINE_GAMOS_GEOMETRY (MyGeometry); so that you can select it in your input macro/gamos/geometry MyGeometry
Using one of the GAMOS examples for simple cases Simple PET can be defined through an 8-parameters file (n_crystals,
crystal_x/y/z, radius, …) Simple phantoms with a few user commands
Define it in ASCII (text) files The easiest way to define a geometry Based on simple tags Same order of parameters as corresponding GEANT4 classes
Geometry
CIEMAT, July 2012 GAMOS 11
Based on simple tags, with same order of parameters as corresponding GEANT4 classes
:MATE Cu 29 63.54 8.9333*g/cm3:VOLU yoke TUBE 62.*cm 820.*mm 1.27*m Cu:ROTM RM0 0. 0. 0.:PLACE yoke 1 expHall RM0 0. 0. 370.*cm
MATERIALS: Isotopes Elements Simple materials Material mixtures by weight, volume or number of atoms GEANT4 intrinsic materials + 300 predefined materials common in the medical field
SOLIDS: All GEANT4 “CSG” and “specific” solids Twisted solids Tessellated solids Boolean solids
Geometry from text files
MATE Cu 29 63.54 8.9333*g/cm3:VOLU yoke TUBE 62.*cm 820.*mm 1.27*m Cu:ROTM RM0 0. 0. 0.:PLACE yoke 1 expHall RM0 0. 0. 370.*cm
CIEMAT, July 2012 GAMOS 12
ROTATION MATRICES: 3 rotation angles around X,Y,Z 6 theta and phi angles of X,Y,Z axis 9 matrix values
PLACEMENTS: Simple placements Divisions Replicas Assemblies Parameterisations
Linear, circular, square or phantom-like For complicated parameterisations example of how to mix the C++
parameterisation with the ASCII geometry file
COLOUR
VISUALISATION ON/OFF
Geometry from text files
CIEMAT, July 2012 GAMOS 13
PARAMETERS: Can be defined to use them later
:P InnerR 12.
:VOLU yoke :TUBS Iron 3 $InnerR 400. 300.
:VOLU yoke2 :TUBS Iron 3 $InnerR 200. 200.
ARITHMETIC EXPRESSIONS: Elaborated expressions can be used
:SOLID yoke TUBE sin($ANGX)*2+4*exp(1.5)*cm 820. 1270.*mm
UNITS: Default units for each parameter Each value can be overridden by user
INCLUDE OTHER FILES (hierarchical approach):#include mygeom2.txt.
Geometry from text files
:P InnerR 12. :VOLU yoke :TUBS Iron 3 $InnerR 400. 300. :VOLU yoke2 :TUBS Iron 3 $InnerR 200. 200.
CIEMAT, July 2012 GAMOS 14
User can extend it: add new tags and process it without touching base code
Can mix a C++ geometry with a text geometry
GEANT4 in memory geometry text files
Install and use it as another GEANT4 library
G4VPhysicalVolume* MyDetectorConstruction::Construct(){
G4tgbVolumeMgr* volmgr = G4tgbVolumeMgr::GetInstance();
volmgr->AddTextFile(filename); // Several files can be added
return = volmgr->ReadAndConstructDetector();
HISTORY: In use to build GEANT4 geometries since 10 years ago
An evolving code… It is part of the GEANT4 release since December ‘08
Geometry from text files
:ROTM R00 0. 0. 0.:VOLU world BOX 100. 100. 100. G4_AIR:VIS world OFF:VOLU "my tube" TUBE 0. 10. 20. G4_WATER:P POSZ 5:PLACE "my tube" 1 world R00 0. 0. -$POSZ:VOLU sphere ORB 5. G4_Si:PLACE sphere 1 "my tube" R00 0. 1. $POSZ
CIEMAT, July 2012 GAMOS 15
User can move any volume with user commands Several movements of the same volume or different ones can be
set at the same time
Displacements, rotations or text file that allows to define any
movement
Every N events or every interval of time
N times or forever
Offset can be defined
Movements
Sinusoidal movement simulated with GAMOS
CIEMAT, July 2012 GAMOS 16
Particle generatorC++ code• The usual GEANT4 way• Add one line to transform your class in a plug-in DEFINE_GAMOS_GENERATOR(MyGenerator); so that you can select it in your input macro/gamos/generator MyGenerator
GAMOS generator Wide range of particles: gamma, e-, e+, proton, neutron, ions, isotopes, …
Combine any number of particles in one event (history) For each particle or isotope user may select by user commands any combination of time,
energy, position and direction distributions
Geant4 radioactive decay can be selected with user command Decay branching ratios and energy spectra of all isotopes
/gamos/generator/directionDist source GmGenerPositionDiscGaussian 1.*mm/gamos/generator/timeDist source GmGenerTimeDecay
CIEMAT, July 2012 GAMOS 17
Generator distributions
Common medical physics distributions are availablePOSITION:
Point Square Rectangle
Disc DiscGaussian LineSteps
InVolumes (sphere/box/tube_section/ellipsoid)
InVolumeSurfaces (sphere/box/tube_section/ellipsoid)
InVolumesGeneral (any solid) VoxelPhantomMaterials
DIRECTION:
Random Const Cone
ENERGY:
Constant Gaussian RandomFlat
BetaDecay ConstantIsotopeDecay
TIME:
Constant Decay
POSITION & DIRECTION:
InVolumeSurfaceTowardsCentre TowardsBox
User can create its own distribution and select it with a user command (plug-in)
F18 decayenergy
CIEMAT, July 2012 GAMOS 18
Generator distributions
EXAMPLE:
Select as primary particle a gamma of 5.75 MeV:
/gamos/generator/addSingleParticleSource MySource gamma 5.75*MeV
Select as position uniformly distributed into the volume called ‘source’:
/gamos/generator/positionDist MySource GmGenerDistPositionInG4Volumes source
Select as direction a cone with axis along X and aperture 3 degrees:
/gamos/generator/directionDist MySource GmGenerDistDirectionCone 1. 0. 0. 3*deg
CIEMAT, July 2012 GAMOS 19
Physics GAMOS physics list Selection of all options of GEANT4 electromagnetic physics with user commands
standard / low energy / Penelope different multiple scattering models gamma/electron – nuclear interactions atomic deexcitation X-ray reflection (new development by Zhentian Wang, Dept. of Physics Engineering, Tsinghua University, China)
All physics lists in Geant4 code can be selected through a user command
Production cuts: can be set different for each volume region/gamos/physics/setCuts collimator 1.*mm 1*mm
/gamos/physics/setCuts MLCs 10.*mm 1*mm
User limits: (min Ekin, min range, max track length, max step length, max time of flight) can be set different for each volumeUtility to automatically optimize production cuts and user limits (see User’s Guide)
CIEMAT, July 2012 GAMOS 20
Extracting detailed data
CIEMAT, July 2012 GAMOS 21
Obtaining detailed data
Most users are researchers, it is not enough to provide some final results, like dose distribution, or PET event classification table
Want to have a deep understanding of what happens in the simulation
Want to have the capability to evaluate the reliability of the results
Want to choose the best physics configuration
For example: Which is the dose contributed by the electrons that reach the phantom in a
gamma accelerator treatment? How many gammas traverse completely the jaws? How much energy they
lose? What is the length travelled by electrons produced by Compton interactions in a
crystal? … Something we GAMOS developers have never imagined…
CIEMAT, July 2012 GAMOS 22
GAMOS data
Almost 200 types of data can be obtained at each step, track, event or run
event ID, trackID, particle, process, kinetic energy, energy lost, energy deposited, step length, number of secondary's, position (X/Y/Z/R2/R3/phi/theta), direction, change in position, change in angle, energy secondary/energy primary, angle secondary – primary, etc.
Also composed data, using arithmetic expressions sqrt(2.*FinalLocalPosX*FinalLocalPosY)
With a few user commands data can be used to fill histograms (1D, 2D, profile), be dumped in text or binary files, or be printed on the screen
EXAMPLE: Plot at each track step the logarithm of the initial kinetic energy and also the final X position vs final Y position
/gamos/userAction GmStepDataHistosUA
/gamos/setParam GmStepDataHistosUA:DataList log10(InitialKineticEnergy)
FinalPosX.vs.FinalPosY
CIEMAT, July 2012 GAMOS 23
Filtering
A filter is an algorithm that accepts or reject a step or track
● > 100 filters in GAMOSStarts/Ends/Enters/Exits/Traverses/In LogicalVolume/PhysicalVolume/Touchable/Region, or any of their children, particle type, process type, primary or secondary, charged or neutral, etc.
Composed filters:● AND, OR, XOR, Inverse, OnSecondary (apply filter to secondary tracks created in a
step), with history (pass filter in any previous track step or any ancestor previous track
step), etc.
Filter on numeric data: if the data is inside an interval/gamos/filter energyF GmNumericDataFilter InitialKineticEnergy 100.*keV 1.*MeV
Filter on string data: if the data is included in a list/gamos/filter scatteringF GmStringDataFilter Process compt rayleigh
CIEMAT, July 2012 GAMOS 24
Filtering example
Dump in a text file the energy lost by the tracks in all kind of jaws
# only when track steps happen in JAWS_X or JAWS_Y
/gamos/filter jawsF GmInLogicalVolumeFilter MY_JAWS*
# Select what to dump into text file
/gamos/setParam GmTrackDataTextFileUA_jawsF:DataList EventID TrackID Particle AccumulatedEnergyLost
# Include a header line in text file
/gamos/setParam GmTrackDataTextFileUA_jawsF:WriteHeader 1
# Dump data in text file
/gamos/userAction GmTrackDataTextFileUA jawsF
HEADER: 4,"EventID","TrackID","Particle","AccumulatedEnergyLost"2,2,"e-",0.019837440,2,"e-",0.15152663,2,"e-",0.188402119,52,"e-",0.494147119,49,"gamma",0.514096119,46,"gamma",4.02731
CIEMAT, July 2012 GAMOS 25
Classifying
A classifier is an algorithm that classifies a step or track information, returning an index● ByParticle, ByKineticEnergy, ByNAncestors, ByLogicalVolume, ByPhysicalVolume,
ByTouchable, ByRegion, ByProcess, ByMaterial, etc.
Compound classifiers: return an index combining two or more classifiers/gamos/classifier particleAndProcessC GmClassifierByParticle GmClassifierByProcess
Classifier on numeric data: different index for each interval/gamos/classifier energyC GmClassifierByNumericData InitialKineticEnergy 0. 10.*MeV 1*MeV
Classifier on string data: different index for each data value/gamos/classifier processC GmClassifierByStringData CreatorProcess
CIEMAT, July 2012 GAMOS 26
Classifying example
Plot for each Z layer the X vs Y position only when an interaction occurred in the “phantom” volume# only when track steps happen in phantom
/gamos/filter InPhantomF GmInLogicalVolumeFilter phantom
# classify by the Z position (a different histogram for each Z interval)
/gamos/classifier ZposC GmClassifierByNumericData FinalPosZ -100. 100.
200./10
# select what to plot
/gamos/setParam GmStepDataHistosUA_InPhantomF_ZposC:DataList
FinalPosX.vs.FinalPosY
# build histograms at each step using filter and classifier
gamos/userAction GmStepDataHistosUA InPhantomF ZposC-100 < Z < -80 -80 < Z < -60 -60 < Z < -40
CIEMAT, July 2012 GAMOS 27
ScoringScoring may be an important part of a simulation powerful and flexible framework developed, fully based on user commands: Many possible quantities can be scored in one or several volumes (based on Geant4 scorers)
● Dose ● Deposited energy ● Flux (in/out/passage)● Current (in/out/passage) ● Charge ● Step length● Number of particles ● Number of interactions ● Number of 2ary particles● Number of steps ● Minimum kinetic energy ● Kerma
For each scored quantity one of several filters can be used only electrons, only particles with energy in a given interval, …
Several ways to classify the different scores One different score for each volume copy, or volume name, or energy bin,
… Results can be printed in one or several formats for each scored quantity
Standard output, text/binary file, histograms Scoring can be made in real or in parallel worlds
All scored quantities can be calculated with/without errors
All scored quantities can be calculated per event or per run Taking into account correlations from particles from same event
CIEMAT, July 2012 GAMOS 28
Scoring
Everything managed with user commands
For example: score the number of interactions (collisions) of gammas in each volume copy
- Select all volumes for scoring/gamos/scoring/createMFDetector nInterDet *- Score number of interactions/gamos/scoring/addScorer2MFD nInterScorer GmG4PSNofCollision nInterDet- One score per each physical volume/gamos/scoring/assignClassifier2Scorer GmClassifierByPhysicalVolume nInterScorer- Only score for gammas/gamos/scoring/addFilter2Scorer GmGammaFilter nInterScorer
OUTPUT:MultiFunctionalDet: nInterDet
PrimitiveScorer: nInterScorer Number of entries= 6 index: target:1 = 2.111 +-(REL) 0.024593555 index: primary collimator:1 = 1.066 +-(REL) 0.049482843 index: flattening filter:1 = 0.028 +-(REL) 0.28856012 index: jaws_X:1 = 0.003 +-(REL) 1 index: jaws_X:2 = 0.006 +-(REL) 0.6231189 index: expHall:0 = 0.002 +-(REL) 0.70675279
CIEMAT, July 2012 GAMOS 29
Sensitive Detectors
To produce hits in GEANT4 a user has to (with C++): Define a class inheriting from G4VSensitiveDetector Associate it to a G4LogicalVolume Create hits in the ProcessHits method Clean the hits at EndOfEvent
In GAMOS you can do all this with a user command
/gamos/assocSD2LogVol SD_CLASS SD_TYPE LOGVOL_NAME
• SD_CLASS: the G4VSensitiveDetector class• SD_TYPE: an identifier string, so that different SD/hits can have different treatment
Users can create her/his own SD class and make it a plug-in
DEFINE_GAMOS_SENSDET(MySD);
CIEMAT, July 2012 GAMOS 30
Hits
A GAMOS hit has the following information:• ID of the sensitive volume copy
• event ID
• energy
• time of the first E deposit
• time of the last E deposit
• position
• list of all tracks that contributed
• list of all ‘primary´tracks that contributed
• list of all deposited energies
• SD type
Users can create his/her own hit class
Hits can be stored in a job and read in another job• Format compatible with STIR software (PET reconstruction)
511 keV photoelectric (PE) peak
escapepeak
backscattering peak
Bi fluorescencepeak
E > 511 keVphotoelectric
peaks
/gamos/userAction GmHitsHistosUA
CIEMAT, July 2012 GAMOS 31
Detector effects
Measuring time - A detector is not able to separate signals from different events if they come close in time
Dead time - When a detector is triggered, this detector (or even the whole group it belongs to) is not able to take data during some time
- Paralizable (if a new event happens while it is dead the dead time restarts)- Non-paralizable (dead time is fixed, a new event has no effect)
• Both can be set by the user in the input macro• A different time for each SD_TYPE
/gamos/setParam SD:MeasuringTime:MySD_1 1000.*ns
/gamos/setParam SD:MeasuringTime:MySD_2 250.*ns
CIEMAT, July 2012 GAMOS 32
Hits digitization and reconstruction
• Framework to transform simulated hits digital signals reconstructed hits (energy/time/position)
• Digitization and hits reconstruction are very detector specific : it is not possible to provide a general solution
• GAMOS provides a few simple digitizers and hits reconstructor’s
• 1 hit 1 digit• Merge hits close enough
• Same set of sensitive volumes• Closer than a given distance
• User may implement detector specific effects
• Trigger• Pulse simulation• Sampling• Noise• …
-- hits-- clusters of hits
/gamos/userAction GmHitsHistosUA/gamos/userAction GmRecHitsHistosUA
CIEMAT, July 2012 GAMOS 33
Histograms By default histograms are written in ROOT format But many medical users have never heard of ROOT, while they are experts on Matlab, Origin, …
Own format: can write histograms in text files (CSV) without any external dependency
Read them in Matlab, Origin, Octave, GNUplot,…, even MS Excel
0
500
1000
1500
2000
2500
Energy
N e
ntr
ies
++
MS Excel graphics of energy of e+ from F18 decay
/gamos/userAction GmGenerHistosUA/gamos/analysis/fileFormat CSV
CIEMAT, July 2012 GAMOS 34
Parameter management
Many classes change their behaviour depending on the value of some parameters, that the user can set with user commands
GAMOS code use parameters extensively to maximise the flexibility Always a default value in case the user does not care
Parameters can be numbers, strings, list of numbers or list of strings Units and mathematical expressions can be used
10*cos(30*deg) (3-0.5*0.6)*becquerel Wildcards can be used
crystal_* *layer*
GAMOS provides a unique command to manage all these parameters
• A parameter is defined in the input macro/gamos/setParam SD:EnergyResol 0.1*mm
• Any class can use this value in any part of the codefloat enerResol = GmParameterMgr::GetInstance() ->GetNumericValue(“SD:EnergyResol”,0.);
Over 300 parameters (all clearly documented)
CIEMAT, July 2012 GAMOS 35
Verbosity
When a user finds a problem, or to better understand the simulation, she/he wants to get a lot of detailed output
But only for a few events, not always!
Framework should provide a simple mechanism to activate/deactivate verbosity
Per event and/or track Per simulation component (geometry, physics, PET,
radiotherapy, …)
CIEMAT, July 2012 GAMOS 36
GAMOS verbosity Verbosity controlled through user commands
Different verbosities for different simulation parts (geometry, physics, generator, PET, radiotherapy, …) 6 levels of verbosity (silent, error, warning, info, debug, test) Controlled per event Selectable by user commands
/gamos/verbosity GenerVerbosity info
/gamos/verbosity PETVerbosity debug
Verbosity managers are plug-ins: user can easily create its own
one
GEANT4 tracking verbosity can be controlled by event and by track /gamos/setParam GmTrackingVerboseUA:EventMin 14632 /gamos/setParam GmTrackingVerboseUA:EventMin 14635 /gamos/setparam GmTrackingVerboseUA:TrackMin 1 /gamos/setparam GmTrackingVerboseUA:TrackMax 20
CIEMAT, July 2012 GAMOS 37
Optimisation
CIEMAT, July 2012 GAMOS 38
Optimisation: time studies
User commands to get CPU time study By particle, energy bins, volume, region (or combination of them)
Just add user commands:
/gamos/classifier ParticleAndEnergyClassifier GmCompoundClassifier
GmClassifierByParticle GmClassifierByEnergy
/gamos/userAction GmTimeStudyUA ParticleAndEnergyClassifier
gamma/0.001-0.01: User=0.01 Real=0 Sys=0
gamma/0.01-0.1: User=2.01 Real=2.45 Sys=0.27
gamma/0.1-1: User=19.12 Real=22.05 Sys=1.51
gamma/1-10: User=4.25 Real=5.4 Sys=0.3
e-/0.0001-0.001: User=0.07 Real=0.1 Sys=0
e-/0.001-0.01: User=0.54 Real=0.69 Sys=0.06
e-/0.01-0.1: User=4.71 Real=5.41 Sys=0.38
e-/0.1-1: User=15.59 Real=18.19 Sys=1.79
e-/1-10: User=82.83 Real=98.62 Sys=7.45
CIEMAT, July 2012 GAMOS 39
Optimisation: physics cuts Two kind of physics cuts in Geant4:
Production thresholds Limit secondary production for ionisation and bremsstrahlung (and e+e-)
User Limits:
Limit step size: better done tuning EM physics parameters
Limit track length
Limit time of flight
Kinetic energy/range minimum (stop particle if kinE/range below a
limit): useful to kill particles when energy not enough to reach target
Better use range because more uniform for different regions
Better use kinetic energy because more efficient calculation
GAMOS solution: use kinetic energy inside but user provides it as
range through a command
Different physics cuts per particle and region (group of volumes) can
be defined through user commands
CIEMAT, July 2012 GAMOS 40
Optimisation: setting best cuts
Normally people want that optimising the cuts produces only few % (or less) difference in results
need to run very big statistics Cuts can be very different for different particle/regions, and a cut in one particle/region may affect another
need to run many sets of cut values
RESULT: usually people think it is too complicated Do not optimise cuts Just copy the cuts from someone, which usually are not the best one for them
In GAMOS we propose anAutomatic determination of best production cuts or user limits in
one job
CIEMAT, July 2012 GAMOS 41
Extending the scripting language:
plug-in’s
CIEMAT, July 2012 GAMOS 42
If I want some functionality that GAMOS does not have? Best solution for biggest flexibility: plug-in’s
What’s is a plug-in?It is the same in software that USB in hardware:
The easiest way to add a new device (class), without touching the operative system (framework): no need to install a driver (modify framework classes)
How it works in GAMOS: If you want to use, for example, your own physics list instead of
one of the GAMOS ones Add one line in user’s code
DEFINE_GAMOS_PHYSICS(MyPhysicsList); Code is transformed into a plug-in Automatically it may be selected with a user command
/gamos/physics MyPhysicsList
GAMOS plug-in’s
CIEMAT, July 2012 GAMOS 43
Advantages of plug-in’s: No need to understand how GAMOS works internally (how GAMOS
would invoke my code?) or modify GAMOS code No need to recompile each time I want to alternate between the
GAMOS component and my own one
GAMOS has no predefined components: user has full freedom in choosing components - Any user written code (geometry, primary generator, physics list, sensitive
detector, user actions, …) can substitute any GAMOS component while still using the rest of GAMOS utilities
- If you have a working application, you may still use it, while you take profit of the part of GAMOS you like
No restrictions on the way to do things: all Geant4 functionality is available to
GAMOS users
GAMOS plug-in’s
CIEMAT, July 2012 GAMOS 44
Applications
CIEMAT, July 2012 GAMOS 45
PET/SPECT
CIEMAT, July 2012 GAMOS 46
PET/SPECT Any PET/SPECT detector can be simulated with simple text format Utility to create simple PET geometries from a few parameters (number of crystals per block, number of block per ring, radius, ...)
Several sensitive detectors types selectable by user commands
User can create it own one and make it a plug-in
Automatic creation of hits with detailed information/gamos/assocSD2LogVol GmSDSimple SD_TYPE VOLUME_NAME Writing hits into text or binary file Retrieving them in next job (for doing parametric studies)
Format compatible with STIR software
Several algorithms for identifying first interaction for detectors with DOI info
HitsenergyLaBr3
CIEMAT, July 2012 GAMOS 47
PET/SPECT
Detector effects Energy resolution Time resolution Dead time (paralizable / non-paralizable) Measuring time Coincidence time
Digitizer and reconstructed hits framework and examples ClearPET sensitivity profileoptical photons in BrainPET
CIEMAT, July 2012 GAMOS 48
PET/SPECT Table of PET/SPECT classification
True / scattered / random coincidences / scattered&random PET/SPECT line far or close to vertex Optionally merge hits if there is more than one because of Compton interactions
SPECT: gamma passed through collimator or not Histograms of hits or reconstructed hits with a user command Histograms of positron history Histograms of PET/SPECT information
PixelPET sensitivity of different event typesClearPET derenzo reconstruction
CIEMAT, July 2012 GAMOS 49
Radiotherapy
CIEMAT, July 2012 GAMOS 50
GAMOS framework covers the needs of an external beam
radiotherapy simulation user:
Easy way to build accelerator geometries
Reading DICOM patient geometries
Common primary generator distributions
Writing/reading phase space files
Dose deposition in phantoms Histograms and binary files
CPU Optimisation Optimising cuts
Variance reduction techniques
Debugging tools
Radiotherapy
CIEMAT, July 2012 GAMOS 51
Accelerator geometry can be written with simple text format
But some accelerator parts are difficult
we provide modules that allow to build
them with a short list of parameters
JAWS:
Use radiotherapist point of view:
provide field at a plane (10x10 cm, 40x40 cm, …) : Type (X / Y) Box dimensions Focus Z Box position Z Field Z Projections on field Material Mother volume to place it
Accelerator geometry
VRML view of VARIAN 6000 accelerator
CIEMAT, July 2012 GAMOS 52
MULTILEAF COLLIMATOR:
Use radiotherapist point of view: provide conformal beamLeave profile (list of points)
End leaves type (Rounded or straight)
Top MLC Z plane position
Focus Z
Isocentre Z
Interleaves gap
Materials
…
Accelerator geometry
VRML view of curved MLC
CIEMAT, July 2012 GAMOS 53
Write phase space files
IAEA format
One or several Z planes in the same job
Stop after last Z plane or not
Save header after N events
(not to lose everything if job is aborted)
Save extra info: Regions particle traversed Regions particle created Regions particle interacted Particle origin Z Big flexibility
More can be easily added (they are plug-in’s) User selects which information and how many bytes each one occupies
Phase space files
CIEMAT, July 2012 GAMOS 54
Use phase space files as generator
Displace or rotate phase space particles
Reuse phase space particles
Optional automatic calculation of reuse
number
Optional mirroring in X, Y or XY
Particles can be reused without writing
phase space files
Recycle phase space files
Optional skipping of first N events
Optional histograms of particles read
Filter particles by extra info
Also read EGSnrc phase space format
Phase space files
CIEMAT, July 2012 GAMOS 55
CT DICOM files provide image information CT is sensitive to electronic density (Hounsfield numbers)
But simulation codes need information on material densities
Geant4 provides an utility to convert DICOM images
to material and density information
(example advanced/medical/DICOM: DICOM
ASCII)
GAMOS reads Geant4 format And also EGSnrc format Split one material in several if voxel densities are different
User defines an interval X and a material is created for the densities in each X interval
Displace or rotate read-in phantom geometry Simple phantoms can be created with a few user commands
Phantom voxelised geometries
CIEMAT, July 2012 GAMOS 56
Geant4 allows to build parallel worlds But only geometry is seen, not materials (=no interactions)
We have developed a tool that allows to insert objects in phantom
geometries and produce the interactions in them Realistic simulation of brachytherapy sources or ionisation chambers!
Inserting objects in phantom voxelised geometries
Brachytherapy seed inserted in phantom
CIEMAT, July 2012 GAMOS 57
Fast Geant4 regular navigation is default New dose scorer, taking into account effect of energy
loss and multiple scattering when distributing dose in voxels
Dose with errors can be calculated Different printing formats in each run
Text in standard output Dose histograms (X, Y, Z, XY, XZ, YZ, dose,
dose-volume) File with dose and error at each voxel File with dose and dose2 at each voxel (to properly take into account
correlations)
Many different doses can be calculated in the same job, with different filters, for detailed studies
Dose in total or by event Proper management of original number of events when reading phase
space files
Dose in voxelised phantomDose from brachytherapy seeds
CIEMAT, July 2012 GAMOS 58
A set of easy-to-use executables and scripts
Phase space files Sum phase space files Analyse phase space files
Statistics Histograms by particle type at each Z plane
(= when writing PS) Compare two phase space files
Dose files Sum dose files Analyse dose files
Statistics Dose histograms (X, Y, Z, XY, XZ, YZ, dose,
dose-volume) (= when writing dose)
Compare two dose files
GUI under development (MIRAS project)
Analysis of results
PDDPDDDatos exper.
- GAMOS
Position (mm)
Do
se
(n
orm
ali
zed
)
PDD of gamma accelerator
aa
Position (mm)
Do
se
(n
orm
ali
zed
)
PDD of gamma accelerator
Datos exper. - GAMOS
CIEMAT, July 2012 GAMOS 59
Radiotherapy visualisation
IMRT dose visualisation with CIEMAT’s tool (MIRAS)
CIEMAT, July 2012 GAMOS 60
Radiotherapy visualisation
gMocren visualisation of DICOM geometry and tracks
CIEMAT, July 2012 GAMOS 61
Radiotherapyoptimisation
CIEMAT, July 2012 GAMOS 62
Which is the highest cuts we can use without decreasing the number of particles reaching the phase space plane?
In GAMOS we use an ‘inverse reasoning’:
For each particle reaching the plane Get range of particle when it was created Get range of mother particle where it was created Do it consecutively for all ancestors
Make statistics of all these ranges, per particle, region and process
At EndOfRun print statistics of which is the minimum range per particle, region and process You know that if you use a bigger production cut at least one
particle would be killed and this particle or one of its children would not reach the phase space
Accelerator: Automatic optim. prod cuts
CIEMAT, July 2012 GAMOS 63
Often you allow some small % loss of particles.. Make histograms of all ranges per particle, region and proces Provide an script so that for a given cut it gives you the proportion of particles
killed
Be aware of double counting (very low: < 1%) Make histogram of minimum range
(one entry per particle + particle ancestors) and
use it for statistics of % particles killed
Check distributions of killed particles
How to use it in GAMOS: Add one user command in one job
/gamos/userAction GmProdCutsStudy RTPhaseSpaceFilter
Similar approach for user limits…
Accelerator: Automatic optim. prod cuts
log10(range) of gammas created at target that reach the patient or produce a secondary that reaches the patient
CUT
CIEMAT, July 2012 GAMOS 64
In GAMOS we use an ‘inverse reasoning’:
Compute dose due to particles that would be killed with a certain cut (and all their daughters)
When a particle is killed dose is deposited locally only count dose in voxels different that where particle is killed by cut
GAMOS can estimate in one job the dose with several different cut values
Use GAMOS filters
/gamos/filter ProdCutFilter GmProdCutOutsideVoxelFilter 10.*mm 1.*mm
/gamos/scoring/addFilter2Scorer ProdCutFilter PDDscorerPC10.1.
It may happen that dose is small but distributed in a different manner than total dose (produces bias)
Use GAMOS dose histograms
to check dose shape
Similar approach for user limits…
Dose: Automatic optim. prod cuts
Percent Depth Dose curve for all particles and particles rejected by cut 1mm/e- 10
mm/gamma
CIEMAT, July 2012 GAMOS 65
We have simulated a VARIAN accelerator– Plane at 100 cm from the source and of half-width 100 cm in X and Y.
We have computed the dose in a water phantom of 104 voxel
Select the maximum cut values that change the total dose << 1 %
A command serves to apply production cuts to other processes, not only ionisation & bremsstrahlung (not needed but useful) We gain an extra 3% in CPU time
RANGE REJECTION: Automatic procedure gives you also information on number of
particles that would be killed by range rejection Does not improve CPU significatively (few particles are killed by
it)
RESULTS: Optim. production cuts
CPU gain
Accelerator: 20% w.r..t cuts ‘standard’ in BEAMnrc/DOSXYZnrc (700 keV for e-/e+, 10 keV for gamma)
Dose: 0-30% w.r..t cuts ‘standard’ in BEAMnrc/DOSXYZnrc
CIEMAT, July 2012 GAMOS 66
Select EM physics parameters In Geant4 there is a long list of parameters that a user can change...(detailed explanation at http://fismed.ciemat.es/GAMOS/RToptim/ParameterHelp.html#EMparam)
Most are related to the fact that charged particle interactions are simulated in an approximative manner Simulating the interactions with each atom would be too long A ‘long’ step is simulated and the multiple scattering and energy loss is calculated
with approxmate equations Several parameters serve to tune the approximations: longer steps would mean
less CPU, but less precision
We have used the following method to optimise EM physics parameters: Start with default values which have been found good for radiotherapy
simulations They are quite conservative Except dE/dx and lambda tables bin size
Change values to less precision and watch CPU time Only consider those for which CPU gain is not negligible Try also higher precision to check
Watch for change in dose (look also at change in phase space)Detailed study can be found at http://fismed.ciemat.es/GAMOS/RToptim
CIEMAT, July 2012 GAMOS 67
Increase N bins in tables
Effect in phase space: - About 1 % less particles, uniformly distributed in E and space
Effect in dose: - 0.6 – 0.8 % decrease in dose, increasing with energy
CPU gain: -1 % default cuts 0% optimised cuts
CONCLUSIONS: we recommend using new values
PDD: new param/old param
/process/eLoss/binsDEDX 1200/process/eLoss/binsLambda 1200
CIEMAT, July 2012 GAMOS 68
Fewer e-/e+ steps:multiple scattering range factor = 0.05
Effect in phase space: - About 1.5 % more particles, uniformly distributed in E and space
Effect in dose: - 1.3 – 1.4 % increase in dose, quite uniformly
CPU gain: 29 % default cuts 12 % optimised cuts
CONCLUSIONS: acceptable, with caution(if change in dose is fully uniform it does
not matter)
PDD: new param/old param
/process/msc/RangeFactor 0.05
CIEMAT, July 2012 GAMOS 69
VARIAN 2100 gamma accelerator, 6 MeV:
106 events on Pentium Dual-Core 3 GHz
geant4.9.3.beta01
* No latest log-log interpolation speed improvements
BEAMnrcGAMOS
(standard)
GAMOS
(low energy)*
277 s 291 s 476 s
CPU time comparison with BEAMnrc
CIEMAT, July 2012 GAMOS 70
DOSXYZnrcGAMOS/GEANT4
(standard)
GAMOS/GEANT4
(low energy)
water 234 s 150 s 338 s
patient 300 s 179 s 324 s
Dose in phantom, phase space file as generator104 5x5x3 mm water phantom and 4.5 106 head & neck phantom 106 events on Pentium Dual-Core 3 GHz
geant4.9.3.beta01 (regular navigation, skipping voxel boundaries)
CPU time comparison with DOSZXYnrc
DOSXYZnrc:• 4 densities: 297 s• All densities: 300 s
GEANT4: (1 density = 1 material) • 4 materials: 179 s• 23 materials: 316 s• 68 materials: 394 s• 196 materials: 516 s
Dependency with number of materials
Need to implement density-changing materials in Geant4…
CIEMAT, July 2012 GAMOS 71
Particle splitting
UNIFORM BREMSSTRAHLUNG SPLITTING All bremmstrahlung photons are replicated the same number of times
Z-PLANE DIRECTION BREMSSTRAHLUNG SPLITTING User defines a Z plane with limits in X & Y (represents entrance of phantom) Same as uniform BS, but if gamma does not aim at Z plane, Russian roulette is played
EQUAL-WEIGHT SPLITTING Similar as Z-plane direction BS, but splits every gamma produced, not only from bremsstrahlung Russian roulette is played with e-/e+, so that very few reach Z plane Aim is that all particles that reach phantom have the same weight Based on EGSnrc DBS technique
CIEMAT, July 2012 GAMOS 72
Particle splitting: RESULTS
EM physics “standard”:
UNIFORM BREMSSTRAHLUNG SPLITTING
Maximum efficiency gain: 2.2 times
Z-PLANE DIRECTION BREMSSTRAHLUNG SPLITTING
Maximum efficiency gain: 6.5 times
EQUAL-WEIGHT SPLITTING
Maximum efficiency gain: 45 times
Algorithm in GAMOS is not fully implemented yet…, we hope to
reach a factor 100
Efficiency = σ2 /T
CIEMAT, July 2012 GAMOS 73
Installation Documentation
User support
CIEMAT, July 2012 GAMOS 74
Installation
GAMOS is freely available from CIEMAT web• User registers and downloads installation scripts
No need to manually download and install packages No need to define environmental variables Checks that your system has the needed components Downloads, installs and compiles CLHEP, Geant4, (optionally) ROOT and GAMOS in the selected directory GAMOS compiles = Geant4
Optionally an expert user can make several choices, Geant4-like Installation tested on Scientific Linux, Fedora Core, Debian and Ubuntu, and on MacOS
We provide a no-choice but very easy way: one-line installation
sh installGamos.sh $HOME/gamos
CIEMAT, July 2012 GAMOS 75
DocumentationUser’s Guide:
Installation All available functionality How to provide new functionality by creating a plug-in
Software reference manual (doxygen): Documentation of the classes and their dependencies
Examples: A simple one and a few more complicated ones
/gamos/setParam GmGeometryFromText:FileName mygeom.txt
/gamos/geometry GmGeometryFromText
/gamos/physics GmEMPhysics
/gamos/generator GmGenerator
/run/initialize
/gamos/generator/addSingleParticleSource my_source gamma 6.*MeV
/run/beamOn 1000
test.in:
and type: gamos test.in
CIEMAT, July 2012 GAMOS 76
Tutorials Five tutorials
Radiotherapy tutorial PET tutorial Histograms and scorers tutorial Shielding tutorial Plug-in tutorial
Propose about 15 exercises each Increasing in difficulty Reference output provided Solutions provided User can do them by her/himself
12 GAMOS tutorial courses have been given in Europe and America
CIEMAT, July 2012 GAMOS 77
Release and user supportReleases are checked in three different platforms
> 50 different tests are run
More than 700 registered users since
August ’09 (plus 100-150 more before) Not only in medical physics
GAMOS Discussion Forum Users ask questions, new requirements
GAMOS Bug Report System (based on Bugzilla) Users report bugs Automatically assigned to a GAMOS developer
Users mailing list Only announcements (new releases, new courses)
Developers mailing list Interchange of info between GAMOSdevelopers in different institutes
Geographical distribution of GAMOS users
Physics fields of interest of GAMOS users
CIEMAT, July 2012 GAMOS 78
Summary
GAMOS is a user-friendly and flexible framework many utilities allow to do full GEANT4 simulation through user commands plug-in’s allow to extend functionality by converting C++ classes into
user commands, by adding one or a few lines
You can do many things with GAMOS utilities, but you may easily replace any GAMOS component with a Geant4 or own one
Special effort to provide debugging and optimisation tools flexible and powerful framework to extract detailed information several tools to optimise CPU performance
GAMOS core is application independent PET, SPECT and radiotherapy fully functional Other applications being built: Neutron shielding, Compton camera (Laura
Harkness, Univ. Liverpool)
CIEMAT, July 2012 GAMOS 79
http://fismed.ciemat.es/GAMOSor Geant4 web (http://geant4.cern.ch) Applications Medical