Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
HadronPhysicsQGSP_FTFP_BERT.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// ClassName: HadronPhysicsQGSP_FTFP_BERT
31//
32// Authors: 2 Apr 2009 J.Apostolakis/V.Ivantchenko: created starting from QGSP_BERT
33//
34// Modified:
35//----------------------------------------------------------------------------
36//
37#include <iomanip>
38
40
41#include "globals.hh"
42#include "G4ios.hh"
43#include "G4SystemOfUnits.hh"
45#include "G4ParticleTable.hh"
46
47#include "G4MesonConstructor.hh"
50#include "G4IonConstructor.hh"
51
52#include "G4PhysListUtil.hh"
53
54// factory
56//
58
60 : G4VPhysicsConstructor("hInelastic QGSP_FTFP_BERT")
61 , theNeutrons(0)
62 , theFTFPNeutron(0)
63 , theQGSPNeutron(0)
64 , theBertiniNeutron(0)
65 , theLEPNeutron(0)
66 , thePiK(0)
67 , theFTFPPiK(0)
68 , theQGSPPiK(0)
69 , theBertiniPiK(0)
70 , thePro(0)
71 , theFTFPPro(0)
72 , theQGSPPro(0)
73 , theBertiniPro(0)
74 , theHyperon(0)
75 , theAntiBaryon(0)
76 , theFTFPAntiBaryon(0)
77 , QuasiElastic(true)
78 , ProjectileDiffraction(false)
79{
80}
81
83 G4bool quasiElastic)
84 : G4VPhysicsConstructor("hInelastic QGSP_FTFP_BERT")
85 , theNeutrons(0)
86 , theFTFPNeutron(0)
87 , theQGSPNeutron(0)
88 , theBertiniNeutron(0)
89 , theLEPNeutron(0)
90 , thePiK(0)
91 , theFTFPPiK(0)
92 , theQGSPPiK(0)
93 , theBertiniPiK(0)
94 , thePro(0)
95 , theFTFPPro(0)
96 , theQGSPPro(0)
97 , theBertiniPro(0)
98 , theHyperon(0)
99 , theAntiBaryon(0)
100 , theFTFPAntiBaryon(0)
101 , QuasiElastic(quasiElastic)
102 , ProjectileDiffraction(false)
103{
104}
105
106void HadronPhysicsQGSP_FTFP_BERT::CreateModels()
107{
108 // First transition, between BERT and FTF/P
109 G4double minFTFP= 6.0 * GeV; // Was 9.5 for LEP (in FTFP_BERT 6.0 * GeV);
110 G4double maxBERT= 8.0 * GeV; // Was 9.9 for LEP (in FTFP_BERT 8.0 * GeV);
111 // Second transition, between FTF/P and QGS/P
112 G4double minQGSP= 12.0 * GeV;
113 G4double maxFTFP= 25.0 * GeV;
114
115 G4bool quasiElasFTF= false; // Use built-in quasi-elastic (not add-on)
116 G4bool quasiElasQGS= true; // For QGS, it must use it.
117
118 G4cout << " New QGSP_FTFP_BERT physics list, replaces LEP with FTF/P for p/n/pi (/K?)";
119 G4cout << " Thresholds: " << G4endl;
120 G4cout << " 1) between BERT and FTF/P over the interval "
121 << minFTFP/GeV << " to " << maxBERT/GeV << " GeV. " << G4endl;
122 G4cout << " 2) between FTF/P and QGS/P over the interval "
123 << minQGSP/GeV << " to " << maxFTFP/GeV << " GeV. " << G4endl;
124 G4cout << " -- quasiElastic was asked to be " << QuasiElastic << G4endl
125 << " Changed to " << quasiElasQGS << " for QGS "
126 << " and to " << quasiElasFTF << " (must be false) for FTF" << G4endl;
127
128 theNeutrons=new G4NeutronBuilder;
129 theNeutrons->RegisterMe(theQGSPNeutron=new G4QGSPNeutronBuilder(quasiElasQGS, ProjectileDiffraction));
130 theQGSPNeutron->SetMinEnergy(minQGSP);
131 theNeutrons->RegisterMe(theFTFPNeutron=new G4FTFPNeutronBuilder(quasiElasFTF));
132 theFTFPNeutron->SetMinEnergy(minFTFP); // was (9.5*GeV);
133 theFTFPNeutron->SetMaxEnergy(maxFTFP); // was (25*GeV);
134 // Exclude LEP only from Inelastic
135 // -- Register it for other processes: Capture, Elastic
136 theNeutrons->RegisterMe(theLEPNeutron=new G4LEPNeutronBuilder);
137 theLEPNeutron->SetMinInelasticEnergy(0.0*GeV);
138 theLEPNeutron->SetMaxInelasticEnergy(0.0*GeV);
139
140 theNeutrons->RegisterMe(theBertiniNeutron=new G4BertiniNeutronBuilder);
141 theBertiniNeutron->SetMinEnergy(0.0*GeV);
142 theBertiniNeutron->SetMaxEnergy(maxBERT); // was (9.9*GeV);
143
144 thePro=new G4ProtonBuilder;
145 thePro->RegisterMe(theQGSPPro=new G4QGSPProtonBuilder(quasiElasQGS, ProjectileDiffraction));
146 theQGSPPro->SetMinEnergy(minQGSP);
147 thePro->RegisterMe(theFTFPPro=new G4FTFPProtonBuilder(quasiElasFTF));
148 theFTFPPro->SetMinEnergy(minFTFP); // was (9.5*GeV);
149 theFTFPPro->SetMaxEnergy(maxFTFP); // was (25*GeV);
150 thePro->RegisterMe(theBertiniPro=new G4BertiniProtonBuilder);
151 theBertiniPro->SetMaxEnergy(maxBERT); // was (9.9*GeV);
152
153 thePiK=new G4PiKBuilder;
154 thePiK->RegisterMe(theQGSPPiK=new G4QGSPPiKBuilder(quasiElasQGS));
155 theQGSPPiK->SetMinEnergy(minQGSP);
156 thePiK->RegisterMe(theFTFPPiK=new G4FTFPPiKBuilder(quasiElasFTF));
157 theFTFPPiK->SetMaxEnergy(maxFTFP); // was (25*GeV);
158 theFTFPPiK->SetMinEnergy(minFTFP); // was (9.5*GeV);
159 thePiK->RegisterMe(theBertiniPiK=new G4BertiniPiKBuilder);
160 theBertiniPiK->SetMaxEnergy(maxBERT); // was (9.9*GeV);
161
162 // Hyperons use FTF
163 theHyperon=new G4HyperonFTFPBuilder;
164
165 theAntiBaryon=new G4AntiBarionBuilder;
166 theAntiBaryon->RegisterMe(theFTFPAntiBaryon=new G4FTFPAntiBarionBuilder(quasiElasFTF));
167}
168
170{
171 delete theQGSPNeutron;
172 delete theFTFPNeutron;
173 delete theBertiniNeutron;
174 delete theNeutrons;
175
176 delete theQGSPPro;
177 delete theFTFPPro;
178 delete thePro;
179 delete theBertiniPro;
180
181 delete theQGSPPiK;
182 delete theFTFPPiK;
183 delete theBertiniPiK;
184 delete thePiK;
185
186 delete theHyperon;
187 delete theAntiBaryon;
188 delete theFTFPAntiBaryon;
189}
190
192{
193 G4MesonConstructor pMesonConstructor;
194 pMesonConstructor.ConstructParticle();
195
196 G4BaryonConstructor pBaryonConstructor;
197 pBaryonConstructor.ConstructParticle();
198
199 G4ShortLivedConstructor pShortLivedConstructor;
200 pShortLivedConstructor.ConstructParticle();
201
202 G4IonConstructor pIonConstructor;
203 pIonConstructor.ConstructParticle();
204}
205
206#include "G4ProcessManager.hh"
208{
209 CreateModels();
210 theNeutrons->Build();
211 thePro->Build();
212 thePiK->Build();
213 theHyperon->Build();
214 theAntiBaryon->Build();
215}
#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
void RegisterMe(G4VAntiBarionBuilder *aB)
static void ConstructParticle()
void SetMaxEnergy(G4double aM)
void SetMinEnergy(G4double aM)
void SetMaxEnergy(G4double aM)
void SetMinEnergy(G4double aM)
void SetMaxEnergy(G4double aM)
void SetMaxEnergy(G4double aM)
void SetMinEnergy(G4double aM)
static void ConstructParticle()
void SetMaxInelasticEnergy(G4double aM)
void SetMinInelasticEnergy(G4double aM)
static void ConstructParticle()
void RegisterMe(G4VNeutronBuilder *aB)
void RegisterMe(G4VPiKBuilder *aB)
Definition: G4PiKBuilder.hh:58
void RegisterMe(G4VProtonBuilder *aB)
void SetMinEnergy(G4double aM)
void SetMinEnergy(G4double aM)
void SetMinEnergy(G4double aM)