47 fResetWrappedProcessInteractionLength( true )
49 for (
G4int i = 0 ; i < 8 ; i++) fFirstLastFlags[i] =
false;
50 fResetInteractionLaws.Put(
true );
51 fCommonStart .Put(
true );
52 fCommonEnd .Put(
true );
53 fDoCommonConfigure .Put(
true );
67 fWrappedProcess( wrappedProcess ),
68 fIsPhysicsBasedBiasing( true ),
69 fWrappedProcessIsAtRest( wrappedIsAtRest ),
70 fWrappedProcessIsAlong( wrappedIsAlongStep ),
71 fWrappedProcessIsPost( wrappedIsPostStep )
73 for (
G4int i = 0 ; i < 8 ; ++i)
74 fFirstLastFlags[i] =
false;
75 fResetInteractionLaws.Put(
true );
76 fCommonStart.Put(
true);
78 fDoCommonConfigure.Put(
true);
92 delete fPhysicalInteractionLaw;
93 delete fOccurenceBiasingParticleChange;
94 delete fDummyParticleChange;
100 const auto & itr = G4BiasingProcessSharedData::fSharedDataMap.Find( mgr );
101 if ( itr != G4BiasingProcessSharedData::fSharedDataMap.End( ) )
103 return (*itr).second;
111 fCurrentTrack = track;
112 if ( fIsPhysicsBasedBiasing ) fWrappedProcess->StartTracking(fCurrentTrack);
113 fOccurenceBiasingOperation =
nullptr;
114 fPreviousOccurenceBiasingOperation =
nullptr;
115 fFinalStateBiasingOperation =
nullptr;
116 fPreviousFinalStateBiasingOperation =
nullptr;
117 fNonPhysicsBiasingOperation =
nullptr;
118 fPreviousNonPhysicsBiasingOperation =
nullptr;
119 fBiasingInteractionLaw =
nullptr;
120 fPreviousBiasingInteractionLaw =
nullptr;
122 fPreviousStepSize = -1.0;
124 fResetWrappedProcessInteractionLength =
false;
126 if ( fCommonStart.Get() )
128 fCommonStart.Put(
false );
129 fCommonEnd.Put(
true );
131 fSharedData->fCurrentBiasingOperator =
nullptr;
132 fSharedData->fPreviousBiasingOperator =
nullptr;
146 if ( fIsPhysicsBasedBiasing )
147 fWrappedProcess->EndTracking();
148 if ( fSharedData->fCurrentBiasingOperator)
149 (fSharedData->fCurrentBiasingOperator)->ExitingBiasing(fCurrentTrack,
this);
150 fBiasingInteractionLaw =
nullptr;
153 if ( fCommonEnd.Get() )
155 fCommonEnd .Put(
false );
156 fCommonStart.Put(
true );
183 fSharedData->fPreviousBiasingOperator = fSharedData->fCurrentBiasingOperator;
184 fSharedData->fIsNewOperator =
false;
185 fSharedData->fLeavingPreviousOperator =
false;
189 G4bool firstStepInParallelVolume =
false;
190 if ( fSharedData->fParallelGeometriesLimiterProcess )
194 std::size_t iParallel = 0;
195 for (
auto wasLimiting : fSharedData->fParallelGeometriesLimiterProcess->GetWasLimiting() )
197 if ( firstStep || wasLimiting )
199 firstStepInParallelVolume =
true;
202 ->GetCurrentVolumes()[iParallel])
203 ->GetLogicalVolume());
204 if ( newParallelOperator )
206 if ( tmpParallelOperator )
209 ed <<
" Several biasing operators are defined at the same place\n"
210 <<
" in parallel geometries ! Found:\n";
211 ed <<
" - `" << newParallelOperator->
GetName() <<
"' and \n";
212 ed <<
" - `" << tmpParallelOperator->GetName() <<
"'.\n";
213 ed <<
" Keeping `" << newParallelOperator->
GetName()
214 <<
"'. Behavior not guaranteed ! Please consider having only one operator at a place."
216 G4Exception(
" G4BiasingProcessInterface::PostStepGetPhysicalInteractionLength(...)",
220 else newParallelOperator = tmpParallelOperator;
224 fSharedData->fParallelGeometryOperator = newParallelOperator;
233 if ( firstStepInVolume )
237 fSharedData->fMassGeometryOperator = newOperator;
238 if ( ( newOperator !=
nullptr ) && ( fSharedData->fParallelGeometryOperator !=
nullptr ) )
241 ed <<
" Biasing operators are defined at the same place in mass and parallel geometries ! Found:\n";
242 ed <<
" - `" << fSharedData->fParallelGeometryOperator->GetName() <<
"' in parallel geometry and \n";
243 ed <<
" - `" << newOperator->
GetName() <<
"' in mass geometry.\n";
244 ed <<
" Keeping `" << fSharedData->fParallelGeometryOperator->GetName() <<
"'. Behavior not guaranteed ! Please consider having only one operator at a place. " <<
G4endl;
245 G4Exception(
" G4BiasingProcessInterface::PostStepGetPhysicalInteractionLength(...)",
251 if ( firstStepInVolume || firstStepInParallelVolume )
254 if ( newOperator ==
nullptr )
255 newOperator = fSharedData->fMassGeometryOperator;
257 fSharedData->fCurrentBiasingOperator = newOperator ;
259 if ( newOperator != fSharedData->fPreviousBiasingOperator )
261 fSharedData->fLeavingPreviousOperator = ( fSharedData->fPreviousBiasingOperator != nullptr ) ;
262 fSharedData->fIsNewOperator = ( newOperator != nullptr );
273 if ( fSharedData->fCurrentBiasingOperator !=
nullptr )
275 for (std::size_t i=0; i<(fSharedData->fPhysicsBiasingProcessInterfaces).size(); ++i)
277 (fSharedData->fPhysicsBiasingProcessInterfaces)[i]->InvokeWrappedProcessPostStepGPIL( track, previousStepSize,
condition );
285 if ( ( fSharedData->fPreviousBiasingOperator !=
nullptr ) ||
286 ( fSharedData->fCurrentBiasingOperator !=
nullptr ) )
288 fPreviousOccurenceBiasingOperation = fOccurenceBiasingOperation;
289 fPreviousFinalStateBiasingOperation = fFinalStateBiasingOperation;
290 fPreviousNonPhysicsBiasingOperation = fNonPhysicsBiasingOperation;
291 fPreviousBiasingInteractionLaw = fBiasingInteractionLaw;
293 fOccurenceBiasingOperation =
nullptr;
294 fFinalStateBiasingOperation =
nullptr;
295 fNonPhysicsBiasingOperation =
nullptr;
296 fBiasingInteractionLaw =
nullptr;
299 fBiasingPostStepGPIL =
DBL_MAX;
303 fWrappedProcessAlongStepGPIL =
DBL_MAX;
304 fBiasingAlongStepGPIL =
DBL_MAX;
308 fPreviousStepSize = previousStepSize;
313 G4double usedPreviousStepSize = previousStepSize;
318 if ( fSharedData->fLeavingPreviousOperator )
320 (fSharedData->fPreviousBiasingOperator)->ExitingBiasing( &track,
this );
322 if ( fSharedData->fCurrentBiasingOperator ==
nullptr )
324 ResetForUnbiasedTracking();
325 if ( fIsPhysicsBasedBiasing )
328 if ( fResetWrappedProcessInteractionLength )
330 fResetWrappedProcessInteractionLength =
false;
331 fWrappedProcess->ResetNumberOfInteractionLengthLeft();
333 usedPreviousStepSize = 0.0;
342 if ( fSharedData->fCurrentBiasingOperator ==
nullptr )
345 if ( fIsPhysicsBasedBiasing )
347 return fWrappedProcess->PostStepGetPhysicalInteractionLength(track, usedPreviousStepSize,
condition);
363 if ( !fIsPhysicsBasedBiasing )
365 fNonPhysicsBiasingOperation = (fSharedData->fCurrentBiasingOperator)->GetProposedNonPhysicsBiasingOperation( &track,
this );
366 if ( fNonPhysicsBiasingOperation ==
nullptr )
371 return fNonPhysicsBiasingOperation->DistanceToApplyOperation(&track, previousStepSize,
condition);
377 fOccurenceBiasingOperation = (fSharedData->fCurrentBiasingOperator)->GetProposedOccurenceBiasingOperation( &track,
this );
380 if ( fOccurenceBiasingOperation ==
nullptr )
382 *
condition = fWrappedProcessForceCondition;
383 return fWrappedProcessPostStepGPIL;
388 fResetWrappedProcessInteractionLength =
true;
390 fPhysicalInteractionLaw->SetPhysicalCrossSection( 1.0 / fWrappedProcessInteractionLength );
396 fBiasingForceCondition = fWrappedProcessForceCondition;
397 fBiasingInteractionLaw = fOccurenceBiasingOperation->ProvideOccurenceBiasingInteractionLaw(
this, fBiasingForceCondition );
399 fBiasingPostStepGPIL = fBiasingInteractionLaw->GetSampledInteractionLength();
403 return fBiasingPostStepGPIL;
412 if ( fSharedData->fCurrentBiasingOperator ==
nullptr )
413 return fWrappedProcess->PostStepDoIt(track, step);
418 if ( !fIsPhysicsBasedBiasing )
420 G4VParticleChange* particleChange = fNonPhysicsBiasingOperation->GenerateBiasingFinalState( &track, &step );
421 (fSharedData->fCurrentBiasingOperator)->ReportOperationApplied(
this,
BAC_NonPhysics, fNonPhysicsBiasingOperation, particleChange );
422 return particleChange;
442 fFinalStateBiasingOperation = (fSharedData->fCurrentBiasingOperator)->GetProposedFinalStateBiasingOperation( &track,
this );
445 G4bool forceBiasedFinalState =
false;
446 if ( fFinalStateBiasingOperation !=
nullptr )
448 finalStateParticleChange = fFinalStateBiasingOperation->ApplyFinalStateBiasing(
this, &track, &step, forceBiasedFinalState );
453 finalStateParticleChange = fWrappedProcess->PostStepDoIt(track, step);
458 if ( fOccurenceBiasingOperation ==
nullptr )
460 (fSharedData->fCurrentBiasingOperator)->ReportOperationApplied(
this, BAC, fFinalStateBiasingOperation, finalStateParticleChange );
461 return finalStateParticleChange;
465 if ( forceBiasedFinalState )
467 (fSharedData->fCurrentBiasingOperator)->ReportOperationApplied(
this, BAC, fFinalStateBiasingOperation, finalStateParticleChange );
468 return finalStateParticleChange;
472 G4double weightForInteraction = 1.0;
473 if ( !fBiasingInteractionLaw->IsSingular() )
475 weightForInteraction = fPhysicalInteractionLaw->ComputeEffectiveCrossSectionAt(step.
GetStepLength())
476 / fBiasingInteractionLaw ->ComputeEffectiveCrossSectionAt(step.
GetStepLength());
481 if ( !fBiasingInteractionLaw->IsEffectiveCrossSectionInfinite() )
484 ed <<
"Internal inconsistency in cross-section handling. Please report !" <<
G4endl;
485 G4Exception(
" G4BiasingProcessInterface::PostStepDoIt(...)",
493 if ( weightForInteraction <= 0. )
496 ed <<
" Negative interaction weight : w_I = "
497 << weightForInteraction <<
" XS_I(phys) = "
498 << fBiasingInteractionLaw ->ComputeEffectiveCrossSectionAt(step.
GetStepLength())
500 << fPhysicalInteractionLaw->ComputeEffectiveCrossSectionAt(step.
GetStepLength())
502 <<
" Interaction law = `" << fBiasingInteractionLaw <<
"'"
504 G4Exception(
" G4BiasingProcessInterface::PostStepDoIt(...)",
508 (fSharedData->fCurrentBiasingOperator)
509 ->ReportOperationApplied(
this, BAC, fOccurenceBiasingOperation,
510 weightForInteraction,
511 fFinalStateBiasingOperation,
512 finalStateParticleChange );
514 fOccurenceBiasingParticleChange->SetOccurenceWeightForInteraction( weightForInteraction );
515 fOccurenceBiasingParticleChange->SetSecondaryWeightByProcess(
true );
516 fOccurenceBiasingParticleChange->SetWrappedParticleChange( finalStateParticleChange );
517 fOccurenceBiasingParticleChange->ProposeTrackStatus( finalStateParticleChange->
GetTrackStatus() );
518 fOccurenceBiasingParticleChange->StealSecondaries();
521 return fOccurenceBiasingParticleChange;
533 fCurrentMinimumStep = currentMinimumStep;
534 fProposedSafety = proposedSafety;
537 fWrappedProcessAlongStepGPIL =
DBL_MAX;
542 if ( fSharedData->fCurrentBiasingOperator ==
nullptr )
544 if ( fWrappedProcessIsAlong )
545 fWrappedProcessAlongStepGPIL = fWrappedProcess
546 ->AlongStepGetPhysicalInteractionLength(track, previousStepSize,
548 proposedSafety, selection);
549 return fWrappedProcessAlongStepGPIL;
555 if ( !fIsPhysicsBasedBiasing )
return fWrappedProcessAlongStepGPIL;
560 if ( fOccurenceBiasingOperation ==
nullptr )
562 if ( fWrappedProcessIsAlong )
563 fWrappedProcessAlongStepGPIL = fWrappedProcess
564 ->AlongStepGetPhysicalInteractionLength(track, previousStepSize,
566 proposedSafety, selection);
567 return fWrappedProcessAlongStepGPIL;
574 fBiasingAlongStepGPIL = fOccurenceBiasingOperation->ProposeAlongStepLimit(
this );
575 G4double minimumStep = fBiasingAlongStepGPIL < currentMinimumStep
576 ? fBiasingAlongStepGPIL : currentMinimumStep;
579 if ( fWrappedProcessIsAlong )
581 fWrappedProcessAlongStepGPIL = fWrappedProcess
582 ->AlongStepGetPhysicalInteractionLength(track, previousStepSize,
584 proposedSafety, selection);
585 fWrappedProcessGPILSelection = *selection;
586 fBiasingGPILSelection = fOccurenceBiasingOperation
587 ->ProposeGPILSelection( fWrappedProcessGPILSelection );
591 fBiasingGPILSelection = fOccurenceBiasingOperation
593 fWrappedProcessAlongStepGPIL = fBiasingAlongStepGPIL;
596 *selection = fBiasingGPILSelection;
598 return fWrappedProcessAlongStepGPIL;
608 if ( fSharedData->fCurrentBiasingOperator ==
nullptr )
610 if ( fWrappedProcessIsAlong )
612 return fWrappedProcess->AlongStepDoIt(track, step);
616 fDummyParticleChange->Initialize( track );
617 return fDummyParticleChange;
624 if ( fWrappedProcessIsAlong )
626 fOccurenceBiasingParticleChange
627 ->SetWrappedParticleChange(fWrappedProcess->AlongStepDoIt(track, step));
631 fOccurenceBiasingParticleChange->SetWrappedParticleChange (
nullptr );
632 fOccurenceBiasingParticleChange->ProposeTrackStatus( track.
GetTrackStatus() );
634 G4double weightForNonInteraction (1.0);
635 if ( fBiasingInteractionLaw !=
nullptr )
637 weightForNonInteraction =
638 fPhysicalInteractionLaw->ComputeNonInteractionProbabilityAt(step.
GetStepLength()) /
639 fBiasingInteractionLaw ->ComputeNonInteractionProbabilityAt(step.
GetStepLength());
641 fOccurenceBiasingOperation->AlongMoveBy(
this, &step, weightForNonInteraction );
643 if ( weightForNonInteraction <= 0. )
646 ed <<
" Negative non interaction weight : w_NI = " << weightForNonInteraction <<
647 " p_NI(phys) = " << fPhysicalInteractionLaw->ComputeNonInteractionProbabilityAt(step.
GetStepLength()) <<
648 " p_NI(bias) = " << fBiasingInteractionLaw ->ComputeNonInteractionProbabilityAt(step.
GetStepLength()) <<
650 " biasing interaction law = `" << fBiasingInteractionLaw->GetName() <<
"'" <<
G4endl;
651 G4Exception(
" G4BiasingProcessInterface::AlongStepDoIt(...)",
656 fOccurenceBiasingParticleChange
657 ->SetOccurenceWeightForNonInteraction( weightForNonInteraction );
659 return fOccurenceBiasingParticleChange;
667 return fWrappedProcess->AtRestGetPhysicalInteractionLength(track,
condition);
673 return fWrappedProcess->AtRestDoIt(track, step);
678 if ( fWrappedProcess !=
nullptr )
679 return fWrappedProcess->IsApplicable(pd);
689 if ( fWrappedProcess !=
nullptr )
709 if ( fWrappedProcess !=
nullptr )
711 fWrappedProcess->BuildPhysicsTable(pd);
718 ReorderBiasingVectorAsGPIL();
722 if ( fDoCommonConfigure.Get() )
728 fDoCommonConfigure.Put(
false);
740 SetUpFirstLastFlags();
741 if ( fWrappedProcess !=
nullptr )
743 fWrappedProcess->PreparePhysicsTable(pd);
750 if ( fWrappedProcess !=
nullptr )
751 return fWrappedProcess->StorePhysicsTable(pd, s, f);
759 if ( fWrappedProcess !=
nullptr )
760 return fWrappedProcess->RetrievePhysicsTable(pd, s, f);
767 if ( fWrappedProcess !=
nullptr )
768 fWrappedProcess->SetProcessManager(mgr);
773 if (G4BiasingProcessSharedData::fSharedDataMap.Find(mgr)
774 == G4BiasingProcessSharedData::fSharedDataMap.End() )
777 G4BiasingProcessSharedData::fSharedDataMap[mgr] = fSharedData;
781 fSharedData = G4BiasingProcessSharedData::fSharedDataMap[mgr] ;
784 fSharedData->fBiasingProcessInterfaces.push_back(
this );
785 fSharedData->fPublicBiasingProcessInterfaces.push_back(
this );
786 if ( fIsPhysicsBasedBiasing )
788 fSharedData->fPhysicsBiasingProcessInterfaces.push_back(
this );
789 fSharedData-> fPublicPhysicsBiasingProcessInterfaces.push_back(
this );
793 fSharedData->fNonPhysicsBiasingProcessInterfaces.push_back(
this );
794 fSharedData->fPublicNonPhysicsBiasingProcessInterfaces.push_back(
this );
797 fProcessManager = mgr;
802 if ( fWrappedProcess !=
nullptr )
803 return fWrappedProcess->GetProcessManager();
816 if ( fWrappedProcess !=
nullptr )
818 fWrappedProcess->BuildWorkerPhysicsTable(pd);
825 ReorderBiasingVectorAsGPIL();
829 if ( fDoCommonConfigure.Get() )
835 fDoCommonConfigure.Put(
false);
846 SetUpFirstLastFlags();
848 if ( fWrappedProcess !=
nullptr )
850 fWrappedProcess->PrepareWorkerPhysicsTable(pd);
856 if ( fWrappedProcess !=
nullptr )
857 fWrappedProcess->ResetNumberOfInteractionLengthLeft();
863 G4int iPhys = ( physOnly ) ? 1 : 0;
864 return fFirstLastFlags[IdxFirstLast( 1, 1, iPhys)];
870 G4int iPhys = ( physOnly ) ? 1 : 0;
871 return fFirstLastFlags[IdxFirstLast( 0, 1, iPhys)];
877 G4int iPhys = ( physOnly ) ? 1 : 0;
878 return fFirstLastFlags[IdxFirstLast( 1, 0, iPhys)];
884 G4int iPhys = ( physOnly ) ? 1 : 0;
885 return fFirstLastFlags[IdxFirstLast( 0, 0, iPhys)];
894 for (
auto i = 0; i < (
G4int)pv->
size(); ++i )
896 if ( (*pv)(i) ==
this ) { thisIdx = i;
break; }
898 if ( thisIdx < 0 )
return false;
899 for ( std::size_t i=0; i<(fSharedData->fBiasingProcessInterfaces).size(); ++i )
901 if ( (fSharedData->fBiasingProcessInterfaces)[i]->fIsPhysicsBasedBiasing || !physOnly )
904 for (
auto j = 0; j < (
G4int)pv->
size(); ++j )
906 if ( (*pv)(j) == (fSharedData->fBiasingProcessInterfaces)[i] )
913 if ( thisIdx > thatIdx )
930 for (
auto i = 0; i < (
G4int)pv->
size(); ++i )
932 if ( (*pv)(i) ==
this ) { thisIdx = i;
break; }
934 if ( thisIdx < 0 )
return false;
935 for (std::size_t i=0; i<(fSharedData->fBiasingProcessInterfaces).size(); ++i)
937 if ( (fSharedData->fBiasingProcessInterfaces)[i]->fIsPhysicsBasedBiasing || !physOnly )
940 for (
auto j = 0; j < (
G4int)pv->
size(); ++j )
942 if ( (*pv)(j) == (fSharedData->fBiasingProcessInterfaces)[i] )
949 if ( thisIdx < thatIdx )
966 for (
auto i = 0; i < (
G4int)pv->
size(); ++i )
968 if ( (*pv)(i) ==
this ) { thisIdx = i;
break; }
970 if ( thisIdx < 0 )
return false;
971 for (std::size_t i=0; i<(fSharedData->fBiasingProcessInterfaces).size(); ++i)
973 if ( (fSharedData->fBiasingProcessInterfaces)[i]->fIsPhysicsBasedBiasing || !physOnly )
976 for (
auto j = 0; j < (
G4int)pv->
size(); ++j )
978 if ( (*pv)(j) == (fSharedData->fBiasingProcessInterfaces)[i] )
985 if ( thisIdx > thatIdx )
1002 for (
auto i = 0; i < (
G4int)pv->
size(); ++i)
1004 if ( (*pv)(i) ==
this ) { thisIdx = i;
break; }
1006 if ( thisIdx < 0 )
return false;
1007 for (std::size_t i=0; i<(fSharedData->fBiasingProcessInterfaces).size(); ++i)
1009 if ( (fSharedData->fBiasingProcessInterfaces)[i]->fIsPhysicsBasedBiasing || !physOnly )
1012 for (
auto j = 0; j < (
G4int)pv->
size(); ++j)
1014 if ( (*pv)(j) == (fSharedData->fBiasingProcessInterfaces)[i] )
1021 if ( thisIdx < thatIdx )
1032void G4BiasingProcessInterface::SetUpFirstLastFlags()
1034 for (
G4int iPhys = 0; iPhys < 2; ++iPhys)
1036 G4bool physOnly = ( iPhys == 1 );
1047void G4BiasingProcessInterface::ResetForUnbiasedTracking()
1049 fOccurenceBiasingOperation =
nullptr;
1050 fFinalStateBiasingOperation =
nullptr;
1051 fNonPhysicsBiasingOperation =
nullptr;
1052 fBiasingInteractionLaw =
nullptr;
1055void G4BiasingProcessInterface::
1056InvokeWrappedProcessPostStepGPIL(
const G4Track& track,
1060 G4double usedPreviousStepSize = previousStepSize;
1067 if ( fResetWrappedProcessInteractionLength )
1069 fResetWrappedProcessInteractionLength =
false;
1070 fWrappedProcess->ResetNumberOfInteractionLengthLeft();
1072 usedPreviousStepSize = 0.0;
1075 fWrappedProcessPostStepGPIL = fWrappedProcess->PostStepGetPhysicalInteractionLength(track, usedPreviousStepSize,
condition);
1076 fWrappedProcessForceCondition = *
condition;
1078 fWrappedProcessInteractionLength = fWrappedProcess->GetCurrentInteractionLength();
1081void G4BiasingProcessInterface::ReorderBiasingVectorAsGPIL()
1084 std::vector < G4BiasingProcessInterface* > tmpProcess ( fSharedData->fBiasingProcessInterfaces );
1085 ( fSharedData -> fBiasingProcessInterfaces ) . clear();
1086 ( fSharedData -> fPhysicsBiasingProcessInterfaces ) . clear();
1087 ( fSharedData -> fNonPhysicsBiasingProcessInterfaces ) . clear();
1088 ( fSharedData -> fPublicBiasingProcessInterfaces ) . clear();
1089 ( fSharedData -> fPublicPhysicsBiasingProcessInterfaces ) . clear();
1090 ( fSharedData -> fPublicNonPhysicsBiasingProcessInterfaces ) . clear();
1092 const G4ProcessVector* pv = fProcessManager->GetPostStepProcessVector(
typeGPIL);
1093 for (
auto i = 0; i < (
G4int)pv->
size(); ++i)
1095 for (std::size_t j = 0; j < tmpProcess.size(); ++j)
1097 if ( (*pv)(i) == tmpProcess[j] )
1099 ( fSharedData->fBiasingProcessInterfaces ).push_back( tmpProcess[j] );
1100 ( fSharedData->fPublicBiasingProcessInterfaces ).push_back( tmpProcess[j] );
1101 if ( tmpProcess[j] -> fIsPhysicsBasedBiasing )
1103 ( fSharedData->fPhysicsBiasingProcessInterfaces ).push_back( tmpProcess[j] );
1104 ( fSharedData->fPublicPhysicsBiasingProcessInterfaces ).push_back( tmpProcess[j] );
1108 ( fSharedData -> fNonPhysicsBiasingProcessInterfaces ).push_back( tmpProcess[j] );
1109 ( fSharedData -> fPublicNonPhysicsBiasingProcessInterfaces ).push_back( tmpProcess[j] );
G4double condition(const G4ErrorSymMatrix &m)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
@ NotCandidateForSelection
G4bool GetIsFirstPostStepGPILInterface(G4bool physOnly=true) const
virtual G4double AlongStepGetPhysicalInteractionLength(const G4Track &track, G4double previousStepSize, G4double currentMinimumStep, G4double &proposedSafety, G4GPILSelection *selection)
virtual void ResetNumberOfInteractionLengthLeft()
G4bool IsLastPostStepGPILInterface(G4bool physOnly=true) const
virtual void SetProcessManager(const G4ProcessManager *)
virtual G4double PostStepGetPhysicalInteractionLength(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition)
virtual void SetMasterProcess(G4VProcess *masterP)
virtual G4VParticleChange * AlongStepDoIt(const G4Track &track, const G4Step &step)
~G4BiasingProcessInterface()
G4bool GetIsLastPostStepDoItInterface(G4bool physOnly=true) const
virtual void PrepareWorkerPhysicsTable(const G4ParticleDefinition &pd)
G4bool GetIsLastPostStepGPILInterface(G4bool physOnly=true) const
virtual G4VParticleChange * PostStepDoIt(const G4Track &track, const G4Step &step)
G4bool GetIsFirstPostStepDoItInterface(G4bool physOnly=true) const
G4bool IsFirstPostStepDoItInterface(G4bool physOnly=true) const
virtual G4VParticleChange * AtRestDoIt(const G4Track &, const G4Step &)
G4bool IsLastPostStepDoItInterface(G4bool physOnly=true) const
void StartTracking(G4Track *track)
G4BiasingProcessInterface(const G4String &name="biasWrapper(0)")
const G4BiasingProcessSharedData * GetSharedData() const
virtual G4bool RetrievePhysicsTable(const G4ParticleDefinition *pd, const G4String &s, G4bool f)
virtual const G4ProcessManager * GetProcessManager()
virtual void PreparePhysicsTable(const G4ParticleDefinition &pd)
virtual G4double AtRestGetPhysicalInteractionLength(const G4Track &, G4ForceCondition *)
virtual void BuildPhysicsTable(const G4ParticleDefinition &pd)
virtual G4bool StorePhysicsTable(const G4ParticleDefinition *pd, const G4String &s, G4bool f)
virtual G4bool IsApplicable(const G4ParticleDefinition &pd)
G4bool IsFirstPostStepGPILInterface(G4bool physOnly=true) const
G4VProcess * GetWrappedProcess() const
virtual void BuildWorkerPhysicsTable(const G4ParticleDefinition &pd)
G4double GetStepLength() const
G4TrackStatus GetTrackStatus() const
G4VPhysicalVolume * GetVolume() const
G4int GetCurrentStepNumber() const
const G4Step * GetStep() const
const G4String & GetName() const
static const std::vector< G4VBiasingOperator * > & GetBiasingOperators()
static G4VBiasingOperator * GetBiasingOperator(const G4LogicalVolume *)
G4TrackStatus GetTrackStatus() const
G4LogicalVolume * GetLogicalVolume() const
const G4VProcess * GetMasterProcess() const
virtual const G4ProcessManager * GetProcessManager()
G4VProcess(const G4String &aName="NoName", G4ProcessType aType=fNotDefined)
G4ProcessType GetProcessType() const
virtual void SetMasterProcess(G4VProcess *masterP)
void SetProcessSubType(G4int)
virtual void SetProcessManager(const G4ProcessManager *)
const G4String & GetProcessName() const