48 pLambda(0.0), pXi0(0.0)
61 thePionName,theLeptonName,theNutrinoName)
63 static const G4String K_plus(
"kaon+");
64 static const G4String K_minus(
"kaon-");
66 static const G4String Mu_plus(
"mu+");
67 static const G4String Mu_minus(
"mu-");
72 if ( ((theParentName == K_plus)&&(theLeptonName == E_plus)) ||
73 ((theParentName == K_minus)&&(theLeptonName == E_minus)) ) {
77 }
else if ( ((theParentName == K_plus)&&(theLeptonName == Mu_plus)) ||
78 ((theParentName == K_minus)&&(theLeptonName == Mu_minus)) ) {
82 }
else if ( (theParentName == K_L) &&
83 ((theLeptonName == E_plus) ||(theLeptonName == E_minus)) ){
87 }
else if ( (theParentName == K_L) &&
88 ((theLeptonName == Mu_plus) ||(theLeptonName == Mu_minus)) ){
95 G4cout <<
"G4KL3DecayChannel:: constructor :";
113 pLambda(right.pLambda),
120 if (
this != &right) {
171 G4double daughterP[3], daughterE[3];
174 const size_t MAX_LOOP = 10000;
175 for (
size_t loop_counter=0; loop_counter <MAX_LOOP; ++loop_counter){
177 PhaseSpace(massK, &daughterM[0], &daughterE[0], &daughterP[0]);
179 daughterM[idPi],daughterM[idLepton],daughterM[idNutrino]);
198 delete parentparticle;
202 G4double costhetan, sinthetan, phin, sinphin, cosphin;
206 sintheta = std::sqrt((1.0-costheta)*(1.0+costheta));
208 sinphi = std::sin(phi);
209 cosphi = std::cos(phi);
210 direction =
new G4ThreeVector(sintheta*cosphi,sintheta*sinphi,costheta);
217 costhetan = (daughterP[1]*daughterP[1]-daughterP[2]*daughterP[2]-daughterP[0]*daughterP[0])/(2.0*daughterP[2]*daughterP[0]);
218 sinthetan = std::sqrt((1.0-costhetan)*(1.0+costhetan));
220 sinphin = std::sin(phin);
221 cosphin = std::cos(phin);
222 direction->
setX( sinthetan*cosphin*costheta*cosphi - sinthetan*sinphin*sinphi + costhetan*sintheta*cosphi);
223 direction->
setY( sinthetan*cosphin*costheta*sinphi + sinthetan*sinphin*cosphi + costhetan*sintheta*sinphi);
224 direction->
setZ( -sinthetan*cosphin*sintheta + costhetan*costheta);
238 G4cout <<
"G4KL3DecayChannel::DecayIt ";
239 G4cout <<
" create decay products in rest frame " <<
G4endl;
240 G4cout <<
" decay products address=" << products <<
G4endl;
258 const G4int N_DAUGHTER=3;
260 for (index=0; index<N_DAUGHTER; index++){
261 sumofdaughtermass += M[index];
267 G4double momentummax=0.0, momentumsum = 0.0;
269 const size_t MAX_LOOP=10000;
270 for (
size_t loop_counter=0; loop_counter <MAX_LOOP; ++loop_counter){
281 energy = rd2*(parentM - sumofdaughtermass);
282 P[0] = std::sqrt(energy*energy + 2.0*energy*M[0]);
284 if ( P[0] >momentummax )momentummax = P[0];
287 energy = (1.-rd1)*(parentM - sumofdaughtermass);
288 P[1] = std::sqrt(energy*energy + 2.0*energy*M[1]);
290 if ( P[1] >momentummax )momentummax = P[1];
293 energy = (rd1-rd2)*(parentM - sumofdaughtermass);
294 P[2] = std::sqrt(energy*energy + 2.0*energy*M[2]);
296 if ( P[2] >momentummax )momentummax = P[2];
298 if (momentummax <= momentumsum - momentummax )
break;
302 G4cout <<
"G4KL3DecayChannel::PhaseSpace ";
304 for (index=0; index<3; index++){
305 G4cout << index <<
" : " << M[index]/
GeV <<
"GeV/c/c ";
306 G4cout <<
" : " << E[index]/
GeV <<
"GeV ";
337 G4double Epi_max = (massK*massK+massPi*massPi-massL*massL)/2.0/massK;
339 G4double q2 = massK*massK + massPi*massPi - 2.0*massK*Epi;
343 if (
pLambda >0.0) Fmax = (1.0 +
pLambda*(massK*massK/massPi/massPi+1.0));
347 G4double coeffA = massK*(2.0*El*Enu-massK*
E)+massL*massL*(E/4.0-Enu);
348 G4double coeffB = massL*massL*(Enu-E/2.0);
349 G4double coeffC = massL*massL*E/4.0;
351 G4double RhoMax = (Fmax*Fmax)*(massK*massK*massK/8.0);
353 G4double Rho = (F*F)*(coeffA + coeffB*Xi + coeffC*Xi*Xi);
361 G4cout <<
" F :" << F <<
" Fmax :" << Fmax <<
" Xi :" << Xi <<
G4endl;
362 G4cout <<
" A :" << coeffA <<
" B :" << coeffB <<
" C :"<< coeffC <<
G4endl;
363 G4cout <<
" Rho :" << Rho <<
" RhoMax :" << RhoMax <<
G4endl;