47#ifndef G4EmBiasingManager_h
48#define G4EmBiasingManager_h 1
129 { fDirectionalSplittingTarget = v; }
131 { fDirectionalSplittingRadius = r; }
136 void ApplyRangeCut(std::vector<G4DynamicParticle*>& vd,
141 G4double ApplySplitting(std::vector<G4DynamicParticle*>& vd,
147 G4double ApplyDirectionalSplitting(std::vector<G4DynamicParticle*>& vd,
154 G4double ApplyDirectionalSplitting(std::vector<G4DynamicParticle*>& vd,
160 inline G4double ApplyRussianRoulette(std::vector<G4DynamicParticle*>& vd,
167 G4int nForcedRegions;
168 G4int nSecBiasedRegions;
169 std::vector<const G4Region*> forcedRegions;
170 std::vector<G4double> lengthForRegion;
171 std::vector<const G4Region*> secBiasedRegions;
172 std::vector<G4double> secBiasedWeight;
173 std::vector<G4double> secBiasedEnegryLimit;
174 std::vector<G4int> nBremSplitting;
176 std::vector<G4int> idxForcedCouple;
177 std::vector<G4int> idxSecBiasedCouple;
179 std::vector<G4DynamicParticle*> tmpSecondaries;
190 G4bool fDirectionalSplitting;
192 G4double fDirectionalSplittingRadius;
193 std::vector<G4double> fDirectionalSplittingWeights;
200 if(nSecBiasedRegions > 0) {
201 if(idxSecBiasedCouple[coupleIdx] >= 0) { res =
true; }
209 if(nForcedRegions > 0) {
210 if(idxForcedCouple[coupleIdx] >= 0) { res =
true; }
217 startTracking =
true;
223G4EmBiasingManager::ApplyRussianRoulette(std::vector<G4DynamicParticle*>& vd,
226 size_t n = vd.size();
227 G4double weight = secBiasedWeight[index];
228 for(
size_t k=0; k<n; ++k) {
void SetDirectionalSplittingRadius(G4double r)
void SetDirectionalSplitting(G4bool v)
G4bool ForcedInteractionRegion(G4int coupleIdx)
G4double ApplySecondaryBiasing(std::vector< G4DynamicParticle * > &, const G4Track &track, G4VEmModel *currentModel, G4ParticleChangeForGamma *pParticleChange, G4double &eloss, G4int coupleIdx, G4double tcut, G4double safety=0.0)
void ActivateSecondaryBiasing(const G4String ®ion, G4double factor, G4double energyLimit)
void ResetForcedInteraction()
void Initialise(const G4ParticleDefinition &part, const G4String &procName, G4int verbose)
G4double GetWeight(G4int i)
G4bool GetDirectionalSplitting()
G4bool CheckDirection(G4ThreeVector pos, G4ThreeVector momdir) const
void ActivateForcedInteraction(G4double length=0.0, const G4String &r="")
void SetDirectionalSplittingTarget(G4ThreeVector v)
G4bool SecondaryBiasingRegion(G4int coupleIdx)
G4double GetStepLimit(G4int coupleIdx, G4double previousStep)