CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SUSY_HLT_PhotonMET.cc
Go to the documentation of this file.
7 
8 
10 {
11  edm::LogInfo("SUSY_HLT_PhotonMET") << "Constructor SUSY_HLT_PhotonMET::SUSY_HLT_PhotonMET " << std::endl;
12  // Get parameters from configuration file
13  thePfMETCollection_ = consumes<reco::PFMETCollection>(ps.getParameter<edm::InputTag>("pfMETCollection"));
14  thePhotonCollection_ = consumes<reco::PhotonCollection>(ps.getParameter<edm::InputTag>("photonCollection"));
15  triggerResults_ = consumes<edm::TriggerResults>(ps.getParameter<edm::InputTag>("TriggerResults"));
16  triggerPath_ = ps.getParameter<std::string>("TriggerPath");
17  triggerPathBase_ = ps.getParameter<std::string>("TriggerPathBase");
18  ptThrOffline_ = ps.getUntrackedParameter<double>("ptThrOffline");
19  metThrOffline_ = ps.getUntrackedParameter<double>("metThrOffline");
20 }
21 
23 {
24  edm::LogInfo("SUSY_HLT_PhotonMET") << "Destructor SUSY_HLT_PhotonMET::~SUSY_HLT_PhotonMET " << std::endl;
25 }
26 
28 {
29  edm::LogInfo("SUSY_HLT_PhotonMET") << "SUSY_HLT_PhotonMET::beginRun" << std::endl;
30 }
31 
33 {
34  edm::LogInfo("SUSY_HLT_PhotonMET") << "SUSY_HLT_PhotonMET::bookHistograms" << std::endl;
35  //book at beginRun
36  bookHistos(ibooker_);
37 }
38 
40  edm::EventSetup const& context)
41 {
42  edm::LogInfo("SUSY_HLT_PhotonMET") << "SUSY_HLT_PhotonMET::beginLuminosityBlock" << std::endl;
43 }
44 
46 {
47  edm::LogInfo("SUSY_HLT_PhotonMET") << "SUSY_HLT_PhotonMET::analyze" << std::endl;
48 
49  //-------------------------------
50  //--- MET
51  //-------------------------------
52  edm::Handle<reco::PFMETCollection> pfMETCollection;
53  e.getByToken(thePfMETCollection_, pfMETCollection);
54  if ( !pfMETCollection.isValid() ){
55  edm::LogError ("SUSY_HLT_PhotonMET") << "invalid met collection" << "\n";
56  return;
57  }
58  //-------------------------------
59  //--- Photon
60  //-------------------------------
61  edm::Handle<reco::PhotonCollection> photonCollection;
62  e.getByToken (thePhotonCollection_, photonCollection);
63  if ( !photonCollection.isValid() ){
64  edm::LogError ("SUSY_HLT_PhotonMET") << "invalid egamma collection" << "\n";
65  return;
66  }
67 
68  //check what is in the menu
70  e.getByToken(triggerResults_,hltresults);
71  if(!hltresults.isValid()){
72  edm::LogError ("SUSY_HLT_PhotonMET") << "invalid collection: TriggerResults" << "\n";
73  return;
74  }
75 
76  // use only events with leading photon in barrel
77  if (photonCollection->size()==0 || abs(photonCollection->begin()->superCluster()->eta()) > 1.4442) return;
78 
79  // get reco photon and met
80  float const recoPhotonPt = photonCollection->size() ? photonCollection->begin()->et() : 0;
81  float const recoMET = pfMETCollection->size() ? pfMETCollection->begin()->et() : 0;
82  h_recoPhotonPt->Fill(recoPhotonPt);
83  h_recoMet->Fill(recoMET);
84 
85  // the actual trigger efficiencies
86  bool hasFired = false, hasFiredBaseTrigger=false;
87  edm::TriggerNames const &trigNames = e.triggerNames(*hltresults);
88  unsigned int const numTriggers = trigNames.size();
89  for( unsigned int hltIndex=0; hltIndex<numTriggers; ++hltIndex ){
90  if (trigNames.triggerName(hltIndex).find(triggerPath_) != std::string::npos && hltresults->wasrun(hltIndex) && hltresults->accept(hltIndex)) hasFired = true;
91  if (trigNames.triggerName(hltIndex).find(triggerPathBase_) != std::string::npos && hltresults->wasrun(hltIndex) && hltresults->accept(hltIndex)) hasFiredBaseTrigger = true;
92  }
93 
94  if(hasFiredBaseTrigger || !e.isRealData()) {
95  // passed base trigger
96  if (recoPhotonPt>ptThrOffline_) h_metTurnOn_den->Fill(recoMET);
97  if (recoMET>metThrOffline_) h_photonTurnOn_den->Fill(recoPhotonPt);
98  if (hasFired){
99  // passed base and signal trigger
100  if (recoPhotonPt>ptThrOffline_) h_metTurnOn_num->Fill(recoMET);
101  if (recoMET>metThrOffline_) h_photonTurnOn_num->Fill(recoPhotonPt);
102  }
103  }
104 }
105 
107 {
108  edm::LogInfo("SUSY_HLT_PhotonMET") << "SUSY_HLT_PhotonMET::endLuminosityBlock" << std::endl;
109 }
110 
111 
113 {
114  edm::LogInfo("SUSY_HLT_PhotonMET") << "SUSY_HLT_PhotonMET::endRun" << std::endl;
115 }
116 
118 {
119  ibooker_.cd();
120  ibooker_.setCurrentFolder("HLT/SUSYBSM/" + triggerPath_);
121 
122  //offline quantities
123  h_recoPhotonPt = ibooker_.book1D("recoPhotonPt", "reco Photon transverse momentum; p_{T} (GeV)", 20, 0, 1000);
124  h_recoMet = ibooker_.book1D("recoMet", "reco Missing transverse energy;E_{T}^{miss} (GeV)", 20, 0, 1000);
125  h_metTurnOn_num = ibooker_.book1D("pfMetTurnOn_num", "PF MET Turn On Numerator", 20, 0, 500);
126  h_metTurnOn_den = ibooker_.book1D("pfMetTurnOn_den", "PF MET Turn On Denominator", 20, 0, 500);
127  h_photonTurnOn_num = ibooker_.book1D("photonTurnOn_num", "Photon Turn On Numerator", 20, 0, 1000);
128  h_photonTurnOn_den = ibooker_.book1D("photonTurnOn_den", "Photon Turn On Denominator", 20, 0, 1000);
129 
130  ibooker_.cd();
131 }
132 
133 //define this as a plug-in
MonitorElement * h_recoMet
MonitorElement * h_metTurnOn_den
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
virtual edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const
Definition: Event.cc:215
MonitorElement * h_recoPhotonPt
MonitorElement * h_metTurnOn_num
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:462
void cd(void)
Definition: DQMStore.cc:268
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
void endLuminosityBlock(edm::LuminosityBlock const &lumi, edm::EventSetup const &eSetup)
Strings::size_type size() const
Definition: TriggerNames.cc:39
void endRun(edm::Run const &run, edm::EventSetup const &eSetup)
void analyze(edm::Event const &e, edm::EventSetup const &eSetup)
bool isRealData() const
Definition: EventBase.h:63
void Fill(long long x)
MonitorElement * h_photonTurnOn_den
edm::EDGetTokenT< reco::PhotonCollection > thePhotonCollection_
edm::EDGetTokenT< edm::TriggerResults > triggerResults_
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:115
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
void dqmBeginRun(edm::Run const &, edm::EventSetup const &) override
void beginLuminosityBlock(edm::LuminosityBlock const &lumi, edm::EventSetup const &eSetup)
bool isValid() const
Definition: HandleBase.h:75
static const char *const trigNames[]
Definition: EcalDumpRaw.cc:74
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:276
edm::EDGetTokenT< reco::PFMETCollection > thePfMETCollection_
std::string const & triggerName(unsigned int index) const
Definition: TriggerNames.cc:27
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
MonitorElement * h_photonTurnOn_num
std::string triggerPathBase_
SUSY_HLT_PhotonMET(const edm::ParameterSet &ps)
void bookHistos(DQMStore::IBooker &)
Definition: Run.h:43