ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4HadronInelasticQBBC.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4HadronInelasticQBBC.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: G4HadronInelasticQBBC
30 //
31 // Author: 2 October 2009 V. Ivanchenko
32 //
33 // Modified:
34 //
35 //----------------------------------------------------------------------------
36 //
37 
38 #include "G4HadronInelasticQBBC.hh"
39 
40 #include "G4SystemOfUnits.hh"
41 
43 #include "G4HadronicInteraction.hh"
44 
45 #include "G4ParticleDefinition.hh"
46 #include "G4ProcessManager.hh"
47 
49 #include "G4BGGPionInelasticXS.hh"
50 
51 #include "G4ParticleInelasticXS.hh"
52 #include "G4NeutronInelasticXS.hh"
53 #include "G4NeutronCaptureXS.hh"
54 
58 #include "G4CrossSectionPairGG.hh"
60 
61 #include "G4QGSBuilder.hh"
62 #include "G4FTFBuilder.hh"
63 
66 
67 #include "G4CascadeInterface.hh"
68 #include "G4BinaryCascade.hh"
69 #include "G4NeutronRadCapture.hh"
70 
71 #include "G4PreCompoundModel.hh"
72 #include "G4ExcitationHandler.hh"
73 #include "G4Evaporation.hh"
75 
76 #include "G4HadronicParameters.hh"
77 
78 // factory
80 //
82 
84  : G4VHadronPhysics("hInelasticQBBC"),verbose(ver)
85 {}
86 
89 {}
90 
92 {}
93 
95 {
96  if(verbose > 1) {
97  G4cout << "### HadronInelasticQBBC Construct Process " << G4endl;
98  }
99 
101 
102  //G4cout << "G4HadronInelasticQBBC::ConstructProcess new PRECO"<< G4endl;
103 
104  // PreCompound and Evaporation models are instantiated here
105  G4PreCompoundModel* thePreCompound = nullptr;
108  thePreCompound = static_cast<G4PreCompoundModel*>(p);
109  if(!thePreCompound) { thePreCompound = new G4PreCompoundModel(); }
110 
111  // configure models
114 
115  //G4HadronicInteraction* theQGSP =
116  // BuildModel(new G4QGSBuilder("QGSP",thePreCompound,true,false),12.5*GeV,emax);
117  G4HadronicInteraction* theFTFP =
118  BuildModel(new G4FTFBuilder("FTFP",thePreCompound),eminFtf,emax);
119  G4HadronicInteraction* theFTFP1 =
120  BuildModel(new G4FTFBuilder("FTFP",thePreCompound),eminFtf,emax);
121  G4HadronicInteraction* theFTFP2 =
122  BuildModel(new G4FTFBuilder("FTFP",thePreCompound),0.0,emax);
123 
126  G4HadronicInteraction* theBERT = NewModel(casc,1.0*GeV,emaxBert);
127 
128  casc = new G4CascadeInterface();
130  G4HadronicInteraction* theBERT1 = NewModel(casc,0.0*GeV,emaxBert);
131 
132  //G4cout << "G4HadronInelasticQBBC::ConstructProcess new Binary"<< G4endl;
133  G4BinaryCascade* bic = new G4BinaryCascade(thePreCompound);
134  G4HadronicInteraction* theBIC = NewModel(bic,0.0,1.5*GeV);
135 
136  // cross sections
137  G4CrossSectionInelastic* anucxs = InelasticXS("AntiAGlauber");
138  if(!anucxs) {
140  }
141  G4CrossSectionInelastic* kaonxs =
143  if(!kaonxs) {
145  }
146 
147  G4HadronicProcess* hp;
148  // loop over particles
149  auto myParticleIterator=GetParticleIterator();
150  myParticleIterator->reset();
151  while( (*myParticleIterator)() ) {
152  G4ParticleDefinition* particle = myParticleIterator->value();
153  G4String pname = particle->GetParticleName();
154  if(verbose > 1) {
155  G4cout << "### HadronInelasticQBBC: " << pname << G4endl;
156  }
157 
158  //
159  // model and X-section configuration per particle type
160  //
161  if(pname == "proton") {
162  hp = FindInelasticProcess(particle);
163  hp->AddDataSet(new G4ParticleInelasticXS(particle));
164  //hp->AddDataSet(new G4BGGNucleonInelasticXS(particle));
165 
166  hp->RegisterMe(theFTFP);
167  hp->RegisterMe(theBERT);
168  hp->RegisterMe(theBIC);
169 
170  } else if(pname == "neutron") {
171  hp = FindInelasticProcess(particle);
172  hp->AddDataSet(new G4NeutronInelasticXS());
173  hp->RegisterMe(theFTFP);
174 
176  capture->RegisterMe(new G4NeutronRadCapture());
177  hp->RegisterMe(theBERT);
178  hp->RegisterMe(theBIC);
179 
180  } else if(pname == "pi-" || pname == "pi+") {
181  hp = FindInelasticProcess(particle);
182  hp->AddDataSet(new G4BGGPionInelasticXS(particle));
183  hp->RegisterMe(theFTFP);
184  hp->RegisterMe(theBERT1);
185 
186  } else if(pname == "kaon-" ) {
187  hp = FindInelasticProcess(particle);
188  hp->RegisterMe(theFTFP1);
189  hp->RegisterMe(theBERT1);
190  hp->AddDataSet(kaonxs);
191 
192  } else if(pname == "kaon+" ) {
193  hp = FindInelasticProcess(particle);
194  hp->RegisterMe(theFTFP1);
195  hp->RegisterMe(theBERT1);
196  hp->AddDataSet(kaonxs);
197 
198  } else if(pname == "kaon0S" ||
199  pname == "kaon0L") {
200  hp = FindInelasticProcess(particle);
201  hp->RegisterMe(theFTFP1);
202  hp->RegisterMe(theBERT1);
203  hp->AddDataSet(kaonxs);
204 
205  } else if(pname == "lambda" ||
206  pname == "omega-" ||
207  pname == "sigma-" ||
208  pname == "sigma+" ||
209  pname == "sigma0" ||
210  pname == "xi-" ||
211  pname == "xi0") {
212  hp = FindInelasticProcess(particle);
213  hp->RegisterMe(theFTFP1);
214  hp->RegisterMe(theBERT1);
215  hp->AddDataSet(kaonxs);
216 
217  } else if(pname == "anti_lambda" ||
218  pname == "anti_omega-" ||
219  pname == "anti_sigma-" ||
220  pname == "anti_sigma+" ||
221  pname == "anti_sigma0" ||
222  pname == "anti_xi-" ||
223  pname == "anti_xi0"
224  ) {
225  hp = FindInelasticProcess(particle);
226  hp->RegisterMe(theFTFP2);
227  hp->AddDataSet(kaonxs);
228 
229  } else if(pname == "anti_alpha" ||
230  pname == "anti_deuteron"||
231  pname == "anti_He3" ||
232  pname == "anti_proton" ||
233  pname == "anti_triton" ||
234  pname == "anti_neutron"
235  ) {
236  hp = FindInelasticProcess(particle);
237  hp->RegisterMe(theFTFP2);
238  hp->AddDataSet(anucxs);
239  }
240  }
241 }