Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4ParticleChange.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//
27// $Id$
28//
29//
30// --------------------------------------------------------------
31// GEANT 4 class implementation file
32//
33//
34//
35// ------------------------------------------------------------
36// Implemented for the new scheme 23 Mar. 1998 H.Kurahige
37// Change default debug flag to false 10 May. 1998 H.Kurahige
38// Add Track weight 12 Nov. 1998 H.Kurashige
39// Activate CheckIt method for VERBOSE mode 14 Dec. 1998 H.Kurashige
40// Modified CheckIt method for time 9 Feb. 1999 H.Kurashige
41// Rename SetXXX methods to ProposeXXX DynamicCharge Oct. 2005 H.Kurashige
42// Add get/ProposeMagneticMoment Mar 2007 H.Kurashige
43// --------------------------------------------------------------
44
45#include "G4ParticleChange.hh"
47#include "G4SystemOfUnits.hh"
48#include "G4Track.hh"
49#include "G4Step.hh"
50#include "G4TrackFastVector.hh"
51#include "G4DynamicParticle.hh"
53
56 theMomentumDirectionChange(),
57 thePolarizationChange(),
58 theEnergyChange(0.),
59 theVelocityChange(0.), isVelocityChanged(false),
60 thePositionChange(),
61 theGlobalTime0(0.), theLocalTime0(0.),
62 theTimeChange(0.), theProperTimeChange(0.),
63 theMassChange(0.), theChargeChange(0.),
64 theMagneticMomentChange(0.), theCurrentTrack(0)
65{
66}
67
69{
70#ifdef G4VERBOSE
71 if (verboseLevel>2) {
72 G4cout << "G4ParticleChange::~G4ParticleChange() " << G4endl;
73 }
74#endif
75}
76
77// copy constructor
79 : G4VParticleChange(right)
80{
81 if (verboseLevel>1) {
82 G4cout << "G4ParticleChange:: copy constructor is called " << G4endl;
83 }
85
95 isVelocityChanged = true;
99}
100
101// assignemnt operator
103{
104#ifdef G4VERBOSE
105 if (verboseLevel>1) {
106 G4cout << "G4ParticleChange:: assignment operator is called " << G4endl;
107 }
108#endif
109 if (this != &right){
111#ifdef G4VERBOSE
112 if (verboseLevel>0) {
113 G4cout << "G4ParticleChange: assignment operator Warning ";
114 G4cout << "theListOfSecondaries is not empty ";
115 }
116#endif
117 for (G4int index= 0; index<theNumberOfSecondaries; index++){
118 if ( (*theListOfSecondaries)[index] ) delete (*theListOfSecondaries)[index] ;
119 }
120 }
121 delete theListOfSecondaries;
122
125 for (G4int index = 0; index<theNumberOfSecondaries; index++){
126 G4Track* newTrack = new G4Track(*((*right.theListOfSecondaries)[index] ));
127 theListOfSecondaries->SetElement(index, newTrack); }
128
131
141 isVelocityChanged = true;
145
149 }
150 return *this;
151}
152
154{
155 return ((G4VParticleChange *)this == (G4VParticleChange *) &right);
156}
157
159{
160 return ((G4VParticleChange *)this != (G4VParticleChange *) &right);
161}
162
163
164//----------------------------------------------------------------
165// methods for handling secondaries
166//
167
169 G4bool IsGoodForTracking )
170{
171 // create track
172 G4Track* aTrack = new G4Track(aParticle, GetGlobalTime(), thePositionChange);
173
174 // set IsGoodGorTrackingFlag
175 if (IsGoodForTracking) aTrack->SetGoodForTrackingFlag();
176
177 // Touchable handle is copied to keep the pointer
179
180 // add a secondary
182}
183
185 G4ThreeVector newPosition,
186 G4bool IsGoodForTracking )
187{
188 // create track
189 G4Track* aTrack = new G4Track(aParticle, GetGlobalTime(), newPosition);
190
191 // set IsGoodGorTrackingFlag
192 if (IsGoodForTracking) aTrack->SetGoodForTrackingFlag();
193
194 // Touchable is a temporary object, so you cannot keep the pointer
195 aTrack->SetTouchableHandle((G4VTouchable*)0);
196
197 // add a secondary
199}
200
202 G4double newTime,
203 G4bool IsGoodForTracking )
204{
205 // create track
206 G4Track* aTrack = new G4Track(aParticle, newTime, thePositionChange);
207
208 // set IsGoodGorTrackingFlag
209 if (IsGoodForTracking) aTrack->SetGoodForTrackingFlag();
210
211 // Touchable handle is copied to keep the pointer
213
214 // add a secondary
216}
217
219{
220 // add a secondary
222}
223
224//----------------------------------------------------------------
225// functions for Initialization
226//
227
229{
230 // use base class's method at first
232 theCurrentTrack= &track;
233
234 // set Energy/Momentum etc. equal to those of the parent particle
235 const G4DynamicParticle* pParticle = track.GetDynamicParticle();
236 theEnergyChange = pParticle->GetKineticEnergy();
238 isVelocityChanged = false;
241 theProperTimeChange = pParticle->GetProperTime();
242
243 // Set mass/charge/MagneticMoment of DynamicParticle
244 theMassChange = pParticle->GetMass();
245 theChargeChange = pParticle->GetCharge();
247
248 // set Position equal to those of the parent track
250
251 // set TimeChange equal to local time of the parent track
252 theTimeChange = track.GetLocalTime();
253
254 // set initial Local/Global time of the parent track
255 theLocalTime0 = track.GetLocalTime();
257
258}
259
260//----------------------------------------------------------------
261// methods for updating G4Step
262//
263
265{
266 // A physics process always calculates the final state of the
267 // particle relative to the initial state at the beginning
268 // of the Step, i.e., based on information of G4Track (or
269 // equivalently the PreStepPoint).
270 // So, the differences (delta) between these two states have to be
271 // calculated and be accumulated in PostStepPoint.
272
273 // Take note that the return type of GetMomentumDirectionChange is a
274 // pointer to G4ParticleMometum. Also it is a normalized
275 // momentum vector.
276
277 G4StepPoint* pPreStepPoint = pStep->GetPreStepPoint();
278 G4StepPoint* pPostStepPoint = pStep->GetPostStepPoint();
279 G4double mass = theMassChange;
280
281 // Set Mass/Charge/MagneticMoment
282 pPostStepPoint->SetMass(theMassChange);
283 pPostStepPoint->SetCharge(theChargeChange);
285
286 // calculate new kinetic energy
287 G4double energy = pPostStepPoint->GetKineticEnergy()
288 + (theEnergyChange - pPreStepPoint->GetKineticEnergy());
289
290 // update kinetic energy and momentum direction
291 if (energy > 0.0) {
292 // calculate new momentum
293 G4ThreeVector pMomentum = pPostStepPoint->GetMomentum()
295 - pPreStepPoint->GetMomentum());
296 G4double tMomentum = pMomentum.mag();
297 G4ThreeVector direction(1.0,0.0,0.0);
298 if( tMomentum > 0. ){
299 G4double inv_Momentum= 1.0 / tMomentum;
300 direction= pMomentum * inv_Momentum;
301 }
302 pPostStepPoint->SetMomentumDirection(direction);
303 pPostStepPoint->SetKineticEnergy( energy );
304 } else {
305 // stop case
306 //pPostStepPoint->SetMomentumDirection(G4ThreeVector(1., 0., 0.));
307 pPostStepPoint->SetKineticEnergy(0.0);
308 }
309
311 pPostStepPoint->SetVelocity(theVelocityChange);
312
313 // update polarization
315 - pPreStepPoint->GetPolarization());
316
317 // update position and time
318 pPostStepPoint->AddPosition( thePositionChange
319 - pPreStepPoint->GetPosition() );
320 pPostStepPoint->AddGlobalTime(theTimeChange - theLocalTime0);
321 pPostStepPoint->AddLocalTime( theTimeChange - theLocalTime0 );
322 pPostStepPoint->AddProperTime( theProperTimeChange
323 - pPreStepPoint->GetProperTime());
324
326 pPostStepPoint->SetWeight( theParentWeight );
327 }
328
329#ifdef G4VERBOSE
330 G4Track* aTrack = pStep->GetTrack();
331 if (debugFlag) CheckIt(*aTrack);
332#endif
333
334 // Update the G4Step specific attributes
335 return UpdateStepInfo(pStep);
336}
337
339{
340 // A physics process always calculates the final state of the particle
341
342 // Take note that the return type of GetMomentumChange is a
343 // pointer to G4ParticleMometum. Also it is a normalized
344 // momentum vector.
345
346 G4StepPoint* pPostStepPoint = pStep->GetPostStepPoint();
347
348 // Set Mass/Charge
349 pPostStepPoint->SetMass(theMassChange);
350 pPostStepPoint->SetCharge(theChargeChange);
352
353 // update kinetic energy and momentum direction
355 pPostStepPoint->SetKineticEnergy( theEnergyChange );
357 pPostStepPoint->SetVelocity(theVelocityChange);
358
359 // update polarization
360 pPostStepPoint->SetPolarization( thePolarizationChange );
361
362 // update position and time
363 pPostStepPoint->SetPosition( thePositionChange );
364 pPostStepPoint->AddGlobalTime(theTimeChange - theLocalTime0);
365 pPostStepPoint->SetLocalTime( theTimeChange );
366 pPostStepPoint->SetProperTime( theProperTimeChange );
367
369 pPostStepPoint->SetWeight( theParentWeight );
370 }
371
372#ifdef G4VERBOSE
373 G4Track* aTrack = pStep->GetTrack();
374 if (debugFlag) CheckIt(*aTrack);
375#endif
376
377 // Update the G4Step specific attributes
378 return UpdateStepInfo(pStep);
379}
380
381
383{
384 // A physics process always calculates the final state of the particle
385
386 G4StepPoint* pPostStepPoint = pStep->GetPostStepPoint();
387
388 // Set Mass/Charge
389 pPostStepPoint->SetMass(theMassChange);
390 pPostStepPoint->SetCharge(theChargeChange);
392
393 // update kinetic energy and momentum direction
395 pPostStepPoint->SetKineticEnergy( theEnergyChange );
397 pPostStepPoint->SetVelocity(theVelocityChange);
398
399 // update polarization
400 pPostStepPoint->SetPolarization( thePolarizationChange );
401
402 // update position and time
403 pPostStepPoint->SetPosition( thePositionChange );
404 pPostStepPoint->AddGlobalTime(theTimeChange - theLocalTime0);
405 pPostStepPoint->SetLocalTime( theTimeChange );
406 pPostStepPoint->SetProperTime( theProperTimeChange );
407
409 pPostStepPoint->SetWeight( theParentWeight );
410 }
411
412#ifdef G4VERBOSE
413 G4Track* aTrack = pStep->GetTrack();
414 if (debugFlag) CheckIt(*aTrack);
415#endif
416
417 // Update the G4Step specific attributes
418 return UpdateStepInfo(pStep);
419}
420
421//----------------------------------------------------------------
422// methods for printing messages
423//
424
426{
427// use base-class DumpInfo
429
430 G4int oldprc = G4cout.precision(3);
431
432 G4cout << " Mass (GeV) : "
433 << std::setw(20) << theMassChange/GeV
434 << G4endl;
435 G4cout << " Charge (eplus) : "
436 << std::setw(20) << theChargeChange/eplus
437 << G4endl;
438 G4cout << " MagneticMoment : "
439 << std::setw(20) << theMagneticMomentChange << G4endl;
440 G4cout << " : = " << std::setw(20)
441 << theMagneticMomentChange*2.*theMassChange/c_squared/eplus/hbar_Planck
442 << "*[e hbar]/[2 m]"
443 << G4endl;
444 G4cout << " Position - x (mm) : "
445 << std::setw(20) << thePositionChange.x()/mm
446 << G4endl;
447 G4cout << " Position - y (mm) : "
448 << std::setw(20) << thePositionChange.y()/mm
449 << G4endl;
450 G4cout << " Position - z (mm) : "
451 << std::setw(20) << thePositionChange.z()/mm
452 << G4endl;
453 G4cout << " Time (ns) : "
454 << std::setw(20) << theTimeChange/ns
455 << G4endl;
456 G4cout << " Proper Time (ns) : "
457 << std::setw(20) << theProperTimeChange/ns
458 << G4endl;
459 G4cout << " Momentum Direct - x : "
460 << std::setw(20) << theMomentumDirectionChange.x()
461 << G4endl;
462 G4cout << " Momentum Direct - y : "
463 << std::setw(20) << theMomentumDirectionChange.y()
464 << G4endl;
465 G4cout << " Momentum Direct - z : "
466 << std::setw(20) << theMomentumDirectionChange.z()
467 << G4endl;
468 G4cout << " Kinetic Energy (MeV): "
469 << std::setw(20) << theEnergyChange/MeV
470 << G4endl;
471 G4cout << " Velocity (/c): "
472 << std::setw(20) << theVelocityChange/c_light
473 << G4endl;
474 G4cout << " Polarization - x : "
475 << std::setw(20) << thePolarizationChange.x()
476 << G4endl;
477 G4cout << " Polarization - y : "
478 << std::setw(20) << thePolarizationChange.y()
479 << G4endl;
480 G4cout << " Polarization - z : "
481 << std::setw(20) << thePolarizationChange.z()
482 << G4endl;
483 G4cout.precision(oldprc);
484}
485
487{
488 G4bool exitWithError = false;
489 G4double accuracy;
490 static G4int nError = 0;
491#ifdef G4VERBOSE
492 const G4int maxError = 30;
493#endif
494
495 // No check in case of "fStopAndKill"
497
498 // MomentumDirection should be unit vector
499 G4bool itsOKforMomentum = true;
500 if ( theEnergyChange >0.) {
501 accuracy = std::fabs(theMomentumDirectionChange.mag2()-1.0);
502 if (accuracy > accuracyForWarning) {
503 itsOKforMomentum = false;
504 nError += 1;
505 exitWithError = exitWithError || (accuracy > accuracyForException);
506#ifdef G4VERBOSE
507 if (nError < maxError) {
508 G4cout << " G4ParticleChange::CheckIt : ";
509 G4cout << "the Momentum Change is not unit vector !!"
510 << " Difference: " << accuracy << G4endl;
512 << " E=" << aTrack.GetKineticEnergy()/MeV
513 << " pos=" << aTrack.GetPosition().x()/m
514 << ", " << aTrack.GetPosition().y()/m
515 << ", " << aTrack.GetPosition().z()/m
516 <<G4endl;
517 }
518#endif
519 }
520 }
521
522 // Both global and proper time should not go back
523 G4bool itsOKforGlobalTime = true;
524 accuracy = (aTrack.GetLocalTime()- theTimeChange)/ns;
525 if (accuracy > accuracyForWarning) {
526 itsOKforGlobalTime = false;
527 nError += 1;
528 exitWithError = exitWithError || (accuracy > accuracyForException);
529#ifdef G4VERBOSE
530 if (nError < maxError) {
531 G4cout << " G4ParticleChange::CheckIt : ";
532 G4cout << "the local time goes back !!"
533 << " Difference: " << accuracy << "[ns] " <<G4endl;
535 << " E=" << aTrack.GetKineticEnergy()/MeV
536 << " pos=" << aTrack.GetPosition().x()/m
537 << ", " << aTrack.GetPosition().y()/m
538 << ", " << aTrack.GetPosition().z()/m
539 << " global time=" << aTrack.GetGlobalTime()/ns
540 << " local time=" << aTrack.GetLocalTime()/ns
541 << " proper time=" << aTrack.GetProperTime()/ns
542 << G4endl;
543 }
544#endif
545 }
546
547 G4bool itsOKforProperTime = true;
548 accuracy = (aTrack.GetProperTime() - theProperTimeChange )/ns;
549 if (accuracy > accuracyForWarning) {
550 itsOKforProperTime = false;
551 nError += 1;
552 exitWithError = exitWithError || (accuracy > accuracyForException);
553#ifdef G4VERBOSE
554 if (nError < maxError) {
555 G4cout << " G4ParticleChange::CheckIt : ";
556 G4cout << "the proper time goes back !!"
557 << " Difference: " << accuracy << "[ns] " <<G4endl;
559 << " E=" << aTrack.GetKineticEnergy()/MeV
560 << " pos=" << aTrack.GetPosition().x()/m
561 << ", " << aTrack.GetPosition().y()/m
562 << ", " << aTrack.GetPosition().z()/m
563 << " global time=" << aTrack.GetGlobalTime()/ns
564 << " local time=" << aTrack.GetLocalTime()/ns
565 << " proper time=" << aTrack.GetProperTime()/ns
566 <<G4endl;
567 }
568#endif
569 }
570
571 // Kinetic Energy should not be negative
572 G4bool itsOKforEnergy = true;
573 accuracy = -1.0*theEnergyChange/MeV;
574 if (accuracy > accuracyForWarning) {
575 itsOKforEnergy = false;
576 nError += 1;
577 exitWithError = exitWithError || (accuracy > accuracyForException);
578#ifdef G4VERBOSE
579 if (nError < maxError) {
580 G4cout << " G4ParticleChange::CheckIt : ";
581 G4cout << "the kinetic energy is negative !!"
582 << " Difference: " << accuracy << "[MeV] " <<G4endl;
584 << " E=" << aTrack.GetKineticEnergy()/MeV
585 << " pos=" << aTrack.GetPosition().x()/m
586 << ", " << aTrack.GetPosition().y()/m
587 << ", " << aTrack.GetPosition().z()/m
588 <<G4endl;
589 }
590#endif
591 }
592
593 // Velocity should not be less than c_light
594 G4bool itsOKforVelocity = true;
595 if (theVelocityChange < 0.) {
596 itsOKforVelocity = false;
597 nError += 1;
598 exitWithError = true;
599#ifdef G4VERBOSE
600 if (nError < maxError) {
601 G4cout << " G4ParticleChange::CheckIt : ";
602 G4cout << "the velocity is negative !!"
603 << " Velocity: " << theVelocityChange/c_light <<G4endl;
605 << " E=" << aTrack.GetKineticEnergy()/MeV
606 << " pos=" << aTrack.GetPosition().x()/m
607 << ", " << aTrack.GetPosition().y()/m
608 << ", " << aTrack.GetPosition().z()/m
609 <<G4endl;
610 }
611#endif
612 }
613
614 accuracy = theVelocityChange/c_light - 1.0;
615 if (accuracy > accuracyForWarning) {
616 itsOKforVelocity = false;
617 nError += 1;
618 exitWithError = exitWithError || (accuracy > accuracyForException);
619#ifdef G4VERBOSE
620 if (nError < maxError) {
621 G4cout << " G4ParticleChange::CheckIt : ";
622 G4cout << "the velocity is greater than c_light !!" << G4endl;
623 G4cout << " Velocity: " << theVelocityChange/c_light <<G4endl;
625 << " E=" << aTrack.GetKineticEnergy()/MeV
626 << " pos=" << aTrack.GetPosition().x()/m
627 << ", " << aTrack.GetPosition().y()/m
628 << ", " << aTrack.GetPosition().z()/m
629 <<G4endl;
630 }
631#endif
632 }
633
634 G4bool itsOK = itsOKforMomentum && itsOKforEnergy && itsOKforVelocity && itsOKforProperTime && itsOKforGlobalTime;
635 // dump out information of this particle change
636#ifdef G4VERBOSE
637 if (!itsOK) {
638 DumpInfo();
639 }
640#endif
641
642 // Exit with error
643 if (exitWithError) {
644 G4Exception("G4ParticleChange::CheckIt",
645 "TRACK003", EventMustBeAborted,
646 "momentum, energy, and/or time was illegal");
647 }
648 //correction
649 if (!itsOKforMomentum) {
652 }
653 if (!itsOKforGlobalTime) {
654 theTimeChange = aTrack.GetLocalTime();
655 }
656 if (!itsOKforProperTime) {
658 }
659 if (!itsOKforEnergy) {
660 theEnergyChange = 0.0;
661 }
662 if (!itsOKforVelocity) {
663 theVelocityChange = c_light;
664 }
665
666 itsOK = (itsOK) && G4VParticleChange::CheckIt(aTrack);
667 return itsOK;
668}
@ EventMustBeAborted
G4FastVector< G4Track, G4TrackFastVectorSize > G4TrackFastVector
@ fStopAndKill
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cout
double z() const
double x() const
double mag2() const
double y() const
double mag() const
G4double GetMass() const
const G4ThreeVector & GetMomentumDirection() const
G4double GetCharge() const
G4double GetKineticEnergy() const
G4double GetProperTime() const
G4double GetMagneticMoment() const
const G4ThreeVector & GetPolarization() const
void SetElement(G4int anIndex, Type *anElement)
Definition: G4FastVector.hh:76
virtual G4Step * UpdateStepForAtRest(G4Step *Step)
void AddSecondary(G4Track *aSecondary)
G4bool operator==(const G4ParticleChange &right) const
G4ThreeVector CalcMomentum(G4double energy, G4ThreeVector direction, G4double mass) const
virtual void DumpInfo() const
virtual ~G4ParticleChange()
G4ThreeVector thePositionChange
G4ThreeVector theMomentumDirectionChange
G4Step * UpdateStepInfo(G4Step *Step)
G4double theProperTimeChange
virtual G4Step * UpdateStepForPostStep(G4Step *Step)
virtual G4bool CheckIt(const G4Track &)
G4ThreeVector thePolarizationChange
virtual G4Step * UpdateStepForAlongStep(G4Step *Step)
G4double theMagneticMomentChange
G4bool operator!=(const G4ParticleChange &right) const
virtual void Initialize(const G4Track &)
const G4Track * theCurrentTrack
G4ParticleChange & operator=(const G4ParticleChange &right)
G4double GetGlobalTime(G4double timeDelay=0.0) const
const G4String & GetParticleName() const
void AddPolarization(const G4ThreeVector &aValue)
void SetLocalTime(const G4double aValue)
void SetMagneticMoment(G4double value)
void SetKineticEnergy(const G4double aValue)
void SetWeight(G4double aValue)
void SetMass(G4double value)
void SetCharge(G4double value)
G4double GetProperTime() const
void AddProperTime(const G4double aValue)
void SetVelocity(G4double v)
void AddPosition(const G4ThreeVector &aValue)
G4ThreeVector GetMomentum() const
const G4ThreeVector & GetPosition() const
void SetProperTime(const G4double aValue)
void AddGlobalTime(const G4double aValue)
void SetPosition(const G4ThreeVector &aValue)
const G4ThreeVector & GetPolarization() const
G4double GetKineticEnergy() const
void AddLocalTime(const G4double aValue)
void SetMomentumDirection(const G4ThreeVector &aValue)
void SetPolarization(const G4ThreeVector &aValue)
Definition: G4Step.hh:78
G4Track * GetTrack() const
G4StepPoint * GetPreStepPoint() const
G4StepPoint * GetPostStepPoint() const
G4double GetVelocity() const
const G4ThreeVector & GetPosition() const
void SetTouchableHandle(const G4TouchableHandle &apValue)
G4double GetGlobalTime() const
G4double GetProperTime() const
G4double GetLocalTime() const
G4ParticleDefinition * GetDefinition() const
const G4DynamicParticle * GetDynamicParticle() const
const G4TouchableHandle & GetTouchableHandle() const
G4double GetKineticEnergy() const
G4double CalculateVelocity() const
Definition: G4Track.cc:210
void SetGoodForTrackingFlag(G4bool value=true)
virtual G4bool CheckIt(const G4Track &)
static const G4double accuracyForException
G4TrackStatus theStatusChange
G4TrackFastVector * theListOfSecondaries
G4SteppingControl theSteppingControlFlag
static const G4double accuracyForWarning
virtual void Initialize(const G4Track &)
void AddSecondary(G4Track *aSecondary)
virtual void DumpInfo() const
G4TrackStatus GetTrackStatus() const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
#define ns
Definition: xmlparse.cc:597