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
G4HadronHElasticPhysics.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: G4HadronHElasticPhysics
31//
32// Author: 23 November 2006 V. Ivanchenko
33//
34// Modified:
35// 21.03.07 (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//
39//----------------------------------------------------------------------------
40//
41// CHIPS for sampling scattering for p and n
42// Glauber model for samplimg of high energy pi+- (E > 1GeV)
43// LHEP sampling model for the other particle
44// BBG cross sections for p, n and pi+-
45// LHEP cross sections for other particles
46
48
49#include "G4SystemOfUnits.hh"
51#include "G4ProcessManager.hh"
52
53#include "G4MesonConstructor.hh"
55#include "G4IonConstructor.hh"
56#include "G4Neutron.hh"
57
59#include "G4HadronElastic.hh"
60#include "G4CHIPSElastic.hh"
62#include "G4AntiNuclElastic.hh"
63
65#include "G4BGGPionElasticXS.hh"
66#include "G4NeutronElasticXS.hh"
67#include "G4CHIPSElasticXS.hh"
68
71
72// factory
74//
76
77
79 : G4VPhysicsConstructor("hElasticWEL_CHIPS"), verbose(ver),
80 wasActivated(false)
81{
82 // if(verbose > 1) {
83 G4cout << "### G4HadronHElasticPhysics: " << GetPhysicsName()
84 << " is obsolete and soon will be removed" << G4endl;
85}
86
88 const G4String&)
89 : G4VPhysicsConstructor("hElasticWEL_CHIPS"), verbose(ver),
90 wasActivated(false)
91{
92 if(verbose > 1) {
93 G4cout << "### G4HadronHElasticPhysics: " << GetPhysicsName()
94 << G4endl;
95 }
96}
97
99{}
100
102{
103 // G4cout << "G4HadronElasticPhysics::ConstructParticle" << G4endl;
104 G4MesonConstructor pMesonConstructor;
105 pMesonConstructor.ConstructParticle();
106
107 G4BaryonConstructor pBaryonConstructor;
108 pBaryonConstructor.ConstructParticle();
109
110 // Construct light ions
111 G4IonConstructor pConstructor;
112 pConstructor.ConstructParticle();
113}
114
116{
117 if(wasActivated) { return; }
118 wasActivated = true;
119
120 G4double elimitPi = 1.0*GeV;
121 G4double elimitAntiNuc = 100*MeV;
122 if(verbose > 1) {
123 G4cout << "### HadronElasticPhysics Construct Processes with the limit for pi "
124 << elimitPi/GeV << " GeV"
125 << " for anti-neuclei "
126 << elimitAntiNuc/GeV << " GeV" << G4endl;
127 }
128
130 anuc->SetMinEnergy(elimitAntiNuc);
131 G4CrossSectionElastic* anucxs =
133
134 G4HadronElastic* lhep0 = new G4HadronElastic();
135 G4HadronElastic* lhep1 = new G4HadronElastic();
136 G4HadronElastic* lhep2 = new G4HadronElastic();
137 lhep1->SetMaxEnergy(elimitPi);
138 lhep2->SetMaxEnergy(elimitAntiNuc);
139
140 G4CHIPSElastic* chipsp = new G4CHIPSElastic();
141 G4HadronElastic* neutronModel = new G4CHIPSElastic();
142
144 he->SetMinEnergy(elimitPi);
145
147 while( (*theParticleIterator)() )
148 {
150 G4ProcessManager* pmanager = particle->GetProcessManager();
151 G4String pname = particle->GetParticleName();
152 if(pname == "anti_lambda" ||
153 pname == "anti_neutron" ||
154 pname == "anti_omega-" ||
155 pname == "anti_sigma-" ||
156 pname == "anti_sigma+" ||
157 pname == "anti_xi-" ||
158 pname == "anti_xi0" ||
159 pname == "lambda" ||
160 pname == "omega-" ||
161 pname == "sigma-" ||
162 pname == "sigma+" ||
163 pname == "xi-" ||
164 pname == "alpha" ||
165 pname == "deuteron" ||
166 pname == "triton"
167 ) {
168
170 hel->RegisterMe(lhep0);
171 pmanager->AddDiscreteProcess(hel);
172 if(verbose > 1) {
173 G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
174 << " added for " << particle->GetParticleName() << G4endl;
175 }
176
177 } else if(pname == "proton") {
178
180 //hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
181 hel->AddDataSet(new G4CHIPSElasticXS());
182 hel->RegisterMe(chipsp);
183 pmanager->AddDiscreteProcess(hel);
184 if(verbose > 1) {
185 G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
186 << " added for " << particle->GetParticleName() << G4endl;
187 }
188
189 } else if(pname == "neutron") {
190
192 //hel->AddDataSet(new G4NeutronElasticXS());
193 //hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
194 hel->AddDataSet(new G4CHIPSElasticXS());
195 hel->RegisterMe(neutronModel);
196 pmanager->AddDiscreteProcess(hel);
197 if(verbose > 1) {
198 G4cout << "### HadronElasticPhysics: "
199 << hel->GetProcessName()
200 << " added for " << particle->GetParticleName() << G4endl;
201 }
202
203 } else if (pname == "pi+" || pname == "pi-") {
204
206 hel->AddDataSet(new G4CHIPSElasticXS());
207 //hel->AddDataSet(new G4BGGPionElasticXS(particle));
208 hel->RegisterMe(lhep1);
209 hel->RegisterMe(he);
210 pmanager->AddDiscreteProcess(hel);
211 if(verbose > 1) {
212 G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
213 << " added for " << particle->GetParticleName() << G4endl;
214 }
215
216 } else if(pname == "kaon-" ||
217 pname == "kaon+" ||
218 pname == "kaon0S" ||
219 pname == "kaon0L"
220 ) {
221
223 hel->RegisterMe(lhep0);
224 hel->AddDataSet(new G4CHIPSElasticXS());
225 pmanager->AddDiscreteProcess(hel);
226 if(verbose > 1) {
227 G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
228 << " added for " << particle->GetParticleName() << G4endl;
229 }
230
231 } else if(
232 pname == "anti_proton" ||
233 pname == "anti_alpha" ||
234 pname == "anti_deuteron" ||
235 pname == "anti_triton" ||
236 pname == "anti_He3" ) {
237
239 hel->AddDataSet(anucxs);
240 hel->RegisterMe(lhep2);
241 hel->RegisterMe(anuc);
242 pmanager->AddDiscreteProcess(hel);
243 }
244 }
245}
246
247
#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()
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