G4QDiscProcessMixer Class Reference

#include <G4QDiscProcessMixer.hh>

Inheritance diagram for G4QDiscProcessMixer:

G4VDiscreteProcess G4VProcess

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)
G4VParticleChangePostStepDoIt (const G4Track &aTrack, const G4Step &aStep)
void AddDiscreteProcess (G4VDiscreteProcess *DP, G4double MaxE)

Detailed Description

Definition at line 53 of file G4QDiscProcessMixer.hh.


Constructor & Destructor Documentation

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 }


Member Function Documentation

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 }


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:53:05 2013 for Geant4 by  doxygen 1.4.7