Fork me on GitHub

Changes in / [caa953a:998790a] in git


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • examples/Validation.cpp

    rcaa953a r998790a  
    343343  }
    344344}
    345 
    346 
    347 template<typename T>
    348 void 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 
    419345void GetJetsEres(std::vector<resolPlot> *histos, TClonesArray *branchJet, TClonesArray *branchGenJet, ExRootTreeReader *treeReader)
    420346{
     
    472398      if(deltaR < 0.25)
    473399      {
    474         pt  = genJetMomentum.E();
     400        pt  = genJetMomentum.Pt();
    475401        eta = TMath::Abs(genJetMomentum.Eta());
    476402
     
    479405            if(pt > histos->at(bin).ptmin && pt < histos->at(bin).ptmax && eta < 1.5)
    480406            {
    481                 histos->at(bin).cenResolHist->Fill(jetMomentum.E()/bestGenJetMomentum.E());
     407                histos->at(bin).cenResolHist->Fill(jetMomentum.Pt()/bestGenJetMomentum.Pt());
    482408            }
    483409            else if(pt > histos->at(bin).ptmin && pt < histos->at(bin).ptmax && eta < 2.5)
    484410            {
    485                 histos->at(bin).fwdResolHist->Fill(jetMomentum.E()/bestGenJetMomentum.E());
     411                histos->at(bin).fwdResolHist->Fill(jetMomentum.Pt()/bestGenJetMomentum.Pt());
    486412            }
     413
    487414        }
    488415      }
     
    549476  TF1 *f1 = new TF1("f1", "gaus", hist->GetMean()-2*hist->GetRMS(), hist->GetMean()+2*hist->GetRMS());
    550477  hist->Fit("f1","RQ");
    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 
     478  Double_t sig = f1->GetParameter(2);
     479  Double_t sigErr = f1->GetParError(2);
    558480  delete f1;
    559   delete f2;
    560481  return make_pair (sig, sigErr);
    561482}
     
    689610}
    690611
    691 void DrawAxis(TMultiGraph *mg, TLegend *leg, double max, int type = 0)
     612void DrawAxis(TMultiGraph *mg, TLegend *leg, double max)
    692613{
    693614  mg->SetMinimum(0.);
     
    695616  mg->GetXaxis()->SetLimits(ptrangemin,ptrangemax);
    696617  mg->GetYaxis()->SetTitle("resolution");
    697   if (type == 0) mg->GetXaxis()->SetTitle("E [GeV]");
    698   else mg->GetXaxis()->SetTitle("p_{T} [GeV]");
     618  mg->GetXaxis()->SetTitle("p_{T} [GeV]");
    699619  mg->GetYaxis()->SetTitleSize(0.07);
    700620  mg->GetXaxis()->SetTitleSize(0.07);
     
    721641}
    722642
    723 void DrawAxis(TH1D *h, TLegend *leg, int type = 0)
     643void DrawAxis(TH1D *h, TLegend *leg, int type)
    724644{
    725645
    726646  h->GetYaxis()->SetRangeUser(0,1.0);
    727   if (type == 0) h->GetXaxis()->SetTitle("E [GeV]");
    728   else h->GetXaxis()->SetTitle("p_{T} [GeV]");
     647  if (type == 0) h->GetXaxis()->SetTitle("p_{T} [GeV]");
     648  else h->GetXaxis()->SetTitle("#eta");
    729649  h->GetYaxis()->SetTitle("efficiency");
    730650  h->GetYaxis()->SetTitleSize(0.07);
     
    862782  histos_el.first->Draw("same ][");
    863783  addHist(histos_el.first, leg_el1, 1);
    864   DrawAxis(histos_eltrack.first, leg_el1,1);
     784  DrawAxis(histos_eltrack.first, leg_el1, 0);
    865785
    866786  leg_el1->Draw();
     
    877797  addHist(histos_el.second, leg_el2, 1);
    878798
    879   DrawAxis(histos_eltrack.second, leg_el2, 1);
     799  DrawAxis(histos_eltrack.second, leg_el2, 0);
    880800  leg_el2->Draw();
    881801
     
    930850  std::pair <TH1D*,TH1D*> histos_mutrack = GetEff<Track>(branchTrackMuon, branchParticleMuon, "muonTrack", muID, treeReaderMuon);
    931851
    932   // Muon Pt Resolution
     852  // Muon Energy Resolution
    933853  std::vector<resolPlot> plots_mu;
    934854  HistogramsCollection(&plots_mu, TMath::Log10(ptrangemin), TMath::Log10(ptrangemax), "muons");
    935   GetPtres<Muon>(&plots_mu, branchMuon, branchParticleMuon, muID, treeReaderMuon);
     855  GetEres<Muon>(&plots_mu, branchMuon, branchParticleMuon, muID, treeReaderMuon);
    936856  TGraphErrors gr_mu = EresGraph(&plots_mu, true);
    937857  TGraphErrors gr_muFwd = EresGraph(&plots_mu, false);
     
    942862  std::vector<resolPlot> plots_mutrack;
    943863  HistogramsCollection(&plots_mutrack, TMath::Log10(ptrangemin), TMath::Log10(ptrangemax), "muonsTracks");
    944   GetPtres<Track>(&plots_mutrack, branchTrackMuon, branchParticleMuon, muID, treeReaderMuon);
     864  GetEres<Track>(&plots_mutrack, branchTrackMuon, branchParticleMuon, muID, treeReaderMuon);
    945865  TGraphErrors gr_mutrack = EresGraph(&plots_mutrack, true);
    946866  TGraphErrors gr_mutrackFwd = EresGraph(&plots_mutrack, false);
     
    964884  addHist(histos_mu.first, leg_mu1, 1);
    965885
    966   DrawAxis(histos_mutrack.first, leg_mu1, 1);
     886  DrawAxis(histos_mutrack.first, leg_mu1, 0);
    967887
    968888  leg_mu1->Draw();
     
    999919  leg_mu->Draw();
    1000920
    1001   DrawAxis(mg_mu, leg_mu, 0.3, 1);
     921  DrawAxis(mg_mu, leg_mu, 0.3);
    1002922
    1003923  C_mu->cd(2);
     
    1013933  leg_muFwd->Draw();
    1014934
    1015   DrawAxis(mg_muFwd, leg_muFwd, 0.3, 1);
     935  DrawAxis(mg_muFwd, leg_muFwd, 0.3);
    1016936
    1017937  C_mu1->Print("delphes_validation.pdf","pdf");
     
    1065985  addHist(histos_ph.first, leg_ph1, 1);
    1066986
    1067   DrawAxis(histos_phtower.first, leg_ph1, 1);
     987  DrawAxis(histos_phtower.first, leg_ph1, 0);
    1068988  leg_ph1->Draw();
    1069989
     
    11001020  leg_ph->Draw();
    11011021
    1102   DrawAxis(mg_ph, leg_ph, 0.1);
     1022  DrawAxis(mg_ph, leg_ph, 0.3);
    11031023
    11041024  C_ph->cd(2);
     
    11141034  leg_phFwd->Draw();
    11151035
    1116   DrawAxis(mg_phFwd, leg_phFwd, 0.1);
     1036  DrawAxis(mg_phFwd, leg_phFwd, 0.3);
    11171037
    11181038  C_ph1->Print("delphes_validation.pdf","pdf");
     
    11711091  addHist(histos_btag.first, leg_btag1, 0);
    11721092
    1173   DrawAxis(histos_btag.first, leg_btag1, 1);
     1093  DrawAxis(histos_btag.first, leg_btag1, 0);
    11741094  leg_btag1->Draw();
    11751095
     
    11831103  addHist(histos_btag.second, leg_btag2, 0);
    11841104
    1185   DrawAxis(histos_btag.second, leg_btag2, 1);
     1105  DrawAxis(histos_btag.second, leg_btag2, 0);
    11861106  leg_btag2->Draw();
    11871107  C_btag1->cd(0);
     
    11991119  addHist(histos_tautag.first, leg_tautag1, 0);
    12001120
    1201   DrawAxis(histos_tautag.first, leg_tautag1, 1);
     1121  DrawAxis(histos_tautag.first, leg_tautag1, 0);
    12021122  leg_tautag1->Draw();
    12031123
     
    12111131  addHist(histos_tautag.second, leg_tautag2, 0);
    12121132
    1213   DrawAxis(histos_tautag.second, leg_tautag2, 1);
     1133  DrawAxis(histos_tautag.second, leg_tautag2, 0);
    12141134  leg_tautag2->Draw();
    12151135  C_tautag1->cd(0);
     
    12291149  addGraph(mg_jet, &gr_pfjets, leg_jet, 1);
    12301150
    1231   mg_jet->Draw("ALX");
     1151  mg_jet->Draw("ACX");
    12321152  leg_jet->Draw();
    12331153
    1234   DrawAxis(mg_jet, leg_jet, 0.5);
     1154  DrawAxis(mg_jet, leg_jet, 0.25);
    12351155
    12361156  C_jet->cd(2);
    12371157  TMultiGraph *mg_jetFwd = new TMultiGraph(jetResFwd,jetResFwd);
    12381158  TLegend *leg_jetFwd = new TLegend(resLegXmin,resLegYmin,resLegXmax,resLegYmax);
    1239   leg_jetFwd->SetHeader("#splitline{jets}{1.5 < |#eta| < 2.5}");
     1159  leg_jetFwd->SetHeader("#splitline{jets}{|#eta| < 1.5}");
    12401160  leg_jetFwd->AddEntry("","","");
    12411161
     
    12431163  addGraph(mg_jetFwd, &gr_pfjetsFwd, leg_jetFwd, 1);
    12441164
    1245   mg_jetFwd->Draw("ALX");
     1165  mg_jetFwd->Draw("ACX");
    12461166  leg_jetFwd->Draw();
    12471167
    1248   DrawAxis(mg_jetFwd, leg_jetFwd, 0.5);
     1168  DrawAxis(mg_jetFwd, leg_jetFwd, 0.25);
    12491169
    12501170  TString metRes = "MetRes";
     
    12921212  C_el1->Write();
    12931213  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   }
    13021214
    13031215  histos_mu.first->Write();
Note: See TracChangeset for help on using the changeset viewer.