Geant4-11
G4SteppingManager2.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// G4SteppingManager class implementation - part 2
27//
28// Contact:
29// Questions and comments to this code should be sent to
30// Katsuya Amako (e-mail: Katsuya.Amako@kek.jp)
31// Takashi Sasaki (e-mail: Takashi.Sasaki@kek.jp)
32// --------------------------------------------------------------------
33
34// #define debug
35
36#include "G4UImanager.hh"
37#include "G4ForceCondition.hh"
38#include "G4GPILSelection.hh"
39#include "G4SteppingControl.hh"
41#include "G4SteppingManager.hh"
42#include "G4LossTableManager.hh"
43#include "G4ParticleTable.hh"
44
45#include "G4EnergyLossTables.hh"
46#include "G4ProductionCuts.hh"
48
52{
53 #ifdef debug
54 G4cout << "G4SteppingManager::GetProcessNumber: is called track="
55 << fTrack << G4endl;
56 #endif
57
59 if(pm == nullptr)
60 {
61 G4cerr << "ERROR - G4SteppingManager::GetProcessNumber()" << G4endl
62 << " ProcessManager is NULL for particle = "
63 << fTrack->GetDefinition()->GetParticleName() << ", PDG_code = "
65 G4Exception("G4SteppingManager::GetProcessNumber()", "Tracking0011",
66 FatalException, "Process Manager is not found.");
67 return;
68 }
69
70 // AtRestDoits
71 //
75
76 #ifdef debug
77 G4cout << "G4SteppingManager::GetProcessNumber: #ofAtRest="
79 #endif
80
81 // AlongStepDoits
82 //
86
87 #ifdef debug
88 G4cout << "G4SteppingManager::GetProcessNumber:#ofAlongStp="
90 #endif
91
92 // PostStepDoits
93 //
97
98 #ifdef debug
99 G4cout << "G4SteppingManager::GetProcessNumber: #ofPostStep="
101 #endif
102
106 {
107 G4cerr << "ERROR - G4SteppingManager::GetProcessNumber()" << G4endl
108 << " SizeOfSelectedDoItVector= " << SizeOfSelectedDoItVector
109 << " ; is smaller then one of MAXofAtRestLoops= "
111 << " or MAXofAlongStepLoops= " << MAXofAlongStepLoops
112 << " or MAXofPostStepLoops= " << MAXofPostStepLoops << G4endl;
113 G4Exception("G4SteppingManager::GetProcessNumber()",
114 "Tracking0012", FatalException,
115 "The array size is smaller than the actual No of processes.");
116 }
117}
118
119// ************************************************************************
120//
121// Private Member Functions
122//
123// ************************************************************************
124
128{
129 // ReSet the counter etc.
130 //
131 PhysicalStep = DBL_MAX; // Initialize by a huge number
132 physIntLength = DBL_MAX; // Initialize by a huge number
133
134 #ifdef G4VERBOSE
136 #endif
137
138 // GPIL for PostStep
139 //
141
142 for(std::size_t np=0; np<MAXofPostStepLoops; ++np)
143 {
144 fCurrentProcess = (*fPostStepGetPhysIntVector)(np);
145 if (fCurrentProcess == nullptr)
146 {
147 (*fSelectedPostStepDoItVector)[np] = InActivated;
148 continue;
149 } // NULL means the process is inactivated by a user on fly
150
153 #ifdef G4VERBOSE
155 #endif
156
157 switch (fCondition)
158 {
160 (*fSelectedPostStepDoItVector)[np] = ExclusivelyForced;
163 break;
164 case Conditionally:
165 // (*fSelectedPostStepDoItVector)[np] = Conditionally;
166 G4Exception("G4SteppingManager::DefinePhysicalStepLength()",
167 "Tracking1001", FatalException,
168 "This feature no more supported");
169 break;
170 case Forced:
171 (*fSelectedPostStepDoItVector)[np] = Forced;
172 break;
173 case StronglyForced:
174 (*fSelectedPostStepDoItVector)[np] = StronglyForced;
175 break;
176 default:
177 (*fSelectedPostStepDoItVector)[np] = InActivated;
178 break;
179 }
180
182 {
183 for(std::size_t nrest=np+1; nrest<MAXofPostStepLoops; ++nrest)
184 {
185 (*fSelectedPostStepDoItVector)[nrest] = InActivated;
186 }
187 return; // Take note the 'return' at here !!!
188 }
189 else
190 {
192 {
197 }
198 }
199 }
200
202 {
204 {
205 (*fSelectedPostStepDoItVector)[fPostStepDoItProcTriggered] = NotForced;
206 }
207 }
208
209 // GPIL for AlongStep
210 //
212 G4double safetyProposedToAndByProcess = proposedSafety;
213 G4bool delegateToTransportation = false;
214
215 for(std::size_t kp=0; kp<MAXofAlongStepLoops; ++kp)
216 {
217 fCurrentProcess = (*fAlongStepGetPhysIntVector)[kp];
218 if (fCurrentProcess == nullptr) continue;
219 // NULL means the process is inactivated by a user on fly
220
223 safetyProposedToAndByProcess,
225 #ifdef G4VERBOSE
227 #endif
228
230 {
232
233 // Check if the process wants to be the GPIL winner. For example,
234 // multi-scattering proposes Step limit, but won't be the winner
235 //
237 {
240 }
242 { // a parallel world is proposing the shortest but expecting Transportation
243 // to win.
244 delegateToTransportation = true;
245 }
246
247 // Transportation is assumed to be the last process in the vector
248 // Transportation is winning
249 if(kp == MAXofAlongStepLoops-1)
250 {
252 delegateToTransportation = false;
253 }
254 }
255
256 // Make sure to check the safety, even if Step is not limited
257 // by this process
258 //
259 if (safetyProposedToAndByProcess < proposedSafety)
260 {
261 // proposedSafety keeps the smallest value
262 //
263 proposedSafety = safetyProposedToAndByProcess;
264 }
265 else
266 {
267 // safetyProposedToAndByProcess always proposes a valid safety
268 //
269 safetyProposedToAndByProcess = proposedSafety;
270 }
271 }
272 if(delegateToTransportation)
273 {
276 }
277}
278
282{
283 // Select the rest process which has the shortest time before
284 // it is invoked. In rest processes, GPIL()
285 // returns the time before a process occurs
286
287 G4double lifeTime, shortestLifeTime;
288
290 shortestLifeTime = DBL_MAX;
291
292 unsigned int NofInactiveProc = 0;
293 for( std::size_t ri=0 ; ri < MAXofAtRestLoops ; ++ri )
294 {
295 fCurrentProcess = (*fAtRestGetPhysIntVector)[ri];
296 if (fCurrentProcess == nullptr)
297 {
298 (*fSelectedAtRestDoItVector)[ri] = InActivated;
299 ++NofInactiveProc;
300 continue;
301 } // NULL means the process is inactivated by a user on fly
302
304
305 if(fCondition == Forced)
306 {
307 (*fSelectedAtRestDoItVector)[ri] = Forced;
308 }
309 else
310 {
311 (*fSelectedAtRestDoItVector)[ri] = InActivated;
312 if(lifeTime < shortestLifeTime )
313 {
314 shortestLifeTime = lifeTime;
316 }
317 }
318 }
319
320 (*fSelectedAtRestDoItVector)[fAtRestDoItProcTriggered] = NotForced;
321
322 // at least one process is necessary to destroy the particle exit with warning
323 //
324 if(NofInactiveProc==MAXofAtRestLoops)
325 {
326 G4Exception("G4SteppingManager::InvokeAtRestDoItProcs()", "Tracking0013",
327 JustWarning, "No AtRestDoIt process is active!" );
328 }
329
330 fStep->SetStepLength( 0. ); // the particle has stopped
331 fTrack->SetStepLength( 0. );
332
333
334 // Condition to avoid that stable ions are handled by Radioactive Decay.
335 // We use a very large time threshold (many orders of magnitude bigger than
336 // the universe's age) but not DBL_MAX because shortestLifeTime can be
337 // sometimes slightly smaller for stable ions.
338 if(shortestLifeTime < 1.0e+100) // Unstable ion at rest: Radioactive Decay will decay it
339 {
340 // invoke selected process
341 //
342 for(std::size_t np=0; np<MAXofAtRestLoops; ++np)
343 {
344 //
345 // Note: DoItVector has inverse order against GetPhysIntVector
346 // and SelectedAtRestDoItVector.
347 //
349 {
350 fCurrentProcess = (*fAtRestDoItVector)[np];
352
353 // Set the current process as a process which defined this Step length
354 //
356
357 // Update Step
358 //
360
361 // Now Store the secondaries from ParticleChange to SecondaryList
362
363 G4Track* tempSecondaryTrack;
364 G4int num2ndaries;
365
367
368 for(G4int DSecLoop=0; DSecLoop< num2ndaries; ++DSecLoop)
369 {
370 tempSecondaryTrack = fParticleChange->GetSecondary(DSecLoop);
371
372 if(tempSecondaryTrack->GetDefinition()->GetApplyCutsFlag())
373 {
374 ApplyProductionCut(tempSecondaryTrack);
375 }
376
377 // Set parentID
378 tempSecondaryTrack->SetParentID( fTrack->GetTrackID() );
379
380 // Set the process pointer which created this track
381 tempSecondaryTrack->SetCreatorProcess( fCurrentProcess );
382
383 // If this 2ndry particle has 'zero' kinetic energy, make sure
384 // it invokes a rest process at the beginning of the tracking
385 //
386 if(tempSecondaryTrack->GetKineticEnergy() <= DBL_MIN)
387 {
388 G4ProcessManager* pm = tempSecondaryTrack->GetDefinition()
390 if(pm == nullptr)
391 {
393 ED << "A track without proper process manager is pushed\n"
394 << "into the track stack.\n"
395 << " Particle name : "
396 << tempSecondaryTrack->GetDefinition()->GetParticleName()
397 << " -- ";
398 if(tempSecondaryTrack->GetParentID()<0)
399 {
400 ED << "created by a primary particle generator.";
401 }
402 else
403 {
404 const G4VProcess* vp = tempSecondaryTrack->GetCreatorProcess();
405 if(vp != nullptr)
406 { ED << "created by " << vp->GetProcessName() << "."; }
407 else
408 { ED << "creaded by unknown process."; }
409 }
410 G4Exception("G4SteppingManager::InvokeAtRestDoItProcs()",
411 "Tracking10051", FatalException, ED);
412 }
413 if (pm->GetAtRestProcessVector()->entries()>0)
414 {
415 tempSecondaryTrack->SetTrackStatus( fStopButAlive );
416 fSecondary->push_back( tempSecondaryTrack );
418 }
419 else
420 {
421 delete tempSecondaryTrack;
422 }
423 }
424 else
425 {
426 fSecondary->push_back( tempSecondaryTrack );
428 }
429 } //end of loop on secondary
430
431 // clear ParticleChange
433
434 } // if(fSelectedAtRestDoItVector[np] != InActivated){
435 } // for(std::size_t np=0; np<MAXofAtRestLoops; ++np){
436 }
437 else // Stable ion at rest
438 {
440 } // if(shortestLifeTime < 1.0e+100)
441
443
445}
446
450{
451 // If the current Step is defined by a 'ExclusivelyForced'
452 // PostStepDoIt, then don't invoke any AlongStepDoIt
453 //
455 {
456 return; // Take note 'return' is here !!!
457 }
458
459 // Invoke all active continuous processes
460 //
461 for( std::size_t ci=0; ci<MAXofAlongStepLoops; ++ci )
462 {
463 fCurrentProcess = (*fAlongStepDoItVector)[ci];
464 if (fCurrentProcess== 0) continue;
465 // NULL means the process is inactivated by a user on fly.
466
468
469 // Update the PostStepPoint of Step according to ParticleChange
471
472 #ifdef G4VERBOSE
474 #endif
475
476 // Now Store the secondaries from ParticleChange to SecondaryList
477
478 G4Track* tempSecondaryTrack;
479 G4int num2ndaries;
480
482
483 for(G4int DSecLoop=0; DSecLoop<num2ndaries; ++DSecLoop)
484 {
485 tempSecondaryTrack = fParticleChange->GetSecondary(DSecLoop);
486
487 if(tempSecondaryTrack->GetDefinition()->GetApplyCutsFlag())
488 {
489 ApplyProductionCut(tempSecondaryTrack);
490 }
491
492 // Set parentID
493 tempSecondaryTrack->SetParentID( fTrack->GetTrackID() );
494
495 // Set the process pointer which created this track
496 tempSecondaryTrack->SetCreatorProcess( fCurrentProcess );
497
498 // If this secondary particle has 'zero' kinetic energy, make sure
499 // it invokes a rest process at the beginning of the tracking
500 //
501 if(tempSecondaryTrack->GetKineticEnergy() <= DBL_MIN)
502 {
503 G4ProcessManager* pm = tempSecondaryTrack->GetDefinition()
505 if(pm == nullptr)
506 {
508 ED << "A track without proper process manager is pushed\n"
509 << "into the track stack.\n"
510 << " Particle name : "
511 << tempSecondaryTrack->GetDefinition()->GetParticleName()
512 << " -- ";
513 if(tempSecondaryTrack->GetParentID()<0)
514 {
515 ED << "created by a primary particle generator.";
516 }
517 else
518 {
519 const G4VProcess* vp = tempSecondaryTrack->GetCreatorProcess();
520 if(vp != nullptr)
521 { ED << "created by " << vp->GetProcessName() << "."; }
522 else
523 { ED << "creaded by unknown process."; }
524 }
525 G4Exception("G4SteppingManager::InvokeAlongStepDoItProcs()",
526 "Tracking10051", FatalException, ED);
527 }
528 if (pm->GetAtRestProcessVector()->entries()>0)
529 {
530 tempSecondaryTrack->SetTrackStatus( fStopButAlive );
531 fSecondary->push_back( tempSecondaryTrack );
533 }
534 else
535 {
536 delete tempSecondaryTrack;
537 }
538 }
539 else
540 {
541 fSecondary->push_back( tempSecondaryTrack );
543 }
544 } //end of loop on secondary
545
546 // Set the track status according to what the process defined
547 // if kinetic energy >0, otherwise set fStopButAlive
548 //
550
551 // clear ParticleChange
553 }
554
556 G4TrackStatus fNewStatus = fTrack->GetTrackStatus();
557
558 if ( fNewStatus == fAlive && fTrack->GetKineticEnergy() <= DBL_MIN )
559 {
560 if(MAXofAtRestLoops>0) fNewStatus = fStopButAlive;
561 else fNewStatus = fStopAndKill;
562 fTrack->SetTrackStatus( fNewStatus );
563 }
564}
565
569{
570 // Invoke the specified discrete processes
571 //
572 for(std::size_t np=0; np<MAXofPostStepLoops; ++np)
573 {
574 //
575 // Note: DoItVector has inverse order against GetPhysIntVector
576 // and SelectedPostStepDoItVector.
577 //
578 G4int Cond = (*fSelectedPostStepDoItVector)[MAXofPostStepLoops-np-1];
579 if(Cond != InActivated)
580 {
581 if( ((Cond == NotForced) && (fStepStatus == fPostStepDoItProc)) ||
582 ((Cond == Forced) && (fStepStatus != fExclusivelyForcedProc)) ||
584 ((Cond == StronglyForced) ) )
585 {
586 InvokePSDIP(np);
587 if ((np==0) && (fTrack->GetNextVolume() == nullptr))
588 {
591 }
592 }
593 }
594
595 // Exit from PostStepLoop if the track has been killed,
596 // but extra treatment for processes with Strongly Forced flag
597 //
599 {
600 for(std::size_t np1=np+1; np1<MAXofPostStepLoops; ++np1)
601 {
602 G4int Cond2 = (*fSelectedPostStepDoItVector)[MAXofPostStepLoops-np1-1];
603 if (Cond2 == StronglyForced)
604 {
605 InvokePSDIP(np1);
606 }
607 }
608 break;
609 }
610 }
611}
612
616{
617 fCurrentProcess = (*fPostStepDoItVector)[np];
619
620 // Update PostStepPoint of Step according to ParticleChange
622
623 #ifdef G4VERBOSE
625 #endif
626
627 // Update G4Track according to ParticleChange after each PostStepDoIt
629
630 // Update safety after each invocation of PostStepDoIts
632
633 // Now Store the secondaries from ParticleChange to SecondaryList
634
635 G4Track* tempSecondaryTrack;
636 G4int num2ndaries;
637
639
640 for(G4int DSecLoop=0; DSecLoop<num2ndaries; ++DSecLoop)
641 {
642 tempSecondaryTrack = fParticleChange->GetSecondary(DSecLoop);
643
644 if(tempSecondaryTrack->GetDefinition()->GetApplyCutsFlag())
645 {
646 ApplyProductionCut(tempSecondaryTrack);
647 }
648
649 // Set parentID
650 tempSecondaryTrack->SetParentID( fTrack->GetTrackID() );
651
652 // Set the process pointer which created this track
653 tempSecondaryTrack->SetCreatorProcess( fCurrentProcess );
654
655 // If this secondary particle has 'zero' kinetic energy, make sure
656 // it invokes a rest process at the beginning of the tracking
657 //
658 if(tempSecondaryTrack->GetKineticEnergy() <= DBL_MIN)
659 {
660 G4ProcessManager* pm = tempSecondaryTrack->GetDefinition()
662 if(pm == nullptr)
663 {
665 ED << "A track without proper process manager is pushed\n"
666 << "into the track stack.\n"
667 << " Particle name : "
668 << tempSecondaryTrack->GetDefinition()->GetParticleName()
669 << " -- ";
670 if(tempSecondaryTrack->GetParentID()<0)
671 {
672 ED << "created by a primary particle generator.";
673 }
674 else
675 {
676 const G4VProcess* vp = tempSecondaryTrack->GetCreatorProcess();
677 if(vp != nullptr)
678 { ED << "created by " << vp->GetProcessName() << "."; }
679 else
680 { ED << "creaded by unknown process."; }
681 }
682 G4Exception("G4SteppingManager::InvokePSDIP()","Tracking10053",
683 FatalException,ED);
684 }
685 if (pm->GetAtRestProcessVector()->entries()>0)
686 {
687 tempSecondaryTrack->SetTrackStatus( fStopButAlive );
688 fSecondary->push_back( tempSecondaryTrack );
690 }
691 else
692 {
693 delete tempSecondaryTrack;
694 }
695 }
696 else
697 {
698 fSecondary->push_back( tempSecondaryTrack );
700 }
701 } //end of loop on secondary
702
703 // Set the track status according to what the process defined
705
706 // clear ParticleChange
708}
709
713{
714 G4bool tBelowCutEnergyAndSafety = false;
715 G4int tPtclIdx
717 if (tPtclIdx<0) { return; }
718 G4ProductionCutsTable* tCutsTbl
720 G4int tCoupleIdx
722 if (tCoupleIdx<0) { return; }
723 G4double tProdThreshold
724 = (*(tCutsTbl->GetEnergyCutsVector(tPtclIdx)))[tCoupleIdx];
725 if( aSecondary->GetKineticEnergy()<tProdThreshold )
726 {
727 tBelowCutEnergyAndSafety = true;
728 if(std::abs(aSecondary->GetDynamicParticle()->GetCharge()) > DBL_MIN)
729 {
730 G4double currentRange
732 aSecondary->GetKineticEnergy(),
734 tBelowCutEnergyAndSafety = (currentRange < CalculateSafety() );
735 }
736 }
737
738 if( tBelowCutEnergyAndSafety )
739 {
740 if( !(aSecondary->IsGoodForTracking()) )
741 {
742 // Add kinetic energy to the total energy deposit
744 aSecondary->SetKineticEnergy(0.0);
745 }
746 }
747}
@ JustWarning
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:35
std::ostringstream G4ExceptionDescription
Definition: G4Exception.hh:40
@ InActivated
@ StronglyForced
@ NotForced
@ Conditionally
@ ExclusivelyForced
@ Forced
@ CandidateForSelection
@ typeGPIL
@ typeDoIt
@ fParallel
@ fGeomBoundary
Definition: G4StepStatus.hh:43
@ fWorldBoundary
Definition: G4StepStatus.hh:41
@ fPostStepDoItProc
Definition: G4StepStatus.hh:49
@ fAlongStepDoItProc
Definition: G4StepStatus.hh:47
@ fExclusivelyForcedProc
Definition: G4StepStatus.hh:53
G4TrackStatus
@ fAlive
@ fStopAndKill
@ fStopButAlive
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
G4GLOB_DLL std::ostream G4cerr
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
G4double GetCharge() const
static G4LossTableManager * Instance()
G4double GetRange(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
G4ProcessManager * GetProcessManager() const
G4bool GetApplyCutsFlag() const
const G4String & GetParticleName() const
G4ProcessVector * GetAlongStepProcessVector(G4ProcessVectorTypeIndex typ=typeGPIL) const
G4ProcessVector * GetPostStepProcessVector(G4ProcessVectorTypeIndex typ=typeGPIL) const
G4ProcessVector * GetAtRestProcessVector(G4ProcessVectorTypeIndex typ=typeGPIL) const
std::size_t entries() const
const std::vector< G4double > * GetEnergyCutsVector(std::size_t pcIdx) const
static G4ProductionCutsTable * GetProductionCutsTable()
G4int GetCoupleIndex(const G4MaterialCutsCouple *aCouple) const
static G4int GetIndex(const G4String &name)
void SetSafety(const G4double aValue)
void SetStepStatus(const G4StepStatus aValue)
void SetProcessDefinedStep(const G4VProcess *aValue)
const G4MaterialCutsCouple * GetMaterialCutsCouple() const
void UpdateTrack()
void SetStepLength(G4double value)
void AddTotalEnergyDeposit(G4double value)
G4StepPoint * GetPostStepPoint() const
std::size_t MAXofAtRestLoops
std::size_t MAXofPostStepLoops
std::size_t MAXofAlongStepLoops
G4ProcessVector * fAlongStepDoItVector
G4ProcessVector * fAtRestDoItVector
G4NoProcess const * fNoProcess
static const size_t SizeOfSelectedDoItVector
G4ProcessVector * fAlongStepGetPhysIntVector
G4StepPoint * fPreStepPoint
void ApplyProductionCut(G4Track *)
G4TrackVector * fSecondary
G4ForceCondition fCondition
G4ProcessVector * fPostStepGetPhysIntVector
std::size_t fPostStepDoItProcTriggered
G4VSteppingVerbose * fVerbose
G4GPILSelection fGPILSelection
G4SelectedPostStepDoItVector * fSelectedPostStepDoItVector
G4ProcessVector * fPostStepDoItVector
G4VParticleChange * fParticleChange
G4SelectedAtRestDoItVector * fSelectedAtRestDoItVector
G4StepStatus fStepStatus
std::size_t fAtRestDoItProcTriggered
G4VProcess * fCurrentProcess
G4ProcessVector * fAtRestGetPhysIntVector
G4TrackStatus GetTrackStatus() const
void SetTrackStatus(const G4TrackStatus aTrackStatus)
void SetStepLength(G4double value)
G4int GetTrackID() const
const G4VProcess * GetCreatorProcess() const
G4VPhysicalVolume * GetNextVolume() const
G4ParticleDefinition * GetDefinition() const
const G4DynamicParticle * GetDynamicParticle() const
G4double GetKineticEnergy() const
G4int GetParentID() const
void SetKineticEnergy(const G4double aValue)
G4bool IsGoodForTracking() const
void SetParentID(const G4int aValue)
void SetCreatorProcess(const G4VProcess *aValue)
virtual G4Step * UpdateStepForAlongStep(G4Step *Step)
virtual G4Step * UpdateStepForAtRest(G4Step *Step)
virtual G4Step * UpdateStepForPostStep(G4Step *Step)
G4int GetNumberOfSecondaries() const
G4Track * GetSecondary(G4int anIndex) const
G4TrackStatus GetTrackStatus() const
virtual G4VParticleChange * AtRestDoIt(const G4Track &track, const G4Step &stepData)=0
G4ProcessType GetProcessType() const
Definition: G4VProcess.hh:388
virtual G4VParticleChange * PostStepDoIt(const G4Track &track, const G4Step &stepData)=0
G4double PostStepGPIL(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition)
Definition: G4VProcess.hh:479
G4double AtRestGPIL(const G4Track &track, G4ForceCondition *condition)
Definition: G4VProcess.hh:472
virtual G4VParticleChange * AlongStepDoIt(const G4Track &track, const G4Step &stepData)=0
G4double AlongStepGPIL(const G4Track &track, G4double previousStepSize, G4double currentMinimumStep, G4double &proposedSafety, G4GPILSelection *selection)
Definition: G4VProcess.hh:461
const G4String & GetProcessName() const
Definition: G4VProcess.hh:382
virtual void AlongStepDoItOneByOne()=0
virtual void DPSLPostStep()=0
virtual void DPSLAlongStep()=0
virtual void PostStepDoItOneByOne()=0
virtual void DPSLStarted()=0
#define DBL_MIN
Definition: templates.hh:54
#define DBL_MAX
Definition: templates.hh:62