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)
69  G4NuclNuclDiffuseElastic* ionElastic = new G4NuclNuclDiffuseElastic;
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 =
76  new G4ExcitedStringDecay(fragModel = new G4LundStringFragmentation);
77  stringModel->SetFragmentationModel(stringDecay);
78  preCompoundModel = new G4GeneratorPrecompoundInterface();
79 
80  ftfp->SetHighEnergyGenerator(stringModel);
81  ftfp->SetTransport(preCompoundModel);
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
91  G4HadronicInteraction* p =
92  G4HadronicInteractionRegistry::Instance()->FindModel("PRECO");
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
101  ionGGXS = new G4ComponentGGNuclNuclXsc;
102  G4VCrossSectionDataSet* ionElasticXS = new G4CrossSectionElastic(ionGGXS);
103  ionElasticXS->SetMinKinEnergy(0.0);
104 
105  // Inelastic cross section set
106  theGGNuclNuclXS = new G4ComponentGGNuclNuclXsc();
107  G4VCrossSectionDataSet* nuclNuclXS =
108  new G4CrossSectionInelastic(theGGNuclNuclXS);
109 
111  // Deuteron //
113 
114  procMan = G4Deuteron::Deuteron()->GetProcessManager();
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 
186  procMan = G4GenericIon::GenericIon()->GetProcessManager();
187 
188  // elastic
189  G4HadronElasticProcess* ionProcEl = new G4HadronElasticProcess;
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