9 #include <simulation/physicslist/GammaLeptoNuclearPhysics.h>
11 #include "G4ProcessManager.hh"
12 #include "G4PhotoNuclearProcess.hh"
13 #include "G4ElectronNuclearProcess.hh"
14 #include "G4PositronNuclearProcess.hh"
15 #include "G4MuonNuclearProcess.hh"
17 #include "G4CascadeInterface.hh"
18 #include "G4ElectroVDNuclearModel.hh"
19 #include "G4MuonVDNuclearModel.hh"
21 #include "G4TheoFSGenerator.hh"
22 #include "G4ExcitedStringDecay.hh"
23 #include "G4QGSMFragmentation.hh"
24 #include "G4GeneratorPrecompoundInterface.hh"
26 #include "G4SystemOfUnits.hh"
29 using namespace Simulation;
32 GammaLeptoNuclearPhysics::GammaLeptoNuclearPhysics()
33 : m_qgsp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
34 m_fragModel(nullptr), m_preCompoundModel(nullptr)
38 GammaLeptoNuclearPhysics::~GammaLeptoNuclearPhysics()
43 delete m_preCompoundModel;
47 void GammaLeptoNuclearPhysics::ConstructProcess()
50 G4CascadeInterface* theGammaReaction =
new G4CascadeInterface;
51 theGammaReaction->SetMinEnergy(0.0);
52 theGammaReaction->SetMaxEnergy(3.5 * GeV);
55 m_qgsp =
new G4TheoFSGenerator(
"QGSP");
56 m_stringModel =
new G4QGSModel<G4GammaParticipants>;
58 new G4ExcitedStringDecay(m_fragModel =
new G4QGSMFragmentation);
59 m_stringModel->SetFragmentationModel(m_stringDecay);
60 m_preCompoundModel =
new G4GeneratorPrecompoundInterface();
62 m_qgsp->SetHighEnergyGenerator(m_stringModel);
63 m_qgsp->SetTransport(m_preCompoundModel);
64 m_qgsp->SetMinEnergy(3 * GeV);
65 m_qgsp->SetMaxEnergy(100 * TeV);
68 G4ElectroVDNuclearModel* evdn =
new G4ElectroVDNuclearModel;
69 G4MuonVDNuclearModel* mvdn =
new G4MuonVDNuclearModel;
72 G4ProcessManager* procMan = 0;
75 procMan = G4Gamma::Gamma()->GetProcessManager();
76 G4PhotoNuclearProcess* pnProc =
new G4PhotoNuclearProcess;
77 pnProc->RegisterMe(theGammaReaction);
78 pnProc->RegisterMe(m_qgsp);
79 procMan->AddDiscreteProcess(pnProc);
82 procMan = G4Electron::Electron()->GetProcessManager();
83 G4ElectronNuclearProcess* emn =
new G4ElectronNuclearProcess;
84 emn->RegisterMe(evdn);
85 procMan->AddDiscreteProcess(emn);
88 procMan = G4Positron::Positron()->GetProcessManager();
89 G4PositronNuclearProcess* epn =
new G4PositronNuclearProcess;
90 epn->RegisterMe(evdn);
91 procMan->AddDiscreteProcess(epn);
94 procMan = G4MuonMinus::MuonMinus()->GetProcessManager();
95 G4MuonNuclearProcess* mun =
new G4MuonNuclearProcess;
96 mun->RegisterMe(mvdn);
97 procMan->AddDiscreteProcess(mun);
100 procMan = G4MuonPlus::MuonPlus()->GetProcessManager();
101 procMan->AddDiscreteProcess(mun);
106 void GammaLeptoNuclearPhysics::ConstructParticle()
Abstract base class for different kinds of events.