|
EvtGen
2.0.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
|
Go to the documentation of this file. 50 << "EvtDToKpienu ==> Initialization !" << std::endl; 92 Pi = atan2( 0.0, -1.0 ); 147 double m2, q2, cosV, cosL, chi; 148 KinVGen( K, pi, e, nu, charm, m2, q2, cosV, cosL, chi ); 149 double prob = calPDF( m2, q2, cosV, cosL, chi ); 156 const int charm, double& m2, double& q2, 157 double& cosV, double& cosL, double& chi ) const 162 m2 = vp4_KPi. mass2(); 166 boost. set( vp4_KPi. get( 0 ), -vp4_KPi. get( 1 ), -vp4_KPi. get( 2 ), 169 cosV = vp4_Kp. dot( vp4_KPi ) / ( vp4_Kp. d3mag() * vp4_KPi. d3mag() ); 171 boost. set( vp4_W. get( 0 ), -vp4_W. get( 1 ), -vp4_W. get( 2 ), -vp4_W. get( 3 ) ); 173 cosL = vp4_Lepp. dot( vp4_W ) / ( vp4_Lepp. d3mag() * vp4_W. d3mag() ); 180 double sinx = C.cross( V ).dot( D ); 181 double cosx = C.dot( D ); 182 chi = sinx > 0 ? acos( cosx ) : -acos( cosx ); 188 const double cosL, const double chi ) const 190 double m = sqrt( m2 ); 191 double q = sqrt( q2 ); 210 double amplitude_temp, delta_temp; 212 for ( int index = 0; index < nAmps; index++ ) { 213 switch ( type[index] ) { 223 ResonanceP( m, q, mV, mA, V_0, A1_0, A2_0, m0, width0, rBW, 224 amplitude_temp, delta_temp, f11, f21, f31 ); 226 F11 = F11 + coef * f11; 227 F21 = F21 + coef * f21; 228 F31 = F31 + coef * f31; 234 rBW, amplitude_temp, delta_temp, f11, f21, f31 ); 236 F11 = F11 + coef * f11; 237 F21 = F21 + coef * f21; 238 F31 = F31 + coef * f31; 244 rBW, amplitude_temp, delta_temp, f12, f22, f32 ); 246 F12 = F12 + coef * f12; 247 F22 = F22 + coef * f22; 248 F32 = F32 + coef * f32; 253 << "No such form factor type!!!" << std::endl; 260 double I, I1, I2, I3, I4, I5, I6, I7, I8, I9; 262 double cosV2 = cosV * cosV; 263 double sinV = sqrt( 1.0 - cosV2 ); 264 double sinV2 = sinV * sinV; 266 EvtComplex F1 = F10 + F11 * cosV + F12 * ( 1.5 * cosV2 - 0.5 ); 270 I1 = 0.25 * ( abs2( F1 ) + 1.5 * sinV2 * ( abs2( F2 ) + abs2( F3 ) ) ); 271 I2 = -0.25 * ( abs2( F1 ) - 0.5 * sinV2 * ( abs2( F2 ) + abs2( F3 ) ) ); 272 I3 = -0.25 * ( abs2( F2 ) - abs2( F3 ) ) * sinV2; 273 I4 = real( conj( F1 ) * F2 ) * sinV * 0.5; 274 I5 = real( conj( F1 ) * F3 ) * sinV; 275 I6 = real( conj( F2 ) * F3 ) * sinV2; 276 I7 = imag( conj( F2 ) * F1 ) * sinV; 277 I8 = imag( conj( F3 ) * F1 ) * sinV * 0.5; 278 I9 = imag( conj( F3 ) * F2 ) * sinV2 * ( -0.5 ); 280 double coschi = cos( chi ); 281 double sinchi = sin( chi ); 282 double sin2chi = 2.0 * sinchi * coschi; 283 double cos2chi = 1.0 - 2.0 * sinchi * sinchi; 285 double sinL = sqrt( 1. - cosL * cosL ); 286 double sinL2 = sinL * sinL; 287 double sin2L = 2.0 * sinL * cosL; 288 double cos2L = 1.0 - 2.0 * sinL2; 290 I = I1 + I2 * cos2L + I3 * sinL2 * cos2chi + I4 * sin2L * coschi + 291 I5 * sinL * coschi + I6 * cosL + I7 * sinL * sinchi + 292 I8 * sin2L * sinchi + I9 * sinL2 * sin2chi; 297 const double mA, const double V_0, 298 const double A1_0, const double A2_0, 299 const double m0, const double width0, 300 const double rBW, double& amplitude, 305 double mD2 = mD * mD; 307 double m02 = m0 * m0; 309 double mV2 = mV * mV; 310 double mA2 = mA * mA; 311 double summDm = mD + m; 312 double V = V_0 / ( 1.0 - q2 / ( mV2 ) ); 313 double A1 = A1_0 / ( 1.0 - q2 / ( mA2 ) ); 314 double A2 = A2_0 / ( 1.0 - q2 / ( mA2 ) ); 315 double A = summDm * A1; 316 double B = 2.0 * mD * pKPi / summDm * V; 319 double H0 = 0.5 / ( m * q ) * 320 ( ( mD2 - m2 - q2 ) * summDm * A1 - 321 4.0 * ( mD2 * pKPi * pKPi ) / summDm * A2 ); 326 double B_Kstar = 2. / 3.; 328 double alpha = sqrt( 3. * Pi * B_Kstar / ( pStar0 * width0 ) ); 335 double AA = m02 - m2; 336 double BB = - m0 * width; 338 amplitude = abs( amp ); 339 delta = atan2( imag( amp ), real( amp ) ); 341 double alpham2 = alpha * 2.0; 342 F11 = amp * alpham2 * q * H0 * root2; 343 F21 = amp * alpham2 * q * ( Hp + Hm ); 344 F31 = amp * alpham2 * q * ( Hp - Hm ); 348 const double rS1, const double a_delta, 349 const double b_delta, const double mA, const double m0, 350 const double width0, double& amplitude, double& delta, 353 static const double tmp = ( mK + mPi ) * ( mK + mPi ); 357 double mA2 = mA * mA; 359 double m_K0_1430 = m0; 360 double width_K0_1430 = width0; 361 double m2_K0_1430 = m_K0_1430 * m_K0_1430; 366 if ( m < m_K0_1430 ) { 367 x = sqrt( m2 / tmp - 1.0 ); 370 x = sqrt( m2_K0_1430 / tmp - 1.0 ); 372 Pm *= m_K0_1430 * width_K0_1430 / 373 sqrt( ( m2_K0_1430 - m2 ) * ( m2_K0_1430 - m2 ) + 374 m2_K0_1430 * width * width ); 379 double delta_bg = atan( 2. * a_delta * pStar / 381 delta_bg = ( delta_bg > 0 ) ? delta_bg : ( delta_bg + Pi ); 383 double delta_K0_1430 = atan( m_K0_1430 * width / ( m2_K0_1430 - m2 ) ); 384 delta_K0_1430 = ( delta_K0_1430 > 0 ) ? delta_K0_1430 385 : ( delta_K0_1430 + Pi ); 386 delta = delta_bg + delta_K0_1430; 392 F10 = amp * pKPi * mD / ( 1. - q2 / mA2 ); 396 const double mA, const double TV_0, 397 const double T1_0, const double T2_0, 398 const double m0, const double width0, 399 const double rBW, double& amplitude, 404 double mD2 = mD * mD; 406 double m02 = m0 * m0; 408 double mV2 = mV * mV; 409 double mA2 = mA * mA; 410 double summDm = mD + m; 411 double TV = TV_0 / ( 1.0 - q2 / ( mV2 ) ); 412 double T1 = T1_0 / ( 1.0 - q2 / ( mA2 ) ); 413 double T2 = T2_0 / ( 1.0 - q2 / ( mA2 ) ); 419 double AA = m02 - m2; 420 double BB = - m0 * width; 423 amplitude = abs( amp ); 424 delta = atan2( imag( amp ), real( amp ) ); 426 F12 = amp * mD * pKPi / 3. * 427 ( ( mD2 - m2 - q2 ) * summDm * T1 - mD2 * pKPi * pKPi / summDm * T2 ); 428 F22 = amp * root2d3 * mD * m * q * pKPi * summDm * T1; 429 F32 = amp * root2d3 * 2. * mD2 * m * q * pKPi * pKPi / summDm * TV; 433 const double m2 ) const 438 double x = s + s1 - s2; 439 double t = 0.25 * x * x / s - s1; 445 << " Hello, pstar is less than 0.0" << std::endl; 452 const double m_c2, const double rBW ) const 454 double pStar = getPStar( m, m_c1, m_c2 ); 457 double pStar2 = pStar * pStar; 458 double pStar02 = pStar0 * pStar0; 459 double B = 1. / sqrt( 1. + rBW2 * pStar2 ); 460 double B0 = 1. / sqrt( 1. + rBW2 * pStar02 ); 461 double F = pStar / pStar0 * B / B0; 466 const double m_c2, const double rBW ) const 468 double pStar = getPStar( m, m_c1, m_c2 ); 471 double pStar2 = pStar * pStar; 472 double pStar02 = pStar0 * pStar0; 473 double B = 1. / sqrt( ( rBW2 * pStar2 - 3. ) * ( rBW2 * pStar2 - 3. ) + 474 9. * rBW2 * pStar2 ); 475 double B0 = 1. / sqrt( ( rBW2 * pStar02 - 3. ) * ( rBW2 * pStar02 - 3. ) + 476 9. * rBW2 * pStar02 ); 477 double F = pStar2 / pStar02 * B / B0; 482 const double m_c1, const double m_c2, 483 const double width0 ) const 485 double pStar = getPStar( m, m_c1, m_c2 ); 487 double width = width0 * pStar / pStar0 * m0 / m; 492 const double m_c1, const double m_c2, 493 const double width0, const double rBW ) const 495 double pStar = getPStar( m, m_c1, m_c2 ); 498 double width = width0 * pStar / pStar0 * m0 / m * F * F; 503 const double m_c1, const double m_c2, 504 const double width0, const double rBW ) const 506 double pStar = getPStar( m, m_c1, m_c2 ); 509 double width = width0 * pStar / pStar0 * m0 / m * F * F;
void setProb(double prob)
void NRS(const double m, const double q, const double rS, const double rS1, const double a_delta, const double b_delta, const double mA, const double m0, const double width0, double &litude, double &delta, EvtComplex &F10) const
double getWidth2(const double m, const double m0, const double m_c1, const double m_c2, const double width0, const double rBW) const
double calPDF(const double m2, const double q2, const double cosV, const double cosL, const double chi) const
std::array< int, 5 > type
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=0)
EvtVector4R cross(const EvtVector4R &v2)
Evt3Rank3C conj(const Evt3Rank3C &t2)
EvtDecayBase * clone() override
double abs2(const EvtComplex &c)
void ResonanceD(const double m, const double q, const double mV, const double mA, const double TV_0, const double T1_0, const double T2_0, const double m0, const double width0, const double rBW, double &litude, double &delta, EvtComplex &F12, EvtComplex &F22, EvtComplex &F32) const
void decay(EvtParticle *p) override
void set(int i, double d)
EvtRaritaSchwinger boostTo(const EvtRaritaSchwinger &rs, const EvtVector4R p4)
double getF1(const double m, const double m0, const double m_c1, const double m_c2, const double rBW) const
double getWidth0(const double m, const double m0, const double m_c1, const double m_c2, const double width0) const
void setProbMax(double prbmx)
double initializePhaseSpace(unsigned int numdaughter, EvtId *daughters, bool forceResetMasses=false, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
double getF2(const double m, const double m0, const double m_c1, const double m_c2, const double rBW) const
void checkNDaug(int d1, int d2=-1)
void checkSpinParent(EvtSpinType::spintype sp)
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
double abs(const EvtComplex &c)
void initProbMax() override
const EvtVector4R & getP4() const
double imag(const EvtComplex &c)
double getWidth1(const double m, const double m0, const double m_c1, const double m_c2, const double width0, const double rBW) const
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
void ResonanceP(const double m, const double q, const double mV, const double mA, const double V_0, const double A1_0, const double A2_0, const double m0, const double width0, const double rBW, double &litude, double &delta, EvtComplex &F11, EvtComplex &F21, EvtComplex &F31) const
EvtComplex getCoef(const double rho, const double phi) const
EvtParticle * getDaug(int i)
double getPStar(const double m, const double m1, const double m2) const
std::string getName() override
void KinVGen(const EvtVector4R &vp4_K, const EvtVector4R &vp4_Pi, const EvtVector4R &vp4_Lep, const EvtVector4R &vp4_Nu, const int charm, double &m2, double &q2, double &cosV, double &cosL, double &chi) const
double real(const EvtComplex &c)
static int getStdHep(EvtId id)
double dot(const EvtVector4R &v2) const
|