67     fParticleIsLooping( false ),
    70     fThreshold_Warning_Energy( 100 * 
MeV ),  
    71     fThreshold_Important_Energy( 250 * 
MeV ), 
    72     fThresholdTrials( 10 ), 
    75     fSumEnergyKilled( 0.0 ), fMaxEnergyKilled( 0.0 ), 
    76     fShortStepOptimisation(false),    
   116     G4cout << 
" G4MonopoleTransportation: Statistics for looping particles "    135                                              G4GPILSelection* selection )
   140   G4double geometryStepLength, newSafety ; 
   152   *selection = CandidateForSelection ;
   170      currentSafety = 0.0 ;
   192   G4bool          fieldExertsForce = false ;
   194   if( (particleMagneticCharge != 0.0) )
   214   if( !fieldExertsForce ) 
   221        geometryStepLength   = currentMinimumStep ;
   234        fPreviousSftOrigin = startPosition ;
   240        currentSafety = newSafety ;
   246          geometryStepLength   = linearStepLength ;
   251          geometryStepLength   = currentMinimumStep ;
   280                                particleMagneticCharge );   
   284      ->GetEquationOfMotion();
   294                                                track.GetMomentumDirection(),
   296                                                track.GetKineticEnergy(),
   299                                                track.GetGlobalTime(), 
   300                                                track.GetProperTime(), 
   302      if( currentMinimumStep > 0 ) 
   309                                                           track.GetVolume() ) ;
   312            geometryStepLength   = lengthAlongCurve ;
   314            geometryStepLength   = currentMinimumStep ;
   319         geometryStepLength   = lengthAlongCurve= 0.0 ;
   325      fPreviousSftOrigin = startPosition ;
   351   if( currentMinimumStep == 0.0 ) 
   364       if( particleMagneticCharge != 0.0 ) {
   368          currentSafety      = endSafety ;
   378 #ifdef G4DEBUG_TRANSPORT    380          G4cout << 
"***G4MonopoleTransportation::AlongStepGPIL ** " << 
G4endl  ;
   382                 << 
"    and it returned safety= " << endSafety << 
G4endl ; 
   384                 << 
"   to obtain pseudo-safety= " << currentSafety << 
G4endl ; 
   394   return geometryStepLength ;
   403                                                     const G4Step&  stepData )
   405   static G4int noCalls=0;
   428   G4double startTime = track.GetGlobalTime() ;
   434      G4double finalVelocity   = track.GetVelocity() ;
   435      G4double initialVelocity = stepData.GetPreStepPoint()->GetVelocity() ;
   436      G4double stepLength      = track.GetStepLength() ;
   444         deltaTime = stepLength/finalVelocity ;
   446      else if (finalVelocity > 0.0)
   450         meanInverseVelocity = 0.5
   451                             * ( 1.0 / initialVelocity + 1.0 / finalVelocity ) ;
   452         deltaTime = stepLength * meanInverseVelocity ;
   454      else if( initialVelocity > 0.0 )
   456         deltaTime = stepLength/initialVelocity ;
   469   G4double  restMass       = track.GetDynamicParticle()->GetMass() ;
   470   G4double deltaProperTime = deltaTime*( restMass/track.GetTotalEnergy() ) ;
   472   fParticleChange.ProposeProperTime(track.GetProperTime() + deltaProperTime) ;
   496           G4cout << 
" G4MonopoleTransportation is killing track that is looping or stuck "   498                  << 
"   This track has " << track.GetKineticEnergy() / 
MeV   499                  << 
" MeV energy." << 
G4endl;
   501                  << 
"   No of calls to AlongStepDoIt = " << noCalls 
   511           G4cout << 
"   G4MonopoleTransportation::AlongStepDoIt(): Particle looping -  "   513                  << 
"   No of calls to  = " << noCalls 
   542                                             G4ForceCondition* pForceCond )
   544   *pForceCond = Forced ; 
   572     LocateGlobalPointAndUpdateTouchableHandle( track.GetPosition(),
   573                                                track.GetMomentumDirection(),
   598     retCurrentTouchable = track.GetTouchableHandle() ;
   625   if( pNewVol!=0 && pNewMaterialCutsCouple!=0 && 
   626       pNewMaterialCutsCouple->
GetMaterial()!=pNewMaterial )
   630     pNewMaterialCutsCouple =
   635   fParticleChange.SetMaterialCutsCoupleInTouchable( pNewMaterialCutsCouple );
 
const G4Monopole * fParticleDef
 
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
 
virtual G4double AlongStepGetPhysicalInteractionLength(const G4Track &track, G4double previousStepSize, G4double currentMinimumStep, G4double ¤tSafety, G4GPILSelection *selection)
 
const G4Material * GetMaterial() const
 
virtual void SetChargeMomentumMass(G4ChargeState particleCharge, G4double MomentumXc, G4double MassXc2)=0
 
G4bool IsParticleLooping() const
 
CLHEP::Hep3Vector G4ThreeVector
 
void ClearAllChordFindersState()
 
G4Material * GetMaterial() const
 
virtual G4double ComputeStep(const G4ThreeVector &pGlobalPoint, const G4ThreeVector &pDirection, const G4double pCurrentProposedStepLength, G4double &pNewSafety)
 
G4ProductionCuts * GetProductionCuts() const
 
virtual void StartTracking(G4Track *aTrack)
 
virtual G4VParticleChange * PostStepDoIt(const G4Track &track, const G4Step &stepData)
 
G4PropagatorInField * fFieldPropagator
 
G4double GetTotalMomentum() const
 
G4ThreeVector fPreviousSftOrigin
 
~G4MonopoleTransportation()
 
G4bool fGeometryLimitedStep
 
G4double fThreshold_Important_Energy
 
G4bool fShortStepOptimisation
 
G4double fThreshold_Warning_Energy
 
G4double fTransportEndKineticEnergy
 
G4ParticleChangeForTransport fParticleChange
 
Definition of the G4MonopoleTransportation class. 
 
G4SafetyHelper * fpSafetyHelper
 
G4bool fParticleIsLooping
 
virtual void StartTracking(G4Track *)
 
virtual void ConfigureForTrack(const G4Track *)
 
Definition of the G4Monopole class. 
 
void SetGeometricallyLimitedStep()
 
G4GLOB_DLL std::ostream G4cout
 
G4double fSumEnergyKilled
 
virtual G4double PostStepGetPhysicalInteractionLength(const G4Track &, G4double previousStepSize, G4ForceCondition *pForceCond)
 
G4SafetyHelper * GetSafetyHelper() const
 
void SetProcessSubType(G4int)
 
G4double GetPDGSpin() const
 
G4Navigator * GetNavigatorForTracking() const
 
G4double MagneticCharge() const
 
static G4MonopoleFieldSetup * GetMonopoleFieldSetup()
 
const G4MagIntegratorStepper * GetStepper() const
 
G4ThreeVector fTransportEndSpin
 
G4double fMaxEnergyKilled
 
G4FieldManager * FindAndSetFieldManager(G4VPhysicalVolume *pCurrentPhysVol)
 
virtual G4VPhysicalVolume * GetVolume(G4int depth=0) const
 
G4bool DoesGlobalFieldExist()
 
static G4TransportationManager * GetTransportationManager()
 
G4ThreeVector fTransportEndPosition
 
G4Navigator * fLinearNavigator
 
G4MonopoleTransportation(const G4Monopole *p, G4int verbosityLevel=1)
 
G4double ComputeStep(G4FieldTrack &pFieldTrack, G4double pCurrentProposedStepLength, G4double &pNewSafety, G4VPhysicalVolume *pPhysVol=0)
 
static G4ProductionCutsTable * GetProductionCutsTable()
 
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
 
G4double GetCharge() const
 
G4bool fEndGlobalTimeComputed
 
void SetStepperAndChordFinder(G4int val)
 
static G4FieldManagerStore * GetInstance()
 
static G4ParticleTable * GetParticleTable()
 
#define fPreviousSftOrigin
 
std::vector< G4ThreeVector > * GimmeTrajectoryVectorAndForgetIt() const
 
G4TouchableHandle fCurrentTouchableHandle
 
const G4ThreeVector & GetMomentumDirection() const
 
G4ChordFinder * GetChordFinder()
 
G4double GetLabTimeOfFlight() const
 
G4double GetPDGMass() const
 
const G4ThreeVector & GetMomentumDir() const
 
const G4MaterialCutsCouple * GetMaterialCutsCouple() const
 
virtual G4VParticleChange * AlongStepDoIt(const G4Track &track, const G4Step &stepData)
 
G4ThreeVector GetSpin() const
 
G4VSensitiveDetector * GetSensitiveDetector() const
 
G4double fCandidateEndGlobalTime
 
G4ThreeVector fTransportEndMomentumDir
 
void SetCurrentSafety(G4double val, const G4ThreeVector &pos)
 
void ClearPropagatorState()
 
G4ParticleDefinition * GetDefinition() const
 
G4double GetKineticEnergy() const
 
G4ThreeVector GetPosition() const
 
G4double endpointDistance
 
G4PropagatorInField * GetPropagatorInField() const
 
virtual G4double ComputeSafety(const G4ThreeVector &globalpoint, const G4double pProposedMaxLength=DBL_MAX, const G4bool keepState=true)
 
G4LogicalVolume * GetLogicalVolume() const
 
G4MagInt_Driver * GetIntegrationDriver()
 
virtual void LocateGlobalPointWithinVolume(const G4ThreeVector &position)
 
G4MonopoleFieldSetup * fMagSetup
 
const G4Field * GetDetectorField() const