Fork me on GitHub

Changes in / [feada94:d0f661b] in git


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • examples/Validation.cpp

    rfeada94 rd0f661b  
    343343  }
    344344}
     345
     346
     347template<typename T>
     348void GetPtres(std::vector<resolPlot> *histos, TClonesArray *branchReco, TClonesArray *branchParticle, int pdgID, ExRootTreeReader *treeReader)
     349{
     350  Long64_t allEntries = treeReader->GetEntries();
     351
     352  cout << "** Computing pt resolution of " << branchReco->GetName() << " induced by " << branchParticle->GetName() << " with PID " << pdgID << endl;
     353
     354  GenParticle *particle;
     355  T* recoObj;
     356
     357  TLorentzVector recoMomentum, genMomentum, bestGenMomentum;
     358
     359  Float_t deltaR;
     360  Float_t pt, eta;
     361  Long64_t entry;
     362
     363  Int_t i, j, bin;
     364
     365  // Loop over all events
     366  for(entry = 0; entry < allEntries; ++entry)
     367  {
     368    // Load selected branches with data from specified event
     369    treeReader->ReadEntry(entry);
     370
     371    // Loop over all reconstructed jets in event
     372    for(i = 0; i < branchReco->GetEntriesFast(); ++i)
     373    {
     374      recoObj = (T*) branchReco->At(i);
     375      recoMomentum = recoObj->P4();
     376
     377      deltaR = 999;
     378
     379     // Loop over all hard partons in event
     380     for(j = 0; j < branchParticle->GetEntriesFast(); ++j)
     381     {
     382        particle = (GenParticle*) branchParticle->At(j);
     383        if (particle->PID == pdgID && particle->Status == 1)
     384        {
     385          genMomentum = particle->P4();
     386
     387          // this is simply to avoid warnings from initial state particle
     388          // having infite rapidity ...
     389          if(genMomentum.Px() == 0 && genMomentum.Py() == 0) continue;
     390
     391          // take the closest parton candidate
     392          if(genMomentum.DeltaR(recoMomentum) < deltaR)
     393          {
     394             deltaR = genMomentum.DeltaR(recoMomentum);
     395             bestGenMomentum = genMomentum;
     396          }
     397        }
     398      }
     399
     400      if(deltaR < 0.3)
     401      {
     402        pt  = bestGenMomentum.Pt();
     403        eta = TMath::Abs(bestGenMomentum.Eta());
     404
     405        for (bin = 0; bin < Nbins; bin++)
     406        {
     407          if(pt > histos->at(bin).ptmin && pt < histos->at(bin).ptmax && eta < 2.5)
     408          {
     409            if (eta < 1.5) {histos->at(bin).cenResolHist->Fill(recoMomentum.Pt()/bestGenMomentum.Pt());}
     410            else if (eta < 2.5) {histos->at(bin).fwdResolHist->Fill(recoMomentum.Pt()/bestGenMomentum.Pt());}
     411          }
     412        }
     413      }
     414    }
     415  }
     416}
     417
     418
    345419void GetJetsEres(std::vector<resolPlot> *histos, TClonesArray *branchJet, TClonesArray *branchGenJet, ExRootTreeReader *treeReader)
    346420{
     
    398472      if(deltaR < 0.25)
    399473      {
    400         pt  = genJetMomentum.Pt();
     474        pt  = genJetMomentum.E();
    401475        eta = TMath::Abs(genJetMomentum.Eta());
    402476
     
    405479            if(pt > histos->at(bin).ptmin && pt < histos->at(bin).ptmax && eta < 1.5)
    406480            {
    407                 histos->at(bin).cenResolHist->Fill(jetMomentum.Pt()/bestGenJetMomentum.Pt());
     481                histos->at(bin).cenResolHist->Fill(jetMomentum.E()/bestGenJetMomentum.E());
    408482            }
    409483            else if(pt > histos->at(bin).ptmin && pt < histos->at(bin).ptmax && eta < 2.5)
    410484            {
    411                 histos->at(bin).fwdResolHist->Fill(jetMomentum.Pt()/bestGenJetMomentum.Pt());
     485                histos->at(bin).fwdResolHist->Fill(jetMomentum.E()/bestGenJetMomentum.E());
    412486            }
    413 
    414487        }
    415488      }
     
    476549  TF1 *f1 = new TF1("f1", "gaus", hist->GetMean()-2*hist->GetRMS(), hist->GetMean()+2*hist->GetRMS());
    477550  hist->Fit("f1","RQ");
    478   Double_t sig = f1->GetParameter(2);
    479   Double_t sigErr = f1->GetParError(2);
     551
     552  TF1 *f2 = new TF1("f2", "gaus", f1->GetParameter(1) - 2*f1->GetParameter(2), f1->GetParameter(1) + 2*f1->GetParameter(2));
     553  hist->Fit("f2","RQ"); 
     554
     555  Double_t sig = f2->GetParameter(2);
     556  Double_t sigErr = f2->GetParError(2);
     557
    480558  delete f1;
     559  delete f2;
    481560  return make_pair (sig, sigErr);
    482561}
     
    610689}
    611690
    612 void DrawAxis(TMultiGraph *mg, TLegend *leg, double max)
     691void DrawAxis(TMultiGraph *mg, TLegend *leg, double max, int type = 0)
    613692{
    614693  mg->SetMinimum(0.);
     
    616695  mg->GetXaxis()->SetLimits(ptrangemin,ptrangemax);
    617696  mg->GetYaxis()->SetTitle("resolution");
    618   mg->GetXaxis()->SetTitle("p_{T} [GeV]");
     697  if (type == 0) mg->GetXaxis()->SetTitle("E [GeV]");
     698  else mg->GetXaxis()->SetTitle("p_{T} [GeV]");
    619699  mg->GetYaxis()->SetTitleSize(0.07);
    620700  mg->GetXaxis()->SetTitleSize(0.07);
     
    641721}
    642722
    643 void DrawAxis(TH1D *h, TLegend *leg, int type)
     723void DrawAxis(TH1D *h, TLegend *leg, int type = 0)
    644724{
    645725
    646726  h->GetYaxis()->SetRangeUser(0,1.0);
    647   if (type == 0) h->GetXaxis()->SetTitle("p_{T} [GeV]");
    648   else h->GetXaxis()->SetTitle("#eta");
     727  if (type == 0) h->GetXaxis()->SetTitle("E [GeV]");
     728  else h->GetXaxis()->SetTitle("p_{T} [GeV]");
    649729  h->GetYaxis()->SetTitle("efficiency");
    650730  h->GetYaxis()->SetTitleSize(0.07);
     
    782862  histos_el.first->Draw("same ][");
    783863  addHist(histos_el.first, leg_el1, 1);
    784   DrawAxis(histos_eltrack.first, leg_el1, 0);
     864  DrawAxis(histos_eltrack.first, leg_el1,1);
    785865
    786866  leg_el1->Draw();
     
    797877  addHist(histos_el.second, leg_el2, 1);
    798878
    799   DrawAxis(histos_eltrack.second, leg_el2, 0);
     879  DrawAxis(histos_eltrack.second, leg_el2, 1);
    800880  leg_el2->Draw();
    801881
     
    850930  std::pair <TH1D*,TH1D*> histos_mutrack = GetEff<Track>(branchTrackMuon, branchParticleMuon, "muonTrack", muID, treeReaderMuon);
    851931
    852   // Muon Energy Resolution
     932  // Muon Pt Resolution
    853933  std::vector<resolPlot> plots_mu;
    854934  HistogramsCollection(&plots_mu, TMath::Log10(ptrangemin), TMath::Log10(ptrangemax), "muons");
    855   GetEres<Muon>(&plots_mu, branchMuon, branchParticleMuon, muID, treeReaderMuon);
     935  GetPtres<Muon>(&plots_mu, branchMuon, branchParticleMuon, muID, treeReaderMuon);
    856936  TGraphErrors gr_mu = EresGraph(&plots_mu, true);
    857937  TGraphErrors gr_muFwd = EresGraph(&plots_mu, false);
     
    862942  std::vector<resolPlot> plots_mutrack;
    863943  HistogramsCollection(&plots_mutrack, TMath::Log10(ptrangemin), TMath::Log10(ptrangemax), "muonsTracks");
    864   GetEres<Track>(&plots_mutrack, branchTrackMuon, branchParticleMuon, muID, treeReaderMuon);
     944  GetPtres<Track>(&plots_mutrack, branchTrackMuon, branchParticleMuon, muID, treeReaderMuon);
    865945  TGraphErrors gr_mutrack = EresGraph(&plots_mutrack, true);
    866946  TGraphErrors gr_mutrackFwd = EresGraph(&plots_mutrack, false);
     
    884964  addHist(histos_mu.first, leg_mu1, 1);
    885965
    886   DrawAxis(histos_mutrack.first, leg_mu1, 0);
     966  DrawAxis(histos_mutrack.first, leg_mu1, 1);
    887967
    888968  leg_mu1->Draw();
     
    919999  leg_mu->Draw();
    9201000
    921   DrawAxis(mg_mu, leg_mu, 0.3);
     1001  DrawAxis(mg_mu, leg_mu, 0.3, 1);
    9221002
    9231003  C_mu->cd(2);
     
    9331013  leg_muFwd->Draw();
    9341014
    935   DrawAxis(mg_muFwd, leg_muFwd, 0.3);
     1015  DrawAxis(mg_muFwd, leg_muFwd, 0.3, 1);
    9361016
    9371017  C_mu1->Print("delphes_validation.pdf","pdf");
     
    9851065  addHist(histos_ph.first, leg_ph1, 1);
    9861066
    987   DrawAxis(histos_phtower.first, leg_ph1, 0);
     1067  DrawAxis(histos_phtower.first, leg_ph1, 1);
    9881068  leg_ph1->Draw();
    9891069
     
    10201100  leg_ph->Draw();
    10211101
    1022   DrawAxis(mg_ph, leg_ph, 0.3);
     1102  DrawAxis(mg_ph, leg_ph, 0.1);
    10231103
    10241104  C_ph->cd(2);
     
    10341114  leg_phFwd->Draw();
    10351115
    1036   DrawAxis(mg_phFwd, leg_phFwd, 0.3);
     1116  DrawAxis(mg_phFwd, leg_phFwd, 0.1);
    10371117
    10381118  C_ph1->Print("delphes_validation.pdf","pdf");
     
    10911171  addHist(histos_btag.first, leg_btag1, 0);
    10921172
    1093   DrawAxis(histos_btag.first, leg_btag1, 0);
     1173  DrawAxis(histos_btag.first, leg_btag1, 1);
    10941174  leg_btag1->Draw();
    10951175
     
    11031183  addHist(histos_btag.second, leg_btag2, 0);
    11041184
    1105   DrawAxis(histos_btag.second, leg_btag2, 0);
     1185  DrawAxis(histos_btag.second, leg_btag2, 1);
    11061186  leg_btag2->Draw();
    11071187  C_btag1->cd(0);
     
    11191199  addHist(histos_tautag.first, leg_tautag1, 0);
    11201200
    1121   DrawAxis(histos_tautag.first, leg_tautag1, 0);
     1201  DrawAxis(histos_tautag.first, leg_tautag1, 1);
    11221202  leg_tautag1->Draw();
    11231203
     
    11311211  addHist(histos_tautag.second, leg_tautag2, 0);
    11321212
    1133   DrawAxis(histos_tautag.second, leg_tautag2, 0);
     1213  DrawAxis(histos_tautag.second, leg_tautag2, 1);
    11341214  leg_tautag2->Draw();
    11351215  C_tautag1->cd(0);
     
    11491229  addGraph(mg_jet, &gr_pfjets, leg_jet, 1);
    11501230
    1151   mg_jet->Draw("ACX");
     1231  mg_jet->Draw("ALX");
    11521232  leg_jet->Draw();
    11531233
    1154   DrawAxis(mg_jet, leg_jet, 0.25);
     1234  DrawAxis(mg_jet, leg_jet, 0.5);
    11551235
    11561236  C_jet->cd(2);
    11571237  TMultiGraph *mg_jetFwd = new TMultiGraph(jetResFwd,jetResFwd);
    11581238  TLegend *leg_jetFwd = new TLegend(resLegXmin,resLegYmin,resLegXmax,resLegYmax);
    1159   leg_jetFwd->SetHeader("#splitline{jets}{|#eta| < 1.5}");
     1239  leg_jetFwd->SetHeader("#splitline{jets}{1.5 < |#eta| < 2.5}");
    11601240  leg_jetFwd->AddEntry("","","");
    11611241
     
    11631243  addGraph(mg_jetFwd, &gr_pfjetsFwd, leg_jetFwd, 1);
    11641244
    1165   mg_jetFwd->Draw("ACX");
     1245  mg_jetFwd->Draw("ALX");
    11661246  leg_jetFwd->Draw();
    11671247
    1168   DrawAxis(mg_jetFwd, leg_jetFwd, 0.25);
     1248  DrawAxis(mg_jetFwd, leg_jetFwd, 0.5);
    11691249
    11701250  TString metRes = "MetRes";
     
    12121292  C_el1->Write();
    12131293  C_el2->Write();
     1294
     1295  for (int bin = 0; bin < Nbins; bin++)
     1296  {
     1297    plots_mu.at(bin).cenResolHist->Write();
     1298    plots_mutrack.at(bin).cenResolHist->Write();
     1299    plots_mu.at(bin).fwdResolHist->Write();
     1300    plots_mutrack.at(bin).fwdResolHist->Write();
     1301  }
    12141302
    12151303  histos_mu.first->Write();
Note: See TracChangeset for help on using the changeset viewer.