103 G4cout <<
"The cross section for AnnihiToMuPair is artificially "
123 G4double SigmaEl = Sig0 * xi * (1.+xi/2.) * piaxi;
124 if( Epos>
LowestEnergyLimit+1.
e-5 ) SigmaEl /= (1.-std::exp( -piaxi/std::sqrt(1-xi) ));
125 CrossSection = SigmaEl*
Z;
141 G4double AtomicZ = (*theElementVector)[i]->GetZ();
142 SIGMA += NbOfAtomsPerVolume[i] *
215 G4double Ecm = sqrt(0.5*Mele*(Epos+Mele));
216 G4double Pcm = sqrt(Ecm*Ecm-Mmuon*Mmuon);
223 G4double EmuPlus = gamma*( Ecm+cost*beta*Pcm);
224 G4double EmuMinus = gamma*( Ecm-cost*beta*Pcm);
225 G4double PmuPlusZ = gamma*(beta*Ecm+cost* Pcm);
226 G4double PmuMinusZ = gamma*(beta*Ecm-cost* Pcm);
232 G4double PmuPlus = sqrt(Pt*Pt+PmuPlusZ *PmuPlusZ );
233 G4double PmuMinus = sqrt(Pt*Pt+PmuMinusZ*PmuMinusZ);
238 MuPlusDirection ( PmuPlusX/PmuPlus, PmuPlusY/PmuPlus, PmuPlusZ/PmuPlus );
240 MuMinusDirection(PmuMinusX/PmuMinus,PmuMinusY/PmuMinus,PmuMinusZ/PmuMinus);
244 MuPlusDirection.
rotateUz(PositronDirection);
245 MuMinusDirection.
rotateUz(PositronDirection);
269 G4String comments =
"e+e->mu+mu- annihilation, atomic e- at rest, SubType=.";
273 <<
" good description up to "
void PrintInfoDefinition()
G4double GetMeanFreePath(const G4Track &aTrack, G4double previousStepSize, G4ForceCondition *) override
const G4ThreeVector & GetMomentumDirection() const
const G4ElementVector * GetElementVector() const
Hep3Vector & rotateUz(const Hep3Vector &)
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
const G4double * GetVecNbOfAtomsPerVolume() const
static G4MuonMinus * MuonMinus()
G4double GetPDGMass() const
void AddSecondary(G4Track *aSecondary)
G4ParticleChange aParticleChange
static constexpr double TeV
void BuildPhysicsTable(const G4ParticleDefinition &) override
G4VParticleChange * PostStepDoIt(const G4Track &aTrack, const G4Step &aStep) override
virtual void Initialize(const G4Track &)
static constexpr double electron_mass_c2
static constexpr double elm_coupling
G4double CrossSectionPerVolume(G4double PositronEnergy, const G4Material *)
const G4String & GetProcessName() const
static G4Positron * Positron()
void ProposeEnergy(G4double finalEnergy)
G4Material * GetMaterial() const
G4double ComputeCrossSectionPerAtom(G4double PositronEnergy, G4double AtomicZ)
G4bool IsApplicable(const G4ParticleDefinition &) override
void SetCrossSecFactor(G4double fac)
std::vector< G4Element * > G4ElementVector
static const G4double fac
static G4MuonPlus * MuonPlus()
void SetProcessSubType(G4int)
G4double GetKineticEnergy() const
G4GLOB_DLL std::ostream G4cout
G4double LowestEnergyLimit
static constexpr double pi
G4double HighestEnergyLimit
static constexpr double fine_structure_const
G4AnnihiToMuPair(const G4String &processName="AnnihiToMuPair", G4ProcessType type=fElectromagnetic)
void ProposeTrackStatus(G4TrackStatus status)
static constexpr double GeV
const G4DynamicParticle * GetDynamicParticle() const
static constexpr double pi
size_t GetNumberOfElements() const
G4int GetProcessSubType() const
void SetNumberOfSecondaries(G4int totSecondaries)