Belle II Software  release-06-02-00
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 "G4PhotoNuclearProcess.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 "G4SystemOfUnits.hh"
27 
28 using namespace Belle2;
29 using namespace Simulation;
30 
31 
32 GammaLeptoNuclearPhysics::GammaLeptoNuclearPhysics()
33  : m_qgsp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
34  m_fragModel(nullptr), m_preCompoundModel(nullptr)
35 {}
36 
37 
38 GammaLeptoNuclearPhysics::~GammaLeptoNuclearPhysics()
39 {
40  delete m_stringDecay;
41  delete m_stringModel;
42  delete m_fragModel;
43  delete m_preCompoundModel;
44 }
45 
46 
47 void GammaLeptoNuclearPhysics::ConstructProcess()
48 {
49  // Use Bertini cascade for low energies
50  G4CascadeInterface* theGammaReaction = new G4CascadeInterface;
51  theGammaReaction->SetMinEnergy(0.0);
52  theGammaReaction->SetMaxEnergy(3.5 * GeV);
53 
54  // Use QGSP for high energies
55  m_qgsp = new G4TheoFSGenerator("QGSP");
56  m_stringModel = new G4QGSModel<G4GammaParticipants>;
57  m_stringDecay =
58  new G4ExcitedStringDecay(m_fragModel = new G4QGSMFragmentation);
59  m_stringModel->SetFragmentationModel(m_stringDecay);
60  m_preCompoundModel = new G4GeneratorPrecompoundInterface();
61 
62  m_qgsp->SetHighEnergyGenerator(m_stringModel);
63  m_qgsp->SetTransport(m_preCompoundModel);
64  m_qgsp->SetMinEnergy(3 * GeV);
65  m_qgsp->SetMaxEnergy(100 * TeV);
66 
67  // Lepto-nuclear models
68  G4ElectroVDNuclearModel* evdn = new G4ElectroVDNuclearModel;
69  G4MuonVDNuclearModel* mvdn = new G4MuonVDNuclearModel;
70 
71 
72  G4ProcessManager* procMan = 0;
73 
74  // Gamma
75  procMan = G4Gamma::Gamma()->GetProcessManager();
76  G4PhotoNuclearProcess* pnProc = new G4PhotoNuclearProcess;
77  pnProc->RegisterMe(theGammaReaction);
78  pnProc->RegisterMe(m_qgsp);
79  procMan->AddDiscreteProcess(pnProc);
80 
81  // Electron
82  procMan = G4Electron::Electron()->GetProcessManager();
83  G4ElectronNuclearProcess* emn = new G4ElectronNuclearProcess;
84  emn->RegisterMe(evdn);
85  procMan->AddDiscreteProcess(emn);
86 
87  // Positron
88  procMan = G4Positron::Positron()->GetProcessManager();
89  G4PositronNuclearProcess* epn = new G4PositronNuclearProcess;
90  epn->RegisterMe(evdn);
91  procMan->AddDiscreteProcess(epn);
92 
93  // Muon-
94  procMan = G4MuonMinus::MuonMinus()->GetProcessManager();
95  G4MuonNuclearProcess* mun = new G4MuonNuclearProcess;
96  mun->RegisterMe(mvdn);
97  procMan->AddDiscreteProcess(mun);
98 
99  // Muon+
100  procMan = G4MuonPlus::MuonPlus()->GetProcessManager();
101  procMan->AddDiscreteProcess(mun);
102 
103 }
104 
105 
106 void GammaLeptoNuclearPhysics::ConstructParticle()
107 {}
108 
Abstract base class for different kinds of events.