Belle II Software  release-08-01-10
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 
35 using namespace Belle2;
36 using namespace Simulation;
37 
38 
40  : m_qgsp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
41  m_fragModel(nullptr), m_preCompoundModel(nullptr), m_useGammaNuclearXS(false)
42 {
43  G4HadronicParameters::Instance()->SetVerboseLevel(verbosityLevel);
44 }
45 
46 
48 {
49  delete m_stringDecay;
50  delete m_stringModel;
51  delete m_fragModel;
52  delete m_preCompoundModel;
53 }
54 
55 
57 {
58  // Use Bertini cascade for low energies
59  G4CascadeInterface* theGammaReaction = new G4CascadeInterface;
60  theGammaReaction->SetMinEnergy(0.0);
61  theGammaReaction->SetMaxEnergy(3.5 * GeV);
62 
63  // Use QGSP for high energies
64  m_qgsp = new G4TheoFSGenerator("QGSP");
65  m_stringModel = new G4QGSModel<G4GammaParticipants>;
67  new G4ExcitedStringDecay(m_fragModel = new G4QGSMFragmentation);
68  m_stringModel->SetFragmentationModel(m_stringDecay);
69  m_preCompoundModel = new G4GeneratorPrecompoundInterface();
70 
71  m_qgsp->SetHighEnergyGenerator(m_stringModel);
72  m_qgsp->SetTransport(m_preCompoundModel);
73  m_qgsp->SetMinEnergy(3 * GeV);
74  m_qgsp->SetMaxEnergy(100 * TeV);
75 
76  // Lepto-nuclear models
77  G4ElectroVDNuclearModel* evdn = new G4ElectroVDNuclearModel;
78  G4MuonVDNuclearModel* mvdn = new G4MuonVDNuclearModel;
79 
80 
81  G4ProcessManager* procMan = 0;
82 
83  // Gamma
84  procMan = G4Gamma::Gamma()->GetProcessManager();
85  G4HadronInelasticProcess* pnProc = new G4HadronInelasticProcess("photonNuclear", G4Gamma::Definition());
86  auto xsreg = G4CrossSectionDataSetRegistry::Instance();
87  G4VCrossSectionDataSet* xs = nullptr;
88  if (m_useGammaNuclearXS) {
89  xs = xsreg->GetCrossSectionDataSet("GammaNuclearXS");
90  if (nullptr == xs) xs = new G4GammaNuclearXS();
91  } else {
92  xs = xsreg->GetCrossSectionDataSet("PhotoNuclearXS");
93  if (nullptr == xs) xs = new G4PhotoNuclearCrossSection();
94  }
95  pnProc->AddDataSet(xs);
96  pnProc->RegisterMe(theGammaReaction);
97  pnProc->RegisterMe(m_qgsp);
98  procMan->AddDiscreteProcess(pnProc);
99 
100  // Electron
101  procMan = G4Electron::Electron()->GetProcessManager();
102  G4ElectronNuclearProcess* emn = new G4ElectronNuclearProcess;
103  emn->RegisterMe(evdn);
104  procMan->AddDiscreteProcess(emn);
105 
106  // Positron
107  procMan = G4Positron::Positron()->GetProcessManager();
108  G4PositronNuclearProcess* epn = new G4PositronNuclearProcess;
109  epn->RegisterMe(evdn);
110  procMan->AddDiscreteProcess(epn);
111 
112  // Muon-
113  procMan = G4MuonMinus::MuonMinus()->GetProcessManager();
114  G4MuonNuclearProcess* mun = new G4MuonNuclearProcess;
115  mun->RegisterMe(mvdn);
116  procMan->AddDiscreteProcess(mun);
117 
118  // Muon+
119  procMan = G4MuonPlus::MuonPlus()->GetProcessManager();
120  procMan->AddDiscreteProcess(mun);
121 
122 }
123 
124 
126 {}
127 
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.