117 FillDaughterNucleus (0, A, Z, theDaughterExcitation);
150 FillDaughterNucleus (1, A, Z, theDaughterExcitation);
187 FillDaughterNucleus(1, A, Z, theDaughterExcitation);
201 if (A<1 || Z<0 || theDaughterExcitation <0.0)
208 ed <<
"Inappropriate values of daughter A, Z or excitation: "
209 << A <<
" , " << Z <<
" , " << theDaughterExcitation*
MeV <<
" MeV "
211 G4Exception(
"G4NuclearDecayChannel::FillDaughterNucleus()",
"HAD_RDM_006",
221 if (Z == 1 && A == 1) {
223 }
else if (Z == 0 && A == 1) {
256 G4cout <<
"the decay mass = " << theParentMass <<
G4endl;
267 switch (numberOfDaughters) {
269 G4cerr <<
"G4NuclearDecayChannel::DecayIt ";
279 products = BetaDecayIt();
287 ed <<
" More than 3 daughters in decay: N = " << numberOfDaughters
289 G4Exception(
"G4NuclearDecayChannel::DecayIt()",
"HAD_RDM_007",
297 G4Exception(
"G4NuclearDecayChannel::DecayIt()",
"HAD_RDM_008",
306 G4int shellIndex = -1;
314 G4ThreeVector const daughterMomentum1(static_cast<const G4LorentzVector> (daughterMomentum));
348 gammas = deexcitation->
BreakUp(nucleus);
350 gammas = deexcitation->
BreakItUp(nucleus);
355 G4int nGammas=gammas->size()-1;
360 for (
G4int ig = 0; ig < nGammas; ig++) {
363 gammas->operator[](ig)->GetMomentum());
364 theGammaRay -> SetProperTime(gammas->operator[](ig)->GetCreationTime());
369 G4double finalDaughterExcitation = gammas->operator[](nGammas)->GetExcitationEnergy();
371 if (finalDaughterExcitation <= 1.0*
keV) finalDaughterExcitation = 0;
386 while (!gammas->empty()) {
387 delete *(gammas->end()-1);
421 G4Exception(
"G4NuclearDecayChannel::DecayIt()",
"HAD_RDM_009",
446 std::vector<G4DynamicParticle*> armProducts;
449 size_t narm = armProducts.size();
455 for (
size_t i = 0; i<narm; ++i) {
532 for (
G4int index=0; index<3; index++)
535 sumofdaughtermass += daughtermass[
index];
544 delete parentparticle;
546 G4double Q = pmass - sumofdaughtermass;
553 daughtermomentum[0] = std::sqrt(daughterenergy[0]*daughterenergy[0] +
554 2.0*daughterenergy[0] * daughtermass[0]);
560 G4double K=0.5-daughtermass[1]*daughtermass[1]/(2*Mme*Mme-4*pmass*daughterenergy[0]);
562 daughterenergy[2]=K*(Mme-daughterenergy[0]+rd*daughtermomentum[0]);
563 daughtermomentum[2] = daughterenergy[2] ;
566 daughterenergy[1] = Q-daughterenergy[0]-daughterenergy[2];
567 G4double recoilmomentumsquared = daughterenergy[1]*daughterenergy[1] +
568 2.0*daughterenergy[1] * daughtermass[1];
569 if (recoilmomentumsquared < 0.0) recoilmomentumsquared = 0.0;
570 daughtermomentum[1] = std::sqrt(recoilmomentumsquared);
574 G4cout <<
" daughter 0:" <<daughtermomentum[0]/
GeV <<
"[GeV/c]" <<
G4endl;
575 G4cout <<
" daughter 1:" <<daughtermomentum[1]/
GeV <<
"[GeV/c]" <<
G4endl;
576 G4cout <<
" daughter 2:" <<daughtermomentum[2]/
GeV <<
"[GeV/c]" <<
G4endl;
579 G4double costheta, sintheta, phi, sinphi, cosphi;
580 G4double costhetan, sinthetan, phin, sinphin, cosphin;
582 sintheta = std::sqrt((1.0-costheta)*(1.0+costheta));
584 sinphi = std::sin(phi);
585 cosphi = std::cos(phi);
591 costhetan = (daughtermomentum[1]*daughtermomentum[1]-
592 daughtermomentum[2]*daughtermomentum[2]-
593 daughtermomentum[0]*daughtermomentum[0])/
594 (2.0*daughtermomentum[2]*daughtermomentum[0]);
597 if (costhetan > 1.) costhetan = 1.;
598 if (costhetan < -1.) costhetan = -1.;
599 sinthetan = std::sqrt((1.0-costhetan)*(1.0+costhetan));
601 sinphin = std::sin(phin);
602 cosphin = std::cos(phin);
604 direction2.
setX(sinthetan*cosphin*costheta*cosphi -
605 sinthetan*sinphin*sinphi + costhetan*sintheta*cosphi);
606 direction2.
setY(sinthetan*cosphin*costheta*sinphi +
607 sinthetan*sinphin*cosphi + costhetan*sintheta*sinphi);
608 direction2.
setZ(-sinthetan*cosphin*sintheta + costhetan*costheta);
610 direction2*(daughtermomentum[2]/direction2.
mag()));
615 (direction0*daughtermomentum[0] +
616 direction2*(daughtermomentum[2]/direction2.
mag()))*(-1.0));
620 G4cout <<
"G4NuclearDecayChannel::BetaDecayIt ";
621 G4cout <<
" create decay products in rest frame " <<
G4endl;