Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
HadronPhysicsQGSP_FTFP_BERT_95.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// $Id$
27//
28//---------------------------------------------------------------------------
29//
30// Modified:
31//
32//----------------------------------------------------------------------------
33//
34#include <iomanip>
35
37
38#include "globals.hh"
39#include "G4ios.hh"
40#include "G4SystemOfUnits.hh"
42#include "G4ParticleTable.hh"
43
44#include "G4MesonConstructor.hh"
47#include "G4IonConstructor.hh"
48
60
61#include "G4PhysListUtil.hh"
62
63// factory
65//
67
69 : G4VPhysicsConstructor("hInelastic QGSP_FTFP_BERT_95")
70 , theNeutrons(0)
71 , theFTFPNeutron(0)
72 , theQGSPNeutron(0)
73 , theBertiniNeutron(0)
74 , theLEPNeutron(0)
75 , thePiK(0)
76 , theFTFPPiK(0)
77 , theQGSPPiK(0)
78 , theBertiniPiK(0)
79 , thePro(0)
80 , theFTFPPro(0)
81 , theQGSPPro(0)
82 , theBertiniPro(0)
83 , theHyperon(0)
84 , theAntiBaryon(0)
85 , theFTFPAntiBaryon(0)
86 , QuasiElastic(true)
87 , ProjectileDiffraction(false)
88 , xsBarashenkovGGPion(0)
89 , xsChipsKaonMinus(0)
90 , xsChipsKaonPlus(0)
91 , xsChipsKaonZero(0)
92 , xsAxenWellischGGProton(0)
93 , xsLaidlawWellischGGNeutron(0)
94 , xsChipsHyperons(0)
95 , xsGaloyanUzhinskyAntibaryon(0)
96{
97}
98
100 G4bool quasiElastic)
101 : G4VPhysicsConstructor("hInelastic QGSP_FTFP_BERT_95")
102 , theNeutrons(0)
103 , theFTFPNeutron(0)
104 , theQGSPNeutron(0)
105 , theBertiniNeutron(0)
106 , theLEPNeutron(0)
107 , thePiK(0)
108 , theFTFPPiK(0)
109 , theQGSPPiK(0)
110 , theBertiniPiK(0)
111 , thePro(0)
112 , theFTFPPro(0)
113 , theQGSPPro(0)
114 , theBertiniPro(0)
115 , theHyperon(0)
116 , theAntiBaryon(0)
117 , theFTFPAntiBaryon(0)
118 , QuasiElastic(quasiElastic)
119 , ProjectileDiffraction(false)
120 , xsBarashenkovGGPion(0)
121 , xsChipsKaonMinus(0)
122 , xsChipsKaonPlus(0)
123 , xsChipsKaonZero(0)
124 , xsAxenWellischGGProton(0)
125 , xsLaidlawWellischGGNeutron(0)
126 , xsChipsHyperons(0)
127 , xsGaloyanUzhinskyAntibaryon(0)
128{
129}
130
131void HadronPhysicsQGSP_FTFP_BERT_95::CreateModels()
132{
133 // First transition, between BERT and FTF/P
134 G4double minFTFP= 6.0 * GeV; // Was 9.5 for LEP (in FTFP_BERT 6.0 * GeV);
135 G4double maxBERT= 8.0 * GeV; // Was 9.9 for LEP (in FTFP_BERT 8.0 * GeV);
136 // Second transition, between FTF/P and QGS/P
137 G4double minQGSP= 12.0 * GeV;
138 G4double maxFTFP= 25.0 * GeV;
139
140 G4bool quasiElasFTF= false; // Use built-in quasi-elastic (not add-on)
141 G4bool quasiElasQGS= true; // For QGS, it must use it.
142
143 G4cout << " New QGSP_FTFP_BERT_95 physics list, replaces LEP with FTF/P for p/n/pi (/K?)";
144 G4cout << " Thresholds: " << G4endl;
145 G4cout << " 1) between BERT and FTF/P over the interval "
146 << minFTFP/GeV << " to " << maxBERT/GeV << " GeV. " << G4endl;
147 G4cout << " 2) between FTF/P and QGS/P over the interval "
148 << minQGSP/GeV << " to " << maxFTFP/GeV << " GeV. " << G4endl;
149 G4cout << " -- quasiElastic was asked to be " << QuasiElastic << G4endl
150 << " Changed to " << quasiElasQGS << " for QGS "
151 << " and to " << quasiElasFTF << " (must be false) for FTF" << G4endl;
152
153 theNeutrons=new G4NeutronBuilder;
154 theNeutrons->RegisterMe(theQGSPNeutron=new G4QGSPNeutronBuilder(quasiElasQGS, ProjectileDiffraction));
155 theQGSPNeutron->SetMinEnergy(minQGSP);
156 theNeutrons->RegisterMe(theFTFPNeutron=new G4FTFPNeutronBuilder(quasiElasFTF));
157 theFTFPNeutron->SetMinEnergy(minFTFP); // was (9.5*GeV);
158 theFTFPNeutron->SetMaxEnergy(maxFTFP); // was (25*GeV);
159 // Exclude LEP only from Inelastic
160 // -- Register it for other processes: Capture, Elastic
161 theNeutrons->RegisterMe(theLEPNeutron=new G4LEPNeutronBuilder);
162 theLEPNeutron->SetMinInelasticEnergy(0.0*GeV);
163 theLEPNeutron->SetMaxInelasticEnergy(0.0*GeV);
164
165 theNeutrons->RegisterMe(theBertiniNeutron=new G4BertiniNeutronBuilder);
166 theBertiniNeutron->SetMinEnergy(0.0*GeV);
167 theBertiniNeutron->SetMaxEnergy(maxBERT); // was (9.9*GeV);
168
169 thePro=new G4ProtonBuilder;
170 thePro->RegisterMe(theQGSPPro=new G4QGSPProtonBuilder(quasiElasQGS, ProjectileDiffraction));
171 theQGSPPro->SetMinEnergy(minQGSP);
172 thePro->RegisterMe(theFTFPPro=new G4FTFPProtonBuilder(quasiElasFTF));
173 theFTFPPro->SetMinEnergy(minFTFP); // was (9.5*GeV);
174 theFTFPPro->SetMaxEnergy(maxFTFP); // was (25*GeV);
175 thePro->RegisterMe(theBertiniPro=new G4BertiniProtonBuilder);
176 theBertiniPro->SetMaxEnergy(maxBERT); // was (9.9*GeV);
177
178 thePiK=new G4PiKBuilder;
179 thePiK->RegisterMe(theQGSPPiK=new G4QGSPPiKBuilder(quasiElasQGS));
180 theQGSPPiK->SetMinEnergy(minQGSP);
181 thePiK->RegisterMe(theFTFPPiK=new G4FTFPPiKBuilder(quasiElasFTF));
182 theFTFPPiK->SetMaxEnergy(maxFTFP); // was (25*GeV);
183 theFTFPPiK->SetMinEnergy(minFTFP); // was (9.5*GeV);
184 thePiK->RegisterMe(theBertiniPiK=new G4BertiniPiKBuilder);
185 theBertiniPiK->SetMaxEnergy(maxBERT); // was (9.9*GeV);
186
187 // Hyperons use FTF
188 theHyperon=new G4HyperonFTFPBuilder;
189
190 theAntiBaryon=new G4AntiBarionBuilder;
191 theAntiBaryon->RegisterMe(theFTFPAntiBaryon=new G4FTFPAntiBarionBuilder(quasiElasFTF));
192}
193
195{
196 delete theQGSPNeutron;
197 delete theFTFPNeutron;
198 delete theBertiniNeutron;
199 delete theNeutrons;
200
201 delete theQGSPPro;
202 delete theFTFPPro;
203 delete thePro;
204 delete theBertiniPro;
205
206 delete theQGSPPiK;
207 delete theFTFPPiK;
208 delete theBertiniPiK;
209 delete thePiK;
210
211 delete theHyperon;
212 delete theAntiBaryon;
213 delete theFTFPAntiBaryon;
214
215 delete xsBarashenkovGGPion;
216 delete xsAxenWellischGGProton;
217 delete xsLaidlawWellischGGNeutron;
218 delete xsGaloyanUzhinskyAntibaryon;
219}
220
222{
223 G4MesonConstructor pMesonConstructor;
224 pMesonConstructor.ConstructParticle();
225
226 G4BaryonConstructor pBaryonConstructor;
227 pBaryonConstructor.ConstructParticle();
228
229 G4ShortLivedConstructor pShortLivedConstructor;
230 pShortLivedConstructor.ConstructParticle();
231
232 G4IonConstructor pIonConstructor;
233 pIonConstructor.ConstructParticle();
234}
235
236#include "G4ProcessManager.hh"
238{
239 CreateModels();
240 theNeutrons->Build();
241 thePro->Build();
242 thePiK->Build();
243 theHyperon->Build();
244 theAntiBaryon->Build();
245
246 // Inelastic cross sections
247
248 // --- Pions ---
249 // Use Barashenkov inelastic pion cross section up to 91 GeV,
250 // and Glauber-Gribov above
251 xsBarashenkovGGPion = new G4CrossSectionPairGG(new G4PiNuclearCrossSection(), 91*GeV);
254
255 // --- Kaons ---
256 // Use Chips inelastic kaon cross sections
264
265 // --- Protons ---
266 // Use Axen-Wellisch inelastic proton cross section up to 91 GeV,
267 // and Glauber-Gribov above
268 xsAxenWellischGGProton = new G4CrossSectionPairGG(new G4ProtonInelasticCrossSection(), 91*GeV);
270
271 // --- Neutrons ---
272 // Use Laidlaw-Wellisch inelastic neutron cross section up to 91 GeV,
273 // and Glauber-Gribov above
274 xsLaidlawWellischGGNeutron = new G4CrossSectionPairGG(new G4NeutronInelasticCrossSection(), 91*GeV);
276
277 // --- Hyperons ---
278 // Use Chips inelastic hyperon cross sections
292
293 // --- AntiBaryons ---
294 // Use Galoyan-Uzhinsky antibaryon cross sections based on
295 // Glauber-Grichine approach
296 xsGaloyanUzhinskyAntibaryon = new G4CrossSectionInelastic(new G4ComponentAntiNuclNuclearXS());
303
304}
#define G4_DECLARE_PHYSCONSTR_FACTORY(physics_constructor)
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cout
static G4AntiAlpha * AntiAlpha()
Definition: G4AntiAlpha.cc:89
void RegisterMe(G4VAntiBarionBuilder *aB)
static G4AntiDeuteron * AntiDeuteron()
static G4AntiHe3 * AntiHe3()
Definition: G4AntiHe3.cc:94
static G4AntiLambda * AntiLambda()
static G4AntiNeutron * AntiNeutron()
static G4AntiOmegaMinus * AntiOmegaMinus()
static G4AntiProton * AntiProton()
Definition: G4AntiProton.cc:93
static G4AntiSigmaMinus * AntiSigmaMinus()
static G4AntiSigmaPlus * AntiSigmaPlus()
static G4AntiTriton * AntiTriton()
Definition: G4AntiTriton.cc:94
static G4AntiXiMinus * AntiXiMinus()
static G4AntiXiZero * AntiXiZero()
static void ConstructParticle()
void SetMaxEnergy(G4double aM)
G4VCrossSectionDataSet * GetCrossSectionDataSet(const G4String &name, G4bool warning=true)
static G4CrossSectionDataSetRegistry * Instance()
void SetMinEnergy(G4double aM)
void SetMaxEnergy(G4double aM)
void SetMinEnergy(G4double aM)
void SetMaxEnergy(G4double aM)
void SetMaxEnergy(G4double aM)
void SetMinEnergy(G4double aM)
void AddDataSet(G4VCrossSectionDataSet *aDataSet)
static void ConstructParticle()
static G4KaonMinus * KaonMinus()
Definition: G4KaonMinus.cc:113
static G4KaonPlus * KaonPlus()
Definition: G4KaonPlus.cc:113
static G4KaonZeroLong * KaonZeroLong()
static G4KaonZeroShort * KaonZeroShort()
void SetMaxInelasticEnergy(G4double aM)
void SetMinInelasticEnergy(G4double aM)
static G4Lambda * Lambda()
Definition: G4Lambda.cc:108
static void ConstructParticle()
void RegisterMe(G4VNeutronBuilder *aB)
static G4Neutron * Neutron()
Definition: G4Neutron.cc:104
static G4OmegaMinus * OmegaMinus()
static G4HadronicProcess * FindInelasticProcess(const G4ParticleDefinition *)
void RegisterMe(G4VPiKBuilder *aB)
Definition: G4PiKBuilder.hh:58
static G4PionMinus * PionMinus()
Definition: G4PionMinus.cc:98
static G4PionPlus * PionPlus()
Definition: G4PionPlus.cc:98
void RegisterMe(G4VProtonBuilder *aB)
static G4Proton * Proton()
Definition: G4Proton.cc:93
void SetMinEnergy(G4double aM)
void SetMinEnergy(G4double aM)
void SetMinEnergy(G4double aM)
static G4SigmaMinus * SigmaMinus()
static G4SigmaPlus * SigmaPlus()
Definition: G4SigmaPlus.cc:108
static G4XiMinus * XiMinus()
Definition: G4XiMinus.cc:106
static G4XiZero * XiZero()
Definition: G4XiZero.cc:106