62 if (theParentName ==
"tau+") {
66 if ((theLeptonName==
"e-"||theLeptonName==
"e+")){
75 }
else if (theParentName ==
"tau-") {
79 if ((theLeptonName==
"e-"||theLeptonName==
"e+")){
91 G4cout <<
"G4TauLeptonicDecayChannel:: constructor :";
92 G4cout <<
" parent particle is not tau but ";
110 if (
this != &right) {
151 const G4int N_DAUGHTER=3;
153 for (
G4int index=0; index<N_DAUGHTER; index++){
162 delete parentparticle;
165 G4double daughtermomentum[N_DAUGHTER];
168 G4double pmax = (parentmass*parentmass-daughtermass[0]*daughtermass[0])/2./parentmass;
171 const size_t MAX_LOOP=10000;
172 for (
size_t loop_counter=0; loop_counter <MAX_LOOP; ++loop_counter){
176 e = std::sqrt(p*p + daughtermass[0]*daughtermass[0]);
177 if (r <
spectrum(p,e,parentmass,daughtermass[0]) )
break;
182 daughtermomentum[0] =
p;
185 sintheta = std::sqrt((1.0-costheta)*(1.0+costheta));
187 sinphi = std::sin(phi);
188 cosphi = std::cos(phi);
189 G4ThreeVector direction0(sintheta*cosphi,sintheta*sinphi,costheta);
197 G4double vmass = std::sqrt((energy2-daughtermomentum[0])*(energy2+daughtermomentum[0]));
198 G4double beta = -1.0*daughtermomentum[0]/energy2;
200 G4double sinthetan = std::sqrt((1.0-costhetan)*(1.0+costhetan));
205 G4ThreeVector direction1(sinthetan*cosphin,sinthetan*sinphin,costhetan);
214 p4.
boost( direction0.
x()*beta, direction0.
y()*beta, direction0.
z()*beta);
217 p4.
boost( direction0.
x()*beta, direction0.
y()*beta, direction0.
z()*beta);
228 G4cout <<
"G4TauLeptonicDecayChannel::DecayIt ";
229 G4cout <<
" create decay products in rest frame " <<
G4endl;
245 f1 = 3.0*e*(mtau*mtau+ml*ml)-4.0*mtau*e*e-2.0*mtau*ml*ml;
246 return p*(
f1)/(mtau*mtau*mtau*mtau)/(0.6);