Geant4  10.00.p03
G4ITStepProcessor.cc
Go to the documentation of this file.
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 // $Id: G4ITStepProcessor.cc 82326 2014-06-16 09:19:18Z gcosmo $
27 //
28 // Author: Mathieu Karamitros (kara (AT) cenbg . in2p3 . fr)
29 //
30 // History:
31 // -----------
32 // 10 Oct 2011 M.Karamitros created
33 //
34 // -------------------------------------------------------------------
35 
36 #include "G4ITStepProcessor.hh"
37 #include "G4UImanager.hh"
38 #include "G4ForceCondition.hh"
39 #include "G4GPILSelection.hh"
41 // #include "G4VSensitiveDetector.hh" // Include from 'hits/digi'
42 #include "G4GeometryTolerance.hh"
43 #include "G4ParticleTable.hh"
44 #include "G4ITTrackingManager.hh"
45 #include "G4TrackingInformation.hh"
46 #include "G4IT.hh"
47 #include "G4ITNavigator.hh" // Include from 'geometry'
48 
49 #include "G4VITProcess.hh"
50 #include "G4VProcess.hh"
51 #include "G4ITTransportation.hh"
52 
53 #include <iomanip> // Include from 'system'
54 #include <vector> // Include from 'system'
55 
56 using namespace std;
57 
58 static const size_t SizeOfSelectedDoItVector=100;
59 //static const size_t& gMaxNProcesses(G4VITProcess::GetMaxProcessIndex());
60 
61 //____________________________________________________________________________________
62 
64 {
65  verboseLevel = 0 ;
66  // fpUserSteppingAction = 0 ;
67  fStoreTrajectory = 0;
68  fpTrackingManager = 0;
69  fpNavigator = 0;
70  kCarTolerance = -1.;
71  fInitialized = false;
72  fPreviousTimeStep = DBL_MAX;
73  CleanProcessor();
74  ResetSecondaries();
75 }
76 
79 // fSelectedAtRestDoItVector (gMaxNProcesses,0),
80 // fSelectedPostStepDoItVector (gMaxNProcesses,0)
81  fSelectedAtRestDoItVector (G4VITProcess::GetMaxProcessIndex(),0),
82  fSelectedPostStepDoItVector (G4VITProcess::GetMaxProcessIndex(),0)
83 {
84  fPhysicalStep = -1.;
85  fPreviousStepSize = -1.;
86 
87  fSafety = -1.;
88  proposedSafety = -1.;
89  endpointSafety = -1;
90 
92 
93  fTouchableHandle = 0;
94 }
95 
96 // should not be used
99 // fSelectedAtRestDoItVector (gMaxNProcesses,0),
100 // fSelectedPostStepDoItVector (gMaxNProcesses,0)
101  fSelectedAtRestDoItVector (G4VITProcess::GetMaxProcessIndex(),0),
102  fSelectedPostStepDoItVector (G4VITProcess::GetMaxProcessIndex(),0)
103 {
104  fPhysicalStep = -1.;
105  fPreviousStepSize = -1.;
106 
107  fSafety = -1.;
108  proposedSafety = -1.;
109  endpointSafety = -1;
110 
112 
113  fTouchableHandle = 0;
114 }
115 
116 // should not be used
118 {
119  if(this == &rhs) return *this;
120 
121  fSelectedAtRestDoItVector.clear();
122 // fSelectedAtRestDoItVector.resize(gMaxNProcesses,0);
123  fSelectedAtRestDoItVector.resize(G4VITProcess::GetMaxProcessIndex(),0);
124  fSelectedPostStepDoItVector.clear();
125 // fSelectedPostStepDoItVector.resize(gMaxNProcesses,0);
126  fSelectedPostStepDoItVector.resize(G4VITProcess::GetMaxProcessIndex(),0);
127 
128  fPhysicalStep = -1.;
129  fPreviousStepSize = -1.;
130 
131  fSafety = -1.;
132  proposedSafety = -1.;
133  endpointSafety = -1;
134 
135  fStepStatus = fUndefined;
136 
137  fTouchableHandle = 0;
138  return *this;
139 }
140 //____________________________________________________________________________________
141 
143 {;}
144 //____________________________________________________________________________________
145 
147 {
148  std::map<const G4ParticleDefinition*, ProcessGeneralInfo*> ::iterator it;
149 
150  for(it = fProcessGeneralInfoMap.begin();it != fProcessGeneralInfoMap.end();it++)
151  {
152  if(it->second)
153  {
154  delete it->second;
155  it->second = 0;
156  }
157  }
158 
159  fProcessGeneralInfoMap.clear();
160 }
161 
162 //____________________________________________________________________________________
163 
165 {
166  fInitialized = false;
168  Initialize();
169 }
170 
171 //____________________________________________________________________________________
172 
174 {
175  CleanProcessor();
176  if(fInitialized) return;
177  // ActiveOnlyITProcess();
178 
180  ->GetNavigatorForTracking());
181 
184 
185  fInitialized = true;
186 }
187 //______________________________________________________________________________
188 
190 {
191  if(fpStep)
192  {
194  delete fpStep;
195  }
196 
197  if(fpSecondary) delete fpSecondary;
200 
201  // if(fpUserSteppingAction) delete fpUserSteppingAction;
202 }
203 //______________________________________________________________________________
204 // should not be used
206 {
207  verboseLevel = rhs.verboseLevel ;
209 
210  // fpUserSteppingAction = 0 ;
211  fpTrackingManager = 0;
212  fpNavigator = 0;
213  fInitialized = false;
214 
216  fInitialized = false;
218 
219  CleanProcessor();
221 }
222 //______________________________________________________________________________
223 
225 {
226  if (this == &rhs) return *this; // handle self assignment
227  //assignment operator
228  return *this;
229 }
230 // ******************************************************************
231 
233 {
234  // Method not used for the time being
235 #ifdef debug
236  G4cout<<"G4ITStepProcessor::CloneProcesses: is called"<<G4endl;
237 #endif
238 
241 
242  theParticleIterator->reset();
243  // TODO : Ne faire la boucle que sur les IT **** !!!
244  while( (*theParticleIterator)() )
245  {
246  G4ParticleDefinition* particle = theParticleIterator->value();
247  G4ProcessManager* pm= particle->GetProcessManager();
248 
249  if(!pm)
250  {
251  G4cerr << "ERROR - G4ITStepProcessor::GetProcessNumber()" << G4endl
252  << " ProcessManager is NULL for particle = "
253  << particle->GetParticleName() << ", PDG_code = "
254  << particle->GetPDGEncoding() << G4endl;
255  G4Exception("G4ITStepProcessor::GetProcessNumber()", "ITStepProcessor0001",
256  FatalException, "Process Manager is not found.");
257  return;
258  }
259 
261  }
262 }
263 // ******************************************************************
264 
266 {
267  // Method not used for the time being
268  G4ProcessVector* processVector = processManager->GetProcessList();
269 
270  G4VITProcess* itProcess = 0 ;
271  for(int i = 0 ; i < processVector->size() ; i++)
272  {
273  G4VProcess* base_process = (*processVector)[i];
274  itProcess = dynamic_cast<G4VITProcess*>(base_process);
275 
276  if(!itProcess)
277  {
278  processManager->SetProcessActivation(base_process, false);
279  }
280  }
281 }
282 // ******************************************************************
284  G4ProcessManager* pm)
285 {
286 
287 #ifdef debug
288  G4cout<<"G4ITStepProcessor::GetProcessNumber: is called track"<<G4endl;
289 #endif
290  if(!pm)
291  {
292  G4cerr << "ERROR - G4SteppingManager::GetProcessNumber()" << G4endl
293  << " ProcessManager is NULL for particle = "
294  << particle->GetParticleName() << ", PDG_code = "
295  << particle->GetPDGEncoding() << G4endl;
296  G4Exception("G4SteppingManager::GetProcessNumber()", "ITStepProcessor0002",
297  FatalException, "Process Manager is not found.");
298  return;
299  }
300 
301  std::map<const G4ParticleDefinition*, ProcessGeneralInfo*>::iterator it = fProcessGeneralInfoMap.find(particle);
302  if(it != fProcessGeneralInfoMap.end())
303  {
304  G4Exception("G4SteppingManager::SetupGeneralProcessInfo()", "ITStepProcessor0003",
305  FatalException, "Process info already registered.");
306  return;
307  }
308 
309  // here used as temporary
311 
312  // AtRestDoits
316 #ifdef debug
317  G4cout << "G4ITStepProcessor::GetProcessNumber: #ofAtRest="
319 #endif
320 
321  // AlongStepDoits
325 #ifdef debug
326  G4cout << "G4ITStepProcessor::GetProcessNumber:#ofAlongStp="
328 #endif
329 
330  // PostStepDoits
334 #ifdef debug
335  G4cout << "G4ITStepProcessor::GetProcessNumber: #ofPostStep="
337 #endif
338 
339  if (SizeOfSelectedDoItVector<fpProcessInfo->MAXofAtRestLoops ||
340  SizeOfSelectedDoItVector<fpProcessInfo->MAXofAlongStepLoops ||
341  SizeOfSelectedDoItVector<fpProcessInfo->MAXofPostStepLoops )
342  {
343  G4cerr << "ERROR - G4ITStepProcessor::GetProcessNumber()" << G4endl
344  << " SizeOfSelectedDoItVector= " << SizeOfSelectedDoItVector
345  << " ; is smaller then one of MAXofAtRestLoops= "
346  << fpProcessInfo->MAXofAtRestLoops << G4endl
347  << " or MAXofAlongStepLoops= " << fpProcessInfo->MAXofAlongStepLoops
348  << " or MAXofPostStepLoops= " << fpProcessInfo->MAXofPostStepLoops << G4endl;
349  G4Exception("G4ITStepProcessor::GetProcessNumber()",
350  "ITStepProcessor0004", FatalException,
351  "The array size is smaller than the actual No of processes.");
352  }
353 
357  {
358  G4ExceptionDescription exceptionDescription ;
359  exceptionDescription << "No DoIt process found " ;
360  G4Exception("G4ITStepProcessor::DoStepping","ITStepProcessor0005",
361  FatalErrorInArgument,exceptionDescription);
362  return ;
363  }
364 
366  {
369 
371  {
372  G4ExceptionDescription exceptionDescription ;
373  exceptionDescription << "No transportation process found " ;
374  G4Exception("G4ITStepProcessor::SetupGeneralProcessInfo","ITStepProcessor0006",
375  FatalErrorInArgument,exceptionDescription);
376  }
377  }
379  // fpProcessInfo = 0;
380 }
381 
382 // ******************************************************************
383 
385 {
386  fpTrack = track ;
387  if(fpTrack)
388  {
389  fpITrack = GetIT(fpTrack) ;
390  fpStep = const_cast<G4Step*>(fpTrack -> GetStep());
391 
392  if(fpITrack)
393  {
395  }
396  else
397  {
398  fpTrackingInfo = 0;
399  G4cerr << "Track ID : " << fpTrack->GetTrackID() << G4endl;
400 
401  G4ExceptionDescription exceptionDescription ("No IT pointer was attached to the track you try to process.");
402  G4Exception("G4ITStepProcessor::SetTrack","ITStepProcessor0007",
403  FatalErrorInArgument,exceptionDescription);
404  }
405  }
406  else
407  {
408  fpITrack = 0;
409  fpStep = 0 ;
410  }
411 }
412 //______________________________________________________________________________
413 
415 {
417  std::map<const G4ParticleDefinition*, ProcessGeneralInfo*>::iterator it = fProcessGeneralInfoMap.find(particle);
418 
419  if(it == fProcessGeneralInfoMap.end())
420  {
422  if(fpProcessInfo == 0)
423  {
424  G4ExceptionDescription exceptionDescription ("...");
425  G4Exception("G4ITStepProcessor::GetProcessNumber","ITStepProcessor0008",
426  FatalErrorInArgument,exceptionDescription);
427  return;
428  }
429  }
430  else
431  {
432  fpProcessInfo = it->second;
433  }
434 }
435 //______________________________________________________________________________
436 
438 {
442 
444 
445  GetProcessInfo();
447 }
448 //______________________________________________________________________________
449 
451 {
452  // Reset the secondary particles
456 }
457 //______________________________________________________________________________
458 
460 {
461  // Select the rest process which has the shortest time before
462  // it is invoked. In rest processes, GPIL()
463  // returns the time before a process occurs.
464  G4double lifeTime (DBL_MAX), shortestLifeTime (DBL_MAX);
465 
467  shortestLifeTime = DBL_MAX;
468 
469  unsigned int NofInactiveProc=0;
470 
471  for( size_t ri=0 ; ri < fpProcessInfo->MAXofAtRestLoops ; ri++ )
472  {
474  if (fpCurrentProcess== 0)
475  {
477  NofInactiveProc++;
478  continue;
479  } // NULL means the process is inactivated by a user on fly.
480 
483  lifeTime = fpCurrentProcess->AtRestGPIL( *fpTrack, &fCondition );
484  //fpCurrentProcess->SetProcessState(0);
486 
487  if(fCondition==Forced)
488  {
490  }
491  else
492  {
494  if(lifeTime < shortestLifeTime )
495  {
496  shortestLifeTime = lifeTime;
499  }
500  }
501  }
502 
503  fTimeStep = shortestLifeTime ;
504 
505  // at least one process is necessary to destroy the particle
506  // exit with warning
507  if(NofInactiveProc==fpProcessInfo->MAXofAtRestLoops)
508  {
509  G4cerr << "ERROR - G4ITStepProcessor::InvokeAtRestDoItProcs()" << G4endl
510  << " No AtRestDoIt process is active!" << G4endl;
511  }
512 }
513 //___________________________________________________________________________
514 
516 {
517  SetTrack(track);
519 }
520 //______________________________________________________________________________
521 
522 
524 {
525  // DEBUG
526  // G4cout << "SetInitialStep for : " << fpITrack-> GetName() << G4endl;
527  //________________________________________________________
528  // Initialize geometry
529 
530 
531  if ( ! fpTrack->GetTouchableHandle())
532  {
535  &direction, false, false );
537 
540  }
541  else
542  {
546  G4VPhysicalVolume* newTopVolume=
550  if(newTopVolume != oldTopVolume || oldTopVolume->GetRegularStructureId() == 1 )
551  {
555  }
556  }
557 
559 
560  //________________________________________________________
561  // If the primary track has 'Suspend' or 'PostponeToNextEvent' state,
562  // set the track state to 'Alive'.
563  if( (fpTrack->GetTrackStatus()==fSuspend) ||
565  {
567  }
568 
569  // If the primary track has 'zero' kinetic energy, set the track
570  // state to 'StopButAlive'.
571  if(fpTrack->GetKineticEnergy() <= 0.0)
572  {
574  }
575  //________________________________________________________
576  // Set vertex information of G4Track at here
577  if ( fpTrack->GetCurrentStepNumber() == 0 )
578  {
583  }
584  //________________________________________________________
585  // If track is already outside the world boundary, kill it
586  if( fpCurrentVolume==0 )
587  {
588  // If the track is a primary, stop processing
589  if(fpTrack->GetParentID()==0)
590  {
591  G4cerr << "ERROR - G4ITStepProcessor::SetInitialStep()" << G4endl
592  << " Primary particle starting at - "
593  << fpTrack->GetPosition()
594  << " - is outside of the world volume." << G4endl;
595  G4Exception("G4ITStepProcessor::SetInitialStep()", "ITStepProcessor0011",
596  FatalException, "Primary vertex outside of the world!");
597  }
598 
600  G4cout << "WARNING - G4ITStepProcessor::SetInitialStep()" << G4endl
601  << " Initial track position is outside world! - "
602  << fpTrack->GetPosition() << G4endl;
603  }
604  else{
605  // Initial set up for attribues of 'Step'
607  }
608 
609 
610  if( fpTrack->GetTrackStatus() == fStopAndKill ) return ;
611 
613 
615 }
616 //______________________________________________________________________________
617 
619 {
620 
621  if(!fpStep)
622  {
623 
624  // Create new Step and give it to the track
625  fpStep = new G4Step();
628 
629  // Create new state and set it in the trackingInfo
632 
633  SetupMembers();
635 
636  SetInitialStep();
637  }
638  else
639  {
640  SetupMembers();
641 
643 /***
644  // Send G4Step information to Hit/Dig if the volume is sensitive
645  fpCurrentVolume = fpStep->GetPreStepPoint()->GetPhysicalVolume();
646  StepControlFlag = fpStep->GetControlFlag();
647  if( fpCurrentVolume != 0 && StepControlFlag != AvoidHitInvocation)
648  {
649  fpSensitive = fpStep->GetPreStepPoint()->
650  GetSensitiveDetector();
651 
652  // if( fSensitive != 0 ) {
653  // fSensitive->Hit(fStep);
654  // }
655  }
656 ***/
657  // Store last PostStepPoint to PreStepPoint, and swap current and next
658  // volume information of G4Track. Reset total energy deposit in one Step.
661 
662  //JA Set the volume before it is used (in DefineStepLength() for User Limit)
664 /*
665  G4cout << G4endl;
666  G4cout << "!!!!!!!!!!!!!!!!!!!!!!!!!!!" << G4endl;
667  G4cout << "PreStepPoint Volume : " << fpCurrentVolume->GetName() << G4endl;
668  G4cout << "Track Touchable : " << fpTrack->GetTouchableHandle()->GetVolume()->GetName() << G4endl;
669  G4cout << "Track NextTouchable : " << fpTrack->GetNextTouchableHandle()->GetVolume()->GetName() << G4endl;
670 */
671  // Reset the step's auxiliary points vector pointer
673 
674  // Switch next touchable in track to current one
680 
681  G4VPhysicalVolume* newTopVolume=
685 
686  // G4cout << "New Top Volume : " << newTopVolume->GetName() << G4endl;
687 
688  if(newTopVolume != oldTopVolume || oldTopVolume->GetRegularStructureId() == 1 )
689  {
693  }
694 
696  }
697 }
698 
699 //______________________________________________________________________________
700 
701 
702 // ************************************************************************
703 // Compute Interaction Length
704 // ************************************************************************
706 {
707 
708  InitDefineStep();
709 
710  G4TrackStatus trackStatus = fpTrack -> GetTrackStatus() ;
711 
712  if(trackStatus == fStopAndKill)
713  {
714  return ;
715  }
716 
717  if(trackStatus == fStopButAlive)
718  {
721  return GetAtRestIL() ;
722  }
723 
724 
725  // Find minimum Step length and corresponding time
726  // demanded by active disc./cont. processes
727 
728  // ReSet the counter etc.
729  fpState->fPhysicalStep = DBL_MAX; // Initialize by a huge number
730  fPhysIntLength = DBL_MAX; // Initialize by a huge number
731 
732  double proposedTimeStep = DBL_MAX;
733  G4VProcess* processWithPostStepGivenByTimeStep(0);
734 
735  // GPIL for PostStep
738 
739  // G4cout << "fpProcessInfo->MAXofPostStepLoops : " << fpProcessInfo->MAXofPostStepLoops
740  // << " mol : " << fpITrack -> GetName() << " id : " << fpTrack->GetTrackID()
741  // << G4endl;
742 
743  for(size_t np=0; np < fpProcessInfo->MAXofPostStepLoops; np++)
744  {
746  if (fpCurrentProcess== 0)
747  {
749  continue;
750  } // NULL means the process is inactivated by a user on fly.
751 
754 
755  // G4cout << "Is going to call : " << fpCurrentProcess -> GetProcessName() << G4endl;
757  PostStepGPIL( *fpTrack,
759  &fCondition );
760  //fpCurrentProcess->SetProcessState(0);
762 
763  switch (fCondition)
764  {
765  case ExclusivelyForced: // Will need special treatment
770  break;
771 
772  case Conditionally:
773  // (fpState->fSelectedPostStepDoItVector)[np] = Conditionally;
774  G4Exception("G4ITStepProcessor::DefinePhysicalStepLength()", "ITStepProcessor0008",
775  FatalException, "This feature is no more supported");
776  break;
777 
778  case Forced:
780  break;
781 
782  case StronglyForced:
784  break;
785 
786  default:
788  break;
789  }
790 
792  {
793  for(size_t nrest=np+1; nrest < fpProcessInfo->MAXofPostStepLoops; nrest++)
794  {
796  }
797  return; // Please note the 'return' at here !!!
798  }
799  else
800  {
801  if(fPhysIntLength < fpState->fPhysicalStep )
802  {
803  // To avoid checking whether the process is actually
804  // proposing a time step, the returned time steps are
805  // negative (just for tagging)
807  {
808  fPhysIntLength *= -1;
809  if(fPhysIntLength < proposedTimeStep)
810  {
811  proposedTimeStep = fPhysIntLength;
813  processWithPostStepGivenByTimeStep = fpCurrentProcess;
814  }
815  }
816  else
817  {
823  }
824  }
825  }
826  }
827 
828  // GPIL for AlongStep
830  G4double safetyProposedToAndByProcess = fpState->proposedSafety;
831 
832  for(size_t kp=0; kp < fpProcessInfo->MAXofAlongStepLoops; kp++)
833  {
835  if (fpCurrentProcess== 0) continue;
836  // NULL means the process is inactivated by a user on fly.
837 
839  fPhysIntLength = fpCurrentProcess-> AlongStepGPIL( *fpTrack,
842  safetyProposedToAndByProcess,
843  &fGPILSelection );
844 
845  if(fPhysIntLength < fpState->fPhysicalStep)
846  {
848  // Should save PS and TS in IT
849 
850  // Check if the process wants to be the GPIL winner. For example,
851  // multi-scattering proposes Step limit, but won't be the winner.
853  {
857  }
858 
859  // Transportation is assumed to be the last process in the vector
861  {
863 
864  if(! fpTransportation)
865  {
866  G4ExceptionDescription exceptionDescription ;
867  exceptionDescription << "No transportation process found " ;
868  G4Exception("G4ITStepProcessor::DoDefinePhysicalStepLength","ITStepProcessor0009",
869  FatalErrorInArgument,exceptionDescription);
870  }
871 
873 
874 
875  if (fpTrack->GetNextVolume() != 0)
877  else
879  }
880  }
881  else
882  {
884  {
886 
887  if(! fpTransportation)
888  {
889  G4ExceptionDescription exceptionDescription ;
890  exceptionDescription << "No transportation process found " ;
891  G4Exception("G4ITStepProcessor::DoDefinePhysicalStepLength","ITStepProcessor0010",
892  FatalErrorInArgument,exceptionDescription);
893  }
894 
896  }
897  }
898 
899  if(proposedTimeStep < fTimeStep)
900  {
901  if(fPostStepAtTimeDoItProcTriggered<fpProcessInfo->MAXofPostStepLoops)
902  {
904  InActivated)
905  {
907  // (fpState->fSelectedPostStepDoItVector)[fPostStepDoItProcTriggered] = InActivated;
908 
910  fpStep->GetPostStepPoint()->SetProcessDefinedStep(processWithPostStepGivenByTimeStep);
911 
912  fTimeStep = proposedTimeStep;
913 
915  }
916  }
917  }
918  else
919  {
920  if (fPostStepDoItProcTriggered<fpProcessInfo->MAXofPostStepLoops)
921  {
923  InActivated)
924  {
926  NotForced;
927  }
928  }
929  }
930 
931  //fpCurrentProcess->SetProcessState(0);
933 
934  // Make sure to check the safety, even if Step is not limited
935  // by this process. J. Apostolakis, June 20, 1998
936  //
937  if (safetyProposedToAndByProcess < fpState->proposedSafety)
938  // proposedSafety keeps the smallest value:
939  fpState->proposedSafety = safetyProposedToAndByProcess;
940  else
941  // safetyProposedToAndByProcess always proposes a valid safety:
942  safetyProposedToAndByProcess = fpState->proposedSafety;
943 
944  }
945 
948 }
949 
950 //______________________________________________________________________________
G4TrackVector * fpSecondary
void SetTrackStatus(const G4TrackStatus aTrackStatus)
G4ParticleDefinition * GetDefinition() const
Its role is the same as G4StepManager :
G4int GetParentID() const
virtual G4VPhysicalVolume * ResetHierarchyAndLocate(const G4ThreeVector &point, const G4ThreeVector &direction, const G4TouchableHistory &h)
void SetVertexMomentumDirection(const G4ThreeVector &aValue)
G4ITTrackingManager * fpTrackingManager
G4::shared_ptr< G4ProcessState_Lock > GetProcessState(size_t index)
Every process should store the information computed at the InteractionLegth stage in the track...
void SetProcessDefinedStep(const G4VProcess *aValue)
std::ostringstream G4ExceptionDescription
Definition: globals.hh:76
CLHEP::Hep3Vector G4ThreeVector
static const size_t & GetMaxProcessIndex()
G4GPILSelection fGPILSelection
void DeleteSecondaryVector()
void SetStepProcessorState(G4ITStepProcessorState_Lock *)
G4SelectedAtRestDoItVector fSelectedAtRestDoItVector
void SetNavigator(G4ITNavigator *value)
const G4ThreeVector & GetPosition() const
G4double GetSurfaceTolerance() const
G4TrackStatus GetTrackStatus() const
std::map< const G4ParticleDefinition *, ProcessGeneralInfo * > fProcessGeneralInfoMap
void SetNextTouchableHandle(const G4TouchableHandle &apValue)
void SetTouchableHandle(const G4TouchableHandle &apValue)
G4VITProcess * fpCurrentProcess
virtual G4VPhysicalVolume * LocateGlobalPointAndSetup(const G4ThreeVector &point, const G4ThreeVector *direction=0, const G4bool pRelativeSearch=true, const G4bool ignoreDirection=true)
void SetPointerToVectorOfAuxiliaryPoints(std::vector< G4ThreeVector > *theNewVectorPointer)
Definition: G4Step.hh:237
G4ProcessManager * GetProcessManager() const
int G4int
Definition: G4Types.hh:78
virtual void StartTracking(G4Track *)
const G4String & GetParticleName() const
G4ForceCondition fCondition
G4VProcess * SetProcessActivation(G4VProcess *aProcess, G4bool fActive)
G4VPhysicalVolume * GetNextVolume() const
void SetTrack(G4Track *)
void DefinePhysicalStepLength(G4Track *)
G4double AtRestGPIL(const G4Track &track, G4ForceCondition *condition)
Definition: G4VProcess.hh:490
G4StepPoint * GetPreStepPoint() const
G4ITNavigatorState_Lock * GetNavigatorState()
G4IT * GetIT(const G4Track *track)
Definition: G4IT.cc:48
G4ITStepProcessorState & operator=(const G4ITStepProcessorState &)
G4ProcessVector * GetAtRestProcessVector(G4ProcessVectorTypeIndex typ=typeGPIL) const
G4double GetKineticEnergy() const
G4int entries() const
static G4ITTransportationManager * GetTransportationManager()
G4TrackingInformation * fpTrackingInfo
G4GLOB_DLL std::ostream G4cout
void reset(G4bool ifSkipIon=true)
G4int GetCurrentStepNumber() const
G4TrackVector * NewSecondaryVector()
G4VPhysicalVolume * GetPhysicalVolume() const
G4StepPoint * fpPreStepPoint
virtual void ComputeStep(const G4Track &, const G4Step &, const double timeStep, double &spaceStep)
virtual G4int GetRegularStructureId() const =0
void ResetTotalEnergyDeposit()
G4ITStepProcessorState_Lock * GetStepProcessorState()
void SetVertexKineticEnergy(const G4double aValue)
const G4TouchableHandle & GetNextTouchableHandle() const
G4ITNavigatorState_Lock * GetNavigatorState() const
G4VPhysicalVolume * fpCurrentVolume
Definition: G4Step.hh:76
G4int GetTrackID() const
G4ITNavigator * fpNavigator
G4ITStepProcessorState * fpState
G4StepPoint * fpPostStepPoint
G4double GetInteractionTimeLeft()
const G4TouchableHandle & GetTouchableHandle() const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
virtual void Initialize()
G4int size() const
G4TrackingInformation * GetTrackingInfo()
Definition: G4IT.hh:134
const G4ThreeVector & GetMomentumDirection() const
G4LogicalVolume * GetLogicalVolume() const
G4TrackVector * GetfSecondary()
static G4ParticleTable * GetParticleTable()
G4ITTransportation * fpTransportation
virtual G4VPhysicalVolume * GetVolume(G4int depth=0) const
Definition: G4VTouchable.cc:44
void SetVertexPosition(const G4ThreeVector &aValue)
G4StepPoint * GetPostStepPoint() const
G4ITStepProcessor & operator=(const G4ITStepProcessor &other)
void SetNavigatorState(G4ITNavigatorState_Lock *)
void SetProcessState(G4::shared_ptr< G4ProcessState_Lock > aProcInfo)
G4VPhysicalVolume * GetVolume() const
void SetNavigatorState(G4ITNavigatorState_Lock *)
ProcessGeneralInfo * fpProcessInfo
#define G4endl
Definition: G4ios.hh:61
void InitializeStep(G4Track *aValue)
double G4double
Definition: G4Types.hh:76
G4TouchableHistory * CreateTouchableHistory() const
void SetupGeneralProcessInfo(G4ParticleDefinition *, G4ProcessManager *)
G4ProcessVector * GetAlongStepProcessVector(G4ProcessVectorTypeIndex typ=typeGPIL) const
G4bool ProposesTimeStep() const
G4VITProcess inherits from G4VProcess.
Definition: G4VITProcess.hh:74
void NewNavigatorState()
#define DBL_MAX
Definition: templates.hh:83
void ResetProcessState()
G4SelectedPostStepDoItVector fSelectedPostStepDoItVector
size_t GetProcessID() const
Definition: G4VITProcess.hh:91
G4TrackStatus
G4PTblDicIterator * GetIterator() const
void SetStep(const G4Step *aValue)
size_t fPostStepAtTimeDoItProcTriggered
#define theParticleIterator
G4double GetStepLength() const
static G4GeometryTolerance * GetInstance()
G4ProcessVector * GetProcessList() const
static const size_t SizeOfSelectedDoItVector
G4GLOB_DLL std::ostream G4cerr
void SetLogicalVolumeAtVertex(const G4LogicalVolume *)
void CopyPostToPreStepPoint()
G4ProcessVector * GetPostStepProcessVector(G4ProcessVectorTypeIndex typ=typeGPIL) const