Geant4  v4-10.4-release
 모두 클래스 네임스페이스들 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 Friends 매크로 그룹들 페이지들
G4HadronPhysicsFTFQGSP_BERT.cc
이 파일의 문서화 페이지로 가기
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 // Author: Alberto Ribon
30 // Date: October 2017
31 //
32 // Hadron physics for the new, experimental physics list FTFQGSP_BERT,
33 // with QGS fragmentation of strings, instead of the Lund string
34 // fragmentation. Note that the string excitation is still done with FTF,
35 // exactly as for FTFP_BERT.
36 // Given that it is an experimental, and perhaps temporary, new type of
37 // hadron physics, corresponding builders are not created and everything
38 // is implemented directly in this class.
39 //----------------------------------------------------------------------------
40 //
41 #include <iomanip>
42 
44 
45 #include "globals.hh"
46 #include "G4ios.hh"
47 #include "G4SystemOfUnits.hh"
48 #include "G4ParticleDefinition.hh"
49 #include "G4ParticleTable.hh"
50 
51 #include "G4MesonConstructor.hh"
52 #include "G4BaryonConstructor.hh"
54 
57 
59 #include "G4NeutronRadCapture.hh"
60 #include "G4NeutronInelasticXS.hh"
61 #include "G4NeutronCaptureXS.hh"
62 
63 #include "G4ProcessManager.hh"
66 #include "G4CrossSectionPairGG.hh"
69 
70 #include "G4PhysListUtil.hh"
71 
72 // factory
74 //
76 
78  : G4VPhysicsConstructor("hInelastic FTFQGSP_BERT")
79  , theNeutronCaptureModel(0)
80  , thePreEquilib(0)
81  , theCascade(0)
82  , theStringModel(0)
83  , theStringDecay(0)
84  , theQGSMFragmentation(0)
85  , theHandler(0)
86  , theModel1(0)
87  , theModel2(0)
88  , theModel3(0)
89  , theBertini1(0)
90  , theBertini2(0)
91  , theNeutronCaptureProcess(0)
92  , theNeutronInelastic(0)
93  , theProtonInelastic(0)
94  , thePionMinusInelastic(0)
95  , thePionPlusInelastic(0)
96  , theKaonMinusInelastic(0)
97  , theKaonPlusInelastic(0)
98  , theKaonZeroLInelastic(0)
99  , theKaonZeroSInelastic(0)
100  , theLambdaInelastic(0)
101  , theAntiLambdaInelastic(0)
102  , theSigmaMinusInelastic(0)
103  , theAntiSigmaMinusInelastic(0)
104  , theSigmaPlusInelastic(0)
105  , theAntiSigmaPlusInelastic(0)
106  , theXiZeroInelastic(0)
107  , theAntiXiZeroInelastic(0)
108  , theXiMinusInelastic(0)
109  , theAntiXiMinusInelastic(0)
110  , theOmegaMinusInelastic(0)
111  , theAntiOmegaMinusInelastic(0)
112  , theAntiProtonInelastic(0)
113  , theAntiNeutronInelastic(0)
114  , theAntiDeuteronInelastic(0)
115  , theAntiTritonInelastic(0)
116  , theAntiHe3Inelastic(0)
117  , theAntiAlphaInelastic(0)
118  , thePiXS(0)
119  , theKaonXS(0)
120  , theChipsHyperonInelasticXS(0)
121  , theAntiNucleonXS(0)
122  , theNeutronInelasticXS(0)
123  , theNeutronCaptureXS(0)
124 {}
125 
126 
128  : G4VPhysicsConstructor(name)
129  , theNeutronCaptureModel(0)
130  , thePreEquilib(0)
131  , theCascade(0)
132  , theStringModel(0)
133  , theStringDecay(0)
134  , theQGSMFragmentation(0)
135  , theHandler(0)
136  , theModel1(0)
137  , theModel2(0)
138  , theModel3(0)
139  , theBertini1(0)
140  , theBertini2(0)
141  , theNeutronCaptureProcess(0)
142  , theNeutronInelastic(0)
143  , theProtonInelastic(0)
144  , thePionMinusInelastic(0)
145  , thePionPlusInelastic(0)
146  , theKaonMinusInelastic(0)
147  , theKaonPlusInelastic(0)
148  , theKaonZeroLInelastic(0)
149  , theKaonZeroSInelastic(0)
150  , theLambdaInelastic(0)
151  , theAntiLambdaInelastic(0)
152  , theSigmaMinusInelastic(0)
153  , theAntiSigmaMinusInelastic(0)
154  , theSigmaPlusInelastic(0)
155  , theAntiSigmaPlusInelastic(0)
156  , theXiZeroInelastic(0)
157  , theAntiXiZeroInelastic(0)
158  , theXiMinusInelastic(0)
159  , theAntiXiMinusInelastic(0)
160  , theOmegaMinusInelastic(0)
161  , theAntiOmegaMinusInelastic(0)
162  , theAntiProtonInelastic(0)
163  , theAntiNeutronInelastic(0)
164  , theAntiDeuteronInelastic(0)
165  , theAntiTritonInelastic(0)
166  , theAntiHe3Inelastic(0)
167  , theAntiAlphaInelastic(0)
168  , thePiXS(0)
169  , theKaonXS(0)
170  , theChipsHyperonInelasticXS(0)
171  , theAntiNucleonXS(0)
172  , theNeutronInelasticXS(0)
173  , theNeutronCaptureXS(0)
174 {}
175 
176 
178 {
179 
180  G4double minFTFP = 3.0 * GeV;
181  G4double maxBERT = 12.0 * GeV;
182  G4cout << " FTFQGSP_BERT : similar to FTFP_BERT but with" << G4endl
183  << " QGS string fragmentation (instead of Lund string fragmentation)." << G4endl;
184 
186 
191 
192  // FTF for neutrons, protons, pions, and kaons
193  theModel1 = new G4TheoFSGenerator( "FTFP" );
194  theModel1->SetMinEnergy( minFTFP );
195  theModel1->SetMaxEnergy( 100.0*TeV );
198 
199  // BERT for neutrons, protons, pions, and kaons
201  theBertini1->SetMinEnergy( 0.0*GeV );
202  theBertini1->SetMaxEnergy( maxBERT );
203 
204  // FTF for hyperons
205  theModel2 = new G4TheoFSGenerator( "FTFP" );
206  theModel2->SetMinEnergy( 2.0*GeV );
207  theModel2->SetMaxEnergy( 100.0*TeV );
210 
211  // BERT for hyperons
213  theBertini2->SetMinEnergy( 0.0*GeV );
214  theBertini2->SetMaxEnergy( 6.0*GeV );
215 
216  // FTF for Antibaryons
217  theModel3 = new G4TheoFSGenerator( "FTFP" );
218  theModel3->SetMinEnergy( 0.0*GeV );
219  theModel3->SetMaxEnergy( 100.0*TeV );
222 
223  // Neutron Capture
227 
228  // Cross sections
235 }
236 
237 
239 {
240  delete theStringDecay;
241  delete theStringModel;
242  delete thePreEquilib;
243  delete theCascade;
244  delete theQGSMFragmentation;
245 }
246 
247 
249 {
250  G4MesonConstructor pMesonConstructor;
251  pMesonConstructor.ConstructParticle();
252 
253  G4BaryonConstructor pBaryonConstructor;
254  pBaryonConstructor.ConstructParticle();
255 
256  G4ShortLivedConstructor pShortLivedConstructor;
257  pShortLivedConstructor.ConstructParticle();
258 }
259 
260 
261 #include "G4ProcessManager.hh"
263 {
264  CreateModels();
265 
266  G4ProcessManager * aProcMan = 0;
267 
273  aProcMan = G4Neutron::Neutron()->GetProcessManager();
279 
284  aProcMan = G4Proton::Proton()->GetProcessManager();
286 
293 
298  aProcMan = G4PionPlus::PionPlus()->GetProcessManager();
300 
307 
312  aProcMan = G4KaonPlus::KaonPlus()->GetProcessManager();
314 
321 
328 
333  aProcMan = G4Lambda::Lambda()->GetProcessManager();
335 
341 
348 
354 
361 
367 
372  aProcMan = G4XiMinus::XiMinus()->GetProcessManager();
374 
380 
385  aProcMan = G4XiZero::XiZero()->GetProcessManager();
387 
393 
400 
406 
412 
418 
424 
430 
434  aProcMan = G4AntiHe3::AntiHe3()->GetProcessManager();
436 
442 }
443 
static G4PionMinus * PionMinus()
Definition: G4PionMinus.cc:98
#define G4_DECLARE_PHYSCONSTR_FACTORY(physics_constructor)
static G4Lambda * Lambda()
Definition: G4Lambda.cc:108
const XML_Char * name
Definition: expat.h:151
static const char * Default_Name()
G4XiZeroInelasticProcess * theXiZeroInelastic
void SetMinEnergy(G4double anEnergy)
void SetMaxEnergy(const G4double anEnergy)
G4AntiLambdaInelasticProcess * theAntiLambdaInelastic
G4int AddDiscreteProcess(G4VProcess *aProcess, G4int ord=ordDefault)
static G4AntiNeutron * AntiNeutron()
G4NeutronInelasticProcess * theNeutronInelastic
G4AntiOmegaMinusInelasticProcess * theAntiOmegaMinusInelastic
G4AntiNeutronInelasticProcess * theAntiNeutronInelastic
void RegisterMe(G4HadronicInteraction *a)
#define G4endl
Definition: G4ios.hh:61
static G4AntiOmegaMinus * AntiOmegaMinus()
static void ConstructParticle()
static G4XiZero * XiZero()
Definition: G4XiZero.cc:106
static G4AntiProton * AntiProton()
Definition: G4AntiProton.cc:93
static G4OmegaMinus * OmegaMinus()
G4KaonZeroSInelasticProcess * theKaonZeroSInelastic
static G4PionPlus * PionPlus()
Definition: G4PionPlus.cc:98
static G4CrossSectionDataSetRegistry * Instance()
G4HadronCaptureProcess * theNeutronCaptureProcess
static G4Proton * Proton()
Definition: G4Proton.cc:93
static G4XiMinus * XiMinus()
Definition: G4XiMinus.cc:106
G4VCrossSectionDataSet * theNeutronCaptureXS
static G4KaonMinus * KaonMinus()
Definition: G4KaonMinus.cc:113
static G4AntiSigmaMinus * AntiSigmaMinus()
static G4KaonPlus * KaonPlus()
Definition: G4KaonPlus.cc:113
static G4SigmaMinus * SigmaMinus()
G4KaonMinusInelasticProcess * theKaonMinusInelastic
G4AntiProtonInelasticProcess * theAntiProtonInelastic
static G4SigmaPlus * SigmaPlus()
Definition: G4SigmaPlus.cc:108
G4AntiSigmaMinusInelasticProcess * theAntiSigmaMinusInelastic
G4VCrossSectionDataSet * GetCrossSectionDataSet(const G4String &name, G4bool warning=true)
static constexpr double TeV
Definition: G4SIunits.hh:218
static G4KaonZeroLong * KaonZeroLong()
double G4double
Definition: G4Types.hh:76
bool G4bool
Definition: G4Types.hh:79
static G4AntiAlpha * AntiAlpha()
Definition: G4AntiAlpha.cc:89
G4AntiAlphaInelasticProcess * theAntiAlphaInelastic
G4KaonZeroLInelasticProcess * theKaonZeroLInelastic
G4OmegaMinusInelasticProcess * theOmegaMinusInelastic
void SetTransport(G4VIntraNuclearTransportModel *const value)
G4KaonPlusInelasticProcess * theKaonPlusInelastic
G4AntiTritonInelasticProcess * theAntiTritonInelastic
G4AntiXiZeroInelasticProcess * theAntiXiZeroInelastic
G4LambdaInelasticProcess * theLambdaInelastic
G4PionPlusInelasticProcess * thePionPlusInelastic
static void ConstructParticle()
static G4AntiXiZero * AntiXiZero()
static G4AntiDeuteron * AntiDeuteron()
static G4KaonZeroShort * KaonZeroShort()
void AddDataSet(G4VCrossSectionDataSet *aDataSet)
void SetHighEnergyGenerator(G4VHighEnergyGenerator *const value)
int G4int
Definition: G4Types.hh:78
G4SigmaMinusInelasticProcess * theSigmaMinusInelastic
static G4Neutron * Neutron()
Definition: G4Neutron.cc:104
G4AntiDeuteronInelasticProcess * theAntiDeuteronInelastic
static G4AntiHe3 * AntiHe3()
Definition: G4AntiHe3.cc:94
G4ProcessManager * GetProcessManager() const
static G4AntiTriton * AntiTriton()
Definition: G4AntiTriton.cc:94
G4AntiHe3InelasticProcess * theAntiHe3Inelastic
static G4AntiSigmaPlus * AntiSigmaPlus()
G4AntiSigmaPlusInelasticProcess * theAntiSigmaPlusInelastic
G4ProtonInelasticProcess * theProtonInelastic
static const char * Default_Name()
G4PionMinusInelasticProcess * thePionMinusInelastic
G4GLOB_DLL std::ostream G4cout
G4VCrossSectionDataSet * theChipsHyperonInelasticXS
void SetFragmentationModel(G4VStringFragmentation *aModel)
G4XiMinusInelasticProcess * theXiMinusInelastic
G4AntiXiMinusInelasticProcess * theAntiXiMinusInelastic
G4SigmaPlusInelasticProcess * theSigmaPlusInelastic
G4VCrossSectionDataSet * theAntiNucleonXS
static constexpr double GeV
Definition: G4SIunits.hh:217
G4VCrossSectionDataSet * theNeutronInelasticXS
G4GeneratorPrecompoundInterface * theCascade
static G4AntiXiMinus * AntiXiMinus()
static G4AntiLambda * AntiLambda()