#include <G4QDiscProcessMixer.hh>
Inheritance diagram for G4QDiscProcessMixer:
Public Member Functions | |
G4QDiscProcessMixer (const G4String &processName="Mixed Discrete Process", const G4ParticleDefinition *proj=G4Gamma::Gamma(), G4ProcessType pType=fHadronic) | |
~G4QDiscProcessMixer () | |
G4bool | IsApplicable (const G4ParticleDefinition &particle) |
G4double | PostStepGetPhysicalInteractionLength (const G4Track &track, G4double previousStepSize, G4ForceCondition *condition) |
G4double | GetMeanFreePath (const G4Track &aTrack, G4double previousStepSize, G4ForceCondition *condition) |
G4VParticleChange * | PostStepDoIt (const G4Track &aTrack, const G4Step &aStep) |
void | AddDiscreteProcess (G4VDiscreteProcess *DP, G4double MaxE) |
Definition at line 53 of file G4QDiscProcessMixer.hh.
G4QDiscProcessMixer::G4QDiscProcessMixer | ( | const G4String & | processName = "Mixed Discrete Process" , |
|
const G4ParticleDefinition * | proj = G4Gamma::Gamma() , |
|||
G4ProcessType | pType = fHadronic | |||
) |
Definition at line 45 of file G4QDiscProcessMixer.cc.
References G4cout, G4endl, G4HadronicDeprecate, G4VProcess::GetProcessName(), and G4VProcess::verboseLevel.
00047 : 00048 G4VDiscreteProcess(name, pType), DPParticle(particle) 00049 { 00050 G4HadronicDeprecate("G4QDiscProcessMixer"); 00051 00052 #ifdef debug 00053 G4cout<<"G4QDiscProcessMixer::Constructor is called processName="<<name<<G4endl; 00054 #endif 00055 if (verboseLevel>0) G4cout<<GetProcessName()<<" process is created "<<G4endl; 00056 }
G4QDiscProcessMixer::~G4QDiscProcessMixer | ( | ) |
Definition at line 59 of file G4QDiscProcessMixer.cc.
00060 { 00061 // Now the responsibility of deleting is deligated to the user, who created them 00062 //for_each(theDPVector.begin(), theDPVector.end(), DeleteDiscreteProcess()); 00063 }
void G4QDiscProcessMixer::AddDiscreteProcess | ( | G4VDiscreteProcess * | DP, | |
G4double | MaxE | |||
) |
Definition at line 65 of file G4QDiscProcessMixer.cc.
References FatalException, G4endl, and G4Exception().
Referenced by G4QProtonBuilder::Build(), G4QNeutronHPBuilder::Build(), G4QNeutronBuilder::Build(), and G4QInelasticCHIPS_HPBuilder::Build().
00066 { 00067 static const G4double maxEn = 1.E8*megaelectronvolt; // Conditional INF 00068 if(!theDPVector.size()) // The first process in the DiscreteProcessVector (MaxE=INF) 00069 { 00070 std::pair<G4VDiscreteProcess*, G4double>* QDiscProc = 00071 new std::pair<G4VDiscreteProcess*, G4double>(DP, maxEn); 00072 theDPVector.push_back( QDiscProc ); 00073 } 00074 else 00075 { 00076 if(ME < theDPVector[theDPVector.size()-1]->second) 00077 { 00078 std::pair<G4VDiscreteProcess*, G4double>* QDiscProc = 00079 new std::pair<G4VDiscreteProcess*, G4double>(DP, ME); 00080 theDPVector.push_back( QDiscProc ); 00081 } 00082 else // Wrong Max Energy Order for the new process in the sequence of processes 00083 { 00084 // G4cerr<<"G4QDiscProcessMixer::AddDiscreteProcess:LastMaxE("<<theDPVector.size()-1 00085 // <<")="<<theDPVector[theDPVector.size()-1]->second<<" <= MaxE="<<ME<<G4endl; 00086 // G4Exception("G4QDiscProcessMixer::AddDiscreteProcess: Wrong Max Energy Order"); 00087 G4ExceptionDescription ed; 00088 ed << " LastMaxE(" << theDPVector.size()-1 << ")=" 00089 << theDPVector[theDPVector.size()-1]->second << " <= MaxE=" << ME << G4endl; 00090 G4Exception("G4QDiscProcessMixer::AddDiscreteProcess()", "HAD_CHPS_0000", 00091 FatalException, ed); 00092 } 00093 } 00094 }
G4double G4QDiscProcessMixer::GetMeanFreePath | ( | const G4Track & | aTrack, | |
G4double | previousStepSize, | |||
G4ForceCondition * | condition | |||
) | [virtual] |
Implements G4VDiscreteProcess.
Definition at line 125 of file G4QDiscProcessMixer.cc.
References DBL_MAX.
00126 { 00127 return DBL_MAX; 00128 }
G4bool G4QDiscProcessMixer::IsApplicable | ( | const G4ParticleDefinition & | particle | ) | [virtual] |
Reimplemented from G4VProcess.
Definition at line 96 of file G4QDiscProcessMixer.cc.
References G4cout, G4endl, and G4ParticleDefinition::GetParticleName().
00097 { 00098 #ifdef debug 00099 G4cout<<"G4QDiscProcessMixer::IsApplicable: part="<<particle.GetParticleName()<<" = " 00100 <<DPParticle->GetParticleName()<<G4endl; 00101 #endif 00102 if(particle == *DPParticle) return true; 00103 return false; 00104 }
G4VParticleChange * G4QDiscProcessMixer::PostStepDoIt | ( | const G4Track & | aTrack, | |
const G4Step & | aStep | |||
) | [virtual] |
Reimplemented from G4VDiscreteProcess.
Definition at line 130 of file G4QDiscProcessMixer.cc.
References G4cout, G4endl, G4Track::GetDynamicParticle(), G4DynamicParticle::GetKineticEnergy(), and G4VDiscreteProcess::PostStepDoIt().
00132 { 00133 G4double kEn=Track.GetDynamicParticle()->GetKineticEnergy(); // Projectile kinetic energy 00134 G4int maxDP=theDPVector.size(); 00135 if(maxDP) for(G4int i=maxDP-1; i>-1; i--) if(kEn < theDPVector[i]->second) 00136 { 00137 #ifdef debug 00138 G4cout<<"G4QDPMix::PSDoIt: i="<<i<<",kEn="<<kEn<<" < "<<theDPVector[i]->second<<G4endl; 00139 #endif 00140 //EnMomConservation= theDPVector[i]->first->GetEnegryMomentumConservation(); 00141 //nOfNeutrons = theDPVector[i]->first->GetNumberOfNeutronsInTarget(); 00142 return theDPVector[i]->first->PostStepDoIt(Track, Step); 00143 } 00144 return G4VDiscreteProcess::PostStepDoIt(Track, Step); 00145 }
G4double G4QDiscProcessMixer::PostStepGetPhysicalInteractionLength | ( | const G4Track & | track, | |
G4double | previousStepSize, | |||
G4ForceCondition * | condition | |||
) | [virtual] |
Reimplemented from G4VDiscreteProcess.
Definition at line 106 of file G4QDiscProcessMixer.cc.
References DBL_MAX, G4cout, G4endl, G4Track::GetDynamicParticle(), and G4DynamicParticle::GetKineticEnergy().
00109 { 00110 G4double kEn=Track.GetDynamicParticle()->GetKineticEnergy(); // Projectile kinetic energy 00111 G4int maxDP=theDPVector.size(); 00112 if(maxDP) for(G4int i=maxDP-1; i>-1; i--) if(kEn < theDPVector[i]->second) 00113 { 00114 #ifdef debug 00115 G4cout<<"G4QDPMix::PSGetPIL:"<<i<<",kEn="<<kEn<<" < "<<theDPVector[i]->second<<", PIL=" 00116 <<theDPVector[i]->first->PostStepGetPhysicalInteractionLength(Track,PrevStSize,F) 00117 <<G4endl; 00118 #endif 00119 return theDPVector[i]->first->PostStepGetPhysicalInteractionLength(Track,PrevStSize,F); 00120 } 00121 return DBL_MAX; 00122 }