9#include <simulation/physicslist/GammaLeptoNuclearPhysics.h>
11#include "G4ProcessManager.hh"
12#include "G4HadronInelasticProcess.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 "G4PhotoNuclearCrossSection.hh"
27#include "G4GammaNuclearXS.hh"
29#include "G4HadronicParameters.hh"
31#include "G4CrossSectionDataSetRegistry.hh"
33#include "G4SystemOfUnits.hh"
36using namespace Simulation;
39GammaLeptoNuclearPhysics::GammaLeptoNuclearPhysics(
const G4int verbosityLevel)
40 : m_qgsp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
41 m_fragModel(nullptr), m_preCompoundModel(nullptr), m_useGammaNuclearXS(false)
43 G4HadronicParameters::Instance()->SetVerboseLevel(verbosityLevel);
59 G4CascadeInterface* theGammaReaction =
new G4CascadeInterface;
60 theGammaReaction->SetMinEnergy(0.0);
61 theGammaReaction->SetMaxEnergy(3.5 * GeV);
64 m_qgsp =
new G4TheoFSGenerator(
"QGSP");
67 new G4ExcitedStringDecay(
m_fragModel =
new G4QGSMFragmentation);
73 m_qgsp->SetMinEnergy(3 * GeV);
74 m_qgsp->SetMaxEnergy(100 * TeV);
77 G4ElectroVDNuclearModel* evdn =
new G4ElectroVDNuclearModel;
78 G4MuonVDNuclearModel* mvdn =
new G4MuonVDNuclearModel;
81 G4ProcessManager* procMan = 0;
84 procMan = G4Gamma::Gamma()->GetProcessManager();
85 G4HadronInelasticProcess* pnProc =
new G4HadronInelasticProcess(
"photonNuclear", G4Gamma::Definition());
86 auto xsreg = G4CrossSectionDataSetRegistry::Instance();
87 G4VCrossSectionDataSet* xs =
nullptr;
89 xs = xsreg->GetCrossSectionDataSet(
"GammaNuclearXS");
90 if (
nullptr == xs) xs =
new G4GammaNuclearXS();
92 xs = xsreg->GetCrossSectionDataSet(
"PhotoNuclearXS");
93 if (
nullptr == xs) xs =
new G4PhotoNuclearCrossSection();
95 pnProc->AddDataSet(xs);
96 pnProc->RegisterMe(theGammaReaction);
97 pnProc->RegisterMe(
m_qgsp);
98 procMan->AddDiscreteProcess(pnProc);
101 procMan = G4Electron::Electron()->GetProcessManager();
102 G4ElectronNuclearProcess* emn =
new G4ElectronNuclearProcess;
103 emn->RegisterMe(evdn);
104 procMan->AddDiscreteProcess(emn);
107 procMan = G4Positron::Positron()->GetProcessManager();
108 G4PositronNuclearProcess* epn =
new G4PositronNuclearProcess;
109 epn->RegisterMe(evdn);
110 procMan->AddDiscreteProcess(epn);
113 procMan = G4MuonMinus::MuonMinus()->GetProcessManager();
114 G4MuonNuclearProcess* mun =
new G4MuonNuclearProcess;
115 mun->RegisterMe(mvdn);
116 procMan->AddDiscreteProcess(mun);
119 procMan = G4MuonPlus::MuonPlus()->GetProcessManager();
120 procMan->AddDiscreteProcess(mun);
G4TheoFSGenerator * m_qgsp
Final state generator for QCD string models.
G4QGSModel< G4GammaParticipants > * m_stringModel
Quark Gluon String model.
virtual void ConstructParticle() override
Build all particle types used in physics list (empty in this class)
G4QGSMFragmentation * m_fragModel
Quark Gluon String fragmentation model.
G4bool m_useGammaNuclearXS
Switch between GammaNuclearXS and PhotoNuclearXS.
~GammaLeptoNuclearPhysics()
Destructor.
G4GeneratorPrecompoundInterface * m_preCompoundModel
Precompound model to deexcite post-collision nucleus.
G4ExcitedStringDecay * m_stringDecay
Model to decay strings into hadrons.
virtual void ConstructProcess() override
Build processes, models, cross sections used in physics list.
Abstract base class for different kinds of events.