47 #include "G4ForceCondition.hh"    48 #include "G4GPILSelection.hh"    49 #include "G4SteppingControl.hh"    60   G4cout<<
"G4SteppingManager::GetProcessNumber: is called track="    67     G4cerr << 
"ERROR - G4SteppingManager::GetProcessNumber()" << G4endl
    68            << 
"        ProcessManager is NULL for particle = "    69            << 
fTrack->GetDefinition()->GetParticleName() << 
", PDG_code = "    71     G4Exception(
"G4SteppingManager::GetProcessNumber()", 
"Tracking0011",
    81    G4cout << 
"G4SteppingManager::GetProcessNumber: #ofAtRest="    90    G4cout << 
"G4SteppingManager::GetProcessNumber:#ofAlongStp="    99    G4cout << 
"G4SteppingManager::GetProcessNumber: #ofPostStep="   107      G4cerr << 
"ERROR - G4SteppingManager::GetProcessNumber()" << G4endl
   109             << 
" ; is smaller then one of MAXofAtRestLoops= "   113      G4Exception(
"G4SteppingManager::GetProcessNumber()",
   115                  "The array size is smaller than the actual No of processes.");
   168        (*fSelectedPostStepDoItVector)[np] = InActivated;
   182      case ExclusivelyForced:
   183          (*fSelectedPostStepDoItVector)[np] = ExclusivelyForced;
   185          fStep->GetPostStepPoint()
   190          G4Exception(
"G4SteppingManager::DefinePhysicalStepLength()", 
"Tracking1001", 
FatalException, 
"This feature no more supported");
   194          (*fSelectedPostStepDoItVector)[np] = Forced;
   197          (*fSelectedPostStepDoItVector)[np] = StronglyForced;
   200          (*fSelectedPostStepDoItVector)[np] = InActivated;
   208          (*fSelectedPostStepDoItVector)[nrest] = InActivated; 
   217          fStep->GetPostStepPoint()
   245                      safetyProposedToAndByProcess,
   258           fStep->GetPostStepPoint()
   263        if(kp == MAXofAlongStepLoops-1)
   288    G4double lifeTime, shortestLifeTime;
   293    unsigned int NofInactiveProc=0;
   297        (*fSelectedAtRestDoItVector)[ri] = InActivated;
   308        (*fSelectedAtRestDoItVector)[ri] = Forced;
   311        (*fSelectedAtRestDoItVector)[ri] = InActivated;
   312        if(lifeTime < shortestLifeTime ){
   313           shortestLifeTime = lifeTime;
   323    if(NofInactiveProc==MAXofAtRestLoops){ 
   324      G4Exception(
"G4SteppingManager::InvokeAtRestDoItProcs()", 
"Tracking0013",
   328    fStep->SetStepLength( 0. );  
   329    fTrack->SetStepLength( 0. );
   344        fStep->GetPostStepPoint()
   351        G4Track* tempSecondaryTrack;
   356        for(
G4int DSecLoop=0 ; DSecLoop< num2ndaries; DSecLoop++){
   359          if(tempSecondaryTrack->GetDefinition()->GetApplyCutsFlag())
   363          tempSecondaryTrack->SetParentID( 
fTrack->GetTrackID() );
   370      if(tempSecondaryTrack->GetKineticEnergy() <= 
DBL_MIN){
   371        G4ProcessManager* pm = tempSecondaryTrack->GetDefinition()->GetProcessManager();
   372            if(!pm && tempSecondaryTrack->GetDefinition()->IsGeneralIon())
   375          tempSecondaryTrack->SetTrackStatus( fStopButAlive );
   379          delete tempSecondaryTrack;
   393    fStep->UpdateTrack();
   395    fTrack->SetTrackStatus( fStopAndKill );
   427      G4Track* tempSecondaryTrack;
   432      for(
G4int DSecLoop=0 ; DSecLoop< num2ndaries; DSecLoop++){
   435          if(tempSecondaryTrack->GetDefinition()->GetApplyCutsFlag())
   439          tempSecondaryTrack->SetParentID( 
fTrack->GetTrackID() );
   446      if(tempSecondaryTrack->GetKineticEnergy() <= 
DBL_MIN){
   447        G4ProcessManager* pm = tempSecondaryTrack->GetDefinition()->GetProcessManager();
   448            if(!pm && tempSecondaryTrack->GetDefinition()->IsGeneralIon())
   451          tempSecondaryTrack->SetTrackStatus( fStopButAlive );
   455          delete tempSecondaryTrack;
   471    fStep->UpdateTrack();
   472    G4TrackStatus fNewStatus = 
fTrack->GetTrackStatus();
   474    if ( fNewStatus == fAlive && 
fTrack->GetKineticEnergy() <= 
DBL_MIN ) {
   476      else                   fNewStatus = fStopAndKill;
   477      fTrack->SetTrackStatus( fNewStatus );
   493      G4int Cond = (*fSelectedPostStepDoItVector)[MAXofPostStepLoops-np-1];
   494      if(Cond != InActivated){
   495        if( ((Cond == NotForced) && (
fStepStatus == fPostStepDoItProc)) ||
   496        ((Cond == Forced) && (
fStepStatus != fExclusivelyForcedProc)) ||
   498        ((Cond == ExclusivelyForced) && (
fStepStatus == fExclusivelyForcedProc)) || 
   499        ((Cond == StronglyForced) ) 
   503          if ((np==0) && (
fTrack->GetNextVolume() == 0)){
   512      if(
fTrack->GetTrackStatus() == fStopAndKill) {
   514      G4int Cond2 = (*fSelectedPostStepDoItVector)[MAXofPostStepLoops-np1-1];
   515      if (Cond2 == StronglyForced) {
   539          fStep->UpdateTrack();
   545          G4Track* tempSecondaryTrack;
   550          for(
G4int DSecLoop=0 ; DSecLoop< num2ndaries; DSecLoop++){
   553             if(tempSecondaryTrack->GetDefinition()->GetApplyCutsFlag())
   557             tempSecondaryTrack->SetParentID( 
fTrack->GetTrackID() );
   564         if(tempSecondaryTrack->GetKineticEnergy() <= 
DBL_MIN){
   565           G4ProcessManager* pm = tempSecondaryTrack->GetDefinition()->GetProcessManager();
   566               if(!pm && tempSecondaryTrack->GetDefinition()->IsGeneralIon())
   569         tempSecondaryTrack->SetTrackStatus( fStopButAlive );
   573         delete tempSecondaryTrack;
   594   G4bool tBelowCutEnergyAndSafety = 
false;
   597   if (tPtclIdx<0)  { 
return; }
   604   if( aSecondary->GetKineticEnergy()<tProdThreshold )
   606     tBelowCutEnergyAndSafety = 
true;
   607     if(std::abs(aSecondary->GetDynamicParticle()->GetCharge()) > 
DBL_MIN)
   611                  aSecondary->GetKineticEnergy(),
   617   if( tBelowCutEnergyAndSafety )
   619     if( !(aSecondary->IsGoodForTracking()) )
   626       fStep->AddTotalEnergyDeposit(
   627       aSecondary->GetKineticEnergy() );
   628       aSecondary->SetKineticEnergy(0.0);
 G4double CalculateSafety()
 
static G4LossTableManager * Instance()
 
static G4int GetIndex(const G4String &name)
 
G4ProcessVector * fPostStepGetPhysIntVector
 
G4ProcessVector * GetAtRestProcessVector(G4ProcessVectorTypeIndex typ=typeGPIL) const
 
virtual void PostStepDoItOneByOne()=0
 
G4ProcessVector * fPostStepDoItVector
 
G4VSteppingVerbose * fVerbose
 
void InvokeAlongStepDoItProcs()
 
G4ProcessManager * GetProcessManager() const
 
G4ParticleDefinition * GetGenericIon() const
 
G4ProcessVector * fAlongStepGetPhysIntVector
 
G4SelectedPostStepDoItVector * fSelectedPostStepDoItVector
 
const std::vector< G4double > * GetEnergyCutsVector(size_t pcIdx) const
 
G4ProcessVector * GetPostStepProcessVector(G4ProcessVectorTypeIndex typ=typeGPIL) const
 
size_t MAXofAlongStepLoops
 
size_t fAtRestDoItProcTriggered
 
G4VProcess * fCurrentProcess
 
G4double AtRestGPIL(const G4Track &track, G4ForceCondition *condition)
 
G4double fPreviousStepSize
 
void DefinePhysicalStepLength()
 
virtual void DPSLAlongStep()=0
 
G4GLOB_DLL std::ostream G4cout
 
virtual void DPSLPostStep()=0
 
size_t fPostStepDoItProcTriggered
 
G4int fN2ndariesPostStepDoIt
 
void ApplyProductionCut(G4Track *)
 
G4int fN2ndariesAlongStepDoIt
 
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
 
G4ProcessVector * GetAlongStepProcessVector(G4ProcessVectorTypeIndex typ=typeGPIL) const
 
static G4ProductionCutsTable * GetProductionCutsTable()
 
static G4ParticleTable * GetParticleTable()
 
G4ProcessVector * fAlongStepDoItVector
 
void InvokePostStepDoItProcs()
 
G4TrackVector * fSecondary
 
size_t MAXofPostStepLoops
 
virtual G4VParticleChange * AlongStepDoIt(const G4Track &track, const G4Step &stepData)=0
 
virtual void AlongStepDoItOneByOne()=0
 
G4int GetCoupleIndex(const G4MaterialCutsCouple *aCouple) const
 
G4ForceCondition fCondition
 
G4int fN2ndariesAtRestDoIt
 
G4GPILSelection fGPILSelection
 
virtual G4VParticleChange * PostStepDoIt(const G4Track &track, const G4Step &stepData)=0
 
G4ProcessVector * fAtRestGetPhysIntVector
 
G4VParticleChange * fParticleChange
 
G4double GetRange(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
 
virtual void DPSLStarted()=0
 
G4SelectedAtRestDoItVector * fSelectedAtRestDoItVector
 
G4ProcessVector * fAtRestDoItVector
 
static const size_t SizeOfSelectedDoItVector
 
G4GLOB_DLL std::ostream G4cerr
 
void InvokeAtRestDoItProcs()
 
virtual G4VParticleChange * AtRestDoIt(const G4Track &track, const G4Step &stepData)=0
 
G4StepPoint * fPreStepPoint