40 : theHadronicInteractionCounter(0)
48 theHadronicInteractionCounter = right.theHadronicInteractionCounter;
49 theHadronicInteraction = right.theHadronicInteraction;
56 theHadronicInteractionCounter = right.theHadronicInteractionCounter;
57 theHadronicInteraction = right.theHadronicInteraction;
65 if(0 < theHadronicInteractionCounter) {
66 for(
G4int i=0; i<theHadronicInteractionCounter; ++i) {
67 if(a == theHadronicInteraction[i]) {
return; }
70 theHadronicInteraction.push_back(a);
71 ++theHadronicInteractionCounter;
81 if(0 == theHadronicInteractionCounter) {
83 "GetHadronicInteraction: NO MODELS STORED");
92 G4int cou = 0, memory = 0, memor2 = 0;
93 G4double emi1 = 0.0, ema1 = 0.0, emi2 = 0.0, ema2 = 0.0;
95 for (
G4int i = 0; i<theHadronicInteractionCounter; ++i) {
96 if ( theHadronicInteraction[i]->IsApplicable( aHadProjectile, aTargetNucleus ) ) {
97 G4double low = theHadronicInteraction[i]->GetMinEnergy( aMaterial, anElement );
101 G4double high = theHadronicInteraction[i]->GetMaxEnergy( aMaterial, anElement );
102 if (low <= kineticEnergy && high > kineticEnergy) {
118 G4cout<<
"G4EnergyRangeManager:GetHadronicInteraction: counter="
119 <<theHadronicInteractionCounter<<
", Ek="
120 <<kineticEnergy<<
", Material = "<<aMaterial->
GetName()
123 for(
G4int j=0; j<theHadronicInteractionCounter; ++j)
130 "GetHadronicInteraction: No Model found");
136 if( (emi2<=emi1 && ema2>=ema1) || (emi2>=emi1 && ema2<=ema1) )
138 G4cout<<
"G4EnergyRangeManager:GetHadronicInteraction: counter="
139 <<theHadronicInteractionCounter<<
", Ek="
140 <<kineticEnergy<<
", Material = "<<aMaterial->
GetName()
143 for(
G4int j=0; j<theHadronicInteractionCounter; ++j)
150 "GetHadronicInteraction: Energy ranges of two models fully overlapping");
155 if( (ema1-kineticEnergy) < rand*(ema1-emi2) ) {
161 if( (ema2-kineticEnergy) < rand*(ema2-emi1) ) {
170 "GetHadronicInteraction: More than two competing models in this energy range");
173 return theHadronicInteraction[mem];
182 if(0 == theHadronicInteractionCounter) {
184 "GetHadronicInteraction: NO MODELS STORED");
186 G4int cou = 0, memory = 0, memor2 = 0;
187 G4double emi1 = 0.0, ema1 = 0.0, emi2 = 0.0, ema2 = 0.0;
189 for (
G4int i = 0; i<theHadronicInteractionCounter; ++i) {
190 G4double low = theHadronicInteraction[i]->GetMinEnergy( aMaterial, anElement );
194 G4double high = theHadronicInteraction[i]->GetMaxEnergy( aMaterial, anElement );
195 if (low <= kineticEnergy && high > kineticEnergy) {
210 G4cout<<
"G4EnergyRangeManager:GetHadronicInteraction: counter="
211 <<theHadronicInteractionCounter<<
", Ek="
212 <<kineticEnergy<<
", Material = "<<aMaterial->
GetName()
215 for(
G4int j=0; j<theHadronicInteractionCounter; ++j)
222 "GetHadronicInteraction: No Model found");
228 if( (emi2<=emi1 && ema2>=ema1) || (emi2>=emi1 && ema2<=ema1) )
230 G4cout<<
"G4EnergyRangeManager:GetHadronicInteraction: counter="
231 <<theHadronicInteractionCounter<<
", Ek="
232 <<kineticEnergy<<
", Material = "<<aMaterial->
GetName()
235 for(
G4int j=0; j<theHadronicInteractionCounter; ++j)
242 "GetHadronicInteraction: Energy ranges of two models fully overlapping");
247 if( (ema1-kineticEnergy) < rand*(ema1-emi2) ) {
253 if( (ema2-kineticEnergy) < rand*(ema2-emi1) ) {
262 "GetHadronicInteraction: More than two competing models in this energy range");
265 return theHadronicInteraction[mem];
268 std::vector<G4HadronicInteraction*>&
271 return theHadronicInteraction;
278 for (
G4int i = 0 ; i < theHadronicInteractionCounter; i++) {
279 G4cout <<
" HadronicModel " << i <<
":"
280 << theHadronicInteraction[i]->GetModelName() <<
G4endl;
282 G4cout <<
" Minimum Energy "
283 << theHadronicInteraction[i]->GetMinEnergy()/
GeV <<
" [GeV], "
285 << theHadronicInteraction[i]->GetMaxEnergy()/
GeV <<
" [GeV]"
294 for ( std::vector<G4HadronicInteraction*>::iterator
295 it = theHadronicInteraction.begin() ; it != theHadronicInteraction.end() ; it++ ) {
296 (*it)->BuildPhysicsTable( aParticleType );
G4double GetMinEnergy() const
void RegisterMe(G4HadronicInteraction *a)
G4double GetMaxEnergy() const
void Dump(G4int verbose=0)
G4HadronicInteraction * GetHadronicInteraction(const G4HadProjectile &aHadProjectile, G4Nucleus &aTargetNucleus, const G4Material *aMaterial, const G4Element *anElement) const
const G4String & GetName() const
std::vector< G4HadronicInteraction * > & GetHadronicInteractionList()
G4GLOB_DLL std::ostream G4cout
const G4ParticleDefinition * GetDefinition() const
G4EnergyRangeManager & operator=(const G4EnergyRangeManager &right)
G4double GetKineticEnergy() const
void BuildPhysicsTable(const G4ParticleDefinition &)
static constexpr double GeV
const G4String & GetName() const
G4int GetBaryonNumber() const