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
G4HadronQElasticPhysics.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: G4HadronQElasticPhysics
31//
32// Author: 17 Nov 2006 V.Ivanchenko
33//
34// Modified:
35// 03.06.2010 V.Ivanchenko cleanup constructors and ConstructProcess method
36// 01.11.2012 A.Ribon: use G4AntiNuclElastic for light anti-ions.
37//
38//----------------------------------------------------------------------------
39//
40// CHIPS x-sections and generator (G4QElastic) for n and p
41// LHEP x-section and generator for the rest
42
44
47#include "G4HadronElastic.hh"
48#include "G4QElastic.hh"
49#include "G4AntiNuclElastic.hh"
50
51#include "G4VQCrossSection.hh"
52
54#include "G4ProcessManager.hh"
55
56#include "G4MesonConstructor.hh"
58#include "G4IonConstructor.hh"
59
62
63// factory
65//
67
68
70 : G4VPhysicsConstructor("hElasticCHIPS_LHEP"), verbose(ver),
71 wasActivated(false)
72{
73 if(verbose > 1) {
74 G4cout << "### G4HadronQElasticPhysics: " << GetPhysicsName()
75 << G4endl;
76 }
77}
78
80 : G4VPhysicsConstructor("hElasticCHIPS_LHEP"), verbose(ver),
81 wasActivated(false)
82{
83 if(verbose > 1) {
84 G4cout << "### G4HadronQElasticPhysics: " << GetPhysicsName()
85 << G4endl;
86 }
87}
88
90{}
91
93{
94 G4MesonConstructor pMesonConstructor;
95 pMesonConstructor.ConstructParticle();
96
97 G4BaryonConstructor pBaryonConstructor;
98 pBaryonConstructor.ConstructParticle();
99
100 // Construct light ions
101 G4IonConstructor pConstructor;
102 pConstructor.ConstructParticle();
103}
104
106{
107 if(wasActivated) { return; }
108 wasActivated = true;
109
110 if(verbose > 1) {
111 G4cout << "### HadronQElasticPhysics::ConstructProcess" << G4endl;
112 }
113
114 G4HadronElastic* lhep0 = new G4HadronElastic();
115 G4HadronElastic* lhep1 = new G4HadronElastic();
116 G4double elimitAntiNuc = 100*CLHEP::MeV;
117 lhep1->SetMaxEnergy(elimitAntiNuc);
119 anuc->SetMinEnergy(elimitAntiNuc);
120 G4CrossSectionElastic* anucxs =
122
124 while( (*theParticleIterator)() )
125 {
127 G4ProcessManager* pmanager = particle->GetProcessManager();
128 G4String pname = particle->GetParticleName();
129 if(pname == "anti_lambda" ||
130 pname == "anti_neutron" ||
131 pname == "anti_omega-" ||
132 pname == "anti_sigma-" ||
133 pname == "anti_sigma+" ||
134 pname == "anti_xi-" ||
135 pname == "anti_xi0" ||
136 pname == "kaon-" ||
137 pname == "kaon+" ||
138 pname == "kaon0S" ||
139 pname == "kaon0L" ||
140 pname == "lambda" ||
141 pname == "omega-" ||
142 pname == "pi-" ||
143 pname == "pi+" ||
144 pname == "sigma-" ||
145 pname == "sigma+" ||
146 pname == "xi-" ||
147 pname == "alpha" ||
148 pname == "deuteron" ||
149 pname == "triton"
150 ) {
151
153 hel->RegisterMe(lhep0);
154 pmanager->AddDiscreteProcess(hel);
155
156 } else if(pname == "neutron" || pname == "proton") {
157
158 G4QElastic* process = new G4QElastic();
159 pmanager->AddDiscreteProcess(process);
160
161 if(verbose > 0)
162 G4cout << "### QElastic added for "
163 << particle->GetParticleName() << G4endl;
164
165 } else if(
166 pname == "anti_proton" ||
167 pname == "anti_alpha" ||
168 pname == "anti_deuteron" ||
169 pname == "anti_triton" ||
170 pname == "anti_He3"
171 ) {
172
174 hel->AddDataSet(anucxs);
175 hel->RegisterMe(lhep1);
176 hel->RegisterMe(anuc);
177 pmanager->AddDiscreteProcess(hel);
178
179 }
180
181 }
182}
#define G4_DECLARE_PHYSCONSTR_FACTORY(physics_constructor)
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
#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