48#ifndef G4BiasingProcessInterface_h
49#define G4BiasingProcessInterface_h 1
91 {
return fSharedData->fCurrentBiasingOperator; }
93 {
return fSharedData->fPreviousBiasingOperator; }
96 {
return fNonPhysicsBiasingOperation; }
98 {
return fPreviousNonPhysicsBiasingOperation; }
100 {
return fOccurenceBiasingOperation; }
102 {
return fPreviousOccurenceBiasingOperation; }
104 {
return fFinalStateBiasingOperation; }
106 {
return fPreviousFinalStateBiasingOperation; }
113 {
return fSharedData->fPublicBiasingProcessInterfaces; }
115 {
return fSharedData->fPublicPhysicsBiasingProcessInterfaces; }
117 {
return fSharedData->fPublicNonPhysicsBiasingProcessInterfaces; }
121 {
return fSharedData; }
206 void SetUpFirstLastFlags();
207 void ResetForUnbiasedTracking();
208 void ReorderBiasingVectorAsGPIL();
214 return 4*firstLast + 2*GPILDoIt + physAll;
220 void InvokeWrappedProcessPostStepGPIL(
const G4Track& track,
225 G4Track* fCurrentTrack =
nullptr;
227 G4double fCurrentMinimumStep = -1.0;
230 G4VBiasingOperation* fOccurenceBiasingOperation =
nullptr;
231 G4VBiasingOperation* fFinalStateBiasingOperation =
nullptr;
232 G4VBiasingOperation* fNonPhysicsBiasingOperation =
nullptr;
233 G4VBiasingOperation* fPreviousOccurenceBiasingOperation =
nullptr;
234 G4VBiasingOperation* fPreviousFinalStateBiasingOperation =
nullptr;
235 G4VBiasingOperation* fPreviousNonPhysicsBiasingOperation =
nullptr;
237 G4bool fResetWrappedProcessInteractionLength =
false;
240 const G4bool fIsPhysicsBasedBiasing =
false;
241 const G4bool fWrappedProcessIsAtRest =
false;
242 const G4bool fWrappedProcessIsAlong =
false;
243 const G4bool fWrappedProcessIsPost =
false;
245 G4double fWrappedProcessPostStepGPIL = -1.0;
246 G4double fBiasingPostStepGPIL = -1.0;
247 G4double fWrappedProcessInteractionLength = -1.0;
250 G4double fWrappedProcessAlongStepGPIL = -1.0;
251 G4double fBiasingAlongStepGPIL = -1.0;
255 const G4VBiasingInteractionLaw* fBiasingInteractionLaw =
nullptr;
256 const G4VBiasingInteractionLaw* fPreviousBiasingInteractionLaw =
nullptr;
257 G4InteractionLawPhysical* fPhysicalInteractionLaw =
nullptr;
258 G4ParticleChangeForOccurenceBiasing* fOccurenceBiasingParticleChange =
nullptr;
259 G4ParticleChangeForNothing* fDummyParticleChange =
nullptr;
260 G4bool fFirstLastFlags[8];
263 G4bool fIamFirstGPIL =
false;
266 static G4Cache<G4bool> fResetInteractionLaws;
267 static G4Cache<G4bool> fCommonStart;
268 static G4Cache<G4bool> fCommonEnd;
269 static G4Cache<G4bool> fDoCommonConfigure;
271 const G4ProcessManager* fProcessManager =
nullptr;
274 G4BiasingProcessSharedData* fSharedData =
nullptr;
G4double condition(const G4ErrorSymMatrix &m)
@ NotCandidateForSelection
const std::vector< const G4BiasingProcessInterface * > & GetNonPhysicsBiasingProcessInterfaces() const
G4bool GetIsFirstPostStepGPILInterface(G4bool physOnly=true) const
const std::vector< const G4BiasingProcessInterface * > & GetPhysicsBiasingProcessInterfaces() const
virtual G4double AlongStepGetPhysicalInteractionLength(const G4Track &track, G4double previousStepSize, G4double currentMinimumStep, G4double &proposedSafety, G4GPILSelection *selection)
virtual void ResetNumberOfInteractionLengthLeft()
G4bool IsLastPostStepGPILInterface(G4bool physOnly=true) const
const std::vector< const G4BiasingProcessInterface * > & GetBiasingProcessInterfaces() const
virtual void SetProcessManager(const G4ProcessManager *)
virtual G4double PostStepGetPhysicalInteractionLength(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition)
virtual void SetMasterProcess(G4VProcess *masterP)
G4bool GetWrappedProcessIsAtRest() const
G4double GetPostStepGPIL() const
G4double GetCurrentMinimumStep() const
virtual G4VParticleChange * AlongStepDoIt(const G4Track &track, const G4Step &step)
G4VBiasingOperation * GetPreviousFinalStateBiasingOperation() const
void SetProposedSafety(G4double sft)
~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)
G4VBiasingOperator * GetPreviousBiasingOperator() const
G4VBiasingOperation * GetCurrentFinalStateBiasingOperation() const
G4bool GetIsFirstPostStepDoItInterface(G4bool physOnly=true) const
G4bool IsFirstPostStepDoItInterface(G4bool physOnly=true) const
G4double GetPreviousStepSize() const
virtual G4VParticleChange * AtRestDoIt(const G4Track &, const G4Step &)
G4bool IsLastPostStepDoItInterface(G4bool physOnly=true) const
G4double GetAlongStepGPIL() const
void StartTracking(G4Track *track)
G4bool GetWrappedProcessIsPost() const
G4VBiasingOperator * GetCurrentBiasingOperator() const
G4BiasingProcessInterface(const G4String &name="biasWrapper(0)")
G4double GetProposedSafety() const
G4VBiasingOperation * GetCurrentNonPhysicsBiasingOperation() const
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)
G4VBiasingOperation * GetPreviousOccurenceBiasingOperation() const
virtual G4bool StorePhysicsTable(const G4ParticleDefinition *pd, const G4String &s, G4bool f)
virtual G4bool IsApplicable(const G4ParticleDefinition &pd)
G4bool IsFirstPostStepGPILInterface(G4bool physOnly=true) const
G4bool GetWrappedProcessIsAlong() const
G4VBiasingOperation * GetCurrentOccurenceBiasingOperation() const
G4VProcess * GetWrappedProcess() const
G4VBiasingOperation * GetPreviousNonPhysicsBiasingOperation() const
virtual void BuildWorkerPhysicsTable(const G4ParticleDefinition &pd)
G4VProcess(const G4String &aName="NoName", G4ProcessType aType=fNotDefined)