35 fInteractionOccured(false)
39 fTotalCrossSection = 0.0;
47 return fCommonTruncatedExpLaw;
72 if ( processGPIL <= step->GetStepLength() )
75 fInteractionOccured = (fInteractionOccured || !denyProcess);
83 return fCrossSections[fProcessToApply] / fTotalCrossSection;
92 fTotalCrossSection += crossSection;
93 fCrossSections[process] = crossSection;
94 fNumberOfSharing = fCrossSections.size();
102 fCrossSections.clear();
103 fTotalCrossSection = 0.0;
104 fNumberOfSharing = 0;
108 fCommonTruncatedExpLaw->
reset();
111 GetNavigatorForTracking()->
112 GetGlobalToLocalTransform()).TransformPoint(track->
GetPosition());
114 GetNavigatorForTracking()->
116 fMaximumDistance = currentSolid->
DistanceToOut(localPosition, localDirection);
117 if ( fMaximumDistance <=
DBL_MIN ) fMaximumDistance = 0.0;
124 fCrossSections.clear();
125 fTotalCrossSection = 0.0;
126 fNumberOfSharing = 0;
135 fCommonTruncatedExpLaw->
reset();
136 fCommonTruncatedExpLaw->
Sample();
145 for ( std::map< const G4VProcess*, G4double>::const_iterator it = fCrossSections.begin();
146 it != fCrossSections.end();
149 sigmaSelect += (*it).second;
150 if ( sigmaRand <= sigmaSelect )
152 fProcessToApply = (*it).first;
G4double GetStepLength() const
G4BOptnForceCommonTruncatedExp(G4String name)
void UpdateForStep(const G4Step *)
void Initialize(const G4Track *)
G4double GetPostStepGPIL() const
void AddCrossSection(const G4VProcess *, G4double)
const G4ThreeVector & GetPosition() const
virtual ~G4BOptnForceCommonTruncatedExp()
virtual G4bool DenyProcessPostStepDoIt(const G4BiasingProcessInterface *, const G4Track *, const G4Step *, G4double &)
G4VProcess * GetWrappedProcess() const
void SetOperation(G4BOptnForceCommonTruncatedExp *operation)
virtual const G4VBiasingInteractionLaw * ProvideOccurenceBiasingInteractionLaw(const G4BiasingProcessInterface *)
G4double GetTriggeredProcessXSfraction()
static G4TransportationManager * GetTransportationManager()
G4double GetAlongStepGPIL() const
G4ThreeVector GetMomentum() const
const G4ThreeVector & GetMomentumDirection() const
G4LogicalVolume * GetLogicalVolume() const
void ChooseProcessToApply()
void PostStepInteractionOccured(const G4VProcess *)
G4double UpdateForStep(G4double truePathLength)
G4VPhysicalVolume * GetVolume() const
G4double GetInteractionDistance() const
void SetForceCrossSection(G4double xs)
virtual G4GPILSelection ProposeGPILSelection(const G4GPILSelection processSelection)
virtual G4double DistanceToOut(const G4ThreeVector &p, const G4ThreeVector &v, const G4bool calcNorm=false, G4bool *validNorm=0, G4ThreeVector *n=0) const =0
virtual G4double ProposeAlongStepLimit(const G4BiasingProcessInterface *)
G4double GetMaximumDistance() const
void SetMaximumDistance(G4double d)
G4VSolid * GetSolid() const
void SetNumberOfSharing(G4int n)
virtual G4ForceCondition ProposeForceCondition(const G4ForceCondition processCondition)