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

#include <G4HadronHElasticPhysics.hh>

+ Inheritance diagram for G4HadronHElasticPhysics:

Public Member Functions

 G4HadronHElasticPhysics (G4int ver=1, G4bool diffraction=false)
 
virtual ~G4HadronHElasticPhysics ()
 
void ConstructProcess () override
 
void SetDiffraction (G4bool val)
 
 G4HadronHElasticPhysics (G4HadronHElasticPhysics &)=delete
 
G4HadronHElasticPhysicsoperator= (const G4HadronHElasticPhysics &right)=delete
 
- Public Member Functions inherited from G4HadronElasticPhysics
 G4HadronElasticPhysics (G4int ver=1, const G4String &nam="hElasticWEL_CHIPS_XS")
 
 ~G4HadronElasticPhysics () override=default
 
void ConstructParticle () 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
 

Public Attributes

G4bool fDiffraction
 

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 43 of file G4HadronHElasticPhysics.hh.

Constructor & Destructor Documentation

◆ G4HadronHElasticPhysics() [1/2]

G4HadronHElasticPhysics::G4HadronHElasticPhysics ( G4int ver = 1,
G4bool diffraction = false )

Definition at line 84 of file G4HadronHElasticPhysics.cc.

85 : G4HadronElasticPhysics(ver, "hElastic_BEST"),
86 fDiffraction(diffraction)
87{
88 if (ver > 1) {
89 G4cout << "### G4HadronHElasticPhysics: " << GetPhysicsName()
90 << " low-mass diffraction: " << fDiffraction << G4endl;
91 }
92}
#define G4endl
Definition G4ios.hh:67
G4GLOB_DLL std::ostream G4cout
G4HadronElasticPhysics(G4int ver=1, const G4String &nam="hElasticWEL_CHIPS_XS")
const G4String & GetPhysicsName() const

◆ ~G4HadronHElasticPhysics()

G4HadronHElasticPhysics::~G4HadronHElasticPhysics ( )
virtual

Definition at line 94 of file G4HadronHElasticPhysics.cc.

94{}

◆ G4HadronHElasticPhysics() [2/2]

G4HadronHElasticPhysics::G4HadronHElasticPhysics ( G4HadronHElasticPhysics & )
delete

Member Function Documentation

◆ ConstructProcess()

void G4HadronHElasticPhysics::ConstructProcess ( )
overridevirtual

Reimplemented from G4HadronElasticPhysics.

Definition at line 96 of file G4HadronHElasticPhysics.cc.

96 {
98 G4bool useFactorXS = param->ApplyFactorXS();
101
102 const G4double elimitDiffuse = 10.0;
103 const G4double elimitAntiNuc = 100.0*MeV;
104 const G4double delta = 0.1*MeV;
105 G4double emax = std::max(param->GetMaxEnergy(), elimitAntiNuc+delta);
106 if (param->GetVerboseLevel() > 1 ) {
107 G4cout << "### HadronHElasticPhysics::ConstructProcess: lower energy limit for DiffuseElastic : "
108 << elimitDiffuse/GeV << " GeV" << G4endl
109 << " transition energy for anti-nuclei : "
110 << elimitAntiNuc/GeV << " GeV" << G4endl;
111 }
112 G4HadronElastic* lhep0 = new G4HadronElastic();
113 G4HadronElastic* lhep1 = new G4HadronElastic();
114 G4HadronElastic* lhep2 = new G4HadronElastic();
115 lhep0->SetMaxEnergy(emax);
116 lhep1->SetMaxEnergy(elimitDiffuse+delta);
117 lhep2->SetMaxEnergy(elimitAntiNuc+delta);
118
120 anuc->SetMinEnergy( elimitAntiNuc );
121 anuc->SetMaxEnergy(emax);
122
123 auto anucxs = G4HadProcesses::ElasticXS("AntiAGlauber");
124 auto xsNN = G4HadProcesses::ElasticXS("Glauber-Gribov Nucl-nucl");
125
126 G4LMsdGenerator* diffGen = nullptr;
127 G4DiffElasticRatio* diffRatio = nullptr;
128 if( fDiffraction ) {
129 diffGen = new G4LMsdGenerator("LMsdDiffraction");
130 diffRatio = new G4DiffElasticRatio();
131 }
132
133 // Use Chips elastic model only for the hydrogen element and above an energy threshold
135 chipsH->SetMinEnergy( elimitDiffuse );
136 const G4ElementTable* theElementTable = G4Element::GetElementTable();
137 for ( size_t i_ele = 0; i_ele < theElementTable->size(); i_ele++ ) {
138 G4Element* element = (*theElementTable)[ i_ele ];
139 if ( element->GetZ() > 1.0 ) chipsH->DeActivateFor( element );
140 }
141
142 // p
145 hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
146 G4DiffuseElastic* protonDiffuseElastic = new G4DiffuseElastic();
147 protonDiffuseElastic->SetMinEnergy( elimitDiffuse );
148 hel->RegisterMe( chipsH ); // Use Chips only for Hydrogen element
149 hel->RegisterMe( protonDiffuseElastic );
150 hel->RegisterMe( lhep1 );
151 if( fDiffraction) hel->SetDiffraction(diffGen, diffRatio);
152 if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorNucleonElastic() );
153 ph->RegisterProcess(hel, particle);
154
155 // n
156 particle = G4Neutron::Neutron();
157 hel = new G4HadronElasticProcess();
158 hel->AddDataSet(new G4NeutronElasticXS());
159 G4DiffuseElastic* neutronDiffuseElastic = new G4DiffuseElastic();
160 neutronDiffuseElastic->SetMinEnergy( elimitDiffuse );
161 hel->RegisterMe( chipsH ); // Use Chips only for Hydrogen element
162 hel->RegisterMe( neutronDiffuseElastic );
163 hel->RegisterMe( lhep1 );
164 if( fDiffraction) hel->SetDiffraction(diffGen, diffRatio);
165 if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorNucleonElastic() );
166 ph->RegisterProcess(hel, particle);
167
168 // pi+
169 particle = G4PionPlus::PionPlus();
170 hel = new G4HadronElasticProcess();
171 hel->AddDataSet(new G4BGGPionElasticXS(particle));
172 G4DiffuseElastic* dElastic = new G4DiffuseElastic();
173 dElastic->SetMinEnergy( elimitDiffuse );
174 hel->RegisterMe( chipsH ); // Use Chips only for Hydrogen element
175 hel->RegisterMe( dElastic );
176 hel->RegisterMe( lhep1 );
177 if( fDiffraction) hel->SetDiffraction(diffGen, diffRatio);
178 if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorPionElastic() );
179 ph->RegisterProcess(hel, particle);
180
181 // pi-
182 particle = G4PionMinus::PionMinus();
183 hel = new G4HadronElasticProcess();
184 hel->AddDataSet(new G4BGGPionElasticXS(particle));
185 dElastic = new G4DiffuseElastic();
186 dElastic->SetMinEnergy( elimitDiffuse );
187 hel->RegisterMe( chipsH ); // Use Chips only for Hydrogen element
188 hel->RegisterMe( dElastic );
189 hel->RegisterMe( lhep1 );
190 if( fDiffraction) hel->SetDiffraction(diffGen, diffRatio);
191 if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorPionElastic() );
192 ph->RegisterProcess(hel, particle);
193
194 // kaons
196
197 // d, t, He3, alpha
198 for( auto & pdg : G4HadParticles::GetLightIons() ) {
199 particle = table->FindParticle( pdg );
200 if ( particle == nullptr ) { continue; }
201
202 hel = new G4HadronElasticProcess();
203 hel->AddDataSet(xsNN);
204 hel->RegisterMe(lhep0);
205 if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorHadronElastic() );
206 ph->RegisterProcess(hel, particle);
207 }
208
209 // high energy particles
210 if( emax > param->EnergyThresholdForHeavyHadrons() ) {
211
212 // pbar, nbar, anti light ions
213 for( auto & pdg : G4HadParticles::GetLightAntiIons() ) {
214 particle = table->FindParticle( pdg );
215 if ( particle == nullptr ) { continue; }
216
217 hel = new G4HadronElasticProcess();
218 hel->RegisterMe(lhep2);
219 hel->RegisterMe(anuc);
220 hel->AddDataSet(anucxs);
221 if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorHadronElastic() );
222 ph->RegisterProcess(hel, particle);
223 }
224
225 // hyperons
228
229 // b-, c- baryons and mesons
230 if( G4HadronicParameters::Instance()->EnableBCParticles() ) {
232 }
233 }
234}
std::vector< G4Element * > G4ElementTable
double G4double
Definition G4Types.hh:83
bool G4bool
Definition G4Types.hh:86
static G4ElementTable * GetElementTable()
Definition G4Element.cc:389
G4double GetZ() const
Definition G4Element.hh:119
static const std::vector< G4int > & GetBCHadrons()
static const std::vector< G4int > & GetAntiHyperons()
static const std::vector< G4int > & GetLightAntiIons()
static const std::vector< G4int > & GetLightIons()
static const std::vector< G4int > & GetKaons()
static const std::vector< G4int > & GetHyperons()
static G4CrossSectionElastic * ElasticXS(const G4String &componentName)
void SetDiffraction(G4HadronicInteraction *, G4VCrossSectionRatio *)
static void BuildElastic(const std::vector< G4int > &particleList)
void DeActivateFor(const G4Material *aMaterial)
void SetMinEnergy(G4double anEnergy)
void SetMaxEnergy(const G4double anEnergy)
G4double XSFactorPionElastic() const
static G4HadronicParameters * Instance()
G4double XSFactorNucleonElastic() const
G4double EnergyThresholdForHeavyHadrons() const
G4double XSFactorHadronElastic() const
void AddDataSet(G4VCrossSectionDataSet *aDataSet)
void MultiplyCrossSectionBy(G4double factor)
void RegisterMe(G4HadronicInteraction *a)
static G4Neutron * Neutron()
Definition G4Neutron.cc:101
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
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

◆ operator=()

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

◆ SetDiffraction()

void G4HadronHElasticPhysics::SetDiffraction ( G4bool val)
inline

Definition at line 53 of file G4HadronHElasticPhysics.hh.

53{ fDiffraction = val; };

Member Data Documentation

◆ fDiffraction

G4bool G4HadronHElasticPhysics::fDiffraction

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