EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
EICPhysicsList.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file EICPhysicsList.cc
1 // $Id: $
3 // //
4 // File: EICPhysicsList.hh //
5 // Description: Geant4 physics list for Electron Ion Collider detectors //
6 // //
7 // Author: Dennis H. Wright (SLAC) //
8 // Date: 21 June 2018 //
9 // //
11 
12 #include "EICPhysicsList.hh"
13 
14 #include "ProtonPhysics.hh"
15 #include "NeutronPhysics.hh"
16 #include "PionPhysics.hh"
17 #include "KaonPhysics.hh"
18 #include "HyperonPhysics.hh"
19 #include "AntiBaryonPhysics.hh"
20 #include "IonPhysics.hh"
22 
23 #include <Geant4/G4SystemOfUnits.hh>
24 #include <Geant4/G4UnitsTable.hh>
25 
26 #include <Geant4/G4EmStandardPhysics.hh>
27 #include <Geant4/G4EmExtraPhysics.hh>
28 #include <Geant4/G4OpticalPhysics.hh>
29 #include <Geant4/G4EmParameters.hh>
30 #include <Geant4/G4DecayPhysics.hh>
31 #include <Geant4/G4NuclideTable.hh>
32 // #include <Geant4/G4RadioactiveDecayPhysics.hh>
33 
34 // particles
35 
36 #include <Geant4/G4BosonConstructor.hh>
37 #include <Geant4/G4LeptonConstructor.hh>
38 #include <Geant4/G4MesonConstructor.hh>
39 #include <Geant4/G4BaryonConstructor.hh>
40 #include <Geant4/G4IonConstructor.hh>
41 #include <Geant4/G4ShortLivedConstructor.hh>
42 
43 
45  :G4VModularPhysicsList()
46 {
47  G4int verb = 1;
48  SetVerboseLevel(verb);
49 
50  //add new units for radioActive decays
51  //
52  new G4UnitDefinition( "millielectronVolt", "meV", "Energy", 1.e-3*eV);
53  //
54  const G4double minute = 60*second;
55  const G4double hour = 60*minute;
56  const G4double day = 24*hour;
57  const G4double year = 365*day;
58  new G4UnitDefinition("minute", "min", "Time", minute);
59  new G4UnitDefinition("hour", "h", "Time", hour);
60  new G4UnitDefinition("day", "d", "Time", day);
61  new G4UnitDefinition("year", "y", "Time", year);
62 
63  // Mandatory for G4NuclideTable
64  // Half-life threshold must be set small or many short-lived isomers
65  // will not be assigned life times (default to 0)
66  G4NuclideTable::GetInstance()->SetThresholdOfHalfLife(0.1*picosecond);
67  G4NuclideTable::GetInstance()->SetLevelTolerance(1.0*eV);
68 
69  // EM physics
70  RegisterPhysics(new G4EmStandardPhysics());
71  G4EmParameters* param = G4EmParameters::Instance();
72  param->SetAugerCascade(true);
73 #if G4VERSION_NUMBER >= 1004
74  param->SetStepFunction(1., 1*CLHEP::mm);
75  param->SetStepFunctionMuHad(1., 1*CLHEP::mm);
76 #endif
77 
78  // Decay
79  RegisterPhysics(new G4DecayPhysics());
80 
81  // Radioactive decay
82 // RegisterPhysics(new G4RadioactiveDecayPhysics());
83 
84  // Hadronic physics
85  RegisterPhysics(new ProtonPhysics() );
86  RegisterPhysics(new NeutronPhysics() );
87  RegisterPhysics(new PionPhysics() );
88  RegisterPhysics(new KaonPhysics() );
89  RegisterPhysics(new HyperonPhysics() );
90  RegisterPhysics(new AntiBaryonPhysics() );
91  RegisterPhysics(new IonPhysics() );
92  RegisterPhysics(new GammaLeptoNuclearPhysics() );
93 
94  // Gamma-Nuclear Physics
95 // G4EmExtraPhysics* gnuc = new G4EmExtraPhysics(verb);
96 // gnuc->ElectroNuclear(false);
97 // gnuc->MuonNuclear(false);
98 // RegisterPhysics(gnuc);
99 
100  // Optical physics
101  RegisterPhysics(new G4OpticalPhysics() );
102 }
103 
104 
106 {}
107 
108 
110 {
111  G4BosonConstructor pBosonConstructor;
112  pBosonConstructor.ConstructParticle();
113 
114  G4LeptonConstructor pLeptonConstructor;
115  pLeptonConstructor.ConstructParticle();
116 
117  G4MesonConstructor pMesonConstructor;
118  pMesonConstructor.ConstructParticle();
119 
120  G4BaryonConstructor pBaryonConstructor;
121  pBaryonConstructor.ConstructParticle();
122 
123  G4IonConstructor pIonConstructor;
124  pIonConstructor.ConstructParticle();
125 
126  G4ShortLivedConstructor pShortLivedConstructor;
127  pShortLivedConstructor.ConstructParticle();
128 }
129 
130 
132 {
133  SetCutValue(0.7*mm, "proton");
134  SetCutValue(0.7*mm, "e-");
135  SetCutValue(0.7*mm, "e+");
136  SetCutValue(0.7*mm, "gamma");
137 }
138