Example #1
0
void Efficiency(){
  double SigSample[3][3][4] = {{{25325.2, 44262.6, 5977.5, 23677.9},    // Ds: No weights
				{24474.7, 40175.5, 5764.6, 21498.8},    // Ds: Weights All
				{23771.9, 38907.0, 5551.6, 20802.6}},   // Ds: Weight BDT 
				{{15421.6, 1607.9, 8010.9, 93.8},       // D: No weights 
				 {14487.6, 1467.8, 7561.5, 85.1},       // D: Weights All
				 {14044.5, 1421.6, 7291.6, 82.6}},      // D: Weight BDT 
			       {{1532.4, 1646.9, 727.3, 683.0},         // Dss: No weights 
				{1460.7, 1561.2, 692.9, 656.4},         // Dss: Weights All
				{1416.5, 1482.7, 663.3, 619.4}}};       // Dss: Weight BDT 

  double Dpi0Sample[3][3][4] = {{{2463.5, 1821.1, 865.8, 1010.0},       // Ds: No weights
				 {2901.4, 2041.4, 1021.1, 1125.8},      // Ds: Weights All
				 {2906.5, 2069.9, 1022.5, 1146.4}},     // Ds: Weight BDT 
				{{832.7, 201.1, 417.5, 32.4},           // D: No weights 
				 {975.0, 229.3, 488.9, 36.1},           // D: Weights All
				 {976.9, 231.6, 489.2, 36.6}},          // D: Weight BDT 
				{{3683.8, 2021.6, 2142.0, 1044.9},      // Dss: No weights 
				 {4477.4, 2328.0, 2602.9, 1204.3},      // Dss: Weights All
				 {4475.7, 2343.8, 2602.6, 1213.3}}};    // Dss: Weight BDT 

  TString Component[3] = {"D*","D","D**"}; 
  TString NameW[3] = {"No weights","Weights All","Weights BDT"}; 
  double f[3][3][4], ef[3][3][4];

  for(int comp=0; comp<3; comp++){
    cout<<endl<<endl<<"Doing component "<<Component[comp]<<endl<<"=====================";
    for(int weight=0; weight<3; weight++){
      cout<<endl<<NameW[weight]<<":\t";
      for(int chan=0; chan<4; chan++){
	f[comp][weight][chan] = SigSample[comp][weight][chan]/Dpi0Sample[comp][weight][chan];
	ef[comp][weight][chan] = sqrt(SigSample[comp][weight][chan]/pow(Dpi0Sample[comp][weight][chan],2)+
				      pow(SigSample[comp][weight][chan],2)/pow(Dpi0Sample[comp][weight][chan],3));
	cout<<RoundNumber(f[comp][weight][chan],3)<<" +- "<<RoundNumber(ef[comp][weight][chan],3)<<", ";
      }
    }
  }

  cout<<endl<<endl<<"RATIOS";
  for(int comp=0; comp<3; comp++){
    cout<<endl<<endl<<"Doing component "<<Component[comp]<<endl<<"=====================";
    for(int weight=1; weight<3; weight++){
      cout<<endl<<NameW[weight]<<":\t";
      for(int chan=0; chan<4; chan++){
	cout<<RoundNumber(f[comp][weight][chan]*100,1,f[comp][0][chan])<<" %, ";
      }
    }
  }
  cout<<endl<<endl<<"BDT Bias";
  for(int comp=0; comp<3; comp++){
    cout<<endl<<endl<<"Doing component "<<Component[comp]<<endl<<"=====================";
    for(int weight=2; weight<3; weight++){
      cout<<endl<<NameW[weight]<<":\t";
      for(int chan=0; chan<4; chan++){
	cout<<RoundNumber(f[comp][weight][chan]*100,1,f[comp][1][chan])<<" %, ";
      }
    }
  }
  cout<<endl<<endl;
}
Example #2
0
double HiggsPlot::ProbChi2(int iDecay, double tBmH, double RD[2], double RDs[2]){
  double chi2;
  double valMeas[3][2] = {{Measurement[0][0], Measurement[1][0]},
			  {MeasuredRD[0]->Eval(tBmH), MeasuredRD[2]->Eval(tBmH)},
			  {MeasuredRD[1]->Eval(tBmH), MeasuredRD[3]->Eval(tBmH)}};
  int ndof=1;
  if(iDecay<3) {
    chi2 = Chi2(RD,valMeas[iDecay]);
  } else {
    TMatrixT<double> CovM(2,2), DiffRD(1,2), MDiff(1,2); //CovM is the covariance matrix
    if(_varyRD){
      CovM(0,0) = pow(RD[1],2) +pow(valMeas[1][1],2);
      CovM(1,1) = pow(RDs[1],2)+pow(valMeas[2][1],2);
      CovM(1,0) = Measurement[3][0]*valMeas[1][1]*valMeas[2][1];
      DiffRD(0,0) = valMeas[1][0]-RD[0]; DiffRD(0,1) = valMeas[2][0]-RDs[0];
    } else {
      CovM(0,0) = pow(RD[1],2) +pow(Measurement[1][1],2);
      CovM(1,1) = pow(RDs[1],2)+pow(Measurement[2][1],2);
      CovM(1,0) = Measurement[3][0]*Measurement[1][1]*Measurement[2][1];
      DiffRD(0,0) = Measurement[1][0]-RD[0]; DiffRD(0,1) = Measurement[2][0]-RDs[0];
    }
    CovM(0,1) = CovM(1,0);
    CovM.Invert();
    MDiff.Mult(DiffRD,CovM);
    chi2 = MDiff(0,0)*DiffRD(0,0) + MDiff(0,1)*DiffRD(0,1);
    ndof++;
    if(tBmH==0 && _varyRD) 
      cout<<endl<<"SM chi2 is "<<RoundNumber(chi2,2)<<" with a p-value of "<<TMath::Prob(chi2,ndof)<<". This is "
	  <<RoundNumber(sqrt(2)*TMath::ErfInverse(1 - TMath::Prob(chi2,ndof)),2)<<" sigma away"<<endl<<endl;
  }

  return 1 - TMath::Prob(chi2,ndof);
}
Example #3
0
//**************************************************************************************
//****************************Resistance************************************************
char* ADCToResistance(uint32_t Var,char* ArrayVar)
{
	uint32_t Buffer;
	Var=(((Var*((Vcc-10)*100))/(4095*100)));
	Buffer=((Var*101)/((Vcc-10)-Var))*10;
	Buffer=RoundNumber(Buffer);
	if (Buffer<10000)
	{
		ArrayVar[0]=Buffer/10000+0x30;
		Buffer-=10000*(ArrayVar[0]-0x30);
		ArrayVar[1]=Buffer/1000+0x30;
		Buffer-=1000*(ArrayVar[1]-0x30);
		ArrayVar[2]=Buffer/100+0x30;
		Buffer-=100*(ArrayVar[2]-0x30);
		ArrayVar[3]=Buffer/10+0x30;
		Buffer-=10*(ArrayVar[3]-0x30);
		ArrayVar[4]='R';
		ArrayVar[5]=0;
	}  else
	{
		ArrayVar[0]=' ';
		ArrayVar[1]='O';
		ArrayVar[2]='L';
		ArrayVar[3]=' ';
		ArrayVar[4]='R';
		ArrayVar[5]=0;
	}
	return ArrayVar;
}
Example #4
0
void HiggsPlot::PlotBF(int iDecay, double tBmH_max, double BF_max){
  if(iDecay<0 || iDecay>2) {cout<<"iDecay must be 0, 1 or 2"<<endl; return;}
  styles style; style.setPadsStyle(-1); style.setDefaultStyle();
  int nBins = 1000;
  TString hName, epsName = "public_html/Higgs_BF_TEMP_BaBar.eps", label, Llabel, Rlabel;
  TString yTitle[] = {"BF(B#rightarrow#tau#nu) (10^{-5})", "R(D)", "R(D*)"};
  TString TagDecay[] = {"BF", "R(D)", "R(D*)"};
  TCanvas can;
  TH1F *hBF[2];
  for(int his=0; his<1; his++) {
    hName = "hBF"; hName += his;
    hBF[his] = new TH1F(hName,"",nBins,0,tBmH_max);
  }
  double tBmH, BF[2];
  for(int bin=1; bin<=nBins; bin++){
    tBmH = hBF[0]->GetBinCenter(bin);
    Compute(tBmH,BF,iDecay);
    hBF[0]->SetBinContent(bin, BF[0]);
    hBF[0]->SetBinError(bin, BF[1]);
  }
  hBF[0]->SetFillColor(2); hBF[0]->SetLineColor(2);
  hName += "1";
  hBF[1] = static_cast<TH1F*>(hBF[0]->Clone(hName));
  for(int bin=1; bin<=nBins; bin++)hBF[1]->SetBinError(bin,0);
  hBF[1]->SetFillColor(0);hBF[1]->SetLineColor(1); hBF[1]->SetLineWidth(2);

  TBox box; box.SetLineColor(4);box.SetFillColor(4);
  TLine line; line.SetLineStyle(1); line.SetLineColor(4); line.SetLineWidth(3);
  if(BF_max>0) hBF[0]->SetMaximum(BF_max);
  hBF[0]->Draw("e3");
  box.SetFillStyle(3002); 
  box.DrawBox(0,Measurement[iDecay][0]-Measurement[iDecay][1],
	      tBmH_max,Measurement[iDecay][0]+Measurement[iDecay][1]);
  line.DrawLine(0,Measurement[iDecay][0],tBmH_max,Measurement[iDecay][0]);
  hBF[0]->Draw("e3 same");
  hBF[1]->Draw("c same");

  Compute(0,BF,iDecay);
  label = "#splitline{"; label += TagDecay[iDecay]; label += "_{SM} = ";
  if(iDecay==0){
    label+="(";label+=RoundNumber(BF[0],1); label+=" #pm ";
    label+=RoundNumber(BF[1],1); label+=")#times10^{-5}}{BF_{exp} = (";
    label+=RoundNumber(Measurement[iDecay][0],1); label+=" #pm ";
    label+=RoundNumber(Measurement[iDecay][1],1); label+=")#times10^{-5}}";
    Llabel = ""; Rlabel = label;
  } else {
    label+=RoundNumber(BF[0],3); label+=" #pm ";
    label+=RoundNumber(BF[1],3); label+="}{"; label += TagDecay[iDecay]; label += "_{exp} = ";
    label+=RoundNumber(Measurement[iDecay][0],3); label+=" #pm ";
    label+=RoundNumber(Measurement[iDecay][1],3); label+="}";
    Rlabel = ""; Llabel = label;
  }
  style.setTitles(hBF[0],"tan#beta/m_{H^{+}} (GeV^{-1})",yTitle[iDecay],Llabel,Rlabel);
  epsName.ReplaceAll("TEMP",DecayName[iDecay]);
  can.SaveAs(epsName);
  for(int his=0; his<2; his++) hBF[his]->Delete();
}
Example #5
0
//*******************************Voltage************************************************
uint16_t ADCToIntVoltage(uint32_t Var,uint32_t R1,uint32_t R2)
{
	Var=(((Var*((Vcc)*100))/(4095*100)));
	Var*=((R1*1000)/R2+1000);
	Var/=1000;
	Var=RoundNumber(Var);
	return Var;
}
Example #6
0
//**************************************************************************************
//******************************Current*************************************************
uint16_t ADCToIntCurrent(uint32_t Var,uint32_t Zero)
{
	long int Buffer;
	Buffer=(Vcc*Var*1)/4095;
	Buffer=Zero*1-Buffer;
	if ((Zero==2513)&&(Buffer>600)) {Buffer=Buffer+((Buffer-600)/10);} else {Buffer=Buffer;};
	//if (Buffer<0) {Buffer=0;};
	Buffer=RoundNumber(Buffer);
	return Buffer;
}
Example #7
0
//**************************************************************************************
uint32_t ADCToIntResistance(uint32_t Var)
{
	uint32_t Buffer;
	Var=(((Var*((Vcc-10)*100))/(4095*100)));
	Buffer=((Var*101)/((Vcc-10)-Var))*10;
	if (Buffer>20000) {Buffer=0;};
	Buffer=RoundNumber(Buffer);
	Buffer/=10;
	return Buffer;
}
Example #8
0
Value TestDatetimeFunctions::evaluate(const QString& formula, Value& ex)
{
    Formula f;
    QString expr = formula;
    if ( expr[0] != '=' )
        expr.prepend( '=' );
    f.setExpression( expr );
    Value result = f.eval();

    if(result.isFloat() && ex.isInteger())
        ex = Value(ex.asFloat());
    if(result.isInteger() && ex.isFloat())
        result = Value(result.asFloat());

    return RoundNumber(result);
}
Example #9
0
//**************************************************************************************
char* ADCToCurrent(uint32_t Var,char* ArrayVar,uint32_t Zero)
{
	long int Buffer;
	Buffer=(Vcc*Var*1)/4095;
	Buffer=Zero*1-Buffer;
	if ((Zero==2513)&&(Buffer>600)) {Buffer=Buffer+((Buffer-600)/10);} else {Buffer=Buffer;};
	//if (Buffer<0) {Buffer=0;};
	Buffer=RoundNumber(Buffer);
	ArrayVar[0]=Buffer/1000+0x30;
	Buffer-=1000*(ArrayVar[0]-0x30);
	ArrayVar[1]=Buffer/100+0x30;
	Buffer-=100*(ArrayVar[1]-0x30);
	ArrayVar[2]='.';
	ArrayVar[3]=Buffer/10+0x30;
	ArrayVar[4]='A';
	ArrayVar[5]=0;
	return ArrayVar;
}
Example #10
0
char* ADCToVoltage(uint32_t Var,char* ArrayVar,uint32_t R1,uint32_t R2)
{
	Var=(((Var*((Vcc)*100))/(4095*100)));
	Var*=((R1*1000)/R2+1000);
	Var/=1000;
	Var=RoundNumber(Var);
	ArrayVar[0]=Var/10000+0x30;
	Var-=10000*(ArrayVar[0]-0x30);
	ArrayVar[1]=Var/1000+0x30;
	Var-=1000*(ArrayVar[1]-0x30);
	ArrayVar[2]='.';
	ArrayVar[3]=Var/100+0x30;
	Var-=100*(ArrayVar[3]-0x30);
	ArrayVar[4]=Var/10+0x30;
	ArrayVar[5]='V';
	ArrayVar[6]=0;
	return ArrayVar;
}
Example #11
0
void HiggsPlot::ReadRD(TString NameFile){
  fstream textFile; textFile.open(NameFile,fstream::in);
  TString dummy, Name, VarNames[]  = {"BFTauNu", "RD", "RDs", "Correl."};
  double Value, Error;

  while(textFile){
    textFile>>Name>>dummy>>Value>>dummy>>Error;
    for(int iVar=0; iVar<nVar; iVar++){
      if(Name == VarNames[iVar]) {
	Measurement[iVar][0] = Value;
	Measurement[iVar][1] = Error;
      }
    }
  }
  // Obtained with PlotEffi(2,5) from babar_code/NewPhysics/PlotRate.C
//   double dEffError[2][21] = {{0.00, 0.00, 0.00, 0.00, 0.23, 0.43, 0.68, 1.22, 1.79, 2.08, 2.16, 
// 			      2.15, 2.11, 2.06, 2.02, 1.98, 1.95, 1.92, 1.90, 1.88, 1.86}, 
// 			     {0.00, 0.00, 0.00, 0.03, 0.06, 0.10, 0.15, 0.21, 0.28, 0.37, 0.47, 
// 			      0.58, 0.70, 0.81, 0.92, 1.02, 1.11, 1.18, 1.24, 1.28, 1.31}};

  double RelError[2][21] = {{2.10, 2.10, 2.10, 2.10, 2.12, 2.17, 2.27, 2.57, 3.04, 3.31, 3.39, 
			     3.37, 3.34, 3.29, 3.25, 3.22, 3.19, 3.16, 3.14, 3.13, 3.11}, 
			    {1.36, 1.36, 1.36, 1.36, 1.36, 1.37, 1.37, 1.38, 1.40, 1.43, 1.47, 
			     1.52, 1.58, 1.65, 1.73, 1.80, 1.87, 1.93, 1.98, 2.02, 2.05}};


  int iniHig = 0, iHig = iniHig, finHig = 100, dHig = 5, bin, nFiles = (finHig-iniHig)/dHig+1;
  double higRD[4][30], List_tBmH[30], SysUncert[3][2] = {{0.096, 0.055}, {0.018, 0.012}, {0.044, 0.020}};
  for(int isDs=0; isDs<2; isDs++)
    for(int sys=0; sys<3; sys++) SysUncert[sys][isDs] *= SysUncert[sys][isDs];
  TString folder = "FitAll/fits/TextFinalIsoDataHi2x", text = ""; 
  for(int file=0; file<nFiles; file++){
    TString fileName = folder; 
    if(iHig<100) fileName += "0";
    if(iHig<10) fileName += "0";
    fileName += iHig; fileName += ".txt";
    fstream fitFile; fitFile.open(fileName,fstream::in);
    bin = 0;
    while(!text.Contains("R(D")) {
      fitFile>>text; 
      bin++;
      if(bin>1000) {cout<<"R(D) not found in "<<fileName<<endl; return;}
    }
    for(int cand=0; cand<2; cand++){
      if(cand>0) fitFile>>text;
      fitFile>>text; higRD[cand][file] = text.Atof();
      fitFile>>text; fitFile>>text; text.ReplaceAll(",",""); higRD[cand+2][file] = text.Atof();
      for(int i=0; i<12; i++) fitFile>>text; 
      // Total uncertainty = Stat + Syst* + Eff + PDFs
      double ErrSystStar2 = pow(higRD[cand][file],2)*(SysUncert[0][cand]-SysUncert[1][cand]-SysUncert[2][cand]);
      double ErrEff2 = pow(higRD[cand][file]*RelError[cand][file]/RelError[cand][0],2)*SysUncert[1][cand];
      double ErrPDFs2 = pow(higRD[cand][file]*RelError[cand][file]/RelError[cand][0],2)*SysUncert[2][cand];

//       cout<<higRD[cand][file]<<" +- "<<RoundNumber(higRD[cand+2][file],3)<<" +- "
// 	  <<RoundNumber(sqrt(ErrSystStar2),3)
// 	  <<" +- "<< RoundNumber(sqrt(ErrEff2),3)<<" +- "<< RoundNumber(sqrt(ErrPDFs2),3)
// 	  <<",\t  a "<<RoundNumber(sqrt(ErrEff2)*100,2,higRD[cand][file])<<" +- "
// 	  << RoundNumber(sqrt(ErrPDFs2)*100,2,higRD[cand][file])<<" % error"<<endl;

      higRD[cand+2][file] = sqrt(pow(higRD[cand+2][file],2) + ErrSystStar2 + ErrEff2 + ErrPDFs2); // Syst. errors added

      List_tBmH[file] = static_cast<double>(iHig)/100.;
    }
    //cout<<endl;
    iHig += dHig;
  }
  for(int isDs=0; isDs<4; isDs++){
    text = "SplineRD"; text += isDs;
    MeasuredRD[isDs] = new TSpline3(text,List_tBmH,higRD[isDs],nFiles,"ble1",0); 
  }
  
  TString fileName = "babar_code/NewPhysics/BaBar_RDx_2HDM.txt";
  fstream thdmFile; thdmFile.open(fileName,fstream::out);
  thdmFile<<endl<<"tanB/mH\t\t     R(D)\t\t     R(D*)"<<endl<<endl;

  int nPoints = 1000;
  for(int point=0; point<=nPoints; point++){
    double tBmH = point/static_cast<double>(nPoints);
    thdmFile<<RoundNumber(tBmH,3)<<"\t\t"<<RoundNumber(MeasuredRD[0]->Eval(tBmH),3)<<" +- "
	    <<RoundNumber(MeasuredRD[2]->Eval(tBmH),3)<<" \t\t"<<RoundNumber(MeasuredRD[1]->Eval(tBmH),3)<<" +- "
	    <<RoundNumber(MeasuredRD[3]->Eval(tBmH),3)<<endl;

  }
  cout<<"Written "<<fileName<<endl;


  fileName = "babar_code/NewPhysics/BaBar_RDx_2HDM_Theory.txt";
  fstream thdmFile2; thdmFile2.open(fileName,fstream::out);
  thdmFile2<<endl<<"tanB/mH\t\t     R(D)\t\t     R(D*)"<<endl<<endl;

  double BF_D[2], BF_Ds[2];
  for(int point=0; point<=nPoints; point++){
    double tBmH = point/static_cast<double>(nPoints);
    Compute(tBmH,BF_D,1); Compute(tBmH,BF_Ds,2);
    thdmFile2<<RoundNumber(tBmH,3)<<"\t\t"<<RoundNumber(BF_D[0],3)<<" +- "
	     <<RoundNumber(BF_D[1],3)<<" \t\t"<<RoundNumber(BF_Ds[0],3)<<" +- "
	     <<RoundNumber(BF_Ds[1],3)<<endl;
  }
  cout<<"Written "<<fileName<<endl;

}
Example #12
0
void HiggsPlot::PlotExclusion(int iDecay, double tBmH_max, TString Option){
  //_varyRD = 0;
  if(iDecay<0 || iDecay>3) {cout<<"iDecay must be 0, 1, 2 or 3"<<endl; return;}
  styles style; style.setPadsStyle(-1); style.setDefaultStyle();
  int nBins = 1000, nBins2D = 400;
  double LikelytBmH=-1, Pvalue, Pmin=1;
  TString hName, epsName = "public_html/Higgs_Exclusion1D_TEMP_BaBar.eps",label;
  TCanvas can("can","Exclusion 2HDM");
  TH1F h1D("h1D","",nBins,0,tBmH_max);
  h1D.GetXaxis()->SetTitle("tan#beta/m_{H^{+}} (GeV^{-1})");
  h1D.GetYaxis()->SetTitle("Exclusion probability  (%)");
  double tBmH;
  for(int bin=1; bin<=nBins; bin++){
    tBmH = h1D.GetBinCenter(bin);
    Pvalue = ProbChi2(iDecay, tBmH);
    if(Pvalue<Pmin) {LikelytBmH = tBmH; Pmin=Pvalue;}
    h1D.SetBinContent(bin, 100*Pvalue);
  }
  h1D.Draw("c");
  Pvalue = ProbChi2(iDecay, 0);
  label = "#splitline{SM excluded at "; label += RoundNumber(sqrt(2)*TMath::ErfInverse(Pvalue),1); 
  label +=" #sigma}{"; label += "Most likely tan#beta/m_{H^{+}} = "; 
  label += RoundNumber(LikelytBmH,2); label += "}";
  TLatex latex; latex.SetNDC(kTRUE); latex.SetTextAlign(31); latex.SetTextSize(style.TitleSize);
  double xLabel = 1-style.PadRightMargin-0.02; 
  if(iDecay==2) {
    xLabel = style.PadLeftMargin+0.03;
    latex.SetTextAlign(11);
  }
  latex.DrawLatex(xLabel,style.PadBottomMargin+0.1,label);

  //////////////////    Plot 2D  ///////////////////////
  int nSigmas[] = {2,3,4, 5}, Nsig=4; double dl[5];
  for(int ns=0; ns<Nsig+1; ns++) dl[ns] = IntG(0,1,-nSigmas[ns],nSigmas[ns]);
  TLine line; line.SetLineStyle(2); line.SetLineColor(1); line.SetLineWidth(1);
  line.DrawLine(0,dl[3]*100,tBmH_max,dl[3]*100);
  line.DrawLine(0,dl[0]*100,tBmH_max,dl[0]*100);

  epsName.ReplaceAll("TEMP",DecayName[iDecay]);
  can.SaveAs(epsName);

  int colors[] = {kBlue-10, kBlue-9, kBlue-7, kBlue-4, 0};
  gStyle->SetPalette(Nsig, colors);
  TH2F h2D("h2D","",nBins2D,15,1000,nBins2D,0,110);
  h2D.GetYaxis()->CenterTitle(true); h2D.GetXaxis()->CenterTitle(true);
  h2D.GetYaxis()->SetTitle("tan#beta"); h2D.GetXaxis()->SetTitle("m_{H^{+}} (GeV)");
  //  h2D.GetYaxis()->SetTitle("B"); h2D.GetXaxis()->SetTitle("M");
  for(int binH=1; binH<=nBins2D; binH++){
    for(int binB=1; binB<=nBins2D; binB++){
      tBmH = h2D.GetYaxis()->GetBinCenter(binB)/h2D.GetXaxis()->GetBinCenter(binH);
      h2D.SetCellContent(binH, binB, ProbChi2(iDecay, tBmH));
    }
  }
  h2D.SetContour(Nsig,dl);
  h2D.Draw(Option);
  TH1F *histo[5];
  double legW = 0.134, legH = 0.37;
  double legX = 1-style.PadRightMargin-0.02, legY = style.PadBottomMargin+legH+0.04;
  TLegend *leg = new TLegend(legX-legW, legY-legH, legX, legY);
  leg->SetTextSize(0.075); leg->SetFillColor(0); leg->SetTextFont(style.nFont);
  histo[4] = new TH1F("WhiteH","",10,0,10);
  histo[4]->SetLineColor(10);histo[4]->SetFillColor(10);
  leg->AddEntry(histo[4],"");
  for(int ileg=0; ileg<Nsig; ileg++) {
    TString labhisto = "histo"; labhisto += ileg+1; 
    histo[ileg] = new TH1F(labhisto,"histo",10,0,10);
    histo[ileg]->SetLineColor(colors[ileg]);histo[ileg]->SetFillColor(colors[ileg]);
    labhisto = " "; labhisto += nSigmas[ileg]; labhisto += "#sigma";
    leg->AddEntry(histo[ileg],labhisto);
  }
  leg->Draw();

  latex.SetTextSize(style.TitleSize*1.1); latex.SetTextAlign(13); 
  latex.DrawLatex(legX-legW+0.015, legY-0.02, "Excl. at");

  epsName.ReplaceAll("1D","2D");
  can.SaveAs(epsName);
  for(int his=0; his<Nsig; his++) histo[his]->Delete();
}