Belle II Software development
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
28using namespace Belle2;
29using namespace Simulation;
30
31
32ProtonPhysics::ProtonPhysics()
33 : m_ftfp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
34 m_fragModel(nullptr), m_preCompoundModel(nullptr)
35{}
36
37
38ProtonPhysics::~ProtonPhysics()
39{
40 delete m_stringDecay;
41 delete m_stringModel;
42 delete m_fragModel;
43 delete m_preCompoundModel;
44}
45
46
47void 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
91void ProtonPhysics::ConstructParticle()
92{}
93
Abstract base class for different kinds of events.