Esempio n. 1
0
void drawVarAllCent (double, double highPt, TH1D* hvar, TString var,TString varName,  TCut addCut, bool doLog, TString subName,bool onleMC, float maxY ) {
   
   TCanvas* c2 = new TCanvas(Form("c2_%s%s",var.Data(),subName.Data()),"",1000,400);
   makeMultiPanelCanvas(c2,3,1,0.0,0.0,0.2,0.15,0.02);
   for ( int icent = 1 ; icent<=3 ; icent++) {
      int lowCent = centBin_std[icent-1];
      int highCent = centBin_std[icent]-1; 
      c2->cd(4-icent);
      drawVariable(lowCent,highCent,60,10000,hvar, var, addCut,doLog,onleMC, maxY);
      if (doLog )    
	 gPad->SetLogy();
      
      drawText(Form("%.0f %% - %.0f %%", float((float)lowCent*2.5), float((float)(highCent+1)*2.5)),0.6580963,0.9069118,1,16);
      //  drawText("Photon E_{T} > 60GeV",0.3680963,0.6569118,1,15);
      if ( icent == 1 ) {
	 if (!onleMC) drawCMS2011(0.338,0.906,84,16);
      }
      if (icent==2) { 
	 TH1D* data = new TH1D("data11","",1,0,1);
	 data->Sumw2();
	 TH1D* mcSig = new TH1D("mcSig11","",1,0,1);
	 mcStyle(mcSig);
	 TH1D* mcBkg = new TH1D("mcBkg11","",1,0,1);
         dijetStyle(mcBkg);
	 TLegend* leg1 = new TLegend(0.1586395,0.7137837,0.9992263,0.9626509,NULL,"brNDC");
	 easyLeg(leg1,varName.Data());
	 if( !onleMC) leg1->AddEntry(data,"Data","pl");
	 leg1->AddEntry(mcSig,"MC #gamma-jet + HYDJET","fl");
	 leg1->AddEntry(mcBkg,"MC dijet Background","fl");
	 leg1->Draw();
      }
   
      drawPatch(0,0,0.05,0.14,0,1001,"NDC");
      drawPatch(0.93,0.05,1.01,0.14,0,1001,"NDC");

   }
   
   if (subName ==""){
      c2->SaveAs(Form("%s_MCvsDATA_allCent.pdf",var.Data()));
      c2->SaveAs(Form("%s_MCvsDATA_allCent.gif",var.Data()));
   }
   else {
      c2->SaveAs(Form("%s_MCvsDATA_allCent.pdf",subName.Data()));
      c2->SaveAs(Form("%s_MCvsDATA_allCent.gif",subName.Data()));
   }
   
   
}
void quickPhotonPurity_yj_multiTreeUtil(const TString configFile, const TString inputData, const TString inputMC, const TString outputName, const TString coll="pbpb")
{
  TH1::SetDefaultSumw2();
  CutConfiguration config = CutConfigurationParser::Parse(configFile.Data());
  TTree *configTree = setupConfigurationTreeForWriting(config);
   const char* photreeSt="";
   const char* hitreeSt="";
  if(coll=="pbpb") {
      photreeSt="EventTree";
      hitreeSt="HiTree";
  } else {
      photreeSt="ggHiNtuplizer/EventTree";
      hitreeSt="hiEvtAnalyzer/HiTree";
  } 

  TFile *dataFile = TFile::Open(pbpbDatafname);
  //TFile *dataFile = TFile::Open(inputData);
  TTree *dataTree = (TTree*)dataFile->Get(photreeSt);
  TTree *dataEvtTree = (TTree*)dataFile->Get(hitreeSt);
//  TTree *dataTree = (TTree*)dataFile->Get("ggHiNtuplizer/EventTree");
//  TTree *dataEvtTree = (TTree*)dataFile->Get("hiEvtAnalyzer/HiTree");
  //TTree *dataTree = (TTree*)dataFile->Get("photonSkimTree");

  dataTree->AddFriend(dataEvtTree);
  TFile *mcFile = TFile::Open(pbpbMCfname);
  //TFile *mcFile = TFile::Open(inputMC);
  TTree *mcTree = (TTree*)mcFile->Get("ggHiNtuplizer/EventTree");
  TTree *mcEvtTree = (TTree*)mcFile->Get("hiEvtAnalyzer/HiTree");
  //TTree *mcTree = (TTree*)mcFile->Get("photonSkimTree");
    mcTree->AddFriend(mcEvtTree);
  TFile *outFile = new TFile(outputName,"RECREATE");

  const TCut sidebandIsolation = "((pho_ecalClusterIsoR4 + pho_hcalRechitIsoR4 + pho_trackIsoR4PtCut20)>10) && ((pho_ecalClusterIsoR4 + pho_hcalRechitIsoR4 + pho_trackIsoR4PtCut20)<20) && phoHoverE<0.1";
  const TCut mcIsolation = "(pho_genMatchedIndex!= -1) && mcCalIsoDR04[pho_genMatchedIndex]<5 && abs(mcPID[pho_genMatchedIndex])<=22";
    cout << "JJ" << endl;
  //TCanvas *cPurity[nPTBINS];
  //TCanvas *cPurity = new TCanvas("c1","c1",337*nPTBINS,300*nCENTBINS/**2*/);
  TCanvas *cPurity = new TCanvas("c1","c1",400*nPTBINS,400*nCENTBINS);
  //cPurity->Divide(nPTBINS,2*nCENTBINS,0,0);
  //cPurity->Divide(nPTBINS,nCENTBINS,0,0);
  makeMultiPanelCanvas(cPurity, nPTBINS, nCENTBINS, 0.0, 0.0 , 0.2, 0.15, 0.005);
  cout << "nPTBINS = " << nPTBINS << ", nCENTBINS = " << nCENTBINS << ", nETABINS = " << nETABINS << endl;
  for(Int_t i = 0; i < nPTBINS; ++i) {
    cout << "i : " << i << endl;
    //cPurity[i] = new TCanvas(Form("c1_%d",i),"",1920,1000);
    //cPurity[i]->Divide(nETABINS,2,0,0);
    for(Int_t j = 0; j < nCENTBINS; ++j) {
    cout << "j : " << j << endl;
      for(Int_t k = 0; k< nETABINS; ++k) {
    cout << "k : " << k << endl;
	TString ptCut = Form("(phoEt >= %f) && (phoEt < %f)",
			     PTBINS[i], PTBINS[i+1]);
	TString centCut = Form("((hiBin) >= %i) && ((hiBin) < %i)",
			     CENTBINS[j], CENTBINS[j+1]);
	TString etaCut = Form("(phoEta >= %f) && (phoEta < %f)",
			      ETABINS[k], ETABINS[k+1]);

	//TString pPbflipetaCut = Form("(eta*((run>211257)*-1+(run<211257)) >=%f) && (eta*((run>211257)*-1+(run<211257)) <%f)",
	//			     ETABINS[k], ETABINS[k+1]);

	TCut dataCandidateCut = sampleIsolation && etaCut && ptCut && centCut;
	TCut sidebandCut =  sidebandIsolation && etaCut && ptCut && centCut;
	TCut mcSignalCut = dataCandidateCut && mcIsolation;

	// if(nETABINS != 1)
	// {
	//   dataCandidateCut = sampleIsolation && pPbflipetaCut && ptCut && centCut;
	//   sidebandCut =  sidebandIsolation && pPbflipetaCut && ptCut && centCut;
	//   mcSignalCut =  sampleIsolation && etaCut && ptCut && centCut && mcIsolation;
	// }

	PhotonPurity fitr = getPurity(config, dataTree, mcTree,
				      dataCandidateCut, sidebandCut,
				      mcSignalCut);

	//cPurity[i*nCENTBINS+j] = new TCanvas(Form("cpurity%d",i*nCENTBINS+j),
	// 					 "",500,500);
    cout << "centBin = " << centCut << ", ptBin : " << ptCut << ",,,, canvas # : "<<2*(k+j)*nPTBINS+i+1 << endl;
    cout << "k = " << k << ", j = " << j << ", i = " << i << endl;
    //cPurity->cd(2*(k+j)*nPTBINS+i+1);
	cPurity->cd((k+j)*nPTBINS+i+1);
	//cPurity[i]->cd(k+1);

	TH1F *hSigPdf = fitr.sigPdf;
	TH1F *hBckPdf = fitr.bckPdf;
	TH1D *hData1  = fitr.data;
	hSigPdf->Add(hBckPdf);

	TString name = "mcfit_total_ptbin";
	name += i;

	// outFile->cd();
	// hSigPdf->SetName(name);
	// hSigPdf->Write();


	// TH1D *err = (TH1D*)hSigPdf->Clone("error");
	// TH1D *tempErr[4];
	// err->Reset();
	// for(int s = 0; s < 4; s++)
	// {
	//   if(s == 0)
	//     tempErr[s] = (TH1D*)TFile::Open("photonPurity_sys_loose.root")->Get(name);
	//   else if(s ==1)
	//     tempErr[s] = (TH1D*)TFile::Open("photonPurity_sys_tight.root")->Get(name);
	//   else if(s ==2)
	//     tempErr[s] = (TH1D*)TFile::Open("photonPurity_sys_sigshift.root")->Get(name);
	//   else if(s ==3)
	//     tempErr[s] = (TH1D*)TFile::Open("photonPurity_sys_bkgshift.root")->Get(name);
	//   tempErr[s]->Divide(hSigPdf);
	//   for (Int_t l=1; l<=tempErr[s]->GetNbinsX();l++)
	//   {
	//     tempErr[s]->SetBinContent(l, TMath::Abs(tempErr[s]->GetBinContent(l))-1);
	//   }
	// }
	// for (Int_t l=1; l<=err->GetNbinsX();l++)
	// {
	//   Double_t errVal = TMath::Sqrt(tempErr[0]->GetBinContent(l)*tempErr[0]->GetBinContent(l) +
	// 				tempErr[1]->GetBinContent(l)*tempErr[1]->GetBinContent(l) +
	// 				tempErr[2]->GetBinContent(l)*tempErr[2]->GetBinContent(l) +
	// 				tempErr[3]->GetBinContent(l)*tempErr[3]->GetBinContent(l)
	//     );
	//   err->SetBinContent(l, errVal);
	// }

	// plot stacked histos
	handsomeTH1(hSigPdf);
	mcStyle(hSigPdf);
	sbStyle(hBckPdf);
	cleverRange(hSigPdf,1.5);
	hSigPdf->SetAxisRange(0.001,0.024,"X");
	hSigPdf->SetNdivisions(505);
	hSigPdf->GetYaxis()->SetTitleOffset(1.75);
	hSigPdf->SetYTitle("Entries");
	hSigPdf->SetXTitle("#sigma_{#eta #eta}");

	hSigPdf->DrawCopy("hist");
	//drawSys(hSigPdf, err, kRed, -1, 0.001);
	hBckPdf->DrawCopy("same hist");
	hData1->DrawCopy("same");

	Float_t xpos = 0.44;
	if(2*(k+j)*nPTBINS+i+1 == 1)
	  xpos = 0.54;

	TLegend *t3=new TLegend(xpos, 0.45, 0.92, 0.71);
	t3->AddEntry(hData1,LABEL,"pl");
	t3->AddEntry(hSigPdf,"Signal","lf");
	t3->AddEntry(hBckPdf,"Background","lf");
	t3->SetFillColor(0);
	t3->SetBorderSize(0);
	t3->SetFillStyle(0);
	t3->SetTextFont(43);
	t3->SetTextSize(20);
	//if(i == 0)
	// TH1D *dummyHist = new TH1D("dummyHist","",10,0,10);
	// dummyHist->Fill(1);
	// dummyHist->SetFillColor(kRed);
	// dummyHist->SetLineColor(kRed);
	// dummyHist->SetFillStyle(1001);
	// t3->AddEntry(dummyHist,"MC Sys. Error","f");
	// if(i == 0)
	//   t3->Draw();

	if(i == 3)
	{
	  drawText("CMS Preliminary", xpos, 0.68,1,20);
	  drawText("PbPb #sqrt{s}_{_{NN}}=5.02 TeV", xpos, 0.60,1,20);
	  drawText("#intL = 404 #ub^{-1}", xpos, 0.50,1,20);
	}



	//drawText("|#eta_{#gamma}| < 1.479",0.5680963,0.9);
	//drawText(Form("%f shift",fitr.sigMeanShift),0.57,0.82);
	//drawText("Background Correction",0.57,0.82);
	//drawText("bkg Tighter",0.57,0.82);
	//if(nPTBINS != 1)
	drawText(Form("%.0f GeV < p_{T}^{#gamma} < %.0f GeV",
		      PTBINS[i], PTBINS[i+1]),
		 xpos, 0.90,1,20);
	// if(/*nCENTBINS != 1 && */i ==0)
	drawText(Form("%.0f - %.0f%c",
		      CENTBINS[j]/2., CENTBINS[j+1]/2.,'%'),
		 xpos, 0.82,1,20);
	// if(nETABINS != 1)
	//   drawText(Form("%.3f < #eta_{#gamma} < %.3f",
	// 		ETABINS[k], ETABINS[k+1]),
	// 	   xpos, 0.82,1,20);
	drawText(Form("Purity (#sigma_{#eta#eta} < 0.01) : %.2f", (Float_t)fitr.purity),
		 xpos, 0.76,1,20);
	drawText(Form("#chi^{2}/ndf : %.2f", (Float_t)fitr.chisq),
		 xpos, 0.45,1,20);


	// //plot ratio
	// cPurity->cd((2*(j+k)+1)*nPTBINS+i+1);
	// //cPurity[i]->cd(nETABINS + k+ 1);
	// TH1D* ratio = (TH1D*)hData1->Clone("ratio");
	// ratio->Divide(hData1, hSigPdf, 1, 1);
	// ratio->SetMinimum(0);
	// ratio->SetMaximum(3);
	// ratio->SetXTitle("#sigma_{#eta #eta}");
	// ratio->GetXaxis()->CenterTitle();
	// ratio->SetYTitle("Data/Fit");
	// ratio->GetYaxis()->CenterTitle();
	// ratio->DrawCopy("E");
	// TLine *line = new TLine(0,1,maxSIGMA,1);
	// line->SetLineStyle(2);
	// line->Draw("same");

	// TString savename = Form("purity_pA_barrel_pt%.0f_hf%.0f_plot",
	// 			PTBINS[i], CENTBINS[j]);
	// cPurity[i*nCENTBINS+j]->SaveAs(savename+".C");
	// cPurity[i*nCENTBINS+j]->SaveAs(savename+".pdf");
	// cPurity[i*nCENTBINS+j]->SaveAs(savename+".png");

      }
    }
    //cPurity[i]->SaveAs(Form("pPb_purity_etadep_wshift_ptbin%.0f.png",PTBINS[i]));
    //cPurity[i]->SaveAs(Form("pPb_purity_etadep_noshift_inclusive.png"));
  }
  outFile->cd();
  configTree->Write();
  cPurity->Write();
  outFile->Close();
  //cPurity->SaveAs(SAVENAME+".C");
  //cPurity->SaveAs(SAVENAME+".png");
  //cPurity->SaveAs(SAVENAME+".pdf");
}
Esempio n. 3
0
void drawVariable(int lowCent, int highCent, double lowPt, double highPt, TH1D* hvar, TString var, TCut addCut, bool doLog ,bool onleMC, float maxY ) { 
   
   TCut ptCut  = Form("pt>%.f && pt <%.f",lowPt,highPt);
   TString ptCutS = Form("E_{T} : %.0f - %.0f GeV",lowPt,highPt);
   if ( highPt > 200 ) 
      ptCutS = Form("E_{T} > %.0f GeV",lowPt);
 
   
   char* fnamePho50 = "forest/barrelHiForestPhoton_MCphoton50_37k.root";
   float csPho50 = 6.663e-7;
   float nEvtPho50     = 51200;
   float weightPho50 = csPho50/nEvtPho50;
   
   char* fnamePho80 = "forest/barrelHiForestPhoton_MCphoton80_25k.root";
   float csPho80 = 8.731e-8;
   float nEvtPho80     = 26000;
   float weightPho80 = csPho80/nEvtPho80;
   
   char* fnameEmj80 = "forest/barrelHiForestPhoton_MCemJet80_41007events.root";
   double csDij80 = 9.869e-5;
   float nEvtEmj80     = 60000;
   float effEmj80     = 0.204;
   float weightEmj80 = csDij80*effEmj80/nEvtEmj80;
   
   char* fnameEmj120 = "forest/barrelHiForestPhoton_MCemJet120_25308events.root";;
   float nEvtEmj120     = 14000;
   double csDij120 = 1.127e-5;
   float effEmj120     = 0.54;
   float weightEmj120 = csDij120*effEmj120/nEvtEmj120;

   
   TString fname1 = "forest/barrelHiForestPhotonV6.root";
   TFile *f1  =new TFile(fname1.Data());
   TTree *tdata = (TTree*)f1->Get("yongsunPhotonTree");
   tdata->AddFriend("yEvt=yongsunHiEvt"    ,fname1.Data());
   tdata->AddFriend("yskim=yongsunSkimTree"   ,fname1.Data());
   tdata->AddFriend("yhlt=yongsunHltTree"     ,fname1.Data());
   tdata->AddFriend("tgj"     ,fname1.Data());
   
   multiTreeUtil* photon1 = new multiTreeUtil();
   photon1->addFile( fnamePho50,  "yongsunPhotonTree", "" , weightPho50);
   photon1->addFile( fnamePho80,  "yongsunPhotonTree", "" , weightPho80);
   photon1->AddFriend("yEvt=yongsunHiEvt");
   photon1->AddFriend("tgj");
   
   multiTreeUtil* bkgs1 = new multiTreeUtil();
   bkgs1->addFile( fnameEmj80,  "yongsunPhotonTree", "" , weightEmj80);
   bkgs1->addFile( fnameEmj120,  "yongsunPhotonTree", "" , weightEmj120);
   bkgs1->AddFriend("yEvt=yongsunHiEvt");
   bkgs1->AddFriend("tgj");
   
   TCut evtSelCut = "tgj.anaEvtSel";
   TCut centCut     = Form("(yEvt.hiBin >= %d) && (yEvt.hiBin<= %d)",lowCent,highCent);
   TCut photonJetCut  = "tgj.photonEt>60  &&  tgj.jetEt>30";
   TCut dphiCut= "acos(cos(tgj.photonPhi-tgj.jetPhi))>2.0944";
   TCut lPhotCut= "leading==1";
   TCut generalCutMC   = photonJetCut && dphiCut && lPhotCut && centCut && addCut;
   TCut generalCutData = generalCutMC && evtSelCut;

   //   TCut srIsoCut = FisherCut && "sigmaIetaIeta <0.010";
   
   TCut finalCutData = generalCutData;// && srIsoCut ;
   TCut finalCutPho  = generalCutMC;// && srIsoCut ;
   TCut finalCutEmj  = generalCutMC;// && srIsoCut ;
   
   TH1D* tempHist    = (TH1D*)hvar->Clone(Form("%s_data",hvar->GetName()));
   TH1D* tempHistMC1 = (TH1D*)hvar->Clone(Form("%s_MC1",hvar->GetName()));
   TH1D* tempHistMC2 = (TH1D*)hvar->Clone(Form("%s_MC2",hvar->GetName()));
   
   tdata->Draw(Form("%s>>%s",var.Data(),tempHist->GetName()), finalCutData);
   photon1->Draw2(tempHistMC1, var.Data(), finalCutPho,"ncoll");
   bkgs1->Draw2  (tempHistMC2, var.Data(), finalCutPho,"ncoll");
   
   tempHist->Sumw2();
   tempHistMC1->Sumw2();
   tempHistMC2->Sumw2();
   
   handsomeTH1(tempHist);
   handsomeTH1(tempHistMC1);
   handsomeTH1(tempHistMC2);
   mcStyle(tempHistMC1);
   dijetStyle(tempHistMC2);
   if (!onleMC)       tempHistMC1->Add(tempHistMC2);
      
   float theNorm = tempHistMC1->Integral();
   tempHistMC1->Scale(1./theNorm);
   if (onleMC) 
      tempHistMC2->Scale(1./tempHistMC2->Integral());
   else
      tempHistMC2->Scale(1./theNorm);

   tempHist->Scale(1./tempHist->Integral());
   
   if ( doLog) cleverRangeLog(tempHistMC1,10,1.e-5);
   else cleverRange(tempHistMC1,2);
   tempHistMC1->SetAxisRange(0.0005,maxY,"Y");
   tempHistMC1->DrawCopy("hist");//hist");                                                                                   
   TH1D* tempHistMC1Err = (TH1D*)tempHistMC1->Clone("temptemp");
   tempHistMC1Err->SetLineColor(2);
   tempHistMC1Err->SetMarkerColor(2);
   tempHistMC1Err->SetMarkerSize(0);
   tempHistMC1Err->Draw("same");
   tempHistMC2->DrawCopy("hist same");//hist");                                                                                                                            
   if ( !onleMC)
      tempHist->DrawCopy("same");//hist");                                                                                                                                                                                   
   
}