68 : fDirectionalSplittingTarget(0.0,0.0,0.0)
96 for (
size_t j=0; j<numOfCouples; ++j) {
130 G4cout <<
" Forced Interaction is activated for "
133 <<
" inside G4Regions: " <<
G4endl;
140 G4cout <<
" Secondary biasing is activated for "
143 <<
" inside G4Regions: " <<
G4endl;
152 G4cout <<
" Directional splitting activated, with target position: "
169 name =
"DefaultRegionForTheWorld";
173 G4cout <<
"### G4EmBiasingManager::ForcedInteraction WARNING: "
175 << rname <<
"> is unknown" <<
G4endl;
189 G4cout <<
"### G4EmBiasingManager::ForcedInteraction WARNING: "
190 << val <<
" < 0.0, so no activation for the G4Region <"
191 << rname <<
">" <<
G4endl;
214 name =
"DefaultRegionForTheWorld";
218 G4cout <<
"### G4EmBiasingManager::ActivateBremsstrahlungSplitting "
219 <<
"WARNING: G4Region <"
220 << rname <<
"> is unknown" <<
G4endl;
234 }
else if(0.0 < factor) {
290 std::vector<G4DynamicParticle*>& vd,
302 size_t n = vd.size();
317 }
else if(1 == nsplit) {
343 std::vector<G4DynamicParticle*>& vd,
355 size_t n = vd.size();
370 }
else if(1 == nsplit) {
377 index, tcut, pPartChange);
402 size_t n = track.size();
414 for(
size_t k=0; k<
n; ++k) {
434 size_t n = vd.size();
440 for(
size_t k=0; k<
n; ++k) {
480 size_t n = vd.size();
483 if(1 !=
n || 1.0 <= w) {
return weight; }
491 if(1 < nsplit && trackWeight>w) {
499 for(
G4int k=1; k<nsplit; ++k) {
515 std::vector<G4DynamicParticle*>& vd,
538 if(1 < nsplit && trackWeight>w) {
543 G4bool foundPrimaryParticle =
false;
546 G4double primaryWeight = trackWeight;
551 for (
G4int k=0; k<nsplit; ++k) {
586 if (!foundPrimaryParticle) {
588 primaryMomdir = momdir;
589 foundPrimaryParticle =
true;
590 primaryWeight = weight;
599 if (!foundPrimaryParticle) {
600 foundPrimaryParticle =
true;
602 primaryMomdir = momdir;
619 for (
size_t i = 0; i < vd.size(); ++i) {
644 std::vector<G4DynamicParticle*>& vd,
665 if(1 < nsplit && trackWeight>w) {
673 for (
G4int k=0; k<nsplit; ++k) {
695 for (
size_t i = 0; i < vd.size(); ++i) {
static const G4double pos
static const G4double reg
static constexpr double mm
static constexpr double halfpi
static constexpr double cm
static const G4double angle[DIMMOTT]
G4GLOB_DLL std::ostream G4cout
Hep3Vector cross(const Hep3Vector &) const
double angle(const Hep3Vector &) const
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
static G4Electron * Electron()
G4double ApplySplitting(std::vector< G4DynamicParticle * > &vd, const G4Track &track, G4VEmModel *currentModel, G4int index, G4double tcut)
std::vector< G4DynamicParticle * > tmpSecondaries
std::vector< const G4Region * > forcedRegions
std::vector< G4double > secBiasedEnegryLimit
void SetDirectionalSplittingRadius(G4double r)
void SetDirectionalSplitting(G4bool v)
std::vector< G4double > secBiasedWeight
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)
G4VEnergyLossProcess * eIonisation
void ApplyRangeCut(std::vector< G4DynamicParticle * > &vd, const G4Track &track, G4double &eloss, G4double safety)
const G4ParticleDefinition * theGamma
G4double currentStepLimit
std::vector< G4int > idxSecBiasedCouple
void Initialise(const G4ParticleDefinition &part, const G4String &procName, G4int verbose)
G4double GetWeight(G4int i)
std::vector< const G4Region * > secBiasedRegions
std::vector< G4int > nBremSplitting
std::vector< G4double > lengthForRegion
std::vector< G4double > fDirectionalSplittingWeights
G4ThreeVector fDirectionalSplittingTarget
const G4ParticleDefinition * theElectron
G4bool CheckDirection(G4ThreeVector pos, G4ThreeVector momdir) const
G4double fDirectionalSplittingRadius
G4double ApplyDirectionalSplitting(std::vector< G4DynamicParticle * > &vd, const G4Track &track, G4VEmModel *currentModel, G4int index, G4double tcut, G4ParticleChangeForGamma *partChange)
void ActivateForcedInteraction(G4double length=0.0, const G4String &r="")
G4double ApplyRussianRoulette(std::vector< G4DynamicParticle * > &vd, G4int index)
void SetDirectionalSplittingTarget(G4ThreeVector v)
G4bool fDirectionalSplitting
G4double GetStepLimit(G4int coupleIdx, G4double previousStep)
std::vector< G4int > idxForcedCouple
static G4EmParameters * Instance()
G4double GetDirectionalSplittingRadius()
G4bool GetDirectionalSplitting() const
G4ThreeVector GetDirectionalSplittingTarget() const
static G4LossTableManager * Instance()
G4VEnergyLossProcess * GetEnergyLossProcess(const G4ParticleDefinition *)
G4ProductionCuts * GetProductionCuts() const
void SetProposedKineticEnergy(G4double proposedKinEnergy)
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
G4double GetProposedKineticEnergy() const
const G4ThreeVector & GetProposedMomentumDirection() const
G4double GetProposedKineticEnergy() const
void SetProposedKineticEnergy(G4double proposedKinEnergy)
const G4ThreeVector & GetProposedMomentumDirection() const
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
const G4String & GetParticleName() const
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
std::size_t GetTableSize() const
static G4ProductionCutsTable * GetProductionCutsTable()
static G4RegionStore * GetInstance()
G4Region * GetRegion(const G4String &name, G4bool verbose=true) const
const G4String & GetName() const
G4double GetWeight() const
const G4ThreeVector & GetPosition() const
const G4DynamicParticle * GetDynamicParticle() const
const G4MaterialCutsCouple * GetMaterialCutsCouple() const
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin=0.0, G4double tmax=DBL_MAX)=0
G4double GetRange(G4double kineticEnergy, const G4MaterialCutsCouple *)
void ProposeWeight(G4double finalWeight)
const char * name(G4int ptype)