EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GammaLeptoNuclearPhysics.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file GammaLeptoNuclearPhysics.cc
1 // $Id: $
3 // //
4 // File: GammaLeptoNuclearPhysics.cc //
5 // Description: Gamma-nuclear, electro-nuclear and muon-nuclear physics //
6 // constructor for EICPhysicsList //
7 // //
8 // Author: Dennis H. Wright (SLAC) //
9 // Date: 20 July 2018 //
10 // //
12 
13 
15 
16 #include <Geant4/G4ProcessManager.hh>
17 #include <Geant4/G4PhotoNuclearProcess.hh>
18 #include <Geant4/G4ElectronNuclearProcess.hh>
19 #include <Geant4/G4PositronNuclearProcess.hh>
20 #include <Geant4/G4MuonNuclearProcess.hh>
21 
22 #include <Geant4/G4CascadeInterface.hh>
23 #include <Geant4/G4ElectroVDNuclearModel.hh>
24 #include <Geant4/G4MuonVDNuclearModel.hh>
25 
26 #include <Geant4/G4TheoFSGenerator.hh>
27 #include <Geant4/G4ExcitedStringDecay.hh>
28 #include <Geant4/G4QGSMFragmentation.hh>
29 #include <Geant4/G4GeneratorPrecompoundInterface.hh>
30 
31 #include <Geant4/G4SystemOfUnits.hh>
32 
33 
35  qgsp(nullptr),
36  stringModel(nullptr),
37  stringDecay(nullptr),
38  fragModel(nullptr),
39  preCompoundModel(nullptr)
40 {}
41 
42 
44 {
45  delete stringDecay;
46  delete stringModel;
47  delete fragModel;
48  delete preCompoundModel;
49 }
50 
51 
53 {
54  // Use Bertini cascade for low energies
55  G4CascadeInterface* theGammaReaction = new G4CascadeInterface;
56  theGammaReaction->SetMinEnergy(0.0);
57  theGammaReaction->SetMaxEnergy(3.5*GeV);
58 
59  // Use QGSP for high energies
60  qgsp = new G4TheoFSGenerator("QGSP");
61  stringModel = new G4QGSModel<G4GammaParticipants>;
62  stringDecay =
63  new G4ExcitedStringDecay(fragModel = new G4QGSMFragmentation);
64  stringModel->SetFragmentationModel(stringDecay);
65  preCompoundModel = new G4GeneratorPrecompoundInterface();
66 
67  qgsp->SetHighEnergyGenerator(stringModel);
68  qgsp->SetTransport(preCompoundModel);
69  qgsp->SetMinEnergy(3*GeV);
70  qgsp->SetMaxEnergy(100*TeV);
71 
72  // Lepto-nuclear models
73  G4ElectroVDNuclearModel* evdn = new G4ElectroVDNuclearModel;
74  G4MuonVDNuclearModel* mvdn = new G4MuonVDNuclearModel;
75 
76 
77  G4ProcessManager* procMan = 0;
78 
79  // Gamma
80  procMan = G4Gamma::Gamma()->GetProcessManager();
81  G4PhotoNuclearProcess* pnProc = new G4PhotoNuclearProcess;
82  pnProc->RegisterMe(theGammaReaction);
83  pnProc->RegisterMe(qgsp);
84  procMan->AddDiscreteProcess(pnProc);
85 
86  // Electron
87  procMan = G4Electron::Electron()->GetProcessManager();
88  G4ElectronNuclearProcess* emn = new G4ElectronNuclearProcess;
89  emn->RegisterMe(evdn);
90  procMan->AddDiscreteProcess(emn);
91 
92  // Positron
93  procMan = G4Positron::Positron()->GetProcessManager();
94  G4PositronNuclearProcess* epn = new G4PositronNuclearProcess;
95  epn->RegisterMe(evdn);
96  procMan->AddDiscreteProcess(epn);
97 
98  // Muon-
99  procMan = G4MuonMinus::MuonMinus()->GetProcessManager();
100  G4MuonNuclearProcess* mun = new G4MuonNuclearProcess;
101  mun->RegisterMe(mvdn);
102  procMan->AddDiscreteProcess(mun);
103 
104  // Muon+
105  procMan = G4MuonPlus::MuonPlus()->GetProcessManager();
106  procMan->AddDiscreteProcess(mun);
107 
108 }
109 
110 
112 {}
113