59G4MuonRadiativeDecayChannelWithSpin::
60 G4MuonRadiativeDecayChannelWithSpin(
const G4String& theParentName,
66 if (theParentName ==
"mu+") {
74 }
else if (theParentName ==
"mu-") {
85 G4cout <<
"G4RadiativeMuonDecayChannel:: constructor :";
86 G4cout <<
" parent particle is not muon but ";
100 parent_polarization = right.parent_polarization;
105 if (
this != &right) {
126 parent_polarization = right.parent_polarization;
137 G4cout <<
"G4MuonRadiativeDecayChannelWithSpin::DecayIt ";
151 for (
G4int index=0; index<4; index++){
153 sumofdaughtermass += daughtermass[index];
164 delete parentparticle;
170 G4double som0, Qsqr, x, y, xx, yy, zz;
171 G4double cthetaE, cthetaG, cthetaGE, phiE, phiG;
196 if(std::fabs((xx*xx)+(yy*yy)+(zz*zz)-(x*x))>0.001){
202 G4double sthetaE = std::sqrt((xx*xx)+(yy*yy))/x;
225 if(std::fabs((xx*xx)+(yy*yy)+(zz*zz)-(y*y))>0.001){
231 G4double sthetaG = std::sqrt((xx*xx)+(yy*yy))/y;
259 cthetaGE = cthetaE*cthetaG+sthetaE*sthetaG*std::cos(phiE-phiG);
268 G4double term1 = x*((1.0-eps)*(1.0-eps))+2.0*eps;
269 G4double beta = std::sqrt( x*((1.0-eps)*(1.0-eps))*
270 (x*((1.0-eps)*(1.0-eps))+4.0*eps))/term1;
276 Qsqr = (1.0-term1-term3+term0+0.5*term6)/((1.0-eps)*(1.0-eps));
282 }
while ( Qsqr<0.0 || Qsqr>1.0 );
295 som0 = fron(Pmu,x,y,cthetaE,cthetaG,cthetaGE);
320 G4double E = EMMU/2.*(x*((1.-eps)*(1.-eps))+2.*eps);
321 G4double G = EMMU/2.*y*(1.-eps*eps);
326 if(E < EMASS) E = EMASS;
331 daughtermomentum[0] = std::sqrt(E*E - EMASS*EMASS);
333 G4double sthetaE = std::sqrt(1.-cthetaE*cthetaE);
345 direction0.
rotateUz(parent_polarization);
352 daughtermomentum[1] = G;
354 G4double sthetaG = std::sqrt(1.-cthetaG*cthetaG);
366 direction1.
rotateUz(parent_polarization);
376 G4double energy2 = parentmass*(1.0 - (x+y)/2.0);
378 G4double vmass = std::sqrt((energy2-
379 (daughtermomentum[0]+daughtermomentum[1]))*
381 (daughtermomentum[0]+daughtermomentum[1])));
382 G4double beta = (daughtermomentum[0]+daughtermomentum[1])/energy2;
383 beta = -1.0 * std::min(beta,0.99);
386 G4double sinthetan = std::sqrt((1.0-costhetan)*(1.0+costhetan));
391 G4ThreeVector direction2(sinthetan*cosphin,sinthetan*sinphin,costhetan);
401 direction0.
y()+direction1.
y(),
402 direction0.
z()+direction1.
z());
403 direction34 = direction34.
unit();
406 p4.
boost(direction34.
x()*beta,direction34.
y()*beta,direction34.
z()*beta);
410 p4.
boost(direction34.
x()*beta,direction34.
y()*beta,direction34.
z()*beta);
422 G4cout <<
"G4MuonRadiativeDecayChannelWithSpin::DecayIt ";
423 G4cout <<
" create decay products in rest frame " <<
G4endl;
449 G4double f_1s = 12.0*((y*y)*(1.0-y)+x*y*(2.0-3.0*y)
450 +2.0*(x*x)*(1.0-2.0*y)-2.0*(x*x*x));
451 G4double f0s = 6.0*(-x*y*(2.0-3.0*(y*y))
452 -2.0*(x*x)*(1.0-y-3.0*(y*y))+2.0*(x*x*x)*(1.0+2.0*y));
453 G4double f1s = 3.0*((x*x)*y*(2.0-3.0*y-3.0*(y*y))
454 -(x*x*x)*y*(4.0+3.0*y));
455 G4double f2s = 1.5*((x*x*x)*(y*y)*(2.0+y));
457 G4double f_1se = 12.0*(x*y*(1.0-y)+(x*x)*(2.0-3.0*y)
459 G4double f0se = 6.0*(-(x*x)*(2.0-y-2.0*(y*y))
460 +(x*x*x)*(2.0+3.0*y));
461 G4double f1se = -3.0*(x*x*x)*y*(2.0+y);
464 G4double f_1sg = 12.0*((y*y)*(1.0-y)+x*y*(1.0-2.0*y)
466 G4double f0sg = 6.0*(-x*(y*y)*(2.0-3.0*y)-(x*x)*y*(1.0-4.0*y)
468 G4double f1sg = 3.0*((x*x)*(y*y)*(1.0-3.0*y)
470 G4double f2sg = 1.5*(x*x*x)*(y*y*y);
472 G4double f_1v = 8.0*((y*y)*(3.0-2.0*y)+6.0*x*y*(1.0-y)
473 +2.0*(x*x)*(3.0-4.0*y)-4.0*(x*x*x));
474 G4double f0v = 8.0*(-x*y*(3.0-y-(y*y))-(x*x)*(3.0-y-4.0*(y*y))
475 +2.0*(x*x*x)*(1.0+2.0*y));
476 G4double f1v = 2.0*((x*x)*y*(6.0-5.0*y-2.0*(y*y))
477 -2.0*(x*x*x)*y*(4.0+3.0*y));
478 G4double f2v = 2.0*(x*x*x)*(y*y)*(2.0+y);
480 G4double f_1ve = 8.0*(x*y*(1.0-2.0*y)
481 +2.0*(x*x)*(1.0-3.0*y)-4.0*(x*x*x));
482 G4double f0ve = 4.0*(-(x*x)*(2.0-3.0*y-4.0*(y*y))
483 +2.0*(x*x*x)*(2.0+3.0*y));
484 G4double f1ve = -4.0*(x*x*x)*y*(2.0+y);
487 G4double f_1vg = 8.0*((y*y)*(1.0-2.0*y)+x*y*(1.0-4.0*y)
489 G4double f0vg = 4.0*(2.0*x*(y*y)*(1.0+y)-(x*x)*y*(1.0-4.0*y)
491 G4double f1vg = 2.0*((x*x)*(y*y)*(1.0-2.0*y)
493 G4double f2vg = 2.0*(x*x*x)*(y*y*y);
495 G4double f_1t = 8.0*((y*y)*(3.0-y)+3.0*x*y*(2.0-y)
496 +2.0*(x*x)*(3.0-2.0*y)-2.0*(x*x*x));
497 G4double f0t = 4.0*(-x*y*(6.0+(y*y))
498 -2.0*(x*x)*(3.0+y-3.0*(y*y))+2.0*(x*x*x)*(1.0+2.0*y));
499 G4double f1t = 2.0*((x*x)*y*(6.0-5.0*y+(y*y))
500 -(x*x*x)*y*(4.0+3.0*y));
501 G4double f2t = (x*x*x)*(y*y)*(2.0+y);
503 G4double f_1te = -8.0*(x*y*(1.0+3.0*y)+(x*x)*(2.0+3.0*y)
505 G4double f0te = 4.0*((x*x)*(2.0+3.0*y+4.0*(y*y))
506 +(x*x*x)*(2.0+3.0*y));
507 G4double f1te = -2.0*(x*x*x)*y*(2.0+y);
510 G4double f_1tg = -8.0*((y*y)*(1.0+y)+x*y+(x*x)*y);
511 G4double f0tg = 4.0*(x*(y*y)*(2.0-y)+(x*x)*y*(1.0+2.0*y)
513 G4double f1tg = -2.0*((x*x)*(y*y)*(1.0-y)+2.0*(x*x*x)*y);
516 G4double term = delta+2.0*(me*me)/((mu*mu)*(x*x));
519 G4double nss = term*f_1s+f0s+delta*f1s+(delta*delta)*f2s;
520 G4double nv = term*f_1v+f0v+delta*f1v+(delta*delta)*f2v;
521 G4double nt = term*f_1t+f0t+delta*f1t+(delta*delta)*f2t;
523 G4double nse = term*f_1se+f0se+delta*f1se+(delta*delta)*f2se;
524 G4double nve = term*f_1ve+f0ve+delta*f1ve+(delta*delta)*f2ve;
525 G4double nte = term*f_1te+f0te+delta*f1te+(delta*delta)*f2te;
527 G4double nsg = term*f_1sg+f0sg+delta*f1sg+(delta*delta)*f2sg;
528 G4double nvg = term*f_1vg+f0vg+delta*f1vg+(delta*delta)*f2vg;
529 G4double ntg = term*f_1tg+f0tg+delta*f1tg+(delta*delta)*f2tg;
535 G4double term1e = 1.0/3.0*(1.0-4.0/3.0*del);
536 G4double term2e = 2.0*nse+5.0*nve-nte;
537 G4double term3e = 2.0*nse-2.0*nve+nte;
539 G4double term1g = 1.0/3.0*(1.0-4.0/3.0*del);
540 G4double term2g = 2.0*nsg+5.0*nvg-ntg;
541 G4double term3g = 2.0*nsg-2.0*nvg+ntg;
543 G4double som00 = term1+(1.0-4.0/3.0*rho)*term2+eps*term3;
544 G4double som01 = Pmu*ksi*(cthetaE*(nve-term1e*term2e+kap*term3e)
545 +cthetaG*(nvg-term1g*term2g+kap*term3g));
548 som0 = fine_structure_const/8./(twopi*twopi*twopi)*som0;
G4DLLIMPORT std::ostream G4cout
Hep3Vector & rotateUz(const Hep3Vector &)
HepLorentzVector & boost(double, double, double)
G4int PushProducts(G4DynamicParticle *aParticle)
G4LorentzVector Get4Momentum() const
void Set4Momentum(const G4LorentzVector &momentum)
G4double GetTotalMomentum() const
G4MuonRadiativeDecayChannelWithSpin & operator=(const G4MuonRadiativeDecayChannelWithSpin &)
G4MuonRadiativeDecayChannelWithSpin(const G4String &theParentName, G4double theBR)
virtual ~G4MuonRadiativeDecayChannelWithSpin()
virtual G4DecayProducts * DecayIt(G4double)
G4double GetPDGMass() const
const G4String & GetParentName() const
void SetBR(G4double value)
G4String ** daughters_name
G4int GetVerboseLevel() const
void SetNumberOfDaughters(G4int value)
void SetDaughter(G4int anIndex, const G4ParticleDefinition *particle_type)
void ClearDaughtersName()
G4ParticleDefinition * parent
G4ParticleDefinition ** daughters
void SetParent(const G4ParticleDefinition *particle_type)