EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PionPhysics.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file PionPhysics.cc
1 // $Id: $
3 // //
4 // File: PionPhysics.cc //
5 // Description: Pion hadronic physics constructor for EICPhysicsList //
6 // //
7 // Author: Dennis H. Wright (SLAC) //
8 // Date: 21 June 2018 //
9 // //
11 
12 
13 #include "PionPhysics.hh"
14 
15 #include <Geant4/G4MesonConstructor.hh>
16 
17 #include <Geant4/G4ProcessManager.hh>
18 #include <Geant4/G4PionPlusInelasticProcess.hh>
19 #include <Geant4/G4PionMinusInelasticProcess.hh>
20 #include <Geant4/G4HadronElasticProcess.hh>
21 #include <Geant4/G4HadronicAbsorptionBertini.hh>
22 
23 #include <Geant4/G4CascadeInterface.hh>
24 #include <Geant4/G4TheoFSGenerator.hh>
25 #include <Geant4/G4FTFModel.hh>
26 #include <Geant4/G4ExcitedStringDecay.hh>
27 #include <Geant4/G4LundStringFragmentation.hh>
28 #include <Geant4/G4GeneratorPrecompoundInterface.hh>
29 #include <Geant4/G4HadronElastic.hh>
30 #include <Geant4/G4ElasticHadrNucleusHE.hh>
31 
32 #include <Geant4/G4PiNuclearCrossSection.hh>
33 #include <Geant4/G4CrossSectionPairGG.hh>
34 #include <Geant4/G4BGGPionElasticXS.hh>
35 
36 #include <Geant4/G4SystemOfUnits.hh>
37 
38 
40  ftfp(nullptr),
41  stringModel(nullptr),
42  stringDecay(nullptr),
43  fragModel(nullptr),
44  preCompoundModel(nullptr)
45 
46 {}
47 
48 
50 {
51  delete stringDecay;
52  delete stringModel;
53  delete fragModel;
54  delete preCompoundModel;
55 }
56 
57 
59 {}
60 
61 
63 {
64  G4ProcessManager* procMan;
65 
66  // Low energy elastic model
67  G4HadronElastic* loElModel = new G4HadronElastic();
68  loElModel->SetMaxEnergy(1.0001*GeV);
69 
70  // High energy elastic model
71  G4ElasticHadrNucleusHE* hiElModel = new G4ElasticHadrNucleusHE();
72  hiElModel->SetMinEnergy(1.0*GeV);
73 
74  // Use Bertini cascade for low energies
75  G4CascadeInterface* loInelModel = new G4CascadeInterface;
76  loInelModel->SetMinEnergy(0.0);
77  loInelModel->SetMaxEnergy(12.0*GeV);
78 
79  // Use FTFP for high energies ==>> eventually replace this with new class FTFPInterface
80  ftfp = new G4TheoFSGenerator("FTFP");
81  stringModel = new G4FTFModel;
82  stringDecay =
83  new G4ExcitedStringDecay(fragModel = new G4LundStringFragmentation);
84  stringModel->SetFragmentationModel(stringDecay);
85  preCompoundModel = new G4GeneratorPrecompoundInterface();
86 
87  ftfp->SetHighEnergyGenerator(stringModel);
88  ftfp->SetTransport(preCompoundModel);
89  ftfp->SetMinEnergy(10*GeV);
90  ftfp->SetMaxEnergy(100*TeV);
91 
92  // Inelastic cross section
93  G4VCrossSectionDataSet* piCS = new G4CrossSectionPairGG(new G4PiNuclearCrossSection, 91*GeV);
94 
96  // pi+ //
98 
99  procMan = G4PionPlus::PionPlus()->GetProcessManager();
100 
101  // elastic
102  G4HadronElasticProcess* pipProcEl = new G4HadronElasticProcess;
103  pipProcEl->RegisterMe(loElModel);
104  pipProcEl->RegisterMe(hiElModel);
105  pipProcEl->AddDataSet(new G4BGGPionElasticXS(G4PionPlus::PionPlus() ) );
106  procMan->AddDiscreteProcess(pipProcEl);
107 
108  // inelastic
109  G4PionPlusInelasticProcess* pipProcInel = new G4PionPlusInelasticProcess;
110  pipProcInel->RegisterMe(loInelModel);
111  pipProcInel->RegisterMe(ftfp);
112  pipProcInel->AddDataSet(piCS);
113  procMan->AddDiscreteProcess(pipProcInel);
114 
116  // pi- //
118 
119  procMan = G4PionMinus::PionMinus()->GetProcessManager();
120 
121  // elastic
122  G4HadronElasticProcess* pimProcEl = new G4HadronElasticProcess;
123  pimProcEl->RegisterMe(loElModel);
124  pimProcEl->RegisterMe(hiElModel);
125  pimProcEl->AddDataSet(new G4BGGPionElasticXS(G4PionMinus::PionMinus() ) );
126  procMan->AddDiscreteProcess(pimProcEl);
127 
128  // inelastic
129  G4PionMinusInelasticProcess* pimProcInel = new G4PionMinusInelasticProcess;
130  pimProcInel->RegisterMe(loInelModel);
131  pimProcInel->RegisterMe(ftfp);
132  pimProcInel->AddDataSet(piCS);
133  procMan->AddDiscreteProcess(pimProcInel);
134 
135  // stopping
136  G4HadronicAbsorptionBertini* bertAbsorb = new G4HadronicAbsorptionBertini;
137  procMan->AddRestProcess(bertAbsorb);
138 
139 }
140