99 for (
G4int index = 0; index < 3; ++index) {
111 delete parentparticle;
125 G4double W_mue = (EMMU * EMMU + EMASS * EMASS) / (2. * EMMU);
138 const std::size_t MAX_LOOP = 10000;
139 for (std::size_t loop_count = 0; loop_count < MAX_LOOP; ++loop_count) {
144 x = x0 + rndm * (1. - x0);
150 F_IS = 1. / 6. * (-2. * x_squared + 3. * x - x0_squared);
151 F_AS = 1. / 6. * std::sqrt(x_squared - x0_squared) * (2. * x - 2. + std::sqrt(1. - x0_squared));
153 G_IS = 2. / 9. * (michel_rho - 0.75) * (4. * x_squared - 3. * x - x0_squared);
154 G_IS = G_IS + michel_eta * (1. - x) * x0;
156 G_AS = 3. * (michel_xsi - 1.) * (1. - x);
158 G_AS + 2. * (michel_xsi * michel_delta - 0.75) * (4. * x - 4. + std::sqrt(1. - x0_squared));
159 G_AS = 1. / 9. * std::sqrt(x_squared - x0_squared) * G_AS;
166 const G4double omega = std::log(EMMU / EMASS);
169 G4double F = 6. * F_IS + R_IS / std::sqrt(x_squared - x0_squared);
173 G4double R_AS = F_theta(x, x0, omega);
177 ctheta = 2. * rndm - 1.;
179 G4double G = 6. * F_AS - R_AS / std::sqrt(x_squared - x0_squared);
181 FG = std::sqrt(x_squared - x0_squared) * F * (1. + (G / F) * ctheta);
185 "Problem in Muon Decay: FG > FG_max");
191 if (FG >= rndm * FG_max)
break;
200 if (energy < EMASS) energy = EMASS;
205 daughtermomentum[0] = std::sqrt(energy * energy - EMASS * EMASS);
207 G4double stheta = std::sqrt(1. - ctheta * ctheta);
220 auto daughterparticle0 =
223 products->PushProducts(daughterparticle0);
227 G4double energy2 = parentmass - energy;
228 G4double vmass = std::sqrt((energy2 - daughtermomentum[0]) * (energy2 + daughtermomentum[0]));
229 G4double beta = -1.0 * daughtermomentum[0] / energy2;
231 G4double sinthetan = std::sqrt((1.0 - costhetan) * (1.0 + costhetan));
236 G4ThreeVector direction1(sinthetan * cosphin, sinthetan * sinphin, costhetan);
238 auto daughterparticle2 =
243 p4 = daughterparticle1->Get4Momentum();
244 p4.
boost(direction0.
x() * beta, direction0.
y() * beta, direction0.
z() * beta);
245 daughterparticle1->Set4Momentum(p4);
246 p4 = daughterparticle2->Get4Momentum();
247 p4.
boost(direction0.
x() * beta, direction0.
y() * beta, direction0.
z() * beta);
248 daughterparticle2->Set4Momentum(p4);
249 products->PushProducts(daughterparticle1);
250 products->PushProducts(daughterparticle2);
251 daughtermomentum[1] = daughterparticle1->GetTotalMomentum();
252 daughtermomentum[2] = daughterparticle2->GetTotalMomentum();
257 G4cout <<
"G4MuonDecayChannelWithSpin::DecayIt ";
258 G4cout <<
" create decay products in rest frame " <<
G4endl;
259 G4double TT = daughterparticle0->GetTotalEnergy() + daughterparticle1->GetTotalEnergy()
260 + daughterparticle2->GetTotalEnergy();
261 G4cout <<
"e " << daughterparticle0->GetTotalEnergy() / MeV <<
G4endl;
262 G4cout <<
"nu1" << daughterparticle1->GetTotalEnergy() / MeV <<
G4endl;
263 G4cout <<
"nu2" << daughterparticle2->GetTotalEnergy() / MeV <<
G4endl;
266 products->DumpInfo();
G4double GetPDGMass() const