134 G4cout <<
"G4MuonRadiativeDecayChannelWithSpin::DecayIt ";
150 sumofdaughtermass += daughtermass[
index];
161 delete parentparticle;
168 G4double cthetaE, cthetaG, cthetaGE, phiE, phiG;
169 const size_t MAX_LOOP=10000;
171 for (
size_t loop_counter1=0; loop_counter1 <MAX_LOOP; ++loop_counter1){
179 for (
size_t loop_counter2=0; loop_counter2 <MAX_LOOP; ++loop_counter2){
194 if(std::fabs((xx*xx)+(yy*yy)+(zz*zz)-(x*x))>0.001){
200 G4double sthetaE = std::sqrt((xx*xx)+(yy*yy))/
x;
223 if(std::fabs((xx*xx)+(yy*yy)+(zz*zz)-(y*y))>0.001){
229 G4double sthetaG = std::sqrt((xx*xx)+(yy*yy))/
y;
257 cthetaGE = cthetaE*cthetaG+sthetaE*sthetaG*std::cos(phiE-phiG);
267 G4double beta = std::sqrt( x*((1.0-eps)*(1.0-eps))*
268 (x*((1.0-eps)*(1.0-eps))+4.0*eps))/term1;
274 G4double Qsqr = (1.0-term1-term3+term0+0.5*term6)/((1.0-eps)*(1.0-
eps));
280 if ( Qsqr>=0.0 && Qsqr<=1.0 )
break;
294 som0 =
fron(Pmu,x,y,cthetaE,cthetaG,cthetaGE);
326 if(E < EMASS) E = EMASS;
331 daughtermomentum[0] = std::sqrt(E*E - EMASS*EMASS);
333 G4double sthetaE = std::sqrt(1.-cthetaE*cthetaE);
352 daughtermomentum[1] = G;
354 G4double sthetaG = std::sqrt(1.-cthetaG*cthetaG);
376 G4double energy2 = parentmass*(1.0 - (x+
y)/2.0);
379 (daughtermomentum[0]*direction0+daughtermomentum[1]*direction1)*
380 (daughtermomentum[0]*direction0+daughtermomentum[1]*direction1);
383 G4double beta = (daughtermomentum[0]+daughtermomentum[1])/energy2;
387 G4double sinthetan = std::sqrt((1.0-costhetan)*(1.0+costhetan));
392 G4ThreeVector direction2(sinthetan*cosphin,sinthetan*sinphin,costhetan);
402 direction0.y()+direction1.y(),
403 direction0.z()+direction1.z());
404 direction34 = direction34.
unit();
407 p4.
boost(direction34.x()*beta,direction34.y()*beta,direction34.z()*beta);
411 p4.
boost(direction34.x()*beta,direction34.y()*beta,direction34.z()*beta);
423 G4cout <<
"G4MuonRadiativeDecayChannelWithSpin::DecayIt ";
424 G4cout <<
" create decay products in rest frame " <<
G4endl;
void CheckAndFillDaughters()
G4int PushProducts(G4DynamicParticle *aParticle)
G4ParticleDefinition * G4MT_parent
void rn3dim(G4double &x, G4double &y, G4double &z, G4double xlong)
G4ParticleDefinition ** G4MT_daughters
const G4String & GetParentName() const
G4double GetTotalMomentum() const
static const G4double eps
G4GLOB_DLL std::ostream G4cout
HepLorentzVector & boost(double, double, double)
static const double twopi
G4double atan4(G4double x, G4double y)
G4ThreeVector parent_polarization
G4double fron(G4double Pmu, G4double x, G4double y, G4double cthetaE, G4double cthetaG, G4double cthetaEG)
void Set4Momentum(const G4LorentzVector &momentum)
G4double GetPDGMass() const
G4LorentzVector Get4Momentum() const
G4int GetVerboseLevel() const
void CheckAndFillParent()