ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4HadronPhysicsShieldingLEND.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4HadronPhysicsShieldingLEND.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: 7 Nov 2017 Tatsumi Koi
32 // created from G4HadronPhysicsShielding
33 //
34 // Modified:
35 //
36 //----------------------------------------------------------------------------
37 //
38 #include <iomanip>
39 
41 
42 #include "globals.hh"
43 #include "G4ios.hh"
44 #include "G4SystemOfUnits.hh"
45 #include "G4ParticleDefinition.hh"
46 #include "G4ParticleTable.hh"
47 
48 #include "G4MesonConstructor.hh"
49 #include "G4BaryonConstructor.hh"
51 #include "G4IonConstructor.hh"
52 
53 #include "G4PionBuilder.hh"
54 #include "G4BertiniPionBuilder.hh"
55 #include "G4FTFPPionBuilder.hh"
56 
57 #include "G4KaonBuilder.hh"
58 #include "G4BertiniKaonBuilder.hh"
59 #include "G4FTFPKaonBuilder.hh"
60 
61 #include "G4ProtonBuilder.hh"
63 #include "G4FTFPNeutronBuilder.hh"
64 #include "G4FTFPProtonBuilder.hh"
65 
66 #include "G4NeutronBuilder.hh"
68 #include "G4FTFPNeutronBuilder.hh"
69 #include "G4NeutronPHPBuilder.hh"
70 
71 #include "G4HyperonFTFPBuilder.hh"
72 #include "G4AntiBarionBuilder.hh"
74 
78 #include "G4NeutronLENDBuilder.hh"
79 
82 #include "G4PhysListUtil.hh"
83 
87 #include "G4NeutronRadCapture.hh"
88 #include "G4NeutronCaptureXS.hh"
90 #include "G4LFission.hh"
91 
93 #include "G4PhysListUtil.hh"
94 #include "G4HadronicParameters.hh"
95 #include "G4ProcessManager.hh"
96 
97 // factory
99 //
101 
102 
104  : G4VPhysicsConstructor("hInelastic ShieldingLEND")
105  , useLEND_(false)
106  , evaluation_()
107  , minFTFPEnergy_(G4HadronicParameters::Instance()->GetMinEnergyTransitionFTF_Cascade())
108  , maxBertiniEnergy_(G4HadronicParameters::Instance()->GetMaxEnergyTransitionFTF_Cascade())
109  , minNonHPNeutronEnergy_(19.9*MeV)
110 {}
111 
113  : G4VPhysicsConstructor(name)
114  , useLEND_(false)
115  , evaluation_()
116  , minFTFPEnergy_(G4HadronicParameters::Instance()->GetMinEnergyTransitionFTF_Cascade())
117  , maxBertiniEnergy_(G4HadronicParameters::Instance()->GetMaxEnergyTransitionFTF_Cascade())
118  , minNonHPNeutronEnergy_(19.9*MeV)
119 {}
120 
122  G4int /*verbose*/, G4double minFTFPEnergy, G4double maxBertiniEnergy)
123  : G4VPhysicsConstructor(name)
124  , useLEND_(false)
125  , evaluation_()
126  , minFTFPEnergy_(minFTFPEnergy)
127  , maxBertiniEnergy_(maxBertiniEnergy)
128  , minNonHPNeutronEnergy_(19.9*MeV)
129 {}
130 
131 
133 {}
134 
135 
137 {
138  G4cout << G4endl
139  << " ShieldingLEND : threshold between BERT and FTFP is over the interval : "
140  << minFTFPEnergy_/GeV << " to " << maxBertiniEnergy_/GeV << " GeV" << G4endl
141  << G4endl;
142 }
143 
144 
146 {
147  G4MesonConstructor pMesonConstructor;
148  pMesonConstructor.ConstructParticle();
149 
150  G4BaryonConstructor pBaryonConstructor;
151  pBaryonConstructor.ConstructParticle();
152 
153  G4ShortLivedConstructor pShortLivedConstructor;
154  pShortLivedConstructor.ConstructParticle();
155 
156  G4IonConstructor pIonConstructor;
157  pIonConstructor.ConstructParticle();
158 }
159 
160 
162 {
163  Neutron();
164  Proton();
165  Pion();
166  Kaon();
167  Others();
168 }
169 
170 
172 {
173  auto neu = new G4NeutronBuilder( true );
174  AddBuilder( neu );
175  auto ftfpn = new G4FTFPNeutronBuilder( false );
176  AddBuilder( ftfpn );
177  neu->RegisterMe( ftfpn );
178  ftfpn->SetMinEnergy( minFTFPEnergy_ );
179  auto bertn = new G4BertiniNeutronBuilder;
180  AddBuilder( bertn );
181  neu->RegisterMe( bertn );
182  bertn->SetMinEnergy( minNonHPNeutronEnergy_ );
183  bertn->SetMaxEnergy( maxBertiniEnergy_ );
184  auto lendn = new G4NeutronLENDBuilder( evaluation_ );
185  AddBuilder( lendn );
186  neu->RegisterMe( lendn );
187  neu->Build();
188 }
189 
190 
192 {
193  auto pro = new G4ProtonBuilder;
194  AddBuilder( pro );
195  auto ftfpp = new G4FTFPProtonBuilder( false );
196  AddBuilder( ftfpp );
197  pro->RegisterMe( ftfpp );
198  ftfpp->SetMinEnergy( minFTFPEnergy_ );
199  auto bertp = new G4BertiniProtonBuilder;
200  AddBuilder( bertp );
201  pro->RegisterMe( bertp );
202  bertp->SetMaxEnergy( maxBertiniEnergy_ );
203  pro->Build();
204 }
205 
206 
208 {
209  auto pi = new G4PionBuilder;
210  AddBuilder( pi );
211  auto ftfppi = new G4FTFPPionBuilder( false );
212  AddBuilder( ftfppi );
213  pi->RegisterMe( ftfppi );
214  ftfppi->SetMinEnergy( minFTFPEnergy_ );
215  auto bertpi = new G4BertiniPionBuilder;
216  AddBuilder( bertpi );
217  pi->RegisterMe( bertpi );
218  bertpi->SetMaxEnergy( maxBertiniEnergy_ );
219  pi->Build();
220 }
221 
222 
224 {
225  auto k = new G4KaonBuilder;
226  AddBuilder( k );
227  auto ftfpk = new G4FTFPKaonBuilder( false );
228  AddBuilder( ftfpk );
229  k->RegisterMe( ftfpk );
230  ftfpk->SetMinEnergy( minFTFPEnergy_ );
231  auto bertk = new G4BertiniKaonBuilder;
232  AddBuilder( bertk );
233  k->RegisterMe( bertk );
234  bertk->SetMaxEnergy( maxBertiniEnergy_ );
235  k->Build();
236 }
237 
238 
240 {
241  // Hyperons
242  auto hyp = new G4HyperonFTFPBuilder;
243  AddBuilder( hyp );
244  hyp->Build();
245 
246  // Antibaryons
247  auto abar = new G4AntiBarionBuilder;
248  AddBuilder( abar );
249  auto ftfpabar = new G4FTFPAntiBarionBuilder( false );
250  AddBuilder( ftfpabar );
251  abar->RegisterMe( ftfpabar );
252  abar->Build();
253 }
254 
255 
257 {
258  if ( G4Threading::IsMasterThread() ) {
259  DumpBanner();
260  }
261  CreateModels();
263 }
264 
265 
267 {
268  // Modify cross sections for kaons
269  auto xsk = new G4ComponentGGHadronNucleusXsc();
270  G4VCrossSectionDataSet* kaonxs = new G4CrossSectionInelastic( xsk );
275 
276  // Modify neutrons
279  if ( inel ) {
280  // Register the G4ParticleHPJENDLHEInelasticData as the 2nd priority.
282  }
284  if ( capture ) {
285  G4NeutronRadCapture* theNeutronRadCapture = new G4NeutronRadCapture;
286  theNeutronRadCapture->SetMinEnergy( minNonHPNeutronEnergy_ );
287  capture->RegisterMe( theNeutronRadCapture );
288  }
290  if ( fission ) {
291  G4LFission* theNeutronLEPFission = new G4LFission;
292  theNeutronLEPFission->SetMinEnergy( minNonHPNeutronEnergy_ );
293  theNeutronLEPFission->SetMaxEnergy( G4HadronicParameters::Instance()->GetMaxEnergy() );
294  fission->RegisterMe( theNeutronLEPFission );
295  }
296 }
297