125 G4double xmin = 2.0*std::log(2.0*leptonmass);
126 G4double xmax = 2.0*std::log(parentmass);
129 const size_t MAX_LOOP = 10000;
130 for (
size_t loop_counter=0; loop_counter <MAX_LOOP; ++loop_counter){
134 w1 = (1.0-4.0*leptonmass*leptonmass/t);
136 w2 = ( 1.0 + 2.0*leptonmass*leptonmass/t );
137 w3 = ( 1.0 - t/parentmass/parentmass );
139 ww = w3 * w2 * std::sqrt(w1);
150 G4double sintheta = std::sqrt((1.0 - costheta)*(1.0 + costheta));
152 G4ThreeVector gdirection(sintheta*std::cos(phi),sintheta*std::sin(phi),costheta);
159 G4double beta = Pgamma/(parentmass-Pgamma);
164 G4double Elepton = std::sqrt(Plepton*Plepton + leptonmass*leptonmass );
166 sintheta = std::sqrt((1.0 - costheta)*(1.0 + costheta));
168 G4ThreeVector ldirection(sintheta*std::cos(phi),sintheta*std::sin(phi),costheta);
172 ldirection, Elepton-leptonmass );
175 -1.0*ldirection, Elepton-leptonmass );
178 p4.
boost( -1.0*gdirection.
x()*beta, -1.0*gdirection.
y()*beta, -1.0*gdirection.
z()*beta);
181 p4.
boost( -1.0*gdirection.
x()*beta, -1.0*gdirection.
y()*beta, -1.0*gdirection.
z()*beta);
186 delete parentparticle;
193 G4cout <<
"G4DalitzDecayChannel::DecayIt ";
194 G4cout <<
" create decay products in rest frame " <<
G4endl;
void CheckAndFillDaughters()
void ClearDaughtersName()
void SetBR(G4double value)
G4int PushProducts(G4DynamicParticle *aParticle)
virtual G4DecayProducts * DecayIt(G4double)
G4ParticleDefinition * G4MT_parent
G4ParticleDefinition ** G4MT_daughters
static constexpr double rad
static constexpr double twopi
G4GLOB_DLL std::ostream G4cout
void SetNumberOfDaughters(G4int value)
HepLorentzVector & boost(double, double, double)
G4DalitzDecayChannel(const G4String &theParentName, G4double theBR, const G4String &theLeptonName, const G4String &theAntiLeptonName)
G4LorentzVector Get4Momentum() const
virtual ~G4DalitzDecayChannel()
void Set4Momentum(const G4LorentzVector &momentum)
G4int GetVerboseLevel() const
G4double GetPDGMass() const
void SetParent(const G4ParticleDefinition *particle_type)
void SetDaughter(G4int anIndex, const G4ParticleDefinition *particle_type)
G4DalitzDecayChannel & operator=(const G4DalitzDecayChannel &)
G4String ** daughters_name
void CheckAndFillParent()
static G4double Pmx(G4double e, G4double p1, G4double p2)