Import Geant4 8.0.0 source tree
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user