Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4ITStepProcessor2.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: G4ITStepProcessor2.cc 64057 2012-10-30 15:04:49Z 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 "G4LossTableManager.hh"
38#include "G4EnergyLossTables.hh"
39#include "G4ProductionCuts.hh"
41#include "G4VITProcess.hh"
43#include "G4IT.hh"
45#include "G4ITTransportation.hh"
46
47#include "G4ITNavigator.hh" // Include from 'geometry'
48//#include "G4Navigator.hh" // Include from 'geometry'
49
51{
52 // Now Store the secondaries from ParticleChange to SecondaryList
53 G4Track* tempSecondaryTrack;
54
55 for(G4int DSecLoop=0 ;
56 DSecLoop<fpParticleChange->GetNumberOfSecondaries() ;
57 DSecLoop++)
58 {
59 tempSecondaryTrack = fpParticleChange->GetSecondary(DSecLoop);
60
61 if(tempSecondaryTrack->GetDefinition()->GetApplyCutsFlag())
62 {
63 ApplyProductionCut(tempSecondaryTrack);
64 }
65
66 // Set parentID
67 tempSecondaryTrack->SetParentID( fpTrack->GetTrackID() );
68
69 // Set the process pointer which created this track
70 tempSecondaryTrack->SetCreatorProcess( fpCurrentProcess );
71
72 // If this 2ndry particle has 'zero' kinetic energy, make sure
73 // it invokes a rest process at the beginning of the tracking
74 if(tempSecondaryTrack->GetKineticEnergy() <= DBL_MIN)
75 {
76 G4ProcessManager* pm = tempSecondaryTrack->GetDefinition()->GetProcessManager();
77 if (pm->GetAtRestProcessVector()->entries()>0){
78 tempSecondaryTrack->SetTrackStatus( fStopButAlive );
79 fpSecondary->push_back( tempSecondaryTrack );
80 fN2ndariesAtRestDoIt++;
81 } else {
82 delete tempSecondaryTrack;
83 }
84 }
85 else
86 {
87 fpSecondary->push_back( tempSecondaryTrack );
88 counter++;
89 }
90 } //end of loop on secondary
91}
92
93//______________________________________________________________________________
94
95void G4ITStepProcessor::Stepping(G4Track* track, const double & timeStep)
96{
98 if(track == 0) return ; // maybe put an exception here
99 fTimeStep = timeStep ;
100 SetTrack(track);
101 DoStepping();
102}
103//______________________________________________________________________________
104
105// ************************************************************************
106// Stepping
107// ************************************************************************
109{
110 SetupMembers() ;
111
112 if(!fpProcessInfo)
113 {
114 G4ExceptionDescription exceptionDescription ;
115 exceptionDescription << "No process info found for particle :"
116 << fpTrack->GetDefinition()->GetParticleName();
117 G4Exception("G4ITStepProcessor::DoStepping","ITStepProcessor0012",
118 FatalErrorInArgument,exceptionDescription);
119 return ;
120 }
121 else if(fpTrack->GetTrackStatus() == fStopAndKill )
122 {
123 fpState->fStepStatus = fUndefined;
124 return ;
125 }
126
127 if(fpProcessInfo->MAXofPostStepLoops == 0
128 && fpProcessInfo->MAXofAlongStepLoops == 0
129 && fpProcessInfo->MAXofAtRestLoops == 0)
130 {
131 fpTrack -> SetTrackStatus(fStopAndKill) ;
132 fpState->fStepStatus = fUndefined;
133 return ;
134 }
135 //---------------------------------
136 // AtRestStep, AlongStep and PostStep Processes
137 //---------------------------------
138 else
139 {
140 fpNavigator->SetNavigatorState(fpITrack->GetTrackingInfo()->GetNavigatorState());
141 fpNavigator->ResetHierarchyAndLocate( fpTrack->GetPosition(),
142 fpTrack->GetMomentumDirection(),
143 *((G4TouchableHistory*)fpTrack->GetTouchableHandle()()) );
144 fpNavigator->SetNavigatorState(fpITrack->GetTrackingInfo()->GetNavigatorState());
145 // We reset the navigator state before checking for AtRest
146 // in case a AtRest processe would use a navigator info
147
148 if( fpTrack->GetTrackStatus() == fStopButAlive )
149 {
150 if( fpProcessInfo->MAXofAtRestLoops>0 &&
151 fpProcessInfo->fpAtRestDoItVector != 0) // second condition to make coverity happy
152 {
153 //-----------------
154 // AtRestStepDoIt
155 //-----------------
157 fpState->fStepStatus = fAtRestDoItProc;
158 fpStep->GetPostStepPoint()->SetStepStatus( fpState->fStepStatus );
159
160 }
161 // Make sure the track is killed
162 fpTrack->SetTrackStatus( fStopAndKill );
163 }
164 else // if(fTimeStep > 0.) // Bye, because PostStepIL can return 0 => time =0
165 {
166 if(fpITrack == 0)
167 {
168 G4ExceptionDescription exceptionDescription ;
169 exceptionDescription
170 << " !!! TrackID : "<< fpTrack->GetTrackID() << G4endl
171 << " !!! Track status : "<< fpTrack->GetTrackStatus() << G4endl
172 << " !!! Particle Name : "<< fpTrack -> GetDefinition() -> GetParticleName() << G4endl
173 << "No G4ITStepProcessor::fpITrack found" << G4endl;
174
175 G4Exception("G4ITStepProcessor::DoStepping","ITStepProcessor0013",
176 FatalErrorInArgument,exceptionDescription);
177 return ; // to make coverity happy
178 }
179
180 if(fpITrack->GetTrackingInfo()->IsLeadingStep() == false)
181 {
182 // In case the track has NOT the minimum step length
183 // Given the final step time, the transportation
184 // will compute the final position of the particle
185
186 fpState->fStepStatus = fPostStepDoItProc;
187 fpStep->GetPostStepPoint()
188 ->SetProcessDefinedStep(fpTransportation);
190 }
191
192
193 // Store the Step length (geometrical length) to G4Step and G4Track
194 fpTrack->SetStepLength( fpState->fPhysicalStep );
195 fpStep->SetStepLength( fpState->fPhysicalStep );
196
197 G4double GeomStepLength = fpState->fPhysicalStep;
198
199 // Store StepStatus to PostStepPoint
200 fpStep->GetPostStepPoint()->SetStepStatus( fpState->fStepStatus );
201
202 // Invoke AlongStepDoIt
204
205 // Update track by taking into account all changes by AlongStepDoIt
206 // fpStep->UpdateTrack(); // done in InvokeAlongStepDoItProcs
207
208 // Update safety after invocation of all AlongStepDoIts
209 fpState->endpointSafOrigin= fpPostStepPoint->GetPosition();
210
211 fpState->endpointSafety= std::max( fpState->proposedSafety - GeomStepLength, kCarTolerance);
212
213 fpStep->GetPostStepPoint()->SetSafety( fpState->endpointSafety );
214
215 if(GetIT(fpTrack)->GetTrackingInfo()->IsLeadingStep())
216 {
217 // Invoke PostStepDoIt including G4ITTransportation::PSDI
219 }
220 else
221 {
222 // Only invoke transportation
224 }
225 }
226
227 fpITrack->GetTrackingInfo()->SetNavigatorState(fpNavigator->GetNavigatorState());
228 fpNavigator->SetNavigatorState(0);
229 }
230 //-------
231 // Finale
232 //-------
233
234 // Update 'TrackLength' and remeber the Step length of the current Step
235 fpTrack->AddTrackLength(fpStep->GetStepLength());
237
238 // Send G4Step information to Hit/Dig if the volume is sensitive
239/***
240 fpCurrentVolume = fpStep->GetPreStepPoint()->GetPhysicalVolume();
241 StepControlFlag = fpStep->GetControlFlag();
242
243 if( fpCurrentVolume != 0 && StepControlFlag != AvoidHitInvocation)
244 {
245 fpSensitive = fpStep->GetPreStepPoint()->
246 GetSensitiveDetector();
247 if( fpSensitive != 0 )
248 {
249 fpSensitive->Hit(fpStep);
250 }
251 }
252
253 User intervention process.
254 if( fpUserSteppingAction != 0 )
255 {
256 fpUserSteppingAction->UserSteppingAction(fpStep);
257 }
258 G4UserSteppingAction* regionalAction
259 = fpStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume()->GetRegion()
260 ->GetRegionalSteppingAction();
261 if( regionalAction ) regionalAction->UserSteppingAction(fpStep);
262***/
263 fpTrackingManager->AppendStep(fpTrack,fpStep);
264 // Stepping process finish. Return the value of the StepStatus.
265
266 // return fpState->fStepStatus;
267}
268
269//______________________________________________________________________________
270
271// ************************************************************************
272// AtRestDoIt
273// ************************************************************************
274
276{
277 fpStep->SetStepLength( 0. ); //the particle has stopped
278 fpTrack->SetStepLength( 0. );
279
280 G4SelectedAtRestDoItVector& selectedAtRestDoItVector = fpState->fSelectedAtRestDoItVector;
281
282 // invoke selected process
283 for(size_t np=0; np < fpProcessInfo->MAXofAtRestLoops; np++)
284 {
285 //
286 // Note: DoItVector has inverse order against GetPhysIntVector
287 // and SelectedAtRestDoItVector.
288 //
289 if( selectedAtRestDoItVector[fpProcessInfo->MAXofAtRestLoops-np-1] != InActivated)
290 {
291 fpCurrentProcess = (G4VITProcess*) (*fpProcessInfo->fpAtRestDoItVector)[np];
292
293 fpCurrentProcess->SetProcessState(
294 fpTrackingInfo->GetProcessState(fpCurrentProcess->GetProcessID()));
295 fpParticleChange
296 = fpCurrentProcess->AtRestDoIt( *fpTrack, *fpStep);
297 fpCurrentProcess->SetProcessState(0);
298
299 // Set the current process as a process which defined this Step length
300 fpStep->GetPostStepPoint()
301 ->SetProcessDefinedStep(fpCurrentProcess);
302
303 // Update Step
304 fpParticleChange->UpdateStepForAtRest(fpStep);
305
306 // Now Store the secondaries from ParticleChange to SecondaryList
307 DealWithSecondaries(fN2ndariesAtRestDoIt) ;
308
309 // clear ParticleChange
310 fpParticleChange->Clear();
311
312 } //if(fSelectedAtRestDoItVector[np] != InActivated){
313 } //for(size_t np=0; np < MAXofAtRestLoops; np++){
314 fpStep->UpdateTrack();
315
316 fpTrack->SetTrackStatus( fStopAndKill );
317}
318
319//______________________________________________________________________________
320
321// ************************************************************************
322// AlongStepDoIt
323// ************************************************************************
324
326{
327
328 // If the current Step is defined by a 'ExclusivelyForced'
329 // PostStepDoIt, then don't invoke any AlongStepDoIt
330 if(fpState->fStepStatus == fExclusivelyForcedProc)
331 {
332 return; // Take note 'return' at here !!!
333 }
334
335 // Invoke the all active continuous processes
336 for( size_t ci=0 ; ci<fpProcessInfo->MAXofAlongStepLoops ; ci++ )
337 {
338 fpCurrentProcess = (G4VITProcess*) (*fpProcessInfo->fpAlongStepDoItVector)[ci];
339 if (fpCurrentProcess== 0) continue;
340 // NULL means the process is inactivated by a user on fly.
341
342 fpCurrentProcess->SetProcessState(fpTrackingInfo->GetProcessState(fpCurrentProcess->GetProcessID()));
343 fpParticleChange
344 = fpCurrentProcess->AlongStepDoIt( *fpTrack, *fpStep );
345 fpCurrentProcess->SetProcessState(0);
346 // Update the PostStepPoint of Step according to ParticleChange
347
348 fpParticleChange->UpdateStepForAlongStep(fpStep);
349
350 // Now Store the secondaries from ParticleChange to SecondaryList
351 DealWithSecondaries(fN2ndariesAlongStepDoIt) ;
352
353 // Set the track status according to what the process defined
354 // if kinetic energy >0, otherwise set fStopButAlive
355 fpTrack->SetTrackStatus( fpParticleChange->GetTrackStatus() );
356
357 // clear ParticleChange
358 fpParticleChange->Clear();
359 }
360
361 fpStep->UpdateTrack();
362
363 G4TrackStatus fNewStatus = fpTrack->GetTrackStatus();
364
365 if ( fNewStatus == fAlive && fpTrack->GetKineticEnergy() <= DBL_MIN )
366 {
367 // G4cout << "G4ITStepProcessor::InvokeAlongStepDoItProcs : Track will be killed" << G4endl;
368 if(fpProcessInfo->MAXofAtRestLoops>0) fNewStatus = fStopButAlive;
369 else fNewStatus = fStopAndKill;
370 fpTrack->SetTrackStatus( fNewStatus );
371 }
372
373}
374
375//______________________________________________________________________________
376
377
378// ************************************************************************
379// PostStepDoIt
380// ************************************************************************
381
382
384{
385
386 G4SelectedPostStepDoItVector& selectedPostStepDoItVector = fpState->fSelectedPostStepDoItVector;
387 G4StepStatus& stepStatus = fpState->fStepStatus;
388
389 // Invoke the specified discrete processes
390 for(size_t np=0; np < fpProcessInfo->MAXofPostStepLoops; np++)
391 {
392 //
393 // Note: DoItVector has inverse order against GetPhysIntVector
394 // and SelectedPostStepDoItVector.
395 //
396 G4int Cond = selectedPostStepDoItVector[fpProcessInfo->MAXofPostStepLoops-np-1];
397 if(Cond != InActivated)
398 {
399 if( ((Cond == NotForced) && (stepStatus == fPostStepDoItProc)) ||
400 ((Cond == Forced) && (stepStatus != fExclusivelyForcedProc)) ||
401 // ((Cond == Conditionally) && (stepStatus == fAlongStepDoItProc)) ||
402 ((Cond == ExclusivelyForced) && (stepStatus == fExclusivelyForcedProc)) ||
403 ((Cond == StronglyForced) )
404 )
405 {
406
407 InvokePSDIP(np);
408 }
409 } //if(*fSelectedPostStepDoItVector(np)........
410
411 // Exit from PostStepLoop if the track has been killed,
412 // but extra treatment for processes with Strongly Forced flag
413 if(fpTrack->GetTrackStatus() == fStopAndKill)
414 {
415 for(size_t np1=np+1; np1 < fpProcessInfo->MAXofPostStepLoops; np1++)
416 {
417 G4int Cond2 = selectedPostStepDoItVector[fpProcessInfo->MAXofPostStepLoops-np1-1];
418 if (Cond2 == StronglyForced)
419 {
420 InvokePSDIP(np1);
421 }
422 }
423 break;
424 }
425 } //for(size_t np=0; np < MAXofPostStepLoops; np++){
426}
427
428//______________________________________________________________________________
429
431{
432 fpCurrentProcess = (G4VITProcess*) (*fpProcessInfo->fpPostStepDoItVector)[np];
433
434 fpCurrentProcess->SetProcessState(fpTrackingInfo->GetProcessState(fpCurrentProcess->GetProcessID()));
435 fpParticleChange
436 = fpCurrentProcess->PostStepDoIt( *fpTrack, *fpStep);
437 fpCurrentProcess->SetProcessState(0);
438
439 // Update PostStepPoint of Step according to ParticleChange
440 fpParticleChange->UpdateStepForPostStep(fpStep);
441
442 // Update G4Track according to ParticleChange after each PostStepDoIt
443 fpStep->UpdateTrack();
444
445 // Update safety after each invocation of PostStepDoIts
447
448 // Now Store the secondaries from ParticleChange to SecondaryList
449 DealWithSecondaries(fN2ndariesPostStepDoIt) ;
450
451 // Set the track status according to what the process defined
452 fpTrack->SetTrackStatus( fpParticleChange->GetTrackStatus() );
453
454 // clear ParticleChange
455 fpParticleChange->Clear();
456}
457
458//______________________________________________________________________________
459
460// ************************************************************************
461// Transport on a given time
462// ************************************************************************
463
465{
466 double physicalStep(0.) ;
467
468 fpTransportation = fpProcessInfo->fpTransportation;
469 // dynamic_cast<G4ITTransportation*>((fpProcessInfo->fpAlongStepGetPhysIntVector)[MAXofAlongStepLoops-1]);
470
471 if(!fpTrack)
472 {
473 G4ExceptionDescription exceptionDescription ;
474 exceptionDescription
475 << "No G4ITStepProcessor::fpTrack found";
476 G4Exception("G4ITStepProcessor::FindTransportationStep","ITStepProcessor0013",
477 FatalErrorInArgument,exceptionDescription);
478 return;
479
480 }
481 if(!fpITrack)
482 {
483 G4ExceptionDescription exceptionDescription ;
484 exceptionDescription
485 << "No G4ITStepProcessor::fITrack" ;
486 G4Exception("G4ITStepProcessor::FindTransportationStep","ITStepProcessor0014",
487 FatalErrorInArgument,exceptionDescription);
488 return;
489 }
490 if(!(fpITrack->GetTrack()))
491 {
492 G4ExceptionDescription exceptionDescription ;
493 exceptionDescription
494 << "No G4ITStepProcessor::fITrack->GetTrack()" ;
495 G4Exception("G4ITStepProcessor::FindTransportationStep","ITStepProcessor0015",
496 FatalErrorInArgument,exceptionDescription);
497 return;
498 }
499
500 if(fpTransportation)
501 {
502 fpTransportation->SetProcessState(fpTrackingInfo->GetProcessState(fpTransportation->GetProcessID()));
503 fpTransportation->ComputeStep(*fpTrack, *fpStep, fTimeStep, physicalStep) ;
504 fpTransportation->SetProcessState(0);
505 }
506
507 if(physicalStep >= DBL_MAX)
508 {
509 fpTrack -> SetTrackStatus(fStopAndKill) ;
510 return ;
511 }
512
513 fpState->fPhysicalStep = physicalStep ;
514}
515
516//______________________________________________________________________________
517
519{
520 size_t _MAXofPostStepLoops = fpProcessInfo->MAXofPostStepLoops;
521 G4SelectedPostStepDoItVector& selectedPostStepDoItVector = fpState->fSelectedPostStepDoItVector;
522 G4StepStatus& stepStatus = fpState->fStepStatus;
523
524 // Invoke the specified discrete processes
525 for(size_t np=0; np < _MAXofPostStepLoops; np++)
526 {
527 //
528 // Note: DoItVector has inverse order against GetPhysIntVector
529 // and SelectedPostStepDoItVector.
530 //
531 G4int Cond = selectedPostStepDoItVector[_MAXofPostStepLoops-np-1];
532 if(Cond != InActivated)
533 {
534 if(
535 ((Cond == Forced) && (stepStatus != fExclusivelyForcedProc)) ||
536 // ((Cond == Conditionally) && (stepStatus == fAlongStepDoItProc)) ||
537 ((Cond == ExclusivelyForced) && (stepStatus == fExclusivelyForcedProc)) ||
538 ((Cond == StronglyForced) )
539 )
540 {
541
542 InvokePSDIP(np);
543 }
544 } //if(*fSelectedPostStepDoItVector(np)........
545
546 // Exit from PostStepLoop if the track has been killed,
547 // but extra treatment for processes with Strongly Forced flag
548 if(fpTrack->GetTrackStatus() == fStopAndKill)
549 {
550 for(size_t np1=np+1; np1 < _MAXofPostStepLoops; np1++)
551 {
552 G4int Cond2 = selectedPostStepDoItVector[_MAXofPostStepLoops-np1-1];
553 if (Cond2 == StronglyForced)
554 {
555 InvokePSDIP(np1);
556 }
557 }
558 break;
559 }
560 }
561}
562
563//______________________________________________________________________________
564
565// ************************************************************************
566// Apply cuts
567// ************************************************************************
568
569
571{
572 G4bool tBelowCutEnergyAndSafety = false;
573 G4int tPtclIdx
575 if (tPtclIdx<0)
576 {
577 return;
578 }
579 G4ProductionCutsTable* tCutsTbl
581 G4int tCoupleIdx
582 = tCutsTbl->GetCoupleIndex(fpPreStepPoint->GetMaterialCutsCouple());
583 G4double tProdThreshold
584 = (*(tCutsTbl->GetEnergyCutsVector(tPtclIdx)))[tCoupleIdx];
585 if( aSecondary->GetKineticEnergy()<tProdThreshold )
586 {
587 tBelowCutEnergyAndSafety = true;
588 if(std::abs(aSecondary->GetDynamicParticle()->GetCharge()) > DBL_MIN)
589 {
590 G4double currentRange
592 aSecondary->GetKineticEnergy(),
593 fpPreStepPoint->GetMaterialCutsCouple());
594 tBelowCutEnergyAndSafety = (currentRange < CalculateSafety() );
595 }
596 }
597
598 if( tBelowCutEnergyAndSafety )
599 {
600 if( !(aSecondary->IsGoodForTracking()) )
601 {
602 // Add kinetic energy to the total energy deposit
603 fpStep->AddTotalEnergyDeposit(
604 aSecondary->GetKineticEnergy() );
605 aSecondary->SetKineticEnergy(0.0);
606 }
607 }
608}
@ FatalErrorInArgument
@ InActivated
@ StronglyForced
@ NotForced
@ ExclusivelyForced
@ Forced
class std::vector< int, std::allocator< int > > G4SelectedPostStepDoItVector
class std::vector< int, std::allocator< int > > G4SelectedAtRestDoItVector
G4IT * GetIT(const G4Track *track)
Definition: G4IT.cc:48
G4StepStatus
Definition: G4StepStatus.hh:51
@ fUndefined
Definition: G4StepStatus.hh:66
@ fPostStepDoItProc
Definition: G4StepStatus.hh:60
@ fAtRestDoItProc
Definition: G4StepStatus.hh:56
@ fExclusivelyForcedProc
Definition: G4StepStatus.hh:64
G4TrackStatus
@ fAlive
@ fStopAndKill
@ fStopButAlive
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
#define G4endl
Definition: G4ios.hh:52
G4double GetCharge() const
void SetNavigatorState(G4ITNavigatorState_Lock *)
G4ITNavigatorState_Lock * GetNavigatorState()
virtual G4VPhysicalVolume * ResetHierarchyAndLocate(const G4ThreeVector &point, const G4ThreeVector &direction, const G4TouchableHistory &h)
void DealWithSecondaries(G4int &)
void SetTrack(G4Track *)
void Stepping(G4Track *, const double &)
void ApplyProductionCut(G4Track *)
virtual void AppendStep(G4Track *track, G4Step *step)
virtual void ComputeStep(const G4Track &, const G4Step &, const double timeStep, double &spaceStep)
G4TrackingInformation * GetTrackingInfo()
Definition: G4IT.hh:134
G4Track * GetTrack()
Definition: G4IT.hh:207
static G4LossTableManager * Instance()
G4double GetRange(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
G4ProcessManager * GetProcessManager() const
G4bool GetApplyCutsFlag() const
const G4String & GetParticleName() const
G4ProcessVector * GetAtRestProcessVector(G4ProcessVectorTypeIndex typ=typeGPIL) const
G4int entries() const
const std::vector< G4double > * GetEnergyCutsVector(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 G4ThreeVector & GetPosition() const
const G4MaterialCutsCouple * GetMaterialCutsCouple() const
void UpdateTrack()
void SetStepLength(G4double value)
void AddTotalEnergyDeposit(G4double value)
G4double GetStepLength() const
G4StepPoint * GetPostStepPoint() const
G4TrackStatus GetTrackStatus() const
void SetTrackStatus(const G4TrackStatus aTrackStatus)
void SetStepLength(G4double value)
G4int GetTrackID() const
const G4ThreeVector & GetPosition() const
G4ParticleDefinition * GetDefinition() const
void AddTrackLength(const G4double aValue)
const G4DynamicParticle * GetDynamicParticle() const
const G4TouchableHandle & GetTouchableHandle() const
const G4ThreeVector & GetMomentumDirection() const
G4double GetKineticEnergy() const
void IncrementCurrentStepNumber()
void SetKineticEnergy(const G4double aValue)
G4bool IsGoodForTracking() const
void SetParentID(const G4int aValue)
void SetCreatorProcess(const G4VProcess *aValue)
G4ProcessState_Lock * GetProcessState(size_t index)
void SetNavigatorState(G4ITNavigatorState_Lock *)
G4ITNavigatorState_Lock * GetNavigatorState() const
size_t GetProcessID() const
Definition: G4VITProcess.hh:80
void SetProcessState(G4ProcessState_Lock *aProcInfo)
Definition: G4VITProcess.hh:90
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
virtual G4VParticleChange * PostStepDoIt(const G4Track &track, const G4Step &stepData)=0
virtual G4VParticleChange * AlongStepDoIt(const G4Track &track, const G4Step &stepData)=0
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
std::ostringstream G4ExceptionDescription
Definition: globals.hh:76
#define DBL_MIN
Definition: templates.hh:75
#define DBL_MAX
Definition: templates.hh:83