EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ProtonPhysics.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file ProtonPhysics.cc
1 // $Id: $
3 // //
4 // File: ProtonPhysics.cc //
5 // Description: Proton hadronic physics constructor for EICPhysicsList //
6 // //
7 // Author: Dennis H. Wright (SLAC) //
8 // Date: 22 June 2018 //
9 // //
11 
12 
13 #include "ProtonPhysics.hh"
14 
15 #include <Geant4/G4ProcessManager.hh>
16 #include <Geant4/G4ProtonInelasticProcess.hh>
17 #include <Geant4/G4HadronElasticProcess.hh>
18 
19 #include <Geant4/G4CascadeInterface.hh>
20 #include <Geant4/G4TheoFSGenerator.hh>
21 #include <Geant4/G4FTFModel.hh>
22 #include <Geant4/G4ExcitedStringDecay.hh>
23 #include <Geant4/G4LundStringFragmentation.hh>
24 #include <Geant4/G4GeneratorPrecompoundInterface.hh>
25 #include <Geant4/G4ChipsElasticModel.hh>
26 
27 #include <Geant4/G4BGGNucleonInelasticXS.hh>
28 #include <Geant4/G4ChipsProtonElasticXS.hh>
29 
30 #include <Geant4/G4SystemOfUnits.hh>
31 
32 
34  ftfp(nullptr),
35  stringModel(nullptr),
36  stringDecay(nullptr),
37  fragModel(nullptr),
38  preCompoundModel(nullptr)
39 {}
40 
41 
43 {
44  delete stringDecay;
45  delete stringModel;
46  delete fragModel;
47  delete preCompoundModel;
48 }
49 
50 
52 {
53  // Low energy elastic model
54  G4ChipsElasticModel* elMod = new G4ChipsElasticModel();
55 
56  // Use Bertini cascade for low energies
57  G4CascadeInterface* loInelModel = new G4CascadeInterface;
58  loInelModel->SetMinEnergy(0.0);
59  loInelModel->SetMaxEnergy(12.0*GeV);
60 
61  // Use FTFP for high energies ==>> eventually replace this with new class FTFPInterface
62  ftfp = new G4TheoFSGenerator("FTFP");
63  stringModel = new G4FTFModel;
64  stringDecay =
65  new G4ExcitedStringDecay(fragModel = new G4LundStringFragmentation);
66  stringModel->SetFragmentationModel(stringDecay);
67  preCompoundModel = new G4GeneratorPrecompoundInterface();
68 
69  ftfp->SetHighEnergyGenerator(stringModel);
70  ftfp->SetTransport(preCompoundModel);
71  ftfp->SetMinEnergy(5*GeV);
72  ftfp->SetMaxEnergy(100*TeV);
73 
74  // Inelastic cross section
75  G4BGGNucleonInelasticXS* inelCS = new G4BGGNucleonInelasticXS(G4Proton::Proton() );
76  G4ChipsProtonElasticXS* elCS = new G4ChipsProtonElasticXS;
77 
78  G4ProcessManager* procMan = G4Proton::Proton()->GetProcessManager();
79 
80  // Elastic process
81  G4HadronElasticProcess* pProcEl = new G4HadronElasticProcess;
82  pProcEl->RegisterMe(elMod);
83  pProcEl->AddDataSet(elCS);
84  procMan->AddDiscreteProcess(pProcEl);
85 
86  // Inelastic process
87  G4ProtonInelasticProcess* pProcInel = new G4ProtonInelasticProcess;
88  pProcInel->RegisterMe(loInelModel);
89  pProcInel->RegisterMe(ftfp);
90  pProcInel->AddDataSet(inelCS);
91  procMan->AddDiscreteProcess(pProcInel);
92 
93 }
94 
95 
97 {}
98