ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4HadronPhysicsQGS_BIC.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4HadronPhysicsQGS_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: G4HadronPhysicsQGS_BIC
30 //
31 // Author: 2007 Gunter Folger
32 // created from G4HadronPhysicsQGSP_BIC by H.P.Wellisch
33 //
34 // Modified:
35 //
36 //----------------------------------------------------------------------------
37 //
38 #include <iomanip>
39 
41 #include "G4PionBuilder.hh"
42 #include "G4BinaryPionBuilder.hh"
43 #include "G4BertiniPionBuilder.hh"
46 
47 #include "G4KaonBuilder.hh"
48 #include "G4BertiniKaonBuilder.hh"
51 
52 #include "G4ProtonBuilder.hh"
55 #include "G4BinaryProtonBuilder.hh"
56 
57 #include "G4NeutronBuilder.hh"
61 
62 #include "G4HyperonFTFPBuilder.hh"
63 #include "G4AntiBarionBuilder.hh"
65 
66 #include "globals.hh"
67 #include "G4ios.hh"
68 #include "G4SystemOfUnits.hh"
69 #include "G4ParticleDefinition.hh"
70 #include "G4ParticleTable.hh"
71 
72 #include "G4MesonConstructor.hh"
73 #include "G4BaryonConstructor.hh"
75 #include "G4IonConstructor.hh"
76 
78 #include "G4NeutronRadCapture.hh"
79 #include "G4NeutronInelasticXS.hh"
80 #include "G4NeutronCaptureXS.hh"
81 
83 
84 #include "G4PhysListUtil.hh"
85 #include "G4HadronicParameters.hh"
86 
88 //
90 
92  : G4HadronPhysicsQGS_BIC("hInelastic QGS_BIC",true) {}
93 
95  : G4VPhysicsConstructor(name)
96 {
97  QuasiElasticFTF= false; // Use built-in quasi-elastic (not add-on)
98  QuasiElasticQGS= true; // For QGS, it must use it.
99 
103 
106  minBERT_pion = 1.0*GeV;
107  maxBIC_pion = 1.5*GeV;
108 
111 }
112 
114 {}
115 
117 {
118  Neutron();
119  Proton();
120  Pion();
121  Kaon();
122  Others();
123 }
124 
126 {
127  //General schema:
128  // 1) Create a builder
129  // 2) Call AddBuilder
130  // 3) Configure the builder, possibly with sub-builders
131  // 4) Call builder->Build()
132  auto neu = new G4NeutronBuilder;
133  AddBuilder(neu);
134  auto qgsneu = new G4QGSBinaryNeutronBuilder(QuasiElasticQGS);
135  AddBuilder(qgsneu);
136  neu->RegisterMe(qgsneu);
137  auto ftfneu = new G4FTFBinaryNeutronBuilder(QuasiElasticFTF);
138  AddBuilder(ftfneu);
139  ftfneu->SetMinEnergy(minFTF_neutron);
140  ftfneu->SetMaxEnergy(maxFTF_neutron);
141  neu->RegisterMe(ftfneu);
142  auto bicn = new G4BinaryNeutronBuilder;
143  AddBuilder(bicn);
144  bicn->SetMaxEnergy(maxBIC_neutron);
145  neu->RegisterMe(bicn);
146  neu->Build();
147 }
148 
150 {
151  auto pro = new G4ProtonBuilder;
152  AddBuilder(pro);
154  AddBuilder(qgs);
155  pro->RegisterMe(qgs);
157  AddBuilder(ftf);
158  ftf->SetMinEnergy(minFTF_proton);
159  ftf->SetMaxEnergy(maxFTF_proton);
160  pro->RegisterMe(ftf);
161  auto bic = new G4BinaryProtonBuilder;
162  AddBuilder(bic);
163  bic->SetMaxEnergy(maxBIC_proton);
164  pro->RegisterMe(bic);
165  pro->Build();
166 }
167 
169 {
170  auto pi = new G4PionBuilder;
171  AddBuilder(pi);
172  auto qgs = new G4QGSBinaryPionBuilder(QuasiElasticQGS);
173  AddBuilder(qgs);
174  pi->RegisterMe(qgs);
175  auto ftf = new G4FTFBinaryPionBuilder(QuasiElasticFTF);
176  AddBuilder(ftf);
177  ftf->SetMaxEnergy(maxFTF_pion);
178  pi->RegisterMe(ftf);
179  auto bert = new G4BertiniPionBuilder;
180  AddBuilder(bert);
181  bert->SetMinEnergy(minBERT_pion);
182  bert->SetMaxEnergy(maxBERT_pion);
183  pi->RegisterMe(bert);
184  auto bic = new G4BinaryPionBuilder;
185  AddBuilder(bic);
186  bic->SetMaxEnergy(maxBIC_pion);
187  pi->RegisterMe(bic);
188  pi->Build();
189 }
190 
192 {
193  auto k = new G4KaonBuilder;
194  AddBuilder(k);
195  auto qgs = new G4QGSBinaryKaonBuilder(QuasiElasticQGS);
196  AddBuilder(qgs);
197  k->RegisterMe(qgs);
198  auto ftf = new G4FTFBinaryKaonBuilder(QuasiElasticFTF);
199  AddBuilder(ftf);
200  ftf->SetMaxEnergy(maxFTF_kaon);
201  k->RegisterMe(ftf);
202  auto bert = new G4BertiniKaonBuilder;
203  AddBuilder(bert);
204  bert->SetMaxEnergy(maxBERT_kaon);
205  k->RegisterMe(bert);
206  k->Build();
207 }
208 
210 {
211  auto hyp = new G4HyperonFTFPBuilder;
212  AddBuilder(hyp);
213  hyp->Build();
214  auto abar = new G4AntiBarionBuilder;
215  AddBuilder(abar);
217  AddBuilder(ftf);
218  abar->RegisterMe(ftf);
219  abar->Build();
220 }
221 
223 {
224  G4MesonConstructor pMesonConstructor;
225  pMesonConstructor.ConstructParticle();
226 
227  G4BaryonConstructor pBaryonConstructor;
228  pBaryonConstructor.ConstructParticle();
229 
230  G4ShortLivedConstructor pShortLivedConstructor;
231  pShortLivedConstructor.ConstructParticle();
232 
233  G4IonConstructor pIonConstructor;
234  pIonConstructor.ConstructParticle();
235 }
236 
237 #include "G4ProcessManager.hh"
239 {
241  DumpBanner();
242  }
243  CreateModels();
245 }
246 
248 {
249  // --- Neutrons ---
252  if(inel) { inel->AddDataSet(new G4NeutronInelasticXS()); }
254  if (capture) {
255  capture->RegisterMe(new G4NeutronRadCapture());
256  }
257 }
258