ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4HadronPhysicsQGSP_BIC.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4HadronPhysicsQGSP_BIC.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 //
27 //---------------------------------------------------------------------------
28 //
29 // ClassName: G4HadronPhysicsQGSP_BIC
30 //
31 // Author: 2002 J.P. Wellisch
32 //
33 // Modified:
34 // 23.11.2005 G.Folger: migration to non static particles
35 // 08.06.2006 V.Ivanchenko: remove stopping
36 // 25.04.2007 G.Folger: Add code for quasielastic
37 // 31.10.2012 A.Ribon: Use G4MiscBuilder
38 // 19.03.2013 A.Ribon: Replace LEP with FTFP and BERT
39 //
40 //----------------------------------------------------------------------------
41 //
42 #include <iomanip>
43 
45 
46 #include "G4PiKBuilder.hh"
47 #include "G4FTFPPiKBuilder.hh"
48 #include "G4QGSPPiKBuilder.hh"
49 #include "G4BertiniPiKBuilder.hh"
50 
51 #include "G4ProtonBuilder.hh"
52 #include "G4FTFPProtonBuilder.hh"
53 #include "G4QGSPProtonBuilder.hh"
54 #include "G4BinaryProtonBuilder.hh"
55 
56 #include "G4NeutronBuilder.hh"
57 #include "G4FTFPNeutronBuilder.hh"
58 #include "G4QGSPNeutronBuilder.hh"
60 
61 #include "G4HyperonFTFPBuilder.hh"
62 #include "G4AntiBarionBuilder.hh"
64 #include "globals.hh"
65 #include "G4ios.hh"
66 #include "G4SystemOfUnits.hh"
67 #include "G4ParticleDefinition.hh"
68 #include "G4ParticleTable.hh"
69 
70 #include "G4MesonConstructor.hh"
71 #include "G4BaryonConstructor.hh"
73 #include "G4IonConstructor.hh"
74 
76 #include "G4NeutronRadCapture.hh"
77 #include "G4NeutronInelasticXS.hh"
78 #include "G4NeutronCaptureXS.hh"
79 
80 #include "G4PhysListUtil.hh"
81 #include "G4HadronicParameters.hh"
82 
84 
86 
88  : G4HadronPhysicsQGSP_BIC("hInelastic QGSP_BIC",true)
89 {}
90 
92  : G4VPhysicsConstructor(name)
93 {
94  QuasiElasticFTF= false; // Use built-in quasi-elastic (not add-on)
95  QuasiElasticQGS= true; // For QGS, it must use it.
104 }
105 
107 {
108  Neutron();
109  Proton();
110  Pion();
111  Kaon();
112  Others();
113 }
114 
116 {
117  auto neu = new G4NeutronBuilder;
118  AddBuilder(neu);
119  auto qgs = new G4QGSPNeutronBuilder(QuasiElasticQGS);
120  AddBuilder(qgs);
121  qgs->SetMinEnergy(minQGSP_neutron);
122  neu->RegisterMe(qgs);
123  auto ftf = new G4FTFPNeutronBuilder(QuasiElasticFTF);
124  AddBuilder(ftf);
125  ftf->SetMinEnergy(minFTFP_neutron);
126  ftf->SetMaxEnergy(maxFTFP_neutron);
127  neu->RegisterMe(ftf);
128  auto bic = new G4BinaryNeutronBuilder;
129  AddBuilder(bic);
130  bic->SetMaxEnergy(maxBIC_neutron);
131  neu->RegisterMe(bic);
132  neu->Build();
133 }
134 
136 {
137  auto pro = new G4ProtonBuilder;
138  AddBuilder(pro);
139  auto qgs = new G4QGSPProtonBuilder(QuasiElasticQGS);
140  AddBuilder(qgs);
141  qgs->SetMinEnergy(minQGSP_proton);
142  pro->RegisterMe(qgs);
143  auto ftf = new G4FTFPProtonBuilder(QuasiElasticFTF);
144  AddBuilder(ftf);
145  ftf->SetMinEnergy(minFTFP_proton);
146  ftf->SetMaxEnergy(maxFTFP_proton);
147  pro->RegisterMe(ftf);
148  auto bic = new G4BinaryProtonBuilder;
149  AddBuilder(bic);
150  bic->SetMaxEnergy(maxBIC_proton);
151  pro->RegisterMe(bic);
152  pro->Build();
153 }
154 
156 {
157  auto pik = new G4PiKBuilder;
158  AddBuilder(pik);
159  auto qgs = new G4QGSPPiKBuilder(QuasiElasticQGS);
160  AddBuilder(qgs);
161  qgs->SetMinEnergy(minQGSP_pik);
162  pik->RegisterMe(qgs);
163  auto ftf = new G4FTFPPiKBuilder(QuasiElasticFTF);
164  AddBuilder(ftf);
165  ftf->SetMaxEnergy(maxFTFP_pik);
166  ftf->SetMinEnergy(minFTFP_pik);
167  pik->RegisterMe(ftf);
168  auto bert = new G4BertiniPiKBuilder;
169  AddBuilder(bert);
170  bert->SetMaxEnergy(maxBERT_pik);
171  pik->RegisterMe(bert);
172  pik->Build();
173 }
174 
176 {
177  auto hyp = new G4HyperonFTFPBuilder;
178  AddBuilder(hyp);
179  hyp->Build();
180  auto abar = new G4AntiBarionBuilder;
181  AddBuilder(abar);
183  AddBuilder(ftf);
184  abar->RegisterMe(ftf);
185  abar->Build();
186 }
187 
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 
207 {
209  DumpBanner();
210  }
211  CreateModels();
213 }
214 
216 {
217  // --- Neutrons ---
220  if(inel) { inel->AddDataSet(new G4NeutronInelasticXS()); }
222  if (capture) {
223  capture->RegisterMe(new G4NeutronRadCapture());
224  }
225 }