示例#1
0
void DrawStatBox(TObject** Histos, std::vector<char*> legend, bool Mean, double X, double Y, double W, double H)
{
   int    N             = legend.size();
   char   buffer[255];

   if(Mean)H*=3;
   for(int i=0;i<N;i++){
           TPaveText* stat = new TPaveText(X,Y-(i*H), X+W, Y-(i+1)*H, "NDC");
	   TH1* Histo = (TH1*)Histos[i];
           sprintf(buffer,"Entries : %i\n",(int)Histo->GetEntries());
           stat->AddText(buffer);

           if(Mean){
           sprintf(buffer,"Mean    : %6.2f\n",Histo->GetMean());
           stat->AddText(buffer);

           sprintf(buffer,"RMS     : %6.2f\n",Histo->GetRMS());
           stat->AddText(buffer);
           }

           stat->SetFillColor(0);
           stat->SetLineColor(Color[i]);
           stat->SetTextColor(Color[i]);
           stat->SetBorderSize(0);
           stat->SetMargin(0.05);
           stat->SetTextAlign(12);
           stat->Draw();
   }
}
示例#2
0
void banner4Plot (){
  TPaveText* pt ;
  pt = new TPaveText(.14,0.91,.25,.94,"NDC");
  pt->AddText("Preliminary");
  pt->SetFillColor(0);
  pt->SetTextSize(0.035);
  pt->SetFillStyle(0);
  pt->SetLineColor(0);
  pt->SetLineWidth(0);
  pt->SetMargin(0);
  pt->SetShadowColor(0);
  pt->Draw();
}
//*************************************************************
void arrangeCanvas(TCanvas *canv,TH1F* meanplots[100],TH1F* widthplots[100],Int_t nFiles, TString LegLabels[10], bool onlyBias){
//*************************************************************

  TPaveText *ali = new TPaveText(0.18,0.87,0.50,0.93,"NDC");  
  ali->SetFillColor(10);
  ali->SetTextColor(1);
  ali->SetTextFont(42);
  ali->SetMargin(0.);
  ali->SetLineColor(10);
  ali->SetShadowColor(10);
  // pt->SetTextAlign(11);
  TText *alitext = ali->AddText("Alignment: PCL"); //"Preliminary 2015 - 0T collision data");
  alitext->SetTextSize(0.04);

  TLegend *lego = new TLegend(0.18,0.80,0.78,0.92);
  lego-> SetNColumns(2);
  //TLegend *lego = new TLegend(0.18,0.77,0.50,0.86);
  lego->SetFillColor(10);
  lego->SetTextSize(0.04);
  lego->SetTextFont(42);
  lego->SetFillColor(10);
  lego->SetLineColor(10);
  lego->SetShadowColor(10);

  TPaveText *pt  = NULL;
  TPaveText *pt2 = NULL;
  TPaveText *pt3 = NULL;

  if(!onlyBias){ 
    pt =new TPaveText(0.179,0.955,0.260,0.985,"NDC");
  } else {
    pt =new TPaveText(0.179,0.955,0.260,0.985,"NDC");
  }

  pt->SetFillColor(10);
  pt->SetTextColor(1);
  pt->SetTextFont(61);
  // pt->SetTextAlign(11);
  TText *text1 = pt->AddText("CMS"); //"Preliminary 2015 - 0T collision data");
  text1->SetTextSize(0.05);
 
  float extraOverCmsTextSize  = 0.76;

  if(!onlyBias){ 
    pt2 =new TPaveText(0.3,0.95,0.503,0.98,"NDC");
  } else {
    pt2 =new TPaveText(0.3,0.95,0.503,0.98,"NDC");
  }

  pt2->SetFillColor(10);
  pt2->SetTextColor(1);
  pt2->SetTextFont(52);
  pt2->SetTextAlign(22);
  TText *text2 = pt2->AddText("work in progress");
  text2->SetTextSize(0.05*extraOverCmsTextSize);

  if(!onlyBias){ 
    pt3 =new TPaveText(0.6,0.95,0.98,0.98,"NDC");
  } else {
    pt3 =new TPaveText(0.6,0.95,0.98,0.98,"NDC");
  }

  pt3->SetFillColor(10);
  pt3->SetTextColor(1);
  pt3->SetTextFont(42);
  // pt2->SetTextAlign(11);
  TText *text3 = pt3->AddText("3.8T collision data 2015");
  text3->SetTextSize(0.05*extraOverCmsTextSize);

  canv->SetFillColor(10);  
  if(!onlyBias) {
    canv->Divide(2,1);
    
    canv->cd(1)->SetBottomMargin(0.12);
    canv->cd(1)->SetLeftMargin(0.17);
    canv->cd(1)->SetRightMargin(0.02);
    canv->cd(1)->SetTopMargin(0.06);  
    
    canv->cd(2)->SetBottomMargin(0.12);
    canv->cd(2)->SetLeftMargin(0.17);
    canv->cd(2)->SetRightMargin(0.02);
    canv->cd(2)->SetTopMargin(0.06);  
  
    canv->cd(1);
  } else {
    
    canv->cd()->SetBottomMargin(0.14);
    canv->cd()->SetLeftMargin(0.17);
    canv->cd()->SetRightMargin(0.02);
    canv->cd()->SetTopMargin(0.06);  
    canv->cd();

  }

  Double_t absmin(999.);
  Double_t absmax(-999.);

  for(Int_t i=0; i<nFiles; i++){
    if(meanplots[i]->GetMaximum()>absmax) absmax = meanplots[i]->GetMaximum();
    if(meanplots[i]->GetMinimum()<absmin) absmin = meanplots[i]->GetMinimum();
  }

  Double_t safeDelta=(absmax-absmin)/2.;
  Double_t theExtreme=std::max(absmax,TMath::Abs(absmin));

  for(Int_t i=0; i<nFiles; i++){

    TString myTitle = meanplots[i]->GetName();
    float axmin = -999;
    float axmax = 999.;
    int ndiv = 510;
    if(myTitle.Contains("eta")){
      axmin = -2.5;
      axmax = 2.5;
      ndiv = 505;
    } else if (myTitle.Contains("phi")){
      axmin = -TMath::Pi();
      axmax = TMath::Pi();
      ndiv = 510;
    } else  {
      std::cout<<"unrecongnized variable";
    }

    meanplots[i]->GetXaxis()->SetLabelOffset(999);
    meanplots[i]->GetXaxis()->SetTickLength(0);
    
    // Redraw the new axis 
    gPad->Update();
    TGaxis *newaxis =  new TGaxis(gPad->GetUxmin(),gPad->GetUymin(),
				  gPad->GetUxmax(),gPad->GetUymin(),
				  axmin,
				  axmax,
				  //meanplots[i]->GetXaxis()->GetXmin(),
				  //meanplots[i]->GetXaxis()->GetXmax(),
				  ndiv,"SDH");
    
    
    TGaxis *newaxisup =  new TGaxis(gPad->GetUxmin(),gPad->GetUymax(),
				    gPad->GetUxmax(),gPad->GetUymax(),
				    axmin,
				    axmax,
				    //meanplots[i]->GetXaxis()->GetXmin(),                                                                                                     
				    //meanplots[i]->GetXaxis()->GetXmax(),                                                                                                     
				    ndiv,"-SDH");
    
    newaxis->SetLabelOffset(0.02);
    newaxis->SetLabelFont(42);
    newaxis->SetLabelSize(.05);
    newaxis->Draw();

    newaxisup->SetLabelOffset(-0.02);
    newaxisup->SetLabelFont(42);
    newaxisup->SetLabelSize(0);
    newaxisup->Draw();
    
    if(i==0){
      //meanplots[i]->GetYaxis()->SetRangeUser(absmin-safeDelta/2.,absmax+safeDelta);
      std::cout<<"name is: "<< meanplots[i]->GetName() << " absmin:" <<absmin<<" absmax: "<<absmax<<" safeDelta: "<<safeDelta<<std::endl;
      TString theTitle = meanplots[i]->GetName();
      if( theTitle.Contains("Norm")){
	meanplots[i]->GetYaxis()->SetRangeUser(std::min(-0.48,absmin-safeDelta),std::max(0.48,absmax+safeDelta));
      } else {
	if(!onlyBias){
	  meanplots[i]->GetYaxis()->SetRangeUser(absmin-safeDelta,absmax+safeDelta);
	} else {
	  meanplots[i]->GetYaxis()->SetRangeUser(-theExtreme-(TMath::Abs(absmin)/10.),theExtreme+(TMath::Abs(absmax/10.)));
	}
	//meanplots[i]->GetYaxis()->SetRangeUser(-theExtreme,theExtreme);
      } 
      meanplots[i]->Draw("e1");

      if(onlyBias){
	Int_t nbins =  meanplots[i]->GetNbinsX();
	Double_t lowedge  = meanplots[i]->GetBinLowEdge(1);
	Double_t highedge = meanplots[i]->GetBinLowEdge(nbins+1);
	
	TH1F* hzero = DrawZero(meanplots[i],nbins,lowedge,highedge);
	hzero->Draw("PLsame");
      }

    }
    else meanplots[i]->Draw("e1sames");
    lego->AddEntry(meanplots[i],LegLabels[i]); 
  }  
  

  //ali->Draw();
  lego->Draw();
  pt->Draw("same");
  pt2->Draw("same");
  pt3->Draw("same");


  if(!onlyBias){

    canv->cd(2);
    Double_t absmax2(-999.);
    
    for(Int_t i=0; i<nFiles; i++){
      if(widthplots[i]->GetMaximum()>absmax2) absmax2 = widthplots[i]->GetMaximum();
    }
    
    Double_t safeDelta2=absmax2/3.;
    
    for(Int_t i=0; i<nFiles; i++){

      TString myTitle = widthplots[i]->GetName();
      float axmin = -999;
      float axmax = 999.;
      int ndiv = 510;
      if(myTitle.Contains("eta")){
	axmin = -2.5;
	axmax = 2.5;
	ndiv = 505;
      } else if (myTitle.Contains("phi")){
	axmin = -TMath::Pi();
	axmax = TMath::Pi();
	ndiv = 510;
      } else  {
	std::cout<<"unrecongnized variable";
      }
      
      widthplots[i]->GetXaxis()->SetLabelOffset(999);
      widthplots[i]->GetXaxis()->SetTickLength(0);
      
      // Redraw the new axis 
      gPad->Update();
      TGaxis *newaxis2 = new TGaxis(gPad->GetUxmin(),gPad->GetUymin(),
				    gPad->GetUxmax(),gPad->GetUymin(),
				    axmin,
				    axmax,
				    //widthplots[i]->GetXaxis()->GetXmin(),
				    //widthplots[i]->GetXaxis()->GetXmax(),
				    ndiv,"SDH");
      
      newaxis2->SetLabelOffset(0.02);
      newaxis2->SetLabelFont(42);
      newaxis2->SetLabelSize(.05);
      newaxis2->Draw();

      TGaxis *newaxis2up = new TGaxis(gPad->GetUxmin(),gPad->GetUymax(),
				      gPad->GetUxmax(),gPad->GetUymax(),
				      axmin,
				      axmax,
				      //widthplots[i]->GetXaxis()->GetXmin(),
				      //widthplots[i]->GetXaxis()->GetXmax(),
				      ndiv,"-SDH");
      
      newaxis2up->SetLabelOffset(-0.02);
      newaxis2up->SetLabelFont(42);
      newaxis2up->SetLabelSize(0.);
      newaxis2up->Draw();

      if(i==0) widthplots[i]->Draw("e1");
      else widthplots[i]->Draw("e1sames");
      widthplots[i]->SetMinimum(0.5);
      widthplots[i]->SetMaximum(absmax2+safeDelta2);
    }
    
    lego->Draw();
    pt->Draw("same");
    pt2->Draw("same");
    pt3->Draw("same");

  }
}
示例#4
0
int stack_upgrade_42X() {

	//gROOT->ProcessLine(".L ./tdrstyle.C");
	//setTDRStyle();
  gStyle->SetPadColor(0);
  gStyle->SetCanvasColor(0);
  gStyle->SetCanvasBorderMode(0);
  gStyle->SetCanvasColor(0);
  gStyle->SetPadBorderMode(0);
  gStyle->SetStatColor(0);
  gStyle->SetOptStat(0000000);
  gStyle->SetOptFit(0111);
  gStyle->SetOptTitle(0);
  gStyle->SetTitleStyle(0);
  gStyle->SetTitleFillColor(0);
  gStyle->SetPalette(1);


  const int nFiles = 7;

  //Int_t r = 4;
  //DoubleEle + WZ
  //TString fileNames[nFiles] = {"DoubleEle","TT_42X_TruePU","WZ_42X_TruePU","ZZ_42X_TruePU","DY_42X_TruePU","Htt120_42X_TruePU","Hww120_42X_TruePU"};
  //DoubleEle + WZjets 
  TString fileNames[nFiles] = {"DoubleMu","ZZ_42X_TruePU","WZJets_42X_TruePU","TT_42X_TruePU","DY_42X_TruePU","Htt120_42X_TruePU","Hww120_42X_TruePU"};
  //DoubleMu + WZ 
  //TString fileNames[nFiles] = {"DoubleMu","TT_42X_TruePU","WZ_42X_TruePU","ZZ_42X_TruePU","DY_42X_TruePU","Htt120_42X_TruePU","Hww120_42X_TruePU"};
  //DoubleMu + WZjets 
  //TString fileNames[nFiles] = {"DoubleMu","TT_42X_TruePU","WZjets_42X_TruePU","ZZ_42X_TruePU","DY_42X_TruePU","Htt120_42X_TruePU","Hww120_42X_TruePU"};

  //DoubleEle + WZ
  //Double_t weights[nFiles] = {1.00, 0.01054, 0.0392, 0.00047967, 0.44927,0.0009171,0.000136};
  //DoubleEle + WZjets 
  //Double_t weights[nFiles] = {1.00, 0.0004796752, 0.00351, 0.010544, 0.449278,0.00091718,0.000136};
 //DoubleMu + WZ 
  //Double_t weights[nFiles] = {1.00, 0.01054, 0.0392, 0.00047967, 0.44927,0.0009171,0.000136};
  //DoubleMu + WZjets 
  //Double_t weights[nFiles] = {1.00, 0.01054, 0.003525, 0.00047967, 0.44927,0.0009171,0.000136};
  
  TFile * f[nFiles];  	
  std::stringstream indexes;  

  for(int iFile = 0; iFile < nFiles; iFile++)

  {
	  indexes.str("");
	  indexes << fileNames[iFile];
	  std::string input_file="NewCuts/forPlot/"+indexes.str()+".root";

	  f[iFile] = TFile::Open(input_file.c_str());

	  if(!f[iFile]) {
		  std::cerr << "Error: file " << input_file << " could not be opened." << std::endl; 
		  return 1;
	  }
	  else std::cout << "File " << input_file << " succesfully opened!" << std::endl;
  }



  const int nHist1 = 5;
  //const int nHist1 = 44;


TString histNames1[nHist1] = {"h_Zmass_mumu","h_H_mass_type_1","h_H_mass_type_2","h_H_mass_type_3","h_H_mass_type_4"};
  TString histTitles[nHist1] = {"M_{2#mu}[GeV]","M_{#mu#tau}[GeV]","M_{#mue}[GeV]","M_{e#tau}[GeV]","M_{#tau#tau}[GeV]"};
  TString PaveText[nHist1]	= {"Z#mu#mu","MMMT","MMME","MMET","MMTT"};
  //~ 
  //~ TString histNames1[nHist1] = {"h_Zmass","h_Zpt","h_Z_eta","h_PF_MET_selected","h_Tmass","h_nbjets","h_nbjetsVetoed","h_nbjets_afterVeto","h_cut_flow_weight"};//,"h_H_mass_type_5","h_H_mass_type_6","h_H_mass_type_7","h_H_mass_type_8"};
  //~ TString histTitles[nHist1] = {"M_{Z}[GeV]","Z p_{T} [GeV]","Z #eta", "PF MET [GeV]", "M_{T} [GeV]", "# b-jets", "# of b-jets causing veto", "# b-jets after the veto", "Cut flow" };//,"M_{#mu#tau}[GeV]","M_{#mue}[GeV]","M_{e#tau}[GeV]","M_{#tau#tau}[GeV]"};
  //~ TString PaveText[nHist1]	= {"Z all","Z all","Z all","All","All","All","All","All", "All" };//,"EEMT","EEME","EEET","EETT"};
  
  //TString histNames1[nHist1] = {"h_mu1Z_pt", "h_mu2Z_pt", "h_Z_lep1_eta", "h_Z_lep2_eta", "h_Z_lep1_phi", "h_Z_lep2_phi", "h_Zmass_mumu", "h_Zmass_ee","h_Zpt_mumu", "h_Zpt_ee","h_Zmass", "h_Zpt","h_H_mass", "h_H_pt","h_H_eta", "h_H_phi", "h_H_mass_type_1", "h_H_mass_type_2", "h_H_mass_type_3", "h_H_mass_type_4", "h_H_mass_type_5", "h_H_mass_type_6", "h_H_mass_type_7", "h_H_mass_type_8", "h_Tmass","h_H_lep1_eta","h_H_lep2_eta","h_H_lep1_phi","h_H_lep2_phi","h_nbjets","h_nbjets_afterVeto","h_nbjetsVetoed","h_nPU_Info","h_nPU_InfoTrue","h_nPU_Bunch0","h_nPU_Info_W","h_nPU_InfoTrue_W","h_nPU_Bunch0_W","h_Nvertex_NoCut","h_Nvertex_NoCut_W","h_Nvertex_AfterZ","h_Nvertex_AfterZ_W","h_Nvertex_AfterZH","h_Nvertex_AfterZH_W"};

  TH1F * 		h_1d[nHist1][nFiles];
  TH1F *                signal[nHist1];
  
  Double_t weights[nFiles];
  Double_t xsection[nFiles]={1.0, 0.106, 0.868, 17.32, 3048, 0.0184915, 0.0039508088};
  
  
  
  const double total_lumi = 4934.0; //1294.0 +2741.0; // pb-1
  
  for(int iFile = 0; iFile < nFiles; iFile++)
	{
		TH1D * h_pu = (TH1D*)f[iFile]->Get("h_nPU_raw");		
		std::cout << h_pu->Integral() << std::endl;
		double lumi = h_pu->Integral()/xsection[iFile];
		if(iFile > 0) weights[iFile]=total_lumi/lumi;
		else weights[iFile] = 1.0;
		std::cout << weights[iFile] << std::endl;
	}

  for(int iFile = 0; iFile < nFiles; iFile++)
  {
	  for(int iHist = 0; iHist < nHist1; iHist++)
	  {
		  h_1d[iHist][iFile] = (TH1F*)f[iFile]->Get(histNames1[iHist]);
		  h_1d[iHist][iFile]->Scale(weights[iFile]); 
		 if(iHist > 0) h_1d[iHist][iFile]->Rebin(10);
	  }
  }
  
    int ZZ_Color = TColor::GetColor("#99ff99");
    int WZ_Color = TColor::GetColor("#660099");
    int TTbar_Color = TColor::GetColor("#cc66cc");
    int Zjet_Color = TColor::GetColor("#32c3ff");

  TCanvas *c1 = new TCanvas("c1","",5,30,650,600);
  //gPad->SetLogy(); 
  c1->SetGrid(0,0);
  c1->SetFillStyle(4000);
  c1->SetFillColor(10);
  c1->SetTicky();
  c1->SetObjectStat(0);

  for(int iHist = 0; iHist < nHist1; iHist++){
	  signal[iHist] = (TH1F*)h_1d[iHist][5]->Clone();}

  for(int iHist = 0; iHist < nHist1; iHist++)

  {
	  THStack *hs = new THStack("hs","Stacked MC histograms");


	  for(int iFile=1; iFile < nFiles-1; iFile++)

	  {

		  h_1d[iHist][iFile]->SetLineWidth(0);
		  h_1d[iHist][iFile]->SetFillStyle(3244);

		  if(iFile == 1){ h_1d[iHist][iFile]->SetFillColor(ZZ_Color);  }
		  else if(iFile == 2){  h_1d[iHist][iFile]->SetFillColor(WZ_Color); }
		  else if(iFile == 3){  h_1d[iHist][iFile]->SetFillColor(TTbar_Color); }
		  else if(iFile == 4){  h_1d[iHist][iFile]->SetFillColor(Zjet_Color); }
		  else if(iFile == 5){
			  signal[iHist]->Add(h_1d[iHist][iFile+1]);
                          signal[iHist]->SetLineColor(kRed); 
                          signal[iHist]->SetLineWidth(2.0); 
                          
                   }

		  if(iFile < 5) hs->Add(h_1d[iHist][iFile],"hist");		

	  }

		  //hs->Add(signal[iHist],"hist");		
	  
	  h_1d[iHist][0]->SetMarkerStyle(21);
	  h_1d[iHist][0]->SetMarkerSize(0.7);

 TLegend* leg = new TLegend(0.65,0.70,0.88,0.88,NULL,"brNDC");
 leg->SetFillColor(0);
 leg->SetTextSize(0.035);
 leg->SetBorderSize(0);
			
	  leg->AddEntry(h_1d[iHist][0],"data 2011","p");
	  leg->AddEntry(h_1d[iHist][1],"ZZ","f");
	  leg->AddEntry(h_1d[iHist][2],"WZ","f");
	  leg->AddEntry(h_1d[iHist][3],"t#bar{t}","f");
	  leg->AddEntry(h_1d[iHist][4],"Zjet","f");
	  leg->AddEntry(signal[iHist],"ZH(120)#times 5","f");

TString lumist="4.9 fb^{-1}";
  TPaveText *ll = new TPaveText(0.25, 0.95, 0.95, 0.99, "NDC");
  ll->SetTextSize(0.03);
  ll->SetTextFont(62);
  ll->SetFillColor(0);
  ll->SetBorderSize(0);
  ll->SetMargin(0.01);
  ll->SetTextAlign(12); // align left
  TString text = PaveText[iHist];
  ll->AddText(0.01,0.5,text);
  text = "#sqrt{s} = 7 TeV  L = ";
  text = text + lumist;
  //  ll->SetTextAlign(32); // align right
  ll->AddText(0.5, 0.5, text);
   
	  /*double max_dy = h_1d[iHist][4]->GetMaximum();
	  double max_data = h_1d[iHist][0]->GetMaximum();
	  double max = 0;

	  if (max_dy > max_data){
		  max = max_dy;}
	  else {
		  max = max_data;}
	  if (max != 0) hs->SetMaximum(max);

          cout << "max data: " << max_data << endl;
          cout << "max dy: " << max_dy << endl;
	  */

	  h_1d[iHist][0]->Draw("PE01");
	  double max = h_1d[iHist][0]->GetMaximum();
	  h_1d[iHist][0]->GetYaxis()->SetRangeUser(1e-2,200*max);
	// if(iHist > 0 && iHist < 4)  h_1d[iHist][0]->GetXaxis()->SetRangeUser(0,150);
	 
	  h_1d[iHist][0]->GetXaxis()->SetTitle(histTitles[iHist]);
	  hs->Draw("same");
	  signal[iHist]->Scale(10.);
	  signal[iHist]->Draw("histsame");
      h_1d[iHist][0]->Draw("samePE01");
      
	  
	  leg->Draw("same");
	  ll->Draw("same");
	  gPad->RedrawAxis();

	  c1->SetLogy();	
	  c1->Print("NewCuts/Mu_"+histNames1[iHist]+"_all.png");
	  c1->Print("NewCuts/Mu_"+histNames1[iHist]+"_all.eps");
	  c1->SetLogy(0);
	  h_1d[iHist][0]->GetYaxis()->SetRangeUser(0,1.5*max);
	
	  c1->Print("NewCuts/Mu_"+histNames1[iHist]+"_all_normal.png");
	  c1->Print("NewCuts/Mu_"+histNames1[iHist]+"_all_normal.eps");
	  	
	  

	  leg->Clear();
	  hs->Clear();    

  }

  return 0;

}
int stack_upgrade() {

	//gROOT->ProcessLine(".L ./tdrstyle.C");
	//setTDRStyle();
  gStyle->SetPadColor(0);
  gStyle->SetCanvasColor(0);
  gStyle->SetCanvasBorderMode(0);
  gStyle->SetCanvasColor(0);
  gStyle->SetPadBorderMode(0);
  gStyle->SetStatColor(0);
  gStyle->SetOptStat(0000000);
  gStyle->SetOptFit(0111);
  gStyle->SetOptTitle(0);
  gStyle->SetTitleStyle(0);
  gStyle->SetTitleFillColor(0);
  gStyle->SetPalette(1);

  
  std::vector<TString> bg_names;
  std::vector<Double_t> bg_xsec;
 
  std::vector<Bool_t> bg_plot;
  std::vector<Bool_t> bg_save;
  std::vector<TString> bg_titles;
  
  std::ifstream myfile;
  myfile.open ("BGinput_v22.txt");	
  if (myfile.is_open()){
	while ( myfile.good() ){
		TString name;
		myfile >> name;
		if(name.Length()==0) continue;
		bg_names.push_back(name);
		Double_t xsec;
		myfile >> xsec;
		bg_xsec.push_back(xsec);
		Bool_t plot;
		myfile >> plot;
		bg_plot.push_back(plot);
		Bool_t save;
		myfile >> save;
		bg_save.push_back(save);
		TString title;
		myfile >> title;
		bg_titles.push_back(title);
		std::cout << name << " " << xsec << " " 
		<< " " << plot << save << std::endl;  
	}
	myfile.close();
  }
  
  for (uint iVec=0; iVec < bg_names.size(); iVec++)
  {
		std::cout << iVec << ": " << bg_names[iVec] << " " << bg_xsec[iVec] << " " 
		<< " " << bg_plot[iVec] << bg_save[iVec] << std::endl;
  }
  
  std::vector<TString> data_names;
  std::vector<Double_t> data_lumi;
 
  
  std::ifstream datafile;
  datafile.open ("Datainput_v22.txt");	
  if (datafile.is_open()){
	while ( datafile.good() ){
		TString name;
		datafile >> name;
		if(name.Length()==0) continue;
		data_names.push_back(name);
		Double_t xsec;
		datafile >> xsec;
		data_lumi.push_back(xsec);
		std::cout << name << " " << xsec << std::endl;  
	}
	datafile.close();
  }
  
  std::vector<TString> signal_names;
  std::vector<TString> signal_titles;
  
  std::vector<Double_t> signal_xsec;
 
  
  std::ifstream signalfile;
  signalfile.open ("Signalinput_v22.txt");	
  if (signalfile.is_open()){
	while ( signalfile.good() ){
		TString title;
		signalfile >> title;
		if(title.Length()==0) continue;
		signal_titles.push_back(title);
		TString name;
		signalfile >> name;
		signal_names.push_back(name);
		Double_t xsec;
		signalfile >> xsec;
		signal_xsec.push_back(xsec);
		std::cout << title << " " << name << " " << xsec << std::endl;  
	}
	signalfile.close();
  }

  const int nFiles = 7;

  //Int_t r = 4;
  //DoubleEle + WZ
  //TString fileNames[nFiles] = {"DoubleEle","TT_42X_TruePU","WZ_42X_TruePU","ZZ_42X_TruePU","DY_42X_TruePU","Htt120_42X_TruePU","Hww120_42X_TruePU"};
  //DoubleEle + WZjets 
  TString fileNames[nFiles] = {"2012",
  "ZZ",
  "WZ",
  "TT",
  "TTZ",
  "GG2L2L",
  "GG4L"};
  
  TString inputDir = "/home/jpavel/analysis/CMS/histograms/PostMoriod/20130918/MySummary_v31/";
  
  TString outputDir = "/home/jpavel/analysis/CMS/Plots/Stack/PostMoriond/20130918_v31";
  gROOT->ProcessLine(".!mkdir -p "+outputDir+"/png");
  gROOT->ProcessLine(".!mkdir -p "+outputDir+"/pdf");
 
  
  std::vector<TFile*> f_bg;  	
  std::vector<TFile*> f_data;  	
  
    std::stringstream indexes;  
  for(int iFile = 0; iFile < data_names.size(); iFile++)
  {
	  indexes.str("");
	  indexes << inputDir << data_names[iFile] << "/Summary.root";
	  std::string input_file=indexes.str();
	  f_data.push_back(TFile::Open(input_file.c_str()));
	  if(!f_data[iFile]) {
		  std::cerr << "Error: file " << input_file << " could not be opened." << std::endl; 
		  return 1;
	  } else std::cout << "File " << input_file << " succesfully opened!" << std::endl;
  }
  
  //f_data.push_back(TFile::Open("/home/jpavel/analysis/CMS/histograms/PostMoriod/20130918/PostAnalysisSummary/2012.root"));
  
  //~ if(!f_data[0]) {
		  //~ std::cerr << "Error: file " << "/home/jpavel/analysis/CMS/histograms/PostMoriod/20130918/PostAnalysisSummary/2012.root" << " could not be opened." << std::endl; 
		  //~ return 1;
	  //~ }
	  //~ else std::cout << "File " << "/home/jpavel/analysis/CMS/histograms/PostMoriod/20130918/PostAnalysisSummary/2012.root" << " succesfully opened!" << std::endl;
  //~ 


  for(int iFile = 0; iFile < bg_names.size(); iFile++)
  {
	  indexes.str("");
	  indexes << inputDir << bg_names[iFile] << "/Summary.root";
	  std::string input_file=indexes.str();
	  f_bg.push_back(TFile::Open(input_file.c_str()));
	  if(!f_bg[iFile]) {
		  std::cerr << "Error: file " << input_file << " could not be opened." << std::endl; 
		  return 1;
	  } else std::cout << "File " << input_file << " succesfully opened!" << std::endl;
  }
  
  // tau ES
  
  TString tauESplusSuffix=	"ESUp";
  TString tauESminusSuffix=	"ESDown";

  std::vector<TFile*> f_bg_ESplus;
  std::vector<TFile*> f_bg_ESminus;
  
  for(int iFile = 0; iFile < bg_names.size(); iFile++)
  {
	  indexes.str("");
	  indexes << inputDir << bg_names[iFile] << "_" << tauESplusSuffix << "/Summary.root";
	  std::string input_file=indexes.str();
	  f_bg_ESplus.push_back(TFile::Open(input_file.c_str()));
	  if(!f_bg_ESplus[iFile]) {
		  std::cerr << "Error: file " << input_file << " could not be opened." << std::endl; 
		  return 1;
	  } else std::cout << "File " << input_file << " succesfully opened!" << std::endl;
  }
  
  for(int iFile = 0; iFile < bg_names.size(); iFile++)
  {
	  indexes.str("");
	  indexes << inputDir << bg_names[iFile] << "_" << tauESminusSuffix << "/Summary.root";
	  std::string input_file=indexes.str();
	  f_bg_ESminus.push_back(TFile::Open(input_file.c_str()));
	  if(!f_bg_ESminus[iFile]) {
		  std::cerr << "Error: file " << input_file << " could not be opened." << std::endl; 
		  return 1;
	  } else std::cout << "File " << input_file << " succesfully opened!" << std::endl;
  }
  
  // signal
  
  std::vector<TFile*> f_signal;  	
  
  for(int iFile = 0; iFile < signal_names.size(); iFile++)
  {
	  indexes.str("");
	  indexes << inputDir << signal_names[iFile] << "/Summary.root";
	  std::string input_file=indexes.str();
	  f_signal.push_back(TFile::Open(input_file.c_str()));
	  if(!f_signal[iFile]) {
		  std::cerr << "Error: file " << input_file << " could not be opened." << std::endl; 
		  return 1;
	  } else std::cout << "File " << input_file << " succesfully opened!" << std::endl;
  }
  
  // tau ES
  
  

  std::vector<TFile*> f_signal_ESplus;
  std::vector<TFile*> f_signal_ESminus;
  
  for(int iFile = 0; iFile < signal_names.size(); iFile++)
  {
	  indexes.str("");
	  indexes << inputDir << signal_names[iFile] << "_" << tauESplusSuffix << "/Summary.root";
	  std::string input_file=indexes.str();
	  f_signal_ESplus.push_back(TFile::Open(input_file.c_str()));
	  if(!f_signal_ESplus[iFile]) {
		  std::cerr << "Error: file " << input_file << " could not be opened." << std::endl; 
		  return 1;
	  } else std::cout << "File " << input_file << " succesfully opened!" << std::endl;
  }
  
  for(int iFile = 0; iFile < signal_names.size(); iFile++)
  {
	  indexes.str("");
	  indexes << inputDir << signal_names[iFile] << "_" << tauESminusSuffix << "/Summary.root";
	  std::string input_file=indexes.str();
	  f_signal_ESminus.push_back(TFile::Open(input_file.c_str()));
	  if(!f_signal_ESminus[iFile]) {
		  std::cerr << "Error: file " << input_file << " could not be opened." << std::endl; 
		  return 1;
	  } else std::cout << "File " << input_file << " succesfully opened!" << std::endl;
  }

  const int nHist1 = 9;
  //const int nHist1 = 44;


  TString histNames1[nHist1] = {"h_svMass","h_H_svMass_type_4","h_H_svMass_type_3","h_H_svMass_type_1","h_H_svMass_type_2","h_H_svMass_type_8","h_H_svMass_type_5","h_H_svMass_type_7","h_H_svMass_type_6"};
  TString histBGNames1[nHist1] = {"h_FR_svMass","h_H_FR_svMass_type_4","h_H_FR_svMass_type_3","h_H_FR_svMass_type_1","h_H_FR_svMass_type_2","h_H_FR_svMass_type_8","h_H_FR_svMass_type_5","h_H_FR_svMass_type_7","h_H_FR_svMass_type_6"};
  
  TString histTitles[nHist1] = {"M_{#tau#tau}[GeV]","M_{#tau#tau}[GeV]","M_{#tau#tau}[GeV]","M_{#tau#tau}[GeV]","M_{#tau#tau}[GeV]","M_{#tau#tau}[GeV]","M_{#tau#tau}[GeV]","M_{#tau#tau}[GeV]","M_{#tau#tau}[GeV]"};
  TString PaveText[nHist1]	= {"CMS preliminary 2012","MMTT","MMET","MMMT","MMME","EETT","EEMT","EEET","EEEM"};
 
  std::vector<std::vector<TH1F*>* > 	h_1d_bg;
  std::vector<std::vector<TH1F*>* > 	h_1d_bg_ESplus;
  std::vector<std::vector<TH1F*>* > 	h_1d_bg_ESminus; 
  
  std::vector<std::vector<TH1F*>* > 	h_1d_signal;
  std::vector<std::vector<TH1F*>* > 	h_1d_signal_ESplus;
  std::vector<std::vector<TH1F*>* > 	h_1d_signal_ESminus; 
  //std::vector<std::vector<TH1F*>* > 	h_1d_data;
  TH1F * 		h_1d_data[nHist1];
 
  TH1F * 		h_1BG[nHist1];
 
 // TH1F *                signal[nHist1];
  
  std::vector<Double_t> weights;
  std::vector<Double_t> weight_signal;
  
  //Double_t xsection[nFiles]={1.0, 0.130, 1.057, 23.64, 0.208, 0.01203, 0.0048}; // pb
  //Double_t events[nFiles]={1.0, 4989540, 2979624, 10783509, 210160, 400973, 548760}; // pb
  
  Color_t colors[6]={kRed,kYellow,kMagenta,kGreen,kBlack,kBlue};
  

  double total_lumi = 0;// 19711.2250; //// pb-1
  
  for(int iFile = 0; iFile < (data_names.size()/2); iFile++)
  {
	total_lumi+=data_lumi[iFile];
  }
  
  std::cout << "Total lumi is " << total_lumi << std::endl;
  for(int iFile = 0; iFile < bg_names.size(); iFile++)
	{
		TH1D * h_pu = (TH1D*)f_bg[iFile]->Get("AnalysisHistos/h_nPU_raw");
		std::cout << h_pu->Integral() << std::endl;
		double lumi =  h_pu->Integral()/bg_xsec[iFile];
		weights.push_back(total_lumi/lumi);
		std::cout << weights[iFile] << std::endl;
	}
	
	for(int iFile = 0; iFile < signal_names.size(); iFile++)
	{
		TH1D * h_pu = (TH1D*)f_signal[iFile]->Get("AnalysisHistos/h_nPU_raw");
		std::cout << h_pu->Integral() << std::endl;
		double lumi =  h_pu->Integral()/signal_xsec[iFile];
		weight_signal.push_back(total_lumi/lumi);
		std::cout << weight_signal[iFile] << std::endl;
	}

  for(int iFile = 0; iFile < bg_names.size(); iFile++)
  {
	  std::vector<TH1F*>* temp_vec = new std::vector<TH1F*>;
	  for(int iHist = 0; iHist < nHist1; iHist++)
	  {
		  TH1F* test = (TH1F*)f_bg[iFile]->Get(histNames1[iHist]);
		  temp_vec->push_back(test);
		  (*temp_vec)[iHist]->Draw();	
		 
		  (*temp_vec)[iHist]->Scale(weights[iFile]); 
		  (*temp_vec)[iHist]->Rebin(20);
	  }
	  h_1d_bg.push_back(temp_vec);
  }
  
   for(int iFile = 0; iFile < bg_names.size(); iFile++)
  {
	  std::vector<TH1F*>* temp_vec = new std::vector<TH1F*>;
	  for(int iHist = 0; iHist < nHist1; iHist++)
	  {
		  TH1F* test = (TH1F*)f_bg_ESplus[iFile]->Get(histNames1[iHist]);
		  temp_vec->push_back(test);
		  (*temp_vec)[iHist]->Draw();	
		 
		  (*temp_vec)[iHist]->Scale(weights[iFile]); 
		  (*temp_vec)[iHist]->Rebin(20);
	  }
	  h_1d_bg_ESplus.push_back(temp_vec);
  }
  
  for(int iFile = 0; iFile < bg_names.size(); iFile++)
  {
	  std::vector<TH1F*>* temp_vec = new std::vector<TH1F*>;
	  for(int iHist = 0; iHist < nHist1; iHist++)
	  {
		  TH1F* test = (TH1F*)f_bg_ESminus[iFile]->Get(histNames1[iHist]);
		  temp_vec->push_back(test);
		  (*temp_vec)[iHist]->Draw();	
		 
		  (*temp_vec)[iHist]->Scale(weights[iFile]); 
		  (*temp_vec)[iHist]->Rebin(20);
	  }
	  h_1d_bg_ESminus.push_back(temp_vec);
  }
  
  

// signal

for(int iFile = 0; iFile < signal_names.size(); iFile++)
  {
	  std::vector<TH1F*>* temp_vec = new std::vector<TH1F*>;
	  for(int iHist = 0; iHist < nHist1; iHist++)
	  {
		  TH1F* test = (TH1F*)f_signal[iFile]->Get(histNames1[iHist]);
		  temp_vec->push_back(test);
		  (*temp_vec)[iHist]->Draw();	
		 
		  (*temp_vec)[iHist]->Scale(weight_signal[iFile]); 
		  (*temp_vec)[iHist]->Rebin(20);
	  }
	  h_1d_signal.push_back(temp_vec);
  }
  
   for(int iFile = 0; iFile < signal_names.size(); iFile++)
  {
	  std::vector<TH1F*>* temp_vec = new std::vector<TH1F*>;
	  for(int iHist = 0; iHist < nHist1; iHist++)
	  {
		  TH1F* test = (TH1F*)f_signal_ESplus[iFile]->Get(histNames1[iHist]);
		  temp_vec->push_back(test);
		  (*temp_vec)[iHist]->Draw();	
		 
		  (*temp_vec)[iHist]->Scale(weight_signal[iFile]); 
		  (*temp_vec)[iHist]->Rebin(20);
	  }
	  h_1d_signal_ESplus.push_back(temp_vec);
  }
  
  for(int iFile = 0; iFile < signal_names.size(); iFile++)
  {
	  std::vector<TH1F*>* temp_vec = new std::vector<TH1F*>;
	  for(int iHist = 0; iHist < nHist1; iHist++)
	  {
		  TH1F* test = (TH1F*)f_signal_ESminus[iFile]->Get(histNames1[iHist]);
		  temp_vec->push_back(test);
		  (*temp_vec)[iHist]->Draw();	
		 
		  (*temp_vec)[iHist]->Scale(weight_signal[iFile]); 
		  (*temp_vec)[iHist]->Rebin(20);
	  }
	  h_1d_signal_ESminus.push_back(temp_vec);
  }

//data

  for(int iHist=0; iHist < nHist1; iHist++)
  {
	  for(int iFile=0; iFile < data_names.size(); iFile++)
	  {
		TH1F* test =(TH1F*)f_data[iFile]->Get(histNames1[iHist]);
		if(iFile==0) h_1d_data[iHist]=(TH1F*)test->Clone();
		else h_1d_data[iHist]->Add(test);
	  }
	 h_1d_data[iHist]->Rebin(20);
	 if(iHist==1) h_1d_data[0]=(TH1F*)h_1d_data[iHist]->Clone();
	 if(iHist>1) h_1d_data[0]->Add(h_1d_data[iHist]);				 
  }
  
  std::vector<double>* BGcounts = EstimateBackground("/home/jpavel/analysis/CMS/histograms/PostMoriod/20130918/AnalysisOutput_v31/2012.root",
		"/home/jpavel/analysis/CMS/histograms/PostMoriod/20130918/AnalysisOutput_v31/2012.root");
  //getting histograms for the background
  
  for(int iBG=0; iBG < BGcounts->size(); iBG++)
  {
	std::cout << BGcounts->at(iBG) << std::endl;
	
  } 
  
  uint MeToULBconv[8] = { 4,3,1,2,8,5,7,6};
// reducible
 
  for(int iHist=0; iHist < nHist1; iHist++)
  {
  
	  for(int iFile=0; iFile < data_names.size(); iFile++)
	  {
		TH1F* test =(TH1F*)f_data[iFile]->Get(histBGNames1[iHist]);
		if(iFile==0) h_1BG[iHist]=(TH1F*)test->Clone();
		else h_1BG[iHist]->Add(test);
	  }
	
	 if(iHist>0) h_1BG[iHist]->Scale(BGcounts->at(MeToULBconv[iHist-1]-1)/h_1BG[iHist]->Integral());
	 h_1BG[iHist]->Rebin(20);
	 if(iHist==1) h_1BG[0]=(TH1F*)h_1BG[iHist]->Clone();
	 if(iHist>1) h_1BG[0]->Add(h_1BG[iHist]);			
	
  }

  
  //~ 
    //~ int ZZ_Color = TColor::GetColor("#99ff99");
    //~ int WZ_Color = TColor::GetColor("#660099");
    //~ int TTbar_Color = TColor::GetColor("#cc66cc");
    //~ int Zjet_Color = TColor::GetColor("#32c3ff");
//~ 
  TCanvas *c1 = new TCanvas("c1","",5,30,650,600);
  //gPad->SetLogy(); 
  c1->SetGrid(0,0);
  c1->SetFillStyle(4000);
  c1->SetFillColor(10);
  c1->SetTicky();
  c1->SetObjectStat(0);
h_1d_data[0]->Draw();
 
  //~ for(int iHist = 0; iHist < nHist1; iHist++){
	  //~ signal[iHist] = (TH1F*)h_1d[iHist][5]->Clone();}

  
  for(int iHist = 0; iHist < nHist1; iHist++) 
  {
	  THStack *hs = new THStack("hs","Stacked MC histograms");

	
	  for(int iFile=0; iFile < bg_names.size(); iFile++)
	  {
			
	  
		  (*(h_1d_bg[iFile]))[iHist]->SetLineWidth(0);
		  //h_1d[iFile][iHist]->SetFillStyle(3244);

		  (*(h_1d_bg[iFile]))[iHist]->SetFillColor(colors[iFile]);
		  //~ if(iFile == 1){   }
		  //~ else if(iFile == 2){  h_1d[iFile][iHist]->SetFillColor(WZ_Color); }
		  //~ else if(iFile == 3){  h_1d[iFile][iHist]->SetFillColor(TTbar_Color); }
		  //~ else if(iFile == 4){  h_1d[iFile][iHist]->SetFillColor(Zjet_Color); }
		  //~ else if(iFile == 5){
			  //~ signal[iFile]->Add(h_1d[iFile][iFile+1]);
                          //~ signal[iFile]->SetLineColor(kRed); 
                          //~ signal[iFile]->SetLineWidth(2.0); 
                          //~ 
                   //~ }

		  //if(iFile < 5) 
		 //if(iFile!=2 && iFile!=3)
		 if(bg_plot[iFile])	hs->Add((*(h_1d_bg[iFile]))[iHist],"hist");		

	  }
	 
	  
	  hs->Add(h_1BG[iHist],"hist");
	 
//~ 
		  //~ //hs->Add(signal[iFile],"hist");		
	  //~ 
	  h_1d_data[iHist]->SetMarkerStyle(21);
	  h_1d_data[iHist]->SetMarkerSize(0.7);
	  
//~ 
 TLegend* leg = new TLegend(0.65,0.60,0.88,0.88,NULL,"brNDC");
 leg->SetFillColor(0);
 leg->SetTextSize(0.035);
 leg->SetBorderSize(0);
			//~ 
			
	  leg->AddEntry(h_1d_data[iHist],"data 2012","p");   
	  for(uint iFile=0; iFile < bg_names.size(); iFile++)
	  {
		  if(bg_plot[iFile]) leg->AddEntry((*(h_1d_bg[iFile]))[iHist],bg_titles[iFile],"f");
	  }
	  
	  
	  leg->AddEntry(h_1BG[iHist],"reducible","f");
	   
	  //~ 
	  //~ leg->AddEntry(h_1d[iFile][4],"Z+jets","f");
	  //~ leg->AddEntry(signal[iFile],"ZH(125)","f");
//~ 
TString lumist="19.7 fb^{-1}";
  TPaveText *ll = new TPaveText(0.25, 0.95, 0.95, 0.99, "NDC");
  ll->SetTextSize(0.03);
  ll->SetTextFont(62);
  ll->SetFillColor(0);
  ll->SetBorderSize(0);
  ll->SetMargin(0.01);
  ll->SetTextAlign(12); // align left
  TString text = PaveText[iHist];
  ll->AddText(0.01,0.5,text);
  text = "#sqrt{s} = 8 TeV  L = ";
  text = text + lumist;
  //  ll->SetTextAlign(32); // align right
  ll->AddText(0.5, 0.5, text);
   
	
//~ 
	h_1d_data[iHist]->Draw("PE01");
	  //~ double max = h_1d[iFile][0]->GetMaximum();
	  //~ h_1d[iFile][0]->GetYaxis()->SetRangeUser(1e-2,200*max);
	//~ // if(iHist > 0 && iHist < 4)  h_1d[iFile][0]->GetXaxis()->SetRangeUser(0,150);
	 //~ 
	h_1d_data[iHist]->GetXaxis()->SetTitle(histTitles[iHist]);
	   hs->Draw("same");
	 //~ // signal[iFile]->Scale(10.);
	  //~ signal[iFile]->Draw("histsame");
	h_1d_data[iHist]->Draw("samePE01");
      //~ 
	  //~ 
	  leg->Draw("same");
	  ll->Draw("same");
	  gPad->RedrawAxis();
//~ 
	  //~ c1->SetLogy();	
	   c1->Print(outputDir+"/png/"+histNames1[iHist]+".png");
       c1->Print(outputDir+"/pdf/"+histNames1[iHist]+".pdf");

	  //~ c1->Print("Moriond/Mu_"+histNames1[iFile]+"_all.eps");
	  //~ c1->SetLogy(0);
	  //~ h_1d[iFile][0]->GetYaxis()->SetRangeUser(0,1.5*max);
	//~ 
	  //~ c1->Print("Moriond/Mu_"+histNames1[iFile]+"_all_normal.png");
	  //~ c1->Print("Moriond/Mu_"+histNames1[iFile]+"_all_normal.eps");
	  	//~ 
	  //~ 
//~ 
//	   leg->Clear();
//	   hs->Clear();    

  }
  // saving stuff
  
  TString outputROOTDir = "/home/jpavel/analysis/CMS/SW/cms-ucl-tau/ZHtautauAnalysis/macros/LimitInput/";
 
  
  TFile out(outputROOTDir+"vhtt_llLL.inputsArmistice-sm-8TeV.root","RECREATE");
  TString dirNames[8] = { "mmtt_zh","mmet_zh","mmmt_zh","mmme_zh","eett_zh","eemt_zh","eeet_zh","eeem_zh"};
  TString upNames[8] = { "lltt","llet","llmt","llem","lltt","llmt","llet","llem"};
  TString nameES="_CMS_scale_t_";
  TString nameUp="Up";
  TString nameDown="Down";
  TString ZjetsName="Zjets";
  TString DataName="data_obs";
  
  for(uint iDir = 0; iDir < 8; iDir++)
  {
	out.mkdir(dirNames[iDir]);
	out.cd(dirNames[iDir]);
	
	//signal
	for(int iFile=0; iFile < signal_titles.size(); iFile++)
	{
		
		TH1D* hist = new TH1D(signal_titles[iFile],"",15,0,300);
		for(int iBin = 1; iBin <= (*(h_1d_signal[iFile]))[iDir+1]->GetNbinsX(); iBin++)
		{
			
			hist->SetBinContent(iBin,(*(h_1d_signal[iFile]))[iDir+1]->GetBinContent(iBin));
			hist->SetBinError(iBin,(*(h_1d_signal[iFile]))[iDir+1]->GetBinError(iBin));
		}
		hist->Write();
		
		TH1D* hist_Up = new TH1D(signal_titles[iFile]+nameES+upNames[iDir]+nameUp,"",15,0,300);
		for(int iBin = 1; iBin <= (*(h_1d_signal_ESplus[iFile]))[iDir+1]->GetNbinsX(); iBin++)
		{
			
			hist_Up->SetBinContent(iBin,(*(h_1d_signal_ESplus[iFile]))[iDir+1]->GetBinContent(iBin));
			hist_Up->SetBinError(iBin,(*(h_1d_signal_ESplus[iFile]))[iDir+1]->GetBinError(iBin));
		}
		hist_Up->Write();
		
		TH1D* hist_Down = new TH1D(signal_titles[iFile]+nameES+upNames[iDir]+nameDown,"",15,0,300);
		for(int iBin = 1; iBin <= (*(h_1d_signal_ESminus[iFile]))[iDir+1]->GetNbinsX(); iBin++)
		{
			
			hist_Down->SetBinContent(iBin,(*(h_1d_signal_ESminus[iFile]))[iDir+1]->GetBinContent(iBin));
			hist_Down->SetBinError(iBin,(*(h_1d_signal_ESminus[iFile]))[iDir+1]->GetBinError(iBin));
		}
		hist_Down->Write();
		
	}
	
	
	// reducible
	TH1D* hist_Zjets = new TH1D(ZjetsName,"",15,0,300);
	for(int iBin = 1; iBin <= h_1BG[iDir+1]->GetNbinsX(); iBin++)
		{
			
			hist_Zjets->SetBinContent(iBin,h_1BG[iDir+1]->GetBinContent(iBin));
			hist_Zjets->SetBinError(iBin,h_1BG[iDir+1]->GetBinError(iBin));
		}
		hist_Zjets->Write();
	
	// MC backgrounds
	for(int iFile=0; iFile < bg_titles.size(); iFile++)
	{
		if(!bg_save[iFile]) continue;
		TH1D* hist = new TH1D(bg_titles[iFile],"",15,0,300);
		for(int iBin = 1; iBin <= (*(h_1d_bg[iFile]))[iDir+1]->GetNbinsX(); iBin++)
		{
			
			hist->SetBinContent(iBin,(*(h_1d_bg[iFile]))[iDir+1]->GetBinContent(iBin));
			hist->SetBinError(iBin,(*(h_1d_bg[iFile]))[iDir+1]->GetBinError(iBin));
		}
		hist->Write();
		
		TH1D* hist_Up = new TH1D(bg_titles[iFile]+nameES+upNames[iDir]+nameUp,"",15,0,300);
		for(int iBin = 1; iBin <= (*(h_1d_bg_ESplus[iFile]))[iDir+1]->GetNbinsX(); iBin++)
		{
			
			hist_Up->SetBinContent(iBin,(*(h_1d_bg_ESplus[iFile]))[iDir+1]->GetBinContent(iBin));
			hist_Up->SetBinError(iBin,(*(h_1d_bg_ESplus[iFile]))[iDir+1]->GetBinError(iBin));
		}
		hist_Up->Write();
		
		TH1D* hist_Down = new TH1D(bg_titles[iFile]+nameES+upNames[iDir]+nameDown,"",15,0,300);
		for(int iBin = 1; iBin <= (*(h_1d_bg_ESminus[iFile]))[iDir+1]->GetNbinsX(); iBin++)
		{
			
			hist_Down->SetBinContent(iBin,(*(h_1d_bg_ESminus[iFile]))[iDir+1]->GetBinContent(iBin));
			hist_Down->SetBinError(iBin,(*(h_1d_bg_ESminus[iFile]))[iDir+1]->GetBinError(iBin));
		}
		hist_Down->Write();
		
	}
	
	//data
	TH1D* hist_data = new TH1D(DataName,"",15,0,300);
	for(int iBin = 1; iBin <= h_1d_data[iDir+1]->GetNbinsX(); iBin++)
	{
		
		hist_data->SetBinContent(iBin,h_1d_data[iDir+1]->GetBinContent(iBin));
		hist_data->SetBinError(iBin,h_1d_data[iDir+1]->GetBinError(iBin));
	}
	hist_data->Write();
	
	out.cd();
	
  }
  
  out.Close();

  return 0;

}
示例#6
0
void MultiHistoOverlap(TString namesandlabels, Int_t nOfFiles, const TString& outDir="./"){

  gROOT->Reset();
  gROOT->ProcessLine(".L tdrstyle.C"); 
  gROOT->ProcessLine("setTDRStyle()");
 
 //  gSystem->Load("libRooFit");
 //  using namespace RooFit;
 // preamble
  TPaveText *cmsprel = new TPaveText(0.19, 0.95, 0.95, 0.99, "NDC");
  cmsprel->SetTextSize(0.03);
  cmsprel->SetTextFont(42);
  cmsprel->SetFillColor(0);
  cmsprel->SetBorderSize(0);
  cmsprel->SetMargin(0.01);
  cmsprel->SetTextAlign(12); // align left
  TString text = "CMS Preliminary 2011";
  cmsprel->AddText(0.0, 0.5,text);  
  TString text2 = "#sqrt{s} = 7 TeV  |#eta_{#mu}|<2.4";             
  cmsprel->AddText(0.8, 0.5, text2);


  TList* FileList  = new TList();  
  TList* LabelList = new TList();    
  TObjArray *nameandlabelpairs = namesandlabels.Tokenize(",");  
  for (Int_t i = 0; i < nameandlabelpairs->GetEntries(); ++i) {    
    TObjArray *aFileLegPair = TString(nameandlabelpairs->At(i)->GetName()).Tokenize("=");       
    if(aFileLegPair->GetEntries() == 2) {      
      FileList->Add( TFile::Open(aFileLegPair->At(0)->GetName())  ); 
      LabelList->Add( aFileLegPair->At(1) );    
    } else {      
      std::cout << "Please give file name and legend entry in the following form:\n" 		<< " filename1=legendentry1,filename2=legendentry2\n";          
    }  
  }
  

 Int_t NOfFiles =  FileList->GetSize();  
 if ( NOfFiles!=nOfFiles ){
   std::cout<<"&MSG-e: NOfFiles = "<<nOfFiles<<std::endl;  
   return;
 }  
 

 std::vector<TString> LegLabels;
 LegLabels.reserve(nOfFiles);    
 for(Int_t j=0; j < nOfFiles; j++) {       
   TObjString* legend = (TObjString*)LabelList->At(j);    
   LegLabels.push_back(legend->String());
   std::cout<<"LegLabels["<<j<<"]"<<LegLabels[j]<<std::endl;  
 }

 TLegend *leg=0; 

 TCanvas* c0 = new TCanvas("c0", "c0",50, 20, 800,600);
 TCanvas* c1 = new TCanvas("c1", "c1",50, 20, 800,600);
 TCanvas* c2 = new TCanvas("c2", "c2",50, 20, 800,600);
 TCanvas* c3 = new TCanvas("c3", "c3",50, 20, 800,600);
 TCanvas* c4 = new TCanvas("c4", "c4",50, 20, 800,600);
 TCanvas* c5 = new TCanvas("c5", "c5",50, 20, 1200,800);
 TCanvas* c6 = new TCanvas("c6", "c6",50, 20, 1200,800);

 TCanvas* c0s = new TCanvas("c0s", "c0s",50, 20, 800,600);
 TCanvas* c1s = new TCanvas("c1s", "c1s",50, 20, 800,600);
 TCanvas* c2s = new TCanvas("c2s", "c2s",50, 20, 800,600);
 TCanvas* c3s = new TCanvas("c3s", "c3s",50, 20, 800,600);

 TCanvas* cFit = new TCanvas("cFit", "cFit",50, 20, 1600, 800);


 //----------------- CANVAS C0 --------------//
 c0->SetFillColor(0);  
 c0->cd();

 leg = new TLegend(0.50,0.25,0.90,0.40);  
 leg->SetBorderSize(1);
 leg->SetFillColor(0);
 leg->SetTextFont(42);
 
// Mass VS muon phi plus -------------------------------
 TH1D *histoMassVsPhiPlus[nOfFiles];
 for(Int_t j=0; j < nOfFiles; j++) {     
   
   TFile *fin = (TFile*)FileList->At(j);    
   if (( histoMassVsPhiPlus[j] = (TH1D*)fin->Get("MassVsPhiPlus/allHistos/meanHisto"))){
     histoMassVsPhiPlus[j]->SetLineStyle(linestylelist[j]);
     histoMassVsPhiPlus[j]->SetMarkerColor(colorlist[j]);
     histoMassVsPhiPlus[j]->SetLineColor(colorlist[j]);
     histoMassVsPhiPlus[j]->SetMarkerStyle(markerstylelist[j]); 
     //     histoMassVsPhiPlus[j]->SetMarkerSize(0.75);
     if ( j == 0 ) {
       histoMassVsPhiPlus[j]->GetXaxis()->SetTitle("positive muon #phi (rad)");
       histoMassVsPhiPlus[j]->GetYaxis()->SetTitle("M_{#mu#mu} (GeV)");
       //       histoMassVsPhiPlus[j]->GetYaxis()->SetRangeUser(88.5,93.5);
       histoMassVsPhiPlus[j]->GetYaxis()->SetRangeUser(90.0,91.5);
       histoMassVsPhiPlus[j]->GetXaxis()->SetRangeUser(-3.14,3.14);
       histoMassVsPhiPlus[j]->Draw();
     } else {
       histoMassVsPhiPlus[j]->Draw("SAME");
     }
     leg->AddEntry(histoMassVsPhiPlus[j],LegLabels[j],"PL");  
   }
 }
 //cmsprel->Draw("same");
 leg->Draw("same");
 c0->SaveAs(outDir+"MassVsPhiPlus.png"); 


 //----------------- CANVAS C1 --------------//
 c1->SetFillColor(0);  
 c1->cd();

 leg = new TLegend(0.50,0.25,0.90,0.40);  
 leg->SetBorderSize(1);
 leg->SetFillColor(0);
 leg->SetTextFont(42);
 
// Mass VS muon eta plus -------------------------------
 TH1D *histoMassVsEtaPlus[nOfFiles];
 for(Int_t j=0; j < nOfFiles; j++) {     
   
   TFile *fin = (TFile*)FileList->At(j);    
   if (( histoMassVsEtaPlus[j] = (TH1D*)fin->Get("MassVsEtaPlus/allHistos/meanHisto"))){
     histoMassVsEtaPlus[j]->SetLineStyle(linestylelist[j]);
     histoMassVsEtaPlus[j]->SetMarkerColor(colorlist[j]);
     histoMassVsEtaPlus[j]->SetLineColor(colorlist[j]);
     histoMassVsEtaPlus[j]->SetMarkerStyle(markerstylelist[j]); 
     //     histoMassVsEtaPlus[j]->SetMarkerSize(0.75);
     if ( j == 0 ) {
       histoMassVsEtaPlus[j]->GetXaxis()->SetTitle("positive muon #eta");
       histoMassVsEtaPlus[j]->GetYaxis()->SetTitle("M_{#mu#mu} (GeV)");
       //       histoMassVsEtaPlus[j]->GetYaxis()->SetRangeUser(88.5,93.5);
       histoMassVsEtaPlus[j]->GetYaxis()->SetRangeUser(90.0,91.5);
       histoMassVsEtaPlus[j]->GetXaxis()->SetRangeUser(-2.41,2.41);
       histoMassVsEtaPlus[j]->Draw();
     } else {
       histoMassVsEtaPlus[j]->Draw("SAME");
     }
     leg->AddEntry(histoMassVsEtaPlus[j],LegLabels[j],"PL");  
   }
 }
 //cmsprel->Draw("same");
 leg->Draw("same");
 c1->SaveAs(outDir+"MassVsEtaPlus.png"); 


 //----------------- CANVAS C2 --------------//
 c2->SetFillColor(0);  
 c2->cd();

 leg = new TLegend(0.50,0.25,0.90,0.40);  
 leg->SetBorderSize(1);
 leg->SetFillColor(0);
 leg->SetTextFont(42);
 
// Mass VS muon eta plus - eta minus  -------------------------------
 TH1D *histoMassVsEtaPlusMinusDiff[nOfFiles];
 for(Int_t j=0; j < nOfFiles; j++) {     
   
   TFile *fin = (TFile*)FileList->At(j);    
   if (( histoMassVsEtaPlusMinusDiff[j] = (TH1D*)fin->Get("MassVsEtaPlusMinusDiff/allHistos/meanHisto"))){
     histoMassVsEtaPlusMinusDiff[j]->SetLineStyle(linestylelist[j]);
     histoMassVsEtaPlusMinusDiff[j]->SetMarkerColor(colorlist[j]);
     histoMassVsEtaPlusMinusDiff[j]->SetLineColor(colorlist[j]);
     histoMassVsEtaPlusMinusDiff[j]->SetMarkerStyle(markerstylelist[j]); 
     //     histoMassVsEtaPlusMinusDiff[j]->SetMarkerSize(0.75);
     if ( j == 0 ) {
       histoMassVsEtaPlusMinusDiff[j]->GetXaxis()->SetTitle("#eta pos. muon  #eta neg. muon");
       histoMassVsEtaPlusMinusDiff[j]->GetYaxis()->SetTitle("M_{#mu#mu} (GeV)");
       //       histoMassVsEtaPlusMinusDiff[j]->GetYaxis()->SetRangeUser(88.0,96.0);
       histoMassVsEtaPlusMinusDiff[j]->GetYaxis()->SetRangeUser(90.0,91.5);
       histoMassVsEtaPlusMinusDiff[j]->GetXaxis()->SetRangeUser(-3,3);
       histoMassVsEtaPlusMinusDiff[j]->Draw();
     } else {
       histoMassVsEtaPlusMinusDiff[j]->Draw("SAME");
     }
     leg->AddEntry(histoMassVsEtaPlusMinusDiff[j],LegLabels[j],"PL");  
   }
 }
 //cmsprel->Draw("same");
 leg->Draw("same");
 c2->SaveAs(outDir+"MassVsEtaPlusMinusDiff.png"); 

 //----------------- CANVAS C3 --------------//
 c3->SetFillColor(0);  
 c3->cd();

 leg = new TLegend(0.50,0.25,0.90,0.40);  
 leg->SetBorderSize(1);
 leg->SetFillColor(0);
 leg->SetTextFont(42);
 
// Mass VS muon phi minus -------------------------------
 TH1D *histoMassVsPhiMinus[nOfFiles];
 for(Int_t j=0; j < nOfFiles; j++) {     
   
   TFile *fin = (TFile*)FileList->At(j);    
   if (( histoMassVsPhiMinus[j] = (TH1D*)fin->Get("MassVsPhiMinus/allHistos/meanHisto"))){
     histoMassVsPhiMinus[j]->SetLineStyle(linestylelist[j]);
     histoMassVsPhiMinus[j]->SetMarkerColor(colorlist[j]);
     histoMassVsPhiMinus[j]->SetLineColor(colorlist[j]);
     histoMassVsPhiMinus[j]->SetMarkerStyle(markerstylelist[j]); 
     //     histoMassVsPhiMinus[j]->SetMarkerSize(0.75);
     if ( j == 0 ) {
       histoMassVsPhiMinus[j]->GetXaxis()->SetTitle("negative muon #phi (rad)");
       histoMassVsPhiMinus[j]->GetYaxis()->SetTitle("M_{#mu#mu} (GeV)");
       //       histoMassVsPhiMinus[j]->GetYaxis()->SetRangeUser(88.5,93.5);
       histoMassVsPhiMinus[j]->GetYaxis()->SetRangeUser(90.0,91.5);
       histoMassVsPhiMinus[j]->GetXaxis()->SetRangeUser(-3.14,3.14);
       histoMassVsPhiMinus[j]->Draw();
     } else {
       histoMassVsPhiMinus[j]->Draw("SAME");
     }
     leg->AddEntry(histoMassVsPhiMinus[j],LegLabels[j],"PL");  
   }
 }
 //cmsprel->Draw("same");
 leg->Draw("same");
 c3->SaveAs(outDir+"MassVsPhiMinus.png"); 


 //----------------- CANVAS C4 --------------//
 c4->SetFillColor(0);  
 c4->cd();

 leg = new TLegend(0.50,0.25,0.90,0.40);  
 leg->SetBorderSize(1);
 leg->SetFillColor(0);
 leg->SetTextFont(42);
 
// Mass VS muon eta minus -------------------------------
 TH1D *histoMassVsEtaMinus[nOfFiles];
 for(Int_t j=0; j < nOfFiles; j++) {     
   
   TFile *fin = (TFile*)FileList->At(j);    
   if (( histoMassVsEtaMinus[j] = (TH1D*)fin->Get("MassVsEtaMinus/allHistos/meanHisto"))){
     histoMassVsEtaMinus[j]->SetLineStyle(linestylelist[j]);
     histoMassVsEtaMinus[j]->SetMarkerColor(colorlist[j]);
     histoMassVsEtaMinus[j]->SetLineColor(colorlist[j]);
     histoMassVsEtaMinus[j]->SetMarkerStyle(markerstylelist[j]); 
     //     histoMassVsEtaMinus[j]->SetMarkerSize(0.75);
     if ( j == 0 ) {
       histoMassVsEtaMinus[j]->GetXaxis()->SetTitle("negative muon #eta");
       histoMassVsEtaMinus[j]->GetYaxis()->SetTitle("M_{#mu#mu} (GeV)");
       //       histoMassVsEtaMinus[j]->GetYaxis()->SetRangeUser(88.5,93.5);
       histoMassVsEtaMinus[j]->GetYaxis()->SetRangeUser(90.0,91.5);
       histoMassVsEtaMinus[j]->GetXaxis()->SetRangeUser(-2.41,2.41);
       histoMassVsEtaMinus[j]->Draw();
     } else {
       histoMassVsEtaMinus[j]->Draw("SAME");
     }
     leg->AddEntry(histoMassVsEtaMinus[j],LegLabels[j],"PL");  
   }
 }
 //cmsprel->Draw("same");
 leg->Draw("same");
 c4->SaveAs(outDir+"MassVsEtaMinus.png"); 

 //----------------- CANVAS C5 --------------//
 c5->SetFillColor(0);  
 c5->cd();

 leg = new TLegend(0.50,0.25,0.90,0.40);  
 leg->SetBorderSize(1);
 leg->SetFillColor(0);
 leg->SetTextFont(42);
 
 // Mass VS muon phi plus -------------------------------
 TH2D *histoMassVsEtaPhiPlus[nOfFiles];

 TStyle *newStyle;
 newStyle->SetPalette(1);
 // newStyle->SetOptTitle(1);

 Double_t zMin(82.);
 Double_t zMax(96.);
 for(Int_t j=0; j < nOfFiles; j++) {     
   
   TFile *fin = (TFile*)FileList->At(j);    
   if (( histoMassVsEtaPhiPlus[j] = (TH2D*)fin->Get("MassVsEtaPhiPlus/allHistos/meanHisto"))){
     if ( j == 0 ) {
       histoMassVsEtaPhiPlus[j]->SetTitle(LegLabels[j]);
       histoMassVsEtaPhiPlus[j]->GetXaxis()->SetTitle("positive muon #phi (rad)");
       histoMassVsEtaPhiPlus[j]->GetYaxis()->SetTitle("positive muon #eta");
       zMin = histoMassVsEtaPhiPlus[j]->GetMinimum();
       zMax = histoMassVsEtaPhiPlus[j]->GetMaximum();
       histoMassVsEtaPhiPlus[j]->Draw("COLZ");
       c5->SaveAs(outDir+"MassVsEtaPhiPlus_file0.png"); 
     } else {
       histoMassVsEtaPhiPlus[j]->SetTitle(LegLabels[j]);
       histoMassVsEtaPhiPlus[j]->SetMinimum(zMin);
       histoMassVsEtaPhiPlus[j]->SetMaximum(zMax);
       histoMassVsEtaPhiPlus[j]->Draw("COLZ");
       c5->SaveAs(outDir+"MassVsEtaPhiPlus_file"+(TString)Form("%d",(Int_t)j)+".png"); 
     }

   }
 }
 //cmsprel->Draw("same");

//  //----------------- CANVAS C6 --------------//
//  c6->SetFillColor(0);  
//  c6->cd();

//  leg = new TLegend(0.50,0.25,0.90,0.40);  
//  leg->SetBorderSize(1);
//  leg->SetFillColor(0);
//  leg->SetTextFont(42);
 
//  // Mass VS muon phi minus -------------------------------
//  TH2D *histoMassVsEtaPhiMinus[nOfFiles];

//  for(Int_t j=0; j < nOfFiles; j++) {     
   
//    TFile *fin = (TFile*)FileList->At(j);    
//    if (( histoMassVsEtaPhiMinus[j] = (TH2D*)fin->Get("MassVsEtaPhiMinus/allHistos/meanHisto"))){
//      if ( j == 0 ) {
//        histoMassVsEtaPhiMinus[j]->GetXaxis()->SetTitle("negative muon #phi (rad)");
//        histoMassVsEtaPhiMinus[j]->GetYaxis()->SetTitle("negative muon #eta");
//        zMin = histoMassVsEtaPhiMinus[j]->GetMinimum();
//        zMax = histoMassVsEtaPhiMinus[j]->GetMaximum();
//        histoMassVsEtaPhiMinus[j]->Draw();
//      } else {
//        histoMassVsEtaPhiMinus[j]->SetMinimum(zMin);
//        histoMassVsEtaPhiMinus[j]->SetMaximum(zMax);
//        histoMassVsEtaPhiMinus[j]->Draw("SAME");
//      }
//      leg->AddEntry(histoMassVsEtaPhiMinus[j],LegLabels[j],"PL");  
//    }
//  }
//  //cmsprel->Draw("same");
//  leg->Draw("same");
//  c6->SaveAs(outDir+"MassVsEtaPhiMinus.png"); 

// newStyle->SetOptTitle(0);

 const Color_t colorlist_resol[7]={kBlack,kGreen,kBlue,kMagenta,kCyan,kTeal,kRed};
 const Int_t linestylelist_resol[7]={1,1,1,1,1,1,1};
 const Int_t stylelist_resol[7]={1,1,1,1,1,1,1};
 const Style_t markerstylelist_resol[7]={kOpenCircle,kOpenTriangleUp,kOpenTriangleUp,kOpenCircle,kOpenTriangleUp,kOpenCircle,kOpenTriangleUp};


//  //----------------- CANVAS C0S --------------//
//  c0s->SetFillColor(0);  
//  c0s->cd();

//  leg = new TLegend(0.50,0.25,0.90,0.40);  
//  leg->SetBorderSize(1);
//  leg->SetFillColor(0);
//  leg->SetTextFont(42);

// // Sigma VS muon phi plus -------------------------------
//  TH1D *histoSigmaVsPhiPlus[nOfFiles];
//  for(Int_t j=0; j < nOfFiles; j++) {     
   
//    TFile *fin = (TFile*)FileList->At(j);    
//    if (( histoSigmaVsPhiPlus[j] = (TH1D*)fin->Get("MassVsPhiPlus/allHistos/sigmaHisto"))){
//      histoSigmaVsPhiPlus[j]->SetLineStyle(linestylelist_resol[j]);
//      histoSigmaVsPhiPlus[j]->SetMarkerColor(colorlist_resol[j]);
//      histoSigmaVsPhiPlus[j]->SetLineColor(colorlist_resol[j]);
//      histoSigmaVsPhiPlus[j]->SetMarkerStyle(markerstylelist_resol[j]); 
//      //     histoSigmaVsPhiPlus[j]->SetMarkerSize(0.75);
//      if ( j == 0 ) {
//        histoSigmaVsPhiPlus[j]->GetXaxis()->SetTitle("positive muon #phi (rad)");
//        histoSigmaVsPhiPlus[j]->GetYaxis()->SetTitle("#sigma(M_{#mu#mu}) (GeV)");
//        //       histoSigmaVsPhiPlus[j]->GetYaxis()->SetRangeUser(88.5,93.5);
//        histoSigmaVsPhiPlus[j]->GetYaxis()->SetRangeUser(0.,3.);
//        histoSigmaVsPhiPlus[j]->GetXaxis()->SetRangeUser(-3.14,3.14);
//        histoSigmaVsPhiPlus[j]->Draw();
//      } else {
//        histoSigmaVsPhiPlus[j]->Draw("SAME");
//      }
//      leg->AddEntry(histoSigmaVsPhiPlus[j],LegLabels[j],"PL");  
//    }
//  }
//  //cmsprel->Draw("same");
//  leg->Draw("same");
//  c0s->SaveAs(outDir+"SigmaVsPhiPlus.png"); 


 //----------------- CANVAS C1S --------------//
 c1s->SetFillColor(0);  
 c1s->cd();

 leg = new TLegend(0.50,0.25,0.90,0.40);  
 leg->SetBorderSize(1);
 leg->SetFillColor(0);
 leg->SetTextFont(42);

 
// Sigma VS muon eta plus -------------------------------
 TH1D *histoSigmaVsEtaPlus[nOfFiles];
 for(Int_t j=0; j < nOfFiles; j++) {     
   
   TFile *fin = (TFile*)FileList->At(j);    
   if (( histoSigmaVsEtaPlus[j] = (TH1D*)fin->Get("MassVsEtaPlus/allHistos/sigmaHisto"))){
     histoSigmaVsEtaPlus[j]->SetLineStyle(linestylelist_resol[j]);
     histoSigmaVsEtaPlus[j]->SetMarkerColor(colorlist_resol[j]);
     histoSigmaVsEtaPlus[j]->SetLineColor(colorlist_resol[j]);
     histoSigmaVsEtaPlus[j]->SetMarkerStyle(markerstylelist_resol[j]); 
     //     histoSigmaVsEtaPlus[j]->SetMarkerSize(0.75);
     if ( j == 0 ) {
       histoSigmaVsEtaPlus[j]->GetXaxis()->SetTitle("positive muon #eta");
       histoSigmaVsEtaPlus[j]->GetYaxis()->SetTitle("#sigma(M_{#mu#mu}) (GeV)");
       //       histoSigmaVsEtaPlus[j]->GetYaxis()->SetRangeUser(88.5,93.5);
       histoSigmaVsEtaPlus[j]->GetYaxis()->SetRangeUser(0.,3.);
       histoSigmaVsEtaPlus[j]->GetXaxis()->SetRangeUser(-2.41,2.41);
       histoSigmaVsEtaPlus[j]->Draw();
     } else {
       histoSigmaVsEtaPlus[j]->Draw("SAME");
     }
     leg->AddEntry(histoSigmaVsEtaPlus[j],LegLabels[j],"PL");  
   }
 }
 //cmsprel->Draw("same");
 leg->Draw("same");
 c1s->SaveAs(outDir+"SigmaVsEtaPlus.png"); 


//  //----------------- CANVAS C2S --------------//
//  c2s->SetFillColor(0);  
//  c2s->cd();

//  leg = new TLegend(0.50,0.25,0.90,0.40);  
//  leg->SetBorderSize(1);
//  leg->SetFillColor(0);
//  leg->SetTextFont(42);

// // Sigma VS muon eta plus - eta minus  -------------------------------
//  TH1D *histoSigmaVsEtaPlusMinusDiff[nOfFiles];
//  for(Int_t j=0; j < nOfFiles; j++) {     
   
//    TFile *fin = (TFile*)FileList->At(j);    
//    if (( histoSigmaVsEtaPlusMinusDiff[j] = (TH1D*)fin->Get("MassVsEtaPlusMinusDiff/allHistos/sigmaHisto"))){
//      histoSigmaVsEtaPlusMinusDiff[j]->SetLineStyle(linestylelist_resol[j]);
//      histoSigmaVsEtaPlusMinusDiff[j]->SetMarkerColor(colorlist_resol[j]);
//      histoSigmaVsEtaPlusMinusDiff[j]->SetLineColor(colorlist_resol[j]);
//      histoSigmaVsEtaPlusMinusDiff[j]->SetMarkerStyle(markerstylelist_resol[j]); 
//      //     histoSigmaVsEtaPlusMinusDiff[j]->SetMarkerSize(0.75);
//      if ( j == 0 ) {
//        histoSigmaVsEtaPlusMinusDiff[j]->GetXaxis()->SetTitle("#eta pos. muon - #eta neg. muon");
//        histoSigmaVsEtaPlusMinusDiff[j]->GetYaxis()->SetTitle("#sigma(M_{#mu#mu}) (GeV)");
//        //       histoSigmaVsEtaPlusMinusDiff[j]->GetYaxis()->SetRangeUser(88.0,96.0);
//        histoSigmaVsEtaPlusMinusDiff[j]->GetYaxis()->SetRangeUser(0.,3.);
//        //histoSigmaVsEtaPlusMinusDiff[j]->GetYaxis()->SetRangeUser(90.60,90.75);
//        histoSigmaVsEtaPlusMinusDiff[j]->GetXaxis()->SetRangeUser(-3.2,3.2);
//        histoSigmaVsEtaPlusMinusDiff[j]->Draw();
//      } else {
//        histoSigmaVsEtaPlusMinusDiff[j]->Draw("SAME");
//      }
//      leg->AddEntry(histoSigmaVsEtaPlusMinusDiff[j],LegLabels[j],"PL");  
//    }
//  }
//  //cmsprel->Draw("same");
//  leg->Draw("same");
//  c2s->SaveAs(outDir+"SigmaVsEtaPlusMinusDiff.png"); 


//  //----------------- CANVAS C3S --------------//
//  c3s->SetFillColor(0);  
//  c3s->cd();

//  leg = new TLegend(0.35,0.15,0.55,0.35);  
//  leg->SetBorderSize(1);
//  leg->SetFillColor(0);
//  leg->SetTextFont(42);
 
// // Sigma VS muon pT  -------------------------------
//  TH1D *histoSigmaVsPt[nOfFiles];
//  for(Int_t j=0; j < nOfFiles; j++) {     
   
//    TFile *fin = (TFile*)FileList->At(j);    
//    if (( histoSigmaVsPt[j] = (TH1D*)fin->Get("MassVsPt/allHistos/sigmaHisto"))){
//      histoSigmaVsPt[j]->SetLineStyle(linestylelist_resol[j]);
//      histoSigmaVsPt[j]->SetMarkerColor(colorlist_resol[j]);
//      histoSigmaVsPt[j]->SetLineColor(colorlist_resol[j]);
//      histoSigmaVsPt[j]->SetMarkerStyle(markerstylelist_resol[j]); 
//      //     histoSigmaVsPt[j]->SetMarkerSize(0.75);
//      if ( j == 0 ) {
//        histoSigmaVsPt[j]->GetXaxis()->SetTitle("muon p_T (GeV)");
//        histoSigmaVsPt[j]->GetYaxis()->SetTitle("#sigma(M_{#mu#mu}) (GeV)");
//        //       histoSigmaVsPt[j]->GetYaxis()->SetRangeUser(88.0,96.0);
//        histoSigmaVsPt[j]->GetYaxis()->SetRangeUser(0.,3.);
//        //histoSigmaVsPt[j]->GetYaxis()->SetRangeUser(90.60,90.75);
//        histoSigmaVsPt[j]->GetXaxis()->SetRangeUser(15.,105.);
//        histoSigmaVsPt[j]->Draw();
//      } else {
//        histoSigmaVsPt[j]->Draw("SAME");
//      }
//      leg->AddEntry(histoSigmaVsPt[j],LegLabels[j],"PL");  
//    }
//  }
//  //cmsprel->Draw("same");
//  leg->Draw("same");
//  c3s->SaveAs(outDir+"SigmaVsPt.png"); 

 //----------------- CANVAS CFIT --------------//
 cFit->SetFillColor(0);  
 cFit->cd();
 Float_t nN = TMath::Sqrt(nOfFiles);
 Int_t nX = (Int_t)nN;
 if ( nN-nX > 0.5 ) nX++;
 Int_t nY = (Int_t)(nOfFiles/nX);
 std::cout << nX << " ," << nY << std::endl;
 cFit->Divide(nOfFiles,1);
 
// Mass VS muon phi plus -------------------------------
 TFile *ZFitFile = new TFile("ZFitFile.root","RECREATE");
 RooPlot *histoLineShape[nOfFiles];
 for(Int_t j=0; j < nOfFiles; j++) {     
   
   TFile *fin = (TFile*)FileList->At(j);    
   if (( histoLineShape[j] = (RooPlot*)fin->Get("hRecBestResAllEvents_Mass_frame"))){
     std::cout<<"Writing fit histogrem file n. "<<j<<std::endl;
     histoLineShape[j]->Write();
     cFit->cd(j+1);
     histoLineShape[j]->SetTitle(LegLabels[j]);
     histoLineShape[j]->Draw();
     histoLineShape[j]->GetXaxis()->SetTitle("M_{#mu#mu} (GeV)");
//      TPaveText *cmsprel2 = new TPaveText(0.19, 0.95, 0.95, 0.99, "NDC");
//      cmsprel2->SetTextSize(0.03);
//      cmsprel2->SetTextFont(42);
//      cmsprel2->SetFillColor(0);
//      cmsprel2->SetBorderSize(0);
//      cmsprel2->SetMargin(0.01);
//      cmsprel2->SetTextAlign(12); // align left
//      cmsprel2->AddText(0.666666, 0.5, LegLabels[j]);

   }
 }
 ZFitFile->Close();
 // cmsprel2->Draw("same");
 cFit->SaveAs("ZFitFile.root");


 
 return; 
};
int CompareAllHistos(TString input1 = "../../QCD_ref.root", TString input2 = "../../QCD_filter.root", TString outdir="../plots/QCD/", TString leg1="no cut", TString leg2="jet filter", TString name="RelValQCD", bool MakeTotal=false) {
	
	gROOT->Reset();             
  //SetAtlasStyle();
  setTDRStyle();
  gStyle->SetPalette(1);
  gStyle->SetErrorX(0.5);
  gROOT->ProcessLine(".!mkdir -p "+outdir);
  gROOT->ProcessLine(".!mkdir -p "+outdir+"/pdf");
  gROOT->ProcessLine(".!mkdir -p "+outdir+"/png");

  
  TString Names[2] = { input1, input2};
  
//  TString outdir = "../plots/QCD/";
  const uint nFiles = 2;
  TFile * f[nFiles];  	

  
  std::stringstream indexes;
  for(uint iFile = 0; iFile < nFiles; iFile++)
  {
	indexes.str("");
  	indexes << Names[iFile];
  	
	std::string input_file=indexes.str();
	f[iFile] = TFile::Open(input_file.c_str());
	if(!f[iFile]) {
		std::cerr << "Error: file " << input_file << " could not be opened." << std::endl; 
    return 1;
	}
	else std::cout << "File " << input_file << " succesfully opened!" << std::endl;
  
  }
 // const uint nProfile12=8;
  const uint nProfile=4;
 // const uint nWP=3;
 // const uint n123=3;
  const uint n12=5;
  
  TString dirNames[1] = { "tauDifferenceAnalyzer"}; //"mmet_zh","mmmt_zh","mmme_zh","eett_zh","eemt_zh","eeet_zh","eeem_zh"};
 // TString profileNames_12[nProfile12] = {"pt_DM","eta_DM","vx_DM","phi_DM","pt_DMall","eta_DMall","vx_DMall","phi_DMall"};
  TString prefix_12 = "h_eff_id_";
  TString suffix_12[n12] = {"_DM","_DMall","_loose","_medium","_tight"};
  
  TString profileX[nProfile] = {"pt","eta","vx","phi"};
  const uint nTotal=nProfile*n12;
  //~ TString profile123_prefix="h_eff_id_";
  //~ TString profile123_WP[nWP]={"_loose","_medium","_tight"};
  //~ TString profile123_suffix[n123]={"","_2","_3"};
  //~ 
  TProfile* profileHist1[nTotal][nFiles];
// TProfile* profileHist2[nTotal][nFiles];
  
  //TProfile* profileHist[n123][nProfile*nWP][nFiles];
  //~ TProfile* profileHistB[nProfile*nWP][nFiles];
  //~ TProfile* profileHistC[nProfile*nWP][nFiles];
  //~ 
  
  
 // std::stringstream name;
 for(uint iFile = 0; iFile < nFiles; iFile++)
  {
	for(uint iSuff=0; iSuff < n12; iSuff++)
	{		
		for(uint iProf12=0; iProf12< nProfile; iProf12++)
		{
			profileHist1[iProf12+iSuff*nProfile][iFile]=(TProfile*)f[iFile]->Get(TString(dirNames[0]+"/"+prefix_12+profileX[iProf12]+suffix_12[iSuff]));
		//	profileHist2[iProf12+iSuff*nProfile][iFile]=(TProfile*)f[iFile]->Get(TString(dirNames[0]+"/"+prefix_12+profileX[iProf12]+suffix_12[iSuff]));
		}
	}
  }
  
  //~ for(uint iFile = 0; iFile < nFiles; iFile++)
  //~ {
	//~ for(uint iWP=0; iWP<nWP; iWP++)
		//~ {
			//~ for(uint iProf123=0; iProf123< nProfile; iProf123++)
			//~ {
				//~ for(uint i123=0; i123 < n123; i123++)
				//~ {
					//~ std::cout << dirNames[0]+"/"+profile123_prefix+profileX[iProf123]+profile123_WP[iWP]+profile123_suffix[i123] << std::endl;
					//~ profileHist[i123][iWP*nProfile+iProf123][iFile]=(TProfile*)f[iFile]->Get(TString(dirNames[0]+"/"+profile123_prefix+profileX[iProf123]+profile123_WP[iWP]+profile123_suffix[i123]));
				//~ }
			//~ }
		//~ }
  //~ }
  
  
  
  
  TCanvas *c1 = new TCanvas("c1","",5,30,1024,1024);
  c1->SetGrid(0,0);
  c1->SetFillStyle(4000);
  c1->SetFillColor(10);
  c1->SetTicky();
  c1->SetObjectStat(0);
  
  TPad* histPad = new TPad("histPad","histPad",0.01,0.25,0.99,0.99);
  histPad->SetBottomMargin(0.02);
  histPad->Draw();
  
  TPad* diffPad = new TPad("diffPad","diffPad",0.01,0.01,0.99,0.25);
  diffPad->SetBottomMargin(0.3);
  diffPad->SetTopMargin(0.0);
  diffPad->Draw();
  
  // plotting
  
	TString XTitle[4] = {"True P_{T} [GeV]","True #eta", "nVx","True #phi"};
   // c1->SetLogy();
	std::cout << "hej hola " << std::endl;
	for(uint iProf12=0; iProf12< nTotal; iProf12++)
	{
		 int title_id=iProf12%4;
		
		 if(title_id!=2){
			 profileHist1[iProf12][0]->Rebin(5);
			 profileHist1[iProf12][1]->Rebin(5);
		 }
	
		 TH1D* baseHist = (TH1D*)profileHist1[iProf12][0]->Clone();
		 TH1D* overHist = (TH1D*)profileHist1[iProf12][1]->Clone();
		 
		 if(MakeTotal && iProf12>7){ 
			 double binLow = baseHist->GetXaxis()->GetBinLowEdge(baseHist->GetXaxis()->GetFirst());
			 double binUp = baseHist->GetXaxis()->GetBinUpEdge(baseHist->GetXaxis()->GetLast());
			 int nBins = baseHist->GetXaxis()->GetNbins();
			 
			 TH1D* newBaseHist = new TH1D(TString(baseHist->GetName())+"TOT",baseHist->GetTitle(),nBins,binLow,binUp);
			 TH1D* newDMHist = new TH1D("newDMHist","",nBins,binLow,binUp);
			 TH1D* newOverHist = new TH1D(TString(overHist->GetName())+"TOTover",baseHist->GetTitle(),nBins,binLow,binUp);
			 TH1D* newDMHist2 = new TH1D("newDMHist2","",nBins,binLow,binUp);
			 
			 
			 for(int iBin=0; iBin <= baseHist->GetNbinsX(); iBin++)
			 {
				newBaseHist->SetBinContent(iBin,baseHist->GetBinContent(iBin));
				newBaseHist->SetBinError(iBin,baseHist->GetBinError(iBin));
				newDMHist->SetBinContent(iBin,profileHist1[title_id][0]->GetBinContent(iBin));
				newDMHist->SetBinError(iBin,profileHist1[title_id][0]->GetBinError(iBin));
				newOverHist->SetBinContent(iBin,overHist->GetBinContent(iBin));
				newOverHist->SetBinError(iBin,overHist->GetBinError(iBin));
				newDMHist2->SetBinContent(iBin,profileHist1[title_id][1]->GetBinContent(iBin));
				newDMHist2->SetBinError(iBin,profileHist1[title_id][1]->GetBinError(iBin));	
				
			 }
			 newBaseHist->Multiply(newDMHist);
			 newOverHist->Multiply(newDMHist2);
			 baseHist=newBaseHist;
			 overHist=newOverHist;
			 delete newDMHist;
			 delete newDMHist2;
		 }
	
		 if(title_id==0) baseHist->GetXaxis()->SetRangeUser(0,100);
		 baseHist->GetXaxis()->SetLabelOffset(0.1);		
		 baseHist->GetXaxis()->SetTitle(XTitle[title_id]);
		 baseHist->GetYaxis()->SetTitle("Fake rate");
		 baseHist->SetMarkerStyle(20);
		 baseHist->SetMarkerSize(2);
		 baseHist->SetLineWidth(2);
		 
		 overHist->SetMarkerColor(kRed);
		 overHist->SetMarkerStyle(25);
		 overHist->SetMarkerSize(2);
		 overHist->SetLineWidth(2);
		 overHist->SetLineStyle(2);
		 overHist->SetLineColor(kRed);
		
		 int binmax = baseHist->GetMaximumBin();
	     double max = 1.2*(baseHist->GetBinContent(binmax)+baseHist->GetBinError(binmax));
	     int binmax2 = overHist->GetMaximumBin();
	     double max2 = 1.2*(overHist->GetBinContent(binmax2)+overHist->GetBinError(binmax2));
	     max = max2 > max ? max2 : max;
	 
	     baseHist->SetMaximum(10.0);
	     baseHist->SetMinimum(1e-3);
	     
		 
		 histPad->cd();	
			 histPad->SetLogy();
		 baseHist->Draw();
		 overHist->Draw("same");	
		 
		TLegend* leg = new TLegend(0.8,0.80,0.9,0.9,NULL,"brNDC");
		leg->SetFillColor(0);
		leg->SetTextSize(0.035);
		leg->SetBorderSize(0);
		
		leg->AddEntry(baseHist, leg1, "lp");
		leg->AddEntry(overHist, leg2, "lp");
		
		leg->Draw();
		 //~ 
		 
    TString lumist="";
	TPaveText *ll = new TPaveText(0.15, 0.95, 0.95, 0.99, "NDC");
	ll->SetTextSize(0.03);
	ll->SetTextFont(62);
	ll->SetFillColor(0);
	ll->SetBorderSize(0);
	ll->SetMargin(0.01);
	ll->SetTextAlign(12); // align left
	TString text = name;
	ll->AddText(0.01,0.7,text);
	text = "#sqrt{s} = 13 TeV";
	text = text + lumist;
	//  ll->SetTextAlign(32); // align right
	ll->AddText(0.7, 0.5, text);
	ll->Draw("same");
	  
	
	c1->Update();
	
	TH1D* h_diff=(TH1D*)baseHist->Clone();
	h_diff->Divide(overHist);
	diffPad->cd();
	diffPad->SetGridy();
	diffPad->SetGridx();
	
	h_diff->GetYaxis()->SetLabelSize(0.1);
    h_diff->GetYaxis()->SetTitleOffset(0.55);
    h_diff->GetYaxis()->SetTitleSize(0.12);
    h_diff->GetYaxis()->SetTitle("Ratio");
    h_diff->GetXaxis()->SetLabelSize(0.12);
    h_diff->GetXaxis()->SetLabelOffset(0.01);
    h_diff->GetXaxis()->SetTitleSize(0.15);
	h_diff->GetYaxis()->SetNdivisions(509);
	h_diff->SetMinimum(0.9);
	h_diff->SetMaximum(1.1);
	
	h_diff->Draw("hist");
	c1->Print(outdir+"/pdf/"+profileHist1[iProf12][0]->GetName()+".pdf");
	c1->Print(outdir+"/png/"+profileHist1[iProf12][0]->GetName()+".png");
	
	
	}
  
  
	return 0;
}