void CMeasuredGrid::Draw(Display::IDisplayPtr pDisplay) { IMapGrid::Draw(pDisplay); DrawBorder(pDisplay); DrawGrid(pDisplay); DrawTick(pDisplay); DrawLabel(pDisplay); }
void balanceMetVsAj(TString infname = "dj_HCPR-J50U-hiGoodMergedTracks_OfficialSelv2_Final0_120_50.root", TCut myCut = "cent<30", char *title = "",bool drawLegend = false, bool drawSys = true ) { // =========================================================== // Get Input // =========================================================== TFile *inf = new TFile(infname); TTree *t = (TTree*)inf->Get("ntjt"); t->SetAlias("metxMergedAll","(metOutOfConex0+metOutOfConex1+metOutOfConex2+metOutOfConex3+metOutOfConex4+metOutOfConex5)"); t->SetAlias("metxMerged0","(metOutOfConex0)"); t->SetAlias("metxMerged1","(metOutOfConex1)"); t->SetAlias("metxMerged2","(metOutOfConex2)"); t->SetAlias("metxMerged3","(metOutOfConex3)"); t->SetAlias("metxMerged4","(metOutOfConex4+metOutOfConex5)"); // =========================================================== // Analysis Setup // =========================================================== const int nBin = 5; double bins[nBin+1] = {0.5,1.0,1.5,4,8,1000}; int colors[5] = {kBlue-10,kYellow-7, kOrange-2,kGreen-5,kRed-3}; const int nBinAj = 4; double ajBins[nBinAj+1] = {0.0001,0.11,0.22,0.33,0.49999}; // Selection cut TCut evtCut = "nljet>120&&abs(nljetacorr)<2&&aljet>50&&abs(aljetacorr)<2&&jdphi>2./3*TMath::Pi()&&!maskEvt"; // TCut evtCut = "nljet>120&&abs(nljetacorr)<2&&aljet>50&&abs(aljetacorr)<2&&jdphi>3&&!maskEvt"; cout << "Sel evt: " << t->GetEntries(evtCut&&myCut) << endl; // =========================================================== // Find Average Weights // =========================================================== TH1D *hw[nBinAj]; float meanWt[nBinAj]; for ( int iaj = 0 ; iaj< nBinAj ; iaj++) { hw[iaj] = new TH1D(Form("hw_aj%d",iaj),"",1000,0,100); TCut ajCut = Form("Aj>%f && Aj<%f", ajBins[iaj],ajBins[iaj+1]); t->Draw(Form("weight>>hw_aj%d",iaj), evtCut&&myCut&&ajCut); meanWt[iaj] = hw[iaj]->GetMean(); cout << " <Weight>: " << meanWt[iaj] << endl; } // =========================================================== // Draw Weighted Averages // =========================================================== TH1D *ppos[nBin]; TH1D *pneg[nBin]; TH1D *pe[nBin]; for (int i=0;i<nBin;i++) { TH1D *h1 = new TH1D(Form("h1%d",i),"",nBinAj,ajBins); TH1D *h2 = new TH1D(Form("h2%d",i),"",nBinAj,ajBins); TH1D *he[nBinAj]; // ================================= // Get Weighted Mean for each Aj bin // ================================= h1->Sumw2(); h2->Sumw2(); t->Draw(Form("Aj>>h1%d",i), "weight"*(evtCut&&myCut)); t->Draw(Form("Aj>>h2%d",i), Form("((-weight*metxMerged%d))",i)*(evtCut&&myCut)); pe[i]=(TH1D*)h2->Clone(); pe[i]->SetName(Form("p%d",i)); pe[i]->Divide(h1); ppos[i] = new TH1D(Form("ppos%d",i),"",nBinAj,ajBins); ppos[i]->SetLineColor(1); ppos[i]->SetMarkerColor(colors[i]); ppos[i]->SetFillColor(colors[i]); ppos[i]->SetFillStyle(1001); pneg[i] = new TH1D(Form("pneg%d",i),"",nBinAj,ajBins); pneg[i]->SetLineColor(1); pneg[i]->SetMarkerColor(colors[i]); pneg[i]->SetFillColor(colors[i]); pneg[i]->SetFillStyle(1001); // ================================= // Caculated Stat Error of the Mean // ================================= cout << "Stat Error for pt bin " << i << ": "; for ( int iaj = 0 ; iaj< nBinAj ; iaj++) { he[iaj] = new TH1D(Form("he%d_aj%d",i,iaj),"",100,-200,200); TCut ajCut = Form("Aj>%f && Aj<%f", ajBins[iaj],ajBins[iaj+1]); t->Draw(Form("((metxMerged%d))>>he%d_aj%d",i,i,iaj), "weight" * evtCut&&myCut&&ajCut); float theError = he[iaj]->GetRMS()/ (sqrt(he[iaj]->GetEntries())); cout << theError << " "; pe[i]->SetBinError(iaj+1, theError); } cout << endl; } // Stack for (int i=nBin-1;i>=0;i--) { for(int iaj = 0 ; iaj< nBinAj ; iaj++) { double posVal=0, negVal=0; double posValErr=0, negValErr=0; if (i!=nBin-1) { posVal = ppos[i+1]->GetBinContent(iaj+1); posValErr = ppos[i+1]->GetBinError(iaj+1); negVal = pneg[i+1]->GetBinContent(iaj+1); negValErr = pneg[i+1]->GetBinError(iaj+1); } if (pe[i]->GetBinContent(iaj+1)<0) { negVal+=pe[i]->GetBinContent(iaj+1); negValErr=pe[i]->GetBinError(iaj+1); posValErr=0; } else if (pe[i]->GetBinContent(iaj+1)>0) { posVal+=pe[i]->GetBinContent(iaj+1); posValErr=pe[i]->GetBinError(iaj+1); negValErr=0; } ppos[i]->SetBinContent(iaj+1,posVal); ppos[i]->SetBinError(iaj+1,posValErr); pneg[i]->SetBinContent(iaj+1,negVal); pneg[i]->SetBinError(iaj+1,negValErr); } } TH1D *pall; TH1D *pallE; TH1D *h1 = new TH1D(Form("hAll1"),"",nBinAj,ajBins); TH1D *h2 = new TH1D(Form("hAll2"),"",nBinAj,ajBins); h1->Sumw2(); h2->Sumw2(); t->Draw(Form("Aj>>hAll1"), "weight"*(evtCut&&myCut)); t->Draw(Form("Aj>>hAll2"), Form("((-weight*metxMergedAll))")*(evtCut&&myCut)); pall=(TH1D*)h2->Clone(); pall->SetName("pall"); pall->Divide(h1); // replace the sys error from pallE to pall TH1D *he[nBinAj]; cout << "Stat Error for All pt: "; for ( int iaj = 0 ; iaj< nBinAj ; iaj++) { he[iaj] = new TH1D(Form("heAll_aj%d",iaj),"",100,-200,200); TCut ajCut = Form("Aj>%f && Aj<%f", ajBins[iaj],ajBins[iaj+1]); t->Draw(Form("((metxMergedAll))>>heAll_aj%d",iaj), "weight" * evtCut&&myCut&&ajCut); float theError = he[iaj]->GetRMS()/ (sqrt(he[iaj]->GetEntries())); cout << theError << " "; pall->SetBinError(iaj+1, theError); } cout << endl; pall->SetXTitle("A_{J}"); pall->SetYTitle("<#slash{p}_{T}^{#parallel}> (GeV/c)"); pall->GetXaxis()->CenterTitle(); pall->GetYaxis()->CenterTitle(); pall->GetXaxis()->SetLabelSize(22); pall->GetXaxis()->SetLabelFont(43); pall->GetXaxis()->SetTitleSize(24); pall->GetXaxis()->SetTitleFont(43); pall->GetYaxis()->SetLabelSize(22); pall->GetYaxis()->SetLabelFont(43); pall->GetYaxis()->SetTitleSize(24); pall->GetYaxis()->SetTitleFont(43); pall->GetXaxis()->SetTitleOffset(1.8); pall->GetYaxis()->SetTitleOffset(2.4); pall->SetNdivisions(505); pall->SetAxisRange(-59.9,59.9,"Y"); pall->SetMarkerSize(1); pall->Draw("E"); float addSys = 0; if ( drawSys==1) addSys=0; // No sys error at this moment // ==================== // Finally Draw // ==================== for (int i=0;i<nBin;++i) { ppos[i]->SetLineWidth(1); ppos[i]->Draw("hist same"); pneg[i]->SetLineWidth(1); pneg[i]->Draw("hist same"); } // ==================== // Draw Statistical Error bars // ==================== for (int i=0;i<nBin;++i) { if ( i==0 ) drawErrorShift(ppos[i],-0.016, addSys); if ( i==1 || i==4) drawErrorShift(ppos[i],-0.008,addSys); if ( i==2 ) drawErrorShift(ppos[i],0.008,addSys); if ( i==3 ) drawErrorShift(ppos[i],0.016,addSys); if ( i==0 ) drawErrorShift(pneg[i],-0.016, addSys); if ( i==1 || i==4) drawErrorShift(pneg[i],-0.008,addSys); if ( i==2 ) drawErrorShift(pneg[i],0.008,addSys); if ( i==3 ) drawErrorShift(pneg[i],0.016,addSys); } pall->Draw("E same"); // ==================== // Draw Systematic Errors // ==================== if (drawSys == 1) { for(int i = 0; i < nBinAj; ++i){ double x = pall->GetBinCenter(i+1); double y = pall->GetBinContent(i+1); // Quote the difference between GEN and RECO in >8 Bin (20%) before adjusting eff as systematics double err = fabs(pe[nBin-1]->GetBinContent(i+1)*0.2); DrawTick(y,err,err,x,1,0.02,1); } } // ==================== // Draw Legend // ==================== TLegend *leg = new TLegend(0.10,0.68,0.70,0.96); leg->SetFillStyle(0); leg->SetBorderSize(0); leg->SetTextFont(63); leg->SetTextSize(16); leg->AddEntry(pall,Form("> %.1f GeV/c",bins[0]),"pl"); for (int i=0;i<nBin;++i) { if (i!=nBin-1){ leg->AddEntry(ppos[i],Form("%.1f - %.1f GeV/c",bins[i],bins[i+1]),"f"); } else { leg->AddEntry(ppos[i],Form("> %.1f GeV/c",bins[i]),"f"); } } if (drawLegend) leg->Draw(); TLine * l0 = new TLine(0,0,0.5,0); l0->SetLineStyle(2); l0->Draw(); TLine * l1 = new TLine(0.0001,-10,0.0001,10); l1->Draw(); TText *titleText = new TText(0.3,30,title); titleText->Draw(); }
void balanceMetVsAj(TString infname, TString insrc, TString metType = "",bool drawLegend = false, bool drawSys = true ) { // =========================================================== // Get Input // =========================================================== TFile *inf = new TFile(infname); // =========================================================== // Analysis Setup // =========================================================== Int_t plotLayer=10; // 0 only >0.5, 1 >0.5 and highpt, 10 ~ all cout << infname << " " << insrc << endl; TH1D *ppos[nptrange+1]; TH1D *pneg[nptrange+1]; TH1D *pe[nptrange+1]; // ================================= // Get Weighted Mean for each Aj bin // ================================= // Book histograms for (int i=0;i<nptrange+1;i++) { pe[i]=new TH1D(Form("p%d",i),"",nAjBin,AjBins); } TTree * tm = (TTree*)inf->Get("t"+insrc); // Find cone boundary int coneidr=0; for (int idr=0; idr<ndrbin; ++idr) { if (drbins[idr]>=0.8) { coneidr=idr; break; } } // Get Values for (int a=0; a<nAjBin; ++a) { float sum=0, sumerr=0; for (int i=0;i<nptrange+1;i++) { // hname = Form("%s_merge%d_%s",insrc.Data(),i,metType.Data()); TString hname = "hMpt"+insrc; if (i<nptrange) hname+=Form("_pt%d",i); else hname+=Form("_ptall"); // TH2D * hMptAj = (TH2D*)inf->Get(hname); // cout << hname << " " << hMptAj << endl; // TH1D * hMpt = hMptAj->ProjectionY(hname+Form("_a%d",a),a+1,a+1); hname+=Form("_a%d",a); TString cut = Form("Aj>=%.3f&&Aj<%.3f",AjBins[a],AjBins[a+1]); TH1D * hMpt = new TH1D(hname,cut,1600,-800,800); // Define Observable: limited dR TString var; int idrbeg,idrend; if (metType=="InCone") { idrbeg=0; idrend=coneidr; } else { idrbeg=coneidr; idrend=ndrbin; } if (i<nptrange) { var = Form("xptdr[%d][%d]",i,idrbeg); for (int idr=idrbeg+1; idr<idrend; ++idr) { var+= Form("+xptdr[%d][%d]",i,idr); } } else { var = Form("Sum$(xptdr[][%d])",idrbeg); for (int idr=idrbeg+1; idr<idrend; ++idr) { var+= Form("+Sum$(xptdr[][%d])",idr); } } // Now make histograms if (a==0) cout << metType << ": " << var << endl; tm->Project(hname,var,cut); float mpt = hMpt->GetMean(); float mpterr = hMpt->GetRMS()/sqrt(hMpt->GetEntries()); if (doResCorr) { if (i==nptrange) { mpt-=(pe[nptrange-4]->GetBinContent(a+1)*0.2); mpt-=(pe[nptrange-3]->GetBinContent(a+1)*0.2); mpt-=(pe[nptrange-2]->GetBinContent(a+1)*0.2); mpt-=(pe[nptrange-1]->GetBinContent(a+1)*0.2); } else if (i>=nptrange-4) { mpt*=0.8; } } pe[i]->SetBinContent(a+1,mpt); pe[i]->SetBinError(a+1,mpterr); // cout << hMpt->GetName() << ": " << hMpt->GetEntries() << " mean: " << pe[i]->GetBinContent(a+1) << " err: " << pe[i]->GetBinError(a+1) << endl; if (i<nptrange) { sum+=mpt; sumerr+=pow(mpterr,2); } } cout << "Aj " << a << " pt sum: " << sum << endl; } StackHistograms(nptrange,pe,ppos,pneg,nAjBin); TH1D *pall=pe[nptrange]; pall->SetXTitle("A_{J}"); pall->SetYTitle("<#slash{p}_{T}^{#parallel}> (GeV/c)"); pall->GetXaxis()->CenterTitle(); pall->GetYaxis()->CenterTitle(); pall->GetXaxis()->SetLabelSize(22); pall->GetXaxis()->SetLabelFont(43); pall->GetXaxis()->SetTitleSize(24); pall->GetXaxis()->SetTitleFont(43); pall->GetYaxis()->SetLabelSize(22); pall->GetYaxis()->SetLabelFont(43); pall->GetYaxis()->SetTitleSize(24); pall->GetYaxis()->SetTitleFont(43); pall->GetXaxis()->SetTitleOffset(1.8); pall->GetYaxis()->SetTitleOffset(2.4); pall->SetNdivisions(505); pall->SetAxisRange(-59.9,59.9,"Y"); pall->SetMarkerSize(1); pall->SetMarkerColor(kBlack); pall->SetMarkerStyle(kFullCircle); pall->Draw("E"); float addSys = 0; if ( drawSys==1) addSys=0; // No sys error at this moment // ==================== // Finally Draw // ==================== for (int i=0;i<nptrange;++i) { if (plotLayer==0) continue; if (plotLayer==1&&i!=nptrange-1) continue; ppos[i]->SetLineWidth(1); ppos[i]->SetFillStyle(1001); ppos[i]->Draw("hist same"); pneg[i]->SetLineWidth(1); pneg[i]->SetFillStyle(1001); pneg[i]->Draw("hist same"); // PrintHistogram(ppos[i]); // PrintHistogram(pneg[i]); } // ==================== // Draw Statistical Error bars // ==================== for (int i=0;i<nptrange;++i) { if (plotLayer==0) continue; if (plotLayer==1&&i!=nptrange-1) continue; if ( i==0 ) drawErrorShift(ppos[i],-0.016, addSys); if ( i==1 || i==4) drawErrorShift(ppos[i],-0.008,addSys); if ( i==2 ) drawErrorShift(ppos[i],0.008,addSys); if ( i==3 ) drawErrorShift(ppos[i],0.016,addSys); if ( i==0 ) drawErrorShift(pneg[i],-0.016, addSys); if ( i==1 || i==4) drawErrorShift(pneg[i],-0.008,addSys); if ( i==2 ) drawErrorShift(pneg[i],0.008,addSys); if ( i==3 ) drawErrorShift(pneg[i],0.016,addSys); } pall->Draw("E same"); // PrintHistogram(pall); // ==================== // Draw Systematic Errors // ==================== if (drawSys == 1) { for(int i = 0; i < nAjBin; ++i){ double x = pall->GetBinCenter(i+1); double y = pall->GetBinContent(i+1); // Quote the difference between GEN and RECO in >8 Bin (20%) before adjusting eff as systematics double errReco = -pe[nptrange-1]->GetBinContent(i+1)*0.2; double errBck = 3.0; // compare HYDJET+SIG to SIG double err = sqrt(errReco*errReco+errBck*errBck); DrawTick(y,err,err,x,1,0.02,1); } } // ==================== // Draw Legend // ==================== TLegend *leg = new TLegend(0.10,0.68,0.70,0.96); leg->SetFillStyle(0); leg->SetBorderSize(0); leg->SetTextFont(63); leg->SetTextSize(16); leg->AddEntry(pall,Form("> %.1f GeV/c",ptranges[0]),"p"); for (int i=0;i<nptrange;++i) { if (plotLayer==0) continue; if (plotLayer==1&&i!=nptrange-1) continue; if (i!=nptrange-1){ leg->AddEntry(ppos[i],Form("%.1f - %.1f GeV/c",ptranges[i],ptranges[i+1]),"f"); } else { leg->AddEntry(ppos[i],Form("> %.1f GeV/c",ptranges[i]),"f"); } } if (drawLegend) leg->Draw(); TLine * l0 = new TLine(0,0,0.5,0); l0->SetLineStyle(2); l0->Draw(); TLine * l1 = new TLine(0.0001,-10,0.0001,10); l1->Draw(); }
void balanceMetVsAj(TString infname = "dj_HCPR-J50U-hiGoodMergedTracks_OfficialSelv2_Final0_120_50.root", TCut myCut = "cent<30", char *title = "",bool drawLegend = false, bool drawSys = true ) { TFile *inf = new TFile(infname); TTree *t = (TTree*)inf->Get("ntjt"); t->SetAlias("metxMerged0","metx0+metx1+metx2"); t->SetAlias("metxMerged1","metx1+metx2"); t->SetAlias("metxMerged2","metx2"); t->SetAlias("metxMerged3","metx3+metx4"); const int nBin = 4; double bins[nBin+1] = {0.5,1.5,4,8,1000}; double colors[nBin] = {38, kOrange-8,kBlue-3,kRed}; const int nBinAj = 4; double ajBins[nBinAj+1] = {0.0001,0.11,0.22,0.33,0.49999}; // Selection cut TCut evtCut = "nljet>120&&abs(nljetacorr)<2&&aljet>50&&abs(aljetacorr)<2&&jdphi>2./3*TMath::Pi()&&!maskEvt"; cout << "Sel evt: " << t->GetEntries(evtCut&&myCut) << endl; TH1D *p[nBin]; for (int i=0;i<nBin;i++) { TH1D *h1 = new TH1D(Form("h1%d",i),"",nBinAj,ajBins); TH1D *h2 = new TH1D(Form("h2%d",i),"",nBinAj,ajBins); h1->Sumw2(); h2->Sumw2(); // t->Project(Form("h%d",i),"Aj", "1"*(evtCut&&myCut)); // t->Project(Form("h2%d",i),"Aj", Form("((-1*metxMerged%d))",i)*(evtCut&&myCut)); t->Draw(Form("Aj>>h1%d",i), "weight"*(evtCut&&myCut)); t->Draw(Form("Aj>>h2%d",i), Form("((-weight*metxMerged%d))",i)*(evtCut&&myCut)); p[i]=(TH1D*)h2->Clone(); p[i]->SetName(Form("p%d",i)); p[i]->Divide(h1); p[i]->SetLineColor(1); p[i]->SetMarkerColor(colors[i]); p[i]->SetFillColor(colors[i]); // p[i]->SetFillStyle(3004+fabs(i-1)); p[i]->SetFillStyle(1001); } TH1D *pall; TH1D *h1 = new TH1D(Form("hAll1"),"",nBinAj,ajBins); TH1D *h2 = new TH1D(Form("hAll2"),"",nBinAj,ajBins); h1->Sumw2(); h2->Sumw2(); t->Draw(Form("Aj>>hAll1"), "weight"*(evtCut&&myCut)); t->Draw(Form("Aj>>hAll2"), Form("((-weight*metx))")*(evtCut&&myCut)); pall=(TH1D*)h2->Clone(); pall->SetName("pall"); pall->Divide(h1); pall->SetXTitle("A_{J}"); pall->SetYTitle("<#slash{p}_{T}^{#parallel}> (GeV/c)"); pall->GetXaxis()->CenterTitle(); pall->GetYaxis()->CenterTitle(); pall->GetXaxis()->SetLabelSize(22); pall->GetXaxis()->SetLabelFont(43); pall->GetXaxis()->SetTitleSize(24); pall->GetXaxis()->SetTitleFont(43); pall->GetYaxis()->SetLabelSize(22); pall->GetYaxis()->SetLabelFont(43); pall->GetYaxis()->SetTitleSize(24); pall->GetYaxis()->SetTitleFont(43); pall->GetXaxis()->SetTitleOffset(1.8); pall->GetYaxis()->SetTitleOffset(2.4); pall->SetNdivisions(505); pall->SetAxisRange(-59.9,59.9,"Y"); pall->SetMarkerSize(1); pall->Draw("E"); for (int i=0;i<nBin;++i) { p[i]->SetLineWidth(1); p[i]->Draw("hist same"); } pall->Draw("E same"); if (drawSys == 1) { for(int i = 0; i < nBinAj; ++i){ double x = pall->GetBinCenter(i+1); double y = pall->GetBinContent(i+1); // Quote the difference between GEN and RECO in >8 Bin (20%) before adjusting eff as systematics double err = -p[nBin-1]->GetBinContent(i+1)*0.2; DrawTick(y,err,err,x,1,0.02,1); } } // Legend TLegend *leg = new TLegend(0.10,0.68,0.70,0.96); leg->SetFillStyle(0); leg->SetBorderSize(0); leg->SetTextFont(63); leg->SetTextSize(16); leg->AddEntry(pall,Form("> %.1f GeV/c",bins[0]),"pl"); for (int i=0;i<nBin;++i) { if (i!=nBin-1){ leg->AddEntry(p[i],Form("%.1f - %.1f GeV/c",bins[i],bins[i+1]),"f"); } else { leg->AddEntry(p[i],Form("> %.1f GeV/c",bins[i]),"f"); } } if (drawLegend) leg->Draw(); TLine * l0 = new TLine(0,0,0.5,0); l0->SetLineStyle(2); l0->Draw(); TLine * l1 = new TLine(0.0001,-10,0.0001,10); l1->Draw(); TText *titleText = new TText(0.3,30,title); titleText->Draw(); }
void balanceMetVsAj(TString infname, TString insrc, TString metType = "",bool drawLegend = false, bool drawSys = true ) { // =========================================================== // Get Input // =========================================================== TFile *inf = new TFile(infname); // =========================================================== // Analysis Setup // =========================================================== Int_t plotLayer=10; // 0 only >0.5, 1 >0.5 and highpt, 10 ~ all const int nBin = 5; double bins[nBin+1] = {0.5,1.0,2,4,8,1000}; const int nBinAj = 4; double ajBins[nBinAj+1] = {0.0001,0.11,0.22,0.33,0.49999}; cout << infname << endl; TH1D *ppos[nBin+1]; TH1D *pneg[nBin+1]; TH1D *pe[nBin+1]; // ================================= // Get Weighted Mean for each Aj bin // ================================= for (int i=0;i<nBin+1;i++) { pe[i]=new TH1D(Form("p%d",i),"",nBinAj,ajBins); for (int a=0; a<nBinAj; ++a) { TString hname = Form("%s_mptx%s_merge%d_%dSigAll",insrc.Data(),metType.Data(),i,a); TH1D * hMpt = (TH1D*)inf->Get(hname); // cout << hname << " Aj bin: " << a+1 << " mean: " << hMpt->GetMean() << endl; pe[i]->SetBinContent(a+1,hMpt->GetMean()); pe[i]->SetBinError(a+1,hMpt->GetRMS()/sqrt(hMpt->GetEntries())); } } StackHistograms(nBin,pe,ppos,pneg,nBinAj); TH1D *pall=pe[nBin]; pall->SetXTitle("A_{J}"); pall->SetYTitle("<#slash{p}_{T}^{#parallel}> (GeV/c)"); pall->GetXaxis()->CenterTitle(); pall->GetYaxis()->CenterTitle(); pall->GetXaxis()->SetLabelSize(22); pall->GetXaxis()->SetLabelFont(43); pall->GetXaxis()->SetTitleSize(24); pall->GetXaxis()->SetTitleFont(43); pall->GetYaxis()->SetLabelSize(22); pall->GetYaxis()->SetLabelFont(43); pall->GetYaxis()->SetTitleSize(24); pall->GetYaxis()->SetTitleFont(43); pall->GetXaxis()->SetTitleOffset(1.8); pall->GetYaxis()->SetTitleOffset(2.4); pall->SetNdivisions(505); pall->SetAxisRange(-59.9,59.9,"Y"); pall->SetMarkerSize(1); pall->SetMarkerColor(kBlack); pall->SetMarkerStyle(kFullCircle); pall->Draw("E"); float addSys = 0; if ( drawSys==1) addSys=0; // No sys error at this moment // ==================== // Finally Draw // ==================== for (int i=0;i<nBin;++i) { if (plotLayer==0) continue; if (plotLayer==1&&i!=nBin-1) continue; ppos[i]->SetLineWidth(1); ppos[i]->Draw("hist same"); pneg[i]->SetLineWidth(1); pneg[i]->Draw("hist same"); // PrintHistogram(ppos[i]); // PrintHistogram(pneg[i]); } // ==================== // Draw Statistical Error bars // ==================== for (int i=0;i<nBin;++i) { if (plotLayer==0) continue; if (plotLayer==1&&i!=nBin-1) continue; if ( i==0 ) drawErrorShift(ppos[i],-0.016, addSys); if ( i==1 || i==4) drawErrorShift(ppos[i],-0.008,addSys); if ( i==2 ) drawErrorShift(ppos[i],0.008,addSys); if ( i==3 ) drawErrorShift(ppos[i],0.016,addSys); if ( i==0 ) drawErrorShift(pneg[i],-0.016, addSys); if ( i==1 || i==4) drawErrorShift(pneg[i],-0.008,addSys); if ( i==2 ) drawErrorShift(pneg[i],0.008,addSys); if ( i==3 ) drawErrorShift(pneg[i],0.016,addSys); } pall->Draw("E same"); // PrintHistogram(pall); // ==================== // Draw Systematic Errors // ==================== if (drawSys == 1) { for(int i = 0; i < nBinAj; ++i){ double x = pall->GetBinCenter(i+1); double y = pall->GetBinContent(i+1); // Quote the difference between GEN and RECO in >8 Bin (20%) before adjusting eff as systematics double errReco = -pe[nBin-1]->GetBinContent(i+1)*0.2; double errBck = 3.0; // compare HYDJET+SIG to SIG double err = sqrt(errReco*errReco+errBck*errBck); DrawTick(y,err,err,x,1,0.02,1); } } // ==================== // Draw Legend // ==================== TLegend *leg = new TLegend(0.10,0.68,0.70,0.96); leg->SetFillStyle(0); leg->SetBorderSize(0); leg->SetTextFont(63); leg->SetTextSize(16); leg->AddEntry(pall,Form("> %.1f GeV/c",bins[0]),"p"); for (int i=0;i<nBin;++i) { if (plotLayer==0) continue; if (plotLayer==1&&i!=nBin-1) continue; if (i!=nBin-1){ leg->AddEntry(ppos[i],Form("%.1f - %.1f GeV/c",bins[i],bins[i+1]),"f"); } else { leg->AddEntry(ppos[i],Form("> %.1f GeV/c",bins[i]),"f"); } } if (drawLegend) leg->Draw(); TLine * l0 = new TLine(0,0,0.5,0); l0->SetLineStyle(2); l0->Draw(); TLine * l1 = new TLine(0.0001,-10,0.0001,10); l1->Draw(); }
void balanceMetVsAj(TString infname = "dj_HCPR-J50U-hiGoodMergedTracks_OfficialSelv2_Final0_120_50.root", TCut myCut = "cent<30", char *title = "",bool drawLegend = false, bool drawSys = true ) { // =========================================================== // Get Input // =========================================================== TFile *inf = new TFile(infname); TTree *t = (TTree*)inf->Get("ntjt"); t->SetAlias("metxMergedAll","(metx0+metx1+metx2+metx3+metx4+metx5)"); t->SetAlias("metxMerged0","(metx0+metx1+metx2+metx3)"); t->SetAlias("metxMerged1","(metx1+metx2+metx3)"); t->SetAlias("metxMerged2","(metx2+metx3)"); t->SetAlias("metxMerged3","(metx3)"); t->SetAlias("metxMerged4","(metx4+metx5)"); //TString name2(infname); //name2.ReplaceAll("ntv2deadforpix_",""); //name2.ReplaceAll("ntv2_",""); //t->AddFriend("dj=djTree",name2); // =========================================================== // Analysis Setup // =========================================================== Int_t plotLayer=10; const int nBin = 5; double bins[nBin+1] = {0.5,1.0,2,4,8,1000}; const int nBinAj = 4; double ajBins[nBinAj+1] = {0.0001,0.13,0.24,0.35,0.69999}; // Selection cut TCut evtCut = "nljet>100&&abs(nljetacorr)<1.6&&aljet>40&&abs(aljetacorr)<1.6&&jdphi>2./3*TMath::Pi()&&!maskEvt"; cout << "Cut: " << TString(evtCut) << endl; cout << "Sel evt: " << t->GetEntries(evtCut&&myCut) << endl; // =========================================================== // Find Average Weights // =========================================================== TH1D *hw[nBinAj]; float meanWt[nBinAj]; for ( int iaj = 0 ; iaj< nBinAj ; iaj++) { hw[iaj] = new TH1D(Form("hw_aj%d",iaj),"",1000,0,100); TCut ajCut = Form("Aj>%f && Aj<%f", ajBins[iaj],ajBins[iaj+1]); t->Draw(Form("weight>>hw_aj%d",iaj), evtCut&&myCut&&ajCut); meanWt[iaj] = hw[iaj]->GetMean(); cout << " <Weight>: " << meanWt[iaj] << endl; } // =========================================================== // Draw Weighted Averages // =========================================================== TH1D *p[nBin]; TH1D *pe[nBin]; for (int i=0;i<nBin;i++) { TH1D *h1 = new TH1D(Form("h1%d",i),"",nBinAj,ajBins); TH1D *h2 = new TH1D(Form("h2%d",i),"",nBinAj,ajBins); TH1D *he[nBinAj]; // ================================= // Get Weighted Mean for each Aj bin // ================================= h1->Sumw2(); h2->Sumw2(); t->Draw(Form("Aj>>h1%d",i), "weight"*(evtCut&&myCut)); t->Draw(Form("Aj>>h2%d",i), Form("((-weight*metxMerged%d))",i)*(evtCut&&myCut)); p[i]=(TH1D*)h2->Clone(); p[i]->SetName(Form("p%d",i)); p[i]->Divide(h1); p[i]->SetLineColor(1); p[i]->SetMarkerColor(colors[i]); p[i]->SetFillColor(colors[i]); // p[i]->SetFillStyle(3004+fabs(i-1)); p[i]->SetFillStyle(1001); // ================================= // Caculated Stat Error of the Mean // ================================= cout << "Stat Error for pt bin " << i << ": "; for ( int iaj = 0 ; iaj< nBinAj ; iaj++) { he[iaj] = new TH1D(Form("he%d_aj%d",i,iaj),"",100,-200,200); TCut ajCut = Form("Aj>%f && Aj<%f", ajBins[iaj],ajBins[iaj+1]); t->Draw(Form("((metxMerged%d))>>he%d_aj%d",i,i,iaj), "weight" * evtCut&&myCut&&ajCut); float theError = he[iaj]->GetRMS()/ (sqrt(he[iaj]->GetEntries())); cout << theError << " "; p[i]->SetBinError(iaj+1, theError); } cout << endl; } // correct the error bars.. cummulative -> it's own. subtractError(p[0],p[1]); subtractError(p[1],p[2]); subtractError(p[2],p[3]); TH1D *pall; TH1D *pallE; TH1D *h1 = new TH1D(Form("hAll1"),"",nBinAj,ajBins); TH1D *h2 = new TH1D(Form("hAll2"),"",nBinAj,ajBins); h1->Sumw2(); h2->Sumw2(); t->Draw(Form("Aj>>hAll1"), "weight"*(evtCut&&myCut)); // t->Draw(Form("Aj>>hAll2"), Form("((-weight*metx))")*(evtCut&&myCut)); t->Draw(Form("Aj>>hAll2"), Form("((-weight*metxMergedAll))")*(evtCut&&myCut)); pall=(TH1D*)h2->Clone(); pall->SetName("pall"); pall->Divide(h1); // replace the sys error from pallE to pall TH1D *he[nBinAj]; cout << "Stat Error for All pt: "; for ( int iaj = 0 ; iaj< nBinAj ; iaj++) { he[iaj] = new TH1D(Form("heAll_aj%d",iaj),"",100,-200,200); TCut ajCut = Form("Aj>%f && Aj<%f", ajBins[iaj],ajBins[iaj+1]); t->Draw(Form("((metxMergedAll))>>heAll_aj%d",iaj), "weight" * evtCut&&myCut&&ajCut); float theError = he[iaj]->GetRMS()/ (sqrt(he[iaj]->GetEntries())); cout << theError << " "; pall->SetBinError(iaj+1, theError); } cout << endl; pall->SetXTitle("A_{J}"); pall->SetYTitle("<#slash{p}_{T}^{#parallel}> (GeV/c)"); pall->GetXaxis()->CenterTitle(); pall->GetYaxis()->CenterTitle(); pall->GetXaxis()->SetLabelSize(22); pall->GetXaxis()->SetLabelFont(43); pall->GetXaxis()->SetTitleSize(24); pall->GetXaxis()->SetTitleFont(43); pall->GetYaxis()->SetLabelSize(22); pall->GetYaxis()->SetLabelFont(43); pall->GetYaxis()->SetTitleSize(24); pall->GetYaxis()->SetTitleFont(43); pall->GetXaxis()->SetTitleOffset(1.8); pall->GetYaxis()->SetTitleOffset(2.4); pall->SetNdivisions(505); pall->SetAxisRange(-59.9,59.9,"Y"); pall->SetMarkerSize(1); pall->Draw("E"); float addSys = 0; if ( drawSys==1) addSys=0; // No sys error at this moment // ==================== // Finally Draw // ==================== for (int i=0;i<nBin;++i) { if (plotLayer==0) continue; if (plotLayer==1&&i!=nBin-1) continue; p[i]->SetLineWidth(1); // p[i]->SetMarkerSize(0.1); p[i]->Draw("hist same"); } // ==================== // Draw Statistical Error bars // ==================== for (int i=0;i<nBin;++i) { if (plotLayer==0) continue; if (plotLayer==1&&i!=nBin-1) continue; if ( i==0 ) drawErrorShift(p[i],-0.016, addSys); if ( i==1 || i==4) drawErrorShift(p[i],-0.008,addSys); if ( i==2 ) drawErrorShift(p[i],0.008,addSys); if ( i==3 ) drawErrorShift(p[i],0.016,addSys); } pall->Draw("E same"); // ==================== // Draw Systematic Errors // ==================== if (drawSys == 1) { for(int i = 0; i < nBinAj; ++i){ double x = pall->GetBinCenter(i+1); double y = pall->GetBinContent(i+1); // Quote the difference between GEN and RECO in >8 Bin (20%) before adjusting eff as systematics double errReco = -p[nBin-1]->GetBinContent(i+1)*0.2; double errBck = 3.0; // compare HYDJET+SIG to SIG double err = sqrt(errReco*errReco+errBck*errBck); DrawTick(y,err,err,x,1,0.02,1); } } // ==================== // Draw Legend // ==================== TLegend *leg = new TLegend(0.10,0.68,0.70,0.96); leg->SetFillStyle(0); leg->SetBorderSize(0); leg->SetTextFont(63); leg->SetTextSize(16); leg->AddEntry(pall,Form("> %.1f GeV/c",bins[0]),"p"); for (int i=0;i<nBin;++i) { if (plotLayer==0) continue; if (plotLayer==1&&i!=nBin-1) continue; if (i!=nBin-1){ leg->AddEntry(p[i],Form("%.1f - %.1f GeV/c",bins[i],bins[i+1]),"f"); } else { leg->AddEntry(p[i],Form("> %.1f GeV/c",bins[i]),"f"); } } if (drawLegend) leg->Draw(); TLine * l0 = new TLine(0,0,0.7,0); l0->SetLineStyle(2); l0->Draw(); TLine * l1 = new TLine(0.0001,-10,0.0001,10); l1->Draw(); TText *titleText = new TText(0.3,30,title); titleText->Draw(); }