4 #include "TProfile3D.h"
21 #include <cln/float.h>
31 BGL2(
int genL=2,
int genQ=2,
int lup=0,
int qup=0,
int mssm=0):
32 planck(6.58211928e-25),
36 Mpip(
"Mpip",0.1396,
"M_{\\pi^+}",domain::real),
37 Mpi0(
"Mpi0",0.1349766,
"M_{\\pi^0}",domain::real),
38 MBp(
"MBp",5.279,
"M_{B^+}",domain::real),
39 MB0(
"MB0",5.2795,
"M_{B^0}",domain::real),
40 MBs0(
"MBs0",5.3663,
"M_{B_s^0}",domain::real),
41 MKp(
"MKp",0.493677,
"MKp",domain::real),
42 MK0(
"MK0",0.497614,
"MK0",domain::real),
43 MDp(
"MDp",1.86957,
"MDp",domain::real),
44 MD0(
"MD0",1.86480,
"MD0",domain::real),
45 MDsp(
"MDsp",1.96845,
"MDsp",domain::real),
47 Fpi(
"Fpi",0.132,
"Fpi",domain::real),
48 FB(
"FB",0.189,
"FB",domain::real),
49 FBs(
"FBs",0.225,
"FBs",domain::real),
50 FK(
"FK",0.159,
"FK",domain::real),
51 FD(
"FD",0.208,
"FD",domain::real),
52 FDs(
"FDs",0.248,
"FDs",domain::real),
55 g(sqrt(GF*8/sqrt(ex(2)))*MW),
66 mixes(tanb,cp, genL,genQ, lup, qup, mssm),
72 alpha=pow(g,2)*(1-cos2)/(4*Pi);
73 replacements.append(GF==1.166371e-5);
74 replacements.append(MZ==
M_MZ);
75 replacements.append(MW==
M_MW);
77 mixes.appendtolst(replacements);
79 replacements.append(Pi==M_PI);
80 replacements.append(sqrt(ex(2))==sqrt(2));
81 replacements.append(Pi==M_PI);
82 replacements.append(sqrt(ex(2))==sqrt(2));
87 ex vq3=dirac_slash(q3,4);
92 for(
uint k=0;k<3;k++){
93 conjtoabs.append(conjugate(mixes.V[i][j][k])==pow(abs(mixes.V[i][j][k]),2)/mixes.V[i][j][k]);
102 bosons.push_back(boson);
112 bosons.push_back(boson);
115 for(
int b=bosons.size()-1;b>=0;b--){
116 boson.
mass=bosons[b].mass;
123 boson.
C[t][i][j][h]=bosons[b].C[t][j][i][h].conjugate();
129 boson.
C[t][i][j][
hLeft]=bosons[b].C[t][j][i][
hRight].conjugate();
130 boson.
C[t][i][j][
hRight]=bosons[b].C[t][j][i][
hLeft].conjugate();
132 bosons.push_back(boson);
146 bosons.push_back(boson);
159 bosons.push_back(boson);
182 Meson Pi0d(down,down,Mpi0,Fpi);
183 Meson Pi0u(down,down,Mpi0,Fpi);
184 Meson Pip(up,down,Mpip,Fpi);
185 Meson Pim(down,up,Mpip,Fpi);
187 Meson K0(down,strange,MK0,FK);
188 Meson Kp(up,strange,MKp,FK);
190 Meson D0(charm,up,MD0,FD);
191 Meson Dp(charm,down,MDp,FD);
192 Meson Dsp(charm,strange,MDsp,FDs);
194 Meson B0(down,bottom,MB0,FB);
195 Meson Bp(up,bottom,MBp,FB);
196 Meson Bs0(strange,bottom,MBs0,FBs);
200 sb.append(pow(abs(mixes.V[0][2][2]),2)==1-pow(abs(mixes.V[0][1][2]),2)-pow(abs(mixes.V[0][0][2]),2));
201 sb.append(pow(abs(mixes.V[0][2][1]),2)==1-pow(abs(mixes.V[0][1][1]),2)-pow(abs(mixes.V[0][0][1]),2));
206 ex KKbar=ex(std::pow(fK,2))*mesonmixing(MK0,strange,down);
207 ex eK=0.94*imag_part(KKbar)/3.5e-15/sqrt(2);
208 cout<<
"KKbar "<<KKbar<<endl;
209 KKbar=expand(KKbar.subs(replacements).subs(lst(abs(wild()*pow(MR,-2))==abs(wild())*pow(MR,-2))).subs(lst(log(wild()*pow(MR,-2))==log(wild())-2*log(MR))));
210 KKbar=expand(KKbar.evalf());
211 ex aKKbar=sqrt(KKbar.real_part()*KKbar.real_part()+KKbar.imag_part()*KKbar.imag_part());
213 eK=0.94*imag_part(KKbar)/3.5e-15/sqrt(2);
214 eK=eK.subs(replacements).real_part();
215 eK=collect_common_factors(expand(eK.evalf()));
216 cout<<
"eK"<<eK<<endl;
245 double x=pow(10.0,p[0].value);
251 double z=y+p[2].value;
252 double w=z+p[3].value;
256 pp[2].value+=pp[1].value;
257 pp[3].value+=pp[2].value;
258 pp.
values=vector<double>();
259 for(
uint i=0; i<4; i++) pp.
values.push_back(pp[i].value);
261 l=lst(tanb==x,McH==y,MR==z,MI==w);
262 l.append(QCD1==inter1.Eval(y));
263 l.append(QCD2==inter2.Eval(y));
265 for(
uint i=0;i<3;i++){
266 l.append(Mu[i]==Mu_[i].Eval(log(y)));
267 l.append(Md[i]==Md_[i].Eval(log(y)));
277 ex mq1=mixes.mass(f1),mq2=mixes.mass(f2);
278 ex m2q1=mq1*mq1, m2q2=mq2*mq2;
280 for(
uint i=0;i<bosons.size();i++)
282 ex a=(bosons[i].couplingdaggerR(f2,f1)-bosons[i].couplingdaggerL(f2,f1));
283 v1=v1+pow(a/bosons[i].mass,2);
285 ex b=(bosons[i].couplingdaggerR(f2,f1)+bosons[i].couplingdaggerL(f2,f1));
286 v2=v2+pow(b/bosons[i].mass,2);
289 ex fc=mesonmass/(mixes.massnum(f1)+mixes.massnum(f2));
292 ret=2*(-v1*(1+11*fc)+v2*(1+fc))*mesonmass/96;
294 return collect_common_factors(ret.subs(conjtoabs));
298 double bsgammawidth(
double tanb_,
double McH_,
double MR_,
double MI_,
int option=0){
300 p[0].value=pow(10.0,tanb_);
306 return cal.
width(p,option);
309 double epsK(
double tanb_,
double McH_,
double MR_,
double MI_,
int option=0){
311 p[0].value=pow(10.0,tanb_);
315 p.
p=lst(tanb==p[0].value,McH==p[1].value,MR==p[2].value,MI==p[3].value);
318 return epsilonK->error(p);
322 const possymbol GF,
MZ, MW, Mh;
323 const constant
Mpip, Mpi0, MBp,MB0,MBs0, MKp,MK0,MDp,MD0,MDsp,MDs0;
324 const constant
Fpi, FB,FBs, FK,FD,FDs;
326 const possymbol
tanb, cp, McH, MR, MI, rho;
327 const realsymbol
Tparam, Sparam, QCD1, QCD2;
328 possymbol Mu[3],Md[3];
346 ROOT::Math::Interpolator Mu_[3],Md_[3];
357 int main(
int argc,
char* argv[]){
361 std::cerr<<
"Usage: "<<argv[0]<<
" inputfile gL gQ lup qup"<<std::endl;
367 cout<<
"RATIO "<<cmu*cmu<<endl;
370 int gL=atoi(argv[2]);
371 int gQ=atoi(argv[3]);
372 int lup=atoi(argv[4]);
373 int qup=atoi(argv[5]);
380 string ll[2][3]={{
"#nu_{1}",
"#nu_{2}",
"#nu_{3}"},{
"e",
"#mu",
"#tau"}};
381 string qq[2][3]={{
"u",
"c",
"t"},{
"d",
"s",
"b"}};
383 Double_t r[] = {1, 0.3};
384 Double_t g[] = {1, 0.3};
385 Double_t b[] = {1, 0.3};
386 Double_t stop[] = {0., 1.0};
387 TColor::CreateGradientColorTable(2, stop, r, g,b, 100);
392 double init1=-3, final1=3;
393 double init2=10, final2=1000;
394 double initBmumu=0, finalBmumu=3;
395 double initBsmumu=0, finalBsmumu=6;
397 double llmax=-1000,McHmax=1000,MRmax=1000,MImax=1000,tbmax=1;
399 TFile *f=
new TFile(argv[1],
"read");
400 if(!f->IsOpen()) cout<<
"NOFILE"<<endl;
403 TH2F *limits4,*Bmumu_Bsmumu,*limits_tb_MR,*limits_tb_MI;
404 TH2F *limits_MR_MI,*limits_MR_McH,*limits_MI_McH;
406 f->GetObject(
"limits4;1",limits4);
407 f->GetObject(
"Bmumu_Bsmumu;1",Bmumu_Bsmumu);
408 f->GetObject(
"limits_tb_MR;1",limits_tb_MR);
409 f->GetObject(
"limits_tb_MI;1",limits_tb_MI);
410 f->GetObject(
"limits_MR_MI;1",limits_MR_MI);
411 f->GetObject(
"limits_MR_McH;1",limits_MR_McH);
412 f->GetObject(
"limits_MI_McH;1",limits_MI_McH);
414 TVectorD* vllmax=NULL;
416 f->GetObject(
"vllmax;1",vllmax);
417 if(!vllmax) cout<<
"ERROR"<<endl;
423 cout<<llmax<<
" "<<tbmax<<
" "<<McHmax<<
" "<<MRmax<<
" "<<MImax<<
" "<<endl;
426 double sm_(m->
bsgammawidth(tbmax,McHmax,MRmax,MImax,5));
427 double charged_(m->
bsgammawidth(tbmax,McHmax,MRmax,MImax,1));
428 double neutral_(m->
bsgammawidth(tbmax,McHmax,MRmax,MImax,2));
429 double neutralR_(m->
bsgammawidth(tbmax,McHmax,MRmax,MImax,3));
430 double neutralI_(m->
bsgammawidth(tbmax,McHmax,MRmax,MImax,4));
431 double eK_(m->
epsK(tbmax,McHmax,MRmax,MImax));
433 double all_(m->
bsgammawidth(tbmax,McHmax,MRmax,MImax,0));
439 uint min1=npoints, min2=npoints, min3=npoints;
440 uint min11=npoints, min21=npoints, min31=npoints;
441 uint min12=npoints, min22=npoints, min32=npoints;
443 for(
uint i=0;i<npoints;i++)
444 for(
uint j=0;j<npoints;j++){
445 int binmax=limits4->GetBin(i+1,j+1);
446 double rest=limits4->GetBinContent(binmax);
447 if(rest>=llmax) rest=1;
448 else rest=TMath::Prob(-2*(rest-llmax),2);
449 if(rest>=0.05 && j<min1){min1=j;}
450 if(rest>=0.05 && j<min11 && j>
uint(180*npoints/990)){min11=j;}
451 if(rest>=0.05 && j<min12 && j>
uint(400*npoints/990)){min12=j;}
452 limits4->SetBinContent(i+1,j+1,rest);
454 rest=Bmumu_Bsmumu->GetBinContent(binmax);
455 if(rest>=llmax) rest=1;
456 else rest=TMath::Prob(-2*(rest-llmax),2);
461 Bmumu_Bsmumu->SetBinContent(i+1,j+1,rest);
463 rest=limits_MR_MI->GetBinContent(binmax);
464 if(rest>=llmax) rest=1;
465 else rest=TMath::Prob(-2*(rest-llmax),2);
466 limits_MR_MI->SetBinContent(i+1,j+1,rest);
468 rest=limits_MR_McH->GetBinContent(binmax);
469 if(rest>=llmax) rest=1;
470 else rest=TMath::Prob(-2*(rest-llmax),2);
471 if(rest>=0.05 && i<min2){min2=i;}
472 if(rest>=0.05 && i<min21 && j>
uint(180*npoints/990)){min21=i;}
473 if(rest>=0.05 && i<min22 && j>
uint(400*npoints/990)){min22=i;}
474 limits_MR_McH->SetBinContent(i+1,j+1,rest);
476 rest=limits_MI_McH->GetBinContent(binmax);
477 if(rest>=llmax) rest=1;
478 else rest=TMath::Prob(-2*(rest-llmax),2);
479 if(rest>=0.05 && i<min3){min3=i;}
480 if(rest>=0.05 && i<min31 && j>
uint(180*npoints/990)){min31=i;}
481 if(rest>=0.05 && i<min32 && j>
uint(400*npoints/990)){min32=i;}
482 limits_MI_McH->SetBinContent(i+1,j+1,rest);
485 rest=limits_tb_MR->GetBinContent(binmax);
486 if(rest>=llmax) rest=1;
487 else rest=TMath::Prob(-2*(rest-llmax),2);
488 limits_tb_MR->SetBinContent(i+1,j+1,rest);
490 double mmin1=init2+((min1+0.5)*(final2-init2))/npoints;
491 double mmin2=init2+((min2+0.5)*(final2-init2))/npoints;
492 double mmin3=init2+((min3+0.5)*(final2-init2))/npoints;
494 double mmin11=init2+((min11+0.5)*(final2-init2))/npoints;
495 double mmin21=init2+((min21+0.5)*(final2-init2))/npoints;
496 double mmin31=init2+((min31+0.5)*(final2-init2))/npoints;
498 double mmin12=init2+((min12+0.5)*(final2-init2))/npoints;
499 double mmin22=init2+((min22+0.5)*(final2-init2))/npoints;
500 double mmin32=init2+((min32+0.5)*(final2-init2))/npoints;
504 ofstream maxs((
string(
"maxs_")+
string(name)+
string(
".out")).c_str());
505 maxs<<mmin1<<
" "<<mmin2<<
" "<<mmin3<<endl;
506 maxs<<mmin11<<
" "<<mmin21<<
" "<<mmin31<<endl;
507 maxs<<mmin12<<
" "<<mmin22<<
" "<<mmin32<<endl;
508 maxs<<llmax<<
" "<<tbmax<<
" "<<McHmax<<
" "<<MRmax<<
" "<<MImax<<
" "<<endl;
510 maxs<<sm_<<
" "<<charged_<<
" "<<neutral_<<
" "<<neutralR_<<
" "<<neutralI_<<
" "<<all_<<endl;
520 double ma=0,me=.2, x0=1,y0=120;
521 gStyle->SetOptTitle(0);
522 gStyle->SetPaperSize(10.,10.);
523 TCanvas * c21=
new TCanvas(
"c21",
"",
int(800*(1+ma+me)),
int(600*(1+ma+me)));
524 c21->SetMargin(me,ma,me,ma);
527 limits4->SetStats(0);
528 limits4->GetXaxis()->SetTitle(
"log_{10}(tan\\beta)");
529 limits4->GetYaxis()->SetTitle(
"M_{H+} (GeV)");
531 Bmumu_Bsmumu->SetStats(0);
532 Bmumu_Bsmumu->GetXaxis()->SetTitle(
"Br(B\\to\\mu\\mu)/10^{-10}");
533 Bmumu_Bsmumu->GetYaxis()->SetTitle(
"Br(B_{s}\\to\\mu\\mu)/10^{-9}");
535 limits_MR_MI->SetStats(0);
536 limits_MR_MI->GetYaxis()->SetTitle(
"M_{I} (GeV)");
537 limits_MR_MI->GetXaxis()->SetTitle(
"M_{R} (GeV)");
540 limits_MR_McH->SetStats(0);
541 limits_MR_McH->GetYaxis()->SetTitle(
"M_{H+} (GeV)");
542 limits_MR_McH->GetXaxis()->SetTitle(
"M_{R} (GeV)");
544 limits_MI_McH->SetStats(0);
545 limits_MI_McH->GetYaxis()->SetTitle(
"M_{H+} (GeV)");
546 limits_MI_McH->GetXaxis()->SetTitle(
"M_{I} (GeV)");
548 limits_tb_MR->SetStats(0);
549 limits_tb_MR->GetXaxis()->SetTitle(
"log_{10}(tan\\beta)");
550 limits_tb_MR->GetYaxis()->SetTitle(
"M_{R} (GeV)");
554 Double_t contours[3];
562 limits4->SetContour(3, contours);
564 limits4->GetYaxis()->SetLabelSize(0.08);
565 limits4->GetYaxis()->SetTitleSize(0.08);
566 limits4->GetYaxis()->SetTitleOffset(1.2);
567 limits4->GetYaxis()->SetLimits(1,999);
572 limits4->GetXaxis()->SetLabelSize(0.08);
573 limits4->GetXaxis()->SetTitleSize(0.08);
574 limits4->GetXaxis()->SetTitleOffset(1.2);
575 limits4->GetXaxis()->SetLimits(-2.99,2.99);
581 string ss=qq[qup][gQ]+
","+ll[lup][gL];
584 limits4->Draw(
"CONT Z LIST");
588 l.DrawLatex(x0,y0,ss.c_str());
590 c21->SaveAs((
string(
"pdf_")+
string(name)+
string(
".png")).c_str());
594 Bmumu_Bsmumu->Rebin2D(2,2);
598 Bmumu_Bsmumu->GetYaxis()->SetLabelSize(0.08);
599 Bmumu_Bsmumu->GetYaxis()->SetTitleSize(0.08);
600 Bmumu_Bsmumu->GetYaxis()->SetTitleOffset(0.8);
601 Bmumu_Bsmumu->GetYaxis()->SetLimits(0.01,4.99);
605 Bmumu_Bsmumu->GetYaxis()->SetNdivisions(5, kTRUE);
606 Bmumu_Bsmumu->GetXaxis()->SetNdivisions(5, kTRUE);
608 Bmumu_Bsmumu->GetXaxis()->SetLabelSize(0.08);
609 Bmumu_Bsmumu->GetXaxis()->SetTitleSize(0.08);
610 Bmumu_Bsmumu->GetXaxis()->SetTitleOffset(1.2);
611 Bmumu_Bsmumu->GetXaxis()->SetLimits(0.01,1.99);
614 TCanvas * cB=
new TCanvas(
"cB",
"",
int(800*(1+ma+me)),
int(600*(1+ma+me)));
615 cB->SetMargin(.14,ma,me,ma);
618 Bmumu_Bsmumu->Draw(
"COLZ");
620 l.DrawLatex(1.5,1,ss.c_str());
622 cB->SaveAs((
string(
"Bmumu_Bsmumu_")+
string(name)+
string(
".png")).c_str());
626 limits_MR_MI->SetContour(3, contours);
628 limits_MR_MI->GetYaxis()->SetLabelSize(0.06);
629 limits_MR_MI->GetYaxis()->SetTitleSize(0.06);
630 limits_MR_MI->GetYaxis()->SetTitleOffset(1.1);
631 limits_MR_MI->GetYaxis()->SetLimits(1,999);
633 limits_MR_MI->GetXaxis()->SetLabelSize(0.06);
634 limits_MR_MI->GetXaxis()->SetTitleSize(0.06);
635 limits_MR_MI->GetXaxis()->SetTitleOffset(1.1);
636 limits_MR_MI->GetXaxis()->SetLimits(1,999);
638 TCanvas * c3=
new TCanvas(
"c3",
"",800,600);
639 c3->SetMargin(me,ma,me,ma);
642 limits_MR_MI->Draw(
"CONT LIST");
644 c3->SaveAs((
string(
"pdf_")+
string(name)+
string(
"_MRMI.png")).c_str());
646 limits_MR_McH->SetContour(3, contours);
648 limits_MR_McH->GetYaxis()->SetLabelSize(0.06);
649 limits_MR_McH->GetYaxis()->SetTitleSize(0.06);
650 limits_MR_McH->GetYaxis()->SetTitleOffset(1.1);
651 limits_MR_McH->GetYaxis()->SetLimits(1,999);
653 limits_MR_McH->GetXaxis()->SetLabelSize(0.06);
654 limits_MR_McH->GetXaxis()->SetTitleSize(0.06);
655 limits_MR_McH->GetXaxis()->SetTitleOffset(1.1);
656 limits_MR_McH->GetXaxis()->SetLimits(1,999);
658 TCanvas * c4=
new TCanvas(
"c4",
"",800,600);
659 limits_MR_McH->Draw(
"CONT LIST");
660 c4->SetMargin(me,ma,me,ma);
662 c4->SaveAs((
string(
"pdf_")+
string(name)+
string(
"_MRMcH.png")).c_str());
664 limits_MI_McH->SetContour(3, contours);
666 limits_MI_McH->GetYaxis()->SetLabelSize(0.06);
667 limits_MI_McH->GetYaxis()->SetTitleSize(0.06);
668 limits_MI_McH->GetYaxis()->SetTitleOffset(1.1);
669 limits_MI_McH->GetYaxis()->SetLimits(1,999);
671 limits_MI_McH->GetXaxis()->SetLabelSize(0.06);
672 limits_MI_McH->GetXaxis()->SetTitleSize(0.06);
673 limits_MI_McH->GetXaxis()->SetTitleOffset(1.1);
674 limits_MI_McH->GetXaxis()->SetLimits(1,999);
676 TCanvas * c6=
new TCanvas(
"c6",
"",800,600);
677 limits_MI_McH->Draw(
"CONT LIST");
678 c6->SetMargin(me,ma,me,ma);
680 c6->SaveAs((
string(
"pdf_")+
string(name)+
string(
"_MIMcH.png")).c_str());
682 TCanvas * c5=
new TCanvas(
"c5",
"",800,600);
683 limits_tb_MR->Draw(
"colz");
685 c5->SaveAs((
string(
"pdf_")+
string(name)+
string(
"_tbMR.png")).c_str());
calculus of the constraints coming from the b->s gamma decay
ROOT::Math::Interpolator inter2
parameters generateparameters(int max=0) const
An experimental measure which is an upper limit on a parameter with a given Confidence Level...
A second implementation of the BGL model, for testing purposes.
double width(const parameters &p, int option=0) const
ex mesonmixing(ex mesonmass, const Fermion &f1, const Fermion &f2) const
multivector< Matrix, 4 > C
class to do the calculus of a constraint based on a GiNaC symbolic expression
Abstract class for a model.
int main(int argc, char *argv[])
the main function takes the arguments inputfile gL gQ lup qup which specify the file containing the s...
BGL2(int genL=2, int genQ=2, int lup=0, int qup=0, int mssm=0)
definition of the couplings for the different BGL models
double bsgammawidth(double tanb_, double McH_, double MR_, double MI_, int option=0)
double epsK(double tanb_, double McH_, double MR_, double MI_, int option=0)
A parameter which will be fitted in the simulation.
parameters getlist(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)