Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4HadronElasticPhysics Class Reference

#include <G4HadronElasticPhysics.hh>

Inheritance diagram for G4HadronElasticPhysics:

Public Member Functions

 G4HadronElasticPhysics (G4int ver=1, const G4String &nam="hElasticWEL_CHIPS_XS")
 ~G4HadronElasticPhysics () override=default
void ConstructParticle () override
void ConstructProcess () override
G4HadronicProcessGetElasticProcess (const G4ParticleDefinition *part) const
G4HadronElasticGetElasticModel (const G4ParticleDefinition *part) const
G4HadronicProcessGetNeutronProcess () const
G4HadronElasticGetNeutronModel () const
void AddXSection (const G4ParticleDefinition *, G4VCrossSectionDataSet *) const
 G4HadronElasticPhysics (G4HadronElasticPhysics &)=delete
G4HadronElasticPhysicsoperator= (const G4HadronElasticPhysics &right)=delete
Public Member Functions inherited from G4VPhysicsConstructor
 G4VPhysicsConstructor (const G4String &="")
 G4VPhysicsConstructor (const G4String &name, G4int physics_type)
virtual ~G4VPhysicsConstructor ()
void SetPhysicsName (const G4String &="")
const G4StringGetPhysicsName () const
void SetPhysicsType (G4int)
G4int GetPhysicsType () const
G4int GetInstanceID () const
virtual void TerminateWorker ()
void SetVerboseLevel (G4int value)
G4int GetVerboseLevel () const

Additional Inherited Members

Static Public Member Functions inherited from G4VPhysicsConstructor
static const G4VPCManagerGetSubInstanceManager ()
Protected Types inherited from G4VPhysicsConstructor
using PhysicsBuilder_V = G4VPCData::PhysicsBuilders_V
Protected Member Functions inherited from G4VPhysicsConstructor
G4bool RegisterProcess (G4VProcess *process, G4ParticleDefinition *particle)
G4ParticleTable::G4PTblDicIteratorGetParticleIterator () const
PhysicsBuilder_V GetBuilders () const
void AddBuilder (G4PhysicsBuilderInterface *bld)
Protected Attributes inherited from G4VPhysicsConstructor
G4int verboseLevel = 0
G4String namePhysics = ""
G4int typePhysics = 0
G4ParticleTabletheParticleTable = nullptr
G4int g4vpcInstanceID = 0
Static Protected Attributes inherited from G4VPhysicsConstructor
static G4RUN_DLL G4VPCManager subInstanceManager

Detailed Description

Definition at line 54 of file G4HadronElasticPhysics.hh.

Constructor & Destructor Documentation

◆ G4HadronElasticPhysics() [1/2]

G4HadronElasticPhysics::G4HadronElasticPhysics ( G4int ver = 1,
const G4String & nam = "hElasticWEL_CHIPS_XS" )
explicit

◆ ~G4HadronElasticPhysics()

G4HadronElasticPhysics::~G4HadronElasticPhysics ( )
overridedefault

◆ G4HadronElasticPhysics() [2/2]

G4HadronElasticPhysics::G4HadronElasticPhysics ( G4HadronElasticPhysics & )
delete

Member Function Documentation

◆ AddXSection()

void G4HadronElasticPhysics::AddXSection ( const G4ParticleDefinition * part,
G4VCrossSectionDataSet * cross ) const

Definition at line 257 of file G4HadronElasticPhysics.cc.

259{
260 G4HadronicProcess* hel = GetElasticProcess(part);
261 if ( nullptr != hel ) { hel->AddDataSet(cross); }
262}
G4HadronicProcess * GetElasticProcess(const G4ParticleDefinition *part) const
void AddDataSet(G4VCrossSectionDataSet *aDataSet)

◆ ConstructParticle()

void G4HadronElasticPhysics::ConstructParticle ( )
overridevirtual

Implements G4VPhysicsConstructor.

Definition at line 90 of file G4HadronElasticPhysics.cc.

91{
92 G4MesonConstructor pMesonConstructor;
93 pMesonConstructor.ConstructParticle();
94
95 G4BaryonConstructor pBaryonConstructor;
96 pBaryonConstructor.ConstructParticle();
97
98 G4IonConstructor pConstructor;
99 pConstructor.ConstructParticle();
100}
static void ConstructParticle()
static void ConstructParticle()
static void ConstructParticle()

◆ ConstructProcess()

void G4HadronElasticPhysics::ConstructProcess ( )
overridevirtual

Implements G4VPhysicsConstructor.

Reimplemented in G4HadronElasticPhysicsHP, G4HadronElasticPhysicsHPT, G4HadronElasticPhysicsLEND, G4HadronElasticPhysicsPHP, G4HadronElasticPhysicsVI, and G4HadronHElasticPhysics.

Definition at line 102 of file G4HadronElasticPhysics.cc.

103{
104 G4HadronicParameters* param = G4HadronicParameters::Instance();
105 G4bool useFactorXS = param->ApplyFactorXS();
106 G4ParticleTable* table = G4ParticleTable::GetParticleTable();
107 G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
108
109 const G4double elimitAntiNuc = 100.*MeV;
110 const G4double delta = 0.1*MeV;
111 G4double emax = std::max(param->GetMaxEnergy(), elimitAntiNuc+delta);
112 if ( param->GetVerboseLevel() > 1 ) {
113 G4cout << "### HadronElasticPhysics::ConstructProcess: "
114 << "Elimit for for anti-neuclei " << elimitAntiNuc/CLHEP::GeV << " GeV"
115 << " for all hadrons Emax(GeV)= " << emax/CLHEP::GeV
116 << G4endl;
117 }
118
119 G4HadronElastic* lhep0 = new G4HadronElastic();
120 G4HadronElastic* lhep2 = new G4HadronElastic();
121 lhep0->SetMaxEnergy(emax);
122 lhep2->SetMaxEnergy(elimitAntiNuc+delta);
123
124 G4ElasticHadrNucleusHE* he = new G4ElasticHadrNucleusHE();
125 he->SetMaxEnergy(emax);
126
127 G4AntiNuclElastic* anuc = new G4AntiNuclElastic();
128 anuc->SetMinEnergy(elimitAntiNuc);
129 anuc->SetMaxEnergy(emax);
130
131 auto anucxs = G4HadProcesses::ElasticXS("AntiAGlauber");
132 auto xsNN = G4HadProcesses::ElasticXS("Glauber-Gribov Nucl-nucl");
133
134 // p
135 G4ParticleDefinition* particle = G4Proton::Proton();
136 G4HadronElasticProcess* hel = new G4HadronElasticProcess();
137 hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
138 hel->RegisterMe(new G4ChipsElasticModel());
139 if ( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorNucleonElastic() );
140 ph->RegisterProcess(hel, particle);
141
142 // n
143 hel = new G4HadronElasticProcess();
144 hel->RegisterMe(new G4ChipsElasticModel());
146
147 // pi+
148 particle = G4PionPlus::PionPlus();
149 hel = new G4HadronElasticProcess();
150 hel->AddDataSet(new G4BGGPionElasticXS(particle));
151 hel->RegisterMe(he);
152 if ( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorPionElastic() );
153 ph->RegisterProcess(hel, particle);
154
155 // pi-
156 particle = G4PionMinus::PionMinus();
157 hel = new G4HadronElasticProcess();
158 hel->AddDataSet(new G4BGGPionElasticXS(particle));
159 hel->RegisterMe(he);
160 if ( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorPionElastic() );
161 ph->RegisterProcess(hel, particle);
162
163 // kaons
165
166 // d, t, He3, alpha
167 for ( auto & pdg : G4HadParticles::GetLightIons() ) {
168 particle = table->FindParticle( pdg );
169 if ( particle == nullptr ) { continue; }
170
171 hel = new G4HadronElasticProcess();
172 hel->AddDataSet(xsNN);
173 hel->RegisterMe(lhep0);
174 if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorHadronElastic() );
175 ph->RegisterProcess(hel, particle);
176 }
177
178 // high energy particles
179 if( emax > param->EnergyThresholdForHeavyHadrons() ) {
180
181 // pbar, nbar, anti light ions
182 for( auto & pdg : G4HadParticles::GetLightAntiIons() ) {
183 particle = table->FindParticle( pdg );
184 if ( particle == nullptr ) { continue; }
185
186 hel = new G4HadronElasticProcess();
187 hel->RegisterMe(lhep2);
188 hel->RegisterMe(anuc);
189 hel->AddDataSet(anucxs);
190 if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorHadronElastic() );
191 ph->RegisterProcess(hel, particle);
192 }
193
194 // hyperons
197
198 // b-, c- baryons and mesons
199 if( G4HadronicParameters::Instance()->EnableBCParticles() ) {
201 }
202
203 // light hypernuclei and anti-hypernuclei
204 if ( G4HadronicParameters::Instance()->EnableHyperNuclei() ) {
205 // for light hypernuclei, we can use directly the following method:
207 // but not for light anti-hypernuclei, because they need a different cross section:
208 for ( auto & pdg : G4HadParticles::GetHyperAntiNuclei() ) {
209 particle = table->FindParticle( pdg );
210 if ( particle == nullptr ) continue;
211 hel = new G4HadronElasticProcess;
212 hel->AddDataSet( anucxs );
213 hel->RegisterMe( lhep0 );
214 if ( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorHadronElastic() );
215 ph->RegisterProcess( hel, particle );
216 }
217 }
218 }
219}
double G4double
Definition G4Types.hh:83
bool G4bool
Definition G4Types.hh:86
static const std::vector< G4int > & GetBCHadrons()
static const std::vector< G4int > & GetAntiHyperons()
static const std::vector< G4int > & GetLightAntiIons()
static const std::vector< G4int > & GetHyperNuclei()
static const std::vector< G4int > & GetLightIons()
static const std::vector< G4int > & GetKaons()
static const std::vector< G4int > & GetHyperons()
static const std::vector< G4int > & GetHyperAntiNuclei()
static G4CrossSectionElastic * ElasticXS(const G4String &componentName)
static void BuildNeutronElastic(G4HadronicProcess *)
static void BuildElastic(const std::vector< G4int > &particleList)
void SetMinEnergy(G4double anEnergy)
void SetMaxEnergy(const G4double anEnergy)
G4double XSFactorPionElastic() const
G4double XSFactorNucleonElastic() const
G4double EnergyThresholdForHeavyHadrons() const
G4double XSFactorHadronElastic() const
void MultiplyCrossSectionBy(G4double factor)
void RegisterMe(G4HadronicInteraction *a)
static G4ParticleTable * GetParticleTable()
G4bool RegisterProcess(G4VProcess *process, G4ParticleDefinition *particle)
static G4PhysicsListHelper * GetPhysicsListHelper()
static G4PionMinus * PionMinus()
static G4PionPlus * PionPlus()
Definition G4PionPlus.cc:93
static G4Proton * Proton()
Definition G4Proton.cc:90

Referenced by G4HadronElasticPhysicsHP::ConstructProcess(), G4HadronElasticPhysicsLEND::ConstructProcess(), G4HadronElasticPhysicsPHP::ConstructProcess(), and G4HadronElasticPhysicsVI::ConstructProcess().

◆ GetElasticModel()

G4HadronElastic * G4HadronElasticPhysics::GetElasticModel ( const G4ParticleDefinition * part) const

Definition at line 228 of file G4HadronElasticPhysics.cc.

229{
230 G4HadronElastic* mod = nullptr;
231 G4HadronicProcess* hel = GetElasticProcess(part);
232 if ( nullptr != hel ) {
233 const std::vector<G4HadronicInteraction*>& hi = hel->GetHadronicInteractionList();
234 if ( !hi.empty() ) {
235 for (auto const & p : hi) {
236 auto ptr = dynamic_cast<G4HadronElastic*>(p);
237 if ( nullptr != ptr ) {
238 mod = ptr;
239 break;
240 }
241 }
242 }
243 }
244 return mod;
245}
std::vector< G4HadronicInteraction * > & GetHadronicInteractionList()

Referenced by G4HadronElasticPhysicsHP::ConstructProcess(), G4HadronElasticPhysicsLEND::ConstructProcess(), G4HadronElasticPhysicsPHP::ConstructProcess(), G4HadronElasticPhysicsVI::ConstructProcess(), and GetNeutronModel().

◆ GetElasticProcess()

G4HadronicProcess * G4HadronElasticPhysics::GetElasticProcess ( const G4ParticleDefinition * part) const

Definition at line 222 of file G4HadronElasticPhysics.cc.

223{
225}
static G4HadronicProcess * FindElasticProcess(const G4ParticleDefinition *)

Referenced by AddXSection(), G4HadronElasticPhysicsHP::ConstructProcess(), G4HadronElasticPhysicsLEND::ConstructProcess(), GetElasticModel(), and GetNeutronProcess().

◆ GetNeutronModel()

G4HadronElastic * G4HadronElasticPhysics::GetNeutronModel ( ) const

Definition at line 252 of file G4HadronElasticPhysics.cc.

253{
255}
G4HadronElastic * GetElasticModel(const G4ParticleDefinition *part) const
static G4Neutron * Neutron()
Definition G4Neutron.cc:101

◆ GetNeutronProcess()

G4HadronicProcess * G4HadronElasticPhysics::GetNeutronProcess ( ) const

Definition at line 247 of file G4HadronElasticPhysics.cc.

248{
250}

◆ operator=()

G4HadronElasticPhysics & G4HadronElasticPhysics::operator= ( const G4HadronElasticPhysics & right)
delete

The documentation for this class was generated from the following files: