 
	     =========================================================
                     Text version of the Hadrontherapy README file
             =========================================================

Last revision: F.Romano, 5 November 2015;
Released with the Geant4 10.2 version (December 2015)

------------------------------------------------------------------------------------------------
ADVERTISEMENT: this is the text version of the README file of the 'basic' hadrontherapy, 
as it has been released in the official Geant4 9.6 release

Visit the Hadrontherapy web site (https://twiki.cern.ch/twiki/bin/view/Geant4/AdvancedExamplesHadrontherapy) to request 
the complete version of this program, together with its documentation;
'hadrontherapy' (both basic and full version) is supported by the Italian INFN
Institute in the framework of the MC-INFN Group

-------------------------------------------------------------------------------------------------

             =========================================================
                                HADRONTHERAPY
             =========================================================
==========>    MAIN AUTHORS <==========

   G.A.P. Cirrone(a)*, F.Romano(a), G.Cuttone(a), L. Pandola(a), G.Milluzzo(a), J.Pipek(a)


==========>   PAST AUTHORS  <==========

R. Calcagno(a), G.Danielsen (b), F.Di Rosa(a), S.Guatelli(c), A.Heikkinen(b), P.Kaitaniemi(b),
A.Lechner(d), S.E.Mazzaglia(a),  M.G.Pia(e), G.Russo(a), M.Russo(a), A.Varisano(a), A. Tramontana (a,f)


(a) Laboratori Nazionali del Sud of the INFN, Catania, Italy
(b) Helsinki Institute of Physics, Helsinki, Finland
(c) University of Wollongong, Australia
(d) CERN, (CH)
(e) INFN Section of Genova, genova, Italy
(f) Physics and Astronomy Department, Universituy of Catania, Catania, Italy

  *Corresponding authors, email to: cirrone@lns.infn.it, francesco.romano@lns.infn.it
-------------------------------------------------------------------------------------------------
HADRONTHERAPY:
WHAT IT IS, WHAT IT DOES AND WHAT IT WILL PROVIDE
'hadrontherapy' is a Geant4-based application specifically developed to address typical needs related to the proton and ion therapy. 
Its first release was in 2004. At that time 'hadrontherapy' was only capable to simulate a well specified proton therapy facility: the passive transport beam line installed at Laboratori Nazionali del Sud (INFN) in Catania, Italy.

Today Hadrontontherapy, except that it is in continuous development, is more flexible and shows many additional capabilities with respect to the past.
Its geometrical set-up, for example, is now completely interchangeable permitting a simple switch between different geometrical configurations, which all share the same phantom (sensible detector) with the related features.
It is possible to do a simulation of a generic proton/ion transport beam line and laser-driven beam line. In this release, a module for dose average LET computations has been also included.
Deprecated ReadOutGeometry has been replaced by the use of Parallel World.

The configurations are:

	- Passive proton beam line, which is installed at the LNS-INFN facility in Catania for eye tumor treatment with protons at 62 MeV. It is simulated in PassiveProtonBeamLine.cc;

	- Passive carbon beam line, which is the simulation of the transport beam line at LNS-INFN of Catania for experiments with carbon ion beams. It is simulated in PassiveCarbonBeamLine.cc;

	- Laser-driven beam line, which is the simulation of a beam line for the focusing, the handling and the transport of a laser-driven beam, a Faraday Cup is the eligible detector for this class. It is simulated in LaserDrivenBeamLine.cc;
	
	in PassiveProtonBeamLine.cc, in PassiveCarbonBeamLine.cc and in LaserDrivenBeamLine.cc, the user can change the geometrical characteristics of beam line elements.
	Alternatively, the user can use the macro file.


Folder structure of 'hadrontherapy'


'hadrontherapy' distribution contain different sub-folders:

\src: where source .cc files are stored

\include: where header .hh files are stored

\macro: where a set of ready-to-use macro files are provided

\field: where a set of ready-to-use .TABLE files are provided. These files are generated from OPERA & COMSOL codes for the laser-driven beam line.

\experimentalData: in this directory, a set of reference (both experimental and analythical) data are stored. These data are then used to perform a direct comparison with simulation results that are stored in the simulationResults folder. Data stored are better described in the README file contained inside.

\SimulationOutputs: when one of the .mac file contained in the macro folder is used, simulation results are directly stored in this directory.

\RootScripts: if the ROOT program is installed the User can use scripts contained in this directory to compare directly results from the his/her simulation with reference data provided inside the experimentalData folder.

Currently this folders structure is in development and reference data as well as ROOT scripts alongside the newly implemented features. Moreover some ROOT script can be missed. We apologize for this; please contact the authors if you need more information, clarification or useful discussion. 

Description of the \macro folder

Inside the "macro" folder, different macro files are provided. In particular, three macro files are related to the different beam lines: hadron_therapy.mac, carbon_beamline.mac and laserDrivenBeamline.mac.
The hadron_therapy.mac permits to run a simulation with the whole proton passive beam line installed in Catania.
The carbon_beamline.mac excludes all the elements (moving the origin of the ion beam close to the water phantom) and reproduce a simple passive beam line for the use with carbon ion beams.
The laserDrivenBeamline.mac simulates a typical laser-driven proton spectrum as input for a beam line made of a quadrupole system and an energy selector. 

DOWNLOAD AND INSTALLATION

'hadrontherapy' source code is actually released inside the official distribution of the Geant4 toolkit in the $G4INSTALL/examples/advanced folder.

To run 'hadrontherapy' you must first install the Geant4 package. Once Geant4 is installed, the example must be first compiled. When compilation is completed the program can be executed.

A complete guide for the Geant4 installation in different operating systems can be found inside the official installation Geant4 pages.

If you have troubles with the Geant4 installation please send an e-mail to us.

A CMakeLists.txt file (preferred) is provided together with a standard GNUmakefile for compilation.                                                         


GEOMETRICAL SET-UP

The idea of 'hadrontherapy' is to provide a tool useful for Users interested in the field of proton and ion therapy. These can include the simple calculation of dose distribution curves in water or other materials, the derivation of important transport parameters (stopping powers, ranges, etc.) in different geometrical set-ups and for different materials, up to the complete simulation of a real transport beam line for therapy.

The main component of the simulation is the phantom, a box that can be filled with different material and where the score of different information (at moment  the dose deposited in voxels) can be performed. A more complete description of the phantom is given in the next subsection.

At the moment the 'hadrontherapy' example includes the simulation of passive beam lines.
In the next future an ActiveProtonBeamLine.cc will be provided for the simulation of the active scanning treatment modality.
Moreover the possibility to add a very simple set-up (a beam, a phantom where collect the informations and some simple component) will be also provided.

All these configuration will be set using macro commands.

There is also a feature that allows the user to make a choice between alternative geometry set-ups. This can be done by using command:
/geometrySetup/selectGeometry <name>
where <name> is either "default" for the standard 'hadrontherapy' geometry or "Carbon" for INFN-LNS transport beam line, 
normally used for interdisciplinary researches at LNS-INFN in Catania with carbon and other ion beams or "LaserDriven" for the laser-driven beam line.

At the end of the beam line a phantom (a box of uniform material) is reproduced. Inside it, a user-defined region is divided 
in cubic and identical voxels. The voxels size can be varied as well as the voxelized region.
At the end of a simulation run, the dose deposited by primaries and secondaries in each voxel is collected. This information is available as an .out file or as a .root (if activated). 

The default size of the active voxelized region is 40x40x40 mm and actually the default voxel configuration is 200 x 1 x 1, which means 200 slices with 0.2 mm of thickness.
Of course this default can be modified in order to obtain, for example, a matrix of 80x80x80 cubic voxels each with a lateral dimension of 0.5 mm.

Concerning the cut and stepMax values, the default configuration implies a cut value of 1 mm in the whole  world (use the command /run/setCut <length>  in order to set the cut for all, and the command /run/setCutForRegion <name> <length> to set the cut for the desired volume (<name>) only)  and a stepMax of 0.01 mm just in the phantom and in other volumes of the laser-driven beam line (use the command /Step/waterPhantomStepMax 0.01 mm).
In any case it is strongly recommended to use a stepMax value not bigger than 5% of the dose slice thickness.

THE PROTON PASSIVE LINE CLASS FILE

The following is the description of the elements of the passive proton beam line of the Laboratori Nazionali del Sud in Catania (I). This line is completely simulated inside this class.

The main elements are:

    * The SCATTERING SYSTEM: to transversally enlarge the original beam
    * The COLLIMATORS: placed along the beam line to collimate the beam;
    * The RANGE SHIFTERS: to decrease the energy of the primary proton beam to a specific value;
    * The MODULATOR WHEEL: to modulate the energy of the primary and mono-energetic beam in to a wide spectrum. The energy modulation is necessary to homogeneously irradiate a tumour volume that can extends in depth up to 20 mm;
    * The MONITOR CHAMBERS: very thin ionisation chamber that permit the dose monitoring during the patient irradiation;
    * The MOPI detector: microstrips, air free detector utilised for the check of the beam symmetry during the treatment;
    * The PATIENT COLLIMATOR: a brass, tumour-shaped collimator able to  confine the proton irradiation field in order to irradiate just the tumour mass in the transverse direction;

The user has the possibility to vary, via messenger, almost all the geometrical characteristics of the beam line elements (i.e. their position along the beam line, their thickness, etc.).

The elements simulated in the PassiveBeamLine.cc file are:

1. A scattering system, to spread geometrically the beam;

2. A system of collimators, to avoid the scattering radiation;

3. A modulation system that spreads the beam in energy and produces the so-called spread out Bragg peak; It is constituted by a rotating wheel of different thicknesses. The wheel rotates around its axis (parallel to the proton beam axis) and its movement can be obtained by means of a messenger between runs.

4. A set of monitor chambers (special transmission ionization chambers used to control the particle flux during the irradiation);

5. A final long collimator and a patient collimator defining the final shape of the beam before reaching the patient.

6. A water phantom: it is a box of water where the dose deposit is calculated. The use of  the water phantom is required by the international protocol on the measure of dose in the case of proton and ion beams (IAEA 398, 2000).         

PHYSICS PROCESSES AND PHYSICS MODELS IMPLEMENTATION

 Physics models in 'hadrontherapy', following the Geant4 organization, can be definied using four different approaches:

A particular care is addressed to the simulation of the physic processes.
Three different approaches can be used for the choose of the physic models.

Approach 1:
Using the macro command:
/physic/addPhysics/<physics List name>.

In this case the models (for electromagnetic, hadronic elastic and hadronic inelastic) can be
activated directly calling the name of the Physics Lists that are available inside the
Geant4 kernel in the directory:

$G4INSTALL/source/physics_lists/builders/include

An example of the use of the Physics List can be found in the macro files:
hadron_therapy.mac and carbon_beamline.mac

Approach 2:
A set of built-in physic models are also contained inside the 'hadrontherapy' directory. These
are called Local*.cc and Local*.hh and can be activated using the macro command:
/physic/addPhysics/<name>.

NOTE: we do not recommend the use of local physics lists while we recommend the use of the Physics Lists or of the Reference Physics Lists (Approach 1 or 3)

Approach 3:
We developed this approach in order to simplify the choice of the physic models to
be used in the application.
With this approach the user must only insert a command line in his/her .mac file using the: /physics/addPackage <PACKAGE_NAME>
This permits to switch-on an already build physic package.
Various packages are already present in the Geant4 tree: they are in the directory: geant4/source/physics_lists/lists/include

Approach 4:
Directly call a reference physics list by setting the variable PHYSLIST. Ex.:
 export PHYSLIST=QGSP_BIC_EMY 
and the export QGSP_BIC_EMY refernce physics list will be setted


INTERACTIVE COMMANDS
How to change Phantom and Detector geometries

In order to let the user to change phantom and detector geometries and voxelization, some interactive commands have been provided. All parameters are mandatory, except those inside square brackets.

Detector geometry 

The user can change:

(1) The detector (box) size.
 
(2) The voxels sizes. Changing this parameters, and/or the detector sizes, user should choose values in order to be divisors of the detector correspondent sizes.
For both above commands, zero or negative values mean << don't change it >>

(3) The displacement between the phantom and the detector.  Displacement parameters refer to the lower left corner of the detector respect to that of the phantom, by the point of view of the beam. In this case zero or positive values are allowed, while the negatives ones mean: << don't change it>>.

Command synopsis: 

/changeDetector/size <dimX> <dimY> <dimZ> <[unit]> 
/changeDetector/voxelSize <dimX> <dimY> <dimZ> <[unit]> 
/changeDetector/displacement <dispX> <dispY> <dispZ> <[unit]> 

Default size values are 4x4x4 cm for the detector, 0.2x40x40 mm for any voxel and 0x18x18 cm
for the displacement.    
where the X dimension is that along the beam direction

Phantom geometry

(1) The phantom size. As usually, zero or negatives values mean: <<don't change it>>.
(2) The phantom position respect to the world. In this case specified values refer to the three components of the position of the phantom's center respect to the world's.

Command synopsis:

/changePhantom/size <dimX> <dimY> <dimZ> <[unit]> # 40 40 40 cm
/changePhantom/position <posX> <posY> <posZ> <[unit]> # 20 0 0 cm

All   these    commands    must be   followed   by the  command  /changePhantom/update
in order to check and eventually apply changes to the real geometry.
Moreover  they  must   be    issued  between   runs  (so   where you   want but   after  the /run/initialize initialization command, or the G4State_Idle Geant4 state machine).
Obviously all the previous sizes must be set in order to maintain the detector fully inside the phantom, otherwise system complains.

 Some examples follow:

/changeDetector/size 40 0 0 cm 
# Will extend detector X size to cover in full the phantom X size   

/changeDetector/size 0 4.5 0 cm
# Will extend the Y size to 4.5 cm (note that voxel size Y is automatically
#  rounded to 4.5 cm because the default value along Y is 4 cm)
/changePhantom/update
# Remember to always update the geometry before the beamOn command!!

/changeDetector/size 0 8 0 cm
# Will extend the Y size to 8 cm. In this case voxel size Y doesn't change, but 
# the number of voxel along Y doubles.
/changePhantom/update

/changeDetector/voxelSize 100 0 0 um 
# 100 um should be a divisor of detector size X
# Will change only slabs X size to 100 um, without affecting the other.
/changePhantom/update

/changeDetector/displacement 0 0 0 # default unit mm
# Will place the detector in the left lower corner (from the point of view of the beam) of #the  phantom.
/changePhantom/update

Stopping powers calculation

It is possible for the end-user to calculate, via macro command, stopping powers only for those materials inserted into G4NistMaterialBuilder class (about 300).
To get stopping powers user must provide this command line on the idle interactive terminal (or into a macro file) :

/parameter/getstopping <G4_material> <Emin> <Emax> <nPoints> <[particle]> <[output_filename]>

All parameters are mandatory except those inside square brackets [].
Default values for parameters inside square brackets are respectively proton and standard output (usually the user console terminal).

Parameters are respectively:

The material (NIST) name (something like G4_..., the complete list of elements and materials is available into the G4NistMaterialBuilder class and can be printed  to the terminal screen via the macro command: /parameter/nist )
Kinetic energy range in MeV and the number of data points to be retrieved (in a logarithmically uniform space)
The particle name (proton, e+, e-, He3, neutron,... a full list can be gotten via the macro command: /particle/list).
Currently, it does not work with ions.
The output filename: if users leave this blank then the standard output is used.

Below is an example in order to calculate the stopping power for alphas into Hydrogen between 1 keV to 150 MeV for 15 points:

/parameter/getstopping G4_H 0.001 150 15 alpha 


GEANT4 GENERAL PARTICLE SOURCE

The General Particle Source (GPS, G4 class name: G4GeneralParticleSource) is in the current version of 'hadrontherapy': it enables the user to use standard energy, angular and spatial distributions. The GPS includes also methods to bias the sampling distribution.

The G4GeneralParticleSource can be utilized by typing commands from the /gps command directory, or include the /gps commands in a g4macro file.


LET calculation

'hadrontherapy' application simulates and calculates the averaged dose LET.
At run time, data needed to calculate LET are collected. At the end of simulation, LET mean values are calculated and stored into a file.

The Let.out file will be produced at the end of a run, where you can
find the dose average LET for each tracked particles (both primary and
secondary ones) and the total mean LET. 
The file is structured as follows:
	- The first three columns contains the voxel indexes (first index "i" refers to the beam direction);
	- The fourth and fifth columns contain respectively total mean dose LET and primary mean dose LET;
	- The rest of columns contain LET Dose for each single ion (whose name is in the top row of the file).

To activate the LET computation (HadrontherapyLet.cc), you have to execute
the following command:

/analysis/computeLet



SIMULATION OUTPUT

Store results in an ASCII file

A .out ASCII file is generated at the end of each run, Dose.out is its default name that can be changed in the HadrontherapyMatrix.cc file.
The file contains four columns; the first three columns represent the voxel indexes (that univocally identify the voxel volume), while the last column represents the dose deposited in that given voxel.
Alternatively, user can force store of data to a given filename, after any BeamOn command and before the program end, by the macro command /analysis/writeDoseFile <myfile.out>.

Moreover, if the macro command /analysis/secondary <true> is given, before the BeamOn command, ordinated dose and fluence, for every secondary produced, is added to the file.
If the macro command /analysis/computeLet is given, an the ascii file Let.out is written, with the dose average LET computations.

User must take care that any change of the phantom geometry will clear all dose data.

Setting the name of the ROOT output file

By default the name of the ROOT output file is DoseDistribution.root. The name of the file can be set by using the macro command: analysis/setAnalysisFile <filename>

It is also possible to create multiple new output files in the same simulation session. For example:

/beam/energy/meanEnergy 4800 MeV
/analysis/setAnalysisFile firstRun.root
/run/beamOn 1000
/analysis/writeDoseFile firstRun.out # this will write both the .root and the .out file!

/beam/energy/meanEnergy 3000 MeV
/analysis/setAnalysisFile secondRun.root # this
/run/beamOn 1000
/analysis/writeDoseFile secondRun.out

Use of the ROOT analysis

It is possible to use ROOT data analysis package directly for the production of output files.
In the last version, anyway, this functionality must be implemented by User. This can be accomplished by setting an ad-hoc environment variable (i.e. G4ANALYSIS_USE_ROOT) to 1, adding in the code lines to create outputs with the ROOT libraries and recompiling the application.
In this case you must have the ROOT framework installed in your machine.

Warning: If you plan to use ROOT analysis, please avoid compiling in the multi-threaded mode as the the ROOT library is not thread-safe.
In the next release, we plan to base the whole analysis on g4tools which will solve this issue an MT will be safe to use.

LASER DRIVEN PROTON BEAMLINE

Nowadays a big effort is being devoted for optically accelerated charged particles. There are several ion acceleration regimes that are being discussed in literature, but up to now the most experimentally investigated is the Target Normal Sheath Acceleration (TNSA) one.
The beam transport and focusing as well as the energy selection of these laser produced beams represents one of the critical points in order to make such kind of beams suitable for clinical applications. In fact, in contrast to conventional accelerators, the beams produced by high intensity laser-matter interaction are typically characterized by a wide angular divergence (for example ± 25 degrees) and a 100 % energy spread. 
Moreover due to the high current, conventional dosimetric system cannot be used during the experimental sections (saturation issues) and for this reason the faraday cup detector has been proposed as the elegible absolute dosimetric device. 

The following is the description of the elements of the laser-driven beam line. This line is completely simulated inside this class.

The main elements are:

    * The QUADRUPOLES SYSTEM: made of four quadrupoles, to focus/defocus protons with different energy;   
    * The COLLIMATORS: placed along the beam line to collimate the beam;
    * The ENERGY SELECTOR SYSTEM: made of four dipoles, that provide the spatial separation of charged particles with different energies;
    * The FARADAY CUP: that provide the charge measurement and the distribution of the secondary electrons;
   
The user has the possibility to vary, via messenger, many characteristics of the beam line elements (i.e. their position along the beam line, their thickness, etc.).

 - /LaserDriven/EnergySelector/Disable -> to disable the Energy Selector 

 - /LaserDriven/EnergySelector/FirstCollimator/Radius <value> -> to set the Radius of the first collimator
 - /LaserDriven/EnergySelector/FirstCollimator/thickness <value> -> to set the Thickness of the first collimator
 - /LaserDriven/EnergySelector/FirstCollimator/zPosizion <value> -> to set the position of the first collimator hole along the radial plane

 - /LaserDriven/EnergySelector/SecondCollimator/Radius <value> -> to set the Radius of the second collimator
 - /LaserDriven/EnergySelector/SecondCollimator/thickness <value> -> to set the Thickness of the second collimator
 - /LaserDriven/EnergySelector/SecondCollimator/zPosizion <value> -> to set the position of the second collimator hole along the radial plane

 - /LaserDriven/EnergySelector/Slit/thickness <value> -> to set the Thickness of the slit, maximum value 10mm for geometric constrain
 - /LaserDriven/EnergySelector/Slit/HoleDimensionY <value> -> to set the Y dimension of the Slit Hole
 - /LaserDriven/EnergySelector/Slit/HoleDimensionZ <value> -> to set the Z dimension of the Slit Hole
 - /LaserDriven/EnergySelector/Slit/HolePositionZ <value> -> to set the Slit hole position in the Z direction as respect the Slit body center

 - /LaserDriven/Quadrupoles/DisableQuad -> to disable the Quadrupole system


FUTURE CHALLENGES AND USERS' REQUESTS

This is a list of future components and feature that will be added in 'hadrontherapy' and of main Users requests that we hope to fulfill in the next future.

- A module for the RBE (Relative Biological Effectiveness) calculation will be also delivered. The Catania Group in Collaboration with the Turin one is working on this. This module is already implemented (in a preliminary version) in an internal version of 'hadrontherapy' and can be provided, if requested. Please, contact us.

- A g4tools-compatible ROOT output from HadrontherapyAnalysisManager.

Please contact cirrone@lns.infn.it or francesco.romano@lns.infn.it for more details or suggestions and feedbacks on this document.
