EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
eASTProtonPhysics.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file eASTProtonPhysics.cc
1 
2 //
3 // eASTProtonPhysics.cc
4 // Proton 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 // Dec.22.2021 : migration to Geant4 version 11.0 - Makoto Asai (JLab)
9 //
11 
12 
13 #include "eASTProtonPhysics.hh"
14 
15 #include "G4ProcessManager.hh"
16 #include "G4Version.hh"
17 #if G4VERSION_NUMBER < 1100
18 #include "G4ProtonInelasticProcess.hh"
19 #else
20 #include "G4HadronInelasticProcess.hh"
21 #endif
22 #include "G4HadronElasticProcess.hh"
23 
24 #include "G4CascadeInterface.hh"
25 #include "G4TheoFSGenerator.hh"
26 #include "G4FTFModel.hh"
27 #include "G4ExcitedStringDecay.hh"
28 #include "G4LundStringFragmentation.hh"
29 #include "G4GeneratorPrecompoundInterface.hh"
30 #include "G4ChipsElasticModel.hh"
31 
32 #include "G4BGGNucleonInelasticXS.hh"
33 #include "G4ChipsProtonElasticXS.hh"
34 
35 #include "G4SystemOfUnits.hh"
36 
37 #if G4VERSION_NUMBER < 1100
39 {}
40 
42 {
43  delete stringDecay;
44  delete stringModel;
45  delete fragModel;
46  delete preCompoundModel;
47 }
48 #else
50 : G4VPhysicsConstructor("eASTProton")
51 {;}
52 
54 {;}
55 #endif
56 
58 {
59  // Low energy elastic model
60  G4ChipsElasticModel* elMod = new G4ChipsElasticModel();
61 
62  // Use Bertini cascade for low energies
63  G4CascadeInterface* loInelModel = new G4CascadeInterface;
64  loInelModel->SetMinEnergy(0.0);
65  loInelModel->SetMaxEnergy(12.0*GeV);
66 
67  // Use FTFP for high energies ==>> eventually replace this with new class FTFPInterface
68  ftfp = new G4TheoFSGenerator("FTFP");
69  stringModel = new G4FTFModel;
70  stringDecay =
71  new G4ExcitedStringDecay(fragModel = new G4LundStringFragmentation);
72  stringModel->SetFragmentationModel(stringDecay);
73  preCompoundModel = new G4GeneratorPrecompoundInterface();
74 
75  ftfp->SetHighEnergyGenerator(stringModel);
76  ftfp->SetTransport(preCompoundModel);
77  ftfp->SetMinEnergy(5*GeV);
78  ftfp->SetMaxEnergy(100*TeV);
79 
80  // Inelastic cross section
81  G4BGGNucleonInelasticXS* inelCS = new G4BGGNucleonInelasticXS(G4Proton::Proton() );
82  G4ChipsProtonElasticXS* elCS = new G4ChipsProtonElasticXS;
83 
84  G4ProcessManager* procMan = G4Proton::Proton()->GetProcessManager();
85 
86  // Elastic process
87  G4HadronElasticProcess* pProcEl = new G4HadronElasticProcess;
88  pProcEl->RegisterMe(elMod);
89  pProcEl->AddDataSet(elCS);
90  procMan->AddDiscreteProcess(pProcEl);
91 
92  // Inelastic process
93 #if G4VERSION_NUMBER < 1100
94  G4ProtonInelasticProcess* pProcInel = new G4ProtonInelasticProcess;
95 #else
96  auto* pProcInel = new G4HadronInelasticProcess("ProtonInelasticProcess",
97  G4Proton::Proton() );
98 #endif
99  pProcInel->RegisterMe(loInelModel);
100  pProcInel->RegisterMe(ftfp);
101  pProcInel->AddDataSet(inelCS);
102  procMan->AddDiscreteProcess(pProcInel);
103 
104 }
105 
106 
108 {}
109