#include <RecoEgamma/PhotonIdentification/test/PatPhotonSimpleAnalyzer.cc>
Classes | |
struct | struct_recPhoton |
Public Member Functions | |
virtual void | analyze (const edm::Event &, const edm::EventSetup &) |
virtual void | beginJob () |
virtual void | endJob () |
PatPhotonSimpleAnalyzer (const edm::ParameterSet &) | |
~PatPhotonSimpleAnalyzer () | |
Private Attributes | |
bool | createPhotonTTree_ |
TH1F * | h_ebeeGap_ |
TH1F * | h_ebgap_ |
TH1F * | h_eeGap_ |
TH1F * | h_hadoverem_ |
TH1F * | h_isoEcalRecHit_ |
TH1F * | h_isoHcalRecHit_ |
TH1F * | h_nPassingPho_ |
TH1F * | h_nPho_ |
TH1F * | h_ntrk_hollow_ |
TH1F * | h_ntrk_solid_ |
TH1F * | h_photonEt_ |
TH1F * | h_photonEta_ |
TH1F * | h_photonInAnyGap_ |
TH1F * | h_photonPhi_ |
TH1F * | h_photonScEt_ |
TH1F * | h_photonScEta_ |
TH1F * | h_photonScEtaWidth_ |
TH1F * | h_photonScPhi_ |
TH1F * | h_r9_ |
TH1F * | h_trk_pt_hollow_ |
TH1F * | h_trk_pt_solid_ |
double | maxPhotonAbsEta_ |
double | maxPhotonHoverE_ |
double | minPhotonAbsEta_ |
double | minPhotonEt_ |
double | minPhotonR9_ |
std::string | outputFile_ |
struct_recPhoton | recPhoton |
TFile * | rootFile_ |
TTree * | tree_PhotonAll_ |
Description: Generate various histograms for cuts and important photon ID parameters using a data sample of photons in QCD events.
Implementation: <Notes on="" implementation>="">
Description: Analyzer to make a load of histograms for the improvement of the PhotonID object
Implementation: \
Definition at line 37 of file PatPhotonSimpleAnalyzer.h.
PatPhotonSimpleAnalyzer::PatPhotonSimpleAnalyzer | ( | const edm::ParameterSet & | ps | ) | [explicit] |
Definition at line 44 of file PatPhotonSimpleAnalyzer.cc.
References edm::ParameterSet::getParameter(), and AlCaHLTBitMon_QueryRunRegistry::string.
{ // Read Parameters from configuration file // output filename outputFile_ = ps.getParameter<std::string>("outputFile"); // Read variables that must be passed to allow a // supercluster to be placed in histograms as a photon. minPhotonEt_ = ps.getParameter<double>("minPhotonEt"); minPhotonAbsEta_ = ps.getParameter<double>("minPhotonAbsEta"); maxPhotonAbsEta_ = ps.getParameter<double>("maxPhotonAbsEta"); minPhotonR9_ = ps.getParameter<double>("minPhotonR9"); maxPhotonHoverE_ = ps.getParameter<double>("maxPhotonHoverE"); // Read variable to that decidedes whether // a TTree of photons is created or not createPhotonTTree_ = ps.getParameter<bool>("createPhotonTTree"); // open output file to store histograms rootFile_ = TFile::Open(outputFile_.c_str(),"RECREATE"); }
PatPhotonSimpleAnalyzer::~PatPhotonSimpleAnalyzer | ( | ) |
Definition at line 69 of file PatPhotonSimpleAnalyzer.cc.
{ // do anything here that needs to be done at desctruction time // (e.g. close files, deallocate resources etc.) delete rootFile_; }
void PatPhotonSimpleAnalyzer::analyze | ( | const edm::Event & | evt, |
const edm::EventSetup & | es | ||
) | [virtual] |
Implements edm::EDAnalyzer.
Definition at line 130 of file PatPhotonSimpleAnalyzer.cc.
References pat::Photon::ecalIso(), reco::Photon::ecalRecHitSumEtConeDR04(), reco::LeafCandidate::et(), reco::LeafCandidate::eta(), HcalObjRepresent::Fill(), edm::Event::getByLabel(), reco::Photon::hadronicOverEm(), pat::Photon::hcalIso(), reco::Photon::hcalTowerSumEtConeDR04(), i, reco::Photon::isEB(), reco::Photon::isEBEEGap(), reco::Photon::isEBGap(), reco::Photon::isEE(), reco::Photon::isEEGap(), reco::Photon::nTrkHollowConeDR04(), reco::Photon::nTrkSolidConeDR04(), reco::LeafCandidate::phi(), interactiveExample::photons, reco::Photon::r9(), pat::Photon::superCluster(), pat::Photon::trackIso(), reco::Photon::trkSumPtHollowConeDR04(), and reco::Photon::trkSumPtSolidConeDR04().
{ using namespace std; using namespace edm; // Grab pat::Photon Handle< View<pat::Photon> > photonHandle; evt.getByLabel("selectedLayer1Photons", photonHandle); View<pat::Photon> photons = *photonHandle; int photonCounter = 0; for (int i=0; i<int(photons.size()); i++) { pat::Photon currentPhoton = photons.at(i); float photonEt = currentPhoton.et(); float superClusterEt = (currentPhoton.superCluster()->energy())/(cosh(currentPhoton.superCluster()->position().eta())); // Only store photon candidates (SuperClusters) that pass some simple cuts bool passCuts = ( photonEt > minPhotonEt_ ) && ( fabs(currentPhoton.eta()) > minPhotonAbsEta_ ) && ( fabs(currentPhoton.eta()) < maxPhotonAbsEta_ ) && ( currentPhoton.r9() > minPhotonR9_ ) && ( currentPhoton.hadronicOverEm() < maxPhotonHoverE_ ) ; if ( passCuts ) { // fill histograms // // PhotonID Variables h_isoEcalRecHit_->Fill(currentPhoton.ecalRecHitSumEtConeDR04()); h_isoHcalRecHit_->Fill(currentPhoton.hcalTowerSumEtConeDR04()); h_trk_pt_solid_ ->Fill(currentPhoton.trkSumPtSolidConeDR04()); h_trk_pt_hollow_->Fill(currentPhoton.trkSumPtHollowConeDR04()); h_ntrk_solid_-> Fill(currentPhoton.nTrkSolidConeDR04()); h_ntrk_hollow_-> Fill(currentPhoton.nTrkHollowConeDR04()); h_ebgap_-> Fill(currentPhoton.isEBGap()); h_eeGap_-> Fill(currentPhoton.isEEGap()); h_ebeeGap_-> Fill(currentPhoton.isEBEEGap()); h_r9_-> Fill(currentPhoton.r9()); // Photon Variables h_photonEt_-> Fill(photonEt); h_photonEta_-> Fill(currentPhoton.eta()); h_photonPhi_-> Fill(currentPhoton.phi()); h_hadoverem_-> Fill(currentPhoton.hadronicOverEm()); // Photon's SuperCluster Variables // eta is with respect to detector (not physics) vertex, // thus Et and eta are different from photon. h_photonScEt_-> Fill(superClusterEt); h_photonScEta_-> Fill(currentPhoton.superCluster()->position().eta()); h_photonScPhi_-> Fill(currentPhoton.superCluster()->position().phi()); h_photonScEtaWidth_->Fill(currentPhoton.superCluster()->etaWidth()); // It passed photon cuts, mark it h_nPassingPho_->Fill(1.0); // fill TTree (optional) // if ( createPhotonTTree_ ) { recPhoton.isolationEcalRecHit = currentPhoton.ecalRecHitSumEtConeDR04(); recPhoton.isolationHcalRecHit = currentPhoton.hcalTowerSumEtConeDR04(); recPhoton.isolationSolidTrkCone = currentPhoton.trkSumPtSolidConeDR04(); recPhoton.isolationHollowTrkCone = currentPhoton.trkSumPtHollowConeDR04(); recPhoton.nTrkSolidCone = currentPhoton.nTrkSolidConeDR04(); recPhoton.nTrkHollowCone = currentPhoton.nTrkHollowConeDR04(); recPhoton.isEBGap = currentPhoton.isEBGap(); recPhoton.isEEGap = currentPhoton.isEEGap(); recPhoton.isEBEEGap = currentPhoton.isEBEEGap(); recPhoton.r9 = currentPhoton.r9(); recPhoton.et = currentPhoton.et(); recPhoton.eta = currentPhoton.eta(); recPhoton.phi = currentPhoton.phi(); recPhoton.hadronicOverEm = currentPhoton.hadronicOverEm(); recPhoton.ecalIso = currentPhoton.ecalIso(); recPhoton.hcalIso = currentPhoton.hcalIso(); recPhoton.trackIso = currentPhoton.trackIso(); // Fill the tree (this records all the recPhoton.* since // tree_PhotonAll_ was set to point at that. tree_PhotonAll_->Fill(); } // Record whether it was near any module gap. // Very convoluted at the moment. bool inAnyGap = currentPhoton.isEBEEGap() || (currentPhoton.isEB()&¤tPhoton.isEBGap()) || (currentPhoton.isEE()&¤tPhoton.isEEGap()); if (inAnyGap) { h_photonInAnyGap_->Fill(1.0); } else { h_photonInAnyGap_->Fill(0.0); } photonCounter++; } else { // This didn't pass photon cuts, mark it h_nPassingPho_->Fill(0.0); } } // End Loop over photons h_nPho_->Fill(photonCounter); }
void PatPhotonSimpleAnalyzer::beginJob | ( | void | ) | [virtual] |
Reimplemented from edm::EDAnalyzer.
Definition at line 83 of file PatPhotonSimpleAnalyzer.cc.
References Pi.
{ // go to *OUR* rootfile rootFile_->cd(); // Book Histograms // PhotonID Histograms h_isoEcalRecHit_ = new TH1F("photonEcalIso", "Ecal Rec Hit Isolation", 100, 0, 100); h_isoHcalRecHit_ = new TH1F("photonHcalIso", "Hcal Rec Hit Isolation", 100, 0, 100); h_trk_pt_solid_ = new TH1F("photonTrackSolidIso", "Sum of track pT in a cone of #DeltaR" , 100, 0, 100); h_trk_pt_hollow_ = new TH1F("photonTrackHollowIso", "Sum of track pT in a hollow cone" , 100, 0, 100); h_ntrk_solid_ = new TH1F("photonTrackCountSolid", "Number of tracks in a cone of #DeltaR", 100, 0, 100); h_ntrk_hollow_ = new TH1F("photonTrackCountHollow", "Number of tracks in a hollow cone", 100, 0, 100); h_ebgap_ = new TH1F("photonInEBgap", "Ecal Barrel gap flag", 2, -0.5, 1.5); h_eeGap_ = new TH1F("photonInEEgap", "Ecal Endcap gap flag", 2, -0.5, 1.5); h_ebeeGap_ = new TH1F("photonInEEgap", "Ecal Barrel/Endcap gap flag", 2, -0.5, 1.5); h_r9_ = new TH1F("photonR9", "R9 = E(3x3) / E(SuperCluster)", 300, 0, 3); // Photon Histograms h_photonEt_ = new TH1F("photonEt", "Photon E_{T}", 200, 0, 200); h_photonEta_ = new TH1F("photonEta", "Photon #eta", 200, -4, 4); h_photonPhi_ = new TH1F("photonPhi", "Photon #phi", 200, -1.*TMath::Pi(), TMath::Pi()); h_hadoverem_ = new TH1F("photonHoverE", "Hadronic over EM", 200, 0, 1); // Photon's SuperCluster Histograms h_photonScEt_ = new TH1F("photonScEt", "Photon SuperCluster E_{T}", 200, 0, 200); h_photonScEta_ = new TH1F("photonScEta", "Photon #eta", 200, -4, 4); h_photonScPhi_ = new TH1F("photonScPhi", "Photon #phi", 200, -1.*TMath::Pi(), TMath::Pi()); h_photonScEtaWidth_ = new TH1F("photonScEtaWidth","#eta-width", 100, 0, .1); // Composite or Other Histograms h_photonInAnyGap_ = new TH1F("photonInAnyGap", "Photon in any gap flag", 2, -0.5, 1.5); h_nPassingPho_ = new TH1F("photonPassingCount", "Total number photons (0=NotPassing, 1=Passing)", 2, -0.5, 1.5); h_nPho_ = new TH1F("photonCount", "Number of photons passing cuts in event", 10, 0, 10); // Create a TTree of photons if set to 'True' in config file if ( createPhotonTTree_ ) { tree_PhotonAll_ = new TTree("TreePhotonAll", "Reconstructed Photon"); tree_PhotonAll_->Branch("recPhoton", &recPhoton.isolationEcalRecHit, "isolationEcalRecHit/F:isolationHcalRecHit:isolationSolidTrkCone:isolationHollowTrkCone:nTrkSolidCone:nTrkHollowCone:isEBGap:isEEGap:isEBEEGap:r9:et:eta:phi:hadronicOverEm:ecalIso:hcalIso:trackIso"); } }
void PatPhotonSimpleAnalyzer::endJob | ( | void | ) | [virtual] |
Reimplemented from edm::EDAnalyzer.
Definition at line 245 of file PatPhotonSimpleAnalyzer.cc.
{ // go to *OUR* root file and store histograms rootFile_->cd(); // PhotonID Histograms h_isoEcalRecHit_->Write(); h_isoHcalRecHit_->Write(); h_trk_pt_solid_-> Write(); h_trk_pt_hollow_->Write(); h_ntrk_solid_-> Write(); h_ntrk_hollow_-> Write(); h_ebgap_-> Write(); h_eeGap_-> Write(); h_ebeeGap_-> Write(); h_r9_-> Write(); // Photon Histograms h_photonEt_-> Write(); h_photonEta_-> Write(); h_photonPhi_-> Write(); h_hadoverem_-> Write(); // Photon's SuperCluster Histograms h_photonScEt_-> Write(); h_photonScEta_-> Write(); h_photonScPhi_-> Write(); h_photonScEtaWidth_->Write(); // Composite or Other Histograms h_photonInAnyGap_->Write(); h_nPassingPho_-> Write(); h_nPho_-> Write(); // Write the root file (really writes the TTree) rootFile_->Write(); rootFile_->Close(); }
bool PatPhotonSimpleAnalyzer::createPhotonTTree_ [private] |
Definition at line 54 of file PatPhotonSimpleAnalyzer.h.
TH1F* PatPhotonSimpleAnalyzer::h_ebeeGap_ [private] |
Definition at line 94 of file PatPhotonSimpleAnalyzer.h.
TH1F* PatPhotonSimpleAnalyzer::h_ebgap_ [private] |
Definition at line 92 of file PatPhotonSimpleAnalyzer.h.
TH1F* PatPhotonSimpleAnalyzer::h_eeGap_ [private] |
Definition at line 93 of file PatPhotonSimpleAnalyzer.h.
TH1F* PatPhotonSimpleAnalyzer::h_hadoverem_ [private] |
Definition at line 101 of file PatPhotonSimpleAnalyzer.h.
TH1F* PatPhotonSimpleAnalyzer::h_isoEcalRecHit_ [private] |
Definition at line 86 of file PatPhotonSimpleAnalyzer.h.
TH1F* PatPhotonSimpleAnalyzer::h_isoHcalRecHit_ [private] |
Definition at line 87 of file PatPhotonSimpleAnalyzer.h.
TH1F* PatPhotonSimpleAnalyzer::h_nPassingPho_ [private] |
Definition at line 111 of file PatPhotonSimpleAnalyzer.h.
TH1F* PatPhotonSimpleAnalyzer::h_nPho_ [private] |
Definition at line 112 of file PatPhotonSimpleAnalyzer.h.
TH1F* PatPhotonSimpleAnalyzer::h_ntrk_hollow_ [private] |
Definition at line 91 of file PatPhotonSimpleAnalyzer.h.
TH1F* PatPhotonSimpleAnalyzer::h_ntrk_solid_ [private] |
Definition at line 90 of file PatPhotonSimpleAnalyzer.h.
TH1F* PatPhotonSimpleAnalyzer::h_photonEt_ [private] |
Definition at line 98 of file PatPhotonSimpleAnalyzer.h.
TH1F* PatPhotonSimpleAnalyzer::h_photonEta_ [private] |
Definition at line 99 of file PatPhotonSimpleAnalyzer.h.
TH1F* PatPhotonSimpleAnalyzer::h_photonInAnyGap_ [private] |
Definition at line 110 of file PatPhotonSimpleAnalyzer.h.
TH1F* PatPhotonSimpleAnalyzer::h_photonPhi_ [private] |
Definition at line 100 of file PatPhotonSimpleAnalyzer.h.
TH1F* PatPhotonSimpleAnalyzer::h_photonScEt_ [private] |
Definition at line 104 of file PatPhotonSimpleAnalyzer.h.
TH1F* PatPhotonSimpleAnalyzer::h_photonScEta_ [private] |
Definition at line 105 of file PatPhotonSimpleAnalyzer.h.
TH1F* PatPhotonSimpleAnalyzer::h_photonScEtaWidth_ [private] |
Definition at line 107 of file PatPhotonSimpleAnalyzer.h.
TH1F* PatPhotonSimpleAnalyzer::h_photonScPhi_ [private] |
Definition at line 106 of file PatPhotonSimpleAnalyzer.h.
TH1F* PatPhotonSimpleAnalyzer::h_r9_ [private] |
Definition at line 95 of file PatPhotonSimpleAnalyzer.h.
TH1F* PatPhotonSimpleAnalyzer::h_trk_pt_hollow_ [private] |
Definition at line 89 of file PatPhotonSimpleAnalyzer.h.
TH1F* PatPhotonSimpleAnalyzer::h_trk_pt_solid_ [private] |
Definition at line 88 of file PatPhotonSimpleAnalyzer.h.
double PatPhotonSimpleAnalyzer::maxPhotonAbsEta_ [private] |
Definition at line 51 of file PatPhotonSimpleAnalyzer.h.
double PatPhotonSimpleAnalyzer::maxPhotonHoverE_ [private] |
Definition at line 53 of file PatPhotonSimpleAnalyzer.h.
double PatPhotonSimpleAnalyzer::minPhotonAbsEta_ [private] |
Definition at line 50 of file PatPhotonSimpleAnalyzer.h.
double PatPhotonSimpleAnalyzer::minPhotonEt_ [private] |
Definition at line 49 of file PatPhotonSimpleAnalyzer.h.
double PatPhotonSimpleAnalyzer::minPhotonR9_ [private] |
Definition at line 52 of file PatPhotonSimpleAnalyzer.h.
std::string PatPhotonSimpleAnalyzer::outputFile_ [private] |
Definition at line 48 of file PatPhotonSimpleAnalyzer.h.
Definition at line 78 of file PatPhotonSimpleAnalyzer.h.
TFile* PatPhotonSimpleAnalyzer::rootFile_ [private] |
Definition at line 81 of file PatPhotonSimpleAnalyzer.h.
TTree* PatPhotonSimpleAnalyzer::tree_PhotonAll_ [private] |
Definition at line 115 of file PatPhotonSimpleAnalyzer.h.