45 :
G4VDecayChannel(
"KL3 Decay", theParentName, theBR, 3, thePionName, theLeptonName,
48 static const G4String K_plus(
"kaon+");
49 static const G4String K_minus(
"kaon-");
51 static const G4String Mu_plus(
"mu+");
52 static const G4String Mu_minus(
"mu-");
57 if (((theParentName == K_plus) && (theLeptonName == E_plus))
58 || ((theParentName == K_minus) && (theLeptonName == E_minus)))
64 else if (((theParentName == K_plus) && (theLeptonName == Mu_plus))
65 || ((theParentName == K_minus) && (theLeptonName == Mu_minus)))
71 else if ((theParentName == K_L) && ((theLeptonName == E_plus) || (theLeptonName == E_minus))) {
76 else if ((theParentName == K_L) && ((theLeptonName == Mu_plus) || (theLeptonName == Mu_minus))) {
84 G4cout <<
"G4KL3DecayChannel:: constructor :";
146 G4double daughterP[3], daughterE[3];
149 const size_t MAX_LOOP = 10000;
150 for (std::size_t loop_counter = 0; loop_counter < MAX_LOOP; ++loop_counter) {
152 PhaseSpace(massK, &daughterM[0], &daughterE[0], &daughterP[0]);
174 delete parentparticle;
177 G4double costheta, sintheta, phi, sinphi, cosphi;
178 G4double costhetan, sinthetan, phin, sinphin, cosphin;
182 sintheta = std::sqrt((1.0 - costheta) * (1.0 + costheta));
184 sinphi = std::sin(phi);
185 cosphi = std::cos(phi);
186 direction =
new G4ThreeVector(sintheta * cosphi, sintheta * sinphi, costheta);
189 products->PushProducts(daughterparticle);
193 (daughterP[1] * daughterP[1] - daughterP[2] * daughterP[2] - daughterP[0] * daughterP[0])
194 / (2.0 * daughterP[2] * daughterP[0]);
195 sinthetan = std::sqrt((1.0 - costhetan) * (1.0 + costhetan));
197 sinphin = std::sin(phin);
198 cosphin = std::cos(phin);
199 direction->setX(sinthetan * cosphin * costheta * cosphi - sinthetan * sinphin * sinphi
200 + costhetan * sintheta * cosphi);
201 direction->setY(sinthetan * cosphin * costheta * sinphi + sinthetan * sinphin * cosphi
202 + costhetan * sintheta * sinphi);
203 direction->setZ(-sinthetan * cosphin * sintheta + costhetan * costheta);
207 products->PushProducts(daughterparticle);
212 products->PushProducts(daughterparticle);
216 G4cout <<
"G4KL3DecayChannel::DecayIt ";
217 G4cout <<
" create decay products in rest frame " <<
G4endl;
218 G4cout <<
" decay products address=" << products <<
G4endl;
219 products->DumpInfo();
233 const G4int N_DAUGHTER = 3;
235 for (index = 0; index < N_DAUGHTER; ++index) {
236 sumofdaughtermass +=
M[index];
241 G4double momentummax = 0.0, momentumsum = 0.0;
243 const size_t MAX_LOOP = 10000;
244 for (std::size_t loop_counter = 0; loop_counter < MAX_LOOP; ++loop_counter) {
255 energy = rd2 * (parentM - sumofdaughtermass);
256 P[0] = std::sqrt(energy * energy + 2.0 * energy *
M[0]);
258 if (P[0] > momentummax) momentummax = P[0];
261 energy = (1. - rd1) * (parentM - sumofdaughtermass);
262 P[1] = std::sqrt(energy * energy + 2.0 * energy *
M[1]);
264 if (P[1] > momentummax) momentummax = P[1];
267 energy = (rd1 - rd2) * (parentM - sumofdaughtermass);
268 P[2] = std::sqrt(energy * energy + 2.0 * energy *
M[2]);
270 if (P[2] > momentummax) momentummax = P[2];
272 if (momentummax <= momentumsum - momentummax)
break;
276 G4cout <<
"G4KL3DecayChannel::PhaseSpace ";
277 G4cout <<
"Kon mass:" << parentM / GeV <<
"GeV/c/c" <<
G4endl;
278 for (index = 0; index < 3; ++index) {
279 G4cout << index <<
" : " <<
M[index] / GeV <<
"GeV/c/c ";
280 G4cout <<
" : " << E[index] / GeV <<
"GeV ";
281 G4cout <<
" : " << P[index] / GeV <<
"GeV/c " <<
G4endl;
309 G4double Epi_max = (massK * massK + massPi * massPi - massL * massL) / 2.0 / massK;
311 G4double q2 = massK * massK + massPi * massPi - 2.0 * massK * Epi;
313 G4double F = 1.0 + pLambda * q2 / massPi / massPi;
315 if (pLambda > 0.0) Fmax = (1.0 + pLambda * (massK * massK / massPi / massPi + 1.0));
317 G4double Xi = pXi0 * (1.0 + pLambda * q2 / massPi / massPi);
319 G4double coeffA = massK * (2.0 * El * Enu - massK * E) + massL * massL * (E / 4.0 - Enu);
320 G4double coeffB = massL * massL * (Enu - E / 2.0);
321 G4double coeffC = massL * massL * E / 4.0;
323 G4double RhoMax = (Fmax * Fmax) * (massK * massK * massK / 8.0);
325 G4double Rho = (F * F) * (coeffA + coeffB * Xi + coeffC * Xi * Xi);
329 G4cout <<
"G4KL3DecayChannel::DalitzDensity " <<
G4endl;
330 G4cout <<
" Pi[" << massPi / GeV <<
"GeV/c/c] :" << Epi / GeV <<
"GeV" <<
G4endl;
331 G4cout <<
" L[" << massL / GeV <<
"GeV/c/c] :" << El / GeV <<
"GeV" <<
G4endl;
332 G4cout <<
" Nu[" << massNu / GeV <<
"GeV/c/c] :" << Enu / GeV <<
"GeV" <<
G4endl;
333 G4cout <<
" F :" << F <<
" Fmax :" << Fmax <<
" Xi :" << Xi <<
G4endl;
334 G4cout <<
" A :" << coeffA <<
" B :" << coeffB <<
" C :" << coeffC <<
G4endl;
335 G4cout <<
" Rho :" << Rho <<
" RhoMax :" << RhoMax <<
G4endl;
338 return (Rho / RhoMax);
G4double DalitzDensity(G4double parentmass, G4double Epi, G4double El, G4double Enu, G4double massPi, G4double massL, G4double massNu)
G4double GetPDGMass() const