EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
eASTIonPhysics.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file eASTIonPhysics.cc
1 
2 //
3 // eASTIonPhysics.cc
4 // Ion hadronic physics constructor for eASTPhysicsList
5 //
6 // Jun.21.2018 : original implementation - Dennis H. Wright (SLAC)
7 // May.06.2021 : migration to eAST - Makoto Asai (SLAC)
8 //
10 
11 
12 #include "eASTIonPhysics.hh"
13 
14 #include "G4ProcessManager.hh"
15 #include "G4HadronElasticProcess.hh"
16 #include "G4HadronInelasticProcess.hh"
17 
18 #include "G4TheoFSGenerator.hh"
19 #include "G4FTFModel.hh"
20 #include "G4ExcitedStringDecay.hh"
21 #include "G4LundStringFragmentation.hh"
22 #include "G4GeneratorPrecompoundInterface.hh"
23 #include "G4QMDReaction.hh"
24 #include "G4HadronicInteractionRegistry.hh"
25 #include "G4PreCompoundModel.hh"
26 #include "G4BinaryLightIonReaction.hh"
27 #include "G4HadronElastic.hh"
28 #include "G4NuclNuclDiffuseElastic.hh"
29 
30 #include "G4CrossSectionElastic.hh"
31 #include "G4CrossSectionInelastic.hh"
32 #include "G4ComponentGGNuclNuclXsc.hh"
33 #include "G4SystemOfUnits.hh"
34 
35 #include "G4Version.hh"
36 #if G4VERSION_NUMBER < 1100
38 {}
39 
41 {
42  delete stringDecay;
43  delete stringModel;
44  delete fragModel;
45  delete preCompoundModel;
46 
47  delete theGGNuclNuclXS;
48  delete ionGGXS;
49 }
50 #else
52 : G4VPhysicsConstructor("eASTIon")
53 {;}
54 
56 {;}
57 #endif
58 
60 {}
61 
62 
64 {
65  G4ProcessManager* procMan = 0;
66 
67  // Elastic model for generic ions (z > 2)
68  G4NuclNuclDiffuseElastic* ionElastic = new G4NuclNuclDiffuseElastic;
69  ionElastic->SetMinEnergy(0.0);
70 
71  // FTFP ==>> eventually replace this with new class FTFPInterface
72  ftfp = new G4TheoFSGenerator("FTFP");
73  stringModel = new G4FTFModel;
74  stringDecay =
75  new G4ExcitedStringDecay(fragModel = new G4LundStringFragmentation);
76  stringModel->SetFragmentationModel(stringDecay);
77  preCompoundModel = new G4GeneratorPrecompoundInterface();
78 
79  ftfp->SetHighEnergyGenerator(stringModel);
80  ftfp->SetTransport(preCompoundModel);
81  ftfp->SetMinEnergy(10.01*GeV);
82  ftfp->SetMaxEnergy(1.0*TeV);
83 
84  // QMD model
85  G4QMDReaction* qmd = new G4QMDReaction;
86  qmd->SetMinEnergy(100.0*MeV);
87  qmd->SetMaxEnergy(10.0*GeV);
88 
89  // BIC ion model
90  G4HadronicInteraction* p =
91  G4HadronicInteractionRegistry::Instance()->FindModel("PRECO");
92  G4PreCompoundModel* thePreCompound = static_cast<G4PreCompoundModel*>(p);
93  if(!thePreCompound) { thePreCompound = new G4PreCompoundModel; }
94 
95  G4BinaryLightIonReaction* ionBC = new G4BinaryLightIonReaction(thePreCompound);
96  ionBC->SetMinEnergy(0.0*MeV);
97  ionBC->SetMaxEnergy(110.0*MeV);
98 
99  // Elastic cross section set
100  ionGGXS = new G4ComponentGGNuclNuclXsc;
101  G4VCrossSectionDataSet* ionElasticXS = new G4CrossSectionElastic(ionGGXS);
102  ionElasticXS->SetMinKinEnergy(0.0);
103 
104  // Inelastic cross section set
105  theGGNuclNuclXS = new G4ComponentGGNuclNuclXsc();
106  G4VCrossSectionDataSet* nuclNuclXS =
107  new G4CrossSectionInelastic(theGGNuclNuclXS);
108 
110  // Deuteron //
112 
113  procMan = G4Deuteron::Deuteron()->GetProcessManager();
114 
115  // elastic
116  // no model available
117 
118  // inelastic
119  G4HadronInelasticProcess* deutProcInel =
120  new G4HadronInelasticProcess("DeuteronInelProcess", G4Deuteron::Deuteron() );
121  deutProcInel->RegisterMe(ionBC);
122  deutProcInel->RegisterMe(qmd);
123  deutProcInel->RegisterMe(ftfp);
124  deutProcInel->AddDataSet(nuclNuclXS);
125  procMan->AddDiscreteProcess(deutProcInel);
126 
128  // Triton //
130 
131  procMan = G4Triton::Triton()->GetProcessManager();
132 
133  // elastic
134  // no model available
135 
136  // inelastic
137  G4HadronInelasticProcess* tritProcInel =
138  new G4HadronInelasticProcess("TritonInelProcess", G4Triton::Triton() );
139  tritProcInel->RegisterMe(ionBC);
140  tritProcInel->RegisterMe(qmd);
141  tritProcInel->RegisterMe(ftfp);
142  tritProcInel->AddDataSet(nuclNuclXS);
143  procMan->AddDiscreteProcess(tritProcInel);
144 
146  // He3 //
148 
149  procMan = G4He3::He3()->GetProcessManager();
150 
151  // elastic
152  // no model available
153 
154  // inelastic
155  G4HadronInelasticProcess* he3ProcInel =
156  new G4HadronInelasticProcess("He3InelProcess", G4He3::He3() );
157  he3ProcInel->RegisterMe(ionBC);
158  he3ProcInel->RegisterMe(qmd);
159  he3ProcInel->RegisterMe(ftfp);
160  he3ProcInel->AddDataSet(nuclNuclXS);
161  procMan->AddDiscreteProcess(he3ProcInel);
162 
164  // Alpha //
166 
167  procMan = G4Alpha::Alpha()->GetProcessManager();
168 
169  // elastic
170  // no model available
171 
172  // inelastic
173  G4HadronInelasticProcess* alphProcInel =
174  new G4HadronInelasticProcess("AlphaInelProcess", G4Alpha::Alpha() );
175  alphProcInel->RegisterMe(ionBC);
176  alphProcInel->RegisterMe(qmd);
177  alphProcInel->RegisterMe(ftfp);
178  alphProcInel->AddDataSet(nuclNuclXS);
179  procMan->AddDiscreteProcess(alphProcInel);
180 
182  // Generic ion //
184 
185  procMan = G4GenericIon::GenericIon()->GetProcessManager();
186 
187  // elastic
188  G4HadronElasticProcess* ionProcEl = new G4HadronElasticProcess;
189  ionProcEl->RegisterMe(ionElastic);
190  ionProcEl->AddDataSet(ionElasticXS);
191  procMan->AddDiscreteProcess(ionProcEl);
192 
193  // inelastic
194  G4HadronInelasticProcess* genIonProcInel =
195  new G4HadronInelasticProcess("IonInelProcess", G4GenericIon::GenericIon() );
196  genIonProcInel->RegisterMe(ionBC);
197  genIonProcInel->RegisterMe(qmd);
198  genIonProcInel->RegisterMe(ftfp);
199  genIonProcInel->AddDataSet(nuclNuclXS);
200  procMan->AddDiscreteProcess(genIonProcInel);
201 
202 }
203 
205 {}
206