#include <G4ITTransportation.hh>
Inheritance diagram for G4ITTransportation:
Definition at line 57 of file G4ITTransportation.hh.
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 }
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] |
virtual G4double G4ITTransportation::AtRestGetPhysicalInteractionLength | ( | const G4Track & | , | |
G4ForceCondition * | ||||
) | [inline, virtual] |
virtual void G4ITTransportation::BuildPhysicsTable | ( | const G4ParticleDefinition & | ) | [inline, virtual] |
Reimplemented from G4VITProcess.
Reimplemented in G4DNABrownianTransportation.
Definition at line 69 of file G4ITTransportation.hh.
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] |
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().
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 }
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().
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().
Definition at line 213 of file G4ITTransportation.hh.
Referenced by AlongStepDoIt(), G4ITTransportation(), GetThresholdImportantEnergy(), and SetThresholdImportantEnergy().
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] |
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().