88 delete f2GammaAtRestModel;
89 delete f3GammaAtRestModel;
112 if (!isInitialised) {
113 isInitialised =
true;
122 if (
nullptr == f2GammaAtRestModel) {
123 auto type = param->PositronAtRestModelType();
138 fEntangled = param->QuantumEntanglement();
139 fApplyCuts = param->ApplyCuts();
163 if (fApplyCuts && gammaCut > CLHEP::electron_mass_c2) {
171 if (
nullptr != f3GammaAtRestModel &&
173 f3GammaAtRestModel->SampleSecondaries(
secParticles, edep, couple->GetMaterial());
175 f2GammaAtRestModel->SampleSecondaries(
secParticles, edep, couple->GetMaterial());
184 G4int idx = couple->GetIndex();
203 std::shared_ptr<G4eplusAnnihilationEntanglementClipBoard> clipBoard;
204 if (fEntangled && num >= 2) {
205 clipBoard = std::make_shared<G4eplusAnnihilationEntanglementClipBoard>();
206 clipBoard->SetParentParticleDefinition(track.
GetDefinition());
213 for (std::size_t i=0; i<num; ++i) {
217 if (fEntangled && i < 2) {
220 if (
nullptr != clipBoard) {
222 clipBoard->SetTrackA(t);
224 clipBoard->SetTrackB(t);
254 out <<
" Positron annihilation";
G4double condition(const G4ErrorSymMatrix &m)
CLHEP::Hep3Vector G4ThreeVector
static G4EmParameters * Instance()
static G4int GetModelID(const G4int modelIndex)
static G4Positron * Positron()
const G4MaterialCutsCouple * GetMaterialCutsCouple() const
G4StepPoint * GetPreStepPoint() const
void SetAuxiliaryTrackInformation(G4int id, G4VAuxiliaryTrackInformation *info) const
void SetWeight(G4double aValue)
const G4ThreeVector & GetPosition() const
void SetTouchableHandle(const G4TouchableHandle &apValue)
G4double GetGlobalTime() const
G4ParticleDefinition * GetDefinition() const
const G4TouchableHandle & GetTouchableHandle() const
void SetCreatorModelID(const G4int id)
void SetHighEnergyLimit(G4double)
void SetLowEnergyLimit(G4double)
void DefineMaterial(const G4MaterialCutsCouple *couple)
G4double GetGammaEnergyCut()
G4VEmModel * EmModel(std::size_t index=0) const
G4VEmProcess(const G4String &name, G4ProcessType type=fElectromagnetic)
G4EmBiasingManager * biasManager
void SetBuildTableFlag(G4bool val)
void AddEmModel(G4int, G4VEmModel *, const G4Region *region=nullptr)
void SetEmModel(G4VEmModel *, G4int index=0)
void SetSecondaryParticle(const G4ParticleDefinition *p)
void SetCrossSectionType(G4CrossSectionType val)
void ProcessDescription(std::ostream &outFile) const override
G4double MaxKinEnergy() const
G4double MinKinEnergy() const
std::vector< G4DynamicParticle * > secParticles
void SetStartFromNullFlag(G4bool val)
G4ParticleChangeForGamma fParticleChange
const G4Material * currentMaterial
void SetProcessSubType(G4int)
G4VParticleChange * pParticleChange
void ProcessDescription(std::ostream &) const override
void InitialiseProcess(const G4ParticleDefinition *) override
G4eplusAnnihilation(const G4String &name="annihil")
G4double AtRestGetPhysicalInteractionLength(const G4Track &track, G4ForceCondition *condition) override
G4bool IsApplicable(const G4ParticleDefinition &p) final
void StreamProcessInfo(std::ostream &outFile) const override
G4VParticleChange * AtRestDoIt(const G4Track &track, const G4Step &stepData) override
~G4eplusAnnihilation() override