G4ITTransportation Class Reference

#include <G4ITTransportation.hh>

Inheritance diagram for G4ITTransportation:

G4VITProcess G4VProcess G4DNABrownianTransportation

Public Member Functions

 G4ITTransportation (const G4String &aName="ITTransportation", G4int verbosityLevel=1)
virtual ~G4ITTransportation ()
 G4ITTransportation (const G4ITTransportation &)
virtual void BuildPhysicsTable (const G4ParticleDefinition &)
virtual void ComputeStep (const G4Track &, const G4Step &, const double timeStep, double &spaceStep)
virtual void StartTracking (G4Track *aTrack)
virtual G4double AtRestGetPhysicalInteractionLength (const G4Track &, G4ForceCondition *)
virtual G4VParticleChangeAtRestDoIt (const G4Track &, const G4Step &)
virtual G4double AlongStepGetPhysicalInteractionLength (const G4Track &track, G4double, G4double currentMinimumStep, G4double &currentSafety, G4GPILSelection *selection)
virtual G4double PostStepGetPhysicalInteractionLength (const G4Track &, G4double, G4ForceCondition *pForceCond)
virtual G4VParticleChangeAlongStepDoIt (const G4Track &track, const G4Step &stepData)
virtual G4VParticleChangePostStepDoIt (const G4Track &track, const G4Step &)
G4PropagatorInFieldGetPropagatorInField ()
void SetPropagatorInField (G4PropagatorInField *pFieldPropagator)
 This class is a slightly modified version of G4Transportation initially written by J. Apostolakis and colleagues But it should use the exact same algorithm.
void SetVerboseLevel (G4int verboseLevel)
G4int GetVerboseLevel () const
G4double GetThresholdWarningEnergy () const
G4double GetThresholdImportantEnergy () const
G4int GetThresholdTrials () const
void SetThresholdWarningEnergy (G4double newEnWarn)
void SetThresholdImportantEnergy (G4double newEnImp)
void SetThresholdTrials (G4int newMaxTrials)
G4double GetMaxEnergyKilled () const
G4double GetSumEnergyKilled () const
void ResetKilledStatistics (G4int report=1)
void EnableShortStepOptimisation (G4bool optimise=true)

Protected Member Functions

G4bool DoesGlobalFieldExist ()
void SetInstantiateProcessState (G4bool flag)
G4bool InstantiateProcessState ()

Protected Attributes

G4ITTransportationState *const & fTransportationState
G4ITNavigatorfLinearNavigator
G4PropagatorInFieldfFieldPropagator
G4ParticleChangeForTransport fParticleChange
G4double fThreshold_Warning_Energy
G4double fThreshold_Important_Energy
G4int fThresholdTrials
G4double fUnimportant_Energy
G4double fSumEnergyKilled
G4double fMaxEnergyKilled
G4bool fShortStepOptimisation
G4SafetyHelperfpSafetyHelper
G4int fVerboseLevel

Data Structures

struct  G4ITTransportationState

Detailed Description

Definition at line 57 of file G4ITTransportation.hh.


Constructor & Destructor Documentation

G4ITTransportation::G4ITTransportation ( const G4String aName = "ITTransportation",
G4int  verbosityLevel = 1 
)

Definition at line 81 of file G4ITTransportation.cc.

References G4VProcess::enableAlongStepDoIt, G4VProcess::enableAtRestDoIt, G4VProcess::enablePostStepDoIt, fFieldPropagator, fLinearNavigator, fParticleChange, fpSafetyHelper, G4ITTransportationManager::GetNavigatorForTracking(), G4TransportationManager::GetPropagatorInField(), G4ITTransportationManager::GetTransportationManager(), G4TransportationManager::GetTransportationManager(), G4VProcess::pParticleChange, G4VITProcess::SetInstantiateProcessState(), SetInstantiateProcessState(), and G4VProcess::SetProcessSubType().

00081                                                                          :
00082     G4VITProcess(aName, fTransportation),
00083     InitProcessState(fTransportationState, fpState),
00084     fThreshold_Warning_Energy( 100 * MeV ),
00085     fThreshold_Important_Energy( 250 * MeV ),
00086     fThresholdTrials( 10 ),
00087     fUnimportant_Energy( 1 * MeV ),  // Not used
00088     fSumEnergyKilled( 0.0 ), fMaxEnergyKilled( 0.0 ),
00089     fShortStepOptimisation(false),    // Old default: true (=fast short steps)
00090     fVerboseLevel( verbose )
00091 {
00092     pParticleChange = &fParticleChange;
00093     G4TransportationManager* transportMgr ;
00094     transportMgr = G4TransportationManager::GetTransportationManager() ;
00095     G4ITTransportationManager* ITtransportMgr ;
00096     ITtransportMgr = G4ITTransportationManager::GetTransportationManager() ;
00097     fLinearNavigator = ITtransportMgr->GetNavigatorForTracking() ;
00098     fFieldPropagator = transportMgr->GetPropagatorInField() ;
00099     fpSafetyHelper =   0; // transportMgr->GetSafetyHelper();  // New
00100 
00101     // Cannot determine whether a field exists here, as it would
00102     //  depend on the relative order of creating the detector's
00103     //  field and this process. That order is not guaranted.
00104     // Instead later the method DoesGlobalFieldExist() is called
00105 
00106     enableAtRestDoIt    = false;
00107     enableAlongStepDoIt = true;
00108     enablePostStepDoIt  = true;
00109     SetProcessSubType(60);
00110     SetInstantiateProcessState(true);
00111     G4VITProcess::SetInstantiateProcessState(false);
00112     fInstantiateProcessState = true;
00113 }

G4ITTransportation::~G4ITTransportation (  )  [virtual]

Definition at line 189 of file G4ITTransportation.cc.

References fMaxEnergyKilled, fSumEnergyKilled, fVerboseLevel, G4cout, and G4endl.

00190 {
00191 #ifdef G4VERBOSE
00192     if( (fVerboseLevel > 0) && (fSumEnergyKilled > 0.0 ) )
00193     {
00194         G4cout << " G4ITTransportation: Statistics for looping particles " << G4endl;
00195         G4cout << "   Sum of energy of loopers killed: " <<  fSumEnergyKilled << G4endl;
00196         G4cout << "   Max energy of loopers killed: " <<  fMaxEnergyKilled << G4endl;
00197     }
00198 #endif
00199 }

G4ITTransportation::G4ITTransportation ( const G4ITTransportation  ) 

Definition at line 116 of file G4ITTransportation.cc.

References G4VProcess::enableAlongStepDoIt, G4VProcess::enableAtRestDoIt, G4VProcess::enablePostStepDoIt, fFieldPropagator, fInstantiateProcessState, fLinearNavigator, fMaxEnergyKilled, fParticleChange, fpSafetyHelper, fShortStepOptimisation, fSumEnergyKilled, fThreshold_Important_Energy, fThreshold_Warning_Energy, fThresholdTrials, fUnimportant_Energy, fVerboseLevel, G4ITTransportationManager::GetNavigatorForTracking(), G4TransportationManager::GetPropagatorInField(), G4ITTransportationManager::GetTransportationManager(), G4TransportationManager::GetTransportationManager(), G4VProcess::pParticleChange, G4VITProcess::SetInstantiateProcessState(), and SetInstantiateProcessState().

00116                                                                       :
00117     G4VITProcess(right),
00118     InitProcessState(fTransportationState, fpState)
00119 {
00120     // Copy attributes
00121     fVerboseLevel               = right.fVerboseLevel ;
00122     fThreshold_Warning_Energy   = right.fThreshold_Warning_Energy;
00123     fThreshold_Important_Energy = right.fThreshold_Important_Energy;
00124     fThresholdTrials            = right.fThresholdTrials;
00125     fUnimportant_Energy         = right.fUnimportant_Energy;
00126     fSumEnergyKilled            = right.fSumEnergyKilled;
00127     fMaxEnergyKilled            = right.fMaxEnergyKilled;
00128     fShortStepOptimisation      = right.fShortStepOptimisation;
00129 
00130     // Setup Navigators
00131     G4TransportationManager* transportMgr ;
00132     transportMgr = G4TransportationManager::GetTransportationManager() ;
00133     G4ITTransportationManager* ITtransportMgr ;
00134     ITtransportMgr = G4ITTransportationManager::GetTransportationManager() ;
00135     fLinearNavigator = ITtransportMgr->GetNavigatorForTracking() ;
00136     fFieldPropagator = transportMgr->GetPropagatorInField() ;
00137     fpSafetyHelper =   0; //transportMgr->GetSafetyHelper();  // New
00138 
00139     // Cannot determine whether a field exists here, as it would
00140     //  depend on the relative order of creating the detector's
00141     //  field and this process. That order is not guaranted.
00142     // Instead later the method DoesGlobalFieldExist() is called
00143 
00144     enableAtRestDoIt    = false;
00145     enableAlongStepDoIt = true;
00146     enablePostStepDoIt  = true;
00147 
00148     pParticleChange = &fParticleChange;
00149     SetInstantiateProcessState(true);
00150     G4VITProcess::SetInstantiateProcessState(false);
00151     fInstantiateProcessState = right.fInstantiateProcessState;
00152 }


Member Function Documentation

G4VParticleChange * G4ITTransportation::AlongStepDoIt ( const G4Track track,
const G4Step stepData 
) [virtual]

Implements G4VProcess.

Reimplemented in G4DNABrownianTransportation.

Definition at line 610 of file G4ITTransportation.cc.

References G4Track::CalculateVelocityForOpticalPhoton(), fFieldPropagator, G4ParticleTable::FindParticle(), fMaxEnergyKilled, fParticleChange, fStopAndKill, fSumEnergyKilled, fThreshold_Important_Energy, fThreshold_Warning_Energy, fThresholdTrials, fVerboseLevel, G4cout, G4endl, G4Track::GetGlobalTime(), G4Track::GetKineticEnergy(), G4Track::GetLocalTime(), G4Track::GetParticleDefinition(), G4ParticleTable::GetParticleTable(), G4Step::GetPreStepPoint(), G4Track::GetStepLength(), G4StepPoint::GetVelocity(), G4PropagatorInField::GimmeTrajectoryVectorAndForgetIt(), G4ParticleChangeForTransport::Initialize(), G4ParticleChange::ProposeEnergy(), G4ParticleChange::ProposeGlobalTime(), G4ParticleChange::ProposeLocalTime(), G4ParticleChange::ProposeMomentumDirection(), G4ParticleChange::ProposePolarization(), G4ParticleChange::ProposePosition(), G4VParticleChange::ProposeTrackStatus(), G4ParticleChange::ProposeVelocity(), G4ParticleChangeForTransport::SetMomentumChanged(), G4ParticleChangeForTransport::SetPointerToVectorOfAuxiliaryPoints(), and State.

Referenced by G4DNABrownianTransportation::AlongStepDoIt().

00612 {
00613 
00614     //    G4cout << "G4ITTransportation::AlongStepDoIt" << G4endl;
00615     // set  pdefOpticalPhoton
00616     static  G4ParticleDefinition* pdefOpticalPhoton =
00617             G4ParticleTable::GetParticleTable()->FindParticle("opticalphoton");
00618 
00619     static G4int noCalls=0;
00620     noCalls++;
00621 
00622     fParticleChange.Initialize(track) ;
00623 
00624     //  Code for specific process
00625     //
00626     fParticleChange.ProposePosition(State(fTransportEndPosition)) ;
00627     fParticleChange.ProposeMomentumDirection(State(fTransportEndMomentumDir)) ;
00628     fParticleChange.ProposeEnergy(State(fTransportEndKineticEnergy)) ;
00629     fParticleChange.SetMomentumChanged(State(fMomentumChanged)) ;
00630 
00631     fParticleChange.ProposePolarization(State(fTransportEndSpin));
00632 
00633     G4double deltaTime = 0.0 ;
00634 
00635     // Calculate  Lab Time of Flight (ONLY if field Equations used it!)
00636     // G4double endTime   = State(fCandidateEndGlobalTime);
00637     // G4double delta_time = endTime - startTime;
00638 
00639     G4double startTime = track.GetGlobalTime() ;
00643     if (State(fEndGlobalTimeComputed) == false)
00644     {
00645         // The time was not integrated .. make the best estimate possible
00646         //
00647         G4double initialVelocity = stepData.GetPreStepPoint()->GetVelocity() ;
00648         G4double stepLength      = track.GetStepLength() ;
00649 
00650         deltaTime= 0.0;  // in case initialVelocity = 0
00651         if (track.GetParticleDefinition() == pdefOpticalPhoton)
00652         {
00653             // For only Optical Photon, final velocity is used
00654             double finalVelocity = track.CalculateVelocityForOpticalPhoton();
00655             fParticleChange.ProposeVelocity(finalVelocity);
00656             deltaTime = stepLength/finalVelocity ;
00657         }
00658         else if( initialVelocity > 0.0 )
00659         {
00660             deltaTime = stepLength/initialVelocity ;
00661         }
00662 
00663         State(fCandidateEndGlobalTime)   = startTime + deltaTime ;
00664     }
00665     else
00666     {
00667         deltaTime = State(fCandidateEndGlobalTime) - startTime ;
00668     }
00669 
00670     fParticleChange.ProposeGlobalTime( State(fCandidateEndGlobalTime) ) ;
00671     fParticleChange.ProposeLocalTime(  track.GetLocalTime() + deltaTime) ;
00672     /*
00673     // Now Correct by Lorentz factor to get delta "proper" Time
00674 
00675     G4double  restMass       = track.GetDynamicParticle()->GetMass() ;
00676     G4double deltaProperTime = deltaTime*( restMass/track.GetTotalEnergy() ) ;
00677 
00678     fParticleChange.ProposeProperTime(track.GetProperTime() + deltaProperTime) ;
00679 */
00680 
00681     fParticleChange. ProposeTrueStepLength( track.GetStepLength() ) ;
00682 
00685 
00686     // If the particle is caught looping or is stuck (in very difficult
00687     // boundaries) in a magnetic field (doing many steps)
00688     //   THEN this kills it ...
00689     //
00690     if ( State(fParticleIsLooping) )
00691     {
00692         G4double endEnergy= State(fTransportEndKineticEnergy);
00693 
00694         if( (endEnergy < fThreshold_Important_Energy)
00695                 || (State(fNoLooperTrials) >= fThresholdTrials ) )
00696         {
00697             // Kill the looping particle
00698             //
00699             //            G4cout << "G4ITTransportation will killed the molecule"<< G4endl;
00700             fParticleChange.ProposeTrackStatus( fStopAndKill )  ;
00701 
00702             // 'Bare' statistics
00703             fSumEnergyKilled += endEnergy;
00704             if( endEnergy > fMaxEnergyKilled)
00705             {
00706                 fMaxEnergyKilled= endEnergy;
00707             }
00708 
00709 #ifdef G4VERBOSE
00710             if( (fVerboseLevel > 1) ||
00711                     ( endEnergy > fThreshold_Warning_Energy )  )
00712             {
00713                 G4cout << " G4ITTransportation is killing track that is looping or stuck "
00714                        << G4endl
00715                        << "   This track has " << track.GetKineticEnergy() / MeV
00716                        << " MeV energy." << G4endl;
00717                 G4cout << "   Number of trials = " << State(fNoLooperTrials)
00718                        << "   No of calls to AlongStepDoIt = " << noCalls
00719                        << G4endl;
00720             }
00721 #endif
00722             State(fNoLooperTrials)=0;
00723         }
00724         else
00725         {
00726             State(fNoLooperTrials) ++;
00727 #ifdef G4VERBOSE
00728             if( (fVerboseLevel > 2) )
00729             {
00730                 G4cout << "   G4ITTransportation::AlongStepDoIt(): Particle looping -  "
00731                        << "   Number of trials = " << State(fNoLooperTrials)
00732                        << "   No of calls to  = " << noCalls
00733                        << G4endl;
00734             }
00735 #endif
00736         }
00737     }
00738     else
00739     {
00740         State(fNoLooperTrials)=0;
00741     }
00742 
00743     // Another (sometimes better way) is to use a user-limit maximum Step size
00744     // to alleviate this problem ..
00745 
00746     // Introduce smooth curved trajectories to particle-change
00747     //
00748     fParticleChange.SetPointerToVectorOfAuxiliaryPoints
00749             (fFieldPropagator->GimmeTrajectoryVectorAndForgetIt() );
00750 
00751     return &fParticleChange ;
00752 }

G4double G4ITTransportation::AlongStepGetPhysicalInteractionLength ( const G4Track track,
G4double  ,
G4double  currentMinimumStep,
G4double currentSafety,
G4GPILSelection selection 
) [virtual]

Implements G4VProcess.

Reimplemented in G4DNABrownianTransportation.

Definition at line 218 of file G4ITTransportation.cc.

References CandidateForSelection, G4ITNavigator::ComputeSafety(), G4ITNavigator::ComputeStep(), G4FieldManager::ConfigureForTrack(), FatalException, fFieldPropagator, G4PropagatorInField::FindAndSetFieldManager(), fLinearNavigator, fpSafetyHelper, fShortStepOptimisation, G4cout, G4endl, G4Exception(), G4DynamicParticle::GetCharge(), G4FieldManager::GetDetectorField(), G4Track::GetDynamicParticle(), G4Track::GetGlobalTime(), G4Track::GetKineticEnergy(), G4DynamicParticle::GetMomentumDirection(), G4Track::GetPolarization(), G4Track::GetPosition(), G4Track::GetTouchableHandle(), G4Track::GetVelocity(), G4Track::GetVolume(), G4SafetyHelper::SetCurrentSafety(), sqr(), and State.

Referenced by G4DNABrownianTransportation::AlongStepGetPhysicalInteractionLength().

00224 {
00225     G4double geometryStepLength(-1.0), newSafety(-1.0) ;
00226 
00227     State(fParticleIsLooping) = false ;
00228     State(fEndGlobalTimeComputed) = false ;
00229     State(fGeometryLimitedStep) = false ;
00230 
00231     // Initial actions moved to  StartTrack()
00232     // --------------------------------------
00233     // Note: in case another process changes touchable handle
00234     //    it will be necessary to add here (for all steps)
00235     State(fCurrentTouchableHandle) = track.GetTouchableHandle();
00236 
00237     // GPILSelection is set to defaule value of CandidateForSelection
00238     // It is a return value
00239     //
00240     *selection = CandidateForSelection ;
00241 
00242     // Get initial Energy/Momentum of the track
00243     //
00244     const G4DynamicParticle*    pParticle  = track.GetDynamicParticle() ;
00245 //    const G4ParticleDefinition* pParticleDef   = pParticle->GetDefinition() ;
00246     G4ThreeVector startMomentumDir       = pParticle->GetMomentumDirection() ;
00247     G4ThreeVector startPosition          = track.GetPosition() ;
00248 
00249     // G4double   theTime        = track.GetGlobalTime() ;
00250 
00251     // The Step Point safety can be limited by other geometries and/or the
00252     // assumptions of any process - it's not always the geometrical safety.
00253     // We calculate the starting point's isotropic safety here.
00254     //
00255     G4ThreeVector OriginShift = startPosition - State(fPreviousSftOrigin) ;
00256     G4double      MagSqShift  = OriginShift.mag2() ;
00257     if( MagSqShift >= sqr(State(fPreviousSafety)) )
00258     {
00259         currentSafety = 0.0 ;
00260     }
00261     else
00262     {
00263         currentSafety = State(fPreviousSafety) - std::sqrt(MagSqShift) ;
00264     }
00265 
00266     // Is the particle charged ?
00267     //
00268     G4double              particleCharge = pParticle->GetCharge() ;
00269 
00270 
00271     // There is no need to locate the current volume. It is Done elsewhere:
00272     //   On track construction
00273     //   By the tracking, after all AlongStepDoIts, in "Relocation"
00274 
00275     // Check whether the particle have an (EM) field force exerting upon it
00276     //
00277     G4FieldManager* fieldMgr=0;
00278     G4bool          fieldExertsForce = false ;
00279     if( (particleCharge != 0.0) )
00280     {
00281         fieldMgr= fFieldPropagator->FindAndSetFieldManager( track.GetVolume() );
00282         if (fieldMgr != 0)
00283         {
00284             // Message the field Manager, to configure it for this track
00285             fieldMgr->ConfigureForTrack( &track );
00286             // Moved here, in order to allow a transition
00287             //   from a zero-field  status (with fieldMgr->(field)0
00288             //   to a finite field  status
00289 
00290             // If the field manager has no field, there is no field !
00291             fieldExertsForce = (fieldMgr->GetDetectorField() != 0);
00292         }
00293     }
00294 
00295     // G4cout << " G4Transport:  field exerts force= " << fieldExertsForce
00296     //   << "  fieldMgr= " << fieldMgr << G4endl;
00297 
00298     // Choose the calculation of the transportation: Field or not
00299     //
00300     if( !fieldExertsForce )
00301     {
00302         G4double linearStepLength ;
00303         if( fShortStepOptimisation && (currentMinimumStep <= currentSafety) )
00304         {
00305             // The Step is guaranteed to be taken
00306             //
00307             geometryStepLength   = currentMinimumStep ;
00308             State(fGeometryLimitedStep) = false ;
00309         }
00310         else
00311         {
00312             //  Find whether the straight path intersects a volume
00313             //
00314             linearStepLength = fLinearNavigator->ComputeStep( startPosition,
00315                                                               startMomentumDir,
00316                                                               currentMinimumStep,
00317                                                               newSafety) ;
00318             // Remember last safety origin & value.
00319             //
00320             State(fPreviousSftOrigin) = startPosition ;
00321             State(fPreviousSafety)    = newSafety ;
00322             // fpSafetyHelper->SetCurrentSafety( newSafety, startPosition);
00323 
00324             // The safety at the initial point has been re-calculated:
00325             //
00326             currentSafety = newSafety ;
00327 
00328             State(fGeometryLimitedStep)= (linearStepLength <= currentMinimumStep);
00329             if( State(fGeometryLimitedStep) )
00330             {
00331                 // The geometry limits the Step size (an intersection was found.)
00332                 geometryStepLength   = linearStepLength ;
00333             }
00334             else
00335             {
00336                 // The full Step is taken.
00337                 geometryStepLength   = currentMinimumStep ;
00338             }
00339         }
00340         State(endpointDistance) = geometryStepLength ;
00341 
00342         // Calculate final position
00343         //
00344         State(fTransportEndPosition) = startPosition+geometryStepLength*startMomentumDir ;
00345 
00346         // Momentum direction, energy and polarisation are unchanged by transport
00347         //
00348         State(fTransportEndMomentumDir)   = startMomentumDir ;
00349         State(fTransportEndKineticEnergy) = track.GetKineticEnergy() ;
00350         State(fTransportEndSpin)          = track.GetPolarization();
00351         State(fParticleIsLooping)         = false ;
00352         State(fMomentumChanged)           = false ;
00353         State(fEndGlobalTimeComputed)     = true ;
00354         State(theInteractionTimeLeft)     = State(endpointDistance)/track.GetVelocity();
00355         State(fCandidateEndGlobalTime)    = State(theInteractionTimeLeft)+track.GetGlobalTime();
00356 
00357         //        G4cout << "track.GetVelocity() : " << track.GetVelocity() << G4endl;
00358         //        G4cout << "State(endpointDistance) : " << G4BestUnit(State(endpointDistance),"Length") << G4endl;
00359         //        G4cout << "State(theInteractionTimeLeft) : " << G4BestUnit(State(theInteractionTimeLeft),"Time") << G4endl;
00360         //        G4cout << "track.GetGlobalTime() : " << G4BestUnit(track.GetGlobalTime(),"Time") << G4endl;
00361 
00362     }
00363     else   //  A field exerts force
00364     {
00365 
00366         G4ExceptionDescription exceptionDescription;
00367         exceptionDescription << "ITTransportation does not support external fields.";
00368         exceptionDescription << " If you are dealing with a tradiational MC simulation, ";
00369         exceptionDescription << "please use G4Transportation.";
00370 
00371         G4Exception("G4ITTransportation::AlongStepGetPhysicalInteractionLength","NoExternalFieldSupport",
00372                     FatalException,exceptionDescription);
00373  /*
00374         G4double       momentumMagnitude = pParticle->GetTotalMomentum() ;
00375         //        G4ThreeVector  EndUnitMomentum ;
00376         G4double       lengthAlongCurve ;
00377         G4double       restMass = pParticleDef->GetPDGMass() ;
00378 
00379         fFieldPropagator->SetChargeMomentumMass( particleCharge,    // in e+ units
00380                                                  momentumMagnitude, // in Mev/c
00381                                                  restMass           ) ;
00382 
00383         G4ThreeVector spin        = track.GetPolarization() ;
00384         G4FieldTrack  aFieldTrack = G4FieldTrack( startPosition,
00385                                                   track.GetMomentumDirection(),
00386                                                   0.0,
00387                                                   track.GetKineticEnergy(),
00388                                                   restMass,
00389                                                   track.GetVelocity(),
00390                                                   track.GetGlobalTime(), // Lab.
00391                                                   track.GetProperTime(), // Part.
00392                                                   &spin                  ) ;
00393         if( currentMinimumStep > 0 )
00394         {
00395             // Do the Transport in the field (non recti-linear)
00396             //
00397             lengthAlongCurve = fFieldPropagator->ComputeStep( aFieldTrack,
00398                                                               currentMinimumStep,
00399                                                               currentSafety,
00400                                                               track.GetVolume() ) ;
00401             State(fGeometryLimitedStep)= lengthAlongCurve < currentMinimumStep;
00402             if( State(fGeometryLimitedStep) )
00403             {
00404                 geometryStepLength   = lengthAlongCurve ;
00405             }
00406             else
00407             {
00408                 geometryStepLength   = currentMinimumStep ;
00409             }
00410 
00411             // Remember last safety origin & value.
00412             //
00413             State(fPreviousSftOrigin) = startPosition ;
00414             State(fPreviousSafety)    = currentSafety ;
00415             fpSafetyHelper->SetCurrentSafety( newSafety, startPosition);
00416         }
00417         else
00418         {
00419             geometryStepLength   = lengthAlongCurve= 0.0 ;
00420             State(fGeometryLimitedStep) = false ;
00421         }
00422 
00423         // Get the End-Position and End-Momentum (Dir-ection)
00424         //
00425         State(fTransportEndPosition) = aFieldTrack.GetPosition() ;
00426 
00427         // Momentum:  Magnitude and direction can be changed too now ...
00428         //
00429         State(fMomentumChanged)         = true ;
00430         State(fTransportEndMomentumDir) = aFieldTrack.GetMomentumDir() ;
00431 
00432         State(fTransportEndKineticEnergy)  = aFieldTrack.GetKineticEnergy() ;
00433 
00434         if( fFieldPropagator->GetCurrentFieldManager()->DoesFieldChangeEnergy() )
00435         {
00436             // If the field can change energy, then the time must be integrated
00437             //    - so this should have been updated
00438             //
00439             State(fCandidateEndGlobalTime)   = aFieldTrack.GetLabTimeOfFlight();
00440             State(fEndGlobalTimeComputed)    = true;
00441 
00442             State(theInteractionTimeLeft) = State(fCandidateEndGlobalTime) - track.GetGlobalTime() ;
00443 
00444             // was ( State(fCandidateEndGlobalTime) != track.GetGlobalTime() );
00445             // a cleaner way is to have FieldTrack knowing whether time is updated.
00446         }
00447         else
00448         {
00449             // The energy should be unchanged by field transport,
00450             //    - so the time changed will be calculated elsewhere
00451             //
00452             State(fEndGlobalTimeComputed) = false;
00453 
00454             // Check that the integration preserved the energy
00455             //     -  and if not correct this!
00456             G4double  startEnergy= track.GetKineticEnergy();
00457             G4double  endEnergy= State(fTransportEndKineticEnergy);
00458 
00459             static G4int no_inexact_steps=0, no_large_ediff;
00460             G4double absEdiff = std::fabs(startEnergy- endEnergy);
00461             if( absEdiff > perMillion * endEnergy )
00462             {
00463                 no_inexact_steps++;
00464                 // Possible statistics keeping here ...
00465             }
00466 #ifdef G4VERBOSE
00467             if( fVerboseLevel > 1 )
00468             {
00469                 if( std::fabs(startEnergy- endEnergy) > perThousand * endEnergy )
00470                 {
00471                     static G4int no_warnings= 0, warnModulo=1,  moduloFactor= 10;
00472                     no_large_ediff ++;
00473                     if( (no_large_ediff% warnModulo) == 0 )
00474                     {
00475                         no_warnings++;
00476                         G4cout << "WARNING - G4Transportation::AlongStepGetPIL() "
00477                                << "   Energy change in Step is above 1^-3 relative value. " << G4endl
00478                                << "   Relative change in 'tracking' step = "
00479                                << std::setw(15) << (endEnergy-startEnergy)/startEnergy << G4endl
00480                                << "     Starting E= " << std::setw(12) << startEnergy / MeV << " MeV " << G4endl
00481                                << "     Ending   E= " << std::setw(12) << endEnergy   / MeV << " MeV " << G4endl;
00482                         G4cout << " Energy has been corrected -- however, review"
00483                                << " field propagation parameters for accuracy."  << G4endl;
00484                         if( (fVerboseLevel > 2 ) || (no_warnings<4) || (no_large_ediff == warnModulo * moduloFactor) )
00485                         {
00486                             G4cout << " These include EpsilonStepMax(/Min) in G4FieldManager "
00487                                    << " which determine fractional error per step for integrated quantities. " << G4endl
00488                                    << " Note also the influence of the permitted number of integration steps."
00489                                    << G4endl;
00490                         }
00491                         G4cerr << "ERROR - G4Transportation::AlongStepGetPIL()" << G4endl
00492                                << "        Bad 'endpoint'. Energy change detected"
00493                                << " and corrected. "
00494                                << " Has occurred already "
00495                                << no_large_ediff << " times." << G4endl;
00496                         if( no_large_ediff == warnModulo * moduloFactor )
00497                         {
00498                             warnModulo *= moduloFactor;
00499                         }
00500                     }
00501                 }
00502             }  // end of if (fVerboseLevel)
00503 #endif
00504             // Correct the energy for fields that conserve it
00505             //  This - hides the integration error
00506             //       - but gives a better physical answer
00507             State(fTransportEndKineticEnergy)= track.GetKineticEnergy();
00508         }
00509 
00510         State(fTransportEndSpin) = aFieldTrack.GetSpin();
00511         State(fParticleIsLooping) = fFieldPropagator->IsParticleLooping() ;
00512         State(endpointDistance)   = (State(fTransportEndPosition) - startPosition).mag() ;
00513         //        State(theInteractionTimeLeft) = track.GetVelocity()/State(endpointDistance) ;
00514 */
00515     }
00516 
00517     // If we are asked to go a step length of 0, and we are on a boundary
00518     // then a boundary will also limit the step -> we must flag this.
00519     //
00520     if( currentMinimumStep == 0.0 )
00521     {
00522         if( currentSafety == 0.0 )
00523         {
00524             State(fGeometryLimitedStep) = true ;
00525 //            G4cout << "!!!! Safety is NULL, on the Boundary !!!!!" << G4endl;
00526 //            G4cout << " Track position : " << track.GetPosition() /nanometer << G4endl;
00527         }
00528     }
00529 
00530     // Update the safety starting from the end-point,
00531     // if it will become negative at the end-point.
00532     //
00533     if( currentSafety < State(endpointDistance) )
00534     {
00535         // if( particleCharge == 0.0 )
00536         //    G4cout  << "  Avoiding call to ComputeSafety : charge = 0.0 " << G4endl;
00537 
00538         if( particleCharge != 0.0 )
00539         {
00540 
00541             G4double endSafety =
00542                     fLinearNavigator->ComputeSafety( State(fTransportEndPosition)) ;
00543             currentSafety      = endSafety ;
00544             State(fPreviousSftOrigin) = State(fTransportEndPosition) ;
00545             State(fPreviousSafety)    = currentSafety ;
00546             fpSafetyHelper->SetCurrentSafety( currentSafety, State(fTransportEndPosition));
00547 
00548             // Because the Stepping Manager assumes it is from the start point,
00549             //  add the StepLength
00550             //
00551             currentSafety     += State(endpointDistance) ;
00552 
00553 #ifdef G4DEBUG_TRANSPORT
00554             G4cout.precision(12) ;
00555             G4cout << "***G4Transportation::AlongStepGPIL ** " << G4endl  ;
00556             G4cout << "  Called Navigator->ComputeSafety at " << State(fTransportEndPosition)
00557                    << "    and it returned safety= " << endSafety << G4endl ;
00558             G4cout << "  Adding endpoint distance " << State(endpointDistance)
00559                    << "   to obtain pseudo-safety= " << currentSafety << G4endl ;
00560 #endif
00561         }
00562     }
00563 
00564     //    fParticleChange.ProposeTrueStepLength(geometryStepLength) ;
00565 
00566     return geometryStepLength ;
00567 }

virtual G4VParticleChange* G4ITTransportation::AtRestDoIt ( const G4Track ,
const G4Step  
) [inline, virtual]

Implements G4VProcess.

Definition at line 91 of file G4ITTransportation.hh.

00095     {
00096         return 0;
00097     }

virtual G4double G4ITTransportation::AtRestGetPhysicalInteractionLength ( const G4Track ,
G4ForceCondition  
) [inline, virtual]

Implements G4VProcess.

Definition at line 82 of file G4ITTransportation.hh.

00086     {
00087         return -1.0;
00088     }

virtual void G4ITTransportation::BuildPhysicsTable ( const G4ParticleDefinition  )  [inline, virtual]

Reimplemented from G4VITProcess.

Reimplemented in G4DNABrownianTransportation.

Definition at line 69 of file G4ITTransportation.hh.

00069 {;}

void G4ITTransportation::ComputeStep ( const G4Track ,
const G4Step ,
const double  timeStep,
double &  spaceStep 
) [virtual]

Reimplemented in G4DNABrownianTransportation.

Definition at line 570 of file G4ITTransportation.cc.

References G4Track::CalculateVelocity(), fParticleChange, G4Track::GetDynamicParticle(), G4Track::GetGlobalTime(), G4DynamicParticle::GetMomentumDirection(), G4Track::GetPosition(), G4Track::GetVelocity(), G4ParticleChange::ProposeVelocity(), and State.

Referenced by G4ITStepProcessor::DoDefinePhysicalStepLength(), and G4ITStepProcessor::FindTransportationStep().

00574 {
00575     const G4DynamicParticle*    pParticle  = track.GetDynamicParticle() ;
00576     G4ThreeVector startMomentumDir       = pParticle->GetMomentumDirection() ;
00577     G4ThreeVector startPosition          = track.GetPosition() ;
00578 
00579     track.CalculateVelocity();
00580     G4double initialVelocity   = track.GetVelocity() ;
00581 
00582     State(fGeometryLimitedStep) = false;
00583 
00585     // !!! CASE NO FIELD !!!
00587     State(fCandidateEndGlobalTime) = timeStep + track.GetGlobalTime();
00588     State(fEndGlobalTimeComputed) = true ;
00589 
00590     // Choose the calculation of the transportation: Field or not
00591     //
00592     if( !State(fMomentumChanged) )
00593     {
00594         //        G4cout << "Momentum has not changed" << G4endl;
00595         fParticleChange.ProposeVelocity(initialVelocity);
00596         oPhysicalStep =  initialVelocity*timeStep ;
00597 
00598         // Calculate final position
00599         //
00600         State(fTransportEndPosition) = startPosition + oPhysicalStep*startMomentumDir ;
00601     }
00602 }

G4bool G4ITTransportation::DoesGlobalFieldExist (  )  [protected]

Definition at line 201 of file G4ITTransportation.cc.

References G4FieldManager::DoesFieldExist(), G4TransportationManager::GetFieldManager(), and G4TransportationManager::GetTransportationManager().

Referenced by StartTracking().

00202 {
00203     G4TransportationManager* transportMgr;
00204     transportMgr= G4TransportationManager::GetTransportationManager();
00205 
00206     // fFieldExists= transportMgr->GetFieldManager()->DoesFieldExist();
00207     // return fFieldExists;
00208     return transportMgr->GetFieldManager()->DoesFieldExist();
00209 }

void G4ITTransportation::EnableShortStepOptimisation ( G4bool  optimise = true  )  [inline]

Definition at line 124 of file G4ITTransportation.icc.

References fShortStepOptimisation.

00125 {
00126   fShortStepOptimisation=optimiseShortStep;
00127 }

G4double G4ITTransportation::GetMaxEnergyKilled (  )  const [inline]

Definition at line 101 of file G4ITTransportation.icc.

References fMaxEnergyKilled.

00102 {
00103   return fMaxEnergyKilled;
00104 }

G4PropagatorInField * G4ITTransportation::GetPropagatorInField (  )  [inline]

Definition at line 51 of file G4ITTransportation.icc.

References fFieldPropagator.

00052 {
00053    return fFieldPropagator;
00054 }

G4double G4ITTransportation::GetSumEnergyKilled (  )  const [inline]

Definition at line 106 of file G4ITTransportation.icc.

References fSumEnergyKilled.

00107 {
00108   return fSumEnergyKilled;
00109 }

G4double G4ITTransportation::GetThresholdImportantEnergy (  )  const [inline]

Definition at line 71 of file G4ITTransportation.icc.

References fThreshold_Important_Energy.

00072 {
00073   return fThreshold_Important_Energy;
00074 }

G4int G4ITTransportation::GetThresholdTrials (  )  const [inline]

Definition at line 76 of file G4ITTransportation.icc.

References fThresholdTrials.

00077 {
00078   return fThresholdTrials;
00079 }

G4double G4ITTransportation::GetThresholdWarningEnergy (  )  const [inline]

Definition at line 66 of file G4ITTransportation.icc.

References fThreshold_Warning_Energy.

00067 {
00068   return fThreshold_Warning_Energy;
00069 }

G4int G4ITTransportation::GetVerboseLevel (  )  const [inline]

Reimplemented from G4VProcess.

Definition at line 61 of file G4ITTransportation.icc.

References fVerboseLevel.

00062 {
00063   return fVerboseLevel;
00064 }

G4bool G4ITTransportation::InstantiateProcessState (  )  [inline, protected]

Reimplemented from G4VITProcess.

Definition at line 239 of file G4ITTransportation.hh.

00239 { return fInstantiateProcessState; }

G4VParticleChange * G4ITTransportation::PostStepDoIt ( const G4Track track,
const G4Step  
) [virtual]

Implements G4VProcess.

Reimplemented in G4DNABrownianTransportation.

Definition at line 774 of file G4ITTransportation.cc.

References G4ITNavigator::EnteredDaughterVolume(), G4ITNavigator::ExitedMotherVolume(), FatalErrorInArgument, fLinearNavigator, fParticleChange, fStopAndKill, fVerboseLevel, G4cout, G4endl, G4Exception(), G4VPhysicalVolume::GetLogicalVolume(), G4MaterialCutsCouple::GetMaterial(), G4LogicalVolume::GetMaterial(), G4ProductionCutsTable::GetMaterialCutsCouple(), G4LogicalVolume::GetMaterialCutsCouple(), G4Track::GetMomentumDirection(), G4Track::GetPosition(), G4MaterialCutsCouple::GetProductionCuts(), G4ProductionCutsTable::GetProductionCutsTable(), G4LogicalVolume::GetSensitiveDetector(), G4Track::GetTouchableHandle(), G4Track::GetTrackID(), G4Track::GetTrackStatus(), G4ParticleChangeForTransport::Initialize(), G4ITNavigator::LocateGlobalPointWithinVolume(), G4VParticleChange::ProposeLastStepInVolume(), G4VParticleChange::ProposeTrackStatus(), G4ITNavigator::SetGeometricallyLimitedStep(), G4ParticleChangeForTransport::SetMaterialCutsCoupleInTouchable(), G4ParticleChangeForTransport::SetMaterialInTouchable(), G4ParticleChangeForTransport::SetSensitiveDetectorInTouchable(), G4ParticleChangeForTransport::SetTouchableHandle(), and State.

Referenced by G4DNABrownianTransportation::PostStepDoIt().

00776 {
00777     //    G4cout << "G4ITTransportation::PostStepDoIt" << G4endl;
00778     G4TouchableHandle retCurrentTouchable ;   // The one to return
00779     G4bool isLastStep= false;
00780 
00781     // Initialize ParticleChange  (by setting all its members equal
00782     //                             to corresponding members in G4Track)
00783     fParticleChange.Initialize(track) ;  // To initialise TouchableChange
00784 
00785     fParticleChange.ProposeTrackStatus(track.GetTrackStatus()) ;
00786 
00787     // If the Step was determined by the volume boundary,
00788     // logically relocate the particle
00789 
00790     if(State(fGeometryLimitedStep))
00791     {
00792 
00793         //        G4cout << "Step is limited by geometry " <<  "track ID : " << track.GetTrackID() << G4endl;
00794 
00795         // fCurrentTouchable will now become the previous touchable,
00796         // and what was the previous will be freed.
00797         // (Needed because the preStepPoint can point to the previous touchable)
00798 
00799         if( State(fCurrentTouchableHandle)->GetVolume() == 0 )
00800         {
00801             G4ExceptionDescription exceptionDescription ;
00802             exceptionDescription << "No current touchable found " ;
00803             G4Exception(" G4ITTransportation::PostStepDoIt","G4ITTransportation001",
00804                         FatalErrorInArgument,exceptionDescription);
00805         }
00806 
00807         fLinearNavigator->SetGeometricallyLimitedStep() ;
00808         fLinearNavigator->
00809                 LocateGlobalPointAndUpdateTouchableHandle( track.GetPosition(),
00810                                                            track.GetMomentumDirection(),
00811                                                            State(fCurrentTouchableHandle),
00812                                                            true                      ) ;
00813         // Check whether the particle is out of the world volume
00814         // If so it has exited and must be killed.
00815         //
00816         if( State(fCurrentTouchableHandle)->GetVolume() == 0 )
00817         {
00818 #ifdef G4VERBOSE
00819             if(fVerboseLevel > 0)
00820             {
00821                 G4cout << "Track position : " << track.GetPosition() / nanometer << " [nm]"
00822                        << " Track ID : " << track.GetTrackID()<< G4endl;
00823                 G4cout << "G4ITTransportation will killed the track because State(fCurrentTouchableHandle)->GetVolume() == 0"<< G4endl;
00824             }
00825 #endif
00826             fParticleChange.ProposeTrackStatus( fStopAndKill ) ;
00827         }
00828 
00829         retCurrentTouchable = State(fCurrentTouchableHandle) ;
00830 
00831 //        G4cout << "Current volume : " << track.GetVolume()->GetName()
00832 //               << " Next volume : "
00833 //               << (State(fCurrentTouchableHandle)->GetVolume() ? State(fCurrentTouchableHandle)->GetVolume()->GetName():"OutWorld")
00834 //               << " Position : " << track.GetPosition() / nanometer
00835 //               << " track ID : " << track.GetTrackID()
00836 //               << G4endl;
00837 
00838         fParticleChange.SetTouchableHandle( State(fCurrentTouchableHandle) ) ;
00839 
00840         // Update the Step flag which identifies the Last Step in a volume
00841         isLastStep =  fLinearNavigator->ExitedMotherVolume()
00842                 | fLinearNavigator->EnteredDaughterVolume() ;
00843 
00844 #ifdef G4DEBUG_TRANSPORT
00845         //  Checking first implementation of flagging Last Step in Volume
00846         G4bool exiting =  fLinearNavigator->ExitedMotherVolume();
00847         G4bool entering = fLinearNavigator->EnteredDaughterVolume();
00848 
00849         if( ! (exiting || entering) )
00850         {
00851             G4cout << " Transport> :  Proposed isLastStep= " << isLastStep
00852                    << " Exiting "  << fLinearNavigator->ExitedMotherVolume()
00853                    << " Entering " << fLinearNavigator->EnteredDaughterVolume()
00854                    << " Track position : " << track.GetPosition() /nanometer << " [nm]"
00855                    << G4endl;
00856             G4cout << " Track position : " << track.GetPosition() /nanometer << G4endl;
00857         }
00858 #endif
00859     }
00860     else                 // fGeometryLimitedStep  is false
00861     {
00862         // This serves only to move the Navigator's location
00863         //
00864         fLinearNavigator->LocateGlobalPointWithinVolume( track.GetPosition() ) ;
00865 
00866         // The value of the track's current Touchable is retained.
00867         // (and it must be correct because we must use it below to
00868         // overwrite the (unset) one in particle change)
00869         //  It must be fCurrentTouchable too ??
00870         //
00871         fParticleChange.SetTouchableHandle( track.GetTouchableHandle() ) ;
00872         retCurrentTouchable = track.GetTouchableHandle() ;
00873 
00874         isLastStep= false;
00875 #ifdef G4DEBUG_TRANSPORT
00876         //  Checking first implementation of flagging Last Step in Volume
00877         G4cout << " Transport> Proposed isLastStep= " << isLastStep
00878                << " Geometry did not limit step. Position : "
00879                << track.GetPosition()/ nanometer << G4endl;
00880 #endif
00881     }         // endif ( fGeometryLimitedStep )
00882 
00883     fParticleChange.ProposeLastStepInVolume(isLastStep);
00884 
00885     const G4VPhysicalVolume* pNewVol = retCurrentTouchable->GetVolume() ;
00886     const G4Material* pNewMaterial   = 0 ;
00887     const G4VSensitiveDetector* pNewSensitiveDetector   = 0 ;
00888 
00889     if( pNewVol != 0 )
00890     {
00891         pNewMaterial= pNewVol->GetLogicalVolume()->GetMaterial();
00892         pNewSensitiveDetector= pNewVol->GetLogicalVolume()->GetSensitiveDetector();
00893     }
00894 
00895     // ( <const_cast> pNewMaterial ) ;
00896     // ( <const_cast> pNewSensitiveDetector) ;
00897 
00898     fParticleChange.SetMaterialInTouchable( (G4Material *) pNewMaterial ) ;
00899     fParticleChange.SetSensitiveDetectorInTouchable( (G4VSensitiveDetector *) pNewSensitiveDetector ) ;
00900 
00901     const G4MaterialCutsCouple* pNewMaterialCutsCouple = 0;
00902     if( pNewVol != 0 )
00903     {
00904         pNewMaterialCutsCouple=pNewVol->GetLogicalVolume()->GetMaterialCutsCouple();
00905     }
00906 
00907     if( pNewVol!=0 && pNewMaterialCutsCouple!=0 && pNewMaterialCutsCouple->GetMaterial()!=pNewMaterial )
00908     {
00909         // for parametrized volume
00910         //
00911         pNewMaterialCutsCouple =
00912                 G4ProductionCutsTable::GetProductionCutsTable()
00913                 ->GetMaterialCutsCouple(pNewMaterial,
00914                                         pNewMaterialCutsCouple->GetProductionCuts());
00915     }
00916     fParticleChange.SetMaterialCutsCoupleInTouchable( pNewMaterialCutsCouple );
00917 
00918     // temporarily until Get/Set Material of ParticleChange,
00919     // and StepPoint can be made const.
00920     // Set the touchable in ParticleChange
00921     // this must always be done because the particle change always
00922     // uses this value to overwrite the current touchable pointer.
00923     //
00924     fParticleChange.SetTouchableHandle(retCurrentTouchable) ;
00925 
00926     return &fParticleChange ;
00927 }

G4double G4ITTransportation::PostStepGetPhysicalInteractionLength ( const G4Track ,
G4double  ,
G4ForceCondition pForceCond 
) [virtual]

Implements G4VProcess.

Definition at line 761 of file G4ITTransportation.cc.

References DBL_MAX, and Forced.

00766 {
00767     *pForceCond = Forced ;
00768     return DBL_MAX ;  // was kInfinity ; but convention now is DBL_MAX
00769 }

void G4ITTransportation::ResetKilledStatistics ( G4int  report = 1  )  [inline]

Definition at line 111 of file G4ITTransportation.icc.

References fMaxEnergyKilled, fSumEnergyKilled, G4cout, and G4endl.

00112 {
00113   if( report ) {
00114     G4cout << " G4ITTransportation: Statistics for looping particles " << G4endl;
00115     G4cout << "   Sum of energy of loopers killed: " <<  fSumEnergyKilled << G4endl;
00116     G4cout << "   Max energy of loopers killed: " <<  fMaxEnergyKilled << G4endl;
00117   }
00118 
00119   fSumEnergyKilled= 0;
00120   fMaxEnergyKilled= -1.0*CLHEP::GeV;
00121 }

void G4ITTransportation::SetInstantiateProcessState ( G4bool  flag  )  [inline, protected]

Reimplemented from G4VITProcess.

Definition at line 236 of file G4ITTransportation.hh.

Referenced by G4ITTransportation(), and G4DNABrownianTransportation::StartTracking().

00237     { fInstantiateProcessState = flag; }

void G4ITTransportation::SetPropagatorInField ( G4PropagatorInField pFieldPropagator  )  [inline]

This class is a slightly modified version of G4Transportation initially written by J. Apostolakis and colleagues But it should use the exact same algorithm.

Definition at line 46 of file G4ITTransportation.icc.

References fFieldPropagator.

00047 {
00048    fFieldPropagator= pFieldPropagator;
00049 }

void G4ITTransportation::SetThresholdImportantEnergy ( G4double  newEnImp  )  [inline]

Definition at line 86 of file G4ITTransportation.icc.

References fThreshold_Important_Energy.

00087 {
00088   fThreshold_Important_Energy = newEnImp;
00089 }

void G4ITTransportation::SetThresholdTrials ( G4int  newMaxTrials  )  [inline]

Definition at line 91 of file G4ITTransportation.icc.

References fThresholdTrials.

00092 {
00093   fThresholdTrials = newMaxTrials;
00094 }

void G4ITTransportation::SetThresholdWarningEnergy ( G4double  newEnWarn  )  [inline]

Definition at line 81 of file G4ITTransportation.icc.

References fThreshold_Warning_Energy.

00082 {
00083   fThreshold_Warning_Energy= newEnWarn;
00084 }

void G4ITTransportation::SetVerboseLevel ( G4int  verboseLevel  )  [inline]

Reimplemented from G4VProcess.

Definition at line 56 of file G4ITTransportation.icc.

References fVerboseLevel.

00057 {
00058   fVerboseLevel= verboseLev;
00059 }

void G4ITTransportation::StartTracking ( G4Track aTrack  )  [virtual]

Reimplemented from G4VITProcess.

Reimplemented in G4DNABrownianTransportation.

Definition at line 933 of file G4ITTransportation.cc.

References G4FieldManagerStore::ClearAllChordFindersState(), G4PropagatorInField::ClearPropagatorState(), DoesGlobalFieldExist(), fFieldPropagator, G4VITProcess::fpState, G4FieldManagerStore::GetInstance(), G4Track::GetTouchableHandle(), G4VITProcess::StartTracking(), G4VProcess::StartTracking(), and State.

Referenced by G4DNABrownianTransportation::StartTracking().

00934 {
00935     G4VProcess::StartTracking(track);
00936     if(fInstantiateProcessState)
00937         G4VITProcess::fpState = new G4ITTransportationState();
00938     // Will set in the same time fTransportationState
00939 
00940     // The actions here are those that were taken in AlongStepGPIL
00941     //   when track.GetCurrentStepNumber()==1
00942 
00943     // reset safety value and center
00944     //
00945     //    State(fPreviousSafety)    = 0.0 ;
00946     //    State(fPreviousSftOrigin) = G4ThreeVector(0.,0.,0.) ;
00947 
00948     // reset looping counter -- for motion in field
00949     //    State(fNoLooperTrials)= 0;
00950     // Must clear this state .. else it depends on last track's value
00951     //  --> a better solution would set this from state of suspended track TODO ?
00952     // Was if( aTrack->GetCurrentStepNumber()==1 ) { .. }
00953 
00954     // ChordFinder reset internal state
00955     //
00956     if( DoesGlobalFieldExist() )
00957     {
00958         fFieldPropagator->ClearPropagatorState();
00959         // Resets all state of field propagator class (ONLY)
00960         //  including safety values (in case of overlaps and to wipe for first track).
00961 
00962         // G4ChordFinder* chordF= fFieldPropagator->GetChordFinder();
00963         // if( chordF ) chordF->ResetStepEstimate();
00964     }
00965 
00966     // Make sure to clear the chord finders of all fields (ie managers)
00967     static G4FieldManagerStore* fieldMgrStore= G4FieldManagerStore::GetInstance();
00968     fieldMgrStore->ClearAllChordFindersState();
00969 
00970     // Update the current touchable handle  (from the track's)
00971     //
00972     State(fCurrentTouchableHandle) = track->GetTouchableHandle();
00973 
00974     G4VITProcess::StartTracking(track);
00975 }


Field Documentation

G4PropagatorInField* G4ITTransportation::fFieldPropagator [protected]

Definition at line 202 of file G4ITTransportation.hh.

Referenced by AlongStepDoIt(), AlongStepGetPhysicalInteractionLength(), G4ITTransportation(), GetPropagatorInField(), SetPropagatorInField(), and StartTracking().

G4ITNavigator* G4ITTransportation::fLinearNavigator [protected]

Definition at line 201 of file G4ITTransportation.hh.

Referenced by AlongStepGetPhysicalInteractionLength(), G4ITTransportation(), and PostStepDoIt().

G4double G4ITTransportation::fMaxEnergyKilled [protected]

Definition at line 223 of file G4ITTransportation.hh.

Referenced by AlongStepDoIt(), G4ITTransportation(), GetMaxEnergyKilled(), ResetKilledStatistics(), and ~G4ITTransportation().

G4ParticleChangeForTransport G4ITTransportation::fParticleChange [protected]

Definition at line 207 of file G4ITTransportation.hh.

Referenced by AlongStepDoIt(), G4DNABrownianTransportation::AlongStepDoIt(), ComputeStep(), G4DNABrownianTransportation::Diffusion(), G4ITTransportation(), PostStepDoIt(), and G4DNABrownianTransportation::PostStepDoIt().

G4SafetyHelper* G4ITTransportation::fpSafetyHelper [protected]

Definition at line 229 of file G4ITTransportation.hh.

Referenced by AlongStepGetPhysicalInteractionLength(), and G4ITTransportation().

G4bool G4ITTransportation::fShortStepOptimisation [protected]

Definition at line 227 of file G4ITTransportation.hh.

Referenced by AlongStepGetPhysicalInteractionLength(), EnableShortStepOptimisation(), and G4ITTransportation().

G4double G4ITTransportation::fSumEnergyKilled [protected]

Definition at line 222 of file G4ITTransportation.hh.

Referenced by AlongStepDoIt(), G4ITTransportation(), GetSumEnergyKilled(), ResetKilledStatistics(), and ~G4ITTransportation().

G4double G4ITTransportation::fThreshold_Important_Energy [protected]

Definition at line 213 of file G4ITTransportation.hh.

Referenced by AlongStepDoIt(), G4ITTransportation(), GetThresholdImportantEnergy(), and SetThresholdImportantEnergy().

G4double G4ITTransportation::fThreshold_Warning_Energy [protected]

Definition at line 212 of file G4ITTransportation.hh.

Referenced by AlongStepDoIt(), G4ITTransportation(), GetThresholdWarningEnergy(), and SetThresholdWarningEnergy().

G4int G4ITTransportation::fThresholdTrials [protected]

Definition at line 214 of file G4ITTransportation.hh.

Referenced by AlongStepDoIt(), G4ITTransportation(), GetThresholdTrials(), and SetThresholdTrials().

G4ITTransportationState* const& G4ITTransportation::fTransportationState [protected]

Definition at line 196 of file G4ITTransportation.hh.

G4double G4ITTransportation::fUnimportant_Energy [protected]

Definition at line 217 of file G4ITTransportation.hh.

Referenced by G4ITTransportation().

G4int G4ITTransportation::fVerboseLevel [protected]

Definition at line 232 of file G4ITTransportation.hh.

Referenced by AlongStepDoIt(), G4DNABrownianTransportation::ComputeStep(), G4DNABrownianTransportation::Diffusion(), G4ITTransportation(), GetVerboseLevel(), PostStepDoIt(), G4DNABrownianTransportation::PostStepDoIt(), SetVerboseLevel(), and ~G4ITTransportation().


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:52:20 2013 for Geant4 by  doxygen 1.4.7