50 Meson(
const Fermion& qq1,
const Fermion& qq2, ex m, ex d): q1(qq1), q2(qq2), mass(m), decay_factor(d){}
57 constexpr
double M_GF=1.166371e-5;
58 constexpr
double M_MZ=91.1876;
59 constexpr
double M_MW=80.398;
60 constexpr
double M_cos2=std::pow(M_MW/M_MZ,2);
61 constexpr
double M_Mu[3]={2.4e-3,1.29,172.9};
62 constexpr
double M_Md[3]={5.3e-3,95e-3,4.2};
63 constexpr
double M_Ml[3]={0.510998910e-3,105.6583715e-3,1776.82e-3};
65 typedef std::complex<double>
CD;
67 typedef std::array<std::array<CD,3>,3>
Matrix3c;
79 Matrixx(
double c12,
double c13,
double c23,
double s12,
double s13,
double s23, CD e13,CD e13t):
81 Vector3c({c12*c13,s12*c13,s13*e13t}),
82 Vector3c({-s12*c23-c12*s23*s13*e13,c12*c23-s12*s23*s13*e13,s23*c13}),
83 Vector3c({s12*s23-c12*c23*s13*e13,-c12*s23-s12*c23*s13*e13,c13*c23})
86 Matrixx(
double t12,
double t13,
double t23,
double d13):
93 res[i][j]=std::conj((*
this)[j][i]);
99 const Matrixx Vud(13.04*M_PI/180,0.201*M_PI/180,2.38*M_PI/180,1.2);
108 Mixes(ex tanb0,ex cp0,
int genL=2,
int genQ=2,
int lup=0,
int qup=0,
int mssm=0):M(
Matrix(),2,2),N(
Matrix(),2,2),VN(
Matrix(),2,2),N_(
Matrix(),2,2),VN_(
Matrix(),2,2),cp(cp0)
112 M[
tQuark][
iUp]=
Matrix(possymbol(
"m_u"),possymbol(
"m_c"),possymbol(
"m_t"));
114 const char * ln[3]={
"1",
"2",
"3"};
115 const char * ll[3]={
"e",
"\\mu",
"\\tau"};
116 const char * lu[3]={
"u",
"c",
"t"};
117 const char * ld[3]={
"d",
"s",
"b"};
119 V.push_back(
Matrix(
"U",ln,ll));
120 V.push_back(
Matrix(
"V",lu,ld));
127 vector< Matrix > delta;
132 delta.push_back(
Matrix(gL[0],gL[1],gL[2]));
136 delta.push_back(
Matrix(gQ[0],gQ[1],gQ[2]));
138 for(
uint i=0;i<2;i++){
145 VN_[i][1]=
Matrix(tanb)*V[i];
147 VN_[i][0]=
Matrix(1/tanb)*V[i];
155 VN_[i][1]=
Matrix(tanb)*V[i]+
Matrix(-tanb-1/tanb)*V[i]*delta[i];
164 VN_[i][1]=
Matrix(tanb)*V[i]+
Matrix(-tanb-1/tanb)*delta[i]*V[i];
169 N[i][0]=N_[i][0]*M[i][0];
170 N[i][1]=N_[i][1]*M[i][1];
171 VN[i][1]=VN_[i][1]*M[i][1];
172 VN[i][0]=M[i][0]*VN_[i][0];
174 appendtolst(replacements);
182 reps.append(M[0][1][0][0]==0.510998910e-3);
183 reps.append(M[0][1][1][1]==105.6583715e-3);
184 reps.append(M[0][1][2][2]==1776.82e-3);
186 reps.append(M[1][0][0][0]==2.4e-3);
187 reps.append(M[1][0][1][1]==1.29);
188 reps.append(M[1][0][2][2]==172.9);
190 reps.append(M[1][1][0][0]==5.3e-3);
191 reps.append(M[1][1][1][1]==95e-3);
192 reps.append(M[1][1][2][2]==4.2);
195 Vn.push_back(
Matrix(33.6*M_PI/180,9.11*M_PI/180,40.4*M_PI/180,M_PI/4).conjugate());
196 Vn.push_back(
Matrix(13.04*M_PI/180,0.201*M_PI/180,2.38*M_PI/180,1.2));
197 for(
uint i=0; i<2;i++)
198 for(
uint j=0; j<3;j++)
199 for(
uint k=0; k<3;k++)
200 reps.append(V[i][j][k]==Vn[i][j][k]);
224 calcuOblique(): c1(0.741),c2(0.671), g1(c1*0.02,0.0397), g2(c2*0.02,0.1579) {}
230 double TT=(F(y*y,z*z)-F(w*w,z*z)+F(y*y,w*w))/(16*M_PI*M_MW*M_MW*(1-M_cos2));
231 double Sparam=(std::pow(1-2*M_cos2,2)*G(y*y,y*y,M_MZ*M_MZ)+G(z*z,w*w,M_MZ*M_MZ)+2*log(z*w/y/y))/24/M_PI;
233 double T1=c1*TT-c2*Sparam;
234 double T2=c2*TT+c1*Sparam;
236 return g1.loglikelihood(T1)+g2.loglikelihood(T2);
238 double F(
double x,
double y)
const{
240 return (x+y)/2-x*y*log(x/y)/(x-y);
242 double f(
double t,
double r)
const{
244 if(r<0)
return 2*sqrt(-r)*atan(sqrt(-r)/t);
245 return sqrt(r)*log(fabs((t-sqrt(r))/(t+sqrt(r))));
250 return log(x/y)/(x-y);
252 double G(
double x,
double y,
double z)
const{
254 double r=std::pow(z,2)-2*z*(x+y)+std::pow(x-y,2);
255 return -16.0/3+5*(x+y)/z-2*std::pow((x-y)/z,2)+r/std::pow(z,3)*f(t,r)+\
256 3/z*lnxy_xy(x,y)*(std::pow(x,2)+std::pow(y,2)+(x-y)/std::pow(z,2)*(-std::pow(x,2)+std::pow(y,2)+std::pow(x-y,3)/3));
264 constexpr
double C7SM(
double x){
265 return ((1/(x-1)+3)*x*std::log(x)+(-8*x*x-5*x+7)/6)*x/4/std::pow(x-1,3);
268 constexpr
double C8SM(
double x){
269 return (-3/(x-1)*x*std::log(x)+(-x*x+5*x+2)/2)*x/4/std::pow(x-1,3);
282 constexpr
static double calN=2.567e-3;
283 constexpr
static double a=7.8221,aee=0.4384,aer=-1.6981,a77=0.8161,a7r=4.8802,a7er=-0.7827,a88=0.0197,a8r=0.5680;
284 constexpr
static double a8er=-0.0601,a87r=0.1923,a7i=0.3546,a8i=-0.0987,aei=2.4997,a87i=-0.0487,a7ei=-0.9067,a8ei=-0.0661;
288 g1(3.43e-4,sqrt(2)*0.23e-4),
295 for(
uint j=0; j<2; j++){
297 const CD epsilon=conj(
Vud[0][j])*
Vud[0][i]/conj(
Vud[2][j])/
Vud[2][i];
298 const double upsilon=norm(conj(
Vud[2][j])*
Vud[2][i]/
Vud[1][i]);
304 res[j]=a+aee*norm(epsilon)+aer*epsilon.real()+aei*epsilon.imag();
305 res[j]+=a77*(norm(R7)+norm(R7_))+a7r*R7.real()+a7i*R7.imag();
306 res[j]+=a88*(norm(R8)+norm(R8_))+a8r*R8.real()+a8i*R8.imag();
307 res[j]+=a87r*(R8*conj(R7)+R8_*conj(R7_)).real()+a7er*(R7*conj(epsilon)).real()+a8er*(R8*conj(epsilon)).real();
308 res[j]+=a87i*(R8*conj(R7)+R8_*conj(R7_)).imag()+a7ei*(R7*conj(epsilon)).imag()+a8er*(R8*conj(epsilon)).imag();
309 res[j]*=calN/100*upsilon;
312 ifstream finter(
"interpolation.dat");
314 if(!finter.is_open()){
315 cout<<
"ERROR: interpolation.dat not found"<<endl;
318 vector<double> vinter0, vinter1, vinter2;
319 while(!finter.eof()){
324 vinter0.push_back(a);
325 vinter1.push_back(b);
326 vinter2.push_back(c);
330 inter1.SetData(vinter0,vinter1);
331 inter2.SetData(vinter0,vinter2);
335 ifstream finter2(
"masses.dat");
337 if(!finter2.is_open()){
338 cout<<
"ERROR: masses.dat not found"<<endl;
341 vector<vector<double> > m_(7);
342 while(!finter2.eof()){
343 for(
uint i=0; i<7;i++) {
349 else if(i<4) a*=1e-3;
355 for(
uint i=0; i<3;i++) {
356 Md_[i].SetData(m_[0],m_[2*i+1]);
357 Mu_[i].SetData(m_[0],m_[2*i+2]);
364 ifstream finter3(
"interpolation2.dat");
366 if(!finter3.is_open()){
367 cout<<
"ERROR: interpolation2.dat not found"<<endl;
370 vector<double> vinter20, vinter21, vinter22;
371 while(!finter3.eof()){
376 vinter20.push_back(a);
377 vinter21.push_back(b);
378 vinter22.push_back(c);
382 inter3.SetData(vinter20,vinter21);
383 inter4.SetData(vinter20,vinter22);
390 for(
uint j=0;j<2;j++)
391 for(
uint k=0;k<3;k++){
398 for(
uint k=0;k<vex.size();k++){
400 l.append(vex[k].real_part());
401 l.append(vex[k].imag_part());
403 compile_ex(l, lst(mixes.
tanb), fp);
407 double tanb=p[0].value;
411 double McH=y, MR=z, MI=w;
414 if(y<mt_mt) y0=
mt_mt;
415 double QCD1[2]={inter3.Eval(y0),inter1.Eval(y)};
416 double QCD2[2]={inter4.Eval(y0),inter2.Eval(y)};
420 for(
uint i=0;i<3;i++){
421 Mu[i]=Mu_[i].Eval(log(y));
422 Md[i]=Md_[i].Eval(log(z));
425 CD CC7[2],DD7[2],CC8[2],DD8[2];
430 std::array<double,48> ret;
432 fp(&n,&(tanb),&m,&(ret[0]));
433 for(
uint j=0;j<2;j++){
434 const double mbottom=Md[i];
435 const double mstrange=Md[j];
440 for(
uint k=0;k<3;k++){
446 double mmu=std::pow(mup/McH,2);
447 double mmdR=std::pow(mdown/MR,2);
448 double mmdI=std::pow(mdown/MI,2);
454 double A0d=(A0(mmdR)+A0(mmdI));
455 double A1d=(A1(mmdR)-A1(mmdI));
457 CD f1(ret[j*12+4*k+0],ret[j*12+4*k+1]);
461 CD f2=
CD(ret[36+j*2+4*k+0],ret[36+j*2+4*k+1])*mstrange*mbottom/mup/mup;
466 CD f12(ret[24+j*2+4*k+0],ret[24+j*2+4*k+1]);
470 CD f4(ret[j*12+4*k+2],ret[j*12+4*k+3]);
477 CD f6=f4*mstrange*mbottom/mdown/mdown;
482 CC7[j]=(QCD1[j]*C7+QCD2[j]*C8)/2.0/conj(
Vud[2][j])/
Vud[2][i];
483 DD7[j]=(QCD1[j]*D7+QCD2[j]*D8)/2.0/conj(
Vud[2][j])/
Vud[2][i];
484 const double QCD3=(3*QCD2[j]/8+QCD1[j]);
485 CC8[j]=QCD3*C8/2.0/conj(
Vud[2][j])/
Vud[2][i];
486 DD8[j]=QCD3*D8/2.0/conj(
Vud[2][j])/
Vud[2][i];
487 const CD epsilon=conj(
Vud[0][j])*
Vud[0][i]/conj(
Vud[2][j])/
Vud[2][i];
488 const double upsilon=norm(conj(
Vud[2][j])*
Vud[2][i]/
Vud[1][i]);
489 const CD R7=(
C7SM_Mt+CC7[j])/C7SM_MW;
490 const CD R8=(
C8SM_Mt+
CD(0)*CC8[j])/C8SM_MW;
491 const CD R7_=(DD7[j])/C7SM_MW;
492 const CD R8_=
CD(0)*(DD8[j])/C8SM_MW;
495 res[j]=a+aee*norm(epsilon)+aer*epsilon.real()+aei*epsilon.imag();
496 res[j]+=a77*(norm(R7)+norm(R7_))+a7r*R7.real()+a7i*R7.imag();
497 res[j]+=a88*(norm(R8)+norm(R8_))+a8r*R8.real()+a8i*R8.imag();
498 res[j]+=a87r*(R8*conj(R7)+R8_*conj(R7_)).real()+a7er*(R7*conj(epsilon)).real()+a8er*(R8*conj(epsilon)).real();
499 res[j]+=a87i*(R8*conj(R7)+R8_*conj(R7_)).imag()+a7ei*(R7*conj(epsilon)).imag()+a8er*(R8*conj(epsilon)).imag();
500 res[j]*=calN/100*upsilon;
510 double r1=3.15e-4+0.00247*(norm(CC7[1])+norm(DD7[1])-0.706*CC7[1].real());
514 return g1.loglikelihood(r1)+0*g2.loglikelihood(res[0]);
518 double tanb=p[0].value;
522 double McH=y, MR=z, MI=w;
525 if(y<mt_mt) y0=
mt_mt;
526 double QCD1[2]={inter3.Eval(y0),inter1.Eval(y)};
527 double QCD2[2]={inter4.Eval(y0),inter2.Eval(y)};
531 for(
uint i=0;i<3;i++){
532 Mu[i]=Mu_[i].Eval(log(y));
533 Md[i]=Md_[i].Eval(log(z));
536 CD CC7[2],DD7[2],CC8[2],DD8[2];
541 std::array<double,24> ret;
543 fp(&n,&(tanb),&m,&(ret[0]));
544 for(
uint j=0;j<2;j++){
545 const double mbottom=Md[i];
546 const double mstrange=Md[j];
551 for(
uint k=0;k<3;k++){
557 double mmu=std::pow(mup/McH,2);
558 double mmdR=std::pow(mdown/MR,2);
559 double mmdI=std::pow(mdown/MI,2);
560 double A0u=0,A1u=0, A2u=0, A3u=0, A0d=0, A1d=0;
562 if(option==0 || option==1){
568 if(option==0 || option==2){
569 A0d=(A0(mmdR)+A0(mmdI));
570 A1d=(A1(mmdR)-A1(mmdI));
581 CD f1(ret[j*12+4*k+0],ret[j*12+4*k+1]);
585 CD f2=f1*mstrange*mbottom/mup/mup;
592 CD f4(ret[j*12+4*k+2],ret[j*12+4*k+3]);
599 CD f6=f4*mstrange*mbottom/mdown/mdown;
605 CC7[j]=(QCD1[j]*C7+QCD2[j]*C8)/2.0/conj(
Vud[2][j])/
Vud[2][i];
606 DD7[j]=(QCD1[j]*D7+QCD2[j]*D8)/2.0/conj(
Vud[2][j])/
Vud[2][i];
607 const double QCD3=(3*QCD2[j]/8+QCD1[j]);
608 CC8[j]=QCD3*C8/2.0/conj(
Vud[2][j])/
Vud[2][i];
609 DD8[j]=QCD3*D8/2.0/conj(
Vud[2][j])/
Vud[2][i];
610 const CD epsilon=conj(
Vud[0][j])*
Vud[0][i]/conj(
Vud[2][j])/
Vud[2][i];
611 const double upsilon=norm(conj(
Vud[2][j])*
Vud[2][i]/
Vud[1][i]);
612 const CD R7=(
C7SM_Mt+CC7[j])/C7SM_MW;
613 const CD R8=(
C8SM_Mt+
CD(0)*CC8[j])/C8SM_MW;
614 const CD R7_=(DD7[j])/C7SM_MW;
615 const CD R8_=
CD(0)*(DD8[j])/C8SM_MW;
618 res[j]=a+aee*norm(epsilon)+aer*epsilon.real()+aei*epsilon.imag();
619 res[j]+=a77*(norm(R7)+norm(R7_))+a7r*R7.real()+a7i*R7.imag();
620 res[j]+=a88*(norm(R8)+norm(R8_))+a8r*R8.real()+a8i*R8.imag();
621 res[j]+=a87r*(R8*conj(R7)+R8_*conj(R7_)).real()+a7er*(R7*conj(epsilon)).real()+a8er*(R8*conj(epsilon)).real();
622 res[j]+=a87i*(R8*conj(R7)+R8_*conj(R7_)).imag()+a7ei*(R7*conj(epsilon)).imag()+a8er*(R8*conj(epsilon)).imag();
623 res[j]*=calN/100*upsilon;
633 double r1=3.15e-4+0.00247*(norm(CC7[1])+norm(DD7[1])-0.706*CC7[1].real());
640 double A0(
double x)
const{
641 return x*(2+3*x-6*x*x+ x*x*x+6*x*std::log(x))/(24*std::pow(1-x,4));
644 double A1(
double x)
const{
645 return x*(-3+4*x-x*x-2*std::log(x))/(4*std::pow(1-x,3));
648 double A2(
double x)
const{
649 return x/(6*std::pow(1-x,3))*((-7+5*x+8*x*x)/6.0+x*std::log(x)/(1-x)*(-2+3*x));
652 double A3(
double x)
const{
653 return (-3+8*x-5*x*x+(6*x-4)*std::log(x))*x/(6*std::pow(1-x,3));
656 ROOT::Math::Interpolator inter1, inter2, inter3,
inter4;
657 ROOT::Math::Interpolator Mu_[3],Md_[3];
675 meson(m),ff3(f3),ff4(f4),
677 gSr(
"gSr"),gSi(
"gSi"),gPr(
"gPr"),gPi(
"gPi"),gAr(
"gAr"),gAi(
"gAi"), mixes(mix) {
682 possymbol MR(
"MR"),MI(
"MI"),McH(
"McH");
683 ex MR2=MR*MR,MI2=MI*MI,McH2=McH*McH;
685 ex cLL=Nq_*Nl_*(1/MR2-1/MI2);
686 ex cLR=Nq_*Nl*(1/MR2+1/MI2);
687 ex cRL=Nq*Nl_*(1/MR2+1/MI2);
688 ex cRR=Nq_*Nl*(1/MR2-1/MI2);
690 ex ggS=-(2*M_GF/sqrt(2)*(-cRL-cRR+cLL+cLR)/4).subs(mixes.replacements).evalf();
691 ex ggP=-(2*M_GF/sqrt(2)*(+cRL-cRR-cLL+cLR)/4).subs(mixes.replacements).evalf();
696 ggA*=M_GF*M_GF*M_MW*M_MW/M_PI/M_PI/2;
702 ex width=collect_common_factors(mesondwtest().subs(lst(gAr==ggA.real(),gAi==ggA.imag(),gSr==ggS.real_part(),gSi==ggS.imag_part(),gPr==ggP.real_part(),gPi==ggP.imag_part())).subs(mixes.replacements).evalf().real_part());
704 compile_ex(lst(width), lst(mixes.tanb,McH,MR,MI), fp);
711 fp(&n,&(p.
values[0]),&m,&ret);
713 return o->loglikelihood(ret);
720 fp(&n,&(p.
values[0]),&m,&ret);
725 double Y(
double x)
const{
726 return 1.0113*x/8/(1-x)*(4-x+3*x*log(x)/(1-x));
730 const Fermion& f1(meson.q2), f2(meson.q1);
731 ex mesonmass=meson.mass;
734 realsymbol q3(
"q3"), q4(
"q4");
735 ex s2=pow(mesonmass,2);
738 ex mq1=mixes.mass(f1),mq2=mixes.mass(f2);
739 ex mq3=mixes.mass(f3),mq4=mixes.mass(f4);
741 ex m2q1=mq1*mq1, m2q2=mq2*mq2, m2q3=mq3*mq3, m2q4=mq4*mq4;
743 sp.add(q4, q3, (s2-m2q4-m2q3)/2);
744 sp.add(q3, q3, m2q3);
745 sp.add(q4, q4, m2q4);
746 ex q10=(s2+mq1*mq1-mq2*mq2)/(2*sqrt(s2)), lq1l=sqrt(q10*q10-mq1*mq1);
747 ex q30=(s2+mq3*mq3-mq4*mq4)/(2*sqrt(s2)), lq3l=sqrt(q30*q30-mq3*mq3);
750 a=-(gSr+I*gSi)*s2/(mq1+mq2);
752 v2=v2+a.conjugate()*dirac_ONE();
753 a=-(gPr+I*gPi)*s2/(mq1+mq2);
754 v1=v1+a*dirac_gamma5();
755 v2=v2-a.conjugate()*dirac_gamma5();
756 ex sl=(dirac_slash(q3,4)+dirac_slash(q4,4));
758 v1=v1+a*sl*dirac_gamma5();
759 v2=v2+a.conjugate()*sl*dirac_gamma5();
761 ex vq3=dirac_slash(q3,4)+mq3*dirac_ONE(), vq4=dirac_slash(q4,4)-mq4*dirac_ONE();
762 ex dt=dirac_trace(vq3*v1*vq4*v2).simplify_indexed(sp);
763 ex result=expand(dt*4*lq3l/s2/Pi/32);
772 return pow(meson.decay_factor,2)*collect_common_factors(result.subs(ltest));
777 shared_ptr<observable>
o;
778 const realsymbol
gSr,gSi, gPr,gPi,gAr,gAi;
Matrix conjugate() const
computes the hermitian conjugate of the matrix
calculus of the constraints coming from the b->s gamma decay
Matrixx(const Matrix3c &a)
A base class representing an experimental measure.
double A1(double x) const
double obsvalue(const parameters &p) const
double G(double x, double y, double z) const
double A0(double x) const
calcuBmumu(const Mixes &mix, const Meson &m, const Fermion &f3, const Fermion &f4, observable *ob, const char *name)
multivector< Matrix, 2 > N_
Fermion(FType t, FIsospin i, FFlavour f=fAny, FCharge p=cParticle, FHelicity h=hAny)
multivector< Matrix, 2 > N
double operator()(const parameters &p) const
calculus of the constraints coming from the B->mu mu decay
shared_ptr< observable > o
const Matrixx conjugate() const
computes the hermitian conjugate of the Matrixx
double operator()(const parameters &p) const
multivector< Matrix, 2 > VN_
double lnxy_xy(double x, double y) const
double massnum(const Fermion &f) const
multivector< Matrix, 2 > VN
ROOT::Math::Interpolator inter4
double width(const parameters &p, int option=0) const
Meson(const Fermion &qq1, const Fermion &qq2, ex m, ex d)
std::array< CD, 3 > Vector3c
a class to represent the mixing matrices VCKM and VPMNS
Matrixx(double t12, double t13, double t23, double d13)
constexpr double C8SM(double x)
calcubtosgamma2(const Mixes &mixes)
Base class to do the calculus of a constraint to the model.
void appendtolst(lst &reps) const
double F(double x, double y) const
ex mass(const Fermion &f) const
std::array< std::array< CD, 3 >, 3 > Matrix3c
Mixes(ex tanb0, ex cp0, int genL=2, int genQ=2, int lup=0, int qup=0, int mssm=0)
calculus of the constraints coming from the oblique parameters
definition of the couplings for the different BGL models
double f(double t, double r) const
Matrixx(double c12, double c13, double c23, double s12, double s13, double s23, CD e13, CD e13t)
constructs a unitary Matrixx in the standard form
double A3(double x) const
the same as gaussobs but with a different initializer, such that the uncertainty sigma is absolute ...
multivector< Matrix, 2 > M
double operator()(const parameters &p) const
std::complex< double > CD
const Matrixx Vud(13.04 *M_PI/180, 0.201 *M_PI/180, 2.38 *M_PI/180, 1.2)
constexpr double C7SM(double x)
double A2(double x) const