Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4HadronElasticPhysics.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$
27//
28//---------------------------------------------------------------------------
29//
30// ClassName: G4HadronElasticPhysics
31//
32// Author: 23 November 2006 V. Ivanchenko
33//
34// Modified:
35// 21.03.2007 V.Ivanchenko Use G4BGGNucleonElasticXS and G4BGGPionElasticXS;
36// Reduce thresholds for HE and Q-models to zero
37// 03.06.2010 V.Ivanchenko cleanup constructors and ConstructProcess method
38// 29.07.2010 V.Ivanchenko rename this class from G4HadronHElasticPhysics to
39// G4HadronElasticPhysics, old version of the class
40// is renamed to G4HadronElasticPhysics93
41//
42//----------------------------------------------------------------------------
43//
44// CHIPS for sampling scattering for p and n
45// Glauber model for samplimg of high energy pi+- (E > 1GeV)
46// LHEP sampling model for the other particle
47// BBG cross sections for p, n and pi+-
48// LHEP cross sections for other particles
49
51
52#include "G4SystemOfUnits.hh"
54#include "G4ProcessManager.hh"
55
56#include "G4MesonConstructor.hh"
58#include "G4IonConstructor.hh"
59
61#include "G4HadronElastic.hh"
62#include "G4CHIPSElastic.hh"
64#include "G4AntiNuclElastic.hh"
65
67#include "G4BGGPionElasticXS.hh"
68#include "G4NeutronElasticXS.hh"
69
71
74
77
78// factory
80//
82//
83
85 : G4VPhysicsConstructor("hElasticWEL_CHIPS"), verbose(ver),
86 wasActivated(false)
87{
88 if(verbose > 1) {
89 G4cout << "### G4HadronElasticPhysics: " << GetPhysicsName()
90 << G4endl;
91 }
92 neutronProcess = 0;
93 neutronModel = 0;
94}
95
97 G4int ver, G4bool, const G4String&)
98 : G4VPhysicsConstructor("hElasticWEL_CHIPS"), verbose(ver),
99 wasActivated(false)
100{
101 if(verbose > 1) {
102 G4cout << "### G4HadronElasticPhysics: " << GetPhysicsName()
103 << G4endl;
104 }
105 neutronProcess = 0;
106 neutronModel = 0;
107}
108
110{}
111
113{
114 // G4cout << "G4HadronElasticPhysics::ConstructParticle" << G4endl;
115 G4MesonConstructor pMesonConstructor;
116 pMesonConstructor.ConstructParticle();
117
118 G4BaryonConstructor pBaryonConstructor;
119 pBaryonConstructor.ConstructParticle();
120
121 G4IonConstructor pConstructor;
122 pConstructor.ConstructParticle();
123}
124
126{
127 if(wasActivated) { return; }
128 wasActivated = true;
129
130 G4double elimitPi = 1.0*GeV;
131 G4double elimitAntiNuc = 100*MeV;
132 if(verbose > 1) {
133 G4cout << "### HadronElasticPhysics Construct Processes with the limit for pi "
134 << elimitPi/GeV << " GeV"
135 << " for anti-neuclei "
136 << elimitAntiNuc/GeV << " GeV" << G4endl;
137 }
138
140 anuc->SetMinEnergy(elimitAntiNuc);
141 G4CrossSectionElastic* anucxs =
143
144 G4HadronElastic* lhep0 = new G4HadronElastic();
145 G4HadronElastic* lhep1 = new G4HadronElastic();
146 G4HadronElastic* lhep2 = new G4HadronElastic();
147 lhep1->SetMaxEnergy(elimitPi);
148 lhep2->SetMaxEnergy(elimitAntiNuc);
149
150 G4CHIPSElastic* chipsp = new G4CHIPSElastic();
151 neutronModel = new G4CHIPSElastic();
152
154 he->SetMinEnergy(elimitPi);
155
157 while( (*theParticleIterator)() )
158 {
160 G4ProcessManager* pmanager = particle->GetProcessManager();
161 G4String pname = particle->GetParticleName();
162 if(pname == "anti_lambda" ||
163 pname == "anti_neutron" ||
164 pname == "anti_omega-" ||
165 pname == "anti_sigma-" ||
166 pname == "anti_sigma+" ||
167 pname == "anti_xi-" ||
168 pname == "anti_xi0" ||
169 pname == "lambda" ||
170 pname == "omega-" ||
171 pname == "sigma-" ||
172 pname == "sigma+" ||
173 pname == "xi-" ||
174 pname == "alpha" ||
175 pname == "deuteron" ||
176 pname == "triton"
177 ) {
178
180 hel->RegisterMe(lhep0);
181 pmanager->AddDiscreteProcess(hel);
182 if(verbose > 1) {
183 G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
184 << " added for " << particle->GetParticleName() << G4endl;
185 }
186
187 } else if(pname == "proton") {
188
190 //hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
191
192 // hel->AddDataSet(new G4ChipsProtonElasticXS());
194
195 hel->RegisterMe(chipsp);
196 pmanager->AddDiscreteProcess(hel);
197 if(verbose > 1) {
198 G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
199 << " added for " << particle->GetParticleName() << G4endl;
200 }
201
202 } else if(pname == "neutron") {
203
204 neutronProcess = new G4HadronElasticProcess();
205 //neutronProcess->AddDataSet(new G4BGGNucleonElasticXS(particle));
207 neutronProcess->RegisterMe(neutronModel);
208 pmanager->AddDiscreteProcess(neutronProcess);
209 if(verbose > 1) {
210 G4cout << "### HadronElasticPhysics: "
211 << neutronProcess->GetProcessName()
212 << " added for " << particle->GetParticleName() << G4endl;
213 }
214
215 } else if (pname == "pi+" || pname == "pi-") {
216
218 hel->AddDataSet(new G4BGGPionElasticXS(particle));
219 hel->RegisterMe(lhep1);
220 hel->RegisterMe(he);
221 pmanager->AddDiscreteProcess(hel);
222 if(verbose > 1) {
223 G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
224 << " added for " << particle->GetParticleName() << G4endl;
225 }
226
227 } else if(pname == "kaon-" ||
228 pname == "kaon+" ||
229 pname == "kaon0S" ||
230 pname == "kaon0L"
231 ) {
232
234 hel->RegisterMe(lhep0);
235 pmanager->AddDiscreteProcess(hel);
236 if(verbose > 1) {
237 G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
238 << " added for " << particle->GetParticleName() << G4endl;
239 }
240
241 } else if(
242 pname == "anti_proton" ||
243 pname == "anti_alpha" ||
244 pname == "anti_deuteron" ||
245 pname == "anti_triton" ||
246 pname == "anti_He3" ) {
247
249 hel->AddDataSet(anucxs);
250 hel->RegisterMe(lhep2);
251 hel->RegisterMe(anuc);
252 pmanager->AddDiscreteProcess(hel);
253 }
254 }
255}
256
257
#define G4_DECLARE_PHYSCONSTR_FACTORY(physics_constructor)
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cout
G4ComponentAntiNuclNuclearXS * GetComponentCrossSection()
static void ConstructParticle()
static const char * Default_Name()
static const char * Default_Name()
static G4CrossSectionDataSetRegistry * Instance()
void SetMinEnergy(G4double anEnergy)
void SetMaxEnergy(const G4double anEnergy)
void AddDataSet(G4VCrossSectionDataSet *aDataSet)
void RegisterMe(G4HadronicInteraction *a)
static void ConstructParticle()
static void ConstructParticle()
G4ProcessManager * GetProcessManager() const
const G4String & GetParticleName() const
G4int AddDiscreteProcess(G4VProcess *aProcess, G4int ord=ordDefault)
const G4String & GetPhysicsName() const
G4ParticleTable::G4PTblDicIterator * theParticleIterator
const G4String & GetProcessName() const
Definition: G4VProcess.hh:379