ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
IonPhysics.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file IonPhysics.cc
1 // $Id: $
3 // //
4 // File: IonPhysics.cc //
5 // Description: Ion hadronic physics constructor for EICPhysicsList //
6 // //
7 // Author: Dennis H. Wright (SLAC) //
8 // Date: 6 July 2018 //
9 // //
11 
12 
13 #include "IonPhysics.hh"
14 
15 #include <Geant4/G4ProcessManager.hh>
16 #include <Geant4/G4HadronElasticProcess.hh>
17 #include <Geant4/G4HadronInelasticProcess.hh>
18 
19 #include <Geant4/G4TheoFSGenerator.hh>
20 #include <Geant4/G4FTFModel.hh>
21 #include <Geant4/G4ExcitedStringDecay.hh>
22 #include <Geant4/G4LundStringFragmentation.hh>
23 #include <Geant4/G4GeneratorPrecompoundInterface.hh>
24 #include <Geant4/G4QMDReaction.hh>
25 #include <Geant4/G4HadronicInteractionRegistry.hh>
26 #include <Geant4/G4PreCompoundModel.hh>
27 #include <Geant4/G4BinaryLightIonReaction.hh>
28 #include <Geant4/G4HadronElastic.hh>
29 #include <Geant4/G4NuclNuclDiffuseElastic.hh>
30 
31 #include <Geant4/G4CrossSectionElastic.hh>
32 #include <Geant4/G4CrossSectionInelastic.hh>
33 #include <Geant4/G4ComponentGGNuclNuclXsc.hh>
34 #include <Geant4/G4SystemOfUnits.hh>
35 
36 
38  ftfp(nullptr),
39  stringModel(nullptr),
40  stringDecay(nullptr),
41  fragModel(nullptr),
42  preCompoundModel(nullptr),
43  theGGNuclNuclXS(nullptr),
44  ionGGXS(nullptr)
45 {}
46 
47 
49 {
50  delete stringDecay;
51  delete stringModel;
52  delete fragModel;
53  delete preCompoundModel;
54 
55  delete theGGNuclNuclXS;
56  delete ionGGXS;
57 }
58 
59 
61 {}
62 
63 
65 {
66  G4ProcessManager* procMan = 0;
67 
68  // Elastic model for generic ions (z > 2)
70  ionElastic->SetMinEnergy(0.0);
71 
72  // FTFP ==>> eventually replace this with new class FTFPInterface
73  ftfp = new G4TheoFSGenerator("FTFP");
74  stringModel = new G4FTFModel;
75  stringDecay =
79 
82  ftfp->SetMinEnergy(10.01*GeV);
83  ftfp->SetMaxEnergy(1.0*TeV);
84 
85  // QMD model
86  G4QMDReaction* qmd = new G4QMDReaction;
87  qmd->SetMinEnergy(100.0*MeV);
88  qmd->SetMaxEnergy(10.0*GeV);
89 
90  // BIC ion model
93  G4PreCompoundModel* thePreCompound = static_cast<G4PreCompoundModel*>(p);
94  if(!thePreCompound) { thePreCompound = new G4PreCompoundModel; }
95 
96  G4BinaryLightIonReaction* ionBC = new G4BinaryLightIonReaction(thePreCompound);
97  ionBC->SetMinEnergy(0.0*MeV);
98  ionBC->SetMaxEnergy(110.0*MeV);
99 
100  // Elastic cross section set
103  ionElasticXS->SetMinKinEnergy(0.0);
104 
105  // Inelastic cross section set
107  G4VCrossSectionDataSet* nuclNuclXS =
109 
111  // Deuteron //
113 
115 
116  // elastic
117  // no model available
118 
119  // inelastic
120  G4HadronInelasticProcess* deutProcInel =
121  new G4HadronInelasticProcess("DeuteronInelProcess", G4Deuteron::Deuteron() );
122  deutProcInel->RegisterMe(ionBC);
123  deutProcInel->RegisterMe(qmd);
124  deutProcInel->RegisterMe(ftfp);
125  deutProcInel->AddDataSet(nuclNuclXS);
126  procMan->AddDiscreteProcess(deutProcInel);
127 
129  // Triton //
131 
132  procMan = G4Triton::Triton()->GetProcessManager();
133 
134  // elastic
135  // no model available
136 
137  // inelastic
138  G4HadronInelasticProcess* tritProcInel =
139  new G4HadronInelasticProcess("TritonInelProcess", G4Triton::Triton() );
140  tritProcInel->RegisterMe(ionBC);
141  tritProcInel->RegisterMe(qmd);
142  tritProcInel->RegisterMe(ftfp);
143  tritProcInel->AddDataSet(nuclNuclXS);
144  procMan->AddDiscreteProcess(tritProcInel);
145 
147  // He3 //
149 
150  procMan = G4He3::He3()->GetProcessManager();
151 
152  // elastic
153  // no model available
154 
155  // inelastic
156  G4HadronInelasticProcess* he3ProcInel =
157  new G4HadronInelasticProcess("He3InelProcess", G4He3::He3() );
158  he3ProcInel->RegisterMe(ionBC);
159  he3ProcInel->RegisterMe(qmd);
160  he3ProcInel->RegisterMe(ftfp);
161  he3ProcInel->AddDataSet(nuclNuclXS);
162  procMan->AddDiscreteProcess(he3ProcInel);
163 
165  // Alpha //
167 
168  procMan = G4Alpha::Alpha()->GetProcessManager();
169 
170  // elastic
171  // no model available
172 
173  // inelastic
174  G4HadronInelasticProcess* alphProcInel =
175  new G4HadronInelasticProcess("AlphaInelProcess", G4Alpha::Alpha() );
176  alphProcInel->RegisterMe(ionBC);
177  alphProcInel->RegisterMe(qmd);
178  alphProcInel->RegisterMe(ftfp);
179  alphProcInel->AddDataSet(nuclNuclXS);
180  procMan->AddDiscreteProcess(alphProcInel);
181 
183  // Generic ion //
185 
187 
188  // elastic
190  ionProcEl->RegisterMe(ionElastic);
191  ionProcEl->AddDataSet(ionElasticXS);
192  procMan->AddDiscreteProcess(ionProcEl);
193 
194  // inelastic
195  G4HadronInelasticProcess* genIonProcInel =
196  new G4HadronInelasticProcess("IonInelProcess", G4GenericIon::GenericIon() );
197  genIonProcInel->RegisterMe(ionBC);
198  genIonProcInel->RegisterMe(qmd);
199  genIonProcInel->RegisterMe(ftfp);
200  genIonProcInel->AddDataSet(nuclNuclXS);
201  procMan->AddDiscreteProcess(genIonProcInel);
202 
203 }
204