Import Geant4 8.0.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-09 14:36:02 +02:00
parent d93e1e39a9
commit 8a51e0bc40
5471 changed files with 99628 additions and 55248 deletions
@@ -78,12 +78,14 @@ int main(int argc ,char ** argv)
matrix -> Initialize();
// Optional UserActions: run, event, stepping
runManager -> SetUserAction(new HadrontherapyRunAction());
HadrontherapyRunAction* pRunAction = new HadrontherapyRunAction();
runManager -> SetUserAction(pRunAction);
HadrontherapyEventAction* pEventAction = new HadrontherapyEventAction(matrix);
runManager -> SetUserAction(pEventAction);
HadrontherapySteppingAction* steppingAction = new HadrontherapySteppingAction();
HadrontherapySteppingAction* steppingAction = new HadrontherapySteppingAction(pRunAction);
runManager -> SetUserAction(steppingAction);
+13
View File
@@ -8,7 +8,20 @@ $Id: History, v 1.6 2004/02/27 G.A.P. Cirrone
Category History file
---------------------
06.12.2005 S. Guatelli (hadrontherapy-V07-01-05)
- Particles updated
- Updated macros
23.11.2005 S. Guatelli (hadrontherapy-V07-01-04)
- File ASCII as output file deleted
02.09.2005 S. Guatelli (hadrontherapy-V07-01-03)
- Added Hadronic physics models
08.07.2005 S. Guatelli (hadrontherapy-V07-01-02)
- Added alternative stopping power parameterisations for protons:
ICRU49, Ziegler 1977, Ziegler 1985, Ziegler (SRIM) 2000
30.05.2005 G.A.P. Cirrone and S.Guatelli (hadrontherapy-V07-00-06)
- Removed warnings;
- Analisys with AIDA 3.2.1 and PI 1.3.3;
+6 -1
View File
@@ -171,8 +171,13 @@ to visualise the experimental set-up with OpenGL
Both electromagnetic and hadronic physic processes are activated for the particles of the
experimental set-up.
Different physics models can be choosen. Examples of activation are provided in the macro files.
Different physics models can b activated by the user.
Examples of activation are provided in the macro files.
- protonEMLowEnergy.mac: example to activate e.m. low energy physics with different
stopping power models for protons
- protonEMStandard.mac: example to activate the e.m. standard physics.
---->6. SIMULATION OUTPUT
The output is an .hbk file (hadrontherapy.hbk) produced
@@ -0,0 +1,44 @@
#----------------------------------------------------------------------------
# PHYSICS LIST:
#
# - LOW ENERGY ELECTROMAGNETIC PHYSICS
# - ELASTIC SCATTERING FOR ALL THE HADRONS AND IONS
# - INELASTIC SCATTERING --->
#
# * BINARY CASCADE MODEL WITH THE DEFAULT PRECOMPOUND
#
# * LEP MODEL UP TO 100 MEV AND BINARY ION MODEL BETWEEN 80 MEV AND 40. GEV
# FOR DEUTERON, TRITON, HE3, ALPHA
#
# * FISSION AND HADRON CAPTURE FOR NEUTRONS BETWEEN 0. MEV AND 100. TEV
#
#
#-------------------------------------------------------------------------------
/control/verbose 1
/tracking/verbose 0
/run/verbose 0
/event/verbose 0
# SETTING FOR THE PHYSICS MODELS
/physics/addPhysics photon-epdl
/physics/addPhysics electron-eedl
/physics/addPhysics positron-standard
/physics/addPhysics ion-LowE
/physics/addPhysics proton-precompound-binary
/physics/addPhysics muon-standard
/physics/addPhysics decay
/run/initialize
# IF YOU WANT A RANGE SHIFTER PLEASE CHANGE
# THE FOLLOWIG PARAMETERS
# SETTING FOR THE RANGE SHIFTER
#/beamLine/RangeShifter/thickness 0 cm
#/beamLine/RangeShifter/RSMat Water
#/tracking/verbose 1
/beam/energy/meanEnergy 25 MeV
/run/beamOn 1
@@ -1,4 +1,203 @@
9876
0.022197961807250977 0.016610622406005859 0.63905793428421021 0.38329732418060303 0.69831031560897827 0.22324162721633911 0.49120819568634033 0.60197216272354126 0.81416624784469604 0.32677179574966431 0.098583340644836426 0.027431786060333252 0.78864419460296631 0.81896883249282837 0.63959956169128418 0.74596965312957764 0.72737228870391846 0.69191849231719971 0.71355444192886353 0.011820733547210693 0.48150527477264404 0.86828917264938354 0.13170522451400757 0.45347738265991211 0.10865515470504761 0.10651481151580811 0.45717793703079224 0.63406658172607422 0.64252442121505737 0.42432534694671631 0.33520448207855225 0.59798842668533325 0.13778442144393921 0.38899260759353638 0.046378612518310547 0.60150426626205444 0.12657880783081055 0.97955703735351562 0.86861729621887207 0.29879438877105713 0.801707923412323 0.21883964538574219 0.93461489677429199 0.38524562120437622 0.91090399026870728 0.023142635822296143 0.85154539346694946 0.797477126121521 0.62973660230636597 0.90060049295425415 0.34966093301773071 0.54539859294891357 0.35251176357269287 0.50419789552688599 0.52757632732391357 0.66159796714782715 0.07945704460144043 0.45850509405136108 0.97826814651489258 0.38729369640350342 0.854575514793396 0.33248835802078247 0.36078131198883057 0.34407216310501099 0.72383487224578857 0.066727101802825928 0.34445035457611084 0.14453405141830444 0.80607026815414429 0.12019360065460205 0.19166386127471924 0.47038376331329346 0.94368588924407959 0.4264257550239563 0.83205050230026245 0.4965476393699646 0.93099534511566162 0.60683536529541016 0.07124173641204834 0.9093090295791626 0.84654337167739868 0.037280023097991943 0.301094651222229 0.64763987064361572 0.37247037887573242 0.44355738162994385 0.78914976119995117 0.56561046838760376 0.13274383544921875 0.88719719648361206 0.9813460111618042 0.662750244140625 0.64443302154541016 0.43179923295974731 0.055142760276794434 0.57620424032211304 0.33779478073120117
0.057104766368865967 0.45623308420181274 0.99999982118606567
8
Uvec
2226355706
1072115569
3758096384
1071765497
3758096384
1071561920
0
1071378494
0
1072531342
536870912
1069160740
0
1071271479
2147483648
1071355253
3221225472
1072349654
1073741824
1072509208
1610612736
1070424910
0
1072408973
2147483648
1072182556
0
1071671839
2147483648
1072331504
3758096384
1071247558
2147483648
1072557952
2684354560
1072152882
2684354560
1069314698
0
1072195263
2684354560
1070792009
0
1072415623
0
1072152149
1610612736
1072263925
3758096384
1070316254
0
1071934152
3221225472
1070002327
2147483648
1072038979
1073741824
1070605033
2147483648
1072478668
3221225472
1071750709
1610612736
1072541747
536870912
1070750442
0
1072487562
2684354560
1070868811
2147483648
1072231321
0
1071073941
3221225472
1070955127
3221225472
1070949241
0
1072367088
2147483648
1071486718
2147483648
1071991670
0
1071661683
1610612736
1071842161
1073741824
1072112487
3758096384
1072554974
2684354560
1070943608
3221225472
1071520302
3221225472
1071795870
3758096384
1070904906
0
1071781467
536870912
1072012481
1073741824
1068696599
0
1072119373
1073741824
1071420027
3221225472
1071958369
2147483648
1071759517
3758096384
1067126688
0
1071114732
1073741824
1071451638
1073741824
1070991805
0
1072558275
3758096384
1072243203
3221225472
1070954700
2147483648
1069865957
0
1069702884
2147483648
1072685743
3758096384
1070778925
3221225472
1067896494
0
1071845102
2684354560
1071802098
536870912
1072608899
2684354560
1071134426
0
1071749911
1073741824
1069631981
0
1068826326
0
1069387543
0
1071293962
2147483648
1072047251
3221225472
1071382659
0
1070457283
2147483648
1072123405
2147483648
1071573692
1073741824
1068061764
0
1070987987
2147483648
1069694025
2147483648
1071866860
536870912
1070762377
1073741824
1070686380
3221225472
1072094560
1610612736
1071702537
3758096384
1069149654
0
1069577464
0
1069991493
0
1068153634
0
1072511907
1610612736
1071928197
3221225472
1072414646
536870912
1071461100
1073741824
1072693247
2684354560
33
+203 -4
View File
@@ -1,4 +1,203 @@
9876
0.17468523979187012 0.88367420434951782 0.95851153135299683 0.69001305103302002 0.025053739547729492 0.14229369163513184 0.78364866971969604 0.35608100891113281 0.21477425098419189 0.69286954402923584 0.7003016471862793 0.46510893106460571 0.22214984893798828 0.76875209808349609 0.46108907461166382 0.3976019024848938 0.52221494913101196 0.12154585123062134 0.96022659540176392 0.51089173555374146 0.011656761169433594 0.028644740581512451 0.2387765645980835 0.58521908521652222 0.78061223030090332 0.70918172597885132 0.08210599422454834 0.82860100269317627 0.61446040868759155 0.079820930957794189 0.68800175189971924 0.0097852945327758789 0.37083089351654053 0.37643462419509888 0.71018439531326294 0.86401665210723877 0.16733801364898682 0.2111402153968811 0.34923505783081055 0.52247923612594604 0.94371330738067627 0.070270776748657227 0.77874177694320679 0.63945811986923218 0.50655472278594971 0.15175133943557739 0.99012273550033569 0.56468778848648071 0.43049722909927368 0.93571525812149048 0.83971720933914185 0.52695095539093018 0.43880587816238403 0.45784467458724976 0.37172782421112061 0.54798120260238647 0.9042285680770874 0.85384637117385864 0.8782920241355896 0.28166240453720093 0.87537771463394165 0.076646625995635986 0.64350682497024536 0.80434280633926392 0.020689785480499268 0.15435659885406494 0.33504408597946167 0.54748374223709106 0.77217626571655273 0.016081452369689941 0.24611234664916992 0.24613380432128906 0.40188264846801758 0.30276846885681152 0.034525096416473389 0.47831588983535767 0.90785670280456543 0.50831210613250732 0.84525531530380249 0.57573461532592773 0.66171067953109741 0.4259905219078064 0.95411700010299683 0.15568071603775024 0.19841688871383667 0.2717059850692749 0.59724390506744385 0.68230563402175903 0.46793639659881592 0.82415002584457397 0.093294143676757812 0.47092801332473755 0.92384713888168335 0.47565126419067383 0.59589225053787231 0.47546869516372681 0.85144168138504028
0.12241089344024658 0.45623308420181274 0.99999982118606567
81
Uvec
2226355706
1069964310
0
1072449295
536870912
1072606240
1610612736
1072043158
1073741824
1067034544
0
1069692590
0
1072239526
1610612736
1071041032
0
1070300601
0
1072049148
3221225472
1072064735
0
1071498328
1073741824
1070362472
0
1072208286
0
1071481467
3221225472
1071215183
1073741824
1071691260
536870912
1069489569
0
1072609837
536870912
1071667513
2684354560
1065869184
0
1067275532
0
1070501947
0
1071823389
1610612736
1072233158
2147483648
1072338598
0
1072274747
3758096384
1072595150
536870912
1071723973
1073741824
1071377554
0
1072449263
536870912
1072670379
2684354560
1070314862
0
1067790628
0
1069863776
0
1068991194
0
1069767776
0
1072619906
536870912
1069180120
0
1069473643
0
1071940254
3221225472
1067601218
0
1070807597
2147483648
1072130375
1610612736
1072689562
2147483648
1070833057
2147483648
1071285589
3221225472
1072489776
1073741824
1064465824
0
1072558433
536870912
1072357110
2684354560
1071701192
1073741824
1071388005
1073741824
1071467859
3221225472
1071106659
2147483648
1071745295
3758096384
1072492400
3221225472
1072386741
2684354560
1072438007
3758096384
1070728897
3221225472
1072431896
536870912
1068736285
0
1071945627
2684354560
1072282925
536870912
1066741684
0
1069793781
0
1070952796
3221225472
1071744252
2684354560
1072215467
0
1066432424
0
1070563484
0
1070563664
0
1071233138
0
1070817423
0
1067560262
0
1071553722
1073741824
1072500009
2147483648
1071662103
3221225472
1072368724
3758096384
1071803499
0
1071983803
3758096384
1071334253
3221225472
1072597024
1610612736
1069804888
2147483648
1070163385
2147483648
1070687137
2147483648
1071848607
1073741824
1072026994
2684354560
1071510187
2147483648
1072324463
3758096384
1069015584
0
1071522735
1073741824
1072533543
3758096384
1071542546
0
1071845772
2684354560
1071541780
1073741824
1072381698
2684354560
1069948620
2147483648
1071461100
1073741824
1072693247
2684354560
57
@@ -35,8 +35,8 @@
/physics/addPhysics ion-LowE
/physics/addPhysics muon-standard
/physics/addPhysics decay
/physics/addPhysics proton-precompound
#/physics/addPhysics proton-precompound
/physics/addPhysics proton-precompoundGEM
/run/initialize
# IF YOU WANT A RANGE SHIFTER PLEASE CHANGE
@@ -44,7 +44,18 @@
# SETTING FOR THE RANGE SHIFTER
#/beamLine/RangeShifter/thickness 4 cm
#/beamLine/RangeShifter/RSMat Water
#/vis/viewer/flush
/beam/energy/meanEnergy 63.5
/run/beamOn 300
# SET OF THE VISUALISATION CHARACTERISTICS
/vis/scene/create
/vis/open OGLIX
/vis/viewer/flush
/vis/viewer/flush
/beam/energy/meanEnergy 63.5 MeV
#/run/beamOn 2000
@@ -67,7 +67,48 @@ public:
void BraggPeak(G4int, G4double);
// Fill 1D histogram with the Bragg peak in the phantom
void SecondaryProtonEnergyDeposit(G4int slice, G4double energy);
// Fill 1D histogram with the energy deposit of secondary protons
void SecondaryNeutronEnergyDeposit(G4int slice, G4double energy);
// Fill 1D histogram with the energy deposit of secondary neutrons
void SecondaryAlphaEnergyDeposit(G4int slice, G4double energy);
// Fill 1D histogram with the energy deposit of secondary alpha particles
void SecondaryGammaEnergyDeposit(G4int slice, G4double energy);
// Fill 1D histogram with the energy deposit of secondary gamma
void SecondaryElectronEnergyDeposit(G4int slice, G4double energy);
// Fill 1D histogram with the energy deposit of secondary electrons
void SecondaryTritonEnergyDeposit(G4int slice, G4double energy);
// Fill 1D histogram with the energy deposit of secondary tritons
void SecondaryDeuteronEnergyDeposit(G4int slice, G4double energy);
// Fill 1D histogram with the energy deposit of secondary deuterons
void SecondaryPionEnergyDeposit(G4int slice, G4double energy);
// Fill 1D histogram with the energy deposit of secondary pions
void electronEnergyDistribution(G4double secondaryParticleKineticEnergy);
// Energy distribution of secondary electrons originated in the phantom
void gammaEnergyDistribution(G4double secondaryParticleKineticEnergy);
// Energy distribution of secondary gamma originated in the phantom
void deuteronEnergyDistribution(G4double secondaryParticleKineticEnergy);
// Energy distribution of secondary deuterons originated in the phantom
void tritonEnergyDistribution(G4double secondaryParticleKineticEnergy);
// Energy distribution of secondary tritons originated in the phantom
void alphaEnergyDistribution(G4double secondaryParticleKineticEnergy);
// Energy distribution of secondary alpha originated in the phantom
void genericIonInformation(G4int, G4double, G4int, G4double);
void finish();
// Close the .hbk file with the histograms and the ntuples
@@ -78,7 +119,21 @@ private:
AIDA::IHistogramFactory *histFact;
AIDA::ITupleFactory *tupFact;
AIDA::IHistogram1D *h1;
AIDA::IHistogram1D *h2;
AIDA::IHistogram1D *h3;
AIDA::IHistogram1D *h4;
AIDA::IHistogram1D *h5;
AIDA::IHistogram1D *h6;
AIDA::IHistogram1D *h7;
AIDA::IHistogram1D *h8;
AIDA::IHistogram1D *h9;
AIDA::IHistogram1D *h10;
AIDA::IHistogram1D *h11;
AIDA::IHistogram1D *h12;
AIDA::IHistogram1D *h13;
AIDA::IHistogram1D *h14;
AIDA::ITuple *ntuple;
AIDA::ITuple *ionTuple;
};
#endif
#endif
@@ -0,0 +1,56 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// $Id: HadrontherapyIonLowEZiegler1985.hh; May 2005
// ----------------------------------------------------------------------------
// GEANT 4 - Hadrontherapy example
// ----------------------------------------------------------------------------
// Code developed by:
//
// G.A.P. Cirrone(a)*, G. Candiano, F. Di Rosa(a), S. Guatelli(b), G. Russo(a)
//
// (a) Laboratori Nazionali del Sud
// of the National Institute for Nuclear Physics, Catania, Italy
// (b) National Institute for Nuclear Physics Section of Genova, genova, Italy
//
// * cirrone@lns.infn.it
// --------------------------------------------------------------
#ifndef HADRONTHERAPYIONLOWEZIEGLER1977_HH
#define HADRONTHERAPYIONLOWEZIEGLER1977_HH 1
#include "G4VPhysicsConstructor.hh"
#include "globals.hh"
class HadrontherapyIonLowEZiegler1977: public G4VPhysicsConstructor {
public:
HadrontherapyIonLowEZiegler1977(const G4String& name = "ion-LowE-ziegler1977");
virtual ~HadrontherapyIonLowEZiegler1977();
// This method is dummy for physics
virtual void ConstructParticle() {};
virtual void ConstructProcess();
};
#endif
@@ -0,0 +1,56 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// $Id: HadrontherapyIonLowEZiegler1985.hh; May 2005
// ----------------------------------------------------------------------------
// GEANT 4 - Hadrontherapy example
// ----------------------------------------------------------------------------
// Code developed by:
//
// G.A.P. Cirrone(a)*, G. Candiano, F. Di Rosa(a), S. Guatelli(b), G. Russo(a)
//
// (a) Laboratori Nazionali del Sud
// of the National Institute for Nuclear Physics, Catania, Italy
// (b) National Institute for Nuclear Physics Section of Genova, genova, Italy
//
// * cirrone@lns.infn.it
// --------------------------------------------------------------
#ifndef HADRONTHERAPYIONLOWEZIEGLER1985_HH
#define HADRONTHERAPYIONLOWEZIEGLER1985_HH 1
#include "G4VPhysicsConstructor.hh"
#include "globals.hh"
class HadrontherapyIonLowEZiegler1985: public G4VPhysicsConstructor {
public:
HadrontherapyIonLowEZiegler1985(const G4String& name = "ion-LowE-ziegler1985");
virtual ~HadrontherapyIonLowEZiegler1985();
// This method is dummy for physics
virtual void ConstructParticle() {};
virtual void ConstructProcess();
};
#endif
@@ -0,0 +1,56 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// $Id: HadrontherapyIonLowEZiegler1985.hh; May 2005
// ----------------------------------------------------------------------------
// GEANT 4 - Hadrontherapy example
// ----------------------------------------------------------------------------
// Code developed by:
//
// G.A.P. Cirrone(a)*, G. Candiano, F. Di Rosa(a), S. Guatelli(b), G. Russo(a)
//
// (a) Laboratori Nazionali del Sud
// of the National Institute for Nuclear Physics, Catania, Italy
// (b) National Institute for Nuclear Physics Section of Genova, genova, Italy
//
// * cirrone@lns.infn.it
// --------------------------------------------------------------
#ifndef HADRONTHERAPYIONLOWEZIEGLER2000_HH
#define HADRONTHERAPYIONLOWEZIEGLER2000_HH 1
#include "G4VPhysicsConstructor.hh"
#include "globals.hh"
class HadrontherapyIonLowEZiegler2000: public G4VPhysicsConstructor {
public:
HadrontherapyIonLowEZiegler2000(const G4String& name = "ion-LowE-ziegler2000");
virtual ~HadrontherapyIonLowEZiegler2000();
// This method is dummy for physics
virtual void ConstructParticle() {};
virtual void ConstructProcess();
};
#endif
@@ -55,7 +55,7 @@ private:
G4bool positronIsRegistered;
G4bool photonIsRegistered;
G4bool ionIsRegistered;
G4bool protonPrecompoundIsRegistered;
G4bool protonHadronicIsRegistered;
G4bool chargedParticleIsRegistered;
G4bool muonIsRegistered;
G4bool decayIsRegistered;
@@ -1,4 +1,3 @@
//
// ********************************************************************
// * DISCLAIMER *
@@ -0,0 +1,128 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// $Id: HadrontherapyProtonBinary.hh; May 2005
// ----------------------------------------------------------------------------
// GEANT 4 - Hadrontherapy example
// ----------------------------------------------------------------------------
// Code developed by:
//
// G.A.P. Cirrone(a)*, F. Di Rosa(a), S. Guatelli(b), G. Russo(a)
//
// (a) Laboratori Nazionali del Sud
// of the National Institute for Nuclear Physics, Catania, Italy
// (b) National Institute for Nuclear Physics Section of Genova, genova, Italy
//
// * cirrone@lns.infn.it
// ----------------------------------------------------------------------------
#ifndef HadrontherapyProtonBinary_h
#define HadrontherapyProtonBinary_h 1
#include "G4VPhysicsConstructor.hh"
#include "globals.hh"
#include "G4HadronElasticProcess.hh"
#include "G4HadronFissionProcess.hh"
#include "G4HadronCaptureProcess.hh"
#include "G4ProtonInelasticProcess.hh"
#include "G4ProcessManager.hh"
#include "G4ExcitationHandler.hh"
#include "G4PreCompoundModel.hh"
#include "G4ProtonInelasticCrossSection.hh"
#include "G4TheoFSGenerator.hh"
#include "G4ExcitationHandler.hh"
#include "G4PreCompoundModel.hh"
#include "G4ExcitedStringDecay.hh"
// For neutron
#include "G4HENeutronInelastic.hh"
#include "G4LENeutronInelastic.hh"
#include "G4LFission.hh"
#include "G4LCapture.hh"
#include "G4NeutronInelasticProcess.hh"
#include "G4NeutronInelasticCrossSection.hh"
#include "G4HadronFissionProcess.hh"
#include "G4HadronCaptureProcess.hh"
#include "G4NeutronHPElastic.hh"
#include "G4NeutronHPElasticData.hh"
#include "G4NeutronHPInelastic.hh"
#include "G4NeutronHPInelasticData.hh"
// For ions
#include "G4TripathiCrossSection.hh"
#include "G4IonsShenCrossSection.hh"
#include "G4HadronInelasticProcess.hh"
#include "G4BinaryLightIonReaction.hh"
#include "G4BinaryCascade.hh"
#include "G4IonInelasticProcess.hh"
#include "G4LEDeuteronInelastic.hh"
#include "G4DeuteronInelasticProcess.hh"
#include "G4TritonInelasticProcess.hh"
#include "G4LETritonInelastic.hh"
#include "G4AlphaInelasticProcess.hh"
#include "G4LEAlphaInelastic.hh"
class HadrontherapyProtonBinary: public G4VPhysicsConstructor
{
public:
HadrontherapyProtonBinary(const G4String& name = "proton-precompound-binary");
virtual ~HadrontherapyProtonBinary();
protected:
// Construct particle and physics
void ConstructParticle(){};
void ConstructProcess();
private:
G4double binaryLightIonLowLimit;
G4double binaryLightIonHighLimit;
G4double LEPHighLimit;
G4double precompoundLowLimit;
G4double precompoundHighLimit;
G4double binaryLowLimit;
G4double binaryHighLimit;
G4double neutronLowLimit;
G4double neutronHighLimit;
G4ProtonInelasticCrossSection theXSec;
G4ExcitationHandler theHandler;
G4DeuteronInelasticProcess theIPdeuteron;
G4TritonInelasticProcess theIPtriton;
G4AlphaInelasticProcess theIPalpha;
G4HadronInelasticProcess* theIPHe3;
G4HadronInelasticProcess* theIPIonC12;
G4HadronInelasticProcess* theIPGenericIon;
G4ProtonInelasticCrossSection thePXSec;
G4ProtonInelasticProcess theIPProton;
G4NeutronInelasticProcess theIPNeutron;
G4NeutronInelasticCrossSection theNXSec;
};
#endif
@@ -38,9 +38,7 @@
#define HadrontherapyProtonPrecompound_h 1
#include "G4VPhysicsConstructor.hh"
#include "globals.hh"
#include "G4ExcitationHandler.hh"
#include "G4VPhysicsConstructor.hh"
#include "globals.hh"
@@ -48,12 +46,8 @@
#include "G4HadronFissionProcess.hh"
#include "G4HadronCaptureProcess.hh"
#include "G4ProtonInelasticProcess.hh"
#include "G4ProcessManager.hh"
#include "G4ExcitationHandler.hh"
#include "G4PreCompoundModel.hh"
#include "G4ProtonInelasticCrossSection.hh"
#include "G4TheoFSGenerator.hh"
#include "G4ExcitationHandler.hh"
@@ -86,7 +80,6 @@
#include "G4LETritonInelastic.hh"
#include "G4AlphaInelasticProcess.hh"
#include "G4LEAlphaInelastic.hh"
#include "G4PionPlusInelasticProcess.hh"
#include "G4PionMinusInelasticProcess.hh"
#include "G4PiNuclearCrossSection.hh"
@@ -106,53 +99,39 @@ protected:
private:
// Proton inelastic proces
G4ProtonInelasticProcess protonInelasticScattering;
// Cross Section for proton inelastic process
G4ProtonInelasticCrossSection protonInelasticCrossSection;
// Neutron inelastic process
G4NeutronInelasticProcess neutronInelasticScattering;
// Cross Section for neutron inelastic process
G4NeutronInelasticCrossSection neutronInelasticCrossSection;
// Pion plus inelastic process
G4PionPlusInelasticProcess pionPlusInelasticScattering;
// Cross sections for Pion plus inelastic process
G4PiNuclearCrossSection pionPlusInelasticCrossSection;
// Pion minus inelastic process
G4PionMinusInelasticProcess pionMinusInelasticScattering;
// Cross section for Pion minus inelastic process
G4PiNuclearCrossSection pionMinusInelasticCrossSection;
// Deuteron inelastic process
G4DeuteronInelasticProcess deuteronInelasticScattering;
// Tritium inelastic process
G4TritonInelasticProcess tritonInelasticScattering;
// Alpha inelastic process
G4AlphaInelasticProcess alphaInelasticScattering;
// He3 inelastic process
G4HadronInelasticProcess* He3InelasticProcess;
G4TripathiCrossSection* TripathiCrossSection;
G4IonsShenCrossSection* ShenCrossSection;
G4double binaryLightIonLowLimit;
G4double binaryLightIonHighLimit;
G4double LEPHighLimit;
G4double precompoundLowLimit;
G4double precompoundHighLimit;
G4double neutronLowLimit;
G4double neutronHighLimit;
G4double neutronHighLimit;
G4ExcitationHandler theHandler;
G4ExcitationHandler theHandler;
// Proton inelastic proces
G4ProtonInelasticProcess theIPProton;
// Cross Section for proton inelastic process
G4ProtonInelasticCrossSection thePXSec;
// Neutron inelastic process
G4NeutronInelasticProcess theIPNeutron;
// Cross Section for neutron inelastic process
G4NeutronInelasticCrossSection theNXSec;
// Deuteron inelastic process
G4DeuteronInelasticProcess theIPdeuteron;
// Tritium inelastic process
G4TritonInelasticProcess theIPtriton;
// Alpha inelastic process
G4AlphaInelasticProcess theIPalpha;
// He3 inelastic process
G4HadronInelasticProcess* theIPHe3;
};
#endif
@@ -0,0 +1,142 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// $Id: HadrontherapyProtonPrecompoundFermi.hh; May 2005
// ----------------------------------------------------------------------------
// GEANT 4 - Hadrontherapy example
// ----------------------------------------------------------------------------
// Code developed by:
//
// G.A.P. Cirrone(a)*, F. Di Rosa(a), S. Guatelli(b), G. Russo(a)
//
// (a) Laboratori Nazionali del Sud
// of the National Institute for Nuclear Physics, Catania, Italy
// (b) National Institute for Nuclear Physics Section of Genova, genova, Italy
//
// * cirrone@lns.infn.it
// ----------------------------------------------------------------------------
#ifndef HadrontherapyProtonPrecompoundFermi_h
#define HadrontherapyProtonPrecompoundFermi_h 1
#include "G4VPhysicsConstructor.hh"
#include "globals.hh"
#include "G4HadronElasticProcess.hh"
#include "G4HadronFissionProcess.hh"
#include "G4HadronCaptureProcess.hh"
#include "G4ProtonInelasticProcess.hh"
#include "G4ProcessManager.hh"
#include "G4ExcitationHandler.hh"
#include "G4PreCompoundModel.hh"
#include "G4ProtonInelasticCrossSection.hh"
#include "G4TheoFSGenerator.hh"
#include "G4ExcitationHandler.hh"
#include "G4PreCompoundModel.hh"
#include "G4GeneratorPrecompoundInterface.hh"
#include "G4ExcitedStringDecay.hh"
// For neutron
#include "G4HENeutronInelastic.hh"
#include "G4LENeutronInelastic.hh"
#include "G4LFission.hh"
#include "G4LCapture.hh"
#include "G4NeutronInelasticProcess.hh"
#include "G4NeutronInelasticCrossSection.hh"
#include "G4HadronFissionProcess.hh"
#include "G4HadronCaptureProcess.hh"
#include "G4NeutronHPElastic.hh"
#include "G4NeutronHPElasticData.hh"
#include "G4NeutronHPInelastic.hh"
#include "G4NeutronHPInelasticData.hh"
// For ions
#include "G4TripathiCrossSection.hh"
#include "G4IonsShenCrossSection.hh"
#include "G4HadronInelasticProcess.hh"
#include "G4BinaryLightIonReaction.hh"
#include "G4BinaryCascade.hh"
#include "G4IonInelasticProcess.hh"
#include "G4LEDeuteronInelastic.hh"
#include "G4DeuteronInelasticProcess.hh"
#include "G4TritonInelasticProcess.hh"
#include "G4LETritonInelastic.hh"
#include "G4AlphaInelasticProcess.hh"
#include "G4LEAlphaInelastic.hh"
#include "G4PiNuclearCrossSection.hh"
class HadrontherapyProtonPrecompoundFermi: public G4VPhysicsConstructor
{
public:
HadrontherapyProtonPrecompoundFermi(const G4String& name = "proton-precompoundFermi");
virtual ~HadrontherapyProtonPrecompoundFermi();
protected:
// Construct particle and physics
void ConstructParticle(){};
void ConstructProcess();
private:
G4double binaryLightIonLowLimit;
G4double binaryLightIonHighLimit;
G4double LEPHighLimit;
G4double precompoundLowLimit;
G4double precompoundHighLimit;
G4double neutronLowLimit;
G4double neutronHighLimit;
G4int targetA;
G4int targetZ;
G4ExcitationHandler theHandler;
// Proton inelastic proces
G4ProtonInelasticProcess theIPProton;
// Cross Section for proton inelastic process
G4ProtonInelasticCrossSection thePXSec;
// Neutron inelastic process
G4NeutronInelasticProcess theIPNeutron;
// Cross Section for neutron inelastic process
G4NeutronInelasticCrossSection theNXSec;
// Deuteron inelastic process
G4DeuteronInelasticProcess theIPdeuteron;
// Tritium inelastic process
G4TritonInelasticProcess theIPtriton;
// Alpha inelastic process
G4AlphaInelasticProcess theIPalpha;
// He3 inelastic process
G4HadronInelasticProcess* theIPHe3;
};
#endif
@@ -0,0 +1,139 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// $Id: HadrontherapyProtonPrecompoundGEM.hh; May 2005
// ----------------------------------------------------------------------------
// GEANT 4 - Hadrontherapy example
// ----------------------------------------------------------------------------
// Code developed by:
//
// G.A.P. Cirrone(a)*, F. Di Rosa(a), S. Guatelli(b), G. Russo(a)
//
// (a) Laboratori Nazionali del Sud
// of the National Institute for Nuclear Physics, Catania, Italy
// (b) National Institute for Nuclear Physics Section of Genova, genova, Italy
//
// * cirrone@lns.infn.it
// ----------------------------------------------------------------------------
#ifndef HadrontherapyProtonPrecompoundGEM_h
#define HadrontherapyProtonPrecompoundGEM_h 1
#include "G4VPhysicsConstructor.hh"
#include "globals.hh"
#include "G4HadronElasticProcess.hh"
#include "G4HadronFissionProcess.hh"
#include "G4HadronCaptureProcess.hh"
#include "G4ProtonInelasticProcess.hh"
#include "G4ProcessManager.hh"
#include "G4ExcitationHandler.hh"
#include "G4PreCompoundModel.hh"
#include "G4ProtonInelasticCrossSection.hh"
#include "G4TheoFSGenerator.hh"
#include "G4ExcitationHandler.hh"
#include "G4PreCompoundModel.hh"
#include "G4GeneratorPrecompoundInterface.hh"
#include "G4ExcitedStringDecay.hh"
// For neutron
#include "G4HENeutronInelastic.hh"
#include "G4LENeutronInelastic.hh"
#include "G4LFission.hh"
#include "G4LCapture.hh"
#include "G4NeutronInelasticProcess.hh"
#include "G4NeutronInelasticCrossSection.hh"
#include "G4HadronFissionProcess.hh"
#include "G4HadronCaptureProcess.hh"
#include "G4NeutronHPElastic.hh"
#include "G4NeutronHPElasticData.hh"
#include "G4NeutronHPInelastic.hh"
#include "G4NeutronHPInelasticData.hh"
// For ions
#include "G4TripathiCrossSection.hh"
#include "G4IonsShenCrossSection.hh"
#include "G4HadronInelasticProcess.hh"
#include "G4BinaryLightIonReaction.hh"
#include "G4BinaryCascade.hh"
#include "G4IonInelasticProcess.hh"
#include "G4LEDeuteronInelastic.hh"
#include "G4DeuteronInelasticProcess.hh"
#include "G4TritonInelasticProcess.hh"
#include "G4LETritonInelastic.hh"
#include "G4AlphaInelasticProcess.hh"
#include "G4LEAlphaInelastic.hh"
class HadrontherapyProtonPrecompoundGEM: public G4VPhysicsConstructor
{
public:
HadrontherapyProtonPrecompoundGEM(const G4String& name = "proton-precompoundGEM");
virtual ~HadrontherapyProtonPrecompoundGEM();
protected:
// Construct particle and physics
void ConstructParticle(){};
void ConstructProcess();
private:
G4double binaryLightIonLowLimit;
G4double binaryLightIonHighLimit;
G4double LEPHighLimit;
G4double precompoundLowLimit;
G4double precompoundHighLimit;
G4double neutronLowLimit;
G4double neutronHighLimit;
G4ExcitationHandler theHandler;
// Proton inelastic proces
G4ProtonInelasticProcess theIPProton;
// Cross Section for proton inelastic process
G4ProtonInelasticCrossSection thePXSec;
// Neutron inelastic process
G4NeutronInelasticProcess theIPNeutron;
// Cross Section for neutron inelastic process
G4NeutronInelasticCrossSection theNXSec;
// Deuteron inelastic process
G4DeuteronInelasticProcess theIPdeuteron;
// Tritium inelastic process
G4TritonInelasticProcess theIPtriton;
// Alpha inelastic process
G4AlphaInelasticProcess theIPalpha;
// He3 inelastic process
G4HadronInelasticProcess* theIPHe3;
};
#endif
@@ -0,0 +1,141 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// $Id: HadrontherapyProtonPrecompoundGEMFermi.hh; May 2005
// ----------------------------------------------------------------------------
// GEANT 4 - Hadrontherapy example
// ----------------------------------------------------------------------------
// Code developed by:
//
// G.A.P. Cirrone(a)*, F. Di Rosa(a), S. Guatelli(b), G. Russo(a)
//
// (a) Laboratori Nazionali del Sud
// of the National Institute for Nuclear Physics, Catania, Italy
// (b) National Institute for Nuclear Physics Section of Genova, genova, Italy
//
// * cirrone@lns.infn.it
// ----------------------------------------------------------------------------
#ifndef HadrontherapyProtonPrecompoundGEMFermi_h
#define HadrontherapyProtonPrecompoundGEMFermi_h 1
#include "G4VPhysicsConstructor.hh"
#include "globals.hh"
#include "G4HadronElasticProcess.hh"
#include "G4HadronFissionProcess.hh"
#include "G4HadronCaptureProcess.hh"
#include "G4ProtonInelasticProcess.hh"
#include "G4ProcessManager.hh"
#include "G4ExcitationHandler.hh"
#include "G4PreCompoundModel.hh"
#include "G4ProtonInelasticCrossSection.hh"
#include "G4TheoFSGenerator.hh"
#include "G4ExcitationHandler.hh"
#include "G4PreCompoundModel.hh"
#include "G4GeneratorPrecompoundInterface.hh"
#include "G4ExcitedStringDecay.hh"
// For neutron
#include "G4HENeutronInelastic.hh"
#include "G4LENeutronInelastic.hh"
#include "G4LFission.hh"
#include "G4LCapture.hh"
#include "G4NeutronInelasticProcess.hh"
#include "G4NeutronInelasticCrossSection.hh"
#include "G4HadronFissionProcess.hh"
#include "G4HadronCaptureProcess.hh"
#include "G4NeutronHPElastic.hh"
#include "G4NeutronHPElasticData.hh"
#include "G4NeutronHPInelastic.hh"
#include "G4NeutronHPInelasticData.hh"
// For ions
#include "G4TripathiCrossSection.hh"
#include "G4IonsShenCrossSection.hh"
#include "G4HadronInelasticProcess.hh"
#include "G4BinaryLightIonReaction.hh"
#include "G4BinaryCascade.hh"
#include "G4IonInelasticProcess.hh"
#include "G4LEDeuteronInelastic.hh"
#include "G4DeuteronInelasticProcess.hh"
#include "G4TritonInelasticProcess.hh"
#include "G4LETritonInelastic.hh"
#include "G4AlphaInelasticProcess.hh"
#include "G4LEAlphaInelastic.hh"
class HadrontherapyProtonPrecompoundGEMFermi: public G4VPhysicsConstructor
{
public:
HadrontherapyProtonPrecompoundGEMFermi(const G4String& name = "proton-precompoundGEMFermi");
virtual ~HadrontherapyProtonPrecompoundGEMFermi();
protected:
// Construct particle and physics
void ConstructParticle(){};
void ConstructProcess();
private:
G4double binaryLightIonLowLimit;
G4double binaryLightIonHighLimit;
G4double LEPHighLimit;
G4double precompoundLowLimit;
G4double precompoundHighLimit;
G4double neutronLowLimit;
G4double neutronHighLimit;
G4int targetZ;
G4int targetA;
G4ExcitationHandler theHandler;
// Proton inelastic proces
G4ProtonInelasticProcess theIPProton;
// Cross Section for proton inelastic process
G4ProtonInelasticCrossSection thePXSec;
// Neutron inelastic process
G4NeutronInelasticProcess theIPNeutron;
// Cross Section for neutron inelastic process
G4NeutronInelasticCrossSection theNXSec;
// Deuteron inelastic process
G4DeuteronInelasticProcess theIPdeuteron;
// Tritium inelastic process
G4TritonInelasticProcess theIPtriton;
// Alpha inelastic process
G4AlphaInelasticProcess theIPalpha;
// He3 inelastic process
G4HadronInelasticProcess* theIPHe3;
};
#endif
@@ -62,19 +62,17 @@ public:
void EndOfRunAction(const G4Run* );
void SelectEnergy(G4int);
private:
G4String sensitiveDetectorName;
HadrontherapyDetectorConstruction* detector;
HadrontherapyRunMessenger* runMessenger;
HadrontherapyFactory *factory;
G4int sourceChoice; //select primary particle
void AddEMProcess();
// Counts the number of electromagnetic processes
// of primary particles in the phantom
G4double matrix[80][80][80];
G4int indexI;
G4int indexJ;
G4int indexK;
void AddHadronicProcess();
// Counts the number of hadronic processes
// of primary particles in the phantom
private:
G4int electromagnetic;
G4int hadronic;
};
#endif
@@ -42,11 +42,8 @@
#include "G4EventManager.hh"
#include "G4ios.hh"
#include "globals.hh"
#include <iostream.h>
class HadrontherapyDetectorConstruction;
class HadrontherapyRunAction;
class HadrontherapyEventAction;
class HadrontherapySteppingMessenger;
@@ -58,9 +55,12 @@ class HadrontherapySteppingMessenger;
class HadrontherapySteppingAction : public G4UserSteppingAction
{
public:
HadrontherapySteppingAction( );
HadrontherapySteppingAction(HadrontherapyRunAction*);
~HadrontherapySteppingAction();
void UserSteppingAction(const G4Step*);
private:
HadrontherapyRunAction* runAction;
};
#endif
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,48 @@
#----------------------------------------------------------------------------
# PHYSICS LIST:
#
# - LOW ENERGY ELECTROMAGNETIC PHYSICS
# - ELASTIC SCATTERING FOR ALL THE HADRONS AND IONS
# - INELASTIC SCATTERING --->
# PRECOMPOUND PHYSICS LIST with THE DEFAULT EVAPORATION MODEL AND WITHOUT THE FERMI BREAK-UP
#
# * PRECOMPOUND + EVAPORATION (DEFAULT MODEL) NO FERMI BREAK-UP FOR PROTONS,
# NEUTRONS AND PIONS
#
# * LEP MODEL UP TO 100 MEV AND BINARY ION MODEL BETWEEN 80 MEV AND 40. GEV
# FOR DEUTERON, TRITON, HE3, ALPHA
#
# * FISSION AND HADRON CAPTURE FOR NEUTRONS BETWEEN 0. MEV AND 100. TEV
#
#
#-------------------------------------------------------------------------------
/control/verbose 1
/tracking/verbose 0
/run/verbose 0
/event/verbose 0
# SETTING FOR THE PHYSICS MODELS
/physics/addPhysics photon-epdl
/physics/addPhysics electron-eedl
/physics/addPhysics positron-standard
/physics/addPhysics ion-LowE
/physics/addPhysics muon-standard
/physics/addPhysics decay
# SETTING FOR THE PARTICULAR HADRONIC MODEL
#/physics/addPhysics proton-precompound
/run/initialize
# IF YOU WANT A RANGE SHIFTER PLEASE CHANGE
# THE FOLLOWIG PARAMETERS
# SETTING FOR THE RANGE SHIFTER
#/beamLine/RangeShifter/thickness 4 cm
#/beamLine/RangeShifter/RSMat Water
/run/beamOn 10
@@ -0,0 +1,48 @@
#----------------------------------------------------------------------------
# PHYSICS LIST:
#
# - LOW ENERGY ELECTROMAGNETIC PHYSICS
# - ELASTIC SCATTERING FOR ALL THE HADRONS AND IONS
# - INELASTIC SCATTERING --->
# PRECOMPOUND PHYSICS LIST with DEFAULT EVAPORATION MODEL + FERMI
# BREAK-UP
#
# * PRECOMPOUND + DEFAULT EVAPORATION + FERMI BREAK-UP FOR PROTONS,
# NEUTRONS AND PIONS
#
# * LEP MODEL UP TO 100 MEV AND BINARY ION MODEL BETWEEN 80 MEV AND 40. GEV
# FOR DEUTERON, TRITON, HE3, ALPHA
#
# * FISSION AND HADRON CAPTURE FOR NEUTRONS BETWEEN 0. MEV AND 100. TEV
#
#
#-------------------------------------------------------------------------------
/control/verbose 1
/tracking/verbose 0
/run/verbose 0
/event/verbose 0
# SETTING FOR THE PHYSICS MODELS
/physics/addPhysics photon-epdl
/physics/addPhysics electron-eedl
/physics/addPhysics positron-standard
/physics/addPhysics ion-LowE
/physics/addPhysics muon-standard
/physics/addPhysics decay
# SETTING FOR THE PARTICULAR HADRONIC MODEL
/physics/addPhysics proton-precompoundFermi
/run/initialize
# IF YOU WANT A RANGE SHIFTER PLEASE CHANGE
# THE FOLLOWIG PARAMETERS
# SETTING FOR THE RANGE SHIFTER
#/beamLine/RangeShifter/thickness 4 cm
#/beamLine/RangeShifter/RSMat Water
/run/beamOn 10
@@ -0,0 +1,48 @@
#----------------------------------------------------------------------------
# PHYSICS LIST:
#
# - LOW ENERGY ELECTROMAGNETIC PHYSICS
# - ELASTIC SCATTERING FOR ALL THE HADRONS AND IONS
# - INELASTIC SCATTERING --->
# * PRECOMPOUND PHYSICS LIST with GEM EVAPORATION MODEL
#
# * PRECOMPOUND + EVAPORATION (GEM MODEL) NO FERMI BREAK-UP FOR PROTONS,
# NEUTRONS AND PIONS
#
# * LEP MODEL UP TO 100 MEV AND BINARY ION MODEL BETWEEN 80 MEV AND 40. GEV
# FOR DEUTERON, TRITON, HE3, ALPHA
#
# * FISSION AND HADRON CAPTURE FOR NEUTRONS BETWEEN 0. MEV AND 100. TEV
#
#
#-------------------------------------------------------------------------------
/control/verbose 1
/tracking/verbose 0
/run/verbose 0
/event/verbose 0
# SETTING FOR THE PHYSICS MODELS
/physics/addPhysics photon-epdl
/physics/addPhysics electron-eedl
/physics/addPhysics positron-standard
/physics/addPhysics ion-LowE
/physics/addPhysics muon-standard
/physics/addPhysics decay
# SETTING FOR THE HADRONIC PHYSICS MODELS
/physics/addPhysics proton-precompoundGEM
/run/initialize
# IF YOU WANT A RANGE SHIFTER PLEASE CHANGE
# THE FOLLOWIG PARAMETERS
# SETTING FOR THE RANGE SHIFTER
#/beamLine/RangeShifter/thickness 4 cm
#/beamLine/RangeShifter/RSMat Water
/run/beamOn 10
@@ -0,0 +1,47 @@
#----------------------------------------------------------------------------
# PHYSICS LIST:
#
# - LOW ENERGY ELECTROMAGNETIC PHYSICS
# - ELASTIC SCATTERING FOR ALL THE HADRONS AND IONS
# - INELASTIC SCATTERING --->
# PRECOMPOUND PHYSICS LIST with GEM EVAPORATION MODEL and FERMI BREAK-UP MODEL
#
# * PRECOMPOUND + EVAPORATION(GEM MODEL) + FERMI BREAK-UP FOR PROTONS,
# NEUTRONS AND PIONS
#
# * LEP MODEL UP TO 100 MEV AND BINARY ION MODEL BETWEEN 80 MEV AND 40. GEV
# FOR DEUTERON, TRITON, HE3, ALPHA
#
# * FISSION AND HADRON CAPTURE FOR NEUTRONS BETWEEN 0. MEV AND 100. TEV
#
#
#-------------------------------------------------------------------------------
/control/verbose 1
/tracking/verbose 0
/run/verbose 0
/event/verbose 0
# SETTING FOR THE PHYSICS MODELS
/physics/addPhysics photon-epdl
/physics/addPhysics electron-eedl
/physics/addPhysics positron-standard
/physics/addPhysics ion-LowE
/physics/addPhysics muon-standard
/physics/addPhysics decay
# SETTING FOR THE PARTICULAR HADRONIC MODEL
/physics/addPhysics proton-precompoundGEMFermi
/run/initialize
# IF YOU WANT A RANGE SHIFTER PLEASE CHANGE
# THE FOLLOWIG PARAMETERS
# SETTING FOR THE RANGE SHIFTER
#/beamLine/RangeShifter/thickness 4 cm
#/beamLine/RangeShifter/RSMat Water
/run/beamOn 10
@@ -0,0 +1,39 @@
#----------------------------------------------------------------------------
# PHYSICS LIST:
#
# - ELECTROMAGNETIC PHYSICS FOR PROTONS, ELECTRONS, POSITRONS, PHOTONS AND IONS
#
#
#-------------------------------------------------------------------------------
/control/verbose 1
/tracking/verbose 0
/run/verbose 0
/event/verbose 0
# SETTING FOR THE PHYSICS MODELS
/physics/addPhysics photon-epdl
/physics/addPhysics electron-eedl
/physics/addPhysics positron-standard
###################################################
#### Alternative Low Energy models for protons
#### Same Low Energy model for ions
##################################################
### ICRU49 parameterisation
/physics/addPhysics ion-LowE
#
### ZIEGLER 1977 parameterisation
#/physics/addPhysics ion-LowE-ziegler1977
#
### ZIEGLER 1985 parameterisation
#/physics/addPhysics ion-LowE-ziegler1985
#
### ZIEGLER 2000 parameterisation
#/physics/addPhysics ion-LowE-ziegler2000
#
/run/initialize
/run/beamOn 100
@@ -0,0 +1,40 @@
#----------------------------------------------------------------------------
# PHYSICS LIST:
#
# - ELECTROMAGNETIC PHYSICS FOR PROTONS, ELECTRONS, POSITRONS, PHOTONS AND IONS
#
#
#-------------------------------------------------------------------------------
/control/verbose 1
/tracking/verbose 0
/run/verbose 0
/event/verbose 0
# SETTING FOR THE PHYSICS MODELS
/physics/addPhysics photon-epdl
/physics/addPhysics electron-eedl
/physics/addPhysics positron-standard
###################################################
#### Alternative Low Energy models for protons
#### Same Low Energy model for ions
##################################################
### ICRU49 parameterisation
/physics/addPhysics ion-LowE
### ZIEGLER 1977 parameterisation
#/physics/addPhysics ion-LowE-ziegler1977
### ZIEGLER 1985 parameterisation
#/physics/addPhysics ion-LowE-ziegler1985
### ZIEGLER 2000 parameterisation
#/physics/addPhysics ion-LowE-ziegler2000
/run/initialize
/run/beamOn 100
@@ -0,0 +1,40 @@
#----------------------------------------------------------------------------
# PHYSICS LIST:
#
# - ELECTROMAGNETIC PHYSICS FOR PROTONS, ELECTRONS, POSITRONS, PHOTONS AND IONS
#
#
#-------------------------------------------------------------------------------
/control/verbose 1
/tracking/verbose 0
/run/verbose 0
/event/verbose 0
# SETTING FOR THE PHYSICS MODELS
/physics/addPhysics photon-epdl
/physics/addPhysics electron-eedl
/physics/addPhysics positron-standard
###################################################
#### Alternative Low Energy models for protons
#### Same Low Energy model for ions
##################################################
### ICRU49 parameterisation
#/physics/addPhysics ion-LowE
### ZIEGLER 1977 parameterisation
/physics/addPhysics ion-LowE-ziegler1977
### ZIEGLER 1985 parameterisation
#/physics/addPhysics ion-LowE-ziegler1985
### ZIEGLER 2000 parameterisation
#/physics/addPhysics ion-LowE-ziegler2000
/run/initialize
/run/beamOn 100
@@ -0,0 +1,40 @@
#----------------------------------------------------------------------------
# PHYSICS LIST:
#
# - ELECTROMAGNETIC PHYSICS FOR PROTONS, ELECTRONS, POSITRONS, PHOTONS AND IONS
#
#
#-------------------------------------------------------------------------------
/control/verbose 1
/tracking/verbose 0
/run/verbose 0
/event/verbose 0
# SETTING FOR THE PHYSICS MODELS
/physics/addPhysics photon-epdl
/physics/addPhysics electron-eedl
/physics/addPhysics positron-standard
###################################################
#### Alternative Low Energy models for protons
#### Same Low Energy model for ions
##################################################
### ICRU49 parameterisation
#/physics/addPhysics ion-LowE
### ZIEGLER 1977 parameterisation
#/physics/addPhysics ion-LowE-ziegler1977
### ZIEGLER 1985 parameterisation
/physics/addPhysics ion-LowE-ziegler1985
### ZIEGLER 2000 parameterisation
#/physics/addPhysics ion-LowE-ziegler2000
/run/initialize
/run/beamOn 100
@@ -0,0 +1,39 @@
#----------------------------------------------------------------------------
# PHYSICS LIST:
#
# - ELECTROMAGNETIC PHYSICS FOR PROTONS, ELECTRONS, POSITRONS, PHOTONS AND IONS
#
#
#-------------------------------------------------------------------------------
/control/verbose 1
/tracking/verbose 0
/run/verbose 0
/event/verbose 0
# SETTING FOR THE PHYSICS MODELS
/physics/addPhysics photon-epdl
/physics/addPhysics electron-eedl
/physics/addPhysics positron-standard
###################################################
#### Alternative Low Energy models for protons
#### Same Low Energy model for ions
##################################################
### ICRU49 parameterisation
#/physics/addPhysics ion-LowE
### ZIEGLER 1977 parameterisation
#/physics/addPhysics ion-LowE-ziegler1977
### ZIEGLER 1985 parameterisation
#/physics/addPhysics ion-LowE-ziegler1985
### ZIEGLER 2000 parameterisation
/physics/addPhysics ion-LowE-ziegler2000
/run/initialize
/run/beamOn 100
@@ -0,0 +1,38 @@
#----------------------------------------------------------------------------
# PHYSICS LIST:
#
# - ELECTROMAGNETIC PHYSICS FOR PROTONS, ELECTRONS, POSITRONS, PHOTONS AND IONS
#
#
#-------------------------------------------------------------------------------
/control/verbose 1
/tracking/verbose 0
/run/verbose 0
/event/verbose 0
# SETTING FOR THE PHYSICS MODELS
/physics/addPhysics photon-penelope
/physics/addPhysics electron-penelope
/physics/addPhysics positron-penelope
###################################################
#### Alternative Low Energy models for protons
#### Same Low Energy model for ions
##################################################
### ICRU49 parameterisation
/physics/addPhysics ion-LowE
### ZIEGLER 1977 parameterisation
#/physics/addPhysics ion-LowE-ziegler1977
### ZIEGLER 1985 parameterisation
#/physics/addPhysics ion-LowE-ziegler1985
### ZIEGLER 2000 parameterisation
#/physics/addPhysics ion-LowE-ziegler2000
/run/initialize
/run/beamOn 100
@@ -0,0 +1,26 @@
#----------------------------------------------------------------------------
# PHYSICS LIST:
#
# - ELECTROMAGNETIC PHYSICS FOR PROTONS, ELECTRONS, POSITRONS, PHOTONS AND IONS
#
#
#-------------------------------------------------------------------------------
/control/verbose 1
/tracking/verbose 0
/run/verbose 0
/event/verbose 0
# SETTING FOR THE PHYSICS MODELS
/physics/addPhysics photon-standard
/physics/addPhysics electron-standard
/physics/addPhysics positron-standard
/physics/addPhysics ion-standard
#######
/run/initialize
/run/beamOn 100
@@ -40,15 +40,59 @@
HadrontherapyAnalysisManager* HadrontherapyAnalysisManager::instance = 0;
HadrontherapyAnalysisManager::HadrontherapyAnalysisManager() :
aFact(0), theTree(0), histFact(0), tupFact(0), h1(0), ntuple(0)
aFact(0), theTree(0), histFact(0), tupFact(0), h1(0), h2(0), h3(0),
h4(0), h5(0), h6(0), h7(0), h8(0), h9(0), h10(0), h11(0), h12(0), h13(0), h14(0), ntuple(0),
ionTuple(0)
{
}
HadrontherapyAnalysisManager::~HadrontherapyAnalysisManager()
{
delete ionTuple;
ionTuple = 0;
delete ntuple;
ntuple = 0;
delete h14;
h14 = 0;
delete h13;
h13 = 0;
delete h12;
h12 = 0;
delete h11;
h11 = 0;
delete h10;
h10 = 0;
delete h9;
h9 = 0;
delete h8;
h8 = 0;
delete h7;
h7 = 0;
delete h6;
h6 = 0;
delete h5;
h5 = 0;
delete h4;
h4 = 0;
delete h3;
h3 = 0;
delete h2;
h2 = 0;
delete h1;
h1 = 0;
@@ -86,13 +130,44 @@ void HadrontherapyAnalysisManager::book()
histFact = aFact -> createHistogramFactory(*theTree);
tupFact = aFact -> createTupleFactory(*theTree);
// Create the histogram
// Create the histograms with the enrgy deposit along the X axis
h1 = histFact -> createHistogram1D("10","slice, energy", 80, 0., 80. );
h2 = histFact -> createHistogram1D("20","Secondary protons - slice, energy", 80, 0., 80. );
h3 = histFact -> createHistogram1D("30","Secondary neutrons - slice, energy", 80, 0., 80. );
h4 = histFact -> createHistogram1D("40","Secondary alpha - slice, energy", 80, 0., 80. );
h5 = histFact -> createHistogram1D("50","Secondary gamma - slice, energy", 80, 0., 80. );
h6 = histFact -> createHistogram1D("60","Secondary electron - slice, energy", 80, 0., 80. );
h7 = histFact -> createHistogram1D("70","Secondary triton - slice, energy", 80, 0., 80. );
h8 = histFact -> createHistogram1D("80","Secondary deuteron - slice, energy", 80, 0., 80. );
h9 = histFact -> createHistogram1D("90","Secondary pion - slice, energy", 80, 0., 80. );
h10 = histFact -> createHistogram1D("100","Energy distribution of secondary electrons", 70, 0., 70. );
h11 = histFact -> createHistogram1D("110","Energy distribution of secondary photons", 70, 0., 70. );
h12 = histFact -> createHistogram1D("120","Energy distribution of secondary deuterons", 70, 0., 70. );
h13 = histFact -> createHistogram1D("130","Energy distribution of secondary tritons", 70, 0., 70. );
h14 = histFact -> createHistogram1D("140","Energy distribution of secondary alpha particles", 70, 0., 70. );
// Create the ntuple
G4String columnNames = "int i; int j; int k; double energy;";
G4String options = "";
if (tupFact) ntuple = tupFact->create("1","1",columnNames, options);
if (tupFact) ntuple = tupFact -> create("1","1",columnNames, options);
// Create the ntuple
G4String columnNames2 = "int a; double z; int occupancy; double energy;";
G4String options2 = "";
if (tupFact) ionTuple = tupFact -> create("2","2", columnNames2, options2);
}
void HadrontherapyAnalysisManager::FillEnergyDeposit(G4int i,
@@ -121,13 +196,98 @@ void HadrontherapyAnalysisManager::BraggPeak(G4int slice, G4double energy)
h1 -> fill(slice,energy);
}
void HadrontherapyAnalysisManager::SecondaryProtonEnergyDeposit(G4int slice, G4double energy)
{
h2 -> fill(slice,energy);
}
void HadrontherapyAnalysisManager::SecondaryNeutronEnergyDeposit(G4int slice, G4double energy)
{
h3 -> fill(slice,energy);
}
void HadrontherapyAnalysisManager::SecondaryAlphaEnergyDeposit(G4int slice, G4double energy)
{
h4 -> fill(slice,energy);
}
void HadrontherapyAnalysisManager::SecondaryGammaEnergyDeposit(G4int slice, G4double energy)
{
h5 -> fill(slice,energy);
}
void HadrontherapyAnalysisManager::SecondaryElectronEnergyDeposit(G4int slice, G4double energy)
{
h6 -> fill(slice,energy);
}
void HadrontherapyAnalysisManager::SecondaryTritonEnergyDeposit(G4int slice, G4double energy)
{
h7 -> fill(slice,energy);
}
void HadrontherapyAnalysisManager::SecondaryDeuteronEnergyDeposit(G4int slice, G4double energy)
{
h8 -> fill(slice,energy);
}
void HadrontherapyAnalysisManager::SecondaryPionEnergyDeposit(G4int slice, G4double energy)
{
h9 -> fill(slice,energy);
}
void HadrontherapyAnalysisManager::electronEnergyDistribution(G4double energy)
{
h10 -> fill(energy);
}
void HadrontherapyAnalysisManager::gammaEnergyDistribution(G4double energy)
{
h11 -> fill(energy);
}
void HadrontherapyAnalysisManager::deuteronEnergyDistribution(G4double energy)
{
h12 -> fill(energy);
}
void HadrontherapyAnalysisManager::tritonEnergyDistribution(G4double energy)
{
h13 -> fill(energy);
}
void HadrontherapyAnalysisManager::alphaEnergyDistribution(G4double energy)
{
h14 -> fill(energy);
}
void HadrontherapyAnalysisManager::genericIonInformation(G4int a,
G4double z,
G4int electronOccupancy,
G4double energy)
{
if (ionTuple)
{
G4int aIndex = ionTuple -> findColumn("a");
G4int zIndex = ionTuple -> findColumn("z");
G4int electronIndex = ionTuple -> findColumn("occupancy");
G4int energyIndex = ionTuple -> findColumn("energy");
ionTuple -> fill(aIndex,a);
ionTuple -> fill(zIndex,z);
ionTuple -> fill(electronIndex, electronOccupancy);
ionTuple -> fill(energyIndex, energy);
}
ionTuple -> addRow();
}
void HadrontherapyAnalysisManager::finish()
{
// Write all histograms to file
theTree -> commit();
// Write all histograms to file
theTree -> commit();
// Close (will again commit)
theTree ->close();
// Close (will again commit)
theTree ->close();
}
#endif
@@ -55,13 +55,14 @@ void HadrontherapyDecay::ConstructProcess()
{
G4ParticleDefinition* particle = theParticleIterator -> value();
G4ProcessManager* pmanager = particle -> GetProcessManager();
if (theDecayProcess -> IsApplicable(*particle))
if (theDecayProcess -> IsApplicable(*particle) && !particle->IsShortLived())
{
G4String name = particle -> GetParticleName();
pmanager -> AddProcess(theDecayProcess);
// set ordering for PostStepDoIt and AtRestDoIt
pmanager -> SetProcessOrdering(theDecayProcess, idxPostStep);
pmanager -> SetProcessOrdering(theDecayProcess, idxAtRest);
}
}
}
@@ -72,9 +72,9 @@ HadrontherapyDetectorConstruction::HadrontherapyDetectorConstruction()
phantomSizeZ = 20.*mm;
// Number of the phantom voxels
numberOfVoxelsAlongX = 80;
numberOfVoxelsAlongY = 80;
numberOfVoxelsAlongZ = 80;
numberOfVoxelsAlongX = 200;
numberOfVoxelsAlongY = 200;
numberOfVoxelsAlongZ = 200;
}
HadrontherapyDetectorConstruction::~HadrontherapyDetectorConstruction()
@@ -91,7 +91,7 @@ void HadrontherapyEventAction::EndOfEventAction(const G4Event* evt)
G4int j = ((*CHC)[h]) -> GetYID();
G4int k = ((*CHC)[h]) -> GetZID();
G4double energyDeposit = ((*CHC)[h]) -> GetEdep();
matrix -> Fill(i, j, k, energyDeposit);
matrix -> Fill(i, j, k, energyDeposit/MeV);
}
}
}
@@ -59,22 +59,17 @@ void HadrontherapyIonLowE::ConstructProcess()
G4ProcessManager* manager = particle -> GetProcessManager();
G4String particleName = particle -> GetParticleName();
G4double charge = particle -> GetPDGCharge();
// protons, ions, alpha, pions, kaons, generic ion.....
if (( charge != 0. ) && particleName != "e+" && particleName != "mu+" &&
if (( charge != 0. ) && particleName != "e+" && particleName != "mu+" &&
particleName != "e-" && particleName != "mu-")
{
if((!particle -> IsShortLived()) &&
(particle -> GetParticleName() != "chargedgeantino"))
{
G4hLowEnergyIonisation* ionisation = new G4hLowEnergyIonisation();
ionisation -> SetNuclearStoppingPowerModel("ICRU_R49") ; // ICRU49 models for nuclear SP
// ICRU49 parameterisation is the default one
G4hLowEnergyIonisation* ionisation = new G4hLowEnergyIonisation();
ionisation -> SetNuclearStoppingOn() ;
// Switch off the Barkas and Bloch corrections
ionisation -> SetBarkasOn();
G4VProcess* multipleScattering = new G4MultipleScattering();
manager -> AddProcess(multipleScattering, -1,1,1);
manager -> AddProcess(ionisation, -1,2,2);
@@ -0,0 +1,99 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// $Id: HadrontherapyIonLowE.cc; May 2005
// ----------------------------------------------------------------------------
// GEANT 4 - Hadrontherapy example
// ----------------------------------------------------------------------------
// Code developed by:
//
// G.A.P. Cirrone(a)*, G. Candiano, F. Di Rosa(a), S. Guatelli(b), G. Russo(a)
//
// (a) Laboratori Nazionali del Sud
// of the National Institute for Nuclear Physics, Catania, Italy
// (b) National Institute for Nuclear Physics Section of Genova, genova, Italy
//
// * cirrone@lns.infn.it
// --------------------------------------------------------------
#include "HadrontherapyIonLowEZiegler1977.hh"
#include "G4ProcessManager.hh"
#include "G4ParticleDefinition.hh"
#include "G4MultipleScattering.hh"
#include "G4hLowEnergyIonisation.hh"
#include "G4hIonisation.hh"
#include "G4hLowEnergyLoss.hh"
#include "G4StepLimiter.hh"
#include "G4hZiegler1977p.hh"
HadrontherapyIonLowEZiegler1977::HadrontherapyIonLowEZiegler1977(const G4String& name): G4VPhysicsConstructor(name)
{ }
HadrontherapyIonLowEZiegler1977::~HadrontherapyIonLowEZiegler1977()
{ }
void HadrontherapyIonLowEZiegler1977::ConstructProcess()
{
theParticleIterator -> reset();
while( (*theParticleIterator)() )
{
G4ParticleDefinition* particle = theParticleIterator -> value();
G4ProcessManager* manager = particle -> GetProcessManager();
G4String particleName = particle -> GetParticleName();
G4double charge = particle -> GetPDGCharge();
// protons
if (particleName == "proton")
{
G4hLowEnergyIonisation* ionisation = new G4hLowEnergyIonisation();
// Electronic Stopping Power: Ziegler 1977 parameterisation
// Nuclear stopping power: Ziegler 1977
ionisation -> SetElectronicStoppingPowerModel(particle, "Ziegler1977p");
ionisation -> SetNuclearStoppingPowerModel("Ziegler1977");
ionisation -> SetNuclearStoppingOn();
G4VProcess* multipleScattering = new G4MultipleScattering();
manager -> AddProcess(multipleScattering, -1,1,1);
manager -> AddProcess(ionisation, -1,2,2);
manager -> AddProcess(new G4StepLimiter(),-1,-1, 3);
}
// ions, alpha, pions, kaons, generic ion.....
if (( charge != 0. ) && particleName != "e+" && particleName != "mu+" &&
particleName != "e-" && particleName != "mu-" && particleName != "proton")
{
if((!particle -> IsShortLived()) &&
(particle -> GetParticleName() != "chargedgeantino"))
{
G4hLowEnergyIonisation* ionisation = new G4hLowEnergyIonisation();
ionisation -> SetNuclearStoppingOn() ;
G4VProcess* multipleScattering = new G4MultipleScattering();
manager -> AddProcess(multipleScattering, -1,1,1);
manager -> AddProcess(ionisation, -1,2,2);
manager -> AddProcess(new G4StepLimiter(),-1,-1, 3);
}
}
}
}
@@ -0,0 +1,100 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// $Id: HadrontherapyIonLowEZiegler1985.cc; May 2005
// ----------------------------------------------------------------------------
// GEANT 4 - Hadrontherapy example
// ----------------------------------------------------------------------------
// Code developed by:
//
// G.A.P. Cirrone(a)*, G. Candiano, F. Di Rosa(a), S. Guatelli(b), G. Russo(a)
//
// (a) Laboratori Nazionali del Sud
// of the National Institute for Nuclear Physics, Catania, Italy
// (b) National Institute for Nuclear Physics Section of Genova, genova, Italy
//
// * cirrone@lns.infn.it
// --------------------------------------------------------------
#include "HadrontherapyIonLowEZiegler1985.hh"
#include "G4ProcessManager.hh"
#include "G4ParticleDefinition.hh"
#include "G4MultipleScattering.hh"
#include "G4hLowEnergyIonisation.hh"
#include "G4hIonisation.hh"
#include "G4hLowEnergyLoss.hh"
#include "G4StepLimiter.hh"
#include "G4hZiegler1985p.hh"
HadrontherapyIonLowEZiegler1985::HadrontherapyIonLowEZiegler1985(const G4String& name): G4VPhysicsConstructor(name)
{ }
HadrontherapyIonLowEZiegler1985::~HadrontherapyIonLowEZiegler1985()
{ }
void HadrontherapyIonLowEZiegler1985::ConstructProcess()
{
theParticleIterator -> reset();
while( (*theParticleIterator)() )
{
G4ParticleDefinition* particle = theParticleIterator -> value();
G4ProcessManager* manager = particle -> GetProcessManager();
G4String particleName = particle -> GetParticleName();
G4double charge = particle -> GetPDGCharge();
// protons
if (particleName == "proton")
{
G4hLowEnergyIonisation* ionisation = new G4hLowEnergyIonisation();
// Electronic Stopping Power: Ziegler 1985 parameterisation
// Nuclear stopping power: Ziegler 1985 parameterisation
ionisation -> SetElectronicStoppingPowerModel(particle, "Ziegler1985p");
ionisation -> SetNuclearStoppingPowerModel("Ziegler1985");
ionisation -> SetNuclearStoppingOn() ;
G4VProcess* multipleScattering = new G4MultipleScattering();
manager -> AddProcess(multipleScattering, -1,1,1);
manager -> AddProcess(ionisation, -1,2,2);
manager -> AddProcess(new G4StepLimiter(),-1,-1, 3);
}
// ions, alpha, pions, kaons, generic ions.....
if (( charge != 0. ) && (particleName != "e+") && (particleName != "mu+") &&
(particleName != "e-") && (particleName != "mu-") && (particleName != "proton"))
{
if((!particle -> IsShortLived()) &&
(particle -> GetParticleName() != "chargedgeantino"))
{
G4hLowEnergyIonisation* ionisation = new G4hLowEnergyIonisation();
ionisation -> SetNuclearStoppingOn() ;
G4VProcess* multipleScattering = new G4MultipleScattering();
manager -> AddProcess(multipleScattering, -1,1,1);
manager -> AddProcess(ionisation, -1,2,2);
manager -> AddProcess(new G4StepLimiter(),-1,-1, 3);
}
}
}
}
@@ -0,0 +1,96 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// $Id: HadrontherapyIonLowE.cc; May 2005
// ----------------------------------------------------------------------------
// GEANT 4 - Hadrontherapy example
// ----------------------------------------------------------------------------
// Code developed by:
//
// G.A.P. Cirrone(a)*, G. Candiano, F. Di Rosa(a), S. Guatelli(b), G. Russo(a)
//
// (a) Laboratori Nazionali del Sud
// of the National Institute for Nuclear Physics, Catania, Italy
// (b) National Institute for Nuclear Physics Section of Genova, genova, Italy
//
// * cirrone@lns.infn.it
// --------------------------------------------------------------
#include "HadrontherapyIonLowEZiegler2000.hh"
#include "G4ProcessManager.hh"
#include "G4ParticleDefinition.hh"
#include "G4MultipleScattering.hh"
#include "G4hLowEnergyIonisation.hh"
#include "G4hIonisation.hh"
#include "G4hLowEnergyLoss.hh"
#include "G4StepLimiter.hh"
#include "G4hSRIM2000p.hh"
HadrontherapyIonLowEZiegler2000::HadrontherapyIonLowEZiegler2000(const G4String& name): G4VPhysicsConstructor(name)
{ }
HadrontherapyIonLowEZiegler2000::~HadrontherapyIonLowEZiegler2000()
{ }
void HadrontherapyIonLowEZiegler2000::ConstructProcess()
{
theParticleIterator -> reset();
while( (*theParticleIterator)() )
{
G4ParticleDefinition* particle = theParticleIterator -> value();
G4ProcessManager* manager = particle -> GetProcessManager();
G4String particleName = particle -> GetParticleName();
G4double charge = particle -> GetPDGCharge();
// protons
if (particleName == "proton")
{
G4hLowEnergyIonisation* ionisation = new G4hLowEnergyIonisation();
// Electronic Stopping Power: SRIM 2000 parameterisation
// Nuclear stopping power: ICRU 49
ionisation -> SetElectronicStoppingPowerModel(particle, "SRIM2000p");
ionisation -> SetNuclearStoppingOn() ;
G4VProcess* multipleScattering = new G4MultipleScattering();
manager -> AddProcess(multipleScattering, -1,1,1);
manager -> AddProcess(ionisation, -1,2,2);
manager -> AddProcess(new G4StepLimiter(),-1,-1, 3);
}
// ions, alpha, pions, kaons, generic ion.....
if (( charge != 0. ) && particleName != "e+" && particleName != "mu+" &&
particleName != "e-" && particleName != "mu-" && particleName != "proton")
{
if((!particle -> IsShortLived()) &&
(particle -> GetParticleName() != "chargedgeantino"))
{
G4hLowEnergyIonisation* ionisation = new G4hLowEnergyIonisation();
ionisation -> SetNuclearStoppingOn() ;
G4VProcess* multipleScattering = new G4MultipleScattering();
manager -> AddProcess(multipleScattering, -1,1,1);
manager -> AddProcess(ionisation, -1,2,2);
manager -> AddProcess(new G4StepLimiter(),-1,-1, 3);
}
}
}
}
@@ -39,6 +39,7 @@
#include "G4ParticleDefinition.hh"
#include "G4MultipleScattering.hh"
#include "G4hIonisation.hh"
#include "G4ionIonisation.hh"
#include "G4MultipleScattering.hh"
#include "G4StepLimiter.hh"
@@ -58,10 +59,19 @@ void HadrontherapyIonStandard::ConstructProcess()
G4ProcessManager* manager = particle -> GetProcessManager();
G4String particleName = particle -> GetParticleName();
G4double charge = particle -> GetPDGCharge();
if (particleName == "GenericIon")
{
G4ionIonisation* ionisation = new G4ionIonisation();
G4VProcess* multipleScattering = new G4MultipleScattering();
manager -> AddProcess(multipleScattering, -1,1,1);
manager -> AddProcess(ionisation, -1,2,2);
manager -> AddProcess(new G4StepLimiter(),-1,-1, 3);
// protons, ions, pions, kaons, etc.
}
//protons and generic hadrons
if (( charge != 0. ) && particleName != "e+" && particleName != "mu+" &&
particleName != "e-" && particleName != "mu-")
particleName != "e-" && particleName != "mu-" && particleName !="GenericIon")
{
if((!particle -> IsShortLived()) &&
(particle -> GetParticleName() != "chargedgeantino"))
@@ -37,13 +37,14 @@
#include "HadrontherapyMatrix.hh"
#include "HadrontherapyAnalysisManager.hh"
#include "globals.hh"
#include <fstream>
HadrontherapyMatrix::HadrontherapyMatrix()
{
// Number of the voxels of the phantom
numberVoxelX = 80;
numberVoxelY = 80;
numberVoxelZ = 80;
numberVoxelX = 200;
numberVoxelY = 200;
numberVoxelZ = 200;
// Create the matrix
matrix = new G4double[numberVoxelX*numberVoxelY*numberVoxelZ];
@@ -86,33 +87,32 @@ void HadrontherapyMatrix::TotalEnergyDeposit()
G4int k;
G4int j;
G4int i;
if (matrix)
{
for(G4int l = 0; l < numberVoxelZ; l++)
{
k = l;
for(G4int m = 0; m < numberVoxelY; m++)
{
j = m * numberVoxelZ + k;
for(G4int n = 0; n < numberVoxelX; n++)
{
i = n* numberVoxelZ * numberVoxelY + j;
if(matrix[i] != 0)
{
#ifdef G4ANALYSIS_USE
HadrontherapyAnalysisManager* analysis =
HadrontherapyAnalysisManager::getInstance();
analysis -> FillEnergyDeposit(n, m, k, matrix[i]);
analysis -> BraggPeak(n, matrix[i]);
#endif
}
}
for(G4int l = 0; l < numberVoxelZ; l++)
{
k = l;
}
}
for(G4int m = 0; m < numberVoxelY; m++)
{
j = m * numberVoxelZ + k;
for(G4int n = 0; n < numberVoxelX; n++)
{
i = n* numberVoxelZ * numberVoxelY + j;
if(matrix[i] != 0)
{
#ifdef G4ANALYSIS_USE
HadrontherapyAnalysisManager* analysis =
HadrontherapyAnalysisManager::getInstance();
analysis -> FillEnergyDeposit(n, m, k, matrix[i]);
analysis -> BraggPeak(n, matrix[i]);
#endif
}
}
}
}
}
}
@@ -1,4 +1,3 @@
//
// ********************************************************************
// * DISCLAIMER *
@@ -53,7 +52,6 @@
#include "G4Transform3D.hh"
#include "G4ios.hh"
#include <fstream>
#include <strstream>
#include "G4RunManager.hh"
HadrontherapyModulator::HadrontherapyModulator():physiMotherMod(0),
@@ -65,7 +65,8 @@ void HadrontherapyMuonStandard::ConstructProcess()
G4String particleName = particle -> GetParticleName();
if(( particleName == "mu+")|| (particleName == "mu-" ))
{//muon
{
//muon
G4VProcess* aMultipleScattering = new G4MultipleScattering();
G4VProcess* aBremsstrahlung = new G4MuBremsstrahlung();
G4VProcess* aPairProduction = new G4MuPairProduction();
@@ -94,4 +95,5 @@ void HadrontherapyMuonStandard::ConstructProcess()
pmanager -> AddProcess(new G4MuonMinusCaptureAtRest(), 0,-1,-1);
}
}
G4cout << "muon processed loaded"<<G4endl;
}
@@ -37,6 +37,12 @@
#include "G4ParticleDefinition.hh"
#include "G4ParticleTypes.hh"
#include "G4ParticleTable.hh"
#include "G4LeptonConstructor.hh"
#include "G4BosonConstructor.hh"
#include "G4MesonConstructor.hh"
#include "G4BaryonConstructor.hh"
#include "G4ShortLivedConstructor.hh"
#include "G4IonConstructor.hh"
HadrontherapyParticles::HadrontherapyParticles(const G4String& name)
: G4VPhysicsConstructor(name)
@@ -46,45 +52,22 @@ HadrontherapyParticles::~HadrontherapyParticles()
{}
void HadrontherapyParticles::ConstructParticle()
{
G4Gamma::GammaDefinition();
{
G4LeptonConstructor lepton;
lepton.ConstructParticle();
G4BosonConstructor boson;
boson.ConstructParticle();
// *******//
// leptons//
// *******//
G4MesonConstructor meson;
meson.ConstructParticle();
G4Electron::ElectronDefinition();
G4Positron::PositronDefinition();
G4MuonPlus::MuonPlusDefinition();
G4MuonMinus::MuonMinusDefinition();
G4NeutrinoE::NeutrinoEDefinition();
G4AntiNeutrinoE::AntiNeutrinoEDefinition();
G4NeutrinoMu::NeutrinoMuDefinition();
G4AntiNeutrinoMu::AntiNeutrinoMuDefinition();
G4BaryonConstructor baryon;
baryon.ConstructParticle();
// ********//
// mesons //
// ********//
G4PionPlus::PionPlusDefinition();
G4PionMinus::PionMinusDefinition();
G4PionZero::PionZeroDefinition();
G4KaonPlus::KaonPlusDefinition();
G4KaonMinus::KaonMinusDefinition();
G4ShortLivedConstructor shortLived;
shortLived.ConstructParticle();
// **********//
// barions //
// **********//
G4Proton::ProtonDefinition();
G4AntiProton::AntiProtonDefinition();
G4Neutron::NeutronDefinition();
G4AntiNeutron::AntiNeutronDefinition();
// ******//
// ions //
// ******//
G4Deuteron::DeuteronDefinition();
G4Triton::TritonDefinition();
G4He3::He3Definition();
G4Alpha::AlphaDefinition();
G4GenericIon::GenericIonDefinition();
G4IonConstructor ion;
ion.ConstructParticle();
}
@@ -35,6 +35,7 @@
// ----------------------------------------------------------------------------
#include "HadrontherapyPhantomSD.hh"
#include "HadrontherapyAnalysisManager.hh"
#include "HadrontherapyPhantomHit.hh"
#include "G4Step.hh"
#include "G4VTouchable.hh"
@@ -78,6 +79,9 @@ G4bool HadrontherapyPhantomSD::ProcessHits(G4Step* aStep, G4TouchableHistory* RO
G4int k = ROhist -> GetReplicaNumber(0);
G4int i = ROhist -> GetReplicaNumber(2);
G4int j = ROhist -> GetReplicaNumber(1);
G4String particleName = aStep -> GetTrack() -> GetDynamicParticle() ->
GetDefinition() -> GetParticleName();
if(energyDeposit != 0)
{
@@ -86,7 +90,45 @@ G4bool HadrontherapyPhantomSD::ProcessHits(G4Step* aStep, G4TouchableHistory* RO
phantomHit -> SetEdepAndPosition(i, j, k, energyDeposit);
HitsCollection -> insert(phantomHit);
}
// Energy deposit of secondary particles along X (integrated on Y and Z)
#ifdef G4ANALYSIS_USE
HadrontherapyAnalysisManager* analysis =
HadrontherapyAnalysisManager::getInstance();
if(energyDeposit != 0)
{
if(aStep -> GetTrack() -> GetTrackID()!= 1)
{
if (particleName == "proton")
analysis -> SecondaryProtonEnergyDeposit(i, energyDeposit/MeV);
if (particleName == "neutron")
analysis -> SecondaryNeutronEnergyDeposit(i, energyDeposit/MeV);
if (particleName == "alpha")
analysis -> SecondaryAlphaEnergyDeposit(i, energyDeposit/MeV);
if (particleName == "gamma")
analysis -> SecondaryGammaEnergyDeposit(i, energyDeposit/MeV);
if (particleName == "e-")
analysis -> SecondaryElectronEnergyDeposit(i, energyDeposit/MeV);
if (particleName == "triton")
analysis -> SecondaryTritonEnergyDeposit(i, energyDeposit/MeV);
if (particleName == "deuteron")
analysis -> SecondaryDeuteronEnergyDeposit(i, energyDeposit/MeV);
if (particleName == "pi+" || particleName == "pi-" || particleName == "pi0")
analysis -> SecondaryPionEnergyDeposit(i, energyDeposit/MeV);
}
}
#endif
return true;
}
@@ -50,17 +50,27 @@
#include "HadrontherapyPositronStandard.hh"
#include "HadrontherapyPositronPenelope.hh"
#include "HadrontherapyIonLowE.hh"
#include "HadrontherapyIonLowEZiegler1977.hh"
#include "HadrontherapyIonLowEZiegler1985.hh"
#include "HadrontherapyIonLowEZiegler2000.hh"
#include "HadrontherapyIonStandard.hh"
#include "HadrontherapyProtonPrecompound.hh"
#include "HadrontherapyProtonPrecompoundFermi.hh"
#include "HadrontherapyProtonPrecompoundGEM.hh"
#include "HadrontherapyProtonPrecompoundGEMFermi.hh"
#include "HadrontherapyProtonBinary.hh"
#include "HadrontherapyMuonStandard.hh"
#include "HadrontherapyDecay.hh"
#include "HadrontherapyParticles.hh"
#include "G4ParticleDefinition.hh"
#include "G4ParticleTypes.hh"
#include "G4ParticleTable.hh"
HadrontherapyPhysicsList::HadrontherapyPhysicsList(): G4VModularPhysicsList(),
electronIsRegistered(false),
positronIsRegistered(false),
photonIsRegistered(false),
ionIsRegistered(false),
protonPrecompoundIsRegistered(false),
protonHadronicIsRegistered(false),
muonIsRegistered(false),
decayIsRegistered(false)
{
@@ -69,6 +79,8 @@ HadrontherapyPhysicsList::HadrontherapyPhysicsList(): G4VModularPhysicsList(),
defaultCutValue = 10. * mm;
messenger = new HadrontherapyPhysicsListMessenger(this);
SetVerboseLevel(1);
RegisterPhysics( new HadrontherapyParticles("particles") );
}
HadrontherapyPhysicsList::~HadrontherapyPhysicsList()
@@ -218,7 +230,7 @@ void HadrontherapyPhysicsList::AddPhysicsList(const G4String& name)
if (positronIsRegistered)
{
G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
<< " cannot be registered ---- positron List already existing" << G4endl;
<< " cannot be registered ---- positron List already existing" << G4endl;
}
else
{
@@ -228,9 +240,10 @@ void HadrontherapyPhysicsList::AddPhysicsList(const G4String& name)
positronIsRegistered = true;
}
}
// Register Low Energy ICRU processes for protons and ions
// Register Low Energy processes for protons and ions
// Stopping power parameterisation: ICRU49 (default model)
if (name == "ion-LowE")
{
if (ionIsRegistered)
@@ -248,6 +261,65 @@ void HadrontherapyPhysicsList::AddPhysicsList(const G4String& name)
}
}
// Register Low Energy processes for protons and ions
// Stopping power parameterisation: Ziegler 1977
if (name == "ion-LowE-ziegler1977")
{
if (ionIsRegistered)
{
G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
<< " cannot be registered ---- proton List already existing"
<< G4endl;
}
else
{
G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
<< " is registered" << G4endl;
RegisterPhysics( new HadrontherapyIonLowEZiegler1977(name) );
ionIsRegistered = true;
}
}
// Register Low Energy processes for protons and ions
// Stopping power parameterisation: Ziegler 1985
if (name == "ion-LowE-ziegler1985")
{
if (ionIsRegistered)
{
G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
<< " cannot be registered ---- proton List already existing"
<< G4endl;
}
else
{
G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
<< " is registered" << G4endl;
RegisterPhysics( new HadrontherapyIonLowEZiegler1985(name) );
ionIsRegistered = true;
}
}
// Register Low Energy processes for protons and ions
// Stopping power parameterisation: SRIM2000
if (name == "ion-LowE-ziegler2000")
{
if (ionIsRegistered)
{
G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
<< " cannot be registered ---- proton List already existing"
<< G4endl;
}
else
{
G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
<< " is registered" << G4endl;
RegisterPhysics( new HadrontherapyIonLowEZiegler2000(name) );
ionIsRegistered = true;
}
}
// Register Standard processes for protons and ions
if (name == "ion-standard")
@@ -302,14 +374,20 @@ void HadrontherapyPhysicsList::AddPhysicsList(const G4String& name)
decayIsRegistered = true;
}
}
//
//
// Register the hadronic physics for protons, neutrons, ions
//
//
//--------------------------------------------------------------------------------------------
//Begin Hadronic Precompound models
//--------------------------------------------------------------------------------------------
//
// Register the hadronic physics for protons, neutrons, ions
//
//Precompound Default Evaporation
if (name == "proton-precompound")
{
if (protonPrecompoundIsRegistered)
if (protonHadronicIsRegistered)
{
G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
<< " cannot be registered ---- decay List already existing"
@@ -320,10 +398,103 @@ void HadrontherapyPhysicsList::AddPhysicsList(const G4String& name)
G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
<< " is registered" << G4endl;
RegisterPhysics( new HadrontherapyProtonPrecompound(name) );
protonPrecompoundIsRegistered = true;
protonHadronicIsRegistered = true;
}
}
//Precompond Default Evaporation + Fermi Breck-up Model
if (name == "proton-precompoundFermi")
{
if (protonHadronicIsRegistered)
{
G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
<< " cannot be registered ---- decay List already existing"
<< G4endl;
}
else
{
G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
<< " is registered" << G4endl;
RegisterPhysics( new HadrontherapyProtonPrecompoundFermi(name) );
protonHadronicIsRegistered = true;
}
}
//Precompound GEM Evaporation
if (name == "proton-precompoundGEM")
{
if (protonHadronicIsRegistered)
{
G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
<< " cannot be registered ---- decay List already existing"
<< G4endl;
}
else
{
G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
<< " is registered" << G4endl;
RegisterPhysics( new HadrontherapyProtonPrecompoundGEM(name) );
protonHadronicIsRegistered = true;
}
}
//Precompound GEM Evaporation + Fermi Breck-up Model
if (name == "proton-precompoundGEMFermi")
{
if (protonHadronicIsRegistered)
{
G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
<< " cannot be registered ---- decay List already existing"
<< G4endl;
}
else
{
G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
<< " is registered" << G4endl;
RegisterPhysics( new HadrontherapyProtonPrecompoundGEMFermi(name) );
protonHadronicIsRegistered = true;
}
}
//-------------------------------------------------------------------------------------------------
// End Hadronic Precompound models
//-------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
//Begin Hadronic Binary models
//--------------------------------------------------------------------------------------------
// Binary cascade model with the default precompound
if (name == "proton-precompound-binary")
{
if (protonHadronicIsRegistered)
{
G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
<< " cannot be registered ---- decay List already existing"
<< G4endl;
}
else
{
G4cout << "HadrontherapyPhysicsList::AddPhysicsList: " << name
<< " is registered" << G4endl;
RegisterPhysics( new HadrontherapyProtonBinary(name) );
protonHadronicIsRegistered = true;
}
}
//--------------------------------------------------------------------------------------------
// End Hadronic Binary models
//--------------------------------------------------------------------------------------------
if (electronIsRegistered && positronIsRegistered && photonIsRegistered &&
ionIsRegistered)
{
@@ -331,10 +502,11 @@ void HadrontherapyPhysicsList::AddPhysicsList(const G4String& name)
"Electromagnetic physics is registered for electron, positron, photons, protons"
<< G4endl;
}
if (protonPrecompoundIsRegistered && muonIsRegistered && decayIsRegistered)
{
G4cout << " Hadronic physics is registered" << G4endl;
}
if (protonHadronicIsRegistered && muonIsRegistered && decayIsRegistered)
{
G4cout << " Hadronic physics is registered" << G4endl;
}
}
void HadrontherapyPhysicsList::SetCuts()
@@ -353,6 +525,8 @@ void HadrontherapyPhysicsList::SetCuts()
cuts -> SetProductionCut(regionCut,G4ProductionCuts::GetIndex("gamma"));
cuts -> SetProductionCut(regionCut,G4ProductionCuts::GetIndex("e-"));
cuts -> SetProductionCut(regionCut,G4ProductionCuts::GetIndex("e+"));
cuts -> SetProductionCut(regionCut,G4ProductionCuts::GetIndex("proton"));
cuts -> SetProductionCut(regionCut,G4ProductionCuts::GetIndex("genericIons"));
region -> SetProductionCuts(cuts);
if (verboseLevel>0) DumpCutValuesTable();
@@ -0,0 +1,268 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// $Id: HadrontherapyProtonBinary.cc; May 2005
// ----------------------------------------------------------------------------
// GEANT 4 - Hadrontherapy example
// ----------------------------------------------------------------------------
// Code developed by:
//
// G.A.P. Cirrone(a)*, F. Di Rosa(a), S. Guatelli(b), G. Russo(a)
//
// (a) Laboratori Nazionali del Sud
// of the National Institute for Nuclear Physics, Catania, Italy
// (b) National Institute for Nuclear Physics Section of Genova, genova, Italy
//
// * cirrone@lns.infn.it
// ----------------------------------------------------------------------------
#include "HadrontherapyProtonBinary.hh"
#include "G4ParticleDefinition.hh"
#include "G4ProcessManager.hh"
#include "G4ProcessVector.hh"
#include "G4ParticleTypes.hh"
#include "G4ParticleTable.hh"
#include "G4Material.hh"
#include "G4LElastic.hh"
#include "G4BinaryCascade.hh"
#include "G4CascadeInterface.hh"
#include "G4PionPlusInelasticProcess.hh"
#include "G4LEPionPlusInelastic.hh"
#include "G4LEPionMinusInelastic.hh"
#include "G4HEPionPlusInelastic.hh"
#include "G4HEPionMinusInelastic.hh"
#include "G4PionMinusInelasticProcess.hh"
#include "G4PionPlusInelasticProcess.hh"
#include "G4LEPionMinusInelastic.hh"
#include "G4HEPionMinusInelastic.hh"
#include "G4PiMinusAbsorptionAtRest.hh"
#include "G4AntiProtonInelasticProcess.hh"
#include "G4LEAntiProtonInelastic.hh"
#include "G4HEAntiProtonInelastic.hh"
#include "G4AntiProtonAnnihilationAtRest.hh"
// BINARY + PRECOMPOUND PHYSICS LIST
//
// BINARY + PRECOMPOUND + EVAPORATION(DEFAULT EVAPORATION) NO FERMI BREAK-UP FOR PROTONS, NEUTRONS AND PIONS
//
// LEP MODEL UP TO 100 MEV AND BINARY ION MODEL BETWEEN 80 MEV AND 40. GEV
// FOR DEUTERON, TRITON, HE3, ALPHA
//
//FISSION AND HADRON CAPTURE FOR NEUTRONS BETWEEN 0. MEV AND 100. TEV
//
HadrontherapyProtonBinary::HadrontherapyProtonBinary(const G4String& name):
G4VPhysicsConstructor(name)
{
// Energy limits of the model for ions
binaryLightIonLowLimit = 80.*MeV;
binaryLightIonHighLimit = 40.*GeV;
LEPHighLimit = 100.*MeV;
// Energy limits for protons, neutrons and pions
precompoundLowLimit = 100.*MeV;
precompoundHighLimit = 300.*MeV;
neutronLowLimit = 0.*TeV;
neutronHighLimit = 100.*TeV;
binaryLowLimit = 0.*MeV;
binaryHighLimit = 300.*MeV;
}
HadrontherapyProtonBinary::~HadrontherapyProtonBinary()
{}
void HadrontherapyProtonBinary::ConstructProcess()
{
// ELASTIC SCATTERING FOR PROTON, NEUTRON, IONS
G4LElastic* elastic_Model = new G4LElastic();
G4HadronElasticProcess* elastic = new G4HadronElasticProcess();
elastic -> RegisterMe(elastic_Model);
// PRECOMPOUND MODEL
G4PreCompoundModel* thePreEquilib = new G4PreCompoundModel(&theHandler);
thePreEquilib -> SetMinEnergy(precompoundLowLimit);
thePreEquilib -> SetMaxEnergy(precompoundHighLimit);
/////////////////////////////////////////////////////////////////////////////
// HADRONIC PHYSICS FOR PROTONS
G4ParticleDefinition* particle = 0;
G4ProcessManager* pmanager = 0;
particle = G4Proton::Proton();
pmanager = particle -> GetProcessManager();
// INELASTIC SCATTERING:
//BINARY - PRECOMPOUND + DEFAULT EVAPORATION NO FERMI BREAK-UP
G4BinaryCascade* thePBC = new G4BinaryCascade();
thePBC -> SetMinEnergy(binaryLowLimit);
thePBC -> SetMaxEnergy(binaryHighLimit);
theIPProton.RegisterMe(thePBC);
theIPProton.RegisterMe(thePreEquilib);
theIPProton.AddDataSet(&thePXSec);
pmanager -> AddDiscreteProcess(&theIPProton);
// ELASTIC SCATTERING
pmanager -> AddDiscreteProcess(elastic); //ELASIC SCATTERING
/////////////////////////////////////////////////////////////////////////////
////////// VERIFICARE LA POSSIBILITA' DEL BINARY PER PIONI
/////////////////////////////////////////////////////////////////////////////
// HADRONIC PHYSICS FOR PION PLUS
particle = G4PionPlus::PionPlus();
// ELASTIC SCATTERING
pmanager -> AddDiscreteProcess(elastic);
// INELASTIC SCATTERING: BINARY - PRECOMPOUND + DEFAULT EVAPORATION NO FERMI BREAK-UP
pmanager -> AddDiscreteProcess(elastic);
G4PionPlusInelasticProcess* thePionPlusInelasticProcess = new G4PionPlusInelasticProcess("inelastic");
G4PreCompoundModel* theLEPionPlusInelasticModel = new G4PreCompoundModel(&theHandler);
thePionPlusInelasticProcess -> RegisterMe(theLEPionPlusInelasticModel);
pmanager -> AddDiscreteProcess(thePionPlusInelasticProcess);
/////////////////////////////////////////////////////////////////////////////
//HADRONIC PHYSICS FOR PION MINUS
particle = G4PionMinus::PionMinus();
// ELASTIC SCATTERING
pmanager -> AddDiscreteProcess(elastic);
// INELASTIC SCATTERING: BINARY - PRECOMPOUND + DEFAULT EVAPORATION NO FERMI BREAK-UP
G4PionMinusInelasticProcess* thePionMinusInelasticProcess = new G4PionMinusInelasticProcess("inelastic");
G4PreCompoundModel* theLEPionMinusInelasticModel = new G4PreCompoundModel(&theHandler);
thePionMinusInelasticProcess -> RegisterMe(theLEPionMinusInelasticModel);
pmanager -> AddDiscreteProcess(thePionMinusInelasticProcess);
/////////////////////////////////////////////////////////////////////////////
// Neutron
particle = G4Neutron::Neutron();
pmanager = particle->GetProcessManager();
thePreEquilib -> SetMinEnergy(precompoundLowLimit);
thePreEquilib -> SetMaxEnergy(precompoundHighLimit);
G4BinaryCascade* theNBC = new G4BinaryCascade();
theNBC->SetMinEnergy(binaryLowLimit);
theNBC->SetMaxEnergy(binaryHighLimit);
theIPNeutron.RegisterMe(theNBC);
theIPNeutron.RegisterMe(thePreEquilib);
theIPNeutron.AddDataSet(&theNXSec);
pmanager -> AddDiscreteProcess(&theIPNeutron);
pmanager -> AddDiscreteProcess(elastic); // ELASTIC SCATTERING
//Hadron Capture
G4HadronCaptureProcess* neutronCapture = new G4HadronCaptureProcess();
G4LCapture* capture_model = new G4LCapture();
capture_model -> SetMinEnergy(neutronLowLimit);
capture_model -> SetMaxEnergy(neutronHighLimit);
neutronCapture -> RegisterMe(capture_model);
pmanager -> AddDiscreteProcess(neutronCapture);
//Fission
G4HadronFissionProcess* fission = new G4HadronFissionProcess();
G4LFission* fission_model = new G4LFission();
fission_model -> SetMinEnergy(neutronLowLimit);
fission_model -> SetMaxEnergy(neutronHighLimit);
fission -> RegisterMe(fission_model);
pmanager -> AddDiscreteProcess(fission);
/////////////////////////////////////////////////////////////////////////////
// ION HADRONIC PHYSICS LIST
G4TripathiCrossSection * TripathiCrossSection= new G4TripathiCrossSection;
G4IonsShenCrossSection * aShen = new G4IonsShenCrossSection;
// INELASTIC SCATTERING FOR IONS
G4BinaryLightIonReaction* theBC = new G4BinaryLightIonReaction();
theBC -> SetMinEnergy(binaryLightIonLowLimit);
theBC -> SetMaxEnergy(binaryLightIonHighLimit);
/////////////////////////////////////////////////////////////////////////////
// deuteron
particle = G4Deuteron::Deuteron();
pmanager = particle -> GetProcessManager();
// INELASTIC SCATTERING
G4LEDeuteronInelastic* theDIModel = new G4LEDeuteronInelastic;
theDIModel -> SetMaxEnergy(LEPHighLimit);
theIPdeuteron.AddDataSet(TripathiCrossSection);
theIPdeuteron.AddDataSet(aShen);
theIPdeuteron.RegisterMe(theDIModel);
theIPdeuteron.RegisterMe(theBC);
pmanager -> AddDiscreteProcess(&theIPdeuteron);
//ELASTIC SCATTERING
pmanager -> AddDiscreteProcess(elastic);
/////////////////////////////////////////////////////////////////////////////
// triton
particle = G4Triton::Triton();
pmanager = particle->GetProcessManager();
// INELASTIC SCATTERING
G4LETritonInelastic* theTIModel = new G4LETritonInelastic;
theTIModel -> SetMaxEnergy(LEPHighLimit);
theIPtriton.AddDataSet(TripathiCrossSection);
theIPtriton.AddDataSet(aShen);
theIPtriton.RegisterMe(theTIModel);
theIPtriton.RegisterMe(theBC);
pmanager -> AddDiscreteProcess(&theIPtriton);
//ELASTIC SCATTERING
pmanager -> AddDiscreteProcess(elastic); //ELASTIC SCATTERING
/////////////////////////////////////////////////////////////////////////////
// alpha
particle = G4Alpha::Alpha();
pmanager = particle->GetProcessManager();
// INELASTIC SCATTERING
G4LEAlphaInelastic* theAIModel = new G4LEAlphaInelastic;
theAIModel -> SetMaxEnergy(LEPHighLimit);
theIPalpha.AddDataSet(TripathiCrossSection);
theIPalpha.AddDataSet(aShen);
theIPalpha.RegisterMe(theAIModel);
theIPalpha.RegisterMe(theBC);
pmanager -> AddDiscreteProcess(&theIPalpha);
//ELASTIC SCATTERING
pmanager -> AddDiscreteProcess(elastic); //ELASTIC SCATTERING
/////////////////////////////////////////////////////////////////////////////
// He3
particle = G4He3::He3();
pmanager = particle->GetProcessManager();
G4BinaryLightIonReaction * theGenIonBC= new G4BinaryLightIonReaction;
G4HadronInelasticProcess* theIPHe3 =
new G4HadronInelasticProcess("He3Inelastic",particle);
theIPHe3 -> AddDataSet(TripathiCrossSection);
theIPHe3 -> AddDataSet(aShen);
theIPHe3 -> RegisterMe(theGenIonBC);
pmanager -> AddDiscreteProcess(theIPHe3);
pmanager -> AddDiscreteProcess(elastic); //ELASTIC SCATTERING
}
@@ -100,249 +100,186 @@ HadrontherapyProtonPrecompound::~HadrontherapyProtonPrecompound()
void HadrontherapyProtonPrecompound::ConstructProcess()
{
G4ParticleDefinition* particle = 0;
G4ProcessManager* pmanager = 0;
G4ParticleDefinition* particle = 0;
G4ProcessManager* pmanager = 0;
// Elastic scattering
// for protons, neutrons, pions, ions
// LOW ENERGY ELASTIC SCATTERING
// FOR PROTON, NEUTRON, IONS
G4LElastic* elastic_Model = new G4LElastic();
G4HadronElasticProcess* elastic = new G4HadronElasticProcess();
elastic -> RegisterMe(elastic_Model);
// Activation of Precompound model + evaporation (default evaporation)
// The Fermi break-up is not active (default condition)
// for protons, pions and neutrons
G4PreCompoundModel* preEquilibrium = new G4PreCompoundModel(&theHandler);
preEquilibrium -> SetMinEnergy(precompoundLowLimit);
preEquilibrium -> SetMaxEnergy(precompoundHighLimit);
// INELASTIC SCATTERING
// Binary Cascade
G4BinaryLightIonReaction* theBC = new G4BinaryLightIonReaction();
// Set the min and max energy for the Binary Cascade
theBC -> SetMinEnergy(binaryLightIonLowLimit);
theBC -> SetMaxEnergy(binaryLightIonHighLimit);
// TRIPATHI CROSS SECTION
// Implementation of formulas in analogy to NASA technical paper 3621 by
// Tripathi, et al. Cross-sections for ion ion scattering
G4TripathiCrossSection* TripathiCrossSection = new G4TripathiCrossSection;
// IONS SHEN CROSS SECTION
// Implementation of formulas
// Shen et al. Nuc. Phys. A 491 130 (1989)
// Total Reaction Cross Section for Heavy-Ion Collisions
G4IonsShenCrossSection* aShen = new G4IonsShenCrossSection;
//----------//
// Protons //
//----------//
//--------------------------------------------------------------------------------------
// Inelastic process for protons
// Proton PRECOMPOUND + EVAPORATION(DEFAULT EVAPORATION)+ FERMI BREAK-UP
particle = G4Proton::Proton();
pmanager = particle -> GetProcessManager();
pmanager = particle->GetProcessManager();
// Activation of the Precompound model for the proton
// inelastic process
//G4ProtonInelasticProcess protonInelasticScattering;
protonInelasticScattering.RegisterMe(preEquilibrium);
// Set the cross section for the proton inelastic process
//G4ProtonInelasticCrossSection protonInelasticCrossSection;
protonInelasticScattering.AddDataSet(&protonInelasticCrossSection);
G4PreCompoundModel* thePreEquilib = new G4PreCompoundModel(&theHandler);
// Set the range of minimum and maximum energy value
thePreEquilib -> SetMinEnergy(precompoundLowLimit);
thePreEquilib -> SetMaxEnergy(precompoundHighLimit);
// Model Registration
theIPProton.RegisterMe(thePreEquilib);
// Active the Cross-sections for proton nuclear scattering up to 20 GeV
theIPProton.AddDataSet(&thePXSec);
// Active the proton inelastic scattering using the precompound model
pmanager -> AddDiscreteProcess(&theIPProton);
// Active the Hadron Elastic Process
pmanager -> AddDiscreteProcess(elastic);
// Set the proton hadronic processes: inelastic and elastic scattering
pmanager -> AddDiscreteProcess(&protonInelasticScattering);
pmanager -> AddDiscreteProcess(elastic);
//----------//
// Neutrons //
//----------//
// Inelastic process for neutrons
particle = G4Neutron::Neutron();
pmanager = particle -> GetProcessManager();
// Activation of the Precompound model for the neutrons
// inelastic process
neutronInelasticScattering.RegisterMe(preEquilibrium);
// Set the cross section for the neutron inelastic process
neutronInelasticScattering.AddDataSet(&neutronInelasticCrossSection);
// Set the neutron hadronic processes: inelastic and elastic scattering
pmanager -> AddDiscreteProcess(&neutronInelasticScattering);
pmanager -> AddDiscreteProcess(elastic);
//----------//
// Pions //
//----------//
// Inelastic process for pions
// Pions plus
particle = G4PionPlus::PionPlus();
pmanager = particle -> GetProcessManager();
// Activation of the Precompound model for the pion plus
// inelastic process
pionPlusInelasticScattering.RegisterMe(preEquilibrium);
// Set the cross section for the pion inelastic process
pionPlusInelasticScattering.AddDataSet(&pionPlusInelasticCrossSection);
// Set the pion plus hadronic processes: inelastic and elastic scattering
pmanager -> AddDiscreteProcess(&pionPlusInelasticScattering);
pmanager -> AddDiscreteProcess(elastic);
// Pions minus
particle = G4PionMinus::PionMinus();
pmanager = particle -> GetProcessManager();
// Activation of the Precompound model for the pion minus
// inelastic process
pionMinusInelasticScattering.RegisterMe(preEquilibrium);
// Set the cross section for the pion minus inelastic process
pionMinusInelasticScattering.AddDataSet(&pionMinusInelasticCrossSection);
// Set the pion minus hadronic processes: inelastic and elastic scattering
pmanager -> AddDiscreteProcess(&pionMinusInelasticScattering);
pmanager -> AddDiscreteProcess(elastic);
pmanager -> AddRestProcess(new G4PiMinusAbsorptionAtRest, ordDefault);
//------------------//
//d, t, 3He, alpha //
//------------------//
//Inelastic scattering for d, t, 3He, alpha
//Activation of the Low Energy Parameterised (LEP) model and binary ion model
// for the inelastic scattering
G4BinaryLightIonReaction* binaryIonCascade = new G4BinaryLightIonReaction();
binaryIonCascade -> SetMinEnergy(binaryLightIonLowLimit);
binaryIonCascade -> SetMaxEnergy(binaryLightIonHighLimit);
// Set the cross section for the inelastic scattering
TripathiCrossSection = new G4TripathiCrossSection;
ShenCrossSection = new G4IonsShenCrossSection;
// Deuteron
// deuteron
particle = G4Deuteron::Deuteron();
pmanager = particle -> GetProcessManager();
// Activate the LEP model for the d inelastic scattering
G4LEDeuteronInelastic* deuteronLEPModel = new G4LEDeuteronInelastic;
deuteronLEPModel -> SetMaxEnergy(LEPHighLimit);
// Final state production model for Deuteron inelastic scattering below 100 MeV
G4LEDeuteronInelastic* theDIModel = new G4LEDeuteronInelastic;
// Set the maximum energy for LEP model
theDIModel -> SetMaxEnergy(LEPHighLimit);
// Active the Tripathi and aShen Cross Section
theIPdeuteron.AddDataSet(TripathiCrossSection);
theIPdeuteron.AddDataSet(aShen);
// Register the Deuteron Inelastic and Binary Cascade Model
theIPdeuteron.RegisterMe(theDIModel);
theIPdeuteron.RegisterMe(theBC);
// Active the deuteron inelastic scattering using the deuteron inelastic and binary cascade model
pmanager -> AddDiscreteProcess(&theIPdeuteron);
// Active the Hadron Elastic Process
pmanager -> AddDiscreteProcess(elastic);
// Activate the binary ion model model for the d inelastic scattering
deuteronInelasticScattering.RegisterMe(deuteronLEPModel);
deuteronInelasticScattering.RegisterMe(binaryIonCascade);
// Definition of the the deuteron inelastic scattering cross section
deuteronInelasticScattering.AddDataSet(TripathiCrossSection);
deuteronInelasticScattering.AddDataSet(ShenCrossSection);
// Set the deuteron hadronic processes: inelastic and elastic scattering
pmanager -> AddDiscreteProcess(&deuteronInelasticScattering);
pmanager -> AddDiscreteProcess(elastic);
// Triton
// triton
particle = G4Triton::Triton();
pmanager = particle -> GetProcessManager();
// Activate the LEP model for the t inelastic scattering
G4LETritonInelastic* tritonLEPModel = new G4LETritonInelastic;
tritonLEPModel -> SetMaxEnergy(LEPHighLimit);
// Activate the binary ion model model for the t inelastic scattering
tritonInelasticScattering.RegisterMe(tritonLEPModel);
tritonInelasticScattering.RegisterMe(binaryIonCascade);
// Definition of the the triton inelastic scattering cross section
tritonInelasticScattering.AddDataSet(TripathiCrossSection);
tritonInelasticScattering.AddDataSet(ShenCrossSection);
// Set the triton hadronic processes: inelastic and elastic scattering
pmanager -> AddDiscreteProcess(&tritonInelasticScattering);
pmanager -> AddDiscreteProcess(elastic);
pmanager = particle->GetProcessManager();
// Final state production model for Triton inelastic scattering below 100 MeV
G4LETritonInelastic* theTIModel = new G4LETritonInelastic;
// Set the maximum energy for LEP model
theTIModel -> SetMaxEnergy(LEPHighLimit);
// Active the Tripathi and aShen Cross Section
theIPtriton.AddDataSet(TripathiCrossSection);
theIPtriton.AddDataSet(aShen);
// Register the Triton Inelastic and Binary Cascade Model
theIPtriton.RegisterMe(theTIModel);
theIPtriton.RegisterMe(theBC);
// Active the triton inelastic scattering using the triton inelastic and binary cascade model
pmanager -> AddDiscreteProcess(&theIPtriton);
// Active the Hadron Elastic Process
pmanager -> AddDiscreteProcess(elastic);
// alpha
particle = G4Alpha::Alpha();
pmanager = particle->GetProcessManager();
// Final state production model for Alpha inelastic scattering below 20 GeV
G4LEAlphaInelastic* theAIModel = new G4LEAlphaInelastic;
// Set the maximum energy for LEP model
theAIModel -> SetMaxEnergy(LEPHighLimit);
// Register the Triton Inelastic and Binary Cascade Model
theIPalpha.AddDataSet(TripathiCrossSection);
theIPalpha.AddDataSet(aShen);
// Register the Alpha Inelastic and Binary Cascade Model
theIPalpha.RegisterMe(theAIModel);
theIPalpha.RegisterMe(theBC);
// Active the alpha inelastic scattering using the alpha inelastic and binary cascade model
pmanager -> AddDiscreteProcess(&theIPalpha);
// Active the Hadron Elastic Process
pmanager -> AddDiscreteProcess(elastic);
// He3
particle = G4He3::He3();
pmanager = particle->GetProcessManager();
// Binary Cascade inelastic scattering for ions
G4BinaryLightIonReaction * theGenIonBC= new G4BinaryLightIonReaction;
// Inelastic Scattering for ions
G4HadronInelasticProcess* theIPHe3 = new G4HadronInelasticProcess("He3Inelastic",particle);
// Active the Tripathi and aShen Cross Section
theIPHe3 -> AddDataSet(TripathiCrossSection);
theIPHe3 -> AddDataSet(aShen);
// Register the Alpha Binary Cascade Model
theIPHe3 -> RegisterMe(theGenIonBC);
// Active the Inelastic Process for He3
pmanager -> AddDiscreteProcess(theIPHe3);
// Active the Hadron Elastic Process
pmanager -> AddDiscreteProcess(elastic);
// Neutron
particle = G4Neutron::Neutron();
pmanager = particle->GetProcessManager();
// Register the Precompound model
theIPNeutron.RegisterMe(thePreEquilib);
// Active the Cross-sections for neutron nuclear scattering from 14 MeV up to 20 GeV
theIPNeutron.AddDataSet(&theNXSec);
// Active the neutron inelastic process
pmanager -> AddDiscreteProcess(&theIPNeutron);
// Active the Hadron Elastic Process
pmanager -> AddDiscreteProcess(elastic);
// Pions plus
particle = G4PionPlus::PionPlus();
pmanager = particle -> GetProcessManager();
// Define the inelastic process for pions plus
G4PionPlusInelasticProcess* thePionPlusInelasticProcess = new G4PionPlusInelasticProcess("inelastic");
// Register the Low Energy Inelastic Model for pions plus
thePionPlusInelasticProcess -> RegisterMe(thePreEquilib);
// Active the inelastic process for pions plus
pmanager->AddDiscreteProcess(thePionPlusInelasticProcess);
pmanager -> AddDiscreteProcess(elastic);
// Activate the LEP model for the alpha inelastic scattering
G4LEAlphaInelastic* alphaLEPModel = new G4LEAlphaInelastic;
alphaLEPModel -> SetMaxEnergy(LEPHighLimit);
// Activate the binary ion model model for the alpha inelastic scattering
alphaInelasticScattering.RegisterMe(alphaLEPModel);
alphaInelasticScattering.RegisterMe(binaryIonCascade);
// Definition of the alpha inelastic scattering cross section
alphaInelasticScattering.AddDataSet(TripathiCrossSection);
alphaInelasticScattering.AddDataSet(ShenCrossSection);
// Set the alpha hadronic processes: inelastic and elastic scattering
pmanager -> AddDiscreteProcess(&alphaInelasticScattering);
pmanager -> AddDiscreteProcess(elastic);
/////////////////////////////////////////////////////////////////////////////
// NEW HE3
/////////////////////////////////////////////////////////////////////////////
//TripathiCrossSection = new G4TripathiCrossSection;
//ShenCrossSection = new G4IonsShenCrossSection;
pmanager->AddDiscreteProcess(elastic);
He3InelasticProcess = new G4HadronInelasticProcess
("He3Inelastic", G4He3::He3());
He3InelasticProcess->AddDataSet(TripathiCrossSection);
He3InelasticProcess->AddDataSet(ShenCrossSection);
He3InelasticProcess->RegisterMe(binaryIonCascade);
pmanager->AddDiscreteProcess(He3InelasticProcess);
// // He3
// particle = G4He3::He3();
// pmanager = particle -> GetProcessManager();
// // Only Binary Ion model activated
// // LEP model is not availaboe for 3He
// G4HadronInelasticProcess* He3InelasticScattering =
// new G4HadronInelasticProcess("Inelastic scattering", particle);
// // Change the binary ion model limits because the LEP is not available
// //
// binaryIonCascade -> SetMinEnergy(0.*MeV);
// binaryIonCascade -> SetMaxEnergy(binaryLightIonHighLimit);
// // Definition of the 3He inelastic scattering cross section
// He3InelasticScattering -> AddDataSet(TripathiCrossSection);
// He3InelasticScattering -> AddDataSet(aShen);
// He3InelasticScattering -> RegisterMe(binaryIonCascade);
// // Set the He3 hadronic processes: inelastic and elastic scattering
// pmanager -> AddDiscreteProcess(He3InelasticScattering);
// pmanager -> AddDiscreteProcess(elastic);
// Other neutron processes
//Hadron Capture
// Pion Minus
particle = G4PionMinus::PionMinus();
pmanager = particle -> GetProcessManager();
// Define the inelastic process for pions minus
G4PionMinusInelasticProcess* thePionMinusInelasticProcess = new G4PionMinusInelasticProcess("inelastic");
// Register the inelastic model for pion minus
thePionMinusInelasticProcess -> RegisterMe(thePreEquilib);
// Active the inelastic process for pion minus
pmanager -> AddDiscreteProcess(thePionMinusInelasticProcess);
// Active Absorption process for pion minus
pmanager -> AddRestProcess(new G4PiMinusAbsorptionAtRest, ordDefault);
pmanager -> AddDiscreteProcess(elastic);
//HADRON CAPTURE
// Process for capture of neutral hadrons
G4HadronCaptureProcess* neutronCapture = new G4HadronCaptureProcess();
// Final state production model for capture of neutral hadrons in nuclei
G4LCapture* capture_model = new G4LCapture();
// Set the energy range for the capture model
capture_model -> SetMinEnergy(neutronLowLimit);
capture_model -> SetMaxEnergy(neutronHighLimit);
// Register the capture model
neutronCapture -> RegisterMe(capture_model);
// Active the neutron capture process
pmanager -> AddDiscreteProcess(neutronCapture);
//Fission
//FISSION
// Process for induced fission
G4HadronFissionProcess* fission = new G4HadronFissionProcess();
//Final state production model for induced fission
G4LFission* fission_model = new G4LFission();
// Set the energy range for the fission model
fission_model -> SetMinEnergy(neutronLowLimit);
fission_model -> SetMaxEnergy(neutronHighLimit);
// Register the fission model
fission -> RegisterMe(fission_model);
pmanager -> AddDiscreteProcess(fission);
// Active the fission process
pmanager -> AddDiscreteProcess(fission);
}
@@ -0,0 +1,298 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// $Id: HadrontherapyProtonPrecompoundFermi.cc; May 2005
// ----------------------------------------------------------------------------
// GEANT 4 - Hadrontherapy example
// ----------------------------------------------------------------------------
// Code developed by:
//
// G.A.P. Cirrone(a)*, F. Di Rosa(a), S. Guatelli(b), G. Russo(a)
//
// (a) Laboratori Nazionali del Sud
// of the National Institute for Nuclear Physics, Catania, Italy
// (b) National Institute for Nuclear Physics Section of Genova, genova, Italy
//
// * cirrone@lns.infn.it
// ----------------------------------------------------------------------------
#include "HadrontherapyProtonPrecompoundFermi.hh"
#include "G4ParticleDefinition.hh"
#include "G4ProcessManager.hh"
#include "G4ProcessVector.hh"
#include "G4ParticleTypes.hh"
#include "G4ParticleTable.hh"
#include "G4Material.hh"
#include "G4LElastic.hh"
#include "G4BinaryCascade.hh"
#include "G4CascadeInterface.hh"
#include "G4PionPlusInelasticProcess.hh"
#include "G4LEPionPlusInelastic.hh"
#include "G4LEPionMinusInelastic.hh"
#include "G4HEPionPlusInelastic.hh"
#include "G4HEPionMinusInelastic.hh"
#include "G4PionMinusInelasticProcess.hh"
#include "G4LEPionMinusInelastic.hh"
#include "G4HEPionMinusInelastic.hh"
#include "G4PiMinusAbsorptionAtRest.hh"
#include "G4AntiProtonInelasticProcess.hh"
#include "G4LEAntiProtonInelastic.hh"
#include "G4HEAntiProtonInelastic.hh"
#include "G4AntiProtonAnnihilationAtRest.hh"
#include "G4FermiBreakUp.hh"
#include "G4PiNuclearCrossSection.hh"
//
//
// PRECOMPOUND + FERMI BREAKUP PHYSICS LIST
//
// ELASTIC SCATTERING FOR ALL THE HADRONS AND IONS
// INELASTIC SCATTERING:
// * PRECOMPOUND PHYSICS LIST with DEFAULT EVAPORATION MODEL + FERMI BREAK-UP
// * PRECOMPOUND + EVAPORATION + FERMI BREAK-UP FOR PROTONS, NEUTRONS AND PIONS
// * LEP MODEL UP TO 100 MEV AND BINARY ION MODEL BETWEEN 80 MEV AND 40. GEV
// FOR DEUTERON, TRITON, HE3, ALPHA
// * FISSION AND HADRON CAPTURE FOR NEUTRONS BETWEEN 0. MEV AND 100. TEV
//
//
HadrontherapyProtonPrecompoundFermi::HadrontherapyProtonPrecompoundFermi(const G4String& name):
G4VPhysicsConstructor(name)
{
// Inelastic process, energy limits
// Protons, neutrons and pions
// Energy limit of the precompound model
precompoundLowLimit = 0.*MeV;
precompoundHighLimit = 300.*MeV;
// Energy limit of the neutron fission and capture
neutronLowLimit = 0.*TeV;
neutronHighLimit = 100.*TeV;
// Ions
// Energy limit of the binary ion model
binaryLightIonLowLimit = 80.*MeV;
binaryLightIonHighLimit = 40.*GeV;
// Energy limit of the LEP model for ions
LEPHighLimit = 100.*MeV;
//targetZ should vary between 1 and 8
targetZ = 1;
targetA = 2 * targetZ;
}
HadrontherapyProtonPrecompoundFermi::~HadrontherapyProtonPrecompoundFermi()
{}
void HadrontherapyProtonPrecompoundFermi::ConstructProcess()
{
G4ParticleDefinition* particle = 0;
G4ProcessManager* pmanager = 0;
// LOW ENERGY ELASTIC SCATTERING
// FOR PROTON, NEUTRON, IONS
G4LElastic* elastic_Model = new G4LElastic();
G4HadronElasticProcess* elastic = new G4HadronElasticProcess();
elastic -> RegisterMe(elastic_Model);
// FERMI BREAK-UP MODEL
G4FermiBreakUp* breakup = new G4FermiBreakUp();
// Set the Fermi break up model
theHandler.SetFermiModel(breakup);
// fix the target A and Z;
theHandler.SetMaxAandZForFermiBreakUp(targetA,targetZ);
// INELASTIC SCATTERING
// Binary Cascade
G4BinaryLightIonReaction* theBC = new G4BinaryLightIonReaction();
// Set the min and max energy for the Binary Cascade
theBC -> SetMinEnergy(binaryLightIonLowLimit);
theBC -> SetMaxEnergy(binaryLightIonHighLimit);
// TRIPATHI CROSS SECTION
// Implementation of formulas in analogy to NASA technical paper 3621 by
// Tripathi, et al. Cross-sections for ion ion scattering
G4TripathiCrossSection* TripathiCrossSection = new G4TripathiCrossSection;
// IONS SHEN CROSS SECTION
// Implementation of formulas
// Shen et al. Nuc. Phys. A 491 130 (1989)
// Total Reaction Cross Section for Heavy-Ion Collisions
G4IonsShenCrossSection* aShen = new G4IonsShenCrossSection;
//--------------------------------------------------------------------------------------
// Proton PRECOMPOUND + EVAPORATION(DEFAULT EVAPORATION)+ FERMI BREAK-UP
particle = G4Proton::Proton();
pmanager = particle->GetProcessManager();
G4PreCompoundModel* thePreEquilib = new G4PreCompoundModel(&theHandler);
// Set the range of minimum and maximum energy value
thePreEquilib -> SetMinEnergy(precompoundLowLimit);
thePreEquilib -> SetMaxEnergy(precompoundHighLimit);
// Model Registration
theIPProton.RegisterMe(thePreEquilib);
// Active the Cross-sections for proton nuclear scattering up to 20 GeV
theIPProton.AddDataSet(&thePXSec);
// Active the proton inelastic scattering using the precompound model
pmanager -> AddDiscreteProcess(&theIPProton);
// Active the Hadron Elastic Process
pmanager -> AddDiscreteProcess(elastic);
// deuteron
particle = G4Deuteron::Deuteron();
pmanager = particle -> GetProcessManager();
// Final state production model for Deuteron inelastic scattering below 100 MeV
G4LEDeuteronInelastic* theDIModel = new G4LEDeuteronInelastic;
// Set the maximum energy for LEP model
theDIModel -> SetMaxEnergy(LEPHighLimit);
// Active the Tripathi and aShen Cross Section
theIPdeuteron.AddDataSet(TripathiCrossSection);
theIPdeuteron.AddDataSet(aShen);
// Register the Deuteron Inelastic and Binary Cascade Model
theIPdeuteron.RegisterMe(theDIModel);
theIPdeuteron.RegisterMe(theBC);
// Active the deuteron inelastic scattering using the deuteron inelastic and binary cascade model
pmanager -> AddDiscreteProcess(&theIPdeuteron);
// Active the Hadron Elastic Process
pmanager -> AddDiscreteProcess(elastic);
// triton
particle = G4Triton::Triton();
pmanager = particle->GetProcessManager();
// Final state production model for Triton inelastic scattering below 100 MeV
G4LETritonInelastic* theTIModel = new G4LETritonInelastic;
// Set the maximum energy for LEP model
theTIModel -> SetMaxEnergy(LEPHighLimit);
// Active the Tripathi and aShen Cross Section
theIPtriton.AddDataSet(TripathiCrossSection);
theIPtriton.AddDataSet(aShen);
// Register the Triton Inelastic and Binary Cascade Model
theIPtriton.RegisterMe(theTIModel);
theIPtriton.RegisterMe(theBC);
// Active the triton inelastic scattering using the triton inelastic and binary cascade model
pmanager -> AddDiscreteProcess(&theIPtriton);
// Active the Hadron Elastic Process
pmanager -> AddDiscreteProcess(elastic);
// alpha
particle = G4Alpha::Alpha();
pmanager = particle->GetProcessManager();
// Final state production model for Alpha inelastic scattering below 20 GeV
G4LEAlphaInelastic* theAIModel = new G4LEAlphaInelastic;
// Set the maximum energy for LEP model
theAIModel -> SetMaxEnergy(LEPHighLimit);
// Register the Triton Inelastic and Binary Cascade Model
theIPalpha.AddDataSet(TripathiCrossSection);
theIPalpha.AddDataSet(aShen);
// Register the Alpha Inelastic and Binary Cascade Model
theIPalpha.RegisterMe(theAIModel);
theIPalpha.RegisterMe(theBC);
// Active the alpha inelastic scattering using the alpha inelastic and binary cascade model
pmanager -> AddDiscreteProcess(&theIPalpha);
// Active the Hadron Elastic Process
pmanager -> AddDiscreteProcess(elastic);
// He3
particle = G4He3::He3();
pmanager = particle->GetProcessManager();
// Binary Cascade inelastic scattering for ions
G4BinaryLightIonReaction * theGenIonBC= new G4BinaryLightIonReaction;
// Inelastic Scattering for ions
G4HadronInelasticProcess* theIPHe3 = new G4HadronInelasticProcess("He3Inelastic",particle);
// Active the Tripathi and aShen Cross Section
theIPHe3 -> AddDataSet(TripathiCrossSection);
theIPHe3 -> AddDataSet(aShen);
// Register the Alpha Binary Cascade Model
theIPHe3 -> RegisterMe(theGenIonBC);
// Active the Inelastic Process for He3
pmanager -> AddDiscreteProcess(theIPHe3);
// Active the Hadron Elastic Process
pmanager -> AddDiscreteProcess(elastic);
// Neutron
particle = G4Neutron::Neutron();
pmanager = particle->GetProcessManager();
// Register the Precompound model
theIPNeutron.RegisterMe(thePreEquilib);
// Active the Cross-sections for neutron nuclear scattering from 14 MeV up to 20 GeV
theIPNeutron.AddDataSet(&theNXSec);
// Active the neutron inelastic process
pmanager -> AddDiscreteProcess(&theIPNeutron);
// Active the Hadron Elastic Process
pmanager -> AddDiscreteProcess(elastic);
// Pions plus
particle = G4PionPlus::PionPlus();
pmanager = particle -> GetProcessManager();
// Define the inelastic process for pions plus
G4PionPlusInelasticProcess* thePionPlusInelasticProcess = new G4PionPlusInelasticProcess("inelastic");
// Register the Low Energy Inelastic Model for pions plus
thePionPlusInelasticProcess -> RegisterMe(thePreEquilib);
// Active the inelastic process for pions plus
pmanager->AddDiscreteProcess(thePionPlusInelasticProcess);
pmanager -> AddDiscreteProcess(elastic);
// Pion Minus
particle = G4PionMinus::PionMinus();
pmanager = particle -> GetProcessManager();
// Define the inelastic process for pions minus
G4PionMinusInelasticProcess* thePionMinusInelasticProcess = new G4PionMinusInelasticProcess("inelastic");
// Register the inelastic model for pion minus
thePionMinusInelasticProcess -> RegisterMe(thePreEquilib);
// Active the inelastic process for pion minus
pmanager -> AddDiscreteProcess(thePionMinusInelasticProcess);
// Active Absorption process for pion minus
pmanager -> AddRestProcess(new G4PiMinusAbsorptionAtRest, ordDefault);
pmanager -> AddDiscreteProcess(elastic);
//HADRON CAPTURE
// Process for capture of neutral hadrons
G4HadronCaptureProcess* neutronCapture = new G4HadronCaptureProcess();
// Final state production model for capture of neutral hadrons in nuclei
G4LCapture* capture_model = new G4LCapture();
// Set the energy range for the capture model
capture_model -> SetMinEnergy(neutronLowLimit);
capture_model -> SetMaxEnergy(neutronHighLimit);
// Register the capture model
neutronCapture -> RegisterMe(capture_model);
// Active the neutron capture process
pmanager -> AddDiscreteProcess(neutronCapture);
//FISSION
// Process for induced fission
G4HadronFissionProcess* fission = new G4HadronFissionProcess();
//Final state production model for induced fission
G4LFission* fission_model = new G4LFission();
// Set the energy range for the fission model
fission_model -> SetMinEnergy(neutronLowLimit);
fission_model -> SetMaxEnergy(neutronHighLimit);
// Register the fission model
fission -> RegisterMe(fission_model);
// Active the fission process
pmanager -> AddDiscreteProcess(fission);
}
@@ -0,0 +1,291 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// $Id: HadrontherapyProtonPrecompoundGEM.cc; May 2005
// ----------------------------------------------------------------------------
// GEANT 4 - Hadrontherapy example
// ----------------------------------------------------------------------------
// Code developed by:
//
// G.A.P. Cirrone(a)*, F. Di Rosa(a), S. Guatelli(b), G. Russo(a)
//
// (a) Laboratori Nazionali del Sud
// of the National Institute for Nuclear Physics, Catania, Italy
// (b) National Institute for Nuclear Physics Section of Genova, genova, Italy
//
// * cirrone@lns.infn.it
// ----------------------------------------------------------------------------
#include "HadrontherapyProtonPrecompoundGEM.hh"
#include "G4ParticleDefinition.hh"
#include "G4ProcessManager.hh"
#include "G4ProcessVector.hh"
#include "G4ParticleTypes.hh"
#include "G4ParticleTable.hh"
#include "G4Material.hh"
#include "G4LElastic.hh"
#include "G4BinaryCascade.hh"
#include "G4CascadeInterface.hh"
#include "G4PionPlusInelasticProcess.hh"
#include "G4LEPionPlusInelastic.hh"
#include "G4LEPionMinusInelastic.hh"
#include "G4HEPionPlusInelastic.hh"
#include "G4HEPionMinusInelastic.hh"
#include "G4PionMinusInelasticProcess.hh"
#include "G4LEPionMinusInelastic.hh"
#include "G4HEPionMinusInelastic.hh"
#include "G4PiMinusAbsorptionAtRest.hh"
#include "G4AntiProtonInelasticProcess.hh"
#include "G4LEAntiProtonInelastic.hh"
#include "G4HEAntiProtonInelastic.hh"
#include "G4AntiProtonAnnihilationAtRest.hh"
#include "G4Evaporation.hh"
#include "G4ExcitationHandler.hh"
//
//
// HADRONIC PHYSICS LIST
//
// - ELASTIC SCATTERING FOR ALL THE HADRONS AND IONS
// - INELASTIC SCATTERING:
// * PRECOMPOUND PHYSICS LIST with GEM EVAPORATION MODEL
// * PRECOMPOUND + EVAPORATION(GEM MODEL) NO FERMI BREAK-UP FOR PROTONS, NEUTRONS AND PIONS
// * LEP MODEL UP TO 100 MEV AND BINARY ION MODEL BETWEEN 80 MEV AND 40. GEV
// FOR DEUTERON, TRITON, HE3, ALPHA
// * FISSION AND HADRON CAPTURE FOR NEUTRONS BETWEEN 0. MEV AND 100. TEV
//
//
HadrontherapyProtonPrecompoundGEM::HadrontherapyProtonPrecompoundGEM(const G4String& name):
G4VPhysicsConstructor(name)
{
// Inelastic process, energy limits
// Protons, neutrons and pions
// Energy limit of the precompound model
precompoundLowLimit = 0.*MeV;
precompoundHighLimit = 300.*MeV;
// Energy limit of the neutron fission and capture
neutronLowLimit = 0.*TeV;
neutronHighLimit = 100.*TeV;
// Ions
// Energy limit of the binary ion model
binaryLightIonLowLimit = 80.*MeV;
binaryLightIonHighLimit = 40.*GeV;
// Energy limit of the LEP model for ions
LEPHighLimit = 100.*MeV;
}
HadrontherapyProtonPrecompoundGEM::~HadrontherapyProtonPrecompoundGEM()
{}
void HadrontherapyProtonPrecompoundGEM::ConstructProcess()
{
G4ParticleDefinition* particle = 0;
G4ProcessManager* pmanager = 0;
// LOW ENERGY ELASTIC SCATTERING
// FOR PROTON, NEUTRON, IONS
G4LElastic* elastic_Model = new G4LElastic();
G4HadronElasticProcess* elastic = new G4HadronElasticProcess();
elastic -> RegisterMe(elastic_Model);
// GEM EVAPORATION MODEL
G4Evaporation* evaporation = new G4Evaporation();
evaporation -> SetGEMChannel();
theHandler.SetEvaporation(evaporation);
// INELASTIC SCATTERING
// Binary Cascade
G4BinaryLightIonReaction* theBC = new G4BinaryLightIonReaction();
// Set the min and max energy for the Binary Cascade
theBC -> SetMinEnergy(binaryLightIonLowLimit);
theBC -> SetMaxEnergy(binaryLightIonHighLimit);
// TRIPATHI CROSS SECTION
// Implementation of formulas in analogy to NASA technical paper 3621 by
// Tripathi, et al. Cross-sections for ion ion scattering
G4TripathiCrossSection* TripathiCrossSection = new G4TripathiCrossSection;
// IONS SHEN CROSS SECTION
// Implementation of formulas
// Shen et al. Nuc. Phys. A 491 130 (1989)
// Total Reaction Cross Section for Heavy-Ion Collisions
G4IonsShenCrossSection* aShen = new G4IonsShenCrossSection;
//--------------------------------------------------------------------------------------
// Proton PRECOMPOUND + EVAPORATION(DEFAULT EVAPORATION)+ FERMI BREAK-UP
particle = G4Proton::Proton();
pmanager = particle->GetProcessManager();
G4PreCompoundModel* thePreEquilib = new G4PreCompoundModel(&theHandler);
// Set the range of minimum and maximum energy value
thePreEquilib -> SetMinEnergy(precompoundLowLimit);
thePreEquilib -> SetMaxEnergy(precompoundHighLimit);
// Model Registration
theIPProton.RegisterMe(thePreEquilib);
// Active the Cross-sections for proton nuclear scattering up to 20 GeV
theIPProton.AddDataSet(&thePXSec);
// Active the proton inelastic scattering using the precompound model
pmanager -> AddDiscreteProcess(&theIPProton);
// Active the Hadron Elastic Process
pmanager -> AddDiscreteProcess(elastic);
// deuteron
particle = G4Deuteron::Deuteron();
pmanager = particle -> GetProcessManager();
// Final state production model for Deuteron inelastic scattering below 100 MeV
G4LEDeuteronInelastic* theDIModel = new G4LEDeuteronInelastic;
// Set the maximum energy for LEP model
theDIModel -> SetMaxEnergy(LEPHighLimit);
// Active the Tripathi and aShen Cross Section
theIPdeuteron.AddDataSet(TripathiCrossSection);
theIPdeuteron.AddDataSet(aShen);
// Register the Deuteron Inelastic and Binary Cascade Model
theIPdeuteron.RegisterMe(theDIModel);
theIPdeuteron.RegisterMe(theBC);
// Active the deuteron inelastic scattering using the deuteron inelastic and binary cascade model
pmanager -> AddDiscreteProcess(&theIPdeuteron);
// Active the Hadron Elastic Process
pmanager -> AddDiscreteProcess(elastic);
// triton
particle = G4Triton::Triton();
pmanager = particle->GetProcessManager();
// Final state production model for Triton inelastic scattering below 100 MeV
G4LETritonInelastic* theTIModel = new G4LETritonInelastic;
// Set the maximum energy for LEP model
theTIModel -> SetMaxEnergy(LEPHighLimit);
// Active the Tripathi and aShen Cross Section
theIPtriton.AddDataSet(TripathiCrossSection);
theIPtriton.AddDataSet(aShen);
// Register the Triton Inelastic and Binary Cascade Model
theIPtriton.RegisterMe(theTIModel);
theIPtriton.RegisterMe(theBC);
// Active the triton inelastic scattering using the triton inelastic and binary cascade model
pmanager -> AddDiscreteProcess(&theIPtriton);
// Active the Hadron Elastic Process
pmanager -> AddDiscreteProcess(elastic);
// alpha
particle = G4Alpha::Alpha();
pmanager = particle->GetProcessManager();
// Final state production model for Alpha inelastic scattering below 20 GeV
G4LEAlphaInelastic* theAIModel = new G4LEAlphaInelastic;
// Set the maximum energy for LEP model
theAIModel -> SetMaxEnergy(LEPHighLimit);
// Register the Triton Inelastic and Binary Cascade Model
theIPalpha.AddDataSet(TripathiCrossSection);
theIPalpha.AddDataSet(aShen);
// Register the Alpha Inelastic and Binary Cascade Model
theIPalpha.RegisterMe(theAIModel);
theIPalpha.RegisterMe(theBC);
// Active the alpha inelastic scattering using the alpha inelastic and binary cascade model
pmanager -> AddDiscreteProcess(&theIPalpha);
// Active the Hadron Elastic Process
pmanager -> AddDiscreteProcess(elastic);
// He3
particle = G4He3::He3();
pmanager = particle->GetProcessManager();
// Binary Cascade inelastic scattering for ions
G4BinaryLightIonReaction * theGenIonBC= new G4BinaryLightIonReaction;
// Inelastic Scattering for ions
G4HadronInelasticProcess* theIPHe3 = new G4HadronInelasticProcess("He3Inelastic",particle);
// Active the Tripathi and aShen Cross Section
theIPHe3 -> AddDataSet(TripathiCrossSection);
theIPHe3 -> AddDataSet(aShen);
// Register the Alpha Binary Cascade Model
theIPHe3 -> RegisterMe(theGenIonBC);
// Active the Inelastic Process for He3
pmanager -> AddDiscreteProcess(theIPHe3);
// Active the Hadron Elastic Process
pmanager -> AddDiscreteProcess(elastic);
// Neutron
particle = G4Neutron::Neutron();
pmanager = particle->GetProcessManager();
// Register the Precompound model
theIPNeutron.RegisterMe(thePreEquilib);
// Active the Cross-sections for neutron nuclear scattering from 14 MeV up to 20 GeV
theIPNeutron.AddDataSet(&theNXSec);
// Active the neutron inelastic process
pmanager -> AddDiscreteProcess(&theIPNeutron);
// Active the Hadron Elastic Process
pmanager -> AddDiscreteProcess(elastic);
// Pions plus
particle = G4PionPlus::PionPlus();
pmanager = particle -> GetProcessManager();
// Define the inelastic process for pions plus
G4PionPlusInelasticProcess* thePionPlusInelasticProcess = new G4PionPlusInelasticProcess("inelastic");
// Register the Low Energy Inelastic Model for pions plus
thePionPlusInelasticProcess -> RegisterMe(thePreEquilib);
// Active the inelastic process for pions plus
pmanager->AddDiscreteProcess(thePionPlusInelasticProcess);
pmanager -> AddDiscreteProcess(elastic);
// Pion Minus
particle = G4PionMinus::PionMinus();
pmanager = particle -> GetProcessManager();
// Define the inelastic process for pions minus
G4PionMinusInelasticProcess* thePionMinusInelasticProcess = new G4PionMinusInelasticProcess("inelastic");
// Register the inelastic model for pion minus
thePionMinusInelasticProcess -> RegisterMe(thePreEquilib);
// Active the inelastic process for pion minus
pmanager -> AddDiscreteProcess(thePionMinusInelasticProcess);
// Active Absorption process for pion minus
pmanager -> AddRestProcess(new G4PiMinusAbsorptionAtRest, ordDefault);
pmanager -> AddDiscreteProcess(elastic);
//HADRON CAPTURE
// Process for capture of neutral hadrons
G4HadronCaptureProcess* neutronCapture = new G4HadronCaptureProcess();
// Final state production model for capture of neutral hadrons in nuclei
G4LCapture* capture_model = new G4LCapture();
// Set the energy range for the capture model
capture_model -> SetMinEnergy(neutronLowLimit);
capture_model -> SetMaxEnergy(neutronHighLimit);
// Register the capture model
neutronCapture -> RegisterMe(capture_model);
// Active the neutron capture process
pmanager -> AddDiscreteProcess(neutronCapture);
//FISSION
// Process for induced fission
G4HadronFissionProcess* fission = new G4HadronFissionProcess();
//Final state production model for induced fission
G4LFission* fission_model = new G4LFission();
// Set the energy range for the fission model
fission_model -> SetMinEnergy(neutronLowLimit);
fission_model -> SetMaxEnergy(neutronHighLimit);
// Register the fission model
fission -> RegisterMe(fission_model);
// Active the fission process
pmanager -> AddDiscreteProcess(fission);
}
@@ -0,0 +1,304 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// $Id: HadrontherapyProtonPrecompoundGEMFermi.cc; May 2005
// ----------------------------------------------------------------------------
// GEANT 4 - Hadrontherapy example
// ----------------------------------------------------------------------------
// Code developed by:
//
// G.A.P. Cirrone(a)*, F. Di Rosa(a), S. Guatelli(b), G. Russo(a)
//
// (a) Laboratori Nazionali del Sud
// of the National Institute for Nuclear Physics, Catania, Italy
// (b) National Institute for Nuclear Physics Section of Genova, genova, Italy
//
// * cirrone@lns.infn.it
// ----------------------------------------------------------------------------
#include "HadrontherapyProtonPrecompoundGEMFermi.hh"
#include "G4ParticleDefinition.hh"
#include "G4ProcessManager.hh"
#include "G4ProcessVector.hh"
#include "G4ParticleTypes.hh"
#include "G4ParticleTable.hh"
#include "G4Material.hh"
#include "G4LElastic.hh"
#include "G4BinaryCascade.hh"
#include "G4CascadeInterface.hh"
#include "G4PionPlusInelasticProcess.hh"
#include "G4LEPionPlusInelastic.hh"
#include "G4LEPionMinusInelastic.hh"
#include "G4HEPionPlusInelastic.hh"
#include "G4HEPionMinusInelastic.hh"
#include "G4PionMinusInelasticProcess.hh"
#include "G4LEPionMinusInelastic.hh"
#include "G4HEPionMinusInelastic.hh"
#include "G4PiMinusAbsorptionAtRest.hh"
#include "G4AntiProtonInelasticProcess.hh"
#include "G4LEAntiProtonInelastic.hh"
#include "G4HEAntiProtonInelastic.hh"
#include "G4AntiProtonAnnihilationAtRest.hh"
#include "G4Evaporation.hh"
#include "G4ExcitationHandler.hh"
#include "G4FermiBreakUp.hh"
//
//
// HADRONIC PHYSICS LIST
//
// - ELASTIC SCATTERING FOR ALL THE HADRONS AND IONS
// - INELASTIC SCATTERING:
// * PRECOMPOUND PHYSICS LIST with GEM EVAPORATION MODEL + FERMI BREAKUP
// * PRECOMPOUND + GEM EVAPORATION MODEL + FERMI BREAK-UP FOR PROTONS, NEUTRONS AND PIONS
// * LEP MODEL UP TO 100 MEV AND BINARY ION MODEL BETWEEN 80 MEV AND 40. GEV
// FOR DEUTERON, TRITON, HE3, ALPHA
// * FISSION AND HADRON CAPTURE FOR NEUTRONS BETWEEN 0. MEV AND 100. TEV
//
//
HadrontherapyProtonPrecompoundGEMFermi::HadrontherapyProtonPrecompoundGEMFermi(const G4String& name):
G4VPhysicsConstructor(name)
{
// Inelastic process, energy limits
// Protons, neutrons and pions
// Energy limit of the precompound model
precompoundLowLimit = 0.*MeV;
precompoundHighLimit = 300.*MeV;
// Energy limit of the neutron fission and capture
neutronLowLimit = 0.*TeV;
neutronHighLimit = 100.*TeV;
// Ions
// Energy limit of the binary ion model
binaryLightIonLowLimit = 80.*MeV;
binaryLightIonHighLimit = 40.*GeV;
// Energy limit of the LEP model for ions
LEPHighLimit = 100.*MeV;
//targetZ should vary between 1 and 8
targetZ = 1;
targetA = 2 * targetZ;
}
HadrontherapyProtonPrecompoundGEMFermi::~HadrontherapyProtonPrecompoundGEMFermi()
{}
void HadrontherapyProtonPrecompoundGEMFermi::ConstructProcess()
{
G4ParticleDefinition* particle = 0;
G4ProcessManager* pmanager = 0;
// LOW ENERGY ELASTIC SCATTERING
// FOR PROTON, NEUTRON, IONS
G4LElastic* elastic_Model = new G4LElastic();
G4HadronElasticProcess* elastic = new G4HadronElasticProcess();
elastic -> RegisterMe(elastic_Model);
// GEM EVAPORATION MODEL
G4Evaporation* evaporation = new G4Evaporation();
evaporation -> SetGEMChannel();
theHandler.SetEvaporation(evaporation);
// FERMI BREAK-UP MODEL
G4FermiBreakUp* breakup = new G4FermiBreakUp();
// Set the Fermi break up model
theHandler.SetFermiModel(breakup);
// fix the target A and Z;
theHandler.SetMaxAandZForFermiBreakUp(targetA,targetZ);
// INELASTIC SCATTERING
// Binary Cascade
G4BinaryLightIonReaction* theBC = new G4BinaryLightIonReaction();
// Set the min and max energy for the Binary Cascade
theBC -> SetMinEnergy(binaryLightIonLowLimit);
theBC -> SetMaxEnergy(binaryLightIonHighLimit);
// TRIPATHI CROSS SECTION
// Implementation of formulas in analogy to NASA technical paper 3621 by
// Tripathi, et al. Cross-sections for ion ion scattering
G4TripathiCrossSection* TripathiCrossSection = new G4TripathiCrossSection;
// IONS SHEN CROSS SECTION
// Implementation of formulas
// Shen et al. Nuc. Phys. A 491 130 (1989)
// Total Reaction Cross Section for Heavy-Ion Collisions
G4IonsShenCrossSection* aShen = new G4IonsShenCrossSection;
//--------------------------------------------------------------------------------------
// Proton PRECOMPOUND + EVAPORATION(DEFAULT EVAPORATION)+ FERMI BREAK-UP
particle = G4Proton::Proton();
pmanager = particle->GetProcessManager();
G4PreCompoundModel* thePreEquilib = new G4PreCompoundModel(&theHandler);
// Set the range of minimum and maximum energy value
thePreEquilib -> SetMinEnergy(precompoundLowLimit);
thePreEquilib -> SetMaxEnergy(precompoundHighLimit);
// Model Registration
theIPProton.RegisterMe(thePreEquilib);
// Active the Cross-sections for proton nuclear scattering up to 20 GeV
theIPProton.AddDataSet(&thePXSec);
// Active the proton inelastic scattering using the precompound model
pmanager -> AddDiscreteProcess(&theIPProton);
// Active the Hadron Elastic Process
pmanager -> AddDiscreteProcess(elastic);
// deuteron
particle = G4Deuteron::Deuteron();
pmanager = particle -> GetProcessManager();
// Final state production model for Deuteron inelastic scattering below 100 MeV
G4LEDeuteronInelastic* theDIModel = new G4LEDeuteronInelastic;
// Set the maximum energy for LEP model
theDIModel -> SetMaxEnergy(LEPHighLimit);
// Active the Tripathi and aShen Cross Section
theIPdeuteron.AddDataSet(TripathiCrossSection);
theIPdeuteron.AddDataSet(aShen);
// Register the Deuteron Inelastic and Binary Cascade Model
theIPdeuteron.RegisterMe(theDIModel);
theIPdeuteron.RegisterMe(theBC);
// Active the deuteron inelastic scattering using the deuteron inelastic and binary cascade model
pmanager -> AddDiscreteProcess(&theIPdeuteron);
// Active the Hadron Elastic Process
pmanager -> AddDiscreteProcess(elastic);
// triton
particle = G4Triton::Triton();
pmanager = particle->GetProcessManager();
// Final state production model for Triton inelastic scattering below 100 MeV
G4LETritonInelastic* theTIModel = new G4LETritonInelastic;
// Set the maximum energy for LEP model
theTIModel -> SetMaxEnergy(LEPHighLimit);
// Active the Tripathi and aShen Cross Section
theIPtriton.AddDataSet(TripathiCrossSection);
theIPtriton.AddDataSet(aShen);
// Register the Triton Inelastic and Binary Cascade Model
theIPtriton.RegisterMe(theTIModel);
theIPtriton.RegisterMe(theBC);
// Active the triton inelastic scattering using the triton inelastic and binary cascade model
pmanager -> AddDiscreteProcess(&theIPtriton);
// Active the Hadron Elastic Process
pmanager -> AddDiscreteProcess(elastic);
// alpha
particle = G4Alpha::Alpha();
pmanager = particle->GetProcessManager();
// Final state production model for Alpha inelastic scattering below 20 GeV
G4LEAlphaInelastic* theAIModel = new G4LEAlphaInelastic;
// Set the maximum energy for LEP model
theAIModel -> SetMaxEnergy(LEPHighLimit);
// Register the Triton Inelastic and Binary Cascade Model
theIPalpha.AddDataSet(TripathiCrossSection);
theIPalpha.AddDataSet(aShen);
// Register the Alpha Inelastic and Binary Cascade Model
theIPalpha.RegisterMe(theAIModel);
theIPalpha.RegisterMe(theBC);
// Active the alpha inelastic scattering using the alpha inelastic and binary cascade model
pmanager -> AddDiscreteProcess(&theIPalpha);
// Active the Hadron Elastic Process
pmanager -> AddDiscreteProcess(elastic);
// He3
particle = G4He3::He3();
pmanager = particle->GetProcessManager();
// Binary Cascade inelastic scattering for ions
G4BinaryLightIonReaction * theGenIonBC= new G4BinaryLightIonReaction;
// Inelastic Scattering for ions
G4HadronInelasticProcess* theIPHe3 = new G4HadronInelasticProcess("He3Inelastic",particle);
// Active the Tripathi and aShen Cross Section
theIPHe3 -> AddDataSet(TripathiCrossSection);
theIPHe3 -> AddDataSet(aShen);
// Register the Alpha Binary Cascade Model
theIPHe3 -> RegisterMe(theGenIonBC);
// Active the Inelastic Process for He3
pmanager -> AddDiscreteProcess(theIPHe3);
// Active the Hadron Elastic Process
pmanager -> AddDiscreteProcess(elastic);
// Neutron
particle = G4Neutron::Neutron();
pmanager = particle->GetProcessManager();
// Register the Precompound model
theIPNeutron.RegisterMe(thePreEquilib);
// Active the Cross-sections for neutron nuclear scattering from 14 MeV up to 20 GeV
theIPNeutron.AddDataSet(&theNXSec);
// Active the neutron inelastic process
pmanager -> AddDiscreteProcess(&theIPNeutron);
// Active the Hadron Elastic Process
pmanager -> AddDiscreteProcess(elastic);
// Pions plus
particle = G4PionPlus::PionPlus();
pmanager = particle -> GetProcessManager();
// Define the inelastic process for pions plus
G4PionPlusInelasticProcess* thePionPlusInelasticProcess = new G4PionPlusInelasticProcess("inelastic");
// Register the Low Energy Inelastic Model for pions plus
thePionPlusInelasticProcess -> RegisterMe(thePreEquilib);
// Active the inelastic process for pions plus
pmanager->AddDiscreteProcess(thePionPlusInelasticProcess);
pmanager -> AddDiscreteProcess(elastic);
// Pion Minus
particle = G4PionMinus::PionMinus();
pmanager = particle -> GetProcessManager();
// Define the inelastic process for pions minus
G4PionMinusInelasticProcess* thePionMinusInelasticProcess = new G4PionMinusInelasticProcess("inelastic");
// Register the inelastic model for pion minus
thePionMinusInelasticProcess -> RegisterMe(thePreEquilib);
// Active the inelastic process for pion minus
pmanager -> AddDiscreteProcess(thePionMinusInelasticProcess);
// Active Absorption process for pion minus
pmanager -> AddRestProcess(new G4PiMinusAbsorptionAtRest, ordDefault);
pmanager -> AddDiscreteProcess(elastic);
//HADRON CAPTURE
// Process for capture of neutral hadrons
G4HadronCaptureProcess* neutronCapture = new G4HadronCaptureProcess();
// Final state production model for capture of neutral hadrons in nuclei
G4LCapture* capture_model = new G4LCapture();
// Set the energy range for the capture model
capture_model -> SetMinEnergy(neutronLowLimit);
capture_model -> SetMaxEnergy(neutronHighLimit);
// Register the capture model
neutronCapture -> RegisterMe(capture_model);
// Active the neutron capture process
pmanager -> AddDiscreteProcess(neutronCapture);
//FISSION
// Process for induced fission
G4HadronFissionProcess* fission = new G4HadronFissionProcess();
//Final state production model for induced fission
G4LFission* fission_model = new G4LFission();
// Set the energy range for the fission model
fission_model -> SetMinEnergy(neutronLowLimit);
fission_model -> SetMaxEnergy(neutronHighLimit);
// Register the fission model
fission -> RegisterMe(fission_model);
// Active the fission process
pmanager -> AddDiscreteProcess(fission);
}
@@ -53,13 +53,30 @@ HadrontherapyRunAction::~HadrontherapyRunAction()
{
}
void HadrontherapyRunAction::BeginOfRunAction(const G4Run*)
void HadrontherapyRunAction::BeginOfRunAction(const G4Run* aRun)
{
G4RunManager::GetRunManager()->SetRandomNumberStore(true);
G4cout << "Run " << aRun -> GetRunID() << " starts ..." << G4endl;
electromagnetic = 0;
hadronic = 0;
}
void HadrontherapyRunAction::EndOfRunAction(const G4Run*)
void HadrontherapyRunAction::EndOfRunAction(const G4Run* aRun)
{
G4cout << " Summary of Run " << aRun -> GetRunID() <<" :"<< G4endl;
G4cout << "Number of electromagnetic processes of primary particles in the phantom:"
<< electromagnetic << G4endl;
G4cout << "Number of hadronic processes of primary particles in the phantom:"
<< hadronic << G4endl;
}
void HadrontherapyRunAction::AddEMProcess()
{
electromagnetic += 1;
}
void HadrontherapyRunAction::AddHadronicProcess()
{
hadronic += 1;
}
@@ -34,30 +34,111 @@
// * cirrone@lns.infn.it
// ----------------------------------------------------------------------------
#include "HadrontherapyDetectorConstruction.hh"
#include "G4EnergyLossTables.hh"
#include "G4SteppingManager.hh"
#include "G4TrackVector.hh"
#include "HadrontherapySteppingAction.hh"
#include "HadrontherapyPrimaryGeneratorAction.hh"
#include "HadrontherapyEventAction.hh"
#include "HadrontherapyRunAction.hh"
#include "G4Event.hh"
#include "G4EventManager.hh"
#include "G4ios.hh"
#include <iomanip.h>
#include "G4UImanager.hh"
#include "G4SteppingManager.hh"
#include "G4Track.hh"
#include "G4Step.hh"
#include "G4StepPoint.hh"
#include "G4TrackStatus.hh"
#include "G4TrackVector.hh"
#include "G4ParticleDefinition.hh"
#include "G4ParticleTypes.hh"
HadrontherapySteppingAction::HadrontherapySteppingAction()
#ifdef G4ANALYSIS_USE
#include "HadrontherapyAnalysisManager.hh"
#endif
#include "HadrontherapyRunAction.hh"
HadrontherapySteppingAction::HadrontherapySteppingAction( HadrontherapyRunAction* run)
{
runAction = run;
}
HadrontherapySteppingAction::~HadrontherapySteppingAction()
{
}
void HadrontherapySteppingAction::UserSteppingAction(const G4Step*)
void HadrontherapySteppingAction::UserSteppingAction(const G4Step* aStep)
{
// Electromagnetic and hadronic processes of primary particles in the phantom
if ((aStep -> GetTrack() -> GetTrackID() == 1) &&
(aStep -> GetTrack() -> GetVolume() -> GetName() == "PhantomPhys") &&
(aStep -> GetPostStepPoint() -> GetProcessDefinedStep() != NULL))
{
G4String process = aStep -> GetPostStepPoint() ->
GetProcessDefinedStep() -> GetProcessName();
if ((process == "Transportation") || (process == "StepLimiter")) {;}
else {
if ((process == "msc") || (process == "hLowEIoni") || (process == "hIoni"))
{
runAction -> AddEMProcess();
}
else
{
runAction -> AddHadronicProcess();
if ( (process != "LElastic") && (process != "ProtonInelastic"))
G4cout << "Warning! Unknown proton process: "<< process << G4endl;
}
}
}
// Retrieve information about the secondaries originated in the phantom
#ifdef G4ANALYSIS_USE
G4SteppingManager* steppingManager = fpSteppingManager;
G4Track* theTrack = aStep -> GetTrack();
// check if it is alive
if(theTrack-> GetTrackStatus() == fAlive) { return; }
// Retrieve the secondary particles
G4TrackVector* fSecondary = steppingManager -> GetfSecondary();
for(size_t lp1=0;lp1<(*fSecondary).size(); lp1++)
{
G4String volumeName = (*fSecondary)[lp1] -> GetVolume() -> GetName();
if (volumeName == "PhantomPhys")
{
G4String secondaryParticleName = (*fSecondary)[lp1]->GetDefinition() -> GetParticleName();
G4double secondaryParticleKineticEnergy = (*fSecondary)[lp1] -> GetKineticEnergy();
HadrontherapyAnalysisManager* analysis = HadrontherapyAnalysisManager::getInstance();
if (secondaryParticleName == "e-")
analysis -> electronEnergyDistribution(secondaryParticleKineticEnergy/MeV);
if (secondaryParticleName == "gamma")
analysis -> gammaEnergyDistribution(secondaryParticleKineticEnergy/MeV);
if (secondaryParticleName == "deuteron")
analysis -> deuteronEnergyDistribution(secondaryParticleKineticEnergy/MeV);
if (secondaryParticleName == "triton")
analysis -> tritonEnergyDistribution(secondaryParticleKineticEnergy/MeV);
if (secondaryParticleName == "alpha")
analysis -> alphaEnergyDistribution(secondaryParticleKineticEnergy/MeV);
G4double z = (*fSecondary)[lp1]-> GetDynamicParticle() -> GetDefinition() -> GetPDGCharge();
if (z > 0.)
{
G4int a = (*fSecondary)[lp1]-> GetDynamicParticle() -> GetDefinition() -> GetBaryonNumber();
G4int electronOccupancy = (*fSecondary)[lp1] -> GetDynamicParticle() -> GetTotalOccupancy();
// If a generic ion is originated in the phantom, its baryonic number, PDG charge,
// total number of electrons in the orbitals are stored in a ntuple
analysis -> genericIonInformation(a, z, electronOccupancy, secondaryParticleKineticEnergy/MeV);
}
}
}
#endif
}
@@ -45,20 +45,18 @@
/vis/scene/create
/vis/open OGLIX
/vis/viewer/flush
/vis/viewer/set/viewpointThetaPhi 30 130 deg
/vis/viewer/zoom 3
/vis/viewer/pan -10 80 cm
/vis/viewer/zoom 1
/vis/viewer/pan -10 40 cm
/tracking/storeTrajectory 1
/vis/scene/endOfEventAction accumulate
/vis/viewer/update
# SETTING FOR THE RANGE SHIFTER
/beamLine/RangeShifter/thickness 4 cm
/beamLine/RangeShifter/RSMat Water
/beamLine/RangeShifter/thickness 0.001 mm
/beamLine/RangeShifter/RSMat Air
#/tracking/verbose 1
/vis/viewer/flush
#/run/beamOn 1
#/run/beamOn 5000
/run/beamOn 10