61 using namespace G4MemStat;
 
   70   for(
G4int DSecLoop = 0; DSecLoop < fpParticleChange->GetNumberOfSecondaries();
 
   73     tempSecondaryTrack = fpParticleChange->GetSecondary(DSecLoop);
 
   77       ApplyProductionCut(tempSecondaryTrack);
 
   81     tempSecondaryTrack->
SetParentID(fpTrack->GetTrackID());
 
   94         fpSecondary->push_back( tempSecondaryTrack );
 
   95         fN2ndariesAtRestDoIt++;
 
   99         delete tempSecondaryTrack;
 
  104       fpSecondary->push_back( tempSecondaryTrack );
 
  122   if(fpVerbose) fpVerbose->DoItStarted();
 
  127   size_t initialSize = mainList->
size();
 
  131   for(
size_t i = 0 ; i < initialSize ; ++i)
 
  140       exceptionDescription << 
"No track was pop back the main track list.";
 
  154       fpTrackingManager->EndTracking(track);
 
  160 #if defined (DEBUG_MEM) && defined (DEBUG_MEM_DOIT) 
  161     MemStat mem_first, mem_second, mem_diff;
 
  165     Stepping(track, timeStep);
 
  167 #if defined (DEBUG_MEM) && defined (DEBUG_MEM_DOIT) 
  169     mem_diff = mem_intermediaire-mem_first;
 
  170     G4cout << 
"\t\t >> || MEM || In DoIT with track " 
  176 #if defined (DEBUG_MEM) && defined (DEBUG_MEM_DOIT) 
  178     mem_diff = mem_second-mem_first;
 
  179     G4cout << 
"\t >> || MEM || In DoIT with track " 
  181         << 
", diff is : " << mem_diff << 
G4endl;
 
  186   fpTrackContainer->MergeSecondariesWithMainList();
 
  187   fpTrackContainer->KillTracks(); 
 
  188   fLeadingTracks.Reset();
 
  217       fpTrackingManager->EndTracking(fpTrack);
 
  225         for (
size_t i = 0; i < fpSecondary->size(); ++i)
 
  227           delete (*fpSecondary)[i];
 
  229         fpSecondary->clear();
 
  232       fpTrackingManager->EndTracking(fpTrack);
 
  244   if (!fpSecondary || fpSecondary->empty())
 
  254   G4TrackVector::iterator secondaries_i = fpSecondary->begin();
 
  256   for (; secondaries_i != fpSecondary->end(); ++secondaries_i)
 
  258     G4Track* secondary = *secondaries_i;
 
  259     fpTrackContainer->_PushTrack(secondary);
 
  269   MemStat mem_first, mem_second, mem_diff;
 
  280   mem_diff = mem_intermediaire-mem_first;
 
  281   G4cout << 
"\t\t\t >> || MEM || After CleanProcessor " << track->
GetTrackID() << 
", diff is : " << mem_diff << 
G4endl;
 
  284   if(track == 0) 
return; 
 
  285   fTimeStep = timeStep;
 
  299   MemStat mem_first, mem_second, mem_diff;
 
  307     if(fpVerbose) fpVerbose->PreStepVerbose(fpTrack);
 
  313     exceptionDescription << 
"No process info found for particle :" 
  314                          << fpTrack->GetDefinition()->GetParticleName();
 
  316                 "ITStepProcessor0012",
 
  318                 exceptionDescription);
 
  327   if(fpProcessInfo->MAXofPostStepLoops == 0 &&
 
  328       fpProcessInfo->MAXofAlongStepLoops == 0
 
  329      && fpProcessInfo->MAXofAtRestLoops == 0)
 
  332     exceptionDescription << 
"No process was found for particle :" 
  333                          << fpTrack->GetDefinition()->GetParticleName();
 
  335                 "ITStepProcessorNoProcess",
 
  337                 exceptionDescription);
 
  349   if(fpVerbose) fpVerbose->NewStep();
 
  356   fpNavigator->SetNavigatorState(fpITrack->GetTrackingInfo()->GetNavigatorState());
 
  366   mem_diff = mem_intermediaire-mem_first;
 
  367   G4cout << 
"\t\t\t >> || MEM || G4ITStepProcessor::DoStepping || After dealing with navigator with " << fpTrack->GetTrackID() << 
", diff is : " << mem_diff << 
G4endl;
 
  372     if(fpProcessInfo->MAXofAtRestLoops > 0 && fpProcessInfo->fpAtRestDoItVector
 
  378       InvokeAtRestDoItProcs();
 
  380       fpStep->GetPostStepPoint()->SetStepStatus(fpState->fStepStatus);
 
  384       if(fpVerbose) fpVerbose->AtRestDoItInvoked();
 
  396       exceptionDescription << 
" !!! TrackID : " << fpTrack->GetTrackID()
 
  397                            << G4endl<< 
" !!! Track status : "<< fpTrack->GetTrackStatus() << G4endl
 
  398       << 
" !!! Particle Name : "<< fpTrack -> GetDefinition() -> GetParticleName() << G4endl
 
  399       << 
"No G4ITStepProcessor::fpITrack found" << 
G4endl;
 
  402                   "ITStepProcessor0013",
 
  404                   exceptionDescription);
 
  408     if(fpITrack->GetTrackingInfo()->IsLeadingStep() == 
false)
 
  414       fpStep->GetPostStepPoint()->SetProcessDefinedStep(fpTransportation);
 
  415       FindTransportationStep();
 
  420     mem_diff = mem_intermediaire-mem_first;
 
  421     G4cout << 
"\t\t\t >> || MEM || G4ITStepProcessor::DoStepping || After FindTransportationStep() with " << fpTrack->GetTrackID() << 
", diff is : " << mem_diff << 
G4endl;
 
  425     fpTrack->SetStepLength(fpState->fPhysicalStep);
 
  426     fpStep->SetStepLength(fpState->fPhysicalStep);
 
  428     G4double GeomStepLength = fpState->fPhysicalStep;
 
  431     fpStep->GetPostStepPoint()->SetStepStatus(fpState->fStepStatus);
 
  434     InvokeAlongStepDoItProcs();
 
  438     mem_diff = mem_intermediaire-mem_first;
 
  439     G4cout << 
"\t\t\t >> || MEM || G4ITStepProcessor::DoStepping || After InvokeAlongStepDoItProcs() with " << fpTrack->GetTrackID() << 
", diff is : " << mem_diff << 
G4endl;
 
  444     if(fpVerbose) fpVerbose->AlongStepDoItAllDone();
 
  451     fpState->fEndpointSafOrigin = fpPostStepPoint->GetPosition();
 
  453     fpState->fEndpointSafety =
 
  456     fpStep->GetPostStepPoint()->SetSafety(fpState->fEndpointSafety);
 
  458     if(
GetIT(fpTrack)->GetTrackingInfo()->IsLeadingStep())
 
  461       InvokePostStepDoItProcs();
 
  465       mem_diff = mem_intermediaire-mem_first;
 
  466       G4cout << 
"\t\t\t >> || MEM || G4ITStepProcessor::DoStepping || After InvokePostStepDoItProcs() with " << fpTrack->GetTrackID() << 
", diff is : " << mem_diff << 
G4endl;
 
  470     if(fpVerbose) fpVerbose->StepInfoForLeadingTrack();
 
  476       InvokeTransportationProc();
 
  477       fpStep->GetPostStepPoint()->SetProcessDefinedStep(fpTransportation);
 
  481       mem_diff = mem_intermediaire-mem_first;
 
  482       G4cout << 
"\t\t\t >> || MEM || G4ITStepProcessor::DoStepping || After InvokeTransportationProc() with " << fpTrack->GetTrackID() << 
", diff is : " << mem_diff << 
G4endl;
 
  488     if(fpVerbose) fpVerbose->PostStepDoItAllDone();
 
  492   fpNavigator->ResetNavigatorState();
 
  496   mem_diff = mem_intermediaire-mem_first;
 
  497   G4cout << 
"\t\t\t >> || MEM || G4ITStepProcessor::DoStepping || After fpNavigator->SetNavigatorState with " << fpTrack->GetTrackID() << 
", diff is : " << mem_diff << 
G4endl;
 
  505   fpTrack->AddTrackLength(fpStep->GetStepLength());
 
  506   fpTrack->IncrementCurrentStepNumber();
 
  514     if(fpVerbose) fpVerbose->PostStepVerbose(fpTrack);
 
  544   fpTrackingManager->AppendStep(fpTrack, fpStep);
 
  549   mem_diff = mem_intermediaire-mem_first;
 
  550   G4cout << 
"\t\t\t >> || MEM || End of DoStepping() with " << fpTrack->GetTrackID() << 
", diff is : " << mem_diff << 
G4endl;
 
  564   fpStep->SetStepLength(0.);  
 
  565   fpTrack->SetStepLength(0.);
 
  568       fpState->fSelectedAtRestDoItVector;
 
  571   for(
size_t np = 0; np < fpProcessInfo->MAXofAtRestLoops; np++)
 
  577     if(selectedAtRestDoItVector[fpProcessInfo->MAXofAtRestLoops - np - 1] != 
InActivated)
 
  580           (
G4VITProcess*) (*fpProcessInfo->fpAtRestDoItVector)[np];
 
  591       fpCurrentProcess->SetProcessState(fpTrackingInfo->GetProcessState(fpCurrentProcess
 
  593       fpParticleChange = fpCurrentProcess->AtRestDoIt(*fpTrack, *fpStep);
 
  594       fpCurrentProcess->ResetProcessState();
 
  597       fpStep->GetPostStepPoint()->SetProcessDefinedStep(fpCurrentProcess);
 
  600       fpParticleChange->UpdateStepForAtRest(fpStep);
 
  603       DealWithSecondaries(fN2ndariesAtRestDoIt);
 
  607       fpTrack->SetTrackStatus(fpParticleChange->GetTrackStatus());
 
  610       fpParticleChange->Clear();
 
  614   fpStep->UpdateTrack();
 
  633   MemStat mem_first, mem_second, mem_diff;
 
  648   for(
size_t ci = 0; ci < fpProcessInfo->MAXofAlongStepLoops; ci++)
 
  651         (
G4VITProcess*) (*fpProcessInfo->fpAlongStepDoItVector)[ci];
 
  652     if(fpCurrentProcess == 0) 
continue;
 
  655     fpCurrentProcess->SetProcessState(fpTrackingInfo->GetProcessState(fpCurrentProcess
 
  657     fpParticleChange = fpCurrentProcess->AlongStepDoIt(*fpTrack, *fpStep);
 
  661     mem_diff = mem_intermediaire-mem_first;
 
  662     G4cout << 
"\t\t\t >> || MEM || After calling AlongStepDoIt for " << fpCurrentProcess->GetProcessName() << 
" and track "<< fpTrack->GetTrackID() << 
", diff is : " << mem_diff << 
G4endl;
 
  666     fpCurrentProcess->ResetProcessState();
 
  669     fpParticleChange->UpdateStepForAlongStep(fpStep);
 
  673     if(fpVerbose) fpVerbose->AlongStepDoItOneByOne();
 
  677     DealWithSecondaries(fN2ndariesAlongStepDoIt);
 
  681     fpTrack->SetTrackStatus(fpParticleChange->GetTrackStatus());
 
  684     fpParticleChange->Clear();
 
  689   mem_diff = mem_intermediaire-mem_first;
 
  690   G4cout << 
"\t\t\t >> || MEM || After looping on processes with " << fpTrack->GetTrackID() << 
", diff is : " << mem_diff << 
G4endl;
 
  693   fpStep->UpdateTrack();
 
  697   if(fNewStatus == 
fAlive && fpTrack->GetKineticEnergy() <= 
DBL_MIN)
 
  700     if(fpProcessInfo->MAXofAtRestLoops>0) fNewStatus = 
fStopButAlive;
 
  702     fpTrack->SetTrackStatus( fNewStatus );
 
  715   size_t _MAXofPostStepLoops = fpProcessInfo->MAXofPostStepLoops;
 
  717       ->fSelectedPostStepDoItVector;
 
  721   for(
size_t np = 0; np < _MAXofPostStepLoops; np++)
 
  727     G4int Cond = selectedPostStepDoItVector[_MAXofPostStepLoops
 
  747       for(
size_t np1 = np + 1; np1 < _MAXofPostStepLoops; np1++)
 
  749         G4int Cond2 = selectedPostStepDoItVector[_MAXofPostStepLoops
 
  765   fpCurrentProcess = (
G4VITProcess*) (*fpProcessInfo->fpPostStepDoItVector)[np];
 
  767   fpCurrentProcess->SetProcessState(fpTrackingInfo->GetProcessState(fpCurrentProcess
 
  769   fpParticleChange = fpCurrentProcess->PostStepDoIt(*fpTrack, *fpStep);
 
  771   fpCurrentProcess->ResetProcessState();
 
  774   fpParticleChange->UpdateStepForPostStep(fpStep);
 
  778   if(fpVerbose) fpVerbose->PostStepDoItOneByOne();
 
  782   fpStep->UpdateTrack();
 
  785   fpStep->GetPostStepPoint()->SetSafety(CalculateSafety());
 
  788   DealWithSecondaries(fN2ndariesPostStepDoIt);
 
  791   fpTrack->SetTrackStatus(fpParticleChange->GetTrackStatus());
 
  794   fpParticleChange->Clear();
 
  805   double physicalStep(0.);
 
  807   fpTransportation = fpProcessInfo->fpTransportation;
 
  813     exceptionDescription << 
"No G4ITStepProcessor::fpTrack found";
 
  814     G4Exception(
"G4ITStepProcessor::FindTransportationStep",
 
  815                 "ITStepProcessor0013",
 
  817                 exceptionDescription);
 
  824     exceptionDescription << 
"No G4ITStepProcessor::fITrack";
 
  825     G4Exception(
"G4ITStepProcessor::FindTransportationStep",
 
  826                 "ITStepProcessor0014",
 
  828                 exceptionDescription);
 
  831   if(!(fpITrack->GetTrack()))
 
  834     exceptionDescription << 
"No G4ITStepProcessor::fITrack->GetTrack()";
 
  835     G4Exception(
"G4ITStepProcessor::FindTransportationStep",
 
  836                 "ITStepProcessor0015",
 
  838                 exceptionDescription);
 
  844     fpTransportation->SetProcessState(fpTrackingInfo->GetProcessState(fpTransportation
 
  846     fpTransportation->ComputeStep(*fpTrack, *fpStep, fTimeStep, physicalStep);
 
  849     fpTransportation->ResetProcessState();
 
  859   fpState->fPhysicalStep = physicalStep;
 
  866   size_t _MAXofPostStepLoops = fpProcessInfo->MAXofPostStepLoops;
 
  868       ->fSelectedPostStepDoItVector;
 
  872   for(
size_t np = 0; np < _MAXofPostStepLoops; np++)
 
  878     G4int Cond = selectedPostStepDoItVector[_MAXofPostStepLoops - np - 1];
 
  895       for(
size_t np1 = np + 1; np1 < _MAXofPostStepLoops; np1++)
 
  897         G4int Cond2 = selectedPostStepDoItVector[_MAXofPostStepLoops - np1 - 1];
 
  916   G4bool tBelowCutEnergyAndSafety = 
false;
 
  925       ->GetMaterialCutsCouple());
 
  930     tBelowCutEnergyAndSafety = 
true;
 
  936           fpPreStepPoint->GetMaterialCutsCouple());
 
  937       tBelowCutEnergyAndSafety = (currentRange < CalculateSafety() );
 
  941   if(tBelowCutEnergyAndSafety)
 
void SetTrackStatus(const G4TrackStatus aTrackStatus)
 
G4ParticleDefinition * GetDefinition() const 
 
const std::vector< G4double > * GetEnergyCutsVector(size_t pcIdx) const 
 
static G4LossTableManager * Instance()
 
static G4int GetIndex(const G4String &name)
 
std::ostringstream G4ExceptionDescription
 
const G4DynamicParticle * GetDynamicParticle() const 
 
class std::vector< int, std::allocator< int > > G4SelectedAtRestDoItVector
 
void RemoveReactionSet(G4Track *track)
 
void InvokeAlongStepDoItProcs()
 
G4TrackStatus GetTrackStatus() const 
 
void SetCreatorProcess(const G4VProcess *aValue)
 
static G4ITReactionSet * Instance()
 
G4IT * GetIT(const G4Track *track)
 
G4ProcessVector * GetAtRestProcessVector(G4ProcessVectorTypeIndex typ=typeGPIL) const 
 
G4double GetKineticEnergy() const 
 
class std::vector< int, std::allocator< int > > G4SelectedPostStepDoItVector
 
G4GLOB_DLL std::ostream G4cout
 
void DoIt(double timeStep)
 
void ApplyProductionCut(G4Track *)
 
G4int GetCoupleIndex(const G4MaterialCutsCouple *aCouple) const 
 
void FindTransportationStep()
 
G4double GetCharge() const 
 
void DealWithSecondaries(G4int &)
 
const G4double kCarTolerance
 
void InvokeTransportationProc()
 
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
 
static G4ProductionCutsTable * GetProductionCutsTable()
 
void InvokeAtRestDoItProcs()
 
T max(const T t1, const T t2)
brief Return the largest of the two arguments 
 
G4ProcessManager * GetProcessManager() const 
 
void Stepping(G4Track *, const double &)
 
void SetParentID(const G4int aValue)
 
void InvokePostStepDoItProcs()
 
G4bool IsGoodForTracking() const 
 
G4bool GetApplyCutsFlag() const 
 
void SetKineticEnergy(const G4double aValue)
 
G4double GetRange(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4MaterialCutsCouple *couple)