102 G4cout <<
"The cross section for AnnihiToMuPair is artificially "
113 static const G4double Rmuon = elm_coupling/Mmuon;
114 static const G4double Sig0 =
pi*Rmuon*Rmuon/3.;
120 G4double SigmaEl = Sig0*xi*(1.+xi/2.)*sqrt(1.-xi);
121 CrossSection = SigmaEl*Z;
137 G4double AtomicZ = (*theElementVector)[i]->GetZ();
138 SIGMA += NbOfAtomsPerVolume[i] *
175 static const G4double Mele=electron_mass_c2;
211 G4double Ecm = sqrt(0.5*Mele*(Epos+Mele));
212 G4double Pcm = sqrt(Ecm*Ecm-Mmuon*Mmuon);
213 G4double beta = sqrt((Epos-Mele)/(Epos+Mele));
219 G4double EmuPlus = gamma*( Ecm+cost*beta*Pcm);
220 G4double EmuMinus = gamma*( Ecm-cost*beta*Pcm);
221 G4double PmuPlusZ = gamma*(beta*Ecm+cost* Pcm);
222 G4double PmuMinusZ = gamma*(beta*Ecm-cost* Pcm);
228 G4double PmuPlus = sqrt(Pt*Pt+PmuPlusZ *PmuPlusZ );
229 G4double PmuMinus = sqrt(Pt*Pt+PmuMinusZ*PmuMinusZ);
234 MuPlusDirection ( PmuPlusX/PmuPlus, PmuPlusY/PmuPlus, PmuPlusZ/PmuPlus );
236 MuMinusDirection(PmuMinusX/PmuMinus,PmuMinusY/PmuMinus,PmuMinusZ/PmuMinus);
240 MuPlusDirection.rotateUz(PositronDirection);
241 MuMinusDirection.rotateUz(PositronDirection);
265 G4String comments =
"e+e->mu+mu- annihilation, atomic e- at rest, SubType=.";
269 <<
" good description up to "
static G4MuonPlus * MuonPlus()
std::vector< G4Element * > G4ElementVector
void PrintInfoDefinition()
G4double GetKineticEnergy() const
CLHEP::Hep3Vector G4ThreeVector
const G4DynamicParticle * GetDynamicParticle() const
G4double ComputeCrossSectionPerAtom(G4double PositronEnergy, G4double AtomicZ)
G4bool IsApplicable(const G4ParticleDefinition &)
G4AnnihiToMuPair(const G4String &processName="AnnihiToMuPair", G4ProcessType type=fElectromagnetic)
const G4ElementVector * GetElementVector() const
const G4double * GetVecNbOfAtomsPerVolume() const
G4GLOB_DLL std::ostream G4cout
G4VParticleChange * PostStepDoIt(const G4Track &aTrack, const G4Step &aStep)
const G4ThreeVector & GetMomentumDirection() const
void SetProcessSubType(G4int)
const G4String & GetProcessName() const
G4Material * GetMaterial() const
virtual void Initialize(const G4Track &)
static G4Positron * Positron()
void BuildPhysicsTable(const G4ParticleDefinition &)
G4double GetMeanFreePath(const G4Track &aTrack, G4double previousStepSize, G4ForceCondition *)
G4double GetPDGMass() const
void SetNumberOfSecondaries(G4int totSecondaries)
void ProposeEnergy(G4double finalEnergy)
G4ParticleChange aParticleChange
void AddSecondary(G4Track *aSecondary)
static G4MuonMinus * MuonMinus()
static const G4double fac
size_t GetNumberOfElements() const
G4double HighestEnergyLimit
G4double CrossSectionPerVolume(G4double PositronEnergy, const G4Material *)
void SetCrossSecFactor(G4double fac)
void ProposeTrackStatus(G4TrackStatus status)
G4ThreeVector G4ParticleMomentum
G4int GetProcessSubType() const
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
G4double LowestEnergyLimit