ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
HadronPhysicsCRMC_FTFP_BERT.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file HadronPhysicsCRMC_FTFP_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 //
27 //---------------------------------------------------------------------------
28 //
29 // ClassName: HadronPhysicsCRMC_FTFP_BERT
30 //
31 // Authors: 2018 Alberto Ribon
32 //
33 // Modified:
34 //----------------------------------------------------------------------------
35 //
36 #ifdef G4_USE_CRMC
37 
38 #include <iomanip>
40 #include "globals.hh"
41 #include "G4ios.hh"
42 #include "G4SystemOfUnits.hh"
43 #include "G4ParticleDefinition.hh"
44 #include "G4ParticleTable.hh"
45 #include "G4PionBuilder.hh"
46 #include "G4FTFPPionBuilder.hh"
47 #include "CRMCPionBuilder.hh"
48 #include "G4BertiniPionBuilder.hh"
49 #include "G4KaonBuilder.hh"
50 #include "G4FTFPKaonBuilder.hh"
51 #include "CRMCKaonBuilder.hh"
52 #include "G4BertiniKaonBuilder.hh"
53 #include "G4ProtonBuilder.hh"
54 #include "G4FTFPProtonBuilder.hh"
55 #include "CRMCProtonBuilder.hh"
57 #include "G4NeutronBuilder.hh"
58 #include "G4FTFPNeutronBuilder.hh"
59 #include "CRMCNeutronBuilder.hh"
61 #include "G4HyperonFTFPBuilder.hh"
62 #include "G4AntiBarionBuilder.hh"
64 #include "G4MesonConstructor.hh"
65 #include "G4BaryonConstructor.hh"
67 #include "G4IonConstructor.hh"
70 #include "G4NeutronRadCapture.hh"
71 #include "G4NeutronInelasticXS.hh"
72 #include "G4NeutronCaptureXS.hh"
75 #include "G4PhysListUtil.hh"
76 #include "G4ProcessManager.hh"
77 #include "G4HadronicParameters.hh"
79 //
81 
82 
84  HadronPhysicsCRMC_FTFP_BERT( "hInelastic CRMC_FTFP_BERT" ) {}
85 
86 
88  G4VPhysicsConstructor( name ) {
89  minCRMC = 100.0*GeV;
90  maxFTFP = 110.0*GeV;
93  minBERT = 0.0*GeV;
94 }
95 
96 
98 }
99 
100 
102  G4MesonConstructor pMesonConstructor;
103  pMesonConstructor.ConstructParticle();
104  G4BaryonConstructor pBaryonConstructor;
105  pBaryonConstructor.ConstructParticle();
106  G4ShortLivedConstructor pShortLivedConstructor;
107  pShortLivedConstructor.ConstructParticle();
108 }
109 
110 
112  G4cout << G4endl
113  << " CRMC_FTFP_BERT : thresholds for pions, kaons, protons & neutrons " << G4endl
114  << "\t BERT : " << minBERT/GeV << " to " << maxBERT/GeV << " GeV" << G4endl
115  << "\t FTFP : " << minFTFP/GeV << " to " << maxFTFP/GeV << " GeV" << G4endl
116  << "\t CRMC : above " << minCRMC/GeV << " GeV" << G4endl
117  << G4endl;
118 }
119 
120 
122  Neutron();
123  Proton();
124  Pion();
125  Kaon();
126  Others();
127 }
128 
129 
131  // General schema:
132  // 1) Create a builder
133  // 2) Call AddBuilder
134  // 3) Configure the builder, possibly with sub-builders
135  // 4) Call builder->Build()
136  auto neu = new G4NeutronBuilder;
137  AddBuilder( neu );
138  auto epos_n = new CRMCNeutronBuilder;
139  AddBuilder( epos_n );
140  epos_n->SetMinEnergy( minCRMC );
141  neu->RegisterMe( epos_n );
142  auto ftfp_n = new G4FTFPNeutronBuilder( true );
143  AddBuilder( ftfp_n );
144  ftfp_n->SetMinEnergy( minFTFP );
145  ftfp_n->SetMaxEnergy( maxFTFP );
146  neu->RegisterMe( ftfp_n );
147  auto bert_n = new G4BertiniNeutronBuilder;
148  AddBuilder( bert_n );
149  bert_n->SetMinEnergy( minBERT );
150  bert_n->SetMaxEnergy( maxBERT );
151  neu->RegisterMe( bert_n );
152  neu->Build();
153 }
154 
155 
157  auto pro = new G4ProtonBuilder;
158  AddBuilder( pro );
159  auto epos_p = new CRMCProtonBuilder;
160  AddBuilder( epos_p );
161  epos_p->SetMinEnergy( minCRMC );
162  pro->RegisterMe( epos_p );
163  auto ftfp_p = new G4FTFPProtonBuilder( true );
164  AddBuilder( ftfp_p );
165  ftfp_p->SetMinEnergy( minFTFP );
166  ftfp_p->SetMaxEnergy( maxFTFP );
167  pro->RegisterMe( ftfp_p );
168  auto bert_p = new G4BertiniProtonBuilder;
169  AddBuilder( bert_p );
170  bert_p->SetMinEnergy( minBERT );
171  bert_p->SetMaxEnergy( maxBERT );
172  pro->RegisterMe( bert_p );
173  pro->Build();
174 }
175 
176 
178  auto pi = new G4PionBuilder;
179  AddBuilder( pi );
180  auto epos_pi = new CRMCPionBuilder;
181  AddBuilder( epos_pi );
182  epos_pi->SetMinEnergy( minCRMC );
183  pi->RegisterMe( epos_pi );
184  auto ftfp_pi = new G4FTFPPionBuilder( true );
185  AddBuilder( ftfp_pi );
186  pi->RegisterMe( ftfp_pi );
187  ftfp_pi->SetMinEnergy( minFTFP );
188  ftfp_pi->SetMaxEnergy( maxFTFP );
189  auto bert_pi = new G4BertiniPionBuilder;
190  AddBuilder( bert_pi );
191  pi->RegisterMe( bert_pi );
192  bert_pi->SetMinEnergy( minBERT );
193  bert_pi->SetMaxEnergy( maxBERT );
194  pi->Build();
195 }
196 
197 
199  auto k = new G4KaonBuilder;
200  AddBuilder( k );
201  auto epos_k = new CRMCKaonBuilder;
202  AddBuilder( epos_k );
203  epos_k->SetMinEnergy( minCRMC );
204  k->RegisterMe( epos_k );
205  auto ftfp_k = new G4FTFPKaonBuilder( true );
206  AddBuilder( ftfp_k );
207  k->RegisterMe( ftfp_k );
208  ftfp_k->SetMinEnergy( minFTFP );
209  ftfp_k->SetMaxEnergy( maxFTFP );
210  auto bert_k = new G4BertiniKaonBuilder;
211  AddBuilder( bert_k );
212  k->RegisterMe( bert_k );
213  bert_k->SetMinEnergy( minBERT );
214  bert_k->SetMaxEnergy( maxBERT );
215  k->Build();
216 }
217 
218 
220  // Hyperons
221  auto ftfp_hyp = new G4HyperonFTFPBuilder;
222  AddBuilder( ftfp_hyp );
223  ftfp_hyp->Build();
224  // Anti-baryons
225  auto abar = new G4AntiBarionBuilder;
226  AddBuilder( abar );
227  auto ftfp_abar = new G4FTFPAntiBarionBuilder( true );
228  AddBuilder( ftfp_abar );
229  abar->RegisterMe( ftfp_abar );
230  abar->Build();
231 }
232 
233 
235  // Modify cross sections for kaons
236  auto xsk = new G4ComponentGGHadronNucleusXsc;
237  xs_k.Put( xsk );
238  G4VCrossSectionDataSet* kaonxs = new G4CrossSectionInelastic( xsk );
239  xs_ds.Push_back( kaonxs );
244  // Modify Neutrons
247  if ( inel ) inel->AddDataSet( new G4NeutronInelasticXS );
249  if ( capture ) capture->RegisterMe( new G4NeutronRadCapture );
250 }
251 
252 
254  if ( G4Threading::IsMasterThread() ) {
255  DumpBanner();
256  }
257  CreateModels();
259 }
260 
261 #endif //G4_USE_CRMC
262 
263