ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4HadronPhysicsShielding.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4HadronPhysicsShielding.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:
30 //
31 // Author: 2010 Tatsumi Koi, Gunter Folger
32 // created from G4HadronPhysicsFTFP_BERT
33 //
34 // Modified:
35 //
36 // 2019.08.01 A.Ribon replaced explicit numbers for the energy transition
37 // region with values taken from G4HadronicParameters
38 // 2014.08.05 K.L.Genser added provisions for modifing the Bertini to
39 // FTF transition energy region
40 //
41 //----------------------------------------------------------------------------
42 //
43 #include <iomanip>
44 
46 
47 #include "globals.hh"
48 #include "G4ios.hh"
49 #include "G4SystemOfUnits.hh"
50 #include "G4ParticleDefinition.hh"
51 #include "G4ParticleTable.hh"
52 
53 #include "G4MesonConstructor.hh"
54 #include "G4BaryonConstructor.hh"
56 #include "G4IonConstructor.hh"
57 
58 #include "G4PionBuilder.hh"
59 #include "G4BertiniPionBuilder.hh"
60 #include "G4FTFPPionBuilder.hh"
61 
62 #include "G4KaonBuilder.hh"
63 #include "G4BertiniKaonBuilder.hh"
64 #include "G4FTFPKaonBuilder.hh"
65 
66 #include "G4ProtonBuilder.hh"
68 #include "G4FTFPNeutronBuilder.hh"
69 #include "G4FTFPProtonBuilder.hh"
70 
71 #include "G4NeutronBuilder.hh"
73 #include "G4FTFPNeutronBuilder.hh"
74 #include "G4NeutronPHPBuilder.hh"
75 
76 #include "G4HyperonFTFPBuilder.hh"
77 #include "G4AntiBarionBuilder.hh"
79 
83 #include "G4NeutronLENDBuilder.hh"
84 
87 #include "G4PhysListUtil.hh"
88 
92 #include "G4NeutronRadCapture.hh"
93 #include "G4NeutronCaptureXS.hh"
95 #include "G4LFission.hh"
96 
98 #include "G4PhysListUtil.hh"
99 #include "G4HadronicParameters.hh"
100 #include "G4ProcessManager.hh"
101 
102 // factory
104 //
106 
107 
109  : G4VPhysicsConstructor("hInelastic Shielding")
110  , useLEND_(false)
111  , evaluation_()
112  , minFTFPEnergy_(G4HadronicParameters::Instance()->GetMinEnergyTransitionFTF_Cascade())
113  , maxBertiniEnergy_(G4HadronicParameters::Instance()->GetMaxEnergyTransitionFTF_Cascade())
114  , minNonHPNeutronEnergy_(19.9*MeV)
115 {}
116 
118  : G4VPhysicsConstructor(name)
119  , useLEND_(false)
120  , evaluation_()
121  , minFTFPEnergy_(G4HadronicParameters::Instance()->GetMinEnergyTransitionFTF_Cascade())
122  , maxBertiniEnergy_(G4HadronicParameters::Instance()->GetMaxEnergyTransitionFTF_Cascade())
123  , minNonHPNeutronEnergy_(19.9*MeV)
124 {}
125 
127  G4int /*verbose*/, G4double minFTFPEnergy, G4double maxBertiniEnergy)
128  : G4VPhysicsConstructor(name)
129  , useLEND_(false)
130  , evaluation_()
131  , minFTFPEnergy_(minFTFPEnergy)
132  , maxBertiniEnergy_(maxBertiniEnergy)
133  , minNonHPNeutronEnergy_(19.9*MeV)
134 {}
135 
136 
138 {}
139 
140 
142 {
143  G4cout << G4endl
144  << " Shielding : threshold between BERT and FTFP is over the interval : "
145  << minFTFPEnergy_/GeV << " to " << maxBertiniEnergy_/GeV << " GeV" << G4endl
146  << G4endl;
147 }
148 
149 
151 {
152  G4MesonConstructor pMesonConstructor;
153  pMesonConstructor.ConstructParticle();
154 
155  G4BaryonConstructor pBaryonConstructor;
156  pBaryonConstructor.ConstructParticle();
157 
158  G4ShortLivedConstructor pShortLivedConstructor;
159  pShortLivedConstructor.ConstructParticle();
160 
161  G4IonConstructor pIonConstructor;
162  pIonConstructor.ConstructParticle();
163 }
164 
165 
167 {
168  Neutron();
169  Proton();
170  Pion();
171  Kaon();
172  Others();
173 }
174 
175 
177 {
178  auto neu = new G4NeutronBuilder( true );
179  AddBuilder( neu );
180  auto ftfpn = new G4FTFPNeutronBuilder( false );
181  AddBuilder( ftfpn );
182  neu->RegisterMe( ftfpn );
183  ftfpn->SetMinEnergy( minFTFPEnergy_ );
184  auto bertn = new G4BertiniNeutronBuilder;
185  AddBuilder( bertn );
186  neu->RegisterMe( bertn );
187  bertn->SetMinEnergy( minNonHPNeutronEnergy_ );
188  bertn->SetMaxEnergy( maxBertiniEnergy_ );
189  if ( useLEND_ ) {
190  auto lendn = new G4NeutronLENDBuilder( evaluation_ );
191  AddBuilder( lendn );
192  neu->RegisterMe( lendn );
193  } else {
194  auto hpn = new G4NeutronPHPBuilder;
195  AddBuilder( hpn );
196  neu->RegisterMe( hpn );
197  }
198  neu->Build();
199 }
200 
201 
203 {
204  auto pro = new G4ProtonBuilder;
205  AddBuilder( pro );
206  auto ftfpp = new G4FTFPProtonBuilder( false );
207  AddBuilder( ftfpp );
208  pro->RegisterMe( ftfpp );
209  ftfpp->SetMinEnergy( minFTFPEnergy_ );
210  auto bertp = new G4BertiniProtonBuilder;
211  AddBuilder( bertp );
212  pro->RegisterMe( bertp );
213  bertp->SetMaxEnergy( maxBertiniEnergy_ );
214  pro->Build();
215 }
216 
217 
219 {
220  auto pi = new G4PionBuilder;
221  AddBuilder( pi );
222  auto ftfppi = new G4FTFPPionBuilder( false );
223  AddBuilder( ftfppi );
224  pi->RegisterMe( ftfppi );
225  ftfppi->SetMinEnergy( minFTFPEnergy_ );
226  auto bertpi = new G4BertiniPionBuilder;
227  AddBuilder( bertpi );
228  pi->RegisterMe( bertpi );
229  bertpi->SetMaxEnergy( maxBertiniEnergy_ );
230  pi->Build();
231 }
232 
233 
235 {
236  auto k = new G4KaonBuilder;
237  AddBuilder( k );
238  auto ftfpk = new G4FTFPKaonBuilder( false );
239  AddBuilder( ftfpk );
240  k->RegisterMe( ftfpk );
241  ftfpk->SetMinEnergy( minFTFPEnergy_ );
242  auto bertk = new G4BertiniKaonBuilder;
243  AddBuilder( bertk );
244  k->RegisterMe( bertk );
245  bertk->SetMaxEnergy( maxBertiniEnergy_ );
246  k->Build();
247 }
248 
249 
251 {
252  // Hyperons
253  auto hyp = new G4HyperonFTFPBuilder;
254  AddBuilder( hyp );
255  hyp->Build();
256 
257  // Antibaryons
258  auto abar = new G4AntiBarionBuilder;
259  AddBuilder( abar );
260  auto ftfpabar = new G4FTFPAntiBarionBuilder( false );
261  AddBuilder( ftfpabar );
262  abar->RegisterMe( ftfpabar );
263  abar->Build();
264 }
265 
266 
268 {
269  if ( G4Threading::IsMasterThread() ) {
270  DumpBanner();
271  }
272  CreateModels();
274 }
275 
276 
278 {
279  // Modify cross sections for kaons
280  auto xsk = new G4ComponentGGHadronNucleusXsc();
281  G4VCrossSectionDataSet* kaonxs = new G4CrossSectionInelastic( xsk );
286 
287  // Modify neutrons
290  if ( inel ) {
291  // Register the G4ParticleHPJENDLHEInelasticData as the 2nd priority.
293  }
295  if ( capture ) {
296  G4NeutronRadCapture* theNeutronRadCapture = new G4NeutronRadCapture;
297  theNeutronRadCapture->SetMinEnergy( minNonHPNeutronEnergy_ );
298  capture->RegisterMe( theNeutronRadCapture );
299  }
301  if ( fission ) {
302  G4LFission* theNeutronLEPFission = new G4LFission;
303  theNeutronLEPFission->SetMinEnergy( minNonHPNeutronEnergy_ );
304  theNeutronLEPFission->SetMaxEnergy( G4HadronicParameters::Instance()->GetMaxEnergy() );
305  fission->RegisterMe( theNeutronLEPFission );
306  }
307 }
308