Belle II Software  release-08-01-10
ProtonPhysics.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/ProtonPhysics.h>
10 
11 #include "G4ProcessManager.hh"
12 #include "G4HadronInelasticProcess.hh"
13 #include "G4HadronElasticProcess.hh"
14 
15 #include "G4CascadeInterface.hh"
16 #include "G4TheoFSGenerator.hh"
17 #include "G4FTFModel.hh"
18 #include "G4ExcitedStringDecay.hh"
19 #include "G4LundStringFragmentation.hh"
20 #include "G4GeneratorPrecompoundInterface.hh"
21 #include "G4ChipsElasticModel.hh"
22 
23 #include "G4BGGNucleonInelasticXS.hh"
24 #include "G4ChipsProtonElasticXS.hh"
25 
26 #include "G4SystemOfUnits.hh"
27 
28 using namespace Belle2;
29 using namespace Simulation;
30 
31 
32 ProtonPhysics::ProtonPhysics()
33  : m_ftfp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
34  m_fragModel(nullptr), m_preCompoundModel(nullptr)
35 {}
36 
37 
38 ProtonPhysics::~ProtonPhysics()
39 {
40  delete m_stringDecay;
41  delete m_stringModel;
42  delete m_fragModel;
43  delete m_preCompoundModel;
44 }
45 
46 
47 void ProtonPhysics::ConstructProcess()
48 {
49  // Low energy elastic model
50  G4ChipsElasticModel* elMod = new G4ChipsElasticModel();
51 
52  // Use Bertini cascade for low energies
53  G4CascadeInterface* loInelModel = new G4CascadeInterface;
54  loInelModel->SetMinEnergy(0.0);
55  loInelModel->SetMaxEnergy(12.0 * GeV);
56 
57  // Use FTFP for high energies ==>> eventually replace this with new class FTFPInterface
58  m_ftfp = new G4TheoFSGenerator("FTFP");
59  m_stringModel = new G4FTFModel;
60  m_stringDecay =
61  new G4ExcitedStringDecay(m_fragModel = new G4LundStringFragmentation);
62  m_stringModel->SetFragmentationModel(m_stringDecay);
63  m_preCompoundModel = new G4GeneratorPrecompoundInterface();
64 
65  m_ftfp->SetHighEnergyGenerator(m_stringModel);
66  m_ftfp->SetTransport(m_preCompoundModel);
67  m_ftfp->SetMinEnergy(5 * GeV);
68  m_ftfp->SetMaxEnergy(100 * TeV);
69 
70  // Inelastic cross section
71  G4BGGNucleonInelasticXS* inelCS = new G4BGGNucleonInelasticXS(G4Proton::Proton());
72  G4ChipsProtonElasticXS* elCS = new G4ChipsProtonElasticXS;
73 
74  G4ProcessManager* procMan = G4Proton::Proton()->GetProcessManager();
75 
76  // Elastic process
77  G4HadronElasticProcess* pProcEl = new G4HadronElasticProcess;
78  pProcEl->RegisterMe(elMod);
79  pProcEl->AddDataSet(elCS);
80  procMan->AddDiscreteProcess(pProcEl);
81 
82  // Inelastic process
83  G4HadronInelasticProcess* pProcInel = new G4HadronInelasticProcess("protonInelastic", G4Proton::Definition());
84  pProcInel->RegisterMe(loInelModel);
85  pProcInel->RegisterMe(m_ftfp);
86  pProcInel->AddDataSet(inelCS);
87  procMan->AddDiscreteProcess(pProcInel);
88 }
89 
90 
91 void ProtonPhysics::ConstructParticle()
92 {}
93 
Abstract base class for different kinds of events.