Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4HadronInelasticQBBC.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27//---------------------------------------------------------------------------
28//
29// ClassName: G4HadronInelasticQBBC
30//
31// Author: 2 October 2009 V. Ivanchenko
32//
33// Modified:
34//
35//----------------------------------------------------------------------------
36//
37
39
40#include "G4SystemOfUnits.hh"
41
42#include "G4HadronicProcess.hh"
46
48
49#include "G4TheoFSGenerator.hh"
50#include "G4FTFModel.hh"
53
56
59#include "G4NeutronCaptureXS.hh"
61
63
64#include "G4CascadeInterface.hh"
65#include "G4BinaryCascade.hh"
67
68#include "G4PreCompoundModel.hh"
70
72#include "G4HadronicBuilder.hh"
73#include "G4HadParticles.hh"
74#include "G4HadProcesses.hh"
75#include "G4BuilderType.hh"
76
77// factory
79//
81
83 : G4VHadronPhysics("hInelasticQBBC")
84{
86 auto param = G4HadronicParameters::Instance();
87 param->SetEnableBCParticles(true);
88 param->SetEnableNeutronGeneralProcess(true);
89 param->SetVerboseLevel(ver);
90}
91
94{}
95
97{
99 G4bool useFactorXS = param->ApplyFactorXS();
101
102 // configure models
103 const G4double eminFtf = param->GetMinEnergyTransitionFTF_Cascade();
104 const G4double eminBert = 1.0*CLHEP::GeV;
105 const G4double emaxBic = 1.5*CLHEP::GeV;
106 const G4double emaxBert = param->GetMaxEnergyTransitionFTF_Cascade();
107 const G4double emaxBertPions = 12.*CLHEP::GeV;
108 const G4double emax = param->GetMaxEnergy();
109
110 if(G4Threading::IsMasterThread() && param->GetVerboseLevel() > 0) {
111 G4cout << "### HadronInelasticQBBC Construct Process:\n"
112 << " Emin(FTFP)= " << eminFtf/CLHEP::GeV
113 << " GeV; Emax(FTFP)= " << emax/CLHEP::GeV << " GeV\n"
114 << " Emin(BERT)= " << eminBert/CLHEP::GeV
115 << " GeV; Emax(BERT)= " << emaxBert/CLHEP::GeV
116 << " GeV; Emax(BERTpions)= " << emaxBertPions/CLHEP::GeV
117 << " GeV;\n" << " Emin(BIC) = 0 GeV; Emax(BIC)= "
118 << emaxBic/CLHEP::GeV << " GeV." << G4endl;
119 }
120
121 // PreCompound and Evaporation models are instantiated here
122 G4PreCompoundModel* thePreCompound = nullptr;
125 thePreCompound = static_cast<G4PreCompoundModel*>(p);
126 if(!thePreCompound) { thePreCompound = new G4PreCompoundModel(); }
127
128 auto theFTFP = new G4TheoFSGenerator("FTFP");
129 auto theStringModel = new G4FTFModel();
130 theStringModel->SetFragmentationModel(new G4ExcitedStringDecay());
131 theFTFP->SetHighEnergyGenerator( theStringModel );
132 theFTFP->SetTransport( new G4GeneratorPrecompoundInterface() );
133 theFTFP->SetMinEnergy( eminFtf );
134 theFTFP->SetMaxEnergy( emax );
135
136 auto theBERT = new G4CascadeInterface();
137 theBERT->SetMinEnergy( eminBert );
138 theBERT->SetMaxEnergy( emaxBert );
139 theBERT->usePreCompoundDeexcitation();
140
141 auto theBERT1 = new G4CascadeInterface();
142 theBERT1->SetMinEnergy( eminBert );
143 theBERT1->SetMaxEnergy( emaxBertPions );
144 theBERT1->usePreCompoundDeexcitation();
145
146 auto theBIC = new G4BinaryCascade(thePreCompound);
147 theBIC->SetMaxEnergy( emaxBic );
148
149 // p
151 G4HadronicProcess* hp =
152 new G4HadronInelasticProcess( particle->GetParticleName()+"Inelastic", particle );
153 hp->AddDataSet(new G4ParticleInelasticXS(particle));
154 hp->RegisterMe(theFTFP);
155 hp->RegisterMe(theBERT);
156 hp->RegisterMe(theBIC);
157 ph->RegisterProcess(hp, particle);
158 if( useFactorXS ) hp->MultiplyCrossSectionBy( param->XSFactorNucleonInelastic() );
159
160 // n
161 particle = G4Neutron::Neutron();
162 G4HadronicProcess* ni =
163 new G4HadronInelasticProcess( "neutronInelastic", particle );
164 ni->RegisterMe(theFTFP);
165 ni->RegisterMe(theBERT);
166 ni->RegisterMe(theBIC);
168
169 // pi+
170 particle = G4PionPlus::PionPlus();
171 hp = new G4HadronInelasticProcess( particle->GetParticleName()+"Inelastic", particle );
172 hp->AddDataSet(new G4BGGPionInelasticXS(particle));
173 hp->RegisterMe(theFTFP);
174 hp->RegisterMe(theBERT1);
175 hp->RegisterMe(theBIC);
176 ph->RegisterProcess(hp, particle);
177 if( useFactorXS ) hp->MultiplyCrossSectionBy( param->XSFactorPionInelastic() );
178
179 // pi-
180 particle = G4PionMinus::PionMinus();
181 hp = new G4HadronInelasticProcess( particle->GetParticleName()+"Inelastic", particle );
182 hp->AddDataSet(new G4BGGPionInelasticXS(particle));
183 hp->RegisterMe(theFTFP);
184 hp->RegisterMe(theBERT1);
185 hp->RegisterMe(theBIC);
186 ph->RegisterProcess(hp, particle);
187 if( useFactorXS ) hp->MultiplyCrossSectionBy( param->XSFactorPionInelastic() );
188
189 // kaons
191
192 // high energy particles
193 if( emax > param->EnergyThresholdForHeavyHadrons() ) {
194
195 // pbar, nbar, anti light ions
197
198 // hyperons
200
201 // b-, c- baryons and mesons
202 if( param->EnableBCParticles() ) {
204 }
205 }
206}
@ bHadronInelastic
#define G4_DECLARE_PHYSCONSTR_FACTORY(physics_constructor)
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
static void BuildNeutronInelasticAndCapture(G4HadronicProcess *)
void ConstructProcess() override
static void BuildBCHadronsFTFP_BERT()
static void BuildHyperonsFTFP_BERT()
static void BuildKaonsFTFP_BERT()
static void BuildAntiLightIonsFTFP()
G4HadronicInteraction * FindModel(const G4String &name)
static G4HadronicInteractionRegistry * Instance()
static G4HadronicParameters * Instance()
G4double GetMinEnergyTransitionFTF_Cascade() const
G4double GetMaxEnergyTransitionFTF_Cascade() const
G4bool EnableBCParticles() const
G4double EnergyThresholdForHeavyHadrons() const
G4double XSFactorPionInelastic() const
G4double GetMaxEnergy() const
G4double XSFactorNucleonInelastic() const
void AddDataSet(G4VCrossSectionDataSet *aDataSet)
void MultiplyCrossSectionBy(G4double factor)
void RegisterMe(G4HadronicInteraction *a)
static G4Neutron * Neutron()
Definition: G4Neutron.cc:103
const G4String & GetParticleName() const
G4bool RegisterProcess(G4VProcess *process, G4ParticleDefinition *particle)
static G4PhysicsListHelper * GetPhysicsListHelper()
static G4PionMinus * PionMinus()
Definition: G4PionMinus.cc:97
static G4PionPlus * PionPlus()
Definition: G4PionPlus.cc:97
static G4Proton * Proton()
Definition: G4Proton.cc:92
G4bool IsMasterThread()
Definition: G4Threading.cc:124