Geant4  10.02.p02
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 93617 2015-10-27 09:00:41Z 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 
85 
87  : G4VHadronPhysics("hInelastic"),verbose(ver)
88 {
89  htype = "QBBC";
90  theAntiNuclXS = 0;
91  theKaonXS = 0;
92 }
93 
96  : G4VHadronPhysics("hInelastic"),verbose(ver)
97 {
98  htype = name;
99  theAntiNuclXS = 0;
100  theKaonXS = 0;
101 }
102 
104 {
105  delete theAntiNuclXS; theAntiNuclXS=0;
106  delete theKaonXS; theKaonXS=0;
107 }
108 
110 {
111  if(wasActivated) return;
112  wasActivated = true;
113 
114  if(verbose > 1) {
115  G4cout << "### HadronInelasticQBBC Construct Process with type <"
116  << htype << ">" << G4endl;
117  }
118 
119  G4double emax = 100.*TeV;
120 
121  //G4cout << "G4HadronInelasticQBBC::ConstructProcess new PRECO"<< G4endl;
122 
123  // PreCompound and Evaporation models are instantiated here
124  G4PreCompoundModel* thePreCompound = 0;
127  thePreCompound = static_cast<G4PreCompoundModel*>(p);
128  if(!thePreCompound) { thePreCompound = new G4PreCompoundModel(); }
129 
130  // configure models
131  //G4HadronicInteraction* theQGSP =
132  // BuildModel(new G4QGSBuilder("QGSP",thePreCompound,true,false),12.5*GeV,emax);
133  G4HadronicInteraction* theFTFP =
134  BuildModel(new G4FTFBuilder("FTFP",thePreCompound),3.0*GeV,emax);
135  G4HadronicInteraction* theFTFP1 =
136  BuildModel(new G4FTFBuilder("FTFP",thePreCompound),3.0*GeV,emax);
137  G4HadronicInteraction* theFTFP2 =
138  BuildModel(new G4FTFBuilder("FTFP",thePreCompound),0.0,emax);
139 
140  G4HadronicInteraction* theBERT =
141  NewModel(new G4CascadeInterface(),1.0*GeV,4.0*GeV);
142  G4HadronicInteraction* theBERT1 =
143  NewModel(new G4CascadeInterface(),0.0*GeV,4.0*GeV);
144 
145  //G4cout << "G4HadronInelasticQBBC::ConstructProcess new Binary"<< G4endl;
146  G4BinaryCascade* bic = new G4BinaryCascade(thePreCompound);
147  G4HadronicInteraction* theBIC = NewModel(bic,0.0,1.5*GeV);
148 
149  // cross sections
151  G4CrossSectionInelastic* anucxs =
155 
156  // loop over particles
157  aParticleIterator->reset();
158  while( (*aParticleIterator)() ) {
159  G4ParticleDefinition* particle = aParticleIterator->value();
160  G4String pname = particle->GetParticleName();
161  //G4ProcessManager* pmanager = particle->GetProcessManager();
162  if(verbose > 1) {
163  G4cout << "### HadronInelasticQBBC: " << pname << G4endl;
164  }
165 
166  //
167  // model and X-section configuration per particle type
168  //
169  if(pname == "proton") {
170  G4HadronicProcess* hp = FindInelasticProcess(particle);
171  hp->AddDataSet(new G4BGGNucleonInelasticXS(particle));
172 
173  //hp->RegisterMe(theQGSP);
174  hp->RegisterMe(theFTFP);
175  hp->RegisterMe(theBERT);
176  hp->RegisterMe(theBIC);
177 
178  } else if(pname == "neutron") {
179  G4HadronicProcess* hp = FindInelasticProcess(particle);
181  //hp->RegisterMe(theQGSP);
182  hp->RegisterMe(theFTFP);
183 
186  hp->RegisterMe(theBERT);
187  hp->RegisterMe(theBIC);
188  capture->RegisterMe(new G4NeutronRadCapture());
189 
190  } else if(pname == "pi-" || pname == "pi+") {
191  G4HadronicProcess* hp = FindInelasticProcess(particle);
192  hp->AddDataSet(new G4BGGPionInelasticXS(particle));
193  //hp->AddDataSet(new G4CrossSectionPairGG((G4PiNuclearCrossSection*)G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4PiNuclearCrossSection::Default_Name()), 91*GeV));
194  //hp->RegisterMe(theQGSP);
195  hp->RegisterMe(theFTFP);
196  hp->RegisterMe(theBERT1);
197 
198  } else if(pname == "kaon-" ) {
199  G4HadronicProcess* hp = FindInelasticProcess(particle);
200  hp->RegisterMe(theFTFP1);
201  hp->RegisterMe(theBERT1);
202  hp->AddDataSet(kaonxs);
203 
204  } else if(pname == "kaon+" ) {
205  G4HadronicProcess* hp = FindInelasticProcess(particle);
206  hp->RegisterMe(theFTFP1);
207  hp->RegisterMe(theBERT1);
208  hp->AddDataSet(kaonxs);
209 
210  } else if(pname == "kaon0S" ||
211  pname == "kaon0L") {
212  G4HadronicProcess* hp = FindInelasticProcess(particle);
213  hp->RegisterMe(theFTFP1);
214  hp->RegisterMe(theBERT1);
215  hp->AddDataSet(kaonxs);
216 
217  } else if(pname == "lambda" ||
218  pname == "omega-" ||
219  pname == "sigma-" ||
220  pname == "sigma+" ||
221  pname == "sigma0" ||
222  pname == "xi-" ||
223  pname == "xi0") {
224  G4HadronicProcess* hp = FindInelasticProcess(particle);
225  hp->RegisterMe(theFTFP1);
226  hp->RegisterMe(theBERT1);
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_lambda" ||
235  pname == "anti_neutron" ||
236  pname == "anti_omega-" ||
237  pname == "anti_sigma-" ||
238  pname == "anti_sigma+" ||
239  pname == "anti_xi-" ||
240  pname == "anti_xi0"
241  ) {
242 
243  G4HadronicProcess* hp = FindInelasticProcess(particle);
244  hp->RegisterMe(theFTFP2);
245  hp->AddDataSet(anucxs);
246 
247  }
248  }
249 }
G4HadronicProcess * FindCaptureProcess()
static G4ThreadLocal G4ComponentAntiNuclNuclearXS * theAntiNuclXS
G4String name
Definition: TRTMaterials.hh:40
static const char * Default_Name()
#define G4ThreadLocal
Definition: tls.hh:89
int G4int
Definition: G4Types.hh:78
const G4String & GetParticleName() const
G4_DECLARE_PHYSCONSTR_FACTORY(G4HadronInelasticQBBC)
void RegisterMe(G4HadronicInteraction *a)
static G4ThreadLocal G4bool wasActivated
void AddDataSet(G4VCrossSectionDataSet *aDataSet)
G4GLOB_DLL std::ostream G4cout
bool G4bool
Definition: G4Types.hh:79
#define aParticleIterator
static G4CrossSectionDataSetRegistry * Instance()
G4HadronicProcess * FindInelasticProcess(const G4String &)
static G4ThreadLocal G4ComponentGGHadronNucleusXsc * theKaonXS
static const double GeV
Definition: G4SIunits.hh:214
static const G4double emax
G4HadronicInteraction * FindModel(const G4String &name)
G4HadronicInteraction * NewModel(G4HadronicInteraction *, G4double emin, G4double emax)
static const char * Default_Name()
static G4HadronicInteractionRegistry * Instance()
#define G4endl
Definition: G4ios.hh:61
static const double TeV
Definition: G4SIunits.hh:215
double G4double
Definition: G4Types.hh:76
G4HadronicInteraction * BuildModel(G4VHadronModelBuilder *, G4double emin, G4double emax)