Geant4  10.01.p03
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 83699 2014-09-10 07:18:25Z 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 
69 
70 #include "G4CascadeInterface.hh"
71 #include "G4BinaryCascade.hh"
72 #include "G4NeutronRadCapture.hh"
73 
74 #include "G4PreCompoundModel.hh"
75 #include "G4ExcitationHandler.hh"
76 #include "G4Evaporation.hh"
78 
79 // factory
81 //
83 
86 
88  : G4VHadronPhysics("hInelastic"),verbose(ver)
89 {
90  htype = "QBBC";
91  theAntiNuclXS = 0;
92 }
93 
96  : G4VHadronPhysics("hInelastic"),verbose(ver)
97 {
98  htype = name;
99  theAntiNuclXS = 0;
100 }
101 
103 {
104  delete theAntiNuclXS; theAntiNuclXS=0;
105 }
106 
108 {
109  if(wasActivated) return;
110  wasActivated = true;
111 
112  if(verbose > 1) {
113  G4cout << "### HadronInelasticQBBC Construct Process with type <"
114  << htype << ">" << G4endl;
115  }
116 
117  G4double emax = 100.*TeV;
118 
119 
120  //G4cout << "G4HadronInelasticQBBC::ConstructProcess new PRECO"<< G4endl;
121 
122  // PreCompound and Evaporation models are instantiated here
123  G4PreCompoundModel* thePreCompound = 0;
126  thePreCompound = static_cast<G4PreCompoundModel*>(p);
127  if(!thePreCompound) { thePreCompound = new G4PreCompoundModel(); }
128  //G4ExcitationHandler* handler = thePreCompound->GetExcitationHandler();
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,12.0*GeV);
142  G4HadronicInteraction* theBERT1 =
143  NewModel(new G4CascadeInterface(),0.0*GeV,12.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 =
153 
154  // loop over particles
155  aParticleIterator->reset();
156  while( (*aParticleIterator)() ) {
157  G4ParticleDefinition* particle = aParticleIterator->value();
158  G4String pname = particle->GetParticleName();
159  //G4ProcessManager* pmanager = particle->GetProcessManager();
160  if(verbose > 1) {
161  G4cout << "### HadronInelasticQBBC: " << pname << G4endl;
162  }
163 
164  //
165  // model and X-section configuration per particle type
166  //
167  if(pname == "proton") {
168  G4HadronicProcess* hp = FindInelasticProcess(particle);
169  hp->AddDataSet(new G4BGGNucleonInelasticXS(particle));
170 
171  //hp->RegisterMe(theQGSP);
172  hp->RegisterMe(theFTFP);
173  hp->RegisterMe(theBERT);
174  hp->RegisterMe(theBIC);
175 
176  } else if(pname == "neutron") {
177  G4HadronicProcess* hp = FindInelasticProcess(particle);
179  //hp->RegisterMe(theQGSP);
180  hp->RegisterMe(theFTFP);
181 
184  hp->RegisterMe(theBERT);
185  hp->RegisterMe(theBIC);
186  capture->RegisterMe(new G4NeutronRadCapture());
187 
188  } else if(pname == "pi-" || pname == "pi+") {
189  G4HadronicProcess* hp = FindInelasticProcess(particle);
190 // hp->AddDataSet(new G4BGGPionInelasticXS(particle));
192  //hp->RegisterMe(theQGSP);
193  hp->RegisterMe(theFTFP);
194  hp->RegisterMe(theBERT1);
195 
196  } else if(pname == "kaon-" ) {
197  G4HadronicProcess* hp = FindInelasticProcess(particle);
198  hp->RegisterMe(theFTFP1);
199  hp->RegisterMe(theBERT1);
201 
202  } else if(pname == "kaon+" ) {
203  G4HadronicProcess* hp = FindInelasticProcess(particle);
204  hp->RegisterMe(theFTFP1);
205  hp->RegisterMe(theBERT1);
207 
208  } else if(pname == "kaon0S" ||
209  pname == "kaon0L") {
210  G4HadronicProcess* hp = FindInelasticProcess(particle);
211  hp->RegisterMe(theFTFP1);
212  hp->RegisterMe(theBERT1);
214 
215  } else if(pname == "lambda" ||
216  pname == "omega-" ||
217  pname == "sigma-" ||
218  pname == "sigma+" ||
219  pname == "sigma0" ||
220  pname == "xi-" ||
221  pname == "xi0") {
222  G4HadronicProcess* hp = FindInelasticProcess(particle);
223  hp->RegisterMe(theFTFP1);
224  hp->RegisterMe(theBERT1);
226 
227  } else if(pname == "anti_alpha" ||
228  pname == "anti_deuteron"||
229  pname == "anti_He3" ||
230  pname == "anti_proton" ||
231  pname == "anti_triton" ||
232  pname == "anti_lambda" ||
233  pname == "anti_neutron" ||
234  pname == "anti_omega-" ||
235  pname == "anti_sigma-" ||
236  pname == "anti_sigma+" ||
237  pname == "anti_xi-" ||
238  pname == "anti_xi0"
239  ) {
240 
241  G4HadronicProcess* hp = FindInelasticProcess(particle);
242  hp->RegisterMe(theFTFP2);
243  hp->AddDataSet(anucxs);
244 
245  }
246  }
247 }
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
static const char * Default_Name()
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 const double GeV
Definition: G4SIunits.hh:196
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:197
double G4double
Definition: G4Types.hh:76
G4HadronicInteraction * BuildModel(G4VHadronModelBuilder *, G4double emin, G4double emax)