void drawPtEta(char *inf){ TFile a(inf); a.cd("ana"); TProfile *h = new TProfile("h","",100,-3,3); TCanvas *c = new TCanvas("c","",400,400); hi->Draw("(pt):eta>>h","evtType!=92&&evtType!=93&&(abs(eta)<2.4&&chg!=0&&abs(pdg)!=11&&abs(pdg)!=13)","prof",10000); double nevt = hi->GetEntries("evtType!=92&&evtType!=93"); h->Sumw2(); //h->Scale(2./nevt); h->SetXTitle("#eta"); h->SetYTitle("Average P_{T}"); h->Draw(); c->SaveAs(Form("%s-PtEta-2.4.gif",inf)); c->SaveAs(Form("%s-PtEta-2.4.C",inf)); }
void fitBjetJES(int ppPbPb=1, int cbinlo=12, int cbinhi=40){ if(!ppPbPb){ cbinlo=0; cbinhi=40; } gStyle->SetOptTitle(0); gStyle->SetOptStat(0); TFile *fL; if(!ppPbPb)fL=new TFile("histos/ppMC_hiReco_jetTrig_highPurity_JEC.root"); else fL=new TFile("histos/PbPbQCDMC_pt30by3_ipHICalibCentWeight.root"); // these are dummy files for pp TFile *fB=new TFile("histos/PbPbBMC_pt30by3_ipHICalibCentWeight.root"); TFile *fC=new TFile("histos/PbPbCMC_pt30by3_ipHICalibCentWeight.root"); TNtuple *tL = (TNtuple*) fL->Get("nt"); TNtuple *tB = (TNtuple*) fB->Get("nt"); TNtuple *tC = (TNtuple*) fC->Get("nt"); float jtptL, refptL, jtetaL, weightL, refparton_flavorForBL, binL; tL->SetBranchAddress("jtpt",&jtptL); tL->SetBranchAddress("jteta",&jtetaL); tL->SetBranchAddress("refpt",&refptL); tL->SetBranchAddress("weight",&weightL); if(ppPbPb)tL->SetBranchAddress("bin",&binL); tL->SetBranchAddress("refparton_flavorForB",&refparton_flavorForBL); float jtptB, refptB, jtetaB, weightB, refparton_flavorForBB, binB; tB->SetBranchAddress("jtpt",&jtptB); tB->SetBranchAddress("jteta",&jtetaB); tB->SetBranchAddress("refpt",&refptB); tB->SetBranchAddress("weight",&weightB); if(ppPbPb)tB->SetBranchAddress("bin",&binB); tB->SetBranchAddress("refparton_flavorForB",&refparton_flavorForBB); float jtptC, refptC, jtetaC, weightC, refparton_flavorForBC, binC; tC->SetBranchAddress("jtpt",&jtptC); tC->SetBranchAddress("jteta",&jtetaC); tC->SetBranchAddress("refpt",&refptC); tC->SetBranchAddress("weight",&weightC); if(ppPbPb)tC->SetBranchAddress("bin",&binC); tC->SetBranchAddress("refparton_flavorForB",&refparton_flavorForBC); TProfile *hL = new TProfile("hL","hL",250,50,300,0,10); TProfile *hB = new TProfile("hB","hB",250,50,300,0,10); TProfile *hC = new TProfile("hC","hC",250,50,300,0,10); hL->Sumw2(),hB->Sumw2(),hC->Sumw2(); for(int i=0;i<tL->GetEntries();i++){ tL->GetEntry(i); if(!ppPbPb) binL=39; if(fabs(jtetaL)<2 && binL>=cbinlo && binL<cbinhi) hL->Fill(refptL,jtptL/refptL,weightL); if(!ppPbPb){ if(fabs(jtetaL)<2 && binL>=cbinlo && binL<cbinhi && abs(refparton_flavorForBL)==5) hB->Fill(refptL,jtptL/refptL,weightL); if(fabs(jtetaL)<2 && binL>=cbinlo && binL<cbinhi && abs(refparton_flavorForBL)==4) hC->Fill(refptL,jtptL/refptL,weightL); } } if(ppPbPb){ for(int i=0;i<tB->GetEntries();i++){ tB->GetEntry(i); if(fabs(jtetaB)<2 && binB>=cbinlo && binB<cbinhi && abs(refparton_flavorForBB)==5) hB->Fill(refptB,jtptB/refptB,weightB); } for(int i=0;i<tC->GetEntries();i++){ tC->GetEntry(i); if(fabs(jtetaC)<2 && binC>=cbinlo && binC<cbinhi && abs(refparton_flavorForBC)==4) hC->Fill(refptC,jtptC/refptC,weightC); } } hL->SetMinimum(0.); hL->SetLineColor(kBlue); hB->SetLineColor(kRed); hC->SetLineColor(kGreen); hL->SetMarkerColor(kBlue); hB->SetMarkerColor(kRed); hC->SetMarkerColor(kGreen); //hL->SetMarkerStyle(4); //hB->SetMarkerStyle(4); //hC->SetMarkerStyle(4); hL->SetXTitle("genJet p_{T} (GeV/c)"); hL->SetYTitle("<reco p_{T} / gen p_{T} >"); hL->GetXaxis()->SetRangeUser(50.,199.999); hL->GetYaxis()->SetRangeUser(0.5,1.05); TCanvas *c1=new TCanvas("c1","c1",800,600); c1->SetGridx(1); c1->SetGridy(1); hL->Draw("e1"); hB->Draw("e1,same"); hC->Draw("e1,same"); TLegend *leg=new TLegend(0.4,0.15,0.9,0.45); leg->SetBorderSize(0); leg->SetFillStyle(0); if(ppPbPb&&cbinlo==0&&cbinhi==40)leg->SetHeader("Pythia+Hydjet, 0-100%"); leg->AddEntry(hL,"Inclusive jets","pl"); leg->AddEntry(hC,"c-jets","pl"); leg->AddEntry(hB,"b-jets","pl"); leg->Draw(); TCanvas *c2=new TCanvas("c2","c2",1); /* TH1F *hL2 = (TH1F*)hL->Clone("hL2"); TH1F *hB2 = (TH1F*)hB->Clone("hB2"); hL2->Add(hB2,-1); hL2->Draw(); */ TH1F *hcorr = new TH1F("hcorr","hcorr",250,50,300); hcorr->Sumw2(); for(int i=0;i<hL->GetNbinsX();i++){ cout<<" b resp "<<hB->GetBinContent(i+1)<<endl; cout<<" l resp "<<hL->GetBinContent(i+1)<<endl; cout<<" l offset "<<1.-hL->GetBinContent(i+1)<<endl; cout<<" corrected b resp "<<hB->GetBinContent(i+1)+1.-hL->GetBinContent(i+1)<<endl; float jesOffset = 1.-hL->GetBinContent(i+1); hcorr->SetBinContent(i+1,hB->GetBinContent(i+1)+jesOffset); hcorr->SetBinError(i+1,sqrt(hB->GetBinError(i+1)*hB->GetBinError(i+1)+hL->GetBinError(i+1)*hL->GetBinError(i+1))); } hcorr->SetMinimum(0.5); hcorr->SetMaximum(1.1); hcorr->SetLineColor(kRed); hcorr->SetMarkerColor(kRed); hcorr->SetMarkerStyle(4); hcorr->Draw(); TF1 *fCorr = new TF1("fCorr","[0]+[1]*log(x)+[2]*log(x)*log(x)",50,300); fCorr->SetLineWidth(1); fCorr->SetLineColor(kBlue); hcorr->Fit(fCorr); TFile *fout; if(ppPbPb) fout =new TFile(Form("bJEShistos/bJetScale_PbPb_Cent_fineBin_%d_%d.root",cbinlo,cbinhi),"recreate"); else fout =new TFile("bJEShistos/bJetScale_PP_fineBin.root","recreate"); hcorr->Write(); fCorr->Write(); fout->Close(); }
void calibrateEM() { // FIXME: There are two possibilities to execute the script: // i) root run_hadron_g4.C // root[] .L calibrateEM.C // root[] calibrateEM() // or ii) Include the basics from run_hadron_g4.C here and // execute simply: // root calibrateEM.C // Load basic libraries // Load basic libraries gROOT->LoadMacro("/opt/geant4_vmc.2.15a/examples/macro/basiclibs.C"); basiclibs(); // Load Geant4 libraries gROOT->LoadMacro("/opt/geant4_vmc.2.15a/examples/macro/g4libs.C"); g4libs(); // Load the tutorial application library gSystem->Load("libTutorialApplication"); // MC application TutorialApplication* app = new TutorialApplication("TutorialApplication", "Tutorial Application for HEP Lecture @EKP"); // configure Geant4 gROOT->LoadMacro("g4Config.C"); Config(); // instantiate graphical user interface for tutorial application new TutorialMainFrame(app); //FIXME: Load "CountChargedinScint.C" gROOT->ProcessLine(".L CountChargedinScint.C"); //FIXME: Initialize the geometry app->InitMC("geometry/calor(1,0.2)"); //FIXME: Set the primary particle to photon app->SetPrimaryPDG(22); // Profile histogram - will show us the mean numbers of counts in bins of the energy. // The given binning refers to the energy, the other binning will be inferred automatically. TProfile* hcounts = new TProfile("hcounts","Counts per particle energy", 10,0,10); hcounts->SetXTitle("energy [GeV]"); hcounts->SetYTitle("mean number of counts"); // FIXME loop over different particle momenta, and for each momentum simulate several events (e.g. 10) for(Int_t i = 0 ; i < 10 ; ++i) { for(Int_t k = 0 ; k < 10; k ++) { //FIXME: Set the momentum of the primary particle to p Double_t p = i; app->SetPrimaryMomentum(p); //FIXME: Run the simulation app->RunMC(); //FIXME: Fill both the momentum and the output from CountChargedinScint // into the profile histogram hcounts Double_t x = CountChargedinScint(); hcounts->Fill(p,x); } } TCanvas* c = new TCanvas(); c->cd(); hcounts->Draw(); TF1 *fitter = new TF1("fitf","[0]*x", 0,10); fitter->SetParameter(0,1.0); fitter->SetParNames("calibration factor"); //FIXME: Fit the histogram to get the calibration factor hcounts->Fit("fitf"); }
void balanceMetVsAj(TString infname = "dj_HCPR-J50U-hiGoodMergedTracks_OfficialSelv2_Final0_120_50.root",TCut myCut = "cent<30", char *title = "",bool drawLegend = false) { TFile *inf = new TFile(infname); TTree *t = (TTree*)inf->Get("ntjt"); const int nBin = 3; double bins[nBin+1] = {0.5,4,8,1000}; double colors[nBin] = {kOrange-8,kBlue-3,kRed}; // Selection cut TCut evtCut = "nljet>100&&abs(nljetacorr)<2&&aljet>50&&abs(aljetacorr)<2&&jdphi>2./3*TMath::Pi()&&!maskEvt"; cout << "Sel evt: " << t->GetEntries(evtCut&&myCut) << endl; TProfile *p[nBin]; for (int i=0;i<nBin;i++) { p[i] = new TProfile(Form("p%d",i),"",5,0.0001,0.49999); t->Project(Form("p%d",i),Form("-1*metxMerged%d:Aj",i), "1"*(evtCut&&myCut)); p[i]->SetLineColor(colors[i]); p[i]->SetMarkerColor(colors[i]); } TProfile *pall = new TProfile("pall","",5,0.0001,0.49999); pall->SetXTitle("A_{J}"); pall->SetYTitle("<#slash{p}_{T}^{#parallel}> (GeV/c)"); pall->GetXaxis()->CenterTitle(); pall->GetYaxis()->CenterTitle(); pall->SetNdivisions(505); t->Project("pall","-1*metx:Aj", "1"*(evtCut&&myCut)); pall->SetAxisRange(-50,50,"Y"); pall->SetMarkerSize(1); pall->Draw("E"); for (int i=0;i<nBin;++i) { p[i]->SetLineWidth(3); p[i]->Draw("e hist same"); } pall->Draw("E same"); // 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]),"l"); } else { leg->AddEntry(p[i],Form("> %.1f GeV/c",bins[i]),"l"); } } if (drawLegend) leg->Draw(); TLine * l0 = new TLine(0,0,0.5,0); l0->SetLineStyle(2); l0->Draw(); TText *titleText = new TText(0.3,30,title); titleText->Draw(); }
void makePlot(char* canv) { t->SetBranchAddress("LM_PX1", &intree.LM_PX1); t->SetBranchAddress("LM_PX2", &intree.LM_PX2); t->SetBranchAddress("LM_PY1", &intree.LM_PY1); t->SetBranchAddress("LM_PY2", &intree.LM_PY2); t->SetBranchAddress("LM_P2_Integral", &intree.LM_P2_Integral); t->SetBranchAddress("time", &intree.timeline); t->Print(); if(entries<=0) entries = t->GetEntries(); char title[100]=0; sprintf(title,"%s runs 1100-1107",canv); TProfile *prof = new TProfile(title,title,24,0,entries); TProfile *prof1 = new TProfile(title,title,24,0,entries); TProfile *prof2 = new TProfile(title,title,24,0,entries); /************************************** * read entries ************************************** */ Double_t *ratio = new Double_t[entries]; Double_t *parmean = new Double_t[entries]; Double_t *p1 = new Double_t[entries]; Double_t *p2 = new Double_t[entries]; for (int j = 0; j < entries; ++j){ gSystem->Sleep (sleep); t->GetEntry(j); ratio[j] = intree.LM_PY1/intree.LM_PY2; p1[j] = intree.LM_PY1; p2[j] = intree.LM_PY2; //cout<<"entry "<<j<<" peak2 "<<intree.LM_PY2<<endl; } Double_t mean = TMath::Mean(entries,ratio); Double_t mean1 = TMath::Mean(entries,p1); Double_t mean2 = TMath::Mean(entries,p2); for (int j = 0; j < entries; ++j){ prof->Fill(j,(ratio[j]/mean-1)*100); prof1->Fill(j,(p1[j]/mean1-1)*100); prof2->Fill(j,(p2[j]/mean2-1)*100); } TCanvas *c1 = new TCanvas(canv,"frascatirun",900,700); c1->cd(); char axisXname[100]; sprintf(axisXname,"Time (Entries) (total: %i)",entries); prof->SetXTitle(axisXname); prof->SetYTitle("Variation (%)"); prof->SetMaximum(1); prof->SetMinimum(-1); prof->SetMarkerColor(4); prof->SetMarkerSize(1); prof->SetMarkerStyle(8); prof->SetStats(kFALSE); prof->Draw(); prof1->SetMarkerColor(5); prof1->SetMarkerSize(1); prof1->SetMarkerStyle(6); prof1->Draw("same"); prof2->SetMarkerColor(1); prof2->SetMarkerSize(1); prof2->SetMarkerStyle(7); prof2->Draw("same"); /* TLegend leg = new TLegend(0.1,0.7,0.48,0.9); leg->SetHeader("The Legend Title"); leg->AddEntry(h1,"Histogram filled with random numbers","f"); leg->AddEntry("f1","Function abs(#frac{sin(x)}{x})","l"); leg->AddEntry("gr","Graph with error bars","lep"); leg->Draw("same"); */ }
void plotMETVsJetPhi(int num=-1) { char *title=""; if (num!=-1) { title = Form("%d",num); } TFile *inf = new TFile("nt_dj_mix100_Gen.root"); TTree *tGen = (TTree*) inf->FindObjectAny("ntjt"); tGen->SetName("gen"); TFile *inf2 = new TFile("nt_dj_mix100.root"); TTree *tReco = (TTree*) inf2->FindObjectAny("ntjt"); tReco->SetName("reco"); TFile *inf3 = new TFile("nt_dj_HyUQ80v4_djcalo_genp_100_50.root"); TTree *tGen2 = (TTree*) inf3->FindObjectAny("ntjt"); tGen2->SetName("gen2"); TFile *inf4 = new TFile("dj_HyUQ80v4_djcalo_genp_100_50.root"); TTree *tDj = (TTree*) inf4->FindObjectAny("djTree"); tDj->SetName("dj"); TFile *inf5 = new TFile("nt_dj_data100_cor.root"); TTree *tRecoData = (TTree*) inf5->FindObjectAny("ntjt"); tRecoData->SetName("data"); TFile *inf6 = new TFile("dj_HCPR-J50U-hiGoodMergedTracks_OfficialSelv2_Final0_djcalo_100_50.root"); TTree *tDjData = (TTree*) inf6->FindObjectAny("djTree"); tDjData->SetName("djdata"); tGen->AddFriend(tReco); tGen->AddFriend(tGen2); tGen->AddFriend(tDj); tRecoData->AddFriend(tDjData); setupAlias(tGen); setupAlias(tReco); const int nBin = 10; double delta = 0.0; //shift // double Bins[nBin+1] = {0,1,2,2.2,2.4,2.6,2.8,3,PI}; // double BinsMC[nBin+1] = {0+delta,1+delta,2+delta,2.2+delta,2.4+delta,2.6+delta,2.8+delta,3+delta,PI+delta}; double Bins[nBin+1]; double BinsMC[nBin+1]; for (int i=0;i<nBin+1;i++) { Bins[i]=-PI+2*PI/(double)nBin*i; BinsMC[i]=-PI+2*PI/(double)nBin*i+delta; cout <<Bins[i]<<endl; } const int nPtBin = 6; double ptBins[nPtBin+1] = {0.5,1.0,1.5,4,8,20,1000}; TCanvas *c = new TCanvas("c","",600,600); TProfile *p = new TProfile("p","",nBin,BinsMC); TProfile *p2 = new TProfile("p2","",nBin,BinsMC); TProfile *p3 = new TProfile("p3","",nBin,BinsMC); TProfile *p4 = new TProfile("p4","",nBin,Bins); TCut evtCut = "nljet>120&&abs(nljetacorr)<1.6&&aljet>50&&abs(aljetacorr)<1.6&&!maskEvt&¢<30&&abs(jdphi)>2./3.*3.14159"; tGen->Draw(Form("-gen.metOutOfConex%s:nljphi+0.0>>p",title),"weight"*evtCut); tGen->Draw(Form("-gen2.metOutOfConex%s:nljphi+0.0>>p2",title),"weight"*evtCut); tGen->Draw(Form("-reco.metOutOfConex%s:nljphi+0.0>>p3",title),"weight"*evtCut); tRecoData->Draw(Form("-metOutOfConex%s:nljphi>>p4",title),"1"*evtCut); p->SetMarkerStyle(24); p2->SetMarkerStyle(25); p3->SetMarkerStyle(26); p4->SetMarkerStyle(20); p->SetAxisRange(-80,120,"Y"); p->Draw(); p2->SetMarkerColor(2); p2->SetLineColor(2); p3->SetMarkerColor(4); p3->SetLineColor(4); p2->Draw("same"); p3->Draw("same"); p4->Draw("same"); TLine *l = new TLine(Bins[0],0,PI,0); l->Draw(); p->SetXTitle("#phi_{Leading Jet}"); p->SetYTitle("<#slash{p}_{T}^{#parallel}> (GeV/c)"); // ==================== TLegend *leg = new TLegend(0.45,0.68,0.92,0.9); leg->SetFillStyle(0); leg->SetBorderSize(0); leg->SetTextFont(63); leg->SetTextSize(16); leg->AddEntry("p","Jets with |#eta|<1.6",""); if (num!=-1) { leg->AddEntry("p",Form("Tracks with %.1f<p_{T}<%.1f GeV/c",ptBins[num],ptBins[num+1]),""); } else { leg->AddEntry("p",Form("Tracks with %.1f<p_{T}<%.1f GeV/c",ptBins[0],ptBins[nPtBin]),""); } leg->AddEntry("p","#slash{p}_{T}^{#parallel} PYTHIA+HYDJET GEN Signal","pl"); leg->AddEntry("p2","#slash{p}_{T}^{#parallel} PYTHIA+HYDJET GEN S+B","pl"); leg->AddEntry("p3","#slash{p}_{T}^{#parallel} PYTHIA+HYDJET RECO","pl"); leg->AddEntry("p4","#slash{p}_{T}^{#parallel} Data RECO","pl"); leg->Draw(); c->SaveAs(Form("metOutOfCone%sVsJetPhi.gif",title)); c->SaveAs(Form("metOutOfCone%sVsJetPhi.eps",title)); }