63 if (theParentName ==
"tau+") {
67 if ((theLeptonName==
"e-"||theLeptonName==
"e+")){
76 }
else if (theParentName ==
"tau-") {
80 if ((theLeptonName==
"e-"||theLeptonName==
"e+")){
92 G4cout <<
"G4TauLeptonicDecayChannel:: constructor :";
93 G4cout <<
" parent particle is not tau but ";
111 if (
this != &right) {
152 const G4int N_DAUGHTER=3;
154 for (
G4int index=0; index<N_DAUGHTER; index++){
163 delete parentparticle;
166 G4double daughtermomentum[N_DAUGHTER];
169 G4double pmax = (parentmass*parentmass-daughtermass[0]*daughtermass[0])/2./parentmass;
172 const size_t MAX_LOOP=10000;
173 for (
size_t loop_counter=0; loop_counter <MAX_LOOP; ++loop_counter){
177 e = std::sqrt(p*p + daughtermass[0]*daughtermass[0]);
178 if (r <
spectrum(p,e,parentmass,daughtermass[0]) )
break;
183 daughtermomentum[0] = p;
184 G4double costheta, sintheta, phi, sinphi, cosphi;
186 sintheta = std::sqrt((1.0-costheta)*(1.0+costheta));
188 sinphi = std::sin(phi);
189 cosphi = std::cos(phi);
190 G4ThreeVector direction0(sintheta*cosphi,sintheta*sinphi,costheta);
198 G4double vmass = std::sqrt((energy2-daughtermomentum[0])*(energy2+daughtermomentum[0]));
199 G4double beta = -1.0*daughtermomentum[0]/energy2;
201 G4double sinthetan = std::sqrt((1.0-costhetan)*(1.0+costhetan));
206 G4ThreeVector direction1(sinthetan*cosphin,sinthetan*sinphin,costhetan);
215 p4.boost( direction0.x()*beta, direction0.y()*beta, direction0.z()*beta);
218 p4.boost( direction0.x()*beta, direction0.y()*beta, direction0.z()*beta);
229 G4cout <<
"G4TauLeptonicDecayChannel::DecayIt ";
230 G4cout <<
" create decay products in rest frame " <<
G4endl;
246 f1 = 3.0*e*(mtau*mtau+ml*ml)-4.0*mtau*e*e-2.0*mtau*ml*ml;
247 return p*(
f1)/(mtau*mtau*mtau*mtau)/(0.6);
void ClearDaughtersName()
virtual G4DecayProducts * DecayIt(G4double)
void SetBR(G4double value)
CLHEP::Hep3Vector G4ThreeVector
G4int PushProducts(G4DynamicParticle *aParticle)
virtual ~G4TauLeptonicDecayChannel()
G4ParticleDefinition * G4MT_parent
G4ParticleDefinition ** G4MT_daughters
G4TauLeptonicDecayChannel()
G4double GetTotalMomentum() const
G4GLOB_DLL std::ostream G4cout
void SetNumberOfDaughters(G4int value)
G4TauLeptonicDecayChannel & operator=(const G4TauLeptonicDecayChannel &)
static const double twopi
G4LorentzVector Get4Momentum() const
void Set4Momentum(const G4LorentzVector &momentum)
G4int GetVerboseLevel() const
G4double GetPDGMass() const
void SetParent(const G4ParticleDefinition *particle_type)
void SetDaughter(G4int anIndex, const G4ParticleDefinition *particle_type)
static G4double spectrum(G4double momentum, G4double energy, G4double mtau, G4double ml)
G4String ** daughters_name
CLHEP::HepLorentzVector G4LorentzVector