EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
eASTPionPhysics.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file eASTPionPhysics.cc
1 
2 //
3 // eASTPionPhysics.hh
4 // Pion hadronic physics constructor for eASTPhysicsList
5 //
6 // Jun.21.2018 : original implementation - Dennis H. Wright (SLAC)
7 // May.02.2021 : migration to Geant4 version 10.7 - Dennis H. Wright (SLAC)
8 // May.06.2021 : migration to eAST - Makoto Asai (SLAC)
9 // Dec.22.2021 : migration to Geant4 version 11.0 - Makoto Asai (JLab)
10 //
12 
13 
14 #include "eASTPionPhysics.hh"
15 #include "G4MesonConstructor.hh"
16 
17 #include "G4ProcessManager.hh"
18 #include "G4Version.hh"
19 #if G4VERSION_NUMBER < 1100
20 #include "G4PionPlusInelasticProcess.hh"
21 #include "G4PionMinusInelasticProcess.hh"
22 #else
23 #include "G4HadronInelasticProcess.hh"
24 #endif
25 #include "G4HadronElasticProcess.hh"
26 #include "G4HadronicAbsorptionBertini.hh"
27 
28 #include "G4CascadeInterface.hh"
29 #include "G4TheoFSGenerator.hh"
30 #include "G4FTFModel.hh"
31 #include "G4ExcitedStringDecay.hh"
32 #include "G4LundStringFragmentation.hh"
33 #include "G4GeneratorPrecompoundInterface.hh"
34 #include "G4HadronElastic.hh"
35 #include "G4ElasticHadrNucleusHE.hh"
36 
37 #include "G4BGGPionElasticXS.hh"
38 #include "G4BGGPionInelasticXS.hh"
39 
40 #include "G4SystemOfUnits.hh"
41 
42 #if G4VERSION_NUMBER < 1100
44 {}
45 
47 {
48  delete stringDecay;
49  delete stringModel;
50  delete fragModel;
51  delete preCompoundModel;
52 }
53 #else
55 : G4VPhysicsConstructor("eASTPion")
56 {;}
57 
59 {;}
60 #endif
61 
63 {}
64 
65 
67 {
68  G4ProcessManager* procMan;
69 
70  // Low energy elastic model
71  G4HadronElastic* loElModel = new G4HadronElastic();
72  loElModel->SetMaxEnergy(1.0001*GeV);
73 
74  // High energy elastic model
75  G4ElasticHadrNucleusHE* hiElModel = new G4ElasticHadrNucleusHE();
76  hiElModel->SetMinEnergy(1.0*GeV);
77 
78  // Use Bertini cascade for low energies
79  G4CascadeInterface* loInelModel = new G4CascadeInterface;
80  loInelModel->SetMinEnergy(0.0);
81  loInelModel->SetMaxEnergy(12.0*GeV);
82 
83  // Use FTFP for high energies ==>> eventually replace this with new class FTFPInterface
84  ftfp = new G4TheoFSGenerator("FTFP");
85  stringModel = new G4FTFModel;
86  stringDecay =
87  new G4ExcitedStringDecay(fragModel = new G4LundStringFragmentation);
88  stringModel->SetFragmentationModel(stringDecay);
89  preCompoundModel = new G4GeneratorPrecompoundInterface();
90 
91  ftfp->SetHighEnergyGenerator(stringModel);
92  ftfp->SetTransport(preCompoundModel);
93  ftfp->SetMinEnergy(10*GeV);
94  ftfp->SetMaxEnergy(100*TeV);
95 
97  // pi+ //
99 
100  procMan = G4PionPlus::PionPlus()->GetProcessManager();
101 
102  // elastic
103  G4HadronElasticProcess* pipProcEl = new G4HadronElasticProcess;
104  pipProcEl->RegisterMe(loElModel);
105  pipProcEl->RegisterMe(hiElModel);
106  pipProcEl->AddDataSet(new G4BGGPionElasticXS(G4PionPlus::PionPlus() ) );
107  procMan->AddDiscreteProcess(pipProcEl);
108 
109  // inelastic
110 #if G4VERSION_NUMBER < 1100
111  G4PionPlusInelasticProcess* pipProcInel = new G4PionPlusInelasticProcess;
112 #else
113  auto* pipProcInel = new G4HadronInelasticProcess("PionPlusInelasticProcess",
114  G4PionPlus::PionPlus() );
115 #endif
116  pipProcInel->RegisterMe(loInelModel);
117  pipProcInel->RegisterMe(ftfp);
118  pipProcInel->AddDataSet(new G4BGGPionInelasticXS(G4PionPlus::PionPlus() ) );
119  procMan->AddDiscreteProcess(pipProcInel);
120 
122  // pi- //
124 
125  procMan = G4PionMinus::PionMinus()->GetProcessManager();
126 
127  // elastic
128  G4HadronElasticProcess* pimProcEl = new G4HadronElasticProcess;
129  pimProcEl->RegisterMe(loElModel);
130  pimProcEl->RegisterMe(hiElModel);
131  pimProcEl->AddDataSet(new G4BGGPionElasticXS(G4PionMinus::PionMinus() ) );
132  procMan->AddDiscreteProcess(pimProcEl);
133 
134  // inelastic
135 #if G4VERSION_NUMBER < 1100
136  G4PionMinusInelasticProcess* pimProcInel = new G4PionMinusInelasticProcess;
137 #else
138  auto* pimProcInel = new G4HadronInelasticProcess("PionMinusInelasticProcess",
139  G4PionMinus::PionMinus() );
140 #endif
141  pimProcInel->RegisterMe(loInelModel);
142  pimProcInel->RegisterMe(ftfp);
143  pimProcInel->AddDataSet(new G4BGGPionInelasticXS(G4PionMinus::PionMinus() ) );
144  procMan->AddDiscreteProcess(pimProcInel);
145 
146  // stopping
147  G4HadronicAbsorptionBertini* bertAbsorb = new G4HadronicAbsorptionBertini;
148  procMan->AddRestProcess(bertAbsorb);
149 
150 }
151