void EvtSSD_DirectCP::init() { // check that there is 1 argument and 2-body decay checkNArg(1); checkNDaug(2); EvtSpinType::spintype d1type=EvtPDL::getSpinType(getDaug(0)); EvtSpinType::spintype d2type=EvtPDL::getSpinType(getDaug(1)); if ( (!(d1type == EvtSpinType::SCALAR || d2type == EvtSpinType::SCALAR))|| (!((d2type==EvtSpinType::SCALAR)||(d2type==EvtSpinType::VECTOR)|| (d2type==EvtSpinType::TENSOR)))|| (!((d1type==EvtSpinType::SCALAR)||(d1type==EvtSpinType::VECTOR)|| (d1type==EvtSpinType::TENSOR))) ) { EvtGenReport(EVTGEN_ERROR,"EvtGen") << "EvtSSD_DirectCP generator expected " << "one of the daugters to be a scalar, " << "the other either scalar, vector, or tensor, " << "found:" << EvtPDL::name(getDaug(0)).c_str() <<" and " <<EvtPDL::name(getDaug(1)).c_str()<<std::endl; EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Will terminate execution!"<<std::endl; ::abort(); } _acp = getArg( 0 ) ; // A_CP defined as A_CP = (BR(fbar)-BR(f))/(BR(fbar)+BR(f)) }
void EvtHypNonLepton::init() { if(getNArg()<2 || getNArg()>3) { // alpha phi gamma delta EvtGenReport(EVTGEN_ERROR,"EvtGen") << " ERROR: EvtHypNonLepton generator expected 2 or 3 arguments but found: " << getNArg() << std::endl; EvtGenReport(EVTGEN_INFO ,"EvtGen") << " 1. Decay asymmetry parameter - alpha" << std::endl; EvtGenReport(EVTGEN_INFO ,"EvtGen") << " 2. Parameter phi - in degrees (not radians)" << std::endl; EvtGenReport(EVTGEN_INFO ,"EvtGen") << " 3. Note on every x-th decay" << std::endl; ::abort(); } if(getNDaug()!=2) { // Check that there are 2 daughters only EvtGenReport(EVTGEN_ERROR,"EvtGen") << " ERROR: EvtHypNonLepton generator expected 2 daughters but found: " << getNDaug() << std::endl; ::abort(); } // Check particles spins if(EvtSpinType::getSpin2(EvtPDL::getSpinType(getParentId()))!=1) { EvtGenReport(EVTGEN_ERROR,"EvtGen") << " ERROR: EvtHypNonLepton generator expected dirac parent particle, but found " << EvtSpinType::getSpin2(EvtPDL::getSpinType(getParentId())) << " spin degrees of freedom" << std::endl; ::abort(); } if(EvtSpinType::getSpin2(EvtPDL::getSpinType(getDaug(0)))!=1) { EvtGenReport(EVTGEN_ERROR,"EvtGen") << " ERROR: EvtHypNonLepton generator expected the first child to be dirac particle, but found " << EvtSpinType::getSpin2(EvtPDL::getSpinType(getDaug(0))) << " spin degrees of freedom" << std::endl; ::abort(); } if(EvtSpinType::getSpin2(EvtPDL::getSpinType(getDaug(1)))!=0) { EvtGenReport(EVTGEN_ERROR,"EvtGen") << " ERROR: EvtHypNonLepton generator expected the second child to be scalar particle, but found " << EvtSpinType::getSpin2(EvtPDL::getSpinType(getDaug(1))) << " spin degrees of freedom" << std::endl; ::abort(); } // Read all parameters m_alpha = getArg(0); m_phi = getArg(1)*EvtConst::pi/180; if(getNArg()==3) m_noTries = static_cast<long>(getArg(2)); else m_noTries = 0; // calculate additional parameters double p,M,m1,m2; double p_to_s,beta,delta,gamma; M = EvtPDL::getMass(getParentId()); m1 = EvtPDL::getMass(getDaug(0)); m2 = EvtPDL::getMass(getDaug(1)); if(m1+m2>=M) { EvtGenReport(EVTGEN_ERROR,"EvtGen") << " ERROR: EvtHypNonLepton found impossible decay: " << M << " --> " << m1 << " + " << m2 << " GeV\n" << std::endl; ::abort(); } p = sqrt(M*M-(m1+m2)*(m1+m2))*sqrt(M*M-(m1-m2)*(m1-m2))/2./M; beta = sqrt(1.-m_alpha*m_alpha)*sin(m_phi); delta = -atan2(beta,m_alpha); gamma = sqrt(1.-m_alpha*m_alpha-beta*beta); p_to_s = sqrt((1.-gamma)/(1.+gamma)); m_B_to_A = p_to_s*(m1+sqrt(p*p+m1*m1))/p*EvtComplex(cos(delta),sin(delta)); }
int EvtSpinType::getSpinStates(spintype stype){ switch (stype){ case SCALAR: case STRING: case NEUTRINO: return 1; case DIRAC: case PHOTON: return 2; case VECTOR: return 3; case RARITASCHWINGER: return 4; case TENSOR: return 5; case SPIN5HALF: return 6; case SPIN3: return 7; case SPIN7HALF: return 8; case SPIN4: return 9; default: EvtGenReport(EVTGEN_ERROR,"EvtGen")<<"Unknown spintype in EvtSpinType!"<<std::endl; return 0; } }
void EvtSLBKPoleFF::getraritaff(EvtId, EvtId, double, double, double*, double*, double*, double*, double*, double*, double*, double*) { EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Not implemented :getraritaff in EvtSLBKPoleFF.\n"; ::abort(); }
void EvtSLBKPoleFF::gettensorff(EvtId parent,EvtId /*daught*/, double t, double /*mass*/, double *hf, double *kf, double *bpf, double *bmf ){ if ( numSLBKPoleargs !=16 ) { EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Problem in EvtSLBKPoleFF::gettensorff\n"; EvtGenReport(EVTGEN_ERROR,"EvtGen") << "wrong number of arguements!!!\n"; } EvtGenReport(EVTGEN_INFO,"EvtGen")<<"Check the implementation of EvtSLBKPoleFF::gettensorff()!\n"; double mb=EvtPDL::getMeanMass(parent); double mb2 = mb*mb; double f0,af,bf,powf; f0 = SLBKPoleargs[0]; af = SLBKPoleargs[1]; bf = SLBKPoleargs[2]; powf = SLBKPoleargs[3]; *hf = f0/(pow( 1.0 + (af*t/mb2) + (bf*((t/mb2)*(t/mb2))),powf)); f0 = SLBKPoleargs[4]; af = SLBKPoleargs[5]; bf = SLBKPoleargs[6]; powf = SLBKPoleargs[7]; *kf = f0/(pow( 1.0 + (af*t/mb2) + (bf*((t/mb2)*(t/mb2))),powf)); f0 = SLBKPoleargs[8]; af = SLBKPoleargs[9]; bf = SLBKPoleargs[10]; powf = SLBKPoleargs[11]; *bpf = f0/(pow( 1.0 + (af*t/mb2) + (bf*((t/mb2)*(t/mb2))),powf)); f0 = SLBKPoleargs[12]; af = SLBKPoleargs[13]; bf = SLBKPoleargs[14]; powf = SLBKPoleargs[15]; *bmf = f0/(pow( 1.0 + (af*t/mb2) + (bf*((t/mb2)*(t/mb2))),powf)); return; }
//============================================================================= // Initialisation method //============================================================================= void EvtBToDDalitzCPK::init ( ) { // Check that there are 3 arguments checkNArg( 3 ) ; // Check that there are 2 daughters checkNDaug( 2 ) ; // Check that the particles of the decay are : // B+/- -> D0/bar K+/- // B+/- -> K+/- D0/bar // B0/bar -> K*0/bar D0/bar // and nothing else ... static EvtId BP = EvtPDL::getId( "B+" ) ; static EvtId BM = EvtPDL::getId( "B-" ) ; static EvtId B0 = EvtPDL::getId( "B0" ) ; static EvtId B0B = EvtPDL::getId( "anti-B0" ) ; static EvtId KP = EvtPDL::getId( "K+" ) ; static EvtId KM = EvtPDL::getId( "K-" ) ; static EvtId KS = EvtPDL::getId( "K*0" ) ; static EvtId KSB = EvtPDL::getId( "anti-K*0" ) ; static EvtId D0 = EvtPDL::getId( "D0" ) ; static EvtId D0B = EvtPDL::getId( "anti-D0" ) ; _flag = 0 ; EvtId parent = getParentId() ; EvtId d1 = getDaug( 0 ) ; EvtId d2 = getDaug( 1 ) ; if ( ( ( parent == BP ) || ( parent == BM ) ) && ( ( d1 == D0 ) || ( d1 == D0B ) ) && ( ( d2 == KP ) || ( d2 == KM ) ) ) { _flag = 1 ; // PHSP Decay } else if ( ( ( parent == BP ) || ( parent == BM ) ) && ( ( d1 == KP ) || ( d1 == KM ) ) && ( ( d2 == D0 ) || ( d2 == D0B ) ) ) { _flag = 1 ; // also PHSP decay } else if ( ( ( parent == B0 ) || ( parent == B0B ) ) && ( ( d1 == KS ) || ( d1 == KSB ) ) && ( ( d2 == D0 ) || ( d2 == D0B ) ) ) { _flag = 2 ; // SVS Decay } if ( _flag == 0 ) { EvtGenReport(EVTGEN_ERROR , "EvtGen" ) << "EvtBToDDalitzCPK : Invalid mode." << std::endl ; assert( 0 ) ; } }
void EvtHypNonLepton::initProbMax() { double maxProb,m1,m2,M,p; M=EvtPDL::getMass(getParentId()); m1=EvtPDL::getMass(getDaug(0)); m2=EvtPDL::getMass(getDaug(1)); if(m1+m2>=M) { EvtGenReport(EVTGEN_ERROR,"EvtGen") << " ERROR: EvtHypNonLepton found impossible decay: " << M << " --> " << m1 << " + " << m2 << " GeV\n" << std::endl; ::abort(); } p=sqrt(M*M-(m1+m2)*(m1+m2))*sqrt(M*M-(m1-m2)*(m1-m2))/2/M; maxProb=16*M*(sqrt(p*p+m1*m1)+m1+abs(m_B_to_A)*abs(m_B_to_A)*(sqrt(p*p+m1*m1)-m1)); //maxProb *= G_F*M_pi*M_pi; setProbMax(maxProb); EvtGenReport(EVTGEN_INFO,"EvtGen") << " EvtHypNonLepton set up maximum probability to " << maxProb << std::endl; }
void EvtSLBKPoleFF::getscalarff(EvtId parent,EvtId daught, double t, double /*mass*/, double *fpf, double *f0f ) { // Form factors have a general form, with parameters passed in // from the arguments. if ( numSLBKPoleargs != 4 ) {//modified EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Problem in EvtSLBKPoleFF::getscalarff\n"; EvtGenReport(EVTGEN_ERROR,"EvtGen") << "wrong number of arguments!\n"; EvtGenReport(EVTGEN_ERROR,"EvtGen") << "number args:"<<numSLBKPoleargs<<" (expected 4)\n"; EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Parent:"<<EvtPDL::name(parent)<<"\n"; EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Daughter:"<<EvtPDL::name(daught)<<"\n"; } double f0,af,powf; //double a_0, a_1, a_2, a_3, a_4, a_5, a_6, a_7; f0 = SLBKPoleargs[0];//f0 af = SLBKPoleargs[1];//alpha //bf = SLBKPoleargs[2]; double mass_star2 = SLBKPoleargs[3]*SLBKPoleargs[3]; powf = 1.0; *fpf = f0/(pow( 1.0 - (1.0+af)*(t/mass_star2) + (af*((t/mass_star2)*(t/mass_star2))),powf));//modified f0 = SLBKPoleargs[0];//f0 af = SLBKPoleargs[2];//beta //bf = SLBKPoleargs[6]; powf = 1.0; *f0f = f0/(pow( 1.0 - (t/mass_star2/af),powf));//modified return; }
// Set the maximum probability of the decay void EvtB2MuMuMuNu::initProbMax(){ double mymaxprob=-10.0; // maximum of the probability mymaxprob = _calcamp->CalcMaxProb(); if(mymaxprob <= 0.0){ EvtGenReport(EVTGEN_ERROR,"EvtGen") << "The function void EvtB2MuMuMuNu::initProbMax()" << "\n Unexpected value of the probability maximum!" << "\n mymaxprob = " << mymaxprob <<std::endl; ::abort(); } setProbMax(mymaxprob); }
// Set the maximum probability of the decay void EvtbsToLLLL::initProbMax(){ double mymaxprob=-10.0; // maximum of the probability // EvtId parnum, l1num, l2num, l3num, l4num; // parnum = getParentId(); // l1num = getDaug(0); // l2num = getDaug(1); // l3num = getDaug(2); // l4num = getDaug(3); // EvtSpinType::spintype mesontype=EvtPDL::getSpinType(getDaug(0)); // double mu = getArg(0); // the scale parameter // int Nf = (int) getArg(1); // number of "effective" flavors // int res_swch = (int) getArg(2); // resonant switching parametr // int ias = (int) getArg(3); // switching parametr for \alpha_s(M_Z) // double CKM_A = getArg(4); // double CKM_lambda = getArg(5); // double CKM_barrho = getArg(6); // double CKM_bareta = getArg(7); mymaxprob = _calcamp->CalcMaxProb( // parnum, l1num,l2num, l3num,l4num, // _mntffmodel, _wilscoeff, // mu, Nf, res_swch, ias, // CKM_A,CKM_lambda,CKM_barrho,CKM_bareta ); if(mymaxprob <= 0.0){ EvtGenReport(EVTGEN_ERROR,"EvtGen") << "The function void EvtbsToLLLL::initProbMax()" << "\n Unexpected value of the probability maximum!" << "\n mymaxprob = " << mymaxprob <<std::endl; ::abort(); } setProbMax(mymaxprob); }
void EvtHypNonLepton::calcAmp(EvtAmp *amp,EvtParticle *parent) { static long noTries=0; int i; EvtComplex Matrix[2][2]; //G_F = 1.16637e-5; //M_pi = 0.13957; for(i=0; i<4; i++) { //std::cout << "--------------------------------------------------" << std::endl; Matrix[i/2][i%2] = EvtLeptonSCurrent(parent->sp(i/2),parent->getDaug(0)->spParent(i%2)); //std::cout << "Matrix = " << Matrix[i/2][i%2] << std::endl; Matrix[i/2][i%2] -= m_B_to_A*EvtLeptonPCurrent(parent->sp(i/2),parent->getDaug(0)->spParent(i%2)); //std::cout << "Matrix = " << Matrix[i/2][i%2] << std::endl; //Matrix[i/2][i%2] *= G_F*M_pi*M_pi; //std::cout << "Matrix = " << Matrix[i/2][i%2] << std::endl; //std::cout << "--------------------------------------------------" << std::endl; amp->vertex(i/2,i%2,Matrix[i/2][i%2]); } if(m_noTries>0) if(!((++noTries)%m_noTries)) EvtGenReport(EVTGEN_DEBUG,"EvtGen") << " EvtHypNonLepton already finished " << noTries << " matrix element calculations" << std::endl; }
void EvtPVVCPLH::decay( EvtParticle *p){ //added by Lange Jan4,2000 static EvtId BS0=EvtPDL::getId("B_s0"); static EvtId BSB=EvtPDL::getId("anti-B_s0"); //This is only to get tag-ID //Mixing is not relevant //Lifetime is made correctly later //Tristan EvtId other_b; double t; // To generate integrated CP asymmetry, EvtGen uses the "flipping". // CP-asymmetry in this channel very small, since: // deltaMs large ..and.. // CPV-phase small EvtCPUtil::getInstance()->OtherB(p,t,other_b); //Here we're gonna generate and set the "envelope" lifetime //So we take the longest living component (for positive deltaGamma: tauH) //The double exponent will be taken care of later, by the amplitudes //Tristan static double Gamma = EvtConst::c/(EvtPDL::getctau(BS0)); static double deltaGamma = EvtCPUtil::getInstance()->getDeltaGamma(BS0); static double ctauLong = EvtConst::c/(Gamma-fabs(deltaGamma)/2); // if dG>0: tauLong=tauH(CP-odd) is then largest //This overrules the lifetimes made in OtherB t=-log(EvtRandom::Flat())*(ctauLong);//ctauLong has same dimensions as t if(isBsMixed(p)){ p->getParent()->setLifetime(t); }else{ p->setLifetime(t); } //These should be filled with the transversity amplitudes at t=0 //Tristan EvtComplex G0P,G1P,G1M; G1P=EvtComplex(getArg(2)*cos(getArg(3)),getArg(2)*sin(getArg(3))); G0P=EvtComplex(getArg(4)*cos(getArg(5)),getArg(4)*sin(getArg(5))); G1M=EvtComplex(getArg(6)*cos(getArg(7)),getArg(6)*sin(getArg(7))); EvtComplex lambda_km=EvtComplex(cos(2*getArg(0)),sin(2*getArg(0)));//was een min in oude versie //deltaMs is no argument anymore //Tristan static double deltaMs = EvtCPUtil::getInstance()->getDeltaM(BS0); EvtComplex cG0P,cG1P,cG1M; double mt = exp(-std::max(0.,deltaGamma)*t/(2*EvtConst::c)); double pt = exp(+std::min(0.,deltaGamma)*t/(2*EvtConst::c)); EvtComplex gplus = ( mt*EvtComplex(cos(deltaMs*t/(2*EvtConst::c)),sin( deltaMs*t/(2*EvtConst::c))) +pt*EvtComplex(cos(deltaMs*t/(2*EvtConst::c)),sin(-deltaMs*t/(2*EvtConst::c))) )/2; EvtComplex gminus = ( mt*EvtComplex(cos(deltaMs*t/(2*EvtConst::c)),sin( deltaMs*t/(2*EvtConst::c))) -pt*EvtComplex(cos(deltaMs*t/(2*EvtConst::c)),sin(-deltaMs*t/(2*EvtConst::c))) )/2;; if (other_b==BSB){ //These are the right equations for the transversity formalism //cGOP is de 0-component, CP-even, so lives shorter: mainly lifetime tauL //cG1P is the //-component, also CP-even, also mainly smaller exponent //cG1M is the transverse component, CP-odd, so has mainly longer lifetime tauH //Tristan cG0P = G0P*( gplus + lambda_km*gminus ); cG1P = G1P*( gplus + lambda_km*gminus ); cG1M = G1M*( gplus - lambda_km*gminus ); } else if (other_b==BS0){ //The equations for BsBar //Note the minus-sign difference //Tristan cG0P = G0P*( gplus + (1.0/lambda_km)*gminus ); cG1P = G1P*( gplus + (1.0/lambda_km)*gminus ); cG1M =-G1M*( gplus - (1.0/lambda_km)*gminus ); } else{ EvtGenReport(EVTGEN_ERROR,"EvtGen") << "other_b was not BSB or BS0!"<<std::endl; ::abort(); } EvtComplex A0,AP,AM; //Converting the transversity amplitudes //to helicity amplitudes //(to plug them into SVVHelAmp) A0=cG0P; AP=(cG1P+cG1M)/sqrt(2.0); AM=(cG1P-cG1M)/sqrt(2.0); EvtSVVHelAmp::SVVHel(p,_amp2,getDaug(0),getDaug(1),AP,A0,AM); return ; }
void EvtSLBKPoleFF::getvectorff(EvtId parent,EvtId /*daught*/, double t, double /*mass*/, double *a1f, double *a2f, double *vf, double *a0f ){ if ( numSLBKPoleargs !=8 ) {//modified EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Problem in EvtSLBKPoleFF::getvectorff\n";//modified EvtGenReport(EVTGEN_ERROR,"EvtGen") << "wrong number of arguements!!!\n"; EvtGenReport(EVTGEN_ERROR,"EvtGen") << numSLBKPoleargs<<"\n";//modified // printf("\n*********************%d*********************",numSLBKPoleargs); } EvtGenReport(EVTGEN_INFO,"EvtGen")<<"Check the implementation of EvtSLBKPoleFF::getvectorff()!\n"; double mb=EvtPDL::getMeanMass(parent); double mb2 = mb*mb; //modified-begin static EvtId B0=EvtPDL::getId("B0"); static EvtId B0B=EvtPDL::getId("anti-B0"); static EvtId BP=EvtPDL::getId("B+"); static EvtId BM=EvtPDL::getId("B-"); static EvtId BS0=EvtPDL::getId("B_s0"); static EvtId B0S=EvtPDL::getId("B*0"); static EvtId BPMS=EvtPDL::getId("B*+"); static EvtId BS0S=EvtPDL::getId("B_s*0"); static EvtId D0=EvtPDL::getId("D0"); static EvtId D0B=EvtPDL::getId("anti-D0"); static EvtId DP=EvtPDL::getId("D+"); static EvtId DM=EvtPDL::getId("D-"); static EvtId DSP=EvtPDL::getId("D_s+"); static EvtId DSM=EvtPDL::getId("D_s-"); static EvtId D0S=EvtPDL::getId("D*0"); static EvtId DPMS=EvtPDL::getId("D*+"); static EvtId DSPMS=EvtPDL::getId("D_s*+"); double mass_star=0.0; double mass_star2=0.0; if(parent==B0||parent==B0B){ mass_star=EvtPDL::getMeanMass(B0S); mass_star2=mass_star*mass_star; } if(parent==BP||parent==BM){ mass_star=EvtPDL::getMeanMass(BPMS); mass_star2=mass_star*mass_star; } if(parent==BS0){ mass_star=EvtPDL::getMeanMass(BS0S); mass_star2=mass_star*mass_star; } if(parent==D0||parent==D0B){ mass_star=EvtPDL::getMeanMass(D0S); mass_star2=mass_star*mass_star; } if(parent==DP||parent==DM){ mass_star=EvtPDL::getMeanMass(DPMS); mass_star2=mass_star*mass_star; } if(parent==DSP||parent==DSM){ mass_star=EvtPDL::getMeanMass(DSPMS); mass_star2=mass_star*mass_star; } //modified-end double f0,af,bf,powf; f0 = SLBKPoleargs[2];//A1 af = SLBKPoleargs[6];//b' bf = 0;//0 powf = 1.0;//1.0 *a1f = f0/(pow( 1.0 - af*t/mass_star2,powf));//modified f0 = SLBKPoleargs[3];//A2 af = SLBKPoleargs[6];//b' bf = SLBKPoleargs[7];//b''==0 powf = 1.0;//1.0 *a2f = f0/(pow(1.0 - (af+bf)*(t/mass_star2) + (af*bf)*((t/mass_star2)*(t/mass_star2)),powf));//modified f0 = SLBKPoleargs[0];//V0 af = SLBKPoleargs[4];//a bf = 0;//0 powf = 1.0;//1.0 *vf = f0/(pow( 1.0 - (1.0+af)*(t/mass_star2) + af*(t/mass_star2)*(t/mass_star2),powf));//modified f0 = SLBKPoleargs[1];//A0 af = SLBKPoleargs[5];//a' bf = 0;//0 powf = 1.0;//1.0 *a0f = f0/(pow( 1.0 - (1.0+af)*(t/mb2) + af*((t/mb2)*(t/mb2)),powf));//modified return; }
void EvtSemiLeptonicScalarAmp::CalcAmp( EvtParticle *parent, EvtAmp& amp, EvtSemiLeptonicFF *FormFactors ) { static EvtId EM=EvtPDL::getId("e-"); static EvtId MUM=EvtPDL::getId("mu-"); static EvtId TAUM=EvtPDL::getId("tau-"); static EvtId EP=EvtPDL::getId("e+"); static EvtId MUP=EvtPDL::getId("mu+"); static EvtId TAUP=EvtPDL::getId("tau+"); //Add the lepton and neutrino 4 momenta to find q2 EvtVector4R q = parent->getDaug(1)->getP4() + parent->getDaug(2)->getP4(); double q2 = (q.mass2()); double fpf,f0f; double mesonmass = parent->getDaug(0)->mass(); double parentmass = parent->mass(); FormFactors->getscalarff(parent->getId(), parent->getDaug(0)->getId(), q2, mesonmass, &fpf, &f0f); EvtVector4R p4b; p4b.set(parent->mass(),0.0,0.0,0.0); EvtVector4R p4meson = parent->getDaug(0)->getP4(); double mdiffoverq2; mdiffoverq2 = parentmass*parentmass - mesonmass*mesonmass; mdiffoverq2 = mdiffoverq2 / q2; EvtVector4C l1,l2; EvtId l_num = parent->getDaug(1)->getId(); EvtVector4C tds; if (l_num==EM||l_num==MUM||l_num==TAUM){ tds = EvtVector4C(fpf*(p4b+p4meson - (mdiffoverq2*(p4b-p4meson)))+ + f0f*mdiffoverq2*(p4b-p4meson)); l1=EvtLeptonVACurrent(parent->getDaug(1)->spParent(0), parent->getDaug(2)->spParentNeutrino()); l2=EvtLeptonVACurrent(parent->getDaug(1)->spParent(1), parent->getDaug(2)->spParentNeutrino()); } else{ if (l_num==EP||l_num==MUP||l_num==TAUP){ tds = EvtVector4C(fpf*(p4b+p4meson - (mdiffoverq2*(p4b-p4meson)))+ + f0f*mdiffoverq2*(p4b-p4meson)); l1=EvtLeptonVACurrent(parent->getDaug(2)->spParentNeutrino(), parent->getDaug(1)->spParent(0)); l2=EvtLeptonVACurrent(parent->getDaug(2)->spParentNeutrino(), parent->getDaug(1)->spParent(1)); } else{ EvtGenReport(EVTGEN_ERROR,"EvtGen") << "dfnb89agngri wrong lepton number\n"; } } amp.vertex(0,l1*tds); amp.vertex(1,l2*tds); }
void EvtB2MuMuMuNuAmp::CalcAmp(EvtParticle *parent, EvtAmp& amp, EvtbTosllMSFF *formFactorsms){ // Check the charge conservation in the reaction int charge[4]; charge[0] = (EvtPDL::chg3(parent->getDaug(0)->getId()))/3; charge[1] = (EvtPDL::chg3(parent->getDaug(1)->getId()))/3; charge[2] = (EvtPDL::chg3(parent->getDaug(2)->getId()))/3; charge[3] = (EvtPDL::chg3(parent->getDaug(3)->getId()))/3; if(abs(charge[0]+charge[1]+charge[2]+charge[3])!=1){ EvtGenReport(EVTGEN_ERROR,"EvtGen") << "\n\n The function EvtB2MuMuMuNuAmp::CalcAmp(...)" << "\n Error in the daughters charge definition!" << "\n charge1 = " << charge[0] << "\t KF code1 = " << EvtPDL::getLundKC(parent->getDaug(0)->getId()) << "\n charge2 = " << charge[1] << "\t KF code2 = " << EvtPDL::getLundKC(parent->getDaug(1)->getId()) << "\n charge3 = " << charge[2] << "\t KF code3 = " << EvtPDL::getLundKC(parent->getDaug(2)->getId()) << "\n charge4 = " << charge[3] << "\t KF code4 = " << EvtPDL::getLundKC(parent->getDaug(3)->getId()) << "\n number of daughters = " << parent->getNDaug() << std::endl; ::abort(); } // Daughter's positions in the matrix element int il1, il2, il3, il4; // Mu^+(k_1), Mu^-(k_2), \bar Nu_{Mu}(k_3) and Mu^-(k_4) //or Mu^-(k_1), Mu^+(k_2), Nu_{Mu}(k_3) and Mu^+(k_4) // This is the "canonical set" for current matrix element. il1 = -101; //initialization of the daughter's positions il2 = -102; il3 = -103; il4 = -104; // Daughter's positions for the decay // B^-(p) -> Mu^+(k_1) Mu^-(k_2) \bar Nu_{Mu}(k_3) Mu^-(k_4). if(charge[0]+charge[1]+charge[2]+charge[3] == -1){ int ll; int min_charge, min_charge_il; min_charge = charge[0]; min_charge_il = 0; for(ll = 1; ll < 4; ll++){ if(min_charge > charge[ll]){ min_charge = charge[ll]; min_charge_il = ll; } } il2 = min_charge_il; // this is Mu^-(k_2) if(il2 > 2){ EvtGenReport(EVTGEN_ERROR,"EvtGen") << "\n\n The function EvtB2MuMuMuNuAmp::CalcAmp(...)" << "\n Error in the particles distribution!" << "\n il2 = " << il2 << "\n min_charge = " << min_charge << "\n total charge = -1 = " << (charge[0]+charge[1]+charge[2]+charge[3]) << std::endl; ::abort(); } for(ll = il2 + 1; ll < 4; ll++){ if(charge[ll] == -1) il4 = ll; // this is Mu^-(k_4) } for(ll = 0; ll < 4; ll++){ if(charge[ll] == +1) il1 = ll; // this is Mu^+(k_1) } for(ll = 0; ll < 4; ll++){ if(charge[ll] == 0) il3 = ll; // this is \bar Nu_{Mu}(k_3) } } // Daughter's positions for the decay // B^+(p) -> Mu^-(k_1) Mu^+(k_2) Nu_{Mu}(k_3) Mu^+(k_4). if(charge[0]+charge[1]+charge[2]+charge[3] == 1){ int ll; int max_charge, max_charge_il; max_charge = charge[0]; max_charge_il = 0; for(ll = 1; ll < 4; ll++){ if(max_charge < charge[ll]){ max_charge = charge[ll]; max_charge_il = ll; } } il2 = max_charge_il; // this is Mu^+(k_2) if(il2 > 2){ EvtGenReport(EVTGEN_ERROR,"EvtGen") << "\n\n The function EvtB2MuMuMuNuAmp::CalcAmp(...)" << "\n Error in the particles distribution!" << "\n il2 = " << il2 << "\n max_charge = " << max_charge << "\n total charge = +1 = " << (charge[0]+charge[1]+charge[2]+charge[3]) << std::endl; ::abort(); } for(ll = il2 + 1; ll < 4; ll++){ if(charge[ll] == 1) il4 = ll; // this is Mu^+(k_4) } for(ll = 0; ll < 4; ll++){ if(charge[ll] == -1) il1 = ll; // this is Mu^-(k_1) } for(ll = 0; ll < 4; ll++){ if(charge[ll] == 0) il3 = ll; // this is Nu_{Mu}(k_3) } } if((il1 < 0)||(il2 < 0)|| (il3 < 0) || (il4 < 0)){ EvtGenReport(EVTGEN_ERROR,"EvtGen") << "\n\n The function EvtB2MuMuMuNuAmp::CalcAmp(...)" << "\n ilX < 0 !!!" << "\n il1 = " << il1 << "\t il2 = " << il2 << "\t il3 = " << il3 << "\t il4 = " << il4 << std::endl; ::abort(); } // Output for program work check. // Need to comment in the final version! // EvtGenReport(EVTGEN_ERROR,"EvtGen") // << "\n il1 = " << il1 // << "\t il2 = " << il2 // << "\t il3 = " << il3 // << "\t il4 = " << il4 // << std::endl; //END of the daughter's positions initialization // Kinematics initialization EvtComplex unit1(1.0,0.0); // real unit EvtComplex uniti(0.0,1.0); // imaginary unit double M1 = parent->mass(); // B-meson mass, GeV double ml = parent->getDaug(il1)->mass(); // mass of muon, GeV // Id and 4-momentums of the particles EvtId idparent = parent->getId(); // B-meson Id EvtVector4R p; // B-meson 4-momentum p.set(0.0,0.0,0.0,0.0); EvtId id_L1, id_L2, id_L3, id_L4; // leptonic Id EvtVector4R k_1; // 4-momentum of mu^+ in the B^- rest frame; (il1) EvtVector4R k_2; // 4-momentum of mu^- in the B^- rest frame; (il2) EvtVector4R k_3; // 4-momentum of \bar nu in the B^- rest frame; (il3) EvtVector4R k_4; // 4-momentum of mu^- in the B^- rest frame; (il4) k_1.set(0.0,0.0,0.0,0.0); k_2.set(0.0,0.0,0.0,0.0); k_3.set(0.0,0.0,0.0,0.0); k_4.set(0.0,0.0,0.0,0.0); EvtVector4R q_fierst; // q = k_1 + k_2 4-momentum in the B-rest frame EvtVector4R k_fierst; // k = k_3 + k_4 4-momentum in the B-rest frame double q2_fierst; // Mandelstam variable s=q^2 double k2_fierst; // Mandelstam variable t=k^2 EvtVector4R q_second; // q = k_1 + k_4 4-momentum in the B-rest frame EvtVector4R k_second; // k = k_3 + k_2 4-momentum in the B-rest frame double q2_second; // Mandelstam variable s=q^2 double k2_second; // Mandelstam variable t=k^2 p = parent->getP4Restframe(); // B-meson 4-momentum in the B-rest frame k_1 = parent->getDaug(il1)->getP4(); k_2 = parent->getDaug(il2)->getP4(); k_3 = parent->getDaug(il3)->getP4(); k_4 = parent->getDaug(il4)->getP4(); q_fierst = k_1 + k_2; k_fierst = k_3 + k_4; q2_fierst = q_fierst.mass2(); k2_fierst = k_fierst.mass2(); q_second = k_1 + k_4; k_second = k_3 + k_2; q2_second = q_second.mass2(); k2_second = k_second.mass2(); // For "B^-" - and "B^+" - mesons amplitudeы separately calculations static EvtIdSet bmesons("B-","B_c-"); static EvtIdSet bbarmesons("B+","B_c+"); // // Information for test of 4-momentum. // // Need to comment in the final version! // EvtGenReport(EVTGEN_ERROR,"EvtGen") // << "\n 4-momentum initialization test" // << "\n k_1 = " << k_1 // << "\n k_2 = " << k_2 // << "\n k_3 = " << k_3 // << "\n k_4 = " << k_4 // << "\n q_fierst = " << q_fierst // << "\n q_second = " << q_second // << "\n k_fierst = " << k_fierst // << "\n k_second = " << k_second // << std::endl; // // I. VMD Contribution // double M2[4]; //intermediate vector mesons mass for VMD contribution // M2[0] = EvtPDL::getMass(EvtPDL::getId(std::string("rho0"))); // Rho^0 // M2[1] = EvtPDL::getMass(EvtPDL::getId(std::string("omega"))); // Omega^0 // M2[2] = M2[0]; // GeV Rho^0 // M2[3] = M2[1]; // GeV Omega^0 M2[0] = 0.77526; // GeV Rho^0 M2[1] = 0.78265; // GeV Omega^0 M2[2] = M2[0]; // GeV Rho^0 M2[3] = M2[1]; // GeV Omega^0 double Width2[4]; //intermediate vector mesons width for VMD contribution // Width2[0] = EvtPDL::getWidth(EvtPDL::getId(std::string("rho0"))); // Rho^0 // Width2[1] = EvtPDL::getWidth(EvtPDL::getId(std::string("omega"))); // Omega^0 // Width2[2] = Width2[0]; // GeV Rho^0 // Width2[3] = Width2[1]; // GeV Omega^0 Width2[0] = 0.1491; // GeV Rho^0 Width2[1] = 0.00849; // GeV Omega^0 Width2[2] = Width2[0]; // GeV Rho^0 Width2[3] = Width2[1]; // GeV Omega^0 double fV2[4]; //intermediate vector mesons leptonic constant for VMD contribution // see D.Melikhov, N.Nikitin. PRD70, 114028 (2004) fV2[0] = 5.04; // GeV Rho^0 fV2[1] = 17.1; // GeV Omega^0 fV2[2] = 5.04; // GeV Rho^0 fV2[3] = 17.1; // GeV Omega^0 // For taking the form factors values // B -> V intermediate vector mesons // transition form-factors for VMD contribution // 0 -- Rho^0 for k2_fierst // 1 -- Omega^0 for k2_fierst // 2 -- Rho^0 for k2_second // 3 -- Omega^0 for k2_second double a1[4],a2[4],a3[4],a0[4],v[4],t1[4],t2[4],t3[4]; EvtId B_meson_for_FF = EvtPDL::getId(std::string("B0")); EvtId rho_meson_for_FF = EvtPDL::getId(std::string("rho0")); EvtId omega_meson_for_FF = EvtPDL::getId(std::string("omega")); formFactorsms->getVectorFF(B_meson_for_FF, rho_meson_for_FF, k2_fierst, a1[0],a2[0],a0[0],v[0],t1[0],t2[0],t3[0]); formFactorsms->getVectorFF(B_meson_for_FF, omega_meson_for_FF, k2_fierst, a1[1],a2[1],a0[1],v[1],t1[1],t2[1],t3[1]); formFactorsms->getVectorFF(B_meson_for_FF, rho_meson_for_FF, k2_second, a1[2],a2[2],a0[2],v[2],t1[2],t2[2],t3[2]); formFactorsms->getVectorFF(B_meson_for_FF, omega_meson_for_FF, k2_second, a1[3],a2[3],a0[3],v[3],t1[3],t2[3],t3[3]); int aa; for(aa = 0; aa < 4; aa++){ a3[aa] = ((M1 + M2[aa])*a1[aa] - (M1 - M2[aa])*a2[aa])/(2.0*M2[aa]); } // // Information for test of VMD contribution. // // Need to comment in the final version! // EvtGenReport(EVTGEN_ERROR,"EvtGen") // << "\n VMD Contribution test" // << "\n M(Bu) = " << M1 << " GeV;" // << "\n M(Rho) = " << M2[0] << " GeV;" // << "\t M(Omega) = " << M2[1] << " GeV;" // << "\t Gamma(Rho) = " << Width2[0] << " Gev;" // << "\t Gamma(Omega) = " << Width2[1] << " Gev." // << "\n\n a1[0] = " << a1[0] // << "\t a2[0] = " << a2[0] // << "\t a0[0] = " << a0[0] // << "\t a3[0] = " << a3[0] // << "\t v[0] = " << v[0] // << "\n\n a1[1] = " << a1[1] // << "\t a2[1] = " << a2[1] // << "\t a0[1] = " << a0[1] // << "\t a3[1] = " << a3[1] // << "\t v[1] = " << v[1] // << "\n\n a1[2] = " << a1[2] // << "\t a2[2] = " << a2[2] // << "\t a0[2] = " << a0[2] // << "\t a3[2] = " << a3[2] // << "\t v[2] = " << v[2] // << "\n\n a1[3] = " << a1[3] // << "\t a2[3] = " << a2[3] // << "\t a0[3] = " << a0[3] // << "\t a3[3] = " << a3[3] // << "\t v[3] = " << v[3] // << std::endl; // Tensor structures for VMD contribution EvtTensor4C Tvmd_fierst, Tvmd_second; // // II. Electromagnetic foton emission from B-meson contribution // (EM contribution) // // EM form factors // 0 -- u-quark emission for q2_fierst // 1 -- b-quark emission for q2_fierst // 2 -- u-quark emission for q2_second // 3 -- b-quark emission for q2_second double v_em[4]; double MBstar = 5.325; // GeV v_em[0] = 4.0*MBstar*FF_B2BstarGamma_fromU(q2_fierst)/(3.0*(M1 + MBstar)); v_em[1] = 2.0*MBstar*FF_B2BstarGamma_fromB(q2_fierst)/(3.0*(M1 + MBstar)); v_em[2] = 4.0*MBstar*FF_B2BstarGamma_fromU(q2_second)/(3.0*(M1 + MBstar)); v_em[3] = 2.0*MBstar*FF_B2BstarGamma_fromB(q2_second)/(3.0*(M1 + MBstar)); // Tensor structures for EM contribution EvtTensor4C Tem_fierst, Tem_second; // // *** // // Leptonic currents // L1 = (\bar mu \gamma^{\mu} (1 - \gamma^5) nu) // or (\bar nu \gamma^{\mu} (1 - \gamma^5) mu) // L2 = (\bar mu \gamma^{\nu} mu) EvtVector4C L1_fierst, L2_fierst; EvtVector4C L1_second, L2_second; int i1, i2, i3, i4; // leptonic spin structures counters int leptonicspin[4]; // array for the saving of the leptonic spin configuration // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // + Contribution for B- decay + // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if (bmesons.contains(idparent)){ Tvmd_fierst = 0.0*EvtTensor4C::g(); for(aa = 0; aa < 2; aa++){ EvtComplex coeff_vmd; double Re_vmd, Im_vmd, znam_vmd; Re_vmd = q2_fierst - M2[aa]*M2[aa]; Im_vmd = Width2[aa]*M2[aa]; znam_vmd = fV2[aa]*(Re_vmd*Re_vmd + Im_vmd*Im_vmd); coeff_vmd = unit1*Re_vmd/znam_vmd - uniti*Im_vmd/znam_vmd; double vaa, a2aa, a3aa; vaa = 2.0*v[aa]/(M1 + M2[aa]); a2aa = a2[aa]/(M1 + M2[aa]); a3aa = 2.0*M2[aa]*(a3[aa] - a0[aa])/k2_fierst; Tvmd_fierst = Tvmd_fierst +coeff_vmd*(0.0*EvtTensor4C::g() -(unit1*vaa*dual(EvtGenFunctions::directProd(p,q_fierst))) -uniti*a1[aa]*(M1 + M2[aa])*EvtTensor4C::g() +uniti*a2aa*EvtGenFunctions::directProd((p + q_fierst),p) +uniti*a3aa*EvtGenFunctions::directProd((p - q_fierst),p)); } Tvmd_second = 0.0*EvtTensor4C::g(); for(aa = 2; aa < 4; aa++){ EvtComplex coeff_vmd; double Re_vmd, Im_vmd, znam_vmd; Re_vmd = q2_second - M2[aa]*M2[aa]; Im_vmd = Width2[aa]*M2[aa]; znam_vmd = fV2[aa]*(Re_vmd*Re_vmd + Im_vmd*Im_vmd); coeff_vmd = unit1*Re_vmd/znam_vmd - uniti*Im_vmd/znam_vmd; double vaa, a2aa, a3aa; vaa = 2.0*v[aa]/(M1 + M2[aa]); a2aa = a2[aa]/(M1 + M2[aa]); a3aa = 2.0*M2[aa]*(a3[aa] - a0[aa])/k2_second; Tvmd_second = Tvmd_second +coeff_vmd*(0.0*EvtTensor4C::g() -unit1*vaa*dual(EvtGenFunctions::directProd(p,q_second)) -uniti*a1[aa]*(M1 + M2[aa])*EvtTensor4C::g() +uniti*a2aa*EvtGenFunctions::directProd((p + q_second),p) +uniti*a3aa*EvtGenFunctions::directProd((p - q_second),p)); } Tem_fierst = 0.0*EvtTensor4C::g(); for(aa = 0; aa < 2; aa++){ double fBstar = 0.2; // GeV double coeff; coeff = fBstar/(q2_fierst*(k2_fierst - MBstar*MBstar)); Tem_fierst = Tem_fierst - coeff*v_em[aa]*dual(EvtGenFunctions::directProd(p,k_fierst)); } Tem_second = 0.0*EvtTensor4C::g(); for(aa = 2; aa < 4; aa++){ double fBstar = 0.2; // GeV double coeff; coeff = fBstar/(q2_fierst*(k2_fierst - MBstar*MBstar)); Tem_second = Tem_second - coeff*v_em[aa]*dual(EvtGenFunctions::directProd(p,k_second)); } // Amplitude calculation for(i2=0;i2<2;i2++){ leptonicspin[0] = i2; for(i1=0;i1<2;i1++){ leptonicspin[1] = i1; for(i4=0;i4<2;i4++){ leptonicspin[2] = i4; i3 = 0; // neutrino spin structure! leptonicspin[3] = i3; //(\bar mu(k_4) \gamma^{\mu} (1 - \gamma^5) nu(- k_3)) L1_fierst = EvtLeptonVACurrent(parent->getDaug(il4)->spParent(i4), parent->getDaug(il3)->spParentNeutrino()); //(\bar mu(k_2) \gamma^{\mu} mu(- k_1)) L2_fierst = EvtLeptonVCurrent(parent->getDaug(il2)->spParent(i2), parent->getDaug(il1)->spParent(i1)); //(\bar mu(k_2) \gamma^{\mu} (1 - \gamma^5) nu(- k_3)) L1_second = EvtLeptonVACurrent(parent->getDaug(il2)->spParent(i2), parent->getDaug(il3)->spParentNeutrino()); //(\bar mu(k_4) \gamma^{\mu} mu(- k_1)) L2_second = EvtLeptonVCurrent(parent->getDaug(il4)->spParent(i4), parent->getDaug(il1)->spParent(i1)); // VMD EvtVector4C Evmd_fierst, Evmd_second; Evmd_fierst=Tvmd_fierst.cont2(L2_fierst); Evmd_second=Tvmd_second.cont2(L2_second); // EM EvtVector4C Eem_fierst, Eem_second; Eem_fierst=Tem_fierst.cont2(L1_fierst); Eem_second=Tem_second.cont2(L1_second); // Bremsstrahlung EvtComplex Ebrst_fierst, Ebrst_second; double fB = 0.20; // GeV leptonic constant of B^{\pm} mesons Ebrst_fierst = uniti*fB*L2_fierst*L1_fierst/q2_fierst; Ebrst_second = uniti*fB*L2_second*L1_second/q2_second; amp.vertex(leptonicspin, L1_fierst*Evmd_fierst + L2_fierst*Eem_fierst + Ebrst_fierst - L1_second*Evmd_second - L2_second*Eem_second - Ebrst_second); if(q2_fierst < 4.0*ml*ml) { amp.vertex(leptonicspin, unit1*0.0); } if(q2_second < 4.0*ml*ml) { amp.vertex(leptonicspin, unit1*0.0); } if(k2_fierst < ml*ml) { amp.vertex(leptonicspin, unit1*0.0); } if(k2_second < ml*ml) { amp.vertex(leptonicspin, unit1*0.0); } } // End of the operator "for(i4=0;i4<2;i4++)" } // End of the operator "for(i1=0;i1<2;i1++)" } // End of the operator "for(i2=0;i2<2;i2++)" } // End of the operator: "if (bmesons.contains(idparent))" else { // Start of the operator "else N1" // ++++++++++++++++++++++++++++++++++++++++++++++++++ // + Contribution for B+ decay + // ++++++++++++++++++++++++++++++++++++++++++++++++++ if (bbarmesons.contains(idparent)){ Tvmd_fierst = 0.0*EvtTensor4C::g(); for(aa = 0; aa < 2; aa++){ EvtComplex coeff_vmd; double Re_vmd, Im_vmd, znam_vmd; Re_vmd = q2_fierst - M2[aa]*M2[aa]; Im_vmd = Width2[aa]*M2[aa]; znam_vmd = fV2[aa]*(Re_vmd*Re_vmd + Im_vmd*Im_vmd); coeff_vmd = unit1*Re_vmd/znam_vmd - uniti*Im_vmd/znam_vmd; double vaa, a2aa, a3aa; vaa = 2.0*v[aa]/(M1 + M2[aa]); a2aa = a2[aa]/(M1 + M2[aa]); a3aa = 2.0*M2[aa]*(a3[aa] - a0[aa])/k2_fierst; Tvmd_fierst = Tvmd_fierst +coeff_vmd*(0.0*EvtTensor4C::g() +unit1*vaa*dual(EvtGenFunctions::directProd(p,q_fierst)) -uniti*a1[aa]*(M1 + M2[aa])*EvtTensor4C::g() +uniti*a2aa*EvtGenFunctions::directProd((p + q_fierst),p) +uniti*a3aa*EvtGenFunctions::directProd((p - q_fierst),p)); } Tvmd_second = 0.0*EvtTensor4C::g(); for(aa = 2; aa < 4; aa++){ EvtComplex coeff_vmd; double Re_vmd, Im_vmd, znam_vmd; Re_vmd = q2_second - M2[aa]*M2[aa]; Im_vmd = Width2[aa]*M2[aa]; znam_vmd = fV2[aa]*(Re_vmd*Re_vmd + Im_vmd*Im_vmd); coeff_vmd = unit1*Re_vmd/znam_vmd - uniti*Im_vmd/znam_vmd; double vaa, a2aa, a3aa; vaa = 2.0*v[aa]/(M1 + M2[aa]); a2aa = a2[aa]/(M1 + M2[aa]); a3aa = 2.0*M2[aa]*(a3[aa] - a0[aa])/k2_second; Tvmd_second = Tvmd_second +coeff_vmd*(0.0*EvtTensor4C::g() +unit1*vaa*dual(EvtGenFunctions::directProd(p,q_second)) -uniti*a1[aa]*(M1 + M2[aa])*EvtTensor4C::g() +uniti*a2aa*EvtGenFunctions::directProd((p + q_second),p) +uniti*a3aa*EvtGenFunctions::directProd((p - q_second),p)); } Tem_fierst = 0.0*EvtTensor4C::g(); for(aa = 0; aa < 2; aa++){ double fBstar = 0.0 - 0.2; // GeV double coeff; coeff = fBstar/(q2_fierst*(k2_fierst - MBstar*MBstar)); Tem_fierst = Tem_fierst + coeff*v_em[aa]*dual(EvtGenFunctions::directProd(p,k_fierst)); } Tem_second = 0.0*EvtTensor4C::g(); for(aa = 2; aa < 4; aa++){ double fBstar = 0.0 - 0.2; // GeV double coeff; coeff = fBstar/(q2_fierst*(k2_fierst - MBstar*MBstar)); Tem_second = Tem_second + coeff*v_em[aa]*dual(EvtGenFunctions::directProd(p,k_second)); } // Amplitude calculation for(i2=0;i2<2;i2++){ leptonicspin[0] = i2; for(i1=0;i1<2;i1++){ leptonicspin[1] = i1; for(i4=0;i4<2;i4++){ leptonicspin[2] = i4; i3 = 0; // neutrino spin structure! leptonicspin[3] = i3; //(\bar nu(k_3) \gamma^{\mu} (1 - \gamma^5) mu(- k_4)) L1_fierst = EvtLeptonVACurrent(parent->getDaug(il3)->spParentNeutrino(), parent->getDaug(il4)->spParent(i4)); //(\bar mu(k_1) \gamma^{\mu} mu(- k_2)) L2_fierst = EvtLeptonVCurrent(parent->getDaug(il1)->spParent(i1), parent->getDaug(il2)->spParent(i2)); //(\bar nu(k_3) \gamma^{\mu} (1 - \gamma^5) mu(- k_2)) L1_second = EvtLeptonVACurrent(parent->getDaug(il3)->spParentNeutrino(), parent->getDaug(il2)->spParent(i2)); //(\bar mu(k_1) \gamma^{\mu} mu(- k_4)) L2_second = EvtLeptonVCurrent(parent->getDaug(il1)->spParent(i1), parent->getDaug(il4)->spParent(i4)); // VMD EvtVector4C Evmd_fierst, Evmd_second; Evmd_fierst=Tvmd_fierst.cont2(L2_fierst); Evmd_second=Tvmd_second.cont2(L2_second); // EM EvtVector4C Eem_fierst, Eem_second; Eem_fierst=Tem_fierst.cont2(L1_fierst); Eem_second=Tem_second.cont2(L1_second); // Bremsstrahlung EvtComplex Ebrst_fierst, Ebrst_second; double fB = 0.20; // GeV leptonic constant of B^{\pm} mesons Ebrst_fierst = uniti*fB*L2_fierst*L1_fierst/q2_fierst; Ebrst_second = uniti*fB*L2_second*L1_second/q2_second; amp.vertex(leptonicspin, L1_fierst*Evmd_fierst + L2_fierst*Eem_fierst + Ebrst_fierst - L1_second*Evmd_second - L2_second*Eem_second - Ebrst_second); if(q2_fierst < 4.0*ml*ml) { amp.vertex(leptonicspin, unit1*0.0); } if(q2_second < 4.0*ml*ml) { amp.vertex(leptonicspin, unit1*0.0); } if(k2_fierst < ml*ml) { amp.vertex(leptonicspin, unit1*0.0); } if(k2_second < ml*ml) { amp.vertex(leptonicspin, unit1*0.0); } } // End of the operator "for(i4=0;i4<2;i4++)" } // End of the operator "for(i1=0;i1<2;i1++)" } // End of the operator "for(i2=0;i2<2;i2++)" } // End of the operator: "if (bbarmesons.contains(idparent))" else{ // Start of the operator "else N2" EvtGenReport(EVTGEN_ERROR,"EvtGen") << "\n\n The function EvtB2MuMuMuNuAmp::CalcAmp(...)" << "\n Wrong B-meson number" << "\n B-meson KF code = " << EvtPDL::getLundKC(parent->getId()) << std::endl; ::abort(); } // End of the operator "else N2" } // End of the operator "else N1" }
EvtComplex EvtResonance2::resAmpl() { double pi180inv = 1.0/EvtConst::radToDegrees; EvtComplex ampl; EvtVector4R p4_d3 = _p4_p-_p4_d1-_p4_d2; //get cos of the angle between the daughters from their 4-momenta //and the 4-momentum of the parent //in general, EvtDecayAngle(parent, part1+part2, part1) gives the angle //the missing particle (not listed in the arguments) makes //with part2 in the rest frame of both //listed particles (12) //angle 3 makes with 2 in rest frame of 12 (CS3) //double cos_phi_0 = EvtDecayAngle(_p4_p, _p4_d1+_p4_d2, _p4_d1); //angle 3 makes with 1 in 12 is, of course, -cos_phi_0 //first compute several quantities...follow CLEO preprint 00-23 double mAB=(_p4_d1+_p4_d2).mass(); double mBC=(_p4_d2+p4_d3).mass(); double mAC=(_p4_d1+p4_d3).mass(); double mA=_p4_d1.mass(); double mB=_p4_d2.mass(); double mD=_p4_p.mass(); double mC=p4_d3.mass(); double mR=_bwm; double gammaR=_gamma; double mdenom = _invmass_angdenom ? mAB : mR; double pAB=sqrt( (((mAB*mAB-mA*mA-mB*mB)*(mAB*mAB-mA*mA-mB*mB)/4.0) - mA*mA*mB*mB)/(mAB*mAB)); double pR=sqrt( (((mR*mR-mA*mA-mB*mB)*(mR*mR-mA*mA-mB*mB)/4.0) - mA*mA*mB*mB)/(mR*mR)); double pD= (((mD*mD-mR*mR-mC*mC)*(mD*mD-mR*mR-mC*mC)/4.0) - mR*mR*mC*mC)/(mD*mD); if ( pD>0 ) { pD=sqrt(pD); } else {pD=0;} double pDAB=sqrt( (((mD*mD-mAB*mAB-mC*mC)*(mD*mD-mAB*mAB-mC*mC)/4.0) - mAB*mAB*mC*mC)/(mD*mD)); double fR=1; double fD=1; int power=0; switch (_spin) { case 0: fR=1.0; fD=1.0; power=1; break; case 1: fR=sqrt(1.0+1.5*1.5*pR*pR)/sqrt(1.0+1.5*1.5*pAB*pAB); fD=sqrt(1.0+5.0*5.0*pD*pD)/sqrt(1.0+5.0*5.0*pDAB*pDAB); power=3; break; case 2: fR = sqrt( (9+3*pow((1.5*pR),2)+pow((1.5*pR),4))/(9+3*pow((1.5*pAB),2)+pow((1.5*pAB),4)) ); fD = sqrt( (9+3*pow((5.0*pD),2)+pow((5.0*pD),4))/(9+3*pow((5.0*pDAB),2)+pow((5.0*pDAB),4)) ); power=5; break; default: EvtGenReport(EVTGEN_INFO,"EvtGen") << "Incorrect spin in EvtResonance22.cc\n"; } double gammaAB= gammaR*pow(pAB/pR,power)*(mR/mAB)*fR*fR; switch (_spin) { case 0: ampl=_ampl*EvtComplex(cos(_theta*pi180inv),sin(_theta*pi180inv))* fR*fD/(mR*mR-mAB*mAB-EvtComplex(0.0,mR*gammaAB)); break; case 1: ampl=_ampl*EvtComplex(cos(_theta*pi180inv),sin(_theta*pi180inv))* (fR*fD*(mAC*mAC-mBC*mBC+((mD*mD-mC*mC)*(mB*mB-mA*mA)/(mdenom*mdenom)))/ (mR*mR-mAB*mAB-EvtComplex(0.0,mR*gammaAB))); break; case 2: ampl=_ampl*EvtComplex(cos(_theta*pi180inv),sin(_theta*pi180inv))* fR*fD/(mR*mR-mAB*mAB-EvtComplex(0.0,mR*gammaAB))* (pow((mBC*mBC-mAC*mAC+(mD*mD-mC*mC)*(mA*mA-mB*mB)/(mdenom*mdenom)),2)- (1.0/3.0)*(mAB*mAB-2*mD*mD-2*mC*mC+pow((mD*mD- mC*mC)/mdenom, 2))* (mAB*mAB-2*mA*mA-2*mB*mB+pow((mA*mA-mB*mB)/mdenom,2))); break; default: EvtGenReport(EVTGEN_INFO,"EvtGen") << "Incorrect spin in EvtResonance22.cc\n"; } return ampl; }