Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4HadronInelasticQBBC.cc
Go to the documentation of this file.
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 // $Id: G4HadronInelasticQBBC.cc 99977 2016-10-13 07:26:42Z gcosmo $
27 //
28 //---------------------------------------------------------------------------
29 //
30 // ClassName: G4HadronInelasticQBBC
31 //
32 // Author: 2 October 2009 V. Ivanchenko
33 //
34 // Modified:
35 //
36 //----------------------------------------------------------------------------
37 //
38 
39 #include "G4HadronInelasticQBBC.hh"
40 
41 #include "G4SystemOfUnits.hh"
42 
44 #include "G4HadronicInteraction.hh"
45 
46 #include "G4ParticleDefinition.hh"
47 #include "G4ProcessManager.hh"
48 
50 #include "G4BGGPionInelasticXS.hh"
51 
52 #include "G4NeutronInelasticXS.hh"
53 #include "G4NeutronCaptureXS.hh"
54 
58 #include "G4CrossSectionPairGG.hh"
60 
61 #include "G4QGSBuilder.hh"
62 #include "G4FTFBuilder.hh"
63 
67 
68 #include "G4CascadeInterface.hh"
69 #include "G4BinaryCascade.hh"
70 #include "G4NeutronRadCapture.hh"
71 
72 #include "G4PreCompoundModel.hh"
73 #include "G4ExcitationHandler.hh"
74 #include "G4Evaporation.hh"
76 
77 // factory
79 //
81 
82 G4ThreadLocal G4ComponentAntiNuclNuclearXS* G4HadronInelasticQBBC::theAntiNuclXS = nullptr;
83 G4ThreadLocal G4ComponentGGHadronNucleusXsc* G4HadronInelasticQBBC::theKaonXS = nullptr;
84 
86  : G4VHadronPhysics("hInelasticQBBC"),verbose(ver)
87 {
88  theAntiNuclXS = nullptr;
89  theKaonXS = nullptr;
90 }
91 
94 {}
95 
97 {
98  delete theAntiNuclXS; theAntiNuclXS=nullptr;
99  delete theKaonXS; theKaonXS=nullptr;
100 }
101 
103 {
104  if(verbose > 1) {
105  G4cout << "### HadronInelasticQBBC Construct Process " << G4endl;
106  }
107 
108  G4double emax = 100.*TeV;
109 
110  //G4cout << "G4HadronInelasticQBBC::ConstructProcess new PRECO"<< G4endl;
111 
112  // PreCompound and Evaporation models are instantiated here
113  G4PreCompoundModel* thePreCompound = nullptr;
116  thePreCompound = static_cast<G4PreCompoundModel*>(p);
117  if(!thePreCompound) { thePreCompound = new G4PreCompoundModel(); }
118 
119  // configure models
120  //G4HadronicInteraction* theQGSP =
121  // BuildModel(new G4QGSBuilder("QGSP",thePreCompound,true,false),12.5*GeV,emax);
122  G4HadronicInteraction* theFTFP =
123  BuildModel(new G4FTFBuilder("FTFP",thePreCompound),3.0*GeV,emax);
124  G4HadronicInteraction* theFTFP1 =
125  BuildModel(new G4FTFBuilder("FTFP",thePreCompound),3.0*GeV,emax);
126  G4HadronicInteraction* theFTFP2 =
127  BuildModel(new G4FTFBuilder("FTFP",thePreCompound),0.0,emax);
128 
131  G4HadronicInteraction* theBERT = NewModel(casc,1.0*GeV,5.0*GeV);
132 
133  casc = new G4CascadeInterface();
135  G4HadronicInteraction* theBERT1 = NewModel(casc,0.0*GeV,5.0*GeV);
136 
137  //G4cout << "G4HadronInelasticQBBC::ConstructProcess new Binary"<< G4endl;
138  G4BinaryCascade* bic = new G4BinaryCascade(thePreCompound);
139  G4HadronicInteraction* theBIC = NewModel(bic,0.0,1.5*GeV);
140 
141  // cross sections
142  theAntiNuclXS = new G4ComponentAntiNuclNuclearXS();
143  G4CrossSectionInelastic* anucxs =
144  new G4CrossSectionInelastic(theAntiNuclXS);
145  theKaonXS = new G4ComponentGGHadronNucleusXsc();
146  G4CrossSectionInelastic* kaonxs = new G4CrossSectionInelastic(theKaonXS);
147 
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  G4HadronicProcess* hp = FindInelasticProcess(particle);
163  hp->AddDataSet(new G4BGGNucleonInelasticXS(particle));
164 
165  //hp->RegisterMe(theQGSP);
166  hp->RegisterMe(theFTFP);
167  hp->RegisterMe(theBERT);
168  hp->RegisterMe(theBIC);
169 
170  } else if(pname == "neutron") {
171  G4HadronicProcess* hp = FindInelasticProcess(particle);
173  //hp->RegisterMe(theQGSP);
174  hp->RegisterMe(theFTFP);
175 
178  hp->RegisterMe(theBERT);
179  hp->RegisterMe(theBIC);
180  capture->RegisterMe(new G4NeutronRadCapture());
181 
182  } else if(pname == "pi-" || pname == "pi+") {
183  G4HadronicProcess* hp = FindInelasticProcess(particle);
184  hp->AddDataSet(new G4BGGPionInelasticXS(particle));
185  //hp->AddDataSet(new G4CrossSectionPairGG((G4PiNuclearCrossSection*)G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4PiNuclearCrossSection::Default_Name()), 91*GeV));
186  //hp->RegisterMe(theQGSP);
187  hp->RegisterMe(theFTFP);
188  hp->RegisterMe(theBERT1);
189 
190  } else if(pname == "kaon-" ) {
191  G4HadronicProcess* hp = FindInelasticProcess(particle);
192  hp->RegisterMe(theFTFP1);
193  hp->RegisterMe(theBERT1);
194  hp->AddDataSet(kaonxs);
195 
196  } else if(pname == "kaon+" ) {
197  G4HadronicProcess* hp = FindInelasticProcess(particle);
198  hp->RegisterMe(theFTFP1);
199  hp->RegisterMe(theBERT1);
200  hp->AddDataSet(kaonxs);
201 
202  } else if(pname == "kaon0S" ||
203  pname == "kaon0L") {
204  G4HadronicProcess* hp = FindInelasticProcess(particle);
205  hp->RegisterMe(theFTFP1);
206  hp->RegisterMe(theBERT1);
207  hp->AddDataSet(kaonxs);
208 
209  } else if(pname == "lambda" ||
210  pname == "omega-" ||
211  pname == "sigma-" ||
212  pname == "sigma+" ||
213  pname == "sigma0" ||
214  pname == "xi-" ||
215  pname == "xi0") {
216  G4HadronicProcess* hp = FindInelasticProcess(particle);
217  hp->RegisterMe(theFTFP1);
218  hp->RegisterMe(theBERT1);
220 
221  } else if(pname == "anti_alpha" ||
222  pname == "anti_deuteron"||
223  pname == "anti_He3" ||
224  pname == "anti_proton" ||
225  pname == "anti_triton" ||
226  pname == "anti_lambda" ||
227  pname == "anti_neutron" ||
228  pname == "anti_omega-" ||
229  pname == "anti_sigma-" ||
230  pname == "anti_sigma+" ||
231  pname == "anti_xi-" ||
232  pname == "anti_xi0"
233  ) {
234 
235  G4HadronicProcess* hp = FindInelasticProcess(particle);
236  hp->RegisterMe(theFTFP2);
237  hp->AddDataSet(anucxs);
238 
239  }
240  }
241 }
G4HadronicProcess * FindCaptureProcess()
const char * p
Definition: xmltok.h:285
static const char * Default_Name()
#define G4ThreadLocal
Definition: tls.hh:89
int G4int
Definition: G4Types.hh:78
const G4String & GetParticleName() const
void RegisterMe(G4HadronicInteraction *a)
static constexpr double TeV
Definition: G4SIunits.hh:218
G4ParticleTable::G4PTblDicIterator * GetParticleIterator() const
void AddDataSet(G4VCrossSectionDataSet *aDataSet)
G4GLOB_DLL std::ostream G4cout
bool G4bool
Definition: G4Types.hh:79
static G4CrossSectionDataSetRegistry * Instance()
G4HadronicProcess * FindInelasticProcess(const G4String &)
static const G4double emax
G4HadronicInteraction * FindModel(const G4String &name)
G4HadronicInteraction * NewModel(G4HadronicInteraction *, G4double emin, G4double emax)
static const char * Default_Name()
static G4HadronicInteractionRegistry * Instance()
static constexpr double GeV
Definition: G4SIunits.hh:217
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
G4HadronicInteraction * BuildModel(G4VHadronModelBuilder *, G4double emin, G4double emax)
#define G4_DECLARE_PHYSCONSTR_FACTORY(physics_constructor)