CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
FourVectorHLTriggerOffline.h
Go to the documentation of this file.
1 #ifndef FOURVECTORHLTRIGGEROFFLINE_H
2 #define FOURVECTORHLTRIGGEROFFLINE_H
3 // -*- C++ -*-
4 //
5 // Package: FourVectorHLTriggerOffline
6 // Class: FourVectorHLTriggerOffline
7 //
16 //
17 // Original Author: Jeffrey Berryhill
18 // Created: June 2008
19 // Rewritten by: Vladimir Rekovic
20 // Date: May 2009
21 // $Id: FourVectorHLTriggerOffline.h,v 1.27.2.1 2010/08/03 16:08:23 wmtan Exp $
22 //
23 //
24 
25 
26 // system include files
27 #include <memory>
28 #include <unistd.h>
29 
30 
31 // user include files
34 
40 
46 
47 // added VR
53 
55 
61 
84 
86 
87 
90 
91 
92 #include <iostream>
93 #include <fstream>
94 #include <vector>
95 
96 
97 typedef std::multimap<float,int> fimmap ;
98 typedef std::set<fimmap , std::less<fimmap> > mmset;
99 
101  public:
104 
105  void cleanDRMatchSet(mmset& tempSet);
106 
107  private:
108  virtual void beginJob() ;
109  virtual void analyze(const edm::Event&, const edm::EventSetup&);
110  virtual void endJob() ;
111 
112  // BeginRun
113  void beginRun(const edm::Run& run, const edm::EventSetup& c);
114 
115  // EndRun
116  void endRun(const edm::Run& run, const edm::EventSetup& c);
117 
118 
119  // ----------member data ---------------------------
120  int nev_;
122 
124 
125  bool plotAll_;
126  bool resetMe_;
128 
129  unsigned int nBins_;
130  double ptMin_ ;
131  double ptMax_ ;
132 
136  double muonEtaMax_;
137  double muonEtMin_;
138  double muonDRMatch_;
139  double tauEtaMax_;
140  double tauEtMin_;
141  double tauDRMatch_;
142  double jetEtaMax_;
143  double jetEtMin_;
144  double jetDRMatch_;
145  double bjetEtaMax_;
146  double bjetEtMin_;
147  double bjetDRMatch_;
149  double photonEtMin_;
151  double trackEtaMax_;
152  double trackEtMin_;
154  double metMin_;
155  double htMin_;
156  double sumEtMin_;
157 
158  std::vector<std::pair<std::string, std::string> > custompathnamepairs_;
159 
160 
161  std::string dirname_;
162  std::string processname_;
168  // data across paths
170  // helper class to store the data path
171 
172  class PathInfo {
174  pathIndex_(-1), denomPathName_("unset"), pathName_("unset"), l1pathName_("unset"), filterName_("unset"), processName_("unset"), objectType_(-1)
175  {};
176  public:
177  void setHistos(
178  MonitorElement* const NMc,
179  MonitorElement* const mcEtMc,
180  MonitorElement* const mcEtavsmcPhiMc,
181  MonitorElement* const NOn,
182  MonitorElement* const onEtOn,
183  MonitorElement* const onEtavsonPhiOn,
184  MonitorElement* const NOff,
185  MonitorElement* const offEtOff,
186  MonitorElement* const offEtavsoffPhiOff,
187  MonitorElement* const NL1,
188  MonitorElement* const l1EtL1,
189  MonitorElement* const l1Etavsl1PhiL1,
190  MonitorElement* const NL1On,
191  MonitorElement* const l1EtL1On,
192  MonitorElement* const l1Etavsl1PhiL1On,
193  MonitorElement* const NL1Off,
194  MonitorElement* const offEtL1Off,
195  MonitorElement* const offEtavsoffPhiL1Off,
196  MonitorElement* const NOnOff,
197  MonitorElement* const offEtOnOff,
198  MonitorElement* const offEtavsoffPhiOnOff,
199  MonitorElement* const NL1Mc,
200  MonitorElement* const mcEtL1Mc,
201  MonitorElement* const mcEtavsmcPhiL1Mc,
202  MonitorElement* const NOffMc,
203  MonitorElement* const mcEtOffMc,
204  MonitorElement* const mcEtavsmcPhiOffMc,
205  MonitorElement* const NOnMc,
206  MonitorElement* const mcEtOnMc,
207  MonitorElement* const mcEtavsmcPhiOnMc,
208  MonitorElement* const NL1OnUM,
209  MonitorElement* const l1EtL1OnUM,
210  MonitorElement* const l1Etavsl1PhiL1OnUM,
211  MonitorElement* const NL1OffUM,
212  MonitorElement* const offEtL1OffUM,
213  MonitorElement* const offEtavsoffPhiL1OffUM,
214  MonitorElement* const NOnOffUM,
215  MonitorElement* const offEtOnOffUM,
216  MonitorElement* const offEtavsoffPhiOnOffUM,
217  MonitorElement* const NL1McUM,
218  MonitorElement* const mcEtL1McUM,
219  MonitorElement* const mcEtavsmcPhiL1McUM,
220  MonitorElement* const NOffMcUM,
221  MonitorElement* const mcEtOffMcUM,
222  MonitorElement* const mcEtavsmcPhiOffMcUM,
223  MonitorElement* const NOnMcUM,
224  MonitorElement* const mcEtOnMcUM,
225  MonitorElement* const mcEtavsmcPhiOnMcUM,
226  MonitorElement* const mcDRL1Mc,
227  MonitorElement* const mcDROnMc,
228  MonitorElement* const mcDROffMc,
229  MonitorElement* const offDRL1Off,
230  MonitorElement* const offDROnOff,
231  MonitorElement* const l1DRL1On
232  ) {
233  NMc_ = NMc;
234  mcEtMc_ = mcEtMc;
235  mcEtavsmcPhiMc_ = mcEtavsmcPhiMc;
236  NOn_ = NOn;
237  onEtOn_ = onEtOn;
238  onEtavsonPhiOn_ = onEtavsonPhiOn;
239  NOff_ = NOff;
240  offEtOff_ = offEtOff;
241  offEtavsoffPhiOff_ = offEtavsoffPhiOff;
242  NL1_ = NL1;
243  l1EtL1_ = l1EtL1;
244  l1Etavsl1PhiL1_ = l1Etavsl1PhiL1;
245  NL1On_ = NL1On;
246  l1EtL1On_ = l1EtL1On;
247  l1Etavsl1PhiL1On_ = l1Etavsl1PhiL1On;
248  NL1Off_ = NL1Off;
249  offEtL1Off_ = offEtL1Off;
250  offEtavsoffPhiL1Off_ = offEtavsoffPhiL1Off;
251  NOnOff_ = NOnOff;
252  offEtOnOff_ = offEtOnOff;
253  offEtavsoffPhiOnOff_ = offEtavsoffPhiOnOff;
254  NL1Mc_ = NL1Mc;
255  mcEtL1Mc_ = mcEtL1Mc;
256  mcEtavsmcPhiL1Mc_ = mcEtavsmcPhiL1Mc;
257  NOffMc_ = NOffMc;
258  mcEtOffMc_ = mcEtOffMc;
259  mcEtavsmcPhiOffMc_ = mcEtavsmcPhiOffMc;
260  NOnMc_ = NOnMc;
261  mcEtOnMc_ = mcEtOnMc;
262  mcEtavsmcPhiOnMc_ = mcEtavsmcPhiOnMc;
263  NL1OnUM_ = NL1OnUM;
264  l1EtL1OnUM_ = l1EtL1OnUM;
265  l1Etavsl1PhiL1OnUM_ = l1Etavsl1PhiL1OnUM;
266  NL1OffUM_ = NL1OffUM;
267  offEtL1OffUM_ = offEtL1OffUM;
268  offEtavsoffPhiL1OffUM_ = offEtavsoffPhiL1OffUM;
269  NOnOffUM_ = NOnOffUM;
270  offEtOnOffUM_ = offEtOnOffUM;
271  offEtavsoffPhiOnOffUM_ = offEtavsoffPhiOnOffUM;
272  NL1McUM_ = NL1McUM;
273  mcEtL1McUM_ = mcEtL1McUM;
274  mcEtavsmcPhiL1McUM_ = mcEtavsmcPhiL1McUM;
275  NOffMcUM_ = NOffMcUM;
276  mcEtOffMcUM_ = mcEtOffMcUM;
277  mcEtavsmcPhiOffMcUM_ = mcEtavsmcPhiOffMcUM;
278  NOnMcUM_ = NOnMcUM;
279  mcEtOnMcUM_ = mcEtOnMcUM;
280  mcEtavsmcPhiOnMcUM_ = mcEtavsmcPhiOnMcUM;
281  mcDRL1Mc_ = mcDRL1Mc;
282  mcDROnMc_ = mcDROnMc;
283  mcDROffMc_ = mcDROffMc;
284  offDRL1Off_ = offDRL1Off;
285  offDROnOff_ = offDROnOff;
286  l1DRL1On_ = l1DRL1On;
287  }
289  return NMc_;
290  }
292  return mcEtMc_;
293  }
295  return mcEtavsmcPhiMc_;
296  }
298  return NOn_;
299  }
301  return onEtOn_;
302  }
304  return onEtavsonPhiOn_;
305  }
307  return NOff_;
308  }
310  return offEtOff_;
311  }
313  return offEtavsoffPhiOff_;
314  }
316  return NL1_;
317  }
319  return l1EtL1_;
320  }
322  return l1Etavsl1PhiL1_;
323  }
325  return NL1On_;
326  }
328  return l1EtL1On_;
329  }
331  return l1Etavsl1PhiL1On_;
332  }
334  return NL1Off_;
335  }
337  return offEtL1Off_;
338  }
340  return offEtavsoffPhiL1Off_;
341  }
343  return NOnOff_;
344  }
346  return offEtOnOff_;
347  }
349  return offEtavsoffPhiOnOff_;
350  }
352  return NL1Mc_;
353  }
355  return mcEtL1Mc_;
356  }
358  return mcEtavsmcPhiL1Mc_;
359  }
360 
362  return NOffMc_;
363  }
365  return mcEtOffMc_;
366  }
368  return mcEtavsmcPhiOffMc_;
369  }
370 
372  return NOnMc_;
373  }
375  return mcEtOnMc_;
376  }
378  return mcEtavsmcPhiOnMc_;
379  }
381  return NL1OnUM_;
382  }
384  return l1EtL1OnUM_;
385  }
387  return l1Etavsl1PhiL1OnUM_;
388  }
390  return NL1OffUM_;
391  }
393  return offEtL1OffUM_;
394  }
396  return offEtavsoffPhiL1OffUM_;
397  }
399  return NOnOffUM_;
400  }
402  return offEtOnOffUM_;
403  }
405  return offEtavsoffPhiOnOffUM_;
406  }
408  return NL1McUM_;
409  }
411  return mcEtL1McUM_;
412  }
414  return mcEtavsmcPhiL1McUM_;
415  }
416 
418  return NOffMcUM_;
419  }
421  return mcEtOffMcUM_;
422  }
424  return mcEtavsmcPhiOffMcUM_;
425  }
426 
428  return NOnMcUM_;
429  }
431  return mcEtOnMcUM_;
432  }
434  return mcEtavsmcPhiOnMcUM_;
435  }
437  return mcDRL1Mc_;
438  }
440  return offDRL1Off_;
441  }
443  return offDROnOff_;
444  }
446  return mcDROnMc_;
447  }
449  return mcDROffMc_;
450  }
452  return l1DRL1On_;
453  }
454  const std::string getLabel(void ) const {
455  return filterName_;
456  }
457  void setLabel(std::string labelName){
458  filterName_ = labelName;
459  return;
460  }
461  const std::string getPath(void ) const {
462  return pathName_;
463  }
464  const std::string getl1Path(void ) const {
465  return l1pathName_;
466  }
467  const std::string getDenomPath(void ) const {
468  return denomPathName_;
469  }
470  const std::string getProcess(void ) const {
471  return processName_;
472  }
473  const int getObjectType(void ) const {
474  return objectType_;
475  }
476 
477  const edm::InputTag getTag(void) const{
479  return tagName;
480  }
481  ~PathInfo() {};
482  PathInfo(std::string denomPathName, std::string pathName, std::string l1pathName, std::string filterName, std::string processName, size_t type, float ptmin,
483  float ptmax):
484  denomPathName_(denomPathName), pathName_(pathName), l1pathName_(l1pathName), filterName_(filterName), processName_(processName), objectType_(type),
485  NMc_(0), mcEtMc_(0), mcEtavsmcPhiMc_(0),
486  NOn_(0), onEtOn_(0), onEtavsonPhiOn_(0),
488  NL1_(0), l1EtL1_(0), l1Etavsl1PhiL1_(0),
501  mcDRL1Mc_(0), mcDROnMc_(0), mcDROffMc_(0), offDRL1Off_(0),
502  offDROnOff_(0), l1DRL1On_(0),
503  ptmin_(ptmin), ptmax_(ptmax)
504  {
505  };
506  PathInfo(std::string denomPathName, std::string pathName, std::string l1pathName, std::string filterName, std::string processName, size_t type,
507  MonitorElement *NMc,
508  MonitorElement *mcEtMc,
509  MonitorElement *mcEtavsmcPhiMc,
510  MonitorElement *NOn,
511  MonitorElement *onEtOn,
512  MonitorElement *onEtavsonPhiOn,
513  MonitorElement *NOff,
514  MonitorElement *offEtOff,
515  MonitorElement *offEtavsoffPhiOff,
516  MonitorElement *NL1,
517  MonitorElement *l1EtL1,
518  MonitorElement *l1Etavsl1PhiL1,
519  MonitorElement *NL1On,
520  MonitorElement *l1EtL1On,
521  MonitorElement *l1Etavsl1PhiL1On,
522  MonitorElement *NL1Off,
523  MonitorElement *offEtL1Off,
524  MonitorElement *offEtavsoffPhiL1Off,
525  MonitorElement *NOnOff,
526  MonitorElement *offEtOnOff,
527  MonitorElement *offEtavsoffPhiOnOff,
528  MonitorElement *NL1Mc,
529  MonitorElement *mcEtL1Mc,
530  MonitorElement *mcEtavsmcPhiL1Mc,
531  MonitorElement *NOffMc,
532  MonitorElement *mcEtOffMc,
533  MonitorElement *mcEtavsmcPhiOffMc,
534  MonitorElement *NOnMc,
535  MonitorElement *mcEtOnMc,
536  MonitorElement *mcEtavsmcPhiOnMc,
537  MonitorElement *NL1OnUM,
538  MonitorElement *l1EtL1OnUM,
539  MonitorElement *l1Etavsl1PhiL1OnUM,
540  MonitorElement *NL1OffUM,
541  MonitorElement *offEtL1OffUM,
542  MonitorElement *offEtavsoffPhiL1OffUM,
543  MonitorElement *NOnOffUM,
544  MonitorElement *offEtOnOffUM,
545  MonitorElement *offEtavsoffPhiOnOffUM,
546  MonitorElement *NL1McUM,
547  MonitorElement *mcEtL1McUM,
548  MonitorElement *mcEtavsmcPhiL1McUM,
549  MonitorElement *NOffMcUM,
550  MonitorElement *mcEtOffMcUM,
551  MonitorElement *mcEtavsmcPhiOffMcUM,
552  MonitorElement *NOnMcUM,
553  MonitorElement *mcEtOnMcUM,
554  MonitorElement *mcEtavsmcPhiOnMcUM,
555  MonitorElement *mcDRL1Mc,
556  MonitorElement *mcDROnMc,
557  MonitorElement *mcDROffMc,
558  MonitorElement *offDRL1Off,
559  MonitorElement *offDROnOff,
560  MonitorElement *l1DRL1On,
561  float ptmin, float ptmax
562  ):
563  denomPathName_(denomPathName), pathName_(pathName), l1pathName_(l1pathName), filterName_(filterName), processName_(processName), objectType_(type),
564  NMc_(NMc), mcEtMc_(mcEtMc), mcEtavsmcPhiMc_(mcEtavsmcPhiMc),
565  NOn_(NOn), onEtOn_(onEtOn), onEtavsonPhiOn_(onEtavsonPhiOn),
566  NOff_(NOff), offEtOff_(offEtOff), offEtavsoffPhiOff_(offEtavsoffPhiOff),
567  NL1_(NL1), l1EtL1_(l1EtL1), l1Etavsl1PhiL1_(l1Etavsl1PhiL1),
568  NL1On_(NL1On), l1EtL1On_(l1EtL1On), l1Etavsl1PhiL1On_(l1Etavsl1PhiL1On),
569  NL1Off_(NL1Off), offEtL1Off_(offEtL1Off), offEtavsoffPhiL1Off_(offEtavsoffPhiL1Off),
570  NOnOff_(NOnOff), offEtOnOff_(offEtOnOff), offEtavsoffPhiOnOff_(offEtavsoffPhiOnOff),
571  NL1Mc_(NL1Mc), mcEtL1Mc_(mcEtL1Mc), mcEtavsmcPhiL1Mc_(mcEtavsmcPhiL1Mc),
572  NOffMc_(NOffMc), mcEtOffMc_(mcEtOffMc), mcEtavsmcPhiOffMc_(mcEtavsmcPhiOffMc),
573  NOnMc_(NOnMc), mcEtOnMc_(mcEtOnMc), mcEtavsmcPhiOnMc_(mcEtavsmcPhiOnMc),
574  NL1OnUM_(NL1OnUM), l1EtL1OnUM_(l1EtL1OnUM), l1Etavsl1PhiL1OnUM_(l1Etavsl1PhiL1OnUM),
575  NL1OffUM_(NL1OffUM), offEtL1OffUM_(offEtL1OffUM), offEtavsoffPhiL1OffUM_(offEtavsoffPhiL1OffUM),
576  NOnOffUM_(NOnOffUM), offEtOnOffUM_(offEtOnOffUM), offEtavsoffPhiOnOffUM_(offEtavsoffPhiOnOffUM),
577  NL1McUM_(NL1McUM), mcEtL1McUM_(mcEtL1McUM), mcEtavsmcPhiL1McUM_(mcEtavsmcPhiL1McUM),
578  NOffMcUM_(NOffMcUM), mcEtOffMcUM_(mcEtOffMcUM), mcEtavsmcPhiOffMcUM_(mcEtavsmcPhiOffMcUM),
579  NOnMcUM_(NOnMcUM), mcEtOnMcUM_(mcEtOnMcUM), mcEtavsmcPhiOnMcUM_(mcEtavsmcPhiOnMcUM),
580  mcDRL1Mc_(mcDRL1Mc),
581  mcDROnMc_(mcDROnMc),
582  mcDROffMc_(mcDROffMc),
583  offDRL1Off_(offDRL1Off),
584  offDROnOff_(offDROnOff),
585  l1DRL1On_(l1DRL1On),
586  ptmin_(ptmin), ptmax_(ptmax)
587  {};
588  bool operator==(const std::string v)
589  {
590  return v==filterName_;
591  }
592  private:
594  std::string denomPathName_;
595  std::string pathName_;
596  std::string l1pathName_;
597  std::string filterName_;
598  std::string processName_;
600 
601  // we don't own this data
620 
621  float ptmin_, ptmax_;
622 
623  const int index() {
624  return pathIndex_;
625  }
626  const int type() {
627  return objectType_;
628  }
629  public:
630  float getPtMin() const { return ptmin_; }
631  float getPtMax() const { return ptmax_; }
632  };
633 
634  // simple collection - just
635  class PathInfoCollection: public std::vector<PathInfo> {
636  public:
637  PathInfoCollection(): std::vector<PathInfo>()
638  {};
639  std::vector<PathInfo>::iterator find(std::string pathName) {
640  return std::find(begin(), end(), pathName);
641  }
642  };
644 
645 
646 };
647 
648 template <class T>
649 class objMon {
650 public:
651  objMon() { EtaMax_= 2.5; EtMin_=3.0; GenJetsFlag_ = false; BJetsFlag_ = false; }
652  void setLimits(float etaMax, float etMin, float drMatch)
653  {
654  EtaMax_= etaMax;
655  EtMin_= etMin;
656  DRMatch_= drMatch;
657  }
658  void setTriggerType(std::vector<int> trigType) { triggerType_ = trigType; }
659  void pushTriggerType(int trigType) { triggerType_.push_back(trigType); }
660  void setL1TriggerType(std::vector<int> trigType) { l1triggerType_ = trigType; }
661  void pushL1TriggerType(int trigType) { l1triggerType_.push_back(trigType); }
662  void setPath(FourVectorHLTriggerOffline::PathInfoCollection::iterator v) { v_ = v; }
663  void setReco(edm::Handle<T> offColl) { offColl_ = offColl; }
666  {
667 
669  pdgId_ = pdgId;
670  pdgStatus_ = status;
671 
672  }
673 
674  void fillMC();
675  void fillOff();
676  void monitorL1(const trigger::Vids & idtype, const trigger::Keys & l1k, const trigger::TriggerObjectCollection & toc);
677  void monitorDenominator(FourVectorHLTriggerOffline::PathInfoCollection::iterator v, bool l1accept, const trigger::Vids & idtype, const trigger::Keys & l1k, const trigger::TriggerObjectCollection& toc);
678 
682  {
683  fillL1OffMatch(fv);
684  fillL1MCMatch(fv);
685  }
686 
687  void monitorOnline(const trigger::Vids & idtype, const trigger::Keys & l1k, trigger::Keys::const_iterator ki, const trigger::TriggerObjectCollection & toc, unsigned int & NOn);
693  {
694 
695  if(! isTriggerType(v_->getObjectType()) ) return;
696  fillOnOffMatch(fv);
697  fillOnMCMatch(fv);
698  fillOnL1Match(fv, l1k, toc);
699 
700  }
701 
704  {
705  if(! isTriggerType(v_->getObjectType()) ) return;
706  fillOffMCMatch(fv);
707  }
708  void clearSets();
709 
710  bool isTriggerType(int t);
711  bool isL1TriggerType(int t);
712  bool hasBPartonInCone(reco::GenJetCollection::const_iterator gjet, float coneSize);
713 
720 
721 
723  {
724  GenJetsFlag_ = flag;
725  genJets_ = genJets;
726  }
727  void setBJetsFlag(bool flag)
728  {
729  BJetsFlag_ = flag;
730  }
731 
732 
733 private:
734 
735  int pdgId_;
737 
738  float EtaMax_;
739  float EtMin_;
740 
741  float DRMatch_;
742 
745 
746  std::vector<int> triggerType_;
747  std::vector<int> l1triggerType_;
748 
751 
754  FourVectorHLTriggerOffline::PathInfoCollection::iterator v_;
755 
756 };
757 
758 template <class T>
760 {
761  bool rc = false;
762 
763  for(std::vector<int>::const_iterator it = triggerType_.begin(); it != triggerType_.end(); ++it)
764  {
765 
766  if(t == *it) { rc = true; break; }
767 
768  } // end for
769 
770  return rc;
771 
772 }
773 
774 
775 template <class T>
777 {
778  bool rc = false;
779 
780  for(std::vector<int>::const_iterator it = l1triggerType_.begin(); it != l1triggerType_.end(); ++it)
781  {
782 
783  if(t == *it) { rc = true; break; }
784 
785  } // end for
786 
787  return rc;
788 
789 }
790 
791 template <class T>
792 void objMon<T>::monitorDenominator(FourVectorHLTriggerOffline::PathInfoCollection::iterator v, bool l1accept, const trigger::Vids & idtype, const trigger::Keys & l1k, const trigger::TriggerObjectCollection& toc)
793 {
794 
795  setPath(v);
796 
797  if(! isTriggerType(v_->getObjectType()) ) return;
798 
799  fillMC();
800 
801  fillOff();
802 
803  if (l1accept) monitorL1(idtype, l1k, toc);
804 
805 
806 }
807 
808 template <class T>
810 {
811 
812  unsigned int NOff = 0;
813 
814  if( offCollB_.isValid()) {
815  typedef typename reco::JetTagCollection::const_iterator const_iterator;
816  for( const_iterator iter = offCollB_->begin(), iend = offCollB_->end(); iter != iend; ++iter )
817  {
818 
819  float recoEta = (*iter).first->eta();
820  float recoPhi = (*iter).first->phi();
821  float recoPt = (*iter).first->pt();
822 
823 
824  if (fabs(recoEta) <= EtaMax_ && recoPt >= EtMin_ )
825  {
826 
827  NOff++;
828  v_->getOffEtOffHisto()->Fill(recoPt);
829  v_->getOffEtaVsOffPhiOffHisto()->Fill(recoEta, recoPhi);
830 
831  }
832 
833  }
834 
835  }
836  else if(offColl_.isValid()) {
837 
838  typedef typename T::const_iterator const_iterator;
839  for( const_iterator iter = offColl_->begin(), iend = offColl_->end(); iter != iend; ++iter )
840  {
841 
842 
843  if (fabs(iter->eta()) <= EtaMax_ && iter->pt() >= EtMin_ )
844  {
845 
846  NOff++;
847  v_->getOffEtOffHisto()->Fill(iter->pt());
848  v_->getOffEtaVsOffPhiOffHisto()->Fill(iter->eta(), iter->phi());
849 
850  }
851 
852  }
853 
854  } // end else if
855 
856  v_->getNOffHisto()->Fill(NOff);
857 
858 }
859 
860 template <class T>
862 {
863 
864  float NMc=0;
865 
866  if(GenJetsFlag_)
867  {
868 
869  if (! genJets_.isValid()) return;
870 
871  for(reco::GenJetCollection::const_iterator gjet=genJets_->begin(); gjet!=genJets_->end(); gjet++) {
872 
873  if (fabs(gjet->eta()) <= EtaMax_ && gjet->pt() >= EtMin_ ){
874 
875  if(BJetsFlag_)
876  {
877  // this jet must have b in the cone
878  if(! hasBPartonInCone(gjet,0.7)) continue;
879 
880 
881  }
882 
883  NMc++;
884  v_->getMcEtMcHisto()->Fill(gjet->pt());
885  v_->getMcEtaVsMcPhiMcHisto()->Fill(gjet->eta(),gjet->phi());
886 
887 
888  } // end if Eta , Et
889 
890  } // end for
891 
892 
893  } // end if GenJetsFlag_
894  else if( genParticles_.isValid()) {
895 
896  for(size_t i = 0; i < genParticles_->size(); ++ i) {
897 
898  const reco::GenParticle & p = (*genParticles_)[i];
899  if (abs(p.pdgId()) == pdgId_ && p.status() == pdgStatus_ && fabs(p.eta()) <= EtaMax_ && p.pt() >= EtMin_ ){
900 
901  NMc++;
902  v_->getMcEtMcHisto()->Fill(p.pt());
903  v_->getMcEtaVsMcPhiMcHisto()->Fill(p.eta(),p.phi());
904 
905  }
906 
907  } // end for
908 
909  } // end if
910 
911  v_->getNMcHisto()->Fill(NMc);
912 
913 }
914 
915 template <class T>
917 {
918 
919  unsigned int NL1=0;
920  unsigned int NL1McUM=0;
921  unsigned int NL1OffUM=0;
922 
923  trigger::Vids::const_iterator idtypeiter = idtype.begin();
924  for (trigger::Keys::const_iterator l1ki = l1k.begin(); l1ki !=l1k.end(); ++l1ki ) {
925 
926  trigger::TriggerObject l1FV = toc[*l1ki];
927  if(isL1TriggerType(*idtypeiter))
928  {
929 
930  NL1++;
931 
932 
933  if (fabs(l1FV.eta()) <= EtaMax_ && l1FV.pt() >= EtMin_)
934  {
935 
936  v_->getL1EtL1Histo()->Fill(l1FV.pt());
937  v_->getL1EtaVsL1PhiL1Histo()->Fill(l1FV.eta(), l1FV.phi());
938 
939  }
940 
941  fimmap L1OffDRMatchMap;
942 
943  if (offCollB_.isValid()) {
944 
945  int j=0;
946  typedef typename reco::JetTagCollection::const_iterator const_iterator;
947  for( const_iterator iter = offCollB_->begin(), iend = offCollB_->end(); iter != iend; ++iter )
948  {
949 
950  float recoEta = (*iter).first->eta();
951  float recoPhi = (*iter).first->phi();
952  float recoPt = (*iter).first->pt();
953 
954  if (fabs(recoEta) <= EtaMax_ && recoPt >= EtMin_ )
955  {
956 
957  // fill UM histos (no matching required)
958  if(NL1 == 1) {
959 
960  NL1OffUM++;
961  v_->getOffEtL1OffUMHisto()->Fill(recoPt);
962  v_->getOffEtaVsOffPhiL1OffUMHisto()->Fill(recoEta,recoPhi);
963 
964  }
965 
966  // make maps of matched objects
967  float dR = reco::deltaR(recoEta,recoPhi,l1FV.eta(),l1FV.phi());
968  if ( dR < 1.0)
969  {
970 
971  L1OffDRMatchMap.insert(std::pair<float,int>(dR,j));
972 
973  }
974 
975  }
976 
977  j++;
978 
979  }
980 
981  }
982  else if (offColl_.isValid()) {
983 
984  int j=0;
985  typedef typename T::const_iterator const_iterator;
986  for( const_iterator iter = offColl_->begin(), iend = offColl_->end(); iter != iend; ++iter )
987  {
988 
989  if (fabs(iter->eta()) <= EtaMax_ && iter->pt() >= EtMin_ )
990  {
991 
992  // fill UM histos (no matching required)
993  if(NL1 == 1) {
994 
995  NL1OffUM++;
996  v_->getOffEtL1OffUMHisto()->Fill(iter->pt());
997  v_->getOffEtaVsOffPhiL1OffUMHisto()->Fill(iter->eta(),iter->phi());
998 
999  }
1000 
1001  // make maps of matched objects
1002  float dR = reco::deltaR(iter->eta(),iter->phi(),l1FV.eta(),l1FV.phi());
1003  if ( dR < 1.0)
1004  {
1005 
1006  L1OffDRMatchMap.insert(std::pair<float,int>(dR,j));
1007 
1008  }
1009 
1010  }
1011 
1012  j++;
1013 
1014  }
1015 
1016  }
1017  if(! L1OffDRMatchMap.empty()) L1OffDRMatchSet.insert(L1OffDRMatchMap);
1018 
1019  // fillL1MCUM
1021 
1022  if (GenJetsFlag_ && genJets_.isValid())
1023  {
1024 
1025  fimmap L1MCDRMatchMap;
1026  int j=0;
1027 
1028  for(reco::GenJetCollection::const_iterator gjet=genJets_->begin(); gjet!=genJets_->end(); gjet++) {
1029 
1030  if (fabs(gjet->eta()) <= EtaMax_ && gjet->pt() >= EtMin_ ){
1031 
1032  if (BJetsFlag_) {
1033 
1034  // this jet must have b in the cone
1035  if(! hasBPartonInCone(gjet,0.7)) {
1036 
1037  j++;
1038  continue;
1039 
1040  }
1041 
1042  }
1043 
1044  // fill UM histos (no matching required)
1045  if(NL1 == 1) {
1046 
1047  NL1McUM++;
1048  v_->getMcEtL1McUMHisto()->Fill(gjet->pt());
1049  v_->getMcEtaVsMcPhiL1McUMHisto()->Fill(gjet->eta(),gjet->phi());
1050 
1051  }
1052 
1053  // make maps of matched objects
1054  float dR = reco::deltaR(gjet->eta(),gjet->phi(),l1FV.eta(),l1FV.phi());
1055  if ( dR < 1.0)
1056  {
1057 
1058  L1MCDRMatchMap.insert(std::pair<float,int>(dR,j));
1059 
1060  }
1061 
1062 
1063  } // end if eta, Et
1064 
1065  j++;
1066 
1067  } // end for genJets
1068 
1069  if(! L1MCDRMatchMap.empty()) {
1070  L1MCDRMatchSet.insert(L1MCDRMatchMap);
1071  }
1072 
1073  } // end if genJets
1074  else if ( ! GenJetsFlag_ && genParticles_.isValid())
1075  {
1076 
1077  fimmap L1MCDRMatchMap;
1078  for(size_t i = 0; i < genParticles_->size(); ++ i)
1079  {
1080 
1081  const reco::GenParticle & p = (*genParticles_)[i];
1082  if (abs(p.pdgId()) == pdgId_ && p.status() == pdgStatus_ && fabs(p.eta()) <= EtaMax_ && p.pt() >= EtMin_)
1083  {
1084 
1085  // fill UM histos (no matching required)
1086  if(NL1 == 1) {
1087 
1088  NL1McUM++;
1089  v_->getMcEtL1McUMHisto()->Fill(p.pt());
1090  v_->getMcEtaVsMcPhiL1McUMHisto()->Fill(p.eta(),p.phi());
1091 
1092  }
1093 
1094  // make maps of matched objects
1095  float dR = reco::deltaR(p.eta(),p.phi(),l1FV.eta(),l1FV.phi());
1096  if ( dR < 1.0)
1097  {
1098 
1099  L1MCDRMatchMap.insert(std::pair<float,int>(dR,i));
1100 
1101  }
1102 
1103  } // end if pdg, status, eta, pt
1104  } // end for
1105 
1106  if(! L1MCDRMatchMap.empty()) {
1107  L1MCDRMatchSet.insert(L1MCDRMatchMap);
1108  }
1109 
1110  } // end if genParticle_
1111 
1112  } // end if isL1TriggerType
1113  ++idtypeiter;
1114 
1115  } // end for l1ki
1116 
1117  v_->getNL1Histo()->Fill(NL1);
1118  v_->getNL1OffUMHisto()->Fill(NL1OffUM);
1119  v_->getNL1McUMHisto()->Fill(NL1McUM);
1120 
1121 }
1122 
1123 template <class T>
1124 void objMon<T>::monitorOnline(const trigger::Vids & idtype, const trigger::Keys & l1k, trigger::Keys::const_iterator ki, const trigger::TriggerObjectCollection & toc, unsigned int & NOn)
1125 {
1126 
1127 
1128  unsigned int NOnOffUM=0;
1129  unsigned int NOnMcUM=0;
1130  unsigned int NOnL1UM=0;
1131 
1132  if(! isTriggerType(v_->getObjectType()) ) return;
1133 
1134  trigger::TriggerObject onlineFV = toc[*ki];
1135 
1136  NOn++;
1137 
1138  if (fabs(onlineFV.eta()) <= EtaMax_ && onlineFV.pt() >= EtMin_)
1139  {
1140 
1141  v_->getOnEtOnHisto()->Fill(onlineFV.pt());
1142  v_->getOnEtaVsOnPhiOnHisto()->Fill(onlineFV.eta(), onlineFV.phi());
1143 
1144  }
1145 
1146 
1147  fimmap OnOffDRMatchMap;
1148 
1149  if (offCollB_.isValid()) {
1150 
1151  int j=0;
1152  typedef typename reco::JetTagCollection::const_iterator const_iterator;
1153  for( const_iterator iter = offCollB_->begin(), iend = offCollB_->end(); iter != iend; ++iter )
1154  {
1155 
1156  float recoEta = (*iter).first->eta();
1157  float recoPhi = (*iter).first->phi();
1158  float recoPt = (*iter).first->pt();
1159 
1160  if (fabs(recoEta) <= EtaMax_ && recoPt >= EtMin_ )
1161  {
1162 
1163  // fill UM histos (no matching required)
1164  if(NOn == 1) {
1165 
1166  NOnOffUM++;
1167  v_->getOffEtOnOffUMHisto()->Fill(recoPt);
1168  v_->getOffEtaVsOffPhiOnOffUMHisto()->Fill(recoEta,recoPhi);
1169 
1170  }
1171 
1172  // make maps of matched objects
1173  float dR = reco::deltaR(recoEta,recoPhi,onlineFV.eta(),onlineFV.phi());
1174  if ( dR < 1.0)
1175  {
1176 
1177  OnOffDRMatchMap.insert(std::pair<float,int>(dR,j));
1178 
1179  }
1180 
1181  }
1182 
1183  j++;
1184 
1185  }
1186 
1187  }
1188  else if (offColl_.isValid()) {
1189 
1190  int j=0;
1191 
1192  typedef typename T::const_iterator const_iterator;
1193  for( const_iterator iter = offColl_->begin(), iend = offColl_->end(); iter != iend; ++iter )
1194  {
1195 
1196  if (fabs(iter->eta()) <= EtaMax_ && iter->pt() >= EtMin_ )
1197  {
1198 
1199  // fill UM histos (no matching required)
1200  if(NOn == 1) {
1201 
1202  NOnOffUM++;
1203  v_->getOffEtOnOffUMHisto()->Fill(iter->pt());
1204  v_->getOffEtaVsOffPhiOnOffUMHisto()->Fill(iter->eta(),iter->phi());
1205 
1206  }
1207 
1208  // make maps of matched objects
1209  float dR = reco::deltaR(iter->eta(),iter->phi(),onlineFV.eta(),onlineFV.phi());
1210  if ( dR < 1.0)
1211  {
1212 
1213  OnOffDRMatchMap.insert(std::pair<float,int>(dR,j));
1214 
1215  }
1216 
1217  }
1218 
1219  j++;
1220 
1221 
1222  }
1223 
1224  }
1225 
1226  if(! OnOffDRMatchMap.empty()) OnOffDRMatchSet.insert(OnOffDRMatchMap);
1227 
1228 
1229 
1230  fimmap OnL1DRMatchMap;
1231  int j=0;
1232  trigger::Vids::const_iterator idtypeiter = idtype.begin();
1233  for (trigger::Keys::const_iterator l1ki = l1k.begin(); l1ki !=l1k.end(); ++l1ki )
1234  {
1235 
1236 
1237 
1238  if(isL1TriggerType(*idtypeiter))
1239  {
1240 
1241  trigger::TriggerObject l1FV = toc[*l1ki];
1242 
1243  if ( fabs(l1FV.eta()) <= EtaMax_ && l1FV.pt() >= EtMin_ )
1244  {
1245 
1246  // fill UM histos (no matching required)
1247  if(NOn == 1) {
1248 
1249  NOnL1UM++;
1250  v_->getL1EtL1OnUMHisto()->Fill(l1FV.pt());
1251  v_->getL1EtaVsL1PhiL1OnUMHisto()->Fill(l1FV.eta(),l1FV.phi());
1252 
1253  }
1254 
1255 
1256  float dR = reco::deltaR(l1FV.eta(),l1FV.phi(),onlineFV.eta(),onlineFV.phi());
1257 
1258  if ( dR < 1.0)
1259  {
1260 
1261  OnL1DRMatchMap.insert(std::pair<float,int>(dR,j));
1262 
1263  }
1264 
1265  } // end if l1FV eta, pt
1266 
1267  } // end if isL1TriggerType
1268 
1269  ++idtypeiter;
1270  j++;
1271 
1272  } // end for
1273 
1274  if(! OnL1DRMatchMap.empty()) OnL1DRMatchSet.insert(OnL1DRMatchMap);
1275 
1276  // fillOnMCUM
1278 
1279  if (GenJetsFlag_ && genJets_.isValid())
1280  {
1281 
1282  fimmap OnMCDRMatchMap;
1283  int j=0;
1284 
1285  for(reco::GenJetCollection::const_iterator gjet=genJets_->begin(); gjet!=genJets_->end(); gjet++) {
1286 
1287  if (fabs(gjet->eta()) <= EtaMax_ && gjet->pt() >= EtMin_ ){
1288 
1289  if (BJetsFlag_) {
1290 
1291  // this jet must have b in the cone
1292  if(! hasBPartonInCone(gjet,0.7)) {
1293 
1294  j++;
1295  continue;
1296 
1297  }
1298 
1299  }
1300  // fill UM histos (no matching required)
1301  if(NOn == 1) {
1302 
1303  NOnMcUM++;
1304  v_->getMcEtOnMcUMHisto()->Fill(gjet->pt());
1305  v_->getMcEtaVsMcPhiOnMcUMHisto()->Fill(gjet->eta(),gjet->phi());
1306 
1307  }
1308 
1309  // make maps of matched objects
1310  float dR = reco::deltaR(gjet->eta(),gjet->phi(),onlineFV.eta(),onlineFV.phi());
1311  if ( dR < 1.0)
1312  {
1313 
1314  OnMCDRMatchMap.insert(std::pair<float,int>(dR,j));
1315 
1316  }
1317 
1318  } // end if eta, Et
1319 
1320  j++;
1321 
1322  } // end for genJets
1323 
1324  if(! OnMCDRMatchMap.empty()) OnMCDRMatchSet.insert(OnMCDRMatchMap);
1325 
1326  } // end if genJets
1327  else if (!GenJetsFlag_ && genParticles_.isValid())
1328  {
1329 
1330  fimmap OnMCDRMatchMap;
1331  for(size_t i = 0; i < genParticles_->size(); ++ i)
1332  {
1333 
1334  const reco::GenParticle & p = (*genParticles_)[i];
1335  if (abs(p.pdgId()) == pdgId_ && p.status() == pdgStatus_ && fabs(p.eta()) <= EtaMax_ && p.pt() >= EtMin_)
1336  {
1337 
1338  // fill UM histos (no matching required)
1339  if(NOn == 1) {
1340 
1341  NOnMcUM++;
1342  v_->getMcEtOnMcUMHisto()->Fill(p.pt());
1343  v_->getMcEtaVsMcPhiOnMcUMHisto()->Fill(p.eta(),p.phi());
1344 
1345  }
1346 
1347  // make maps of matched objects
1348  float dR = reco::deltaR(p.eta(),p.phi(),onlineFV.eta(),onlineFV.phi());
1349  if ( dR < 1.0)
1350  {
1351 
1352  OnMCDRMatchMap.insert(std::pair<float,int>(dR,i));
1353 
1354  }
1355  } // end if
1356  } // end for
1357 
1358  if(! OnMCDRMatchMap.empty()) OnMCDRMatchSet.insert(OnMCDRMatchMap);
1359 
1360  }
1361 
1362  v_->getNOnHisto()->Fill(NOn);
1363  v_->getNOnOffUMHisto()->Fill(NOnOffUM);
1364  v_->getNL1OnUMHisto()->Fill(NOnL1UM);
1365  v_->getNOnMcUMHisto()->Fill(NOnMcUM);
1366 
1367 }
1368 
1369 template <class T>
1371 {
1372 
1373  unsigned int NOff=0;
1374  unsigned int NOffMcUM=0;
1375 
1376  if(! isTriggerType(v_->getObjectType()) ) return;
1377 
1378 
1379  if(offCollB_.isValid()) {
1380 
1381  typedef typename reco::JetTagCollection::const_iterator const_iterator;
1382  for( const_iterator iter = offCollB_->begin(), iend = offCollB_->end(); iter != iend; ++iter )
1383  {
1384 
1385  NOff++;
1386 
1387  if (GenJetsFlag_ && genJets_.isValid())
1388  {
1389 
1390  fimmap OffMCDRMatchMap;
1391  int j=0;
1392 
1393  for(reco::GenJetCollection::const_iterator gjet=genJets_->begin(); gjet!=genJets_->end(); gjet++) {
1394 
1395 
1396  if (fabs(gjet->eta()) <= EtaMax_ && gjet->pt() >= EtMin_ ){
1397 
1398  if (BJetsFlag_ && hasBPartonInCone(gjet,0.7)) {
1399 
1400 
1401  // fill UM histos (no matching required)
1402  if(NOff == 1) {
1403 
1404  NOffMcUM++;
1405  v_->getMcEtOffMcUMHisto()->Fill(gjet->pt());
1406  v_->getMcEtaVsMcPhiOffMcUMHisto()->Fill(gjet->eta(),gjet->phi());
1407 
1408  }
1409 
1410  // make maps of matched objects
1411  float dR = reco::deltaR(gjet->eta(),gjet->phi(),(*iter).first->eta(),(*iter).first->phi());
1412  if ( dR < 1.0)
1413  {
1414 
1415  OffMCDRMatchMap.insert(std::pair<float,int>(dR,j));
1416 
1417  }
1418 
1419  } // end if BJetsFlag_ and hasBParton
1420 
1421  } // end if eta, Et
1422 
1423  j++;
1424 
1425  } // end for genJets
1426 
1427  if(! OffMCDRMatchMap.empty()) OffMCDRMatchSet.insert(OffMCDRMatchMap);
1428 
1429  } // end if genJets
1430 
1431  } // end for offline objects
1432 
1433  } // end if
1434  else if(offColl_.isValid()) {
1435 
1436  typedef typename T::const_iterator const_iterator;
1437  for( const_iterator iter = offColl_->begin(), iend = offColl_->end(); iter != iend; ++iter )
1438  {
1439 
1440  NOff++;
1441 
1442  if (GenJetsFlag_ && genJets_.isValid())
1443  {
1444 
1445  fimmap OffMCDRMatchMap;
1446  int j=0;
1447 
1448  for(reco::GenJetCollection::const_iterator gjet=genJets_->begin(); gjet!=genJets_->end(); gjet++) {
1449 
1450  if (fabs(gjet->eta()) <= EtaMax_ && gjet->pt() >= EtMin_ ){
1451 
1452  if (BJetsFlag_) {
1453 
1454  // this jet must have b in the cone
1455  if(! hasBPartonInCone(gjet,0.7)) {
1456 
1457  j++;
1458  continue;
1459 
1460  }
1461 
1462  }
1463 
1464  // fill UM histos (no matching required)
1465  if(NOff == 1) {
1466 
1467  NOffMcUM++;
1468  v_->getMcEtOffMcUMHisto()->Fill(gjet->pt());
1469  v_->getMcEtaVsMcPhiOffMcUMHisto()->Fill(gjet->eta(),gjet->phi());
1470 
1471  }
1472 
1473  // make maps of matched objects
1474  float dR = reco::deltaR(gjet->eta(),gjet->phi(),iter->eta(),iter->phi());
1475  if ( dR < 1.0)
1476  {
1477 
1478  OffMCDRMatchMap.insert(std::pair<float,int>(dR,j));
1479 
1480  }
1481 
1482  } // end if eta, Et
1483 
1484  j++;
1485 
1486  } // end for genJets
1487 
1488  if(! OffMCDRMatchMap.empty()) OffMCDRMatchSet.insert(OffMCDRMatchMap);
1489 
1490  } // end if genJets
1491 
1492  else if (!GenJetsFlag_ && genParticles_.isValid())
1493  {
1494 
1495  fimmap OffMCDRMatchMap;
1496  for(size_t i = 0; i < genParticles_->size(); ++ i)
1497  {
1498 
1499  const reco::GenParticle & p = (*genParticles_)[i];
1500  if (abs(p.pdgId()) == pdgId_ && p.status() == pdgStatus_ && fabs(p.eta()) <= EtaMax_ && p.pt() >= EtMin_)
1501  {
1502 
1503  // fill UM histos (no matching required)
1504  if(NOff == 1) {
1505 
1506  NOffMcUM++;
1507  v_->getMcEtOffMcUMHisto()->Fill(p.pt());
1508  v_->getMcEtaVsMcPhiOffMcUMHisto()->Fill(p.eta(),p.phi());
1509 
1510  }
1511 
1512  // make maps of matched objects
1513  float dR = reco::deltaR(p.eta(),p.phi(),iter->eta(),iter->phi());
1514  if ( dR < 1.0)
1515  {
1516 
1517  OffMCDRMatchMap.insert(std::pair<float,int>(dR,i));
1518 
1519  }
1520 
1521  } // end if pdg, status, eta, pt
1522  } // end for
1523 
1524  if(! OffMCDRMatchMap.empty()) OffMCDRMatchSet.insert(OffMCDRMatchMap);
1525 
1526  } // end if genParticle_
1527 
1528  } // end for offline objects
1529 
1530  } // end else if
1531 
1532  v_->getNOffHisto()->Fill(NOff);
1533  v_->getNOffMcUMHisto()->Fill(NOffMcUM);
1534 
1535 }
1536 
1537 template <class T>
1539 {
1540 
1541  float NL1Off=0;
1542 
1543  if(L1OffDRMatchSet.size() > 1) fv->cleanDRMatchSet(L1OffDRMatchSet);
1544 
1545  // clean the set L1-Off
1546  // now fill histos
1547  for ( mmset::iterator setIter = L1OffDRMatchSet.begin( ); setIter != L1OffDRMatchSet.end( ); setIter++ )
1548  {
1549 
1550  fimmap tempMap = *setIter;
1551 
1552  fimmap::iterator it = tempMap.begin();
1553  int i = (*it).second ;
1554  float dR = (*it).first;
1555  v_->getOffDRL1OffHisto()->Fill(dR);
1556 
1557  if (dR > DRMatch_) continue;
1558  if( offCollB_.isValid()) {
1559 
1560  typedef typename reco::JetTagCollection::const_iterator const_iterator;
1561  const_iterator iter = offCollB_->begin();
1562  for (int count = 0; count < i; count++) iter++;
1563 
1564 
1565  NL1Off++;
1566  v_->getOffEtL1OffHisto()->Fill((*iter).first->pt());
1567  v_->getOffEtaVsOffPhiL1OffHisto()->Fill((*iter).first->eta(),(*iter).first->phi());
1568 
1569 
1570  }
1571  else if( offColl_.isValid()) {
1572 
1573  typedef typename T::const_iterator const_iterator;
1574  const_iterator iter = offColl_->begin();
1575  for (int count = 0; count < i; count++) iter++;
1576 
1577 
1578  NL1Off++;
1579  v_->getOffEtL1OffHisto()->Fill(iter->pt());
1580  v_->getOffEtaVsOffPhiL1OffHisto()->Fill(iter->eta(),iter->phi());
1581 
1582  }
1583 
1584  }
1585 
1586  v_->getNL1OffHisto()->Fill(NL1Off);
1587 
1588 }
1589 
1590 template <class T>
1592 {
1593 
1594  unsigned int NL1Mc=0;
1595 
1596  if(GenJetsFlag_)
1597  {
1598 
1599  if (! genJets_.isValid()) return;
1600 
1601  // clean the set L1-MC
1602  if(L1MCDRMatchSet.size() > 1) fv->cleanDRMatchSet(L1MCDRMatchSet);
1603 
1604  float NL1Mc=0;
1605 
1606  // now fill histos
1607  for ( mmset::iterator setIter = L1MCDRMatchSet.begin( ); setIter != L1MCDRMatchSet.end( ); setIter++ )
1608  {
1609 
1610  fimmap tempMap = *setIter;
1611 
1612  fimmap::iterator it = tempMap.begin();
1613  int i = (*it).second ;
1614  float dR = (*it).first;
1615 
1616  v_->getMcDRL1McHisto()->Fill(dR);
1617 
1618  if (dR > DRMatch_) continue;
1619 
1620  reco::GenJetCollection::const_iterator gjet=genJets_->begin();
1621  for (int count = 0; count < i; count++) gjet++;
1622 
1623  NL1Mc++;
1624  v_->getMcEtL1McHisto()->Fill(gjet->pt());
1625  v_->getMcEtaVsMcPhiL1McHisto()->Fill(gjet->eta(),gjet->phi());
1626 
1627 
1628  } // end for set
1629 
1630  } // end if GenJetsFlag_
1631  else if( genParticles_.isValid()) {
1632 
1633  // clean the set L1-MC
1634  if(L1MCDRMatchSet.size() > 1) fv->cleanDRMatchSet(L1MCDRMatchSet);
1635 
1636  // now fill histos
1637  for ( mmset::iterator setIter = L1MCDRMatchSet.begin( ); setIter != L1MCDRMatchSet.end( ); setIter++ )
1638  {
1639 
1640  fimmap tempMap = *setIter;
1641 
1642  fimmap::iterator it = tempMap.begin();
1643  int i = (*it).second ;
1644  float dR = (*it).first;
1645 
1646  v_->getMcDRL1McHisto()->Fill(dR);
1647 
1648  if (dR > DRMatch_) continue;
1649 
1650  const reco::GenParticle & p = (*genParticles_)[i];
1651 
1652  NL1Mc++;
1653  v_->getMcEtL1McHisto()->Fill(p.pt());
1654  v_->getMcEtaVsMcPhiL1McHisto()->Fill(p.eta(),p.phi());
1655 
1656  } // end for
1657 
1658  } // end else if
1659 
1660  v_->getNL1McHisto()->Fill(NL1Mc);
1661 
1662 }
1663 
1664 template <class T>
1666 {
1667 
1668  unsigned int NOnOff=0;
1669 
1670  // clean the set L1-Off
1671  if(OnOffDRMatchSet.size() > 1) fv->cleanDRMatchSet(OnOffDRMatchSet);
1672  // now fill histos
1673  for ( mmset::iterator setIter = OnOffDRMatchSet.begin( ); setIter != OnOffDRMatchSet.end( ); setIter++ )
1674  {
1675 
1676 
1677  fimmap tempMap = *setIter;
1678 
1679  fimmap::iterator it = tempMap.begin();
1680  int i = (*it).second ;
1681  float dR = (*it).first;
1682  v_->getOffDROnOffHisto()->Fill(dR);
1683 
1684 
1685  if (dR > DRMatch_) continue;
1686 
1687  if( offCollB_.isValid()) {
1688 
1689 
1690  typedef typename reco::JetTagCollection::const_iterator const_iterator;
1691  const_iterator iter = offCollB_->begin();
1692  for (int count = 0; count < i; count++) iter++;
1693 
1694 
1695  NOnOff++;
1696  v_->getOffEtOnOffHisto()->Fill((*iter).first->pt());
1697  v_->getOffEtaVsOffPhiOnOffHisto()->Fill((*iter).first->eta(),(*iter).first->phi());
1698 
1699  }
1700  else if( offColl_.isValid()) {
1701 
1702  typedef typename T::const_iterator const_iterator;
1703  const_iterator iter = offColl_->begin();
1704  for (int count = 0; count < i; count++) iter++;
1705 
1706  NOnOff++;
1707  v_->getOffEtOnOffHisto()->Fill(iter->pt());
1708  v_->getOffEtaVsOffPhiOnOffHisto()->Fill(iter->eta(),iter->phi());
1709 
1710  }
1711 
1712  }
1713 
1714  v_->getNOnOffHisto()->Fill(NOnOff);
1715 
1716 }
1717 
1718 template <class T>
1720 {
1721 
1722  unsigned int NOnMc=0;
1723 
1724  if(GenJetsFlag_)
1725  {
1726 
1727  if (! genJets_.isValid()) return;
1728 
1729  // clean the set L1-MC
1730  if(OnMCDRMatchSet.size() > 1) fv->cleanDRMatchSet(OnMCDRMatchSet);
1731 
1732  // now fill histos
1733  for ( mmset::iterator setIter = OnMCDRMatchSet.begin( ); setIter != OnMCDRMatchSet.end( ); setIter++ )
1734  {
1735 
1736  fimmap tempMap = *setIter;
1737 
1738  fimmap::iterator it = tempMap.begin();
1739  int i = (*it).second ;
1740  float dR = (*it).first;
1741  v_->getMcDROnMcHisto()->Fill(dR);
1742 
1743  if (dR > DRMatch_) continue;
1744 
1745  reco::GenJetCollection::const_iterator gjet=genJets_->begin();
1746  for (int count = 0; count < i; count++) gjet++;
1747 
1748 
1749  NOnMc++;
1750  v_->getMcEtOnMcHisto()->Fill(gjet->pt());
1751  v_->getMcEtaVsMcPhiOnMcHisto()->Fill(gjet->eta(),gjet->phi());
1752 
1753  } // end for set
1754 
1755  } // end if GenJetsFlag_
1756  else if( genParticles_.isValid()) {
1757 
1758  // clean the set L1-MC
1759  if(OnMCDRMatchSet.size() > 1) fv->cleanDRMatchSet(OnMCDRMatchSet);
1760 
1761  // now fill histos
1762  for ( mmset::iterator setIter = OnMCDRMatchSet.begin( ); setIter != OnMCDRMatchSet.end( ); setIter++ )
1763  {
1764 
1765  fimmap tempMap = *setIter;
1766 
1767  fimmap::iterator it = tempMap.begin();
1768  int i = (*it).second ;
1769  float dR = (*it).first;
1770  v_->getMcDROnMcHisto()->Fill(dR);
1771 
1772  if (dR > DRMatch_) continue;
1773 
1774  const reco::GenParticle & p = (*genParticles_)[i];
1775 
1776  NOnMc++;
1777  v_->getMcEtOnMcHisto()->Fill(p.pt());
1778  v_->getMcEtaVsMcPhiOnMcHisto()->Fill(p.eta(),p.phi());
1779 
1780  }
1781 
1782  }
1783 
1784  v_->getNOnMcHisto()->Fill(NOnMc);
1785 
1786 }
1787 
1788 template <class T>
1790 {
1791 
1792  unsigned int NOffMc=0;
1793 
1794  if(GenJetsFlag_)
1795  {
1796 
1797  if (! genJets_.isValid()) return;
1798 
1799  // clean the set L1-MC
1800  if(OffMCDRMatchSet.size() > 1) fv->cleanDRMatchSet(OffMCDRMatchSet);
1801 
1802  // now fill histos
1803  for ( mmset::iterator setIter = OffMCDRMatchSet.begin( ); setIter != OffMCDRMatchSet.end( ); setIter++ )
1804  {
1805 
1806  fimmap tempMap = *setIter;
1807 
1808  fimmap::iterator it = tempMap.begin();
1809  int i = (*it).second ;
1810  float dR = (*it).first;
1811  v_->getMcDROffMcHisto()->Fill(dR);
1812 
1813  if (dR > DRMatch_) continue;
1814 
1815  reco::GenJetCollection::const_iterator gjet=genJets_->begin();
1816  for (int count = 0; count < i; count++) gjet++;
1817 
1818  NOffMc++;
1819  v_->getMcEtOffMcHisto()->Fill(gjet->pt());
1820  v_->getMcEtaVsMcPhiOffMcHisto()->Fill(gjet->eta(),gjet->phi());
1821 
1822  } // end for set
1823 
1824  } // end if GenJetsFlag_
1825  else if( genParticles_.isValid() && offColl_.isValid()) {
1826 
1827  // clean the set L1-MC
1828  if(OffMCDRMatchSet.size() > 1) fv->cleanDRMatchSet(OffMCDRMatchSet);
1829 
1830  // now fill histos
1831  for ( mmset::iterator setIter = OffMCDRMatchSet.begin( ); setIter != OffMCDRMatchSet.end( ); setIter++ )
1832  {
1833 
1834  fimmap tempMap = *setIter;
1835 
1836  fimmap::iterator it = tempMap.begin();
1837  int i = (*it).second ;
1838  float dR = (*it).first;
1839  v_->getMcDROffMcHisto()->Fill(dR);
1840 
1841  if (dR > DRMatch_) continue;
1842 
1843  const reco::GenParticle & p = (*genParticles_)[i];
1844 
1845  NOffMc++;
1846  v_->getMcEtOffMcHisto()->Fill(p.pt());
1847  v_->getMcEtaVsMcPhiOffMcHisto()->Fill(p.eta(),p.phi());
1848 
1849  }
1850 
1851  }
1852 
1853  v_->getNOffMcHisto()->Fill(NOffMc);
1854 
1855 }
1856 
1857 template <class T>
1859 {
1860 
1861  unsigned int NOnL1=0;
1862 
1863  // clean the set On-L1
1864  if(OnL1DRMatchSet.size() > 1) fv->cleanDRMatchSet(OnL1DRMatchSet);
1865  // now fill histos
1866  for ( mmset::iterator setIter = OnL1DRMatchSet.begin( ); setIter != OnL1DRMatchSet.end( ); setIter++ )
1867  {
1868 
1869  fimmap tempMap = *setIter;
1870 
1871  fimmap::iterator it = tempMap.begin();
1872  int i = (*it).second ;
1873  float dR = (*it).first;
1874  v_->getL1DROnL1Histo()->Fill(dR);
1875 
1876  if (dR > DRMatch_) continue;
1877 
1878  trigger::Keys::const_iterator l1ki = l1k.begin();
1879  for (int count = 0; count < i; count++) l1ki++;
1880 
1881  NOnL1++;
1882  v_->getL1EtL1OnHisto()->Fill(toc[*l1ki].pt());
1883  v_->getL1EtaVsL1PhiL1OnHisto()->Fill(toc[*l1ki].eta(),toc[*l1ki].phi());
1884 
1885  }
1886 
1887  v_->getNL1OnHisto()->Fill(NOnL1);
1888 
1889 }
1890 
1891 template <class T>
1892 bool objMon<T>::hasBPartonInCone(reco::GenJetCollection::const_iterator gjet, float coneSize)
1893 {
1894 
1895  bool rc = false;
1896  if (! genParticles_.isValid()) return rc;
1897 
1898  for(size_t i = 0; i < genParticles_->size(); ++ i) {
1899 
1900  const reco::GenParticle & p = (*genParticles_)[i];
1901  if (abs(p.pdgId()) == 5){
1902 
1903  if (reco::deltaR(p.eta(),p.phi(),gjet->eta(),gjet->phi()) < coneSize){
1904 
1905  rc = true;
1906 
1907  }
1908 
1909  }
1910 
1911  }
1912 
1913 
1914  return rc;
1915 
1916 }
1917 
1918 template <class T>
1920 {
1921 
1922  L1OffDRMatchSet.clear();
1923  L1MCDRMatchSet.clear();
1924  OnOffDRMatchSet.clear();
1925  OnMCDRMatchSet.clear();
1926  OnL1DRMatchSet.clear();
1927  OffMCDRMatchSet.clear();
1928 
1929 }
1930 
1931 
1932 #endif
edm::Handle< reco::GenJetCollection > genJets_
type
Definition: HCALResponse.h:22
bool isTriggerType(int t)
int i
Definition: DBlmapReader.cc:9
virtual int pdgId() const
PDG identifier.
void setHistos(MonitorElement *const NMc, MonitorElement *const mcEtMc, MonitorElement *const mcEtavsmcPhiMc, MonitorElement *const NOn, MonitorElement *const onEtOn, MonitorElement *const onEtavsonPhiOn, MonitorElement *const NOff, MonitorElement *const offEtOff, MonitorElement *const offEtavsoffPhiOff, MonitorElement *const NL1, MonitorElement *const l1EtL1, MonitorElement *const l1Etavsl1PhiL1, MonitorElement *const NL1On, MonitorElement *const l1EtL1On, MonitorElement *const l1Etavsl1PhiL1On, MonitorElement *const NL1Off, MonitorElement *const offEtL1Off, MonitorElement *const offEtavsoffPhiL1Off, MonitorElement *const NOnOff, MonitorElement *const offEtOnOff, MonitorElement *const offEtavsoffPhiOnOff, MonitorElement *const NL1Mc, MonitorElement *const mcEtL1Mc, MonitorElement *const mcEtavsmcPhiL1Mc, MonitorElement *const NOffMc, MonitorElement *const mcEtOffMc, MonitorElement *const mcEtavsmcPhiOffMc, MonitorElement *const NOnMc, MonitorElement *const mcEtOnMc, MonitorElement *const mcEtavsmcPhiOnMc, MonitorElement *const NL1OnUM, MonitorElement *const l1EtL1OnUM, MonitorElement *const l1Etavsl1PhiL1OnUM, MonitorElement *const NL1OffUM, MonitorElement *const offEtL1OffUM, MonitorElement *const offEtavsoffPhiL1OffUM, MonitorElement *const NOnOffUM, MonitorElement *const offEtOnOffUM, MonitorElement *const offEtavsoffPhiOnOffUM, MonitorElement *const NL1McUM, MonitorElement *const mcEtL1McUM, MonitorElement *const mcEtavsmcPhiL1McUM, MonitorElement *const NOffMcUM, MonitorElement *const mcEtOffMcUM, MonitorElement *const mcEtavsmcPhiOffMcUM, MonitorElement *const NOnMcUM, MonitorElement *const mcEtOnMcUM, MonitorElement *const mcEtavsmcPhiOnMcUM, MonitorElement *const mcDRL1Mc, MonitorElement *const mcDROnMc, MonitorElement *const mcDROffMc, MonitorElement *const offDRL1Off, MonitorElement *const offDROnOff, MonitorElement *const l1DRL1On)
long int flag
Definition: mlp_lapack.h:47
PathInfo(std::string denomPathName, std::string pathName, std::string l1pathName, std::string filterName, std::string processName, size_t type, MonitorElement *NMc, MonitorElement *mcEtMc, MonitorElement *mcEtavsmcPhiMc, MonitorElement *NOn, MonitorElement *onEtOn, MonitorElement *onEtavsonPhiOn, MonitorElement *NOff, MonitorElement *offEtOff, MonitorElement *offEtavsoffPhiOff, MonitorElement *NL1, MonitorElement *l1EtL1, MonitorElement *l1Etavsl1PhiL1, MonitorElement *NL1On, MonitorElement *l1EtL1On, MonitorElement *l1Etavsl1PhiL1On, MonitorElement *NL1Off, MonitorElement *offEtL1Off, MonitorElement *offEtavsoffPhiL1Off, MonitorElement *NOnOff, MonitorElement *offEtOnOff, MonitorElement *offEtavsoffPhiOnOff, MonitorElement *NL1Mc, MonitorElement *mcEtL1Mc, MonitorElement *mcEtavsmcPhiL1Mc, MonitorElement *NOffMc, MonitorElement *mcEtOffMc, MonitorElement *mcEtavsmcPhiOffMc, MonitorElement *NOnMc, MonitorElement *mcEtOnMc, MonitorElement *mcEtavsmcPhiOnMc, MonitorElement *NL1OnUM, MonitorElement *l1EtL1OnUM, MonitorElement *l1Etavsl1PhiL1OnUM, MonitorElement *NL1OffUM, MonitorElement *offEtL1OffUM, MonitorElement *offEtavsoffPhiL1OffUM, MonitorElement *NOnOffUM, MonitorElement *offEtOnOffUM, MonitorElement *offEtavsoffPhiOnOffUM, MonitorElement *NL1McUM, MonitorElement *mcEtL1McUM, MonitorElement *mcEtavsmcPhiL1McUM, MonitorElement *NOffMcUM, MonitorElement *mcEtOffMcUM, MonitorElement *mcEtavsmcPhiOffMcUM, MonitorElement *NOnMcUM, MonitorElement *mcEtOnMcUM, MonitorElement *mcEtavsmcPhiOnMcUM, MonitorElement *mcDRL1Mc, MonitorElement *mcDROnMc, MonitorElement *mcDROffMc, MonitorElement *offDRL1Off, MonitorElement *offDROnOff, MonitorElement *l1DRL1On, float ptmin, float ptmax)
FourVectorHLTriggerOffline::PathInfoCollection::iterator v_
void endRun(const edm::Run &run, const edm::EventSetup &c)
EndRun.
FourVectorHLTriggerOffline(const edm::ParameterSet &)
void setGenJets(bool flag, edm::Handle< reco::GenJetCollection > genJets)
transient_vector_type::const_iterator const_iterator
void fillOnlineMatch(FourVectorHLTriggerOffline *fv, const trigger::Keys &l1k, const trigger::TriggerObjectCollection &toc)
void fillOffMatch(FourVectorHLTriggerOffline *fv)
float phi() const
Definition: TriggerObject.h:60
edm::Handle< T > offColl_
void setLimits(float etaMax, float etMin, float drMatch)
virtual int status() const
status word
void fillOnOffMatch(FourVectorHLTriggerOffline *fv)
void pushL1TriggerType(int trigType)
void setBJetsFlag(bool flag)
bool hasBPartonInCone(reco::GenJetCollection::const_iterator gjet, float coneSize)
void fillOnMCMatch(FourVectorHLTriggerOffline *fv)
std::multimap< float, int > fimmap
#define abs(x)
Definition: mlp_lapack.h:159
void setL1TriggerType(std::vector< int > trigType)
void monitorOffline(FourVectorHLTriggerOffline *fv)
float eta() const
Definition: TriggerObject.h:59
virtual void analyze(const edm::Event &, const edm::EventSetup &)
T eta() const
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
void pushTriggerType(int trigType)
virtual double eta() const
momentum pseudorapidity
void monitorDenominator(FourVectorHLTriggerOffline::PathInfoCollection::iterator v, bool l1accept, const trigger::Vids &idtype, const trigger::Keys &l1k, const trigger::TriggerObjectCollection &toc)
std::set< fimmap, std::less< fimmap > > mmset
double deltaR(double eta1, double phi1, double eta2, double phi2)
Definition: deltaR.h:19
void fillOnL1Match(FourVectorHLTriggerOffline *fv, const trigger::Keys &l1k, const trigger::TriggerObjectCollection &toc)
std::vector< int > triggerType_
Single trigger physics object (e.g., an isolated muon)
Definition: TriggerObject.h:24
void cleanDRMatchSet(mmset &tempSet)
Clean DR Match Set.
edm::Handle< reco::GenParticleCollection > genParticles_
void setReco(edm::Handle< T > offColl)
const edm::InputTag getTag(void) const
void fillL1OffMatch(FourVectorHLTriggerOffline *fv)
void monitorL1(const trigger::Vids &idtype, const trigger::Keys &l1k, const trigger::TriggerObjectCollection &toc)
void fillL1MCMatch(FourVectorHLTriggerOffline *fv)
int j
Definition: DBlmapReader.cc:9
#define end
Definition: vmac.h:38
void beginRun(const edm::Run &run, const edm::EventSetup &c)
void setTriggerType(std::vector< int > trigType)
bool etMin(const PFCandidate &cand, double cut)
std::vector< TriggerObject > TriggerObjectCollection
collection of trigger physics objects (e.g., all isolated muons)
Definition: TriggerObject.h:83
void fillOffMCMatch(FourVectorHLTriggerOffline *fv)
void setMC(edm::Handle< reco::GenParticleCollection > genParticles, int pdgId, int status)
virtual double pt() const
transverse momentum
std::vector< size_type > Keys
const std::string getDenomPath(void) const
double ptmin
Definition: HydjetWrapper.h:86
#define begin
Definition: vmac.h:31
void monitorOnline(const trigger::Vids &idtype, const trigger::Keys &l1k, trigger::Keys::const_iterator ki, const trigger::TriggerObjectCollection &toc, unsigned int &NOn)
std::vector< std::pair< std::string, std::string > > custompathnamepairs_
std::vector< PathInfo >::iterator find(std::string pathName)
edm::Handle< reco::JetTagCollection > offCollB_
std::vector< int > l1triggerType_
tuple status
Definition: ntuplemaker.py:245
PathInfo(std::string denomPathName, std::string pathName, std::string l1pathName, std::string filterName, std::string processName, size_t type, float ptmin, float ptmax)
void setPath(FourVectorHLTriggerOffline::PathInfoCollection::iterator v)
virtual double phi() const
momentum azimuthal angle
mathSSE::Vec4< T > v
void setRecoB(edm::Handle< reco::JetTagCollection > offCollB)
std::vector< int > Vids
void fillL1Match(FourVectorHLTriggerOffline *fv)
void setPath(TString &v)
Definition: fwPaths.cc:15
Definition: Run.h:33
bool isL1TriggerType(int t)
Definition: DDAxes.h:10