|
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. 45 _phiNplusplus( 3.48 ), 46 _phiNplusminus( 0.00 ), 47 _phiNminusplus( 0.75 ), 48 _phiNminusminus( 1.13 ), 82 _p4_Lambdac_Mag( 0.0 ) 98 const std::pair<EvtId, int>& right ) 101 bool result( false ); 106 if ( leftPDGid < rightPDGid ) { 131 std::vector<std::pair<EvtId, int>> daughters; 132 if ( parnum == LAMBDAC ) { 133 for ( int i = 0; i < 3; ++i ) { 134 daughters.push_back( std::make_pair( getDaug( i ), i ) ); 137 for ( int i = 0; i < 3; ++i ) { 144 std::sort( daughters.begin(), daughters.end(), compareId ); 146 if ( parnum == LAMBDAC || parnum == LAMBDACB ) { 147 if ( daughters[0]. first == KM && daughters[1]. first == PIP && 148 daughters[2]. first == PROTON ) { 149 _d1 = daughters[0].second; 150 _d2 = daughters[1].second; 151 _d3 = daughters[2].second; 175 double norm[3] = {0.0, 0.0, 0.0}; 179 for ( int i = 0; i < N; i++ ) { 203 double N0( N * 1.0 ); 212 if ( norm[0] > 0.0 ) { 215 if ( norm[1] > 0.0 ) { 218 if ( norm[2] > 0.0 ) { 236 double FitFracTop[4] = {0.0, 0.0, 0.0, 0.0}; 237 double FitFracDenom = 0.0; 241 for ( int i = 0; i < N; i++ ) { 248 EvtResonance2 LambdacpKpi0( p0, p4Daug[0], p4Daug[1], 1.0, 0.0, 0.0, 0.0, 260 std::vector<EvtComplex> ampNonRes = 262 std::vector<EvtComplex> ampKstar = 264 std::vector<EvtComplex> ampDelta = 266 std::vector<EvtComplex> ampLambda = 270 EvtComplex amp00 = ampNonRes[0] + ampKstar[0] + ampDelta[0] + 272 EvtComplex amp01 = ampNonRes[1] + ampKstar[1] + ampDelta[1] + 274 EvtComplex amp10 = ampNonRes[2] + ampKstar[2] + ampDelta[2] + 276 EvtComplex amp11 = ampNonRes[3] + ampKstar[3] + ampDelta[3] + 280 FitFracTop[0] += abs2( ampNonRes[0] ) + abs2( ampNonRes[1] ) + 281 abs2( ampNonRes[2] ) + abs2( ampNonRes[3] ); 282 FitFracTop[1] += abs2( ampKstar[0] ) + abs2( ampKstar[1] ) + 283 abs2( ampKstar[2] ) + abs2( ampKstar[3] ); 284 FitFracTop[2] += abs2( ampDelta[0] ) + abs2( ampDelta[1] ) + 285 abs2( ampDelta[2] ) + abs2( ampDelta[3] ); 286 FitFracTop[3] += abs2( ampLambda[0] ) + abs2( ampLambda[1] ) + 287 abs2( ampLambda[2] ) + abs2( ampLambda[3] ); 290 FitFracDenom += abs2( amp00 ) + abs2( amp01 ) + abs2( amp10 ) + 295 << "FitFracs: NR = " << FitFracTop[0] / FitFracDenom 296 << ", K* = " << FitFracTop[1] / FitFracDenom 297 << ", Del = " << FitFracTop[2] / FitFracDenom 298 << ", Lam = " << FitFracTop[3] / FitFracDenom << std::endl; 325 EvtResonance2 LambdacpKpi0( p4_p, moms1, moms2, 1.0, 0.0, 0.0, 0.0, 0, true, 344 beam = p4_Lambda_c_mother; 369 std::vector<EvtComplex> ampKstar = 371 std::vector<EvtComplex> ampDelta = 373 std::vector<EvtComplex> ampLambda = 377 EvtComplex amp00 = ampNonRes[0] + ampKstar[0] + ampDelta[0] + ampLambda[0]; 378 EvtComplex amp01 = ampNonRes[1] + ampKstar[1] + ampDelta[1] + ampLambda[1]; 379 EvtComplex amp10 = ampNonRes[2] + ampKstar[2] + ampDelta[2] + ampLambda[2]; 380 EvtComplex amp11 = ampNonRes[3] + ampKstar[3] + ampDelta[3] + ampLambda[3]; 393 double thetaRes( 0.0 ), phiRes( 0.0 ), phiPrimeDaug( 0.0 ), 394 thetaPrimeDaug( 0.0 ); 396 double beta_res( 0.0 ); 399 Lc_atproton( 0.0, 0.0, 0.0, 0.0 ); 402 EvtComplex term1( 0.0 ), term2( 0.0 ), term3( 0.0 ), term4( 0.0 ); 415 double p4ResMag = p4Res. d3mag(); 422 double res_d1_Mag = res_d1. d3mag(); 425 double res_d3_Mag = res_d3. d3mag(); 427 thetaPrimeDaug = getACos( res_d1. dot( res_d3 ), res_d1_Mag * res_d3_Mag ); 429 res_atproton = p4Res; 431 double res_atproton_mag = res_atproton.d3mag(); 433 Lc_atproton = res. p4_p(); 435 double Lc_atproton_mag = Lc_atproton. d3mag(); 442 phiPrimeDaug = getASin( res_d1. dot( yRes ), sin( thetaPrimeDaug ) * 453 if ( res_atproton_mag > 0.0 && Lc_atproton_mag > 0.0 ) { 457 beta_res = getACos( res_atproton.dot( Lc_atproton ), 458 res_atproton_mag * Lc_atproton_mag ); 468 term1 = resAmp * DecayAmp3( resIndex, 1, 1, thetaRes, phiRes, 469 thetaPrimeDaug, phiPrimeDaug ); 470 term2 = resAmp * DecayAmp3( resIndex, 1, -1, thetaRes, phiRes, 471 thetaPrimeDaug, phiPrimeDaug ); 472 term3 = resAmp * DecayAmp3( resIndex, -1, 1, thetaRes, phiRes, 473 thetaPrimeDaug, phiPrimeDaug ); 474 term4 = resAmp * DecayAmp3( resIndex, -1, -1, thetaRes, phiRes, 475 thetaPrimeDaug, phiPrimeDaug ); 485 thetaPrimeDaug, phiPrimeDaug ); 487 thetaPrimeDaug, phiPrimeDaug ); 489 thetaPrimeDaug, phiPrimeDaug ); 491 thetaPrimeDaug, phiPrimeDaug ); 493 term1 = rotate_00 * termA + rotate_10 * termB; 494 term2 = rotate_01 * termA + rotate_11 * termB; 495 term3 = rotate_00 * termC + rotate_10 * termD; 496 term4 = rotate_01 * termC + rotate_11 * termD; 500 std::vector<EvtComplex> ampVect; 501 ampVect.push_back( term1 ); 502 ampVect.push_back( term2 ); 503 ampVect.push_back( term3 ); 504 ampVect.push_back( term4 ); 510 int mprime, double theta_res, double phi_res, 511 double theta_prime_daughter_res, 512 double phi_prime_daughter_res ) const 516 EvtComplex term1( 0.0, 0.0 ), term2( 0.0, 0.0 ); 520 if ( m == 1 && mprime == 1 ) { 524 } else if ( m == 1 && mprime == -1 ) { 528 } else if ( m == -1 && mprime == 1 ) { 532 } else if ( m == -1 && mprime == -1 ) { 539 if ( m == 1 && mprime == 1 ) { 541 theta_prime_daughter_res, phi_prime_daughter_res ); 543 theta_prime_daughter_res, phi_res ); 545 } else if ( m == 1 && mprime == -1 ) { 547 theta_prime_daughter_res, 0.0 ); 549 theta_prime_daughter_res, 550 phi_res - phi_prime_daughter_res ); 552 } else if ( m == -1 && mprime == 1 ) { 554 theta_prime_daughter_res, 555 -( phi_res - phi_prime_daughter_res ) ); 557 theta_prime_daughter_res, 0.0 ); 559 } else if ( m == -1 && mprime == -1 ) { 561 theta_prime_daughter_res, -phi_res ); 563 theta_prime_daughter_res, -phi_prime_daughter_res ); 568 if ( m == 1 && mprime == 1 ) { 570 theta_prime_daughter_res, 0.0 ); 572 theta_prime_daughter_res, 573 phi_res - phi_prime_daughter_res ); 575 } else if ( m == 1 && mprime == -1 ) { 577 theta_prime_daughter_res, phi_prime_daughter_res ); 579 theta_prime_daughter_res, phi_res ); 581 } else if ( m == -1 && mprime == 1 ) { 583 theta_prime_daughter_res, -phi_res ); 585 theta_prime_daughter_res, -phi_prime_daughter_res ); 587 } else if ( m == -1 && mprime == -1 ) { 589 theta_prime_daughter_res, 590 -( phi_res - phi_prime_daughter_res ) ); 592 theta_prime_daughter_res, 0.0 ); 597 if ( m == 1 && mprime == 1 ) { 599 theta_prime_daughter_res, 0.0 ); 601 theta_prime_daughter_res, 602 phi_res - phi_prime_daughter_res ); 604 } else if ( m == 1 && mprime == -1 ) { 606 theta_prime_daughter_res, 607 phi_prime_daughter_res ); 609 theta_prime_daughter_res, phi_res ); 611 } else if ( m == -1 && mprime == 1 ) { 613 theta_prime_daughter_res, -phi_res ); 615 theta_prime_daughter_res, -phi_prime_daughter_res ); 617 } else if ( m == -1 && mprime == -1 ) { 619 theta_prime_daughter_res, 620 -( phi_res - phi_prime_daughter_res ) ); 622 theta_prime_daughter_res, 0.0 ); 631 int spinMother, int m_spinMother, 632 int m_prime_spinMother, double theta_res, 633 float spin_res, float m_spin_res, 634 float m_prime_spin_res, 635 double theta_daughter_res, 636 double phi_prime_daughter_res ) const 639 m_prime_spinMother, theta_res ); 640 double dTerm2 = EvtdFunction::d( spin_res, m_spin_res, m_prime_spin_res, 641 theta_daughter_res ); 645 sin( phi_prime_daughter_res ) ); 647 EvtComplex partial_amp = amplitude_res * amp_phase1 * dTerm1 * amp_phase2 * 656 double angle( 0.0 ), ratio( 0.0 ); 657 if ( fabs( denom ) > 0.0 ) { 661 if ( fabs( ratio ) <= 1.0 ) { 662 angle = acos( ratio ); 671 double angle( 0.0 ), ratio( 0.0 ); 672 if ( fabs( denom ) > 0.0 ) { 676 if ( fabs( ratio ) <= 1.0 ) { 677 angle = asin( ratio );
std::string getName() override
EvtComplex resAmpl() const
void initProbMax() override
EvtParticle * getParent() const
double getArg(unsigned int j)
EvtVector4R getP4Lab() const
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=0)
EvtVector4R cross(const EvtVector4R &v2)
double getACos(double num, double denom) const
static const double twoPi
static double getMeanMass(EvtId i)
double abs2(const EvtComplex &c)
void set(int i, double d)
const EvtVector4R & p4_d1() const
void setProbMax(double prbmx)
EvtId getParentId() const
void vertex(const EvtComplex &)
std::vector< EvtComplex > calcResAmpTerms(EvtLambdacPHH::LcResLabel resIndex, const EvtResonance2 &res, double norm) const
double initializePhaseSpace(unsigned int numdaughter, EvtId *daughters, bool forceResetMasses=false, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
void decay(EvtParticle *p) override
EvtComplex fampl3(double amplitude_res, double phi_res, int spinMother, int m_spinMother, int m_prime_spinMother, double theta_res, float spin_res, float m_spin_res, float m_prime_spin_res, double theta_daughter_res, double phi_prime_daughter_res) 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)
static EvtId getId(const std::string &name)
const EvtVector4R & getP4() const
void applyBoostTo(const EvtVector4R &p4, bool inverse=false)
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
static double PhaseSpace(int ndaug, double mass[30], EvtVector4R p4[30], double mp)
void calcNormalisations()
EvtDecayBase * clone() override
EvtParticle * getDaug(int i)
EvtComplex DecayAmp3(EvtLambdacPHH::LcResLabel resonance, int m, int mprime, double theta_res, double phi_res, double theta_prime_daughter_res, double phi_prime_daughter_res) const
bool compareId(const std::pair< EvtId, int > &left, const std::pair< EvtId, int > &right)
double getASin(double num, double denom) const
static double getMass(EvtId i)
const EvtVector4R & p4_d2() const
static double d(int j, int m1, int m2, double theta)
const EvtVector4R & p4_p() const
static EvtId chargeConj(EvtId id)
static int getStdHep(EvtId id)
double dot(const EvtVector4R &v2) const
EvtId getDaug(int i) const
|