38 fOccurenceBiasingOperation ( nullptr ),
39 fFinalStateBiasingOperation ( nullptr ),
40 fNonPhysicsBiasingOperation ( nullptr ),
41 fPreviousProposedOccurenceBiasingOperation ( nullptr ),
42 fPreviousProposedFinalStateBiasingOperation( nullptr ),
43 fPreviousProposedNonPhysicsBiasingOperation( nullptr ),
44 fPreviousAppliedOccurenceBiasingOperation ( nullptr ),
45 fPreviousAppliedFinalStateBiasingOperation ( nullptr ),
46 fPreviousAppliedNonPhysicsBiasingOperation ( nullptr ),
47 fPreviousBiasingAppliedCase (
BAC_None )
62 it = fLogicalToSetupMap.
Find(logical);
63 if ( it == fLogicalToSetupMap.
End() ) fLogicalToSetupMap[logical] =
this;
64 else if ( (*it).second !=
this )
67 ed <<
"Biasing operator `" <<
GetName()
68 <<
"' can not be attached to Logical volume `"
69 << logical->
GetName() <<
"' which is already used by an other operator !" <<
G4endl;
81 it = fLogicalToSetupMap.
Find(logical);
82 if ( it == fLogicalToSetupMap.
End() )
return nullptr;
83 else return (*it).second;
89 return fOccurenceBiasingOperation;
95 return fFinalStateBiasingOperation;
101 return fNonPhysicsBiasingOperation;
109 fPreviousBiasingAppliedCase = biasingCase;
110 fPreviousAppliedOccurenceBiasingOperation =
nullptr;
111 fPreviousAppliedFinalStateBiasingOperation =
nullptr;
112 fPreviousAppliedNonPhysicsBiasingOperation =
nullptr;
113 switch ( biasingCase )
118 fPreviousAppliedNonPhysicsBiasingOperation = operationApplied ;
121 fPreviousAppliedFinalStateBiasingOperation = operationApplied;
124 G4Exception(
"G4VBiasingOperator::ReportOperationApplied(...)",
127 "Internal logic error, please report !");
130 G4Exception(
"G4VBiasingOperator::ReportOperationApplied(...)",
133 "Internal logic error, please report !");
135 OperationApplied( callingProcess, biasingCase, operationApplied, particleChangeProduced );
141 G4double weightForOccurenceInteraction,
145 fPreviousBiasingAppliedCase = biasingCase;
146 fPreviousAppliedOccurenceBiasingOperation = occurenceOperationApplied;
147 fPreviousAppliedFinalStateBiasingOperation = finalStateOperationApplied;
148 OperationApplied( callingProcess, biasingCase, occurenceOperationApplied, weightForOccurenceInteraction, finalStateOperationApplied, particleChangeProduced );
157 fOccurenceBiasingOperation = nullptr ;
158 fFinalStateBiasingOperation = nullptr ;
159 fNonPhysicsBiasingOperation = nullptr ;
160 fPreviousProposedOccurenceBiasingOperation = nullptr ;
161 fPreviousProposedFinalStateBiasingOperation = nullptr ;
162 fPreviousProposedNonPhysicsBiasingOperation = nullptr ;
163 fPreviousAppliedOccurenceBiasingOperation = nullptr ;
164 fPreviousAppliedFinalStateBiasingOperation = nullptr ;
165 fPreviousAppliedNonPhysicsBiasingOperation = nullptr ;
166 fPreviousBiasingAppliedCase =
BAC_None ;
203 for (
size_t i = 0 ; i < G4VBiasingOperator::fOperators.
Size() ; i++ ) G4VBiasingOperator::fOperators[i]->StartRun();
206 fPreviousState = requestedState;
G4VBiasingOperation * GetProposedFinalStateBiasingOperation(const G4Track *track, const G4BiasingProcessInterface *callingProcess)
virtual void OperationApplied(const G4BiasingProcessInterface *callingProcess, G4BiasingAppliedCase biasingCase, G4VBiasingOperation *operationApplied, const G4VParticleChange *particleChangeProduced)
std::ostringstream G4ExceptionDescription
G4VBiasingOperation * GetProposedOccurenceBiasingOperation(const G4Track *track, const G4BiasingProcessInterface *callingProcess)
virtual G4VBiasingOperation * ProposeFinalStateBiasingOperation(const G4Track *track, const G4BiasingProcessInterface *callingProcess)=0
virtual ~G4VBiasingOperator()
G4bool Notify(G4ApplicationState requestedState)
virtual void ExitBiasing(const G4Track *track, const G4BiasingProcessInterface *callingProcess)
G4BiasingOperatorStateNotifier()
virtual G4VBiasingOperation * ProposeOccurenceBiasingOperation(const G4Track *track, const G4BiasingProcessInterface *callingProcess)=0
void AttachTo(const G4LogicalVolume *)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
virtual G4VBiasingOperation * ProposeNonPhysicsBiasingOperation(const G4Track *track, const G4BiasingProcessInterface *callingProcess)=0
static G4VBiasingOperator * GetBiasingOperator(const G4LogicalVolume *)
void Push_back(const value_type &val)
iterator Find(const key_type &k)
G4VBiasingOperator(G4String name)
~G4BiasingOperatorStateNotifier()
const G4String & GetName() const
void ReportOperationApplied(const G4BiasingProcessInterface *callingProcess, G4BiasingAppliedCase biasingCase, G4VBiasingOperation *operationApplied, const G4VParticleChange *particleChangeProduced)
G4VBiasingOperation * GetProposedNonPhysicsBiasingOperation(const G4Track *track, const G4BiasingProcessInterface *callingProcess)
void ExitingBiasing(const G4Track *track, const G4BiasingProcessInterface *callingProcess)
void Put(const value_type &val) const
const G4String GetName() const