Belle II Software development
GammaLeptoNuclearPhysics.cc
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8
9#include <simulation/physicslist/GammaLeptoNuclearPhysics.h>
10
11#include "G4ProcessManager.hh"
12#include "G4HadronInelasticProcess.hh"
13#include "G4ElectronNuclearProcess.hh"
14#include "G4PositronNuclearProcess.hh"
15#include "G4MuonNuclearProcess.hh"
16
17#include "G4CascadeInterface.hh"
18#include "G4ElectroVDNuclearModel.hh"
19#include "G4MuonVDNuclearModel.hh"
20
21#include "G4TheoFSGenerator.hh"
22#include "G4ExcitedStringDecay.hh"
23#include "G4QGSMFragmentation.hh"
24#include "G4GeneratorPrecompoundInterface.hh"
25
26#include "G4PhotoNuclearCrossSection.hh"
27#include "G4GammaNuclearXS.hh"
28
29#include "G4HadronicParameters.hh"
30
31#include "G4CrossSectionDataSetRegistry.hh"
32
33#include "G4SystemOfUnits.hh"
34#include "G4GammaParticipants.hh"
35#include "G4QGSModel.hh"
36
37using namespace Belle2;
38using namespace Simulation;
39
40
42 : m_qgsp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
43 m_fragModel(nullptr), m_preCompoundModel(nullptr), m_useGammaNuclearXS(false)
44{
45 G4HadronicParameters::Instance()->SetVerboseLevel(verbosityLevel);
46}
47
48
56
57
59{
60 // Use Bertini cascade for low energies
61 G4CascadeInterface* theGammaReaction = new G4CascadeInterface;
62 theGammaReaction->SetMinEnergy(0.0);
63 theGammaReaction->SetMaxEnergy(3.5 * GeV);
64
65 // Use QGSP for high energies
66 m_qgsp = new G4TheoFSGenerator("QGSP");
69 new G4ExcitedStringDecay(m_fragModel = new G4QGSMFragmentation);
70 m_stringModel->SetFragmentationModel(m_stringDecay);
71 m_preCompoundModel = new G4GeneratorPrecompoundInterface();
72
73 m_qgsp->SetHighEnergyGenerator(m_stringModel);
74 m_qgsp->SetTransport(m_preCompoundModel);
75 m_qgsp->SetMinEnergy(3 * GeV);
76 m_qgsp->SetMaxEnergy(100 * TeV);
77
78 // Lepto-nuclear models
79 G4ElectroVDNuclearModel* evdn = new G4ElectroVDNuclearModel;
80 G4MuonVDNuclearModel* mvdn = new G4MuonVDNuclearModel;
81
82
83 G4ProcessManager* procMan = 0;
84
85 // Gamma
86 procMan = G4Gamma::Gamma()->GetProcessManager();
87 G4HadronInelasticProcess* pnProc = new G4HadronInelasticProcess("photonNuclear", G4Gamma::Definition());
88 auto xsreg = G4CrossSectionDataSetRegistry::Instance();
89 G4VCrossSectionDataSet* xs = nullptr;
91 xs = xsreg->GetCrossSectionDataSet("GammaNuclearXS");
92 if (nullptr == xs) xs = new G4GammaNuclearXS();
93 } else {
94 xs = xsreg->GetCrossSectionDataSet("PhotoNuclearXS");
95 if (nullptr == xs) xs = new G4PhotoNuclearCrossSection();
96 }
97 pnProc->AddDataSet(xs);
98 pnProc->RegisterMe(theGammaReaction);
99 pnProc->RegisterMe(m_qgsp);
100 procMan->AddDiscreteProcess(pnProc);
101
102 // Electron
103 procMan = G4Electron::Electron()->GetProcessManager();
104 G4ElectronNuclearProcess* emn = new G4ElectronNuclearProcess;
105 emn->RegisterMe(evdn);
106 procMan->AddDiscreteProcess(emn);
107
108 // Positron
109 procMan = G4Positron::Positron()->GetProcessManager();
110 G4PositronNuclearProcess* epn = new G4PositronNuclearProcess;
111 epn->RegisterMe(evdn);
112 procMan->AddDiscreteProcess(epn);
113
114 // Muon-
115 procMan = G4MuonMinus::MuonMinus()->GetProcessManager();
116 G4MuonNuclearProcess* mun = new G4MuonNuclearProcess;
117 mun->RegisterMe(mvdn);
118 procMan->AddDiscreteProcess(mun);
119
120 // Muon+
121 procMan = G4MuonPlus::MuonPlus()->GetProcessManager();
122 procMan->AddDiscreteProcess(mun);
123
124}
125
126
129
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.
G4GeneratorPrecompoundInterface * m_preCompoundModel
Precompound model to deexcite post-collision nucleus.
G4ExcitedStringDecay * m_stringDecay
Model to decay strings into hadrons.
GammaLeptoNuclearPhysics(const G4int verbosityLevel=0)
Constructor.
virtual void ConstructProcess() override
Build processes, models, cross sections used in physics list.
Abstract base class for different kinds of events.