CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SUSY_HLT_Razor.cc
Go to the documentation of this file.
7 
8 
10 {
11  edm::LogInfo("SUSY_HLT_Razor") << "Constructor SUSY_HLT_Razor::SUSY_HLT_Razor " << std::endl;
12  // Get parameters from configuration file
13  theTrigSummary_ = consumes<trigger::TriggerEvent>(ps.getParameter<edm::InputTag>("trigSummary"));
14  theMETCollection_ = consumes<edm::View<reco::MET> >(ps.getParameter<edm::InputTag>("METCollection"));
15  theHemispheres_ = consumes<std::vector<math::XYZTLorentzVector> >(ps.getParameter<edm::InputTag>("hemispheres"));
16  triggerResults_ = consumes<edm::TriggerResults>(ps.getParameter<edm::InputTag>("TriggerResults"));
17  triggerPath_ = ps.getParameter<std::string>("TriggerPath");
18  denomPath_ = ps.getParameter<std::string>("DenomPath");
19  denomPathLoose_ = ps.getParameter<std::string>("DenomPathLoose");
20  triggerFilter_ = ps.getParameter<edm::InputTag>("TriggerFilter");
21  caloFilter_ = ps.getParameter<edm::InputTag>("CaloFilter");
22  theJetCollection_ = consumes<edm::View<reco::Jet> >(ps.getParameter<edm::InputTag>("jetCollection"));
23 }
24 
26 {
27  edm::LogInfo("SUSY_HLT_Razor") << "Destructor SUSY_HLT_Razor::~SUSY_HLT_Razor " << std::endl;
28 }
29 
31 {
32  edm::LogInfo("SUSY_HLT_Razor") << "SUSY_HLT_Razor::beginRun" << std::endl;
33 }
34 
36 {
37  edm::LogInfo("SUSY_HLT_Razor") << "SUSY_HLT_Razor::bookHistograms" << std::endl;
38  //book at beginRun
39  bookHistos(ibooker_);
40 }
41 
43  edm::EventSetup const& context)
44 {
45  edm::LogInfo("SUSY_HLT_Razor") << "SUSY_HLT_Razor::beginLuminosityBlock" << std::endl;
46 }
47 
50  desc.add<edm::InputTag>("jetCollection",edm::InputTag("ak4PFJetsCHS"));
51  desc.add<edm::InputTag>("CaloFilter",edm::InputTag("hltRsqMR200Rsq0p01MR100Calo","","HLT"))->setComment("Calo HLT filter module used to save razor variable objects");
52  desc.add<edm::InputTag>("METCollection",edm::InputTag("pfMet"));
53  desc.add<edm::InputTag>("hemispheres",edm::InputTag("hemispheres"))->setComment("hemisphere jets used to compute razor variables");
54  desc.add<std::string>("TriggerPath","HLT_RsqMR300_Rsq0p09_MR200_v")->setComment("trigger path name");
55  desc.add<std::string>("DenomPath","HLT_Ele40_eta2p1_WP85_Gsf_v")->setComment("tight denominator trigger path name (for 1.4e34 lumi)");
56  desc.add<std::string>("DenomPathLoose","HLT_Ele35_eta2p1_WP85_Gsf_v")->setComment("loose denominator trigger path name (for 7e33 lumi)");
57  desc.add<edm::InputTag>("TriggerFilter",edm::InputTag("hltRsqMR300Rsq0p09MR200","","HLT"))->setComment("PF HLT filter module used to save razor variable objects");
58  desc.add<edm::InputTag>("TriggerResults",edm::InputTag("TriggerResults","","HLT"));
59  desc.add<edm::InputTag>("trigSummary",edm::InputTag("hltTriggerSummaryAOD"));
60  descriptions.add("SUSY_HLT_Razor_Main",desc);
61 }
62 
64 
65  edm::LogInfo("SUSY_HLT_Razor") << "SUSY_HLT_Razor::analyze" << std::endl;
66 
67  using namespace std;
68  using namespace edm;
69  using namespace reco;
70 
71  // get hold of collection of objects
74  // get hold of the MET Collection
76  e.getByToken(theMETCollection_,inputMet);
77  if ( !inputMet.isValid() ){
78  edm::LogError ("SUSY_HLT_Razor") << "invalid collection: MET" << "\n";
79  return;
80  }
81  // edm::Handle<reco::PFJetCollection> jetCollection;
82  edm::Handle<edm::View<reco::Jet> > jetCollection;
83  e.getByToken (theJetCollection_,jetCollection);
84  if ( !jetCollection.isValid() ){
85  edm::LogError ("SUSY_HLT_Razor") << "invalid collection: jets" << "\n";
86  return;
87  }
88 
89  //check what is in the menu
91  e.getByToken(triggerResults_,hltresults);
92  if(!hltresults.isValid()){
93  edm::LogError ("SUSY_HLT_Razor") << "invalid collection: TriggerResults" << "\n";
94  return;
95  }
96 
97  //-------------------------------
98  //--- Trigger
99  //-------------------------------
100  edm::Handle<trigger::TriggerEvent> triggerSummary;
101  e.getByToken(theTrigSummary_, triggerSummary);
102  if(!triggerSummary.isValid()) {
103  edm::LogError ("SUSY_HLT_Razor") << "invalid collection: TriggerSummary" << "\n";
104  return;
105  }
106  //get online objects
107  //HLTriggerOffline/Egamma/python/TriggerTypeDefs.py contains the trigger object IDs
108  double onlineMR = 0, onlineRsq = 0;
109  double caloMR = 0, caloRsq = 0; //online razor variables computed using calo quantities
110  size_t filterIndex = triggerSummary->filterIndex( triggerFilter_ );
111  size_t caloFilterIndex = triggerSummary->filterIndex( caloFilter_ );
112  //search for online MR and Rsq objects
113  trigger::TriggerObjectCollection triggerObjects = triggerSummary->getObjects();
114  if( !(filterIndex >= triggerSummary->sizeFilters()) ){
115  const trigger::Keys& keys = triggerSummary->filterKeys( filterIndex );
116  for( size_t j = 0; j < keys.size(); ++j ){
117  trigger::TriggerObject foundObject = triggerObjects[keys[j]];
118  if(foundObject.id() == 0){ //the MET object containing MR and Rsq will show up with ID = 0
119  onlineMR = foundObject.px(); //razor variables stored in dummy reco::MET objects
120  onlineRsq = foundObject.py();
121  }
122  }
123  }
124 
125  //search for calo MR and Rsq objects
126  if( !(caloFilterIndex >= triggerSummary->sizeFilters()) ){
127  const trigger::Keys& keys = triggerSummary->filterKeys( caloFilterIndex );
128  for( size_t j = 0; j < keys.size(); ++j ){
129  trigger::TriggerObject foundObject = triggerObjects[keys[j]];
130  if(foundObject.id() == 0){
131  caloMR = foundObject.px(); //razor variables stored in dummy reco::MET objects
132  caloRsq = foundObject.py();
133  }
134  }
135  }
136 
137  bool hasFired = false;
138  bool denomFired = false;
139  const edm::TriggerNames& trigNames = e.triggerNames(*hltresults);
140  unsigned int numTriggers = trigNames.size();
141  for( unsigned int hltIndex=0; hltIndex<numTriggers; ++hltIndex ){
142  if (trigNames.triggerName(hltIndex).find(triggerPath_) != std::string::npos && hltresults->wasrun(hltIndex) && hltresults->accept(hltIndex))
143  {
144  hasFired = true;
145  }
146  if (trigNames.triggerName(hltIndex).find(denomPath_) != std::string::npos && hltresults->wasrun(hltIndex) && hltresults->accept(hltIndex)) {
147  denomFired = true;
148  }
149  if (trigNames.triggerName(hltIndex).find(denomPathLoose_) != std::string::npos && hltresults->wasrun(hltIndex) && hltresults->accept(hltIndex))
150  {
151  denomFired = true;
152  }
153  }
154 
155  float HT = 0.0;
156 
157  for (unsigned int i=0; i<jetCollection->size(); i++) {
158  if(std::abs(jetCollection->at(i).eta()) < 3.0 && jetCollection->at(i).pt() >= 40.0){
159  HT += jetCollection->at(i).pt();
160  }
161  }
162  //for (reco::PFJetCollection::const_iterator i_jet = jetCollection->begin(); i_jet != jetCollection->end(); ++i_jet){
163  // if (i_pfjet->pt() < 40) continue;
164  // if (fabs(i_pfjet->eta()) > 3.0) continue;
165  // pfHT += i_pfjet->pt();
166  //}
167  float MET = (inputMet->front()).pt();
168 
169  //this part is adapted from HLTRFilter.cc
170 
171  // check that the input collections are available
172  if (not hemispheres.isValid()){
173  //This is happening many times (which is normal) and it's noisy for the output, we removed the error message
174  //edm::LogError("SUSY_HLT_Razor") << "Hemisphere object is invalid!" << "\n";
175  return;
176  }
177 
178  if(hasFired && denomFired){
179 
180  if(hemispheres->size() ==0){ // the Hemisphere Maker will produce an empty collection of hemispheres if the number of jets in the
181  edm::LogError("SUSY_HLT_Razor") << "Cannot calculate M_R and R^2 because there are too many jets! (trigger passed automatically without forming the hemispheres)" << endl;
182  return;
183  }
184 
185  //***********************************
186  //Calculate R
187 
188  if(hemispheres->size() != 0 && hemispheres->size() != 2 && hemispheres->size() != 5 && hemispheres->size() != 10){
189  edm::LogError("SUSY_HLT_Razor") << "Invalid hemisphere collection! hemispheres->size() = " << hemispheres->size() << endl;
190  return;
191  }
192 
193  TLorentzVector ja(hemispheres->at(0).x(),hemispheres->at(0).y(),hemispheres->at(0).z(),hemispheres->at(0).t());
194  TLorentzVector jb(hemispheres->at(1).x(),hemispheres->at(1).y(),hemispheres->at(1).z(),hemispheres->at(1).t());
195 
196  //dummy vector (this trigger does not care about muons)
197  std::vector<math::XYZTLorentzVector> muonVec;
198 
199  double MR = CalcMR(ja,jb);
200  double R = CalcR(MR,ja,jb,inputMet,muonVec);
201  double Rsq = R*R;
202 
203  if(Rsq > 0.15) h_mr->Fill(MR);
204  if(MR > 300) h_rsq->Fill(Rsq);
205  h_mrRsq->Fill(MR, Rsq);
206  if(Rsq > 0.15) h_mr_denom->Fill(MR);
207  if(MR > 300) h_rsq_denom->Fill(Rsq);
208  h_mrRsq_denom->Fill(MR, Rsq);
209 
210  h_rsq_loose->Fill(Rsq);
211  h_rsq_loose_denom->Fill(Rsq);
212 
213  if(Rsq > 0.25){
214  h_mr_tight->Fill(MR);
215  h_mr_tight_denom->Fill(MR);
216  }
217  if(MR > 400){
218  h_rsq_tight->Fill(Rsq);
219  h_rsq_tight_denom->Fill(Rsq);
220  }
221 
222  h_ht->Fill(HT);
223  h_met->Fill(MET);
224  h_htMet->Fill(HT, MET);
225  h_ht_denom->Fill(HT);
226  h_met_denom->Fill(MET);
228 
229  h_online_mr_vs_mr->Fill(MR, onlineMR);
230  h_online_rsq_vs_rsq->Fill(Rsq, onlineRsq);
231  h_online_mr_vs_mr_all->Fill(MR, onlineMR);
232  h_online_rsq_vs_rsq_all->Fill(Rsq, onlineRsq);
233 
234  h_calo_mr_vs_mr->Fill(MR, caloMR);
235  h_calo_rsq_vs_rsq->Fill(Rsq, caloRsq);
236  h_calo_mr_vs_mr_all->Fill(MR, caloMR);
237  h_calo_rsq_vs_rsq_all->Fill(Rsq, caloRsq);
238 
239  }
240  else if(denomFired){ //calculate M_R and R^2 for the denominator histograms
241 
242  if(hemispheres->size() ==0){ // the Hemisphere Maker will produce an empty collection of hemispheres if the number of jets in the event is larger than the threshold. In this case we cannot compute razor variables
243  return;
244  }
245 
246 
247  if(hemispheres->size() != 0 && hemispheres->size() != 2 && hemispheres->size() != 5 && hemispheres->size() != 10){
248  return;
249  }
250 
251  TLorentzVector ja(hemispheres->at(0).x(),hemispheres->at(0).y(),hemispheres->at(0).z(),hemispheres->at(0).t());
252  TLorentzVector jb(hemispheres->at(1).x(),hemispheres->at(1).y(),hemispheres->at(1).z(),hemispheres->at(1).t());
253  //dummy vector (this trigger does not care about muons)
254  std::vector<math::XYZTLorentzVector> muonVec;
255 
256  double MR = CalcMR(ja,jb);
257  double R = CalcR(MR,ja,jb,inputMet,muonVec);
258  double Rsq = R*R;
259 
260  if(Rsq > 0.15) h_mr_denom->Fill(MR);
261  if(MR > 300) h_rsq_denom->Fill(Rsq);
262  h_mrRsq_denom->Fill(MR, Rsq);
263 
264  h_rsq_loose_denom->Fill(Rsq);
265 
266  if(Rsq > 0.25) h_mr_tight_denom->Fill(MR);
267  if(MR > 400) h_rsq_tight_denom->Fill(Rsq);
268 
269  h_ht_denom->Fill(HT);
270  h_met_denom->Fill(MET);
272 
273  h_online_mr_vs_mr_all->Fill(MR, onlineMR);
274  h_online_rsq_vs_rsq_all->Fill(Rsq, onlineRsq);
275 
276  h_calo_mr_vs_mr_all->Fill(MR, caloMR);
277  h_calo_rsq_vs_rsq_all->Fill(Rsq, caloRsq);
278  }
279 }
280 
282 {
283  edm::LogInfo("SUSY_HLT_Razor") << "SUSY_HLT_Razor::endLuminosityBlock" << std::endl;
284 }
285 
286 
288 {
289  edm::LogInfo("SUSY_HLT_Razor") << "SUSY_HLT_Razor::endRun" << std::endl;
290 }
291 
293 {
294  ibooker_.cd();
295  ibooker_.setCurrentFolder("HLT/SUSYBSM/" + triggerPath_);
296 
297  h_mr = ibooker_.book1D("mr", "M_{R} (R^{2} > 0.15) ; GeV", 100, 0.0, 4000);
298  h_rsq = ibooker_.book1D("rsq", "R^{2} (M_{R} > 300)", 100, 0.0, 1.5);
299  h_mrRsq = ibooker_.book2D("mrRsq", "R^{2} vs M_{R}; GeV; ", 100, 0.0, 4000.0, 100, 0.0, 1.5);
300  h_mr_denom = ibooker_.book1D("mr_denom", "M_{R} (R^{2} > 0.15); GeV", 100, 0.0, 4000);
301  h_rsq_denom = ibooker_.book1D("rsq_denom", "R^{2} (MR > 300)", 100, 0.0, 1.5);
302  h_mrRsq_denom = ibooker_.book2D("mrRsq_denom", "R^{2} vs M_{R}; GeV; ", 100, 0.0, 4000.0, 100, 0.0, 1.5);
303 
304  h_mr_tight = ibooker_.book1D("mr_tight", "M_{R} (R^{2} > 0.25) ; GeV", 100, 0.0, 4000);
305  h_rsq_tight = ibooker_.book1D("rsq_tight", "R^{2} (M_{R} > 400) ; ", 100, 0.0, 1.5);
306  h_mr_tight_denom = ibooker_.book1D("mr_tight_denom", "M_{R} (R^{2} > 0.25) ; GeV", 100, 0.0, 4000);
307  h_rsq_tight_denom = ibooker_.book1D("rsq_tight_denom", "R^{2} (M_{R} > 400) ; ", 100, 0.0, 1.5);
308 
309  h_rsq_loose = ibooker_.book1D("rsq_loose", "R^{2} (M_{R} > 0) ; ", 100, 0.0, 1.5);
310  h_rsq_loose_denom = ibooker_.book1D("rsq_loose_denom", "R^{2} (M_{R} > 0) ; ", 100, 0.0, 1.5);
311 
312  h_ht = ibooker_.book1D("ht", "HT; GeV; ", 100, 0.0, 4000.0);
313  h_met = ibooker_.book1D("met", "MET; GeV; ", 100, 0.0, 1000);
314  h_htMet = ibooker_.book2D("htMet", "MET vs HT; GeV; ", 100, 0.0, 4000.0, 100, 0.0, 1000);
315  h_ht_denom = ibooker_.book1D("ht_denom", "HT; GeV; ", 100, 0.0, 4000.0);
316  h_met_denom = ibooker_.book1D("met_denom", "MET; GeV; ", 100, 0.0, 1000);
317  h_htMet_denom = ibooker_.book2D("htMet_denom", "MET vs HT; GeV; ", 100, 0.0, 4000.0, 100, 0.0, 1000);
318 
319  h_online_mr_vs_mr = ibooker_.book2D("online_mr_vs_mr", "Online M_{R} vs Offline M_{R} (events passing trigger); Offline M_{R} (GeV); Online M_{R} (GeV); ", 100, 0.0, 4000.0, 100, 0.0, 4000.0);
320  h_calo_mr_vs_mr = ibooker_.book2D("calo_mr_vs_mr", "Calo M_{R} vs Offline M_{R} (events passing trigger); Offline M_{R} (GeV); Calo M_{R} (GeV); ", 100, 0.0, 4000.0, 100, 0.0, 4000.0);
321  h_online_rsq_vs_rsq = ibooker_.book2D("online_rsq_vs_rsq", "Online R^{2} vs Offline R^{2} (events passing trigger); Offline R^{2}; Online R^{2}; ", 100, 0.0, 1.5, 100, 0.0, 1.5);
322  h_calo_rsq_vs_rsq = ibooker_.book2D("calo_rsq_vs_rsq", "Calo R^{2} vs Offline R^{2} (events passing trigger); Offline R^{2}; Calo R^{2}; ", 100, 0.0, 1.5, 100, 0.0, 1.5);
323 
324  h_online_mr_vs_mr_all = ibooker_.book2D("online_mr_vs_mr_all", "Online M_{R} vs Offline M_{R} (events passing reference trigger); Offline M_{R} (GeV); Online M_{R} (GeV); ", 100, 0.0, 4000.0, 100, 0.0, 4000.0);
325  h_calo_mr_vs_mr_all = ibooker_.book2D("calo_mr_vs_mr_all", "Calo M_{R} vs Offline M_{R} (events passing reference trigger); Offline M_{R} (GeV); Calo M_{R} (GeV); ", 100, 0.0, 4000.0, 100, 0.0, 4000.0);
326  h_online_rsq_vs_rsq_all = ibooker_.book2D("online_rsq_vs_rsq_all", "Online R^{2} vs Offline R^{2} (events passing reference trigger); Offline R^{2}; Online R^{2}; ", 100, 0.0, 1.5, 100, 0.0, 1.5);
327  h_calo_rsq_vs_rsq_all = ibooker_.book2D("calo_rsq_vs_rsq_all", "Calo R^{2} vs Offline R^{2} (events passing reference trigger); Offline R^{2}; Calo R^{2}; ", 100, 0.0, 1.5, 100, 0.0, 1.5);
328 
329  ibooker_.cd();
330 }
331 
332 //CalcMR and CalcR borrowed from HLTRFilter.cc
333 double
334 SUSY_HLT_Razor::CalcMR(TLorentzVector ja, TLorentzVector jb){
335  if(ja.Pt()<=0.1) return -1;
336 
337  ja.SetPtEtaPhiM(ja.Pt(),ja.Eta(),ja.Phi(),0.0);
338  jb.SetPtEtaPhiM(jb.Pt(),jb.Eta(),jb.Phi(),0.0);
339 
340  if(ja.Pt() > jb.Pt()){
341  TLorentzVector temp = ja;
342  ja = jb;
343  jb = temp;
344  }
345 
346  double A = ja.P();
347  double B = jb.P();
348  double az = ja.Pz();
349  double bz = jb.Pz();
350  TVector3 jaT, jbT;
351  jaT.SetXYZ(ja.Px(),ja.Py(),0.0);
352  jbT.SetXYZ(jb.Px(),jb.Py(),0.0);
353  double ATBT = (jaT+jbT).Mag2();
354 
355  double MR = sqrt((A+B)*(A+B)-(az+bz)*(az+bz)-
356  (jbT.Dot(jbT)-jaT.Dot(jaT))*(jbT.Dot(jbT)-jaT.Dot(jaT))/(jaT+jbT).Mag2());
357 
358  double mybeta = (jbT.Dot(jbT)-jaT.Dot(jaT))/
359  sqrt(ATBT*((A+B)*(A+B)-(az+bz)*(az+bz)));
360 
361  double mygamma = 1./sqrt(1.-mybeta*mybeta);
362 
363  //use gamma times MRstar
364  return MR*mygamma;
365 }
366 
367 double
368  SUSY_HLT_Razor::CalcR(double MR, TLorentzVector ja, TLorentzVector jb, edm::Handle<edm::View<reco::MET> > inputMet, const std::vector<math::XYZTLorentzVector>& muons){
369  //now we can calculate MTR
370  TVector3 met;
371  met.SetPtEtaPhi((inputMet->front()).pt(),0.0,(inputMet->front()).phi());
372 
373  std::vector<math::XYZTLorentzVector>::const_iterator muonIt;
374  for(muonIt = muons.begin(); muonIt!=muons.end(); muonIt++){
375  TVector3 tmp;
376  tmp.SetPtEtaPhi(muonIt->pt(),0,muonIt->phi());
377  met-=tmp;
378  }
379 
380  double MTR = sqrt(0.5*(met.Mag()*(ja.Pt()+jb.Pt()) - met.Dot(ja.Vect()+jb.Vect())));
381 
382  //filter events
383  return float(MTR)/float(MR); //R
384 
385 }
386 
387  //define this as a plug-in
void bookHistos(DQMStore::IBooker &)
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
std::string denomPathLoose_
MonitorElement * h_calo_rsq_vs_rsq
virtual edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const
Definition: Event.cc:220
int id() const
getters
Definition: TriggerObject.h:55
MonitorElement * h_htMet_denom
std::string denomPath_
void dqmBeginRun(edm::Run const &, edm::EventSetup const &) override
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:464
edm::EDGetTokenT< trigger::TriggerEvent > theTrigSummary_
MonitorElement * h_rsq_tight
void cd(void)
Definition: DQMStore.cc:266
std::string triggerPath_
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
SUSY_HLT_Razor(const edm::ParameterSet &ps)
MonitorElement * h_ht_denom
static double CalcR(double MR, TLorentzVector ja, TLorentzVector jb, edm::Handle< edm::View< reco::MET > > met, const std::vector< math::XYZTLorentzVector > &muons)
void Fill(long long x)
MonitorElement * h_online_mr_vs_mr
MonitorElement * h_ht
Single trigger physics object (e.g., an isolated muon)
Definition: TriggerObject.h:22
MonitorElement * h_online_rsq_vs_rsq_all
edm::EDGetTokenT< edm::View< reco::MET > > theMETCollection_
Definition: MET.h:42
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
T sqrt(T t)
Definition: SSEVec.h:48
MonitorElement * h_rsq
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:115
MonitorElement * h_mrRsq
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
int j
Definition: DBlmapReader.cc:9
void endLuminosityBlock(edm::LuminosityBlock const &lumi, edm::EventSetup const &eSetup)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
edm::InputTag caloFilter_
MonitorElement * h_online_mr_vs_mr_all
MonitorElement * h_mr_tight_denom
MonitorElement * h_calo_mr_vs_mr
virtual ~SUSY_HLT_Razor()
MonitorElement * h_htMet
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
MonitorElement * h_met
void endRun(edm::Run const &run, edm::EventSetup const &eSetup)
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:133
std::vector< size_type > Keys
MonitorElement * h_rsq_denom
void add(std::string const &label, ParameterSetDescription const &psetDescription)
edm::EDGetTokenT< std::vector< math::XYZTLorentzVector > > theHemispheres_
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
MonitorElement * h_online_rsq_vs_rsq
tuple muons
Definition: patZpeak.py:38
void analyze(edm::Event const &e, edm::EventSetup const &eSetup)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
edm::EDGetTokenT< edm::View< reco::Jet > > theJetCollection_
MonitorElement * h_calo_rsq_vs_rsq_all
MonitorElement * h_met_denom
MonitorElement * h_mr
edm::InputTag triggerFilter_
MonitorElement * h_rsq_tight_denom
Definition: HT.h:20
MonitorElement * h_mrRsq_denom
MonitorElement * h_mr_tight
edm::EDGetTokenT< edm::TriggerResults > triggerResults_
MonitorElement * h_calo_mr_vs_mr_all
MonitorElement * h_mr_denom
Definition: Run.h:43
static double CalcMR(TLorentzVector ja, TLorentzVector jb)
MonitorElement * h_rsq_loose_denom
MonitorElement * h_rsq_loose
void beginLuminosityBlock(edm::LuminosityBlock const &lumi, edm::EventSetup const &eSetup)