EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
eASTGammaLeptoNuclearPhysics.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file eASTGammaLeptoNuclearPhysics.cc
1 
2 //
3 // eASTGammaLeptoNuclearPhysics.cc
4 // Description: Gamma-nuclear, electro-nuclear and muon-nuclear physics
5 // constructor for eASTPhysicsList
6 //
7 // Jun.21.2018 : original implementation - 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 
15 
16 #include "G4ProcessManager.hh"
17 #include "G4Version.hh"
18 #if G4VERSION_NUMBER < 1100
19 #include "G4PhotoNuclearProcess.hh"
20 #else
21 #include "G4HadronInelasticProcess.hh"
22 #include "G4PhotoNuclearCrossSection.hh"
23 #include "G4HadronicProcess.hh"
24 #endif
25 #include "G4ElectronNuclearProcess.hh"
26 #include "G4PositronNuclearProcess.hh"
27 #include "G4MuonNuclearProcess.hh"
28 
29 #include "G4CascadeInterface.hh"
30 #include "G4ElectroVDNuclearModel.hh"
31 #include "G4MuonVDNuclearModel.hh"
32 
33 #include "G4TheoFSGenerator.hh"
34 #include "G4ExcitedStringDecay.hh"
35 #include "G4QGSMFragmentation.hh"
36 #include "G4GeneratorPrecompoundInterface.hh"
37 
38 #include "G4SystemOfUnits.hh"
39 
40 #if G4VERSION_NUMBER < 1100
42 {}
43 
45 {
46  delete stringDecay;
47  delete stringModel;
48  delete fragModel;
49  delete preCompoundModel;
50 }
51 #else
53 : G4VPhysicsConstructor("eASTGammaLeptoNuclear")
54 {;}
55 
57 {;}
58 #endif
59 
61 {
62  // Use Bertini cascade for low energies
63  G4CascadeInterface* theGammaReaction = new G4CascadeInterface;
64  theGammaReaction->SetMinEnergy(0.0);
65  theGammaReaction->SetMaxEnergy(3.5*GeV);
66 
67  // Use QGSP for high energies
68  qgsp = new G4TheoFSGenerator("QGSP");
69  stringModel = new G4QGSModel<G4GammaParticipants>;
70  stringDecay =
71  new G4ExcitedStringDecay(fragModel = new G4QGSMFragmentation);
72  stringModel->SetFragmentationModel(stringDecay);
73  preCompoundModel = new G4GeneratorPrecompoundInterface();
74 
75  qgsp->SetHighEnergyGenerator(stringModel);
76  qgsp->SetTransport(preCompoundModel);
77  qgsp->SetMinEnergy(3*GeV);
78  qgsp->SetMaxEnergy(100*TeV);
79 
80 
81  G4ProcessManager* procMan = 0;
82 
83  // Gamma
84  procMan = G4Gamma::Gamma()->GetProcessManager();
85 #if G4VERSION_NUMBER < 1100
86  G4PhotoNuclearProcess* pnProc = new G4PhotoNuclearProcess;
87 #else
88  auto* pnProc = new G4HadronInelasticProcess("PhotoNuclearProcess",
89  G4Gamma::Gamma() );
90  pnProc->AddDataSet(new G4PhotoNuclearCrossSection);
91 #endif
92  pnProc->RegisterMe(theGammaReaction);
93  pnProc->RegisterMe(qgsp);
94  procMan->AddDiscreteProcess(pnProc);
95 
96 //#if G4VERSION_NUMBER >= 1100
97 // auto* photonCapture = new G4HadronicProcess( "photonNuclear", fCapture );
98 // auto* photonFission = new G4HadronicProcess( "photonFission", fFission );
99 // procMan->AddDiscreteProcess(photonCapture);
100 // procMan->AddDiscreteProcess(photonFission);
101 //#endif
102 
103  // Lepto-nuclear models
104  G4ElectroVDNuclearModel* evdn = new G4ElectroVDNuclearModel;
105  G4MuonVDNuclearModel* mvdn = new G4MuonVDNuclearModel;
106 
107  // Electron
108  procMan = G4Electron::Electron()->GetProcessManager();
109  G4ElectronNuclearProcess* emn = new G4ElectronNuclearProcess;
110  emn->RegisterMe(evdn);
111  procMan->AddDiscreteProcess(emn);
112 
113  // Positron
114  procMan = G4Positron::Positron()->GetProcessManager();
115  G4PositronNuclearProcess* epn = new G4PositronNuclearProcess;
116  epn->RegisterMe(evdn);
117  procMan->AddDiscreteProcess(epn);
118 
119  // Muon-
120  procMan = G4MuonMinus::MuonMinus()->GetProcessManager();
121  G4MuonNuclearProcess* mun = new G4MuonNuclearProcess;
122  mun->RegisterMe(mvdn);
123  procMan->AddDiscreteProcess(mun);
124 
125  // Muon+
126  procMan = G4MuonPlus::MuonPlus()->GetProcessManager();
127  procMan->AddDiscreteProcess(mun);
128 
129 }
130 
131 
133 {}
134