CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SUSY_HLT_DiJet_MET.cc
Go to the documentation of this file.
8 
9 
11 {
12  edm::LogInfo("SUSY_HLT_DiJet_MET") << "Constructor SUSY_HLT_DiJet_MET::SUSY_HLT_DiJet_MET " << std::endl;
13  // Get parameters from configuration file
14  theTrigSummary_ = consumes<trigger::TriggerEvent>(ps.getParameter<edm::InputTag>("trigSummary"));
15  thePfMETCollection_ = consumes<reco::PFMETCollection>(ps.getParameter<edm::InputTag>("pfMETCollection"));
16  theCaloMETCollection_ = consumes<reco::CaloMETCollection>(ps.getParameter<edm::InputTag>("caloMETCollection"));
17  thePfJetCollection_ = consumes<reco::PFJetCollection>(ps.getParameter<edm::InputTag>("pfJetCollection"));
18  theCaloJetCollection_ = consumes<reco::CaloJetCollection>(ps.getParameter<edm::InputTag>("caloJetCollection"));
19  triggerResults_ = consumes<edm::TriggerResults>(ps.getParameter<edm::InputTag>("TriggerResults"));
20  HLTProcess_ = ps.getParameter<std::string>("HLTProcess");
21  triggerPath_ = ps.getParameter<std::string>("TriggerPath");
22  triggerPathAuxiliaryForHadronic_ = ps.getParameter<std::string>("TriggerPathAuxiliaryForHadronic");
23  triggerFilter_ = ps.getParameter<edm::InputTag>("TriggerFilter");
24  triggerJetFilter_ = ps.getParameter<edm::InputTag>("TriggerJetFilter");
25  ptThrJetTrig_ = ps.getUntrackedParameter<double>("PtThrJetTrig");
26  etaThrJetTrig_ = ps.getUntrackedParameter<double>("EtaThrJetTrig");
27  ptThrJet_ = ps.getUntrackedParameter<double>("PtThrJet");
28  etaThrJet_ = ps.getUntrackedParameter<double>("EtaThrJet");
29  metCut_ = ps.getUntrackedParameter<double>("OfflineMetCut");
30 }
31 
33 {
34  edm::LogInfo("SUSY_HLT_DiJet_MET") << "Destructor SUSY_HLT_DiJet_MET::~SUSY_HLT_DiJet_MET " << std::endl;
35 }
36 
38 {
39 
40  bool changed;
41 
42  if (!fHltConfig.init(run, e, HLTProcess_, changed)) {
43  edm::LogError("SUSY_HLT_DiJet_MET") << "Initialization of HLTConfigProvider failed!!";
44  return;
45  }
46 
47  bool pathFound = false;
48  const std::vector<std::string> allTrigNames = fHltConfig.triggerNames();
49  for(size_t j = 0; j <allTrigNames.size(); ++j) {
50  if(allTrigNames[j].find(triggerPath_) != std::string::npos) {
51  pathFound = true;
52  }
53  }
54 
55  if(!pathFound) {
56  LogDebug("SUSY_HLT_DiJet_MET") << "Path not found" << "\n";
57  return;
58  }
59 
60  edm::LogInfo("SUSY_HLT_DiJet_MET") << "SUSY_HLT_DiJet_MET::beginRun" << std::endl;
61 }
62 
64 {
65  edm::LogInfo("SUSY_HLT_DiJet_MET") << "SUSY_HLT_DiJet_MET::bookHistograms" << std::endl;
66  //book at beginRun
67  bookHistos(ibooker_);
68 }
69 
71  edm::EventSetup const& context)
72 {
73  edm::LogInfo("SUSY_HLT_DiJet_MET") << "SUSY_HLT_DiJet_MET::beginLuminosityBlock" << std::endl;
74 }
75 
76 
77 
79  edm::LogInfo("SUSY_HLT_DiJet_MET") << "SUSY_HLT_DiJet_MET::analyze" << std::endl;
80 
81 
82  //-------------------------------
83  //--- MET
84  //-------------------------------
85  edm::Handle<reco::PFMETCollection> pfMETCollection;
86  e.getByToken(thePfMETCollection_, pfMETCollection);
87  if ( !pfMETCollection.isValid() ){
88  edm::LogError ("SUSY_HLT_DiJet_MET") << "invalid collection: PFMET" << "\n";
89  return;
90  }
91  edm::Handle<reco::CaloMETCollection> caloMETCollection;
92  e.getByToken(theCaloMETCollection_, caloMETCollection);
93  if ( !caloMETCollection.isValid() ){
94  edm::LogError ("SUSY_HLT_DiJet_MET") << "invalid collection: CaloMET" << "\n";
95  return;
96  }
97  //-------------------------------
98  //--- Jets
99  //-------------------------------
100  edm::Handle<reco::PFJetCollection> pfJetCollection;
101  e.getByToken (thePfJetCollection_,pfJetCollection);
102  if ( !pfJetCollection.isValid() ){
103  edm::LogError ("SUSY_HLT_DiJet_MET") << "invalid collection: PFJets" << "\n";
104  return;
105  }
106  edm::Handle<reco::CaloJetCollection> caloJetCollection;
107  e.getByToken (theCaloJetCollection_,caloJetCollection);
108  if ( !caloJetCollection.isValid() ){
109  edm::LogError ("SUSY_HLT_DiJet_MET") << "invalid collection: CaloJets" << "\n";
110  return;
111  }
112 
113  //-------------------------------
114  //--- Trigger
115  //-------------------------------
117  e.getByToken(triggerResults_,hltresults);
118  if(!hltresults.isValid()){
119  edm::LogError ("SUSY_HLT_DiJet_MET") << "invalid collection: TriggerResults" << "\n";
120  return;
121  }
122  edm::Handle<trigger::TriggerEvent> triggerSummary;
123  e.getByToken(theTrigSummary_, triggerSummary);
124  if(!triggerSummary.isValid()) {
125  edm::LogError ("SUSY_HLT_DiJet_MET") << "invalid collection: TriggerSummary" << "\n";
126  return;
127  }
128 
129 
130  //get online objects
131 
132  size_t filterIndex = triggerSummary->filterIndex( triggerFilter_ );
133  size_t jetFilterIndex = triggerSummary->filterIndex( triggerJetFilter_ );
134  trigger::TriggerObjectCollection triggerObjects = triggerSummary->getObjects();
135 
136  if( !(filterIndex >= triggerSummary->sizeFilters()) ){
137  const trigger::Keys& keys = triggerSummary->filterKeys( filterIndex );
138  for( size_t j = 0; j < keys.size(); ++j ){
139  trigger::TriggerObject foundObject = triggerObjects[keys[j]];
140  h_triggerMet->Fill(foundObject.pt());
141  h_triggerMetPhi->Fill(foundObject.phi());
142  }
143  }
144 
145  std::vector<float> ptJet, etaJet, phiJet;
146  if( !(jetFilterIndex >= triggerSummary->sizeFilters()) ){
147  const trigger::Keys& keys_jetfilter = triggerSummary->filterKeys( jetFilterIndex );
148  for( size_t j = 0; j < keys_jetfilter.size(); ++j ){
149  trigger::TriggerObject foundObject = triggerObjects[keys_jetfilter[j]];
150  h_triggerJetPt->Fill(foundObject.pt());
151  h_triggerJetEta->Fill(foundObject.eta());
152  h_triggerJetPhi->Fill(foundObject.phi());
153  if(foundObject.pt() > ptThrJetTrig_ && fabs(foundObject.eta()) < etaThrJetTrig_) {
154  ptJet.push_back(foundObject.pt());
155  etaJet.push_back(foundObject.eta());
156  phiJet.push_back(foundObject.phi());
157  }
158  }
159  }
160 
161 
162  bool hasFired = false;
163  bool hasFiredAuxiliaryForHadronicLeg = false;
164  const edm::TriggerNames& trigNames = e.triggerNames(*hltresults);
165  unsigned int numTriggers = trigNames.size();
166  for( unsigned int hltIndex=0; hltIndex<numTriggers; ++hltIndex ){
167  if (trigNames.triggerName(hltIndex).find(triggerPath_) != std::string::npos && hltresults->wasrun(hltIndex) && hltresults->accept(hltIndex)) hasFired = true;
168  if (trigNames.triggerName(hltIndex).find(triggerPathAuxiliaryForHadronic_) != std::string::npos && hltresults->wasrun(hltIndex) && hltresults->accept(hltIndex)) hasFiredAuxiliaryForHadronicLeg = true;
169  }
170 
171 
172 
173  if(hasFiredAuxiliaryForHadronicLeg) {
174 
175  int offlineJetCounter = 0;
176  int offlineCentralJets = 0;
177  int nMatch = 0, jet1Index = -1, jet2Index = -1;
178 
179  for (reco::PFJetCollection::const_iterator i_pfjet = pfJetCollection->begin(); i_pfjet != pfJetCollection->end(); ++i_pfjet){
180 
181  if (i_pfjet->pt() > ptThrJet_ && fabs(i_pfjet->eta()) < etaThrJet_) {
182  offlineCentralJets++;
183  if(offlineCentralJets == 2 && pfMETCollection->begin()->et()>metCut_) h_pfJet2PtTurnOn_den->Fill(i_pfjet->pt());
184 
185  for(unsigned int itrigjet = 0; itrigjet < ptJet.size(); ++itrigjet) {
186  if(itrigjet < 2 && (sqrt((i_pfjet->phi()-phiJet.at(itrigjet))*(i_pfjet->phi()-phiJet.at(itrigjet)) + (i_pfjet->eta()-etaJet.at(itrigjet))*(i_pfjet->eta()-etaJet.at(itrigjet))) < 0.4)) {
187  nMatch++;
188  if(nMatch == 1) jet1Index = offlineJetCounter;
189  if(nMatch == 2) jet2Index = offlineJetCounter;
190 
191  if(hasFired) {
192  h_pfJetPt->Fill(i_pfjet->pt());
193  h_pfJetEta->Fill(i_pfjet->eta());
194  h_pfJetPhi->Fill(i_pfjet->phi());
195  if(offlineCentralJets == 2 && pfMETCollection->begin()->et()>metCut_) h_pfJet2PtTurnOn_num->Fill(i_pfjet->pt());
196  }
197 
198  break;
199  }
200  }
201  }
202 
203  offlineJetCounter++;
204  }
205 
206  if(hasFired) {
207  h_pfMetTurnOn_num->Fill(pfMETCollection->begin()->et());
208  h_pfMetPhi->Fill(pfMETCollection->begin()->phi());
209  h_caloMetvsPFMet->Fill(pfMETCollection->begin()->et(), caloMETCollection->begin()->et());
210 
211  if(jet1Index > -1 && jet2Index > -1) {
212  h_pfJet1Jet2DPhi->Fill(fabs(reco::deltaPhi(pfJetCollection->at(jet1Index).phi(), pfJetCollection->at(jet2Index).phi())));
213  }
214 
215  }
216 
217  h_pfMetTurnOn_den-> Fill(pfMETCollection->begin()->et());
218 
219  }
220 
221  ptJet.clear();
222  etaJet.clear();
223  phiJet.clear();
224 
225 }
226 
227 
229 {
230  edm::LogInfo("SUSY_HLT_DiJet_MET") << "SUSY_HLT_DiJet_MET::endLuminosityBlock" << std::endl;
231 }
232 
233 
235 {
236  edm::LogInfo("SUSY_HLT_DiJet_MET") << "SUSY_HLT_DiJet_MET::endRun" << std::endl;
237 }
238 
240 {
241  ibooker_.cd();
242  ibooker_.setCurrentFolder("HLT/SUSYBSM/" + triggerPath_);
243 
244  //offline quantities
245  h_pfMetPhi = ibooker_.book1D("pfMetPhi", "PF MET Phi", 20, -3.5, 3.5);
246  h_pfJetPt = ibooker_.book1D("pfJetPt", "PF Jet p_{T} (trigger-matched jets, |#eta| < 2.4); GeV", 20, 0.0, 500.0);
247  h_pfJetEta = ibooker_.book1D("pfJetEta", "PF Jet #eta (trigger-matched jets, |#eta| < 2.4)", 20, -3.0, 3.0);
248  h_pfJetPhi = ibooker_.book1D("pfJetPhi", "PF Jet #phi (trigger-matched jets, |#eta| < 2.4)", 20, -3.5, 3.5);
249  h_pfJet1Jet2DPhi = ibooker_.book1D("pfJet1Jet2DPhi", "|#Delta#phi| between two leading trigger-matched jets", 20, 0.0, 3.5);
250  h_caloMetvsPFMet = ibooker_.book2D("caloMetvsPFMet", "Calo MET vs PF MET; GeV; GeV", 25, 0.0, 500.0, 25, 0.0, 500.0);
251 
252  //online quantities
253  h_triggerMet = ibooker_.book1D("triggerMet", "Trigger MET; GeV", 20, 0.0, 500.0);
254  h_triggerMetPhi = ibooker_.book1D("triggerMetPhi", "Trigger MET Phi", 20, -3.5, 3.5);
255  h_triggerJetPt = ibooker_.book1D("triggerJetPt", "Trigger Jet p_{T}; GeV", 20, 0.0, 500.0);
256  h_triggerJetEta = ibooker_.book1D("triggerJetEta", "Trigger Jet Eta", 20, -3.0, 3.0);
257  h_triggerJetPhi = ibooker_.book1D("triggerJetPhi", "Trigger Jet Phi", 20, -3.5, 3.5);
258 
259  //num and den hists to be divided in harvesting step to make turn on curves
260  h_pfMetTurnOn_num = ibooker_.book1D("pfMetTurnOn_num", "PF MET", 20, 0.0, 500.0 );
261  h_pfMetTurnOn_den = ibooker_.book1D("pfMetTurnOn_den", "PF MET Turn On Denominator", 20, 0.0, 500.0 );
262  h_pfJet2PtTurnOn_num = ibooker_.book1D("pfJet2PtTurnOn_num", "PF Jet2 Pt (NCentralPFJets >= 2, PFMET > 250)", 20, 0.0, 500.0 );
263  h_pfJet2PtTurnOn_den = ibooker_.book1D("pfJet2PtTurnOn_den", "PF Jet2 Pt Turn On Denominator", 20, 0.0, 500.0 );
264 
265  ibooker_.cd();
266 }
267 
268  //define this as a plug-in
#define LogDebug(id)
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:220
MonitorElement * h_triggerJetEta
edm::InputTag triggerFilter_
edm::EDGetTokenT< reco::CaloJetCollection > theCaloJetCollection_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:464
float phi() const
Definition: TriggerObject.h:58
void cd(void)
Definition: DQMStore.cc:266
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
MonitorElement * h_pfMetTurnOn_num
MonitorElement * h_pfMetPhi
MonitorElement * h_pfJetPt
const std::vector< std::string > & triggerNames() const
names of trigger paths
MonitorElement * h_caloMetvsPFMet
MonitorElement * h_pfJetEta
Strings::size_type size() const
Definition: TriggerNames.cc:39
float eta() const
Definition: TriggerObject.h:57
void endLuminosityBlock(edm::LuminosityBlock const &lumi, edm::EventSetup const &eSetup)
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
MonitorElement * h_triggerMetPhi
void bookHistos(DQMStore::IBooker &)
void Fill(long long x)
Single trigger physics object (e.g., an isolated muon)
Definition: TriggerObject.h:22
edm::EDGetTokenT< reco::PFMETCollection > thePfMETCollection_
MonitorElement * h_triggerMet
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
T sqrt(T t)
Definition: SSEVec.h:48
MonitorElement * h_pfJet2PtTurnOn_den
MonitorElement * h_pfJet1Jet2DPhi
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:115
int j
Definition: DBlmapReader.cc:9
bool isValid() const
Definition: HandleBase.h:75
void dqmBeginRun(edm::Run const &, edm::EventSetup const &) override
void endRun(edm::Run const &run, edm::EventSetup const &eSetup)
std::vector< TriggerObject > TriggerObjectCollection
collection of trigger physics objects (e.g., all isolated muons)
Definition: TriggerObject.h:81
static const char *const trigNames[]
Definition: EcalDumpRaw.cc:74
double deltaPhi(double phi1, double phi2)
Definition: deltaPhi.h:12
MonitorElement * h_pfJetPhi
void analyze(edm::Event const &e, edm::EventSetup const &eSetup)
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
edm::InputTag triggerJetFilter_
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:133
std::string const & triggerName(unsigned int index) const
Definition: TriggerNames.cc:27
std::vector< size_type > Keys
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
d&#39;tor
HLTConfigProvider fHltConfig
MonitorElement * h_pfJet2PtTurnOn_num
edm::EDGetTokenT< reco::PFJetCollection > thePfJetCollection_
edm::EDGetTokenT< edm::TriggerResults > triggerResults_
edm::EDGetTokenT< reco::CaloMETCollection > theCaloMETCollection_
std::string triggerPathAuxiliaryForHadronic_
MonitorElement * h_pfMetTurnOn_den
void beginLuminosityBlock(edm::LuminosityBlock const &lumi, edm::EventSetup const &eSetup)
edm::EDGetTokenT< trigger::TriggerEvent > theTrigSummary_
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
MonitorElement * h_triggerJetPt
MonitorElement * h_triggerJetPhi
Definition: Run.h:43
SUSY_HLT_DiJet_MET(const edm::ParameterSet &ps)