Belle II Software development
NeutronPhysics.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/NeutronPhysics.h>
10
11#include "G4ProcessManager.hh"
12#include "G4HadronInelasticProcess.hh"
13#include "G4HadronElasticProcess.hh"
14#include "G4NeutronCaptureProcess.hh"
15#include "G4NeutronKiller.hh"
16
17#include "G4CascadeInterface.hh"
18#include "G4TheoFSGenerator.hh"
19#include "G4FTFModel.hh"
20#include "G4ExcitedStringDecay.hh"
21#include "G4LundStringFragmentation.hh"
22#include "G4GeneratorPrecompoundInterface.hh"
23#include "G4ChipsElasticModel.hh"
24#include "G4NeutronRadCapture.hh"
25
26#include "G4BGGNucleonInelasticXS.hh"
27#include "G4NeutronElasticXS.hh"
28#include "G4NeutronCaptureXS.hh"
29
30#include "G4SystemOfUnits.hh"
31
32using namespace Belle2;
33using namespace Simulation;
34
35
36NeutronPhysics::NeutronPhysics()
37 : m_ftfp(nullptr), m_stringModel(nullptr), m_stringDecay(nullptr),
38 m_fragModel(nullptr), m_preCompoundModel(nullptr)
39{}
40
41
42NeutronPhysics::~NeutronPhysics()
43{
44 delete m_stringDecay;
45 delete m_stringModel;
46 delete m_fragModel;
47 delete m_preCompoundModel;
48}
49
50
51void NeutronPhysics::ConstructParticle()
52{}
53
54
55void NeutronPhysics::ConstructProcess()
56{
57 // Low energy elastic model
58 G4ChipsElasticModel* elMod = new G4ChipsElasticModel();
59
60 // Use Bertini cascade for low energies
61 G4CascadeInterface* loInelModel = new G4CascadeInterface;
62 loInelModel->SetMinEnergy(0.0);
63 loInelModel->SetMaxEnergy(12.0 * GeV);
64
65 // Capture model
66 G4NeutronRadCapture* capModel = new G4NeutronRadCapture();
67
68 // Use FTFP for high energies ==>> eventually replace this with new class FTFPInterface
69 m_ftfp = new G4TheoFSGenerator("FTFP");
70 m_stringModel = new G4FTFModel;
71 m_stringDecay =
72 new G4ExcitedStringDecay(m_fragModel = new G4LundStringFragmentation);
73 m_stringModel->SetFragmentationModel(m_stringDecay);
74 m_preCompoundModel = new G4GeneratorPrecompoundInterface();
75
76 m_ftfp->SetHighEnergyGenerator(m_stringModel);
77 m_ftfp->SetTransport(m_preCompoundModel);
78 m_ftfp->SetMinEnergy(5 * GeV);
79 m_ftfp->SetMaxEnergy(100 * TeV);
80
81 // Cross section sets
82 G4BGGNucleonInelasticXS* inelCS = new G4BGGNucleonInelasticXS(G4Neutron::Neutron());
83 G4NeutronElasticXS* elCS = new G4NeutronElasticXS;
84 G4NeutronCaptureXS* capCS = new G4NeutronCaptureXS;
85
86 G4ProcessManager* procMan = G4Neutron::Neutron()->GetProcessManager();
87
88 // Elastic process
89 G4HadronElasticProcess* nProcEl = new G4HadronElasticProcess;
90 nProcEl->RegisterMe(elMod);
91 nProcEl->AddDataSet(elCS);
92 procMan->AddDiscreteProcess(nProcEl);
93
94 // Inelastic process
95 G4HadronInelasticProcess* nProcInel = new G4HadronInelasticProcess("neutronInelastic", G4Neutron::Definition());
96 nProcInel->RegisterMe(loInelModel);
97 nProcInel->RegisterMe(m_ftfp);
98 nProcInel->AddDataSet(inelCS);
99 procMan->AddDiscreteProcess(nProcInel);
100
101 // Capture process
102 G4NeutronCaptureProcess* nProcCap = new G4NeutronCaptureProcess;
103 nProcCap->RegisterMe(capModel);
104 nProcCap->AddDataSet(capCS);
105 procMan->AddDiscreteProcess(nProcCap);
106
107 // Neutron cut (kill neutrons that live too long or have too little energy)
108 G4NeutronKiller* nKiller = new G4NeutronKiller();
109 nKiller->SetKinEnergyLimit(0.0 * MeV);
110 nKiller->SetTimeLimit(10.*microsecond);
111 procMan->AddDiscreteProcess(nKiller);
112
113}
114
115
Abstract base class for different kinds of events.