CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
FourVectorHLTOffline.h
Go to the documentation of this file.
1 #ifndef FOURVECTORHLTOFFLINE_H
2 #define FOURVECTORHLTOFFLINE_H
3 // -*- C++ -*-
4 //
5 // Package: FourVectorHLTOffline
6 // Class: FourVectorHLTOffline
7 //
16 //
17 // Original Author: Jeffrey Berryhill
18 // Created: June 2008
19 // Rewritten by: Vladimir Rekovic
20 // Date: May 2009
21 //
22 // $Id: FourVectorHLTOffline.h,v 1.67 2011/06/20 10:11:54 bjk Exp $
23 //
24 //
25 // system include files
26 #include <memory>
27 #include <unistd.h>
28 
29 
30 // user include files
33 
40 
46 
47 // added VR
53 
55 
61 
80 
83 
87 
88 /* MC
89 #include "DataFormats/HepMCCandidate/interface/GenParticle.h"
90 #include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h"
91 #include "DataFormats/JetReco/interface/GenJetCollection.h"
92 #include "DataFormats/METReco/interface/GenMETCollection.h"
93 #include "DataFormats/METReco/interface/GenMET.h"
94 */
97 
99 
100 
101 
102 #include <iostream>
103 #include <fstream>
104 #include <vector>
105 
106 namespace edm {
107  class TriggerNames;
108 }
109 
110 typedef std::multimap<float,int> fimmap ;
111 typedef std::set<fimmap , std::less<fimmap> > mmset;
112 
114 
115  public:
116  explicit FourVectorHLTOffline(const edm::ParameterSet&);
118 
119  void cleanDRMatchSet(mmset& tempSet);
120 
124 
125  private:
126  virtual void beginJob() ;
127  virtual void analyze(const edm::Event&, const edm::EventSetup&);
128  virtual void endJob() ;
129 
130  // BeginRun
131  void beginRun(const edm::Run& run, const edm::EventSetup& c);
132 
133  // EndRun
134  void endRun(const edm::Run& run, const edm::EventSetup& c);
135  void fillHltMatrix(const edm::TriggerNames & triggerNames);
136  void setupHltMatrix(const std::string& label, std::vector<std::string> & paths);
137 
138  void setupHltLsPlots();
139  void setupHltBxPlots();
140  void countHLTPathHitsEndLumiBlock(const int & lumi);
141  void countHLTGroupHitsEndLumiBlock(const int & lumi);
142  void countHLTGroupL1HitsEndLumiBlock(const int & lumi);
143  void countHLTGroupBXHitsEndLumiBlock(const int & lumi);
144  int getTriggerTypeParsePathName(const std::string & pathname);
145  const std::string getL1ConditionModuleName(const std::string & pathname);
146  bool hasL1Passed(const std::string & pathname, const edm::TriggerNames & triggerNames);
147  bool hasHLTPassed(const std::string & pathname, const edm::TriggerNames& triggerNames);
148  int getHltThresholdFromName(const std::string & pathname);
149 
150  void selectMuons(const edm::Handle<reco::MuonCollection> & muonHandle);
151  bool isVBTFMuon(const reco::Muon& muon);
152  void selectElectrons(const edm::Event& iEvent, const edm::EventSetup& iSetup, const edm::Handle<reco::GsfElectronCollection> & eleHandle);
153  void selectPhotons(const edm::Handle<reco::PhotonCollection> & phoHandle);
154  void selectJets(const edm::Event& iEvent,const edm::Handle<reco::CaloJetCollection> & jetHandle);
155  void selectMet(const edm::Handle<reco::CaloMETCollection> & metHandle);
156  void selectTaus(const edm::Event& iEvent);
157  void beginLuminosityBlock(const edm::LuminosityBlock& lumiSeg, const edm::EventSetup& c);
158  void endLuminosityBlock(const edm::LuminosityBlock& lumiSeg, const edm::EventSetup& c);
159  std::string removeVersions(std::string histVersion);
160 
161 
162  // ----------member data ---------------------------
163  int nev_;
165  bool fLumiFlag;
166  bool fIsSetup;
167 
168  bool useUM;
169 
170  // JetID helper
172 
173  // Tau discriminators
174  std::string tauDscrmtrLabel1_;
175  std::string tauDscrmtrLabel2_;
176  std::string tauDscrmtrLabel3_;
177 
181  std::vector<MonitorElement*> v_ME_HLTAll_LS;
182  std::vector<MonitorElement*> v_ME_Total_BX;
183  std::vector<MonitorElement*> v_ME_Total_BX_Norm;
184 
185  std::string pathsSummaryFolder_;
192  std::string fCustomBXPath;
193 
194  std::vector<std::string> fGroupName;
195 
198 
201 
204 
207 
210 
211  //reco::CaloTauCollection * fSelectedTaus;
212  //edm::Handle<reco::CaloTauCollection> fSelTausHandle;
215 
216  unsigned int nLS_;
217  double LSsize_ ;
219  unsigned int referenceBX_;
220  unsigned int Nbx_;
221 
222  bool plotAll_;
225 
226  unsigned int nBins_;
227  unsigned int nBinsDR_;
228  unsigned int nBins2D_;
229  unsigned int nBinsOneOverEt_;
230  double ptMin_ ;
231  double ptMax_ ;
232  double dRMax_ ;
233 
238  double muonEtaMax_;
239  double muonEtMin_;
240  double muonDRMatch_;
242  double tauEtaMax_;
243  double tauEtMin_;
244  double tauDRMatch_;
246  double jetEtaMax_;
247  double jetEtMin_;
248  double jetDRMatch_;
250  double bjetEtaMax_;
251  double bjetEtMin_;
252  double bjetDRMatch_;
255  double photonEtMin_;
258  double trackEtaMax_;
259  double trackEtMin_;
262  double metEtaMax_;
263  double metMin_;
264  double metDRMatch_;
266  double htEtaMax_;
267  double htMin_;
268  double htDRMatch_;
269  double htL1DRMatch_;
270  double sumEtMin_;
271 
272  // Muon quality cuts
274  double dxyCut_;
281 
282  // Electron quality cuts
285  // Ecal Barrel
293  //spikes
295  // Ecal Endcap
303  //spikes
305 
306  // Jet quality cuts
309  float fHPDJet_;
310  int n90Jet_;
311 
312  std::vector<std::pair<std::string, std::string> > custompathnamepairs_;
313 
314  std::vector <std::vector <std::string> > triggerFilters_;
315  std::vector <std::vector <uint> > triggerFilterIndices_;
316  std::vector <std::pair<std::string, float> > fPathTempCountPair;
317  std::vector <std::pair<std::string, std::vector<int> > > fPathBxTempCountPair;
318  std::vector <std::pair<std::string, float> > fGroupTempCountPair;
319  std::vector <std::pair<std::string, float> > fGroupL1TempCountPair;
320  std::vector <std::pair<std::string, std::vector<std::string> > > fGroupNamePathsPair;
321 
322  std::vector<std::string> specialPaths_;
323 
324  std::string dirname_;
325  std::string processname_;
333  // data across paths
335  // helper class to store the data path
336 
337  class PathInfo {
338 
340  pathIndex_(-1), denomPathName_("unset"), pathName_("unset"), l1pathName_("unset"), filterName_("unset"), processName_("unset"), objectType_(-1) {};
341 
342  public:
343 
345  {
346  filters_ = filters;
347  }
348 
349  void setHistos(
350 
351  MonitorElement* const NOn,
352  MonitorElement* const onEtOn,
353  MonitorElement* const onOneOverEtOn,
354  MonitorElement* const onEtavsonPhiOn,
355  MonitorElement* const NOff,
356  MonitorElement* const offEtOff,
357  MonitorElement* const offEtavsoffPhiOff,
358  MonitorElement* const NL1,
359  MonitorElement* const l1EtL1,
360  MonitorElement* const l1Etavsl1PhiL1,
361  MonitorElement* const NL1On,
362  MonitorElement* const l1EtL1On,
363  MonitorElement* const l1Etavsl1PhiL1On,
364  MonitorElement* const NL1Off,
365  MonitorElement* const offEtL1Off,
366  MonitorElement* const offEtavsoffPhiL1Off,
367  MonitorElement* const NOnOff,
368  MonitorElement* const offEtOnOff,
369  MonitorElement* const offEtavsoffPhiOnOff,
370  MonitorElement* const NL1OnUM,
371  MonitorElement* const l1EtL1OnUM,
372  MonitorElement* const l1Etavsl1PhiL1OnUM,
373  MonitorElement* const NL1OffUM,
374  MonitorElement* const offEtL1OffUM,
375  MonitorElement* const offEtavsoffPhiL1OffUM,
376  MonitorElement* const NOnOffUM,
377  MonitorElement* const offEtOnOffUM,
378  MonitorElement* const offEtavsoffPhiOnOffUM,
379  MonitorElement* const offDRL1Off,
380  MonitorElement* const offDROnOff,
381  MonitorElement* const l1DRL1On)
382  {
383 
384  NOn_ = NOn;
385  onEtOn_ = onEtOn;
386  onOneOverEtOn_ = onOneOverEtOn;
387  onEtavsonPhiOn_ = onEtavsonPhiOn;
388  NOff_ = NOff;
389  offEtOff_ = offEtOff;
390  offEtavsoffPhiOff_ = offEtavsoffPhiOff;
391  NL1_ = NL1;
392  l1EtL1_ = l1EtL1;
393  l1Etavsl1PhiL1_ = l1Etavsl1PhiL1;
394  NL1On_ = NL1On;
395  l1EtL1On_ = l1EtL1On;
396  l1Etavsl1PhiL1On_ = l1Etavsl1PhiL1On;
397  NL1Off_ = NL1Off;
398  offEtL1Off_ = offEtL1Off;
399  offEtavsoffPhiL1Off_ = offEtavsoffPhiL1Off;
400  NOnOff_ = NOnOff;
401  offEtOnOff_ = offEtOnOff;
402  offEtavsoffPhiOnOff_ = offEtavsoffPhiOnOff;
403  NL1OnUM_ = NL1OnUM;
404  l1EtL1OnUM_ = l1EtL1OnUM;
405  l1Etavsl1PhiL1OnUM_ = l1Etavsl1PhiL1OnUM;
406  NL1OffUM_ = NL1OffUM;
407  offEtL1OffUM_ = offEtL1OffUM;
408  offEtavsoffPhiL1OffUM_ = offEtavsoffPhiL1OffUM;
409  NOnOffUM_ = NOnOffUM;
410  offEtOnOffUM_ = offEtOnOffUM;
411  offEtavsoffPhiOnOffUM_ = offEtavsoffPhiOnOffUM;
412  offDRL1Off_ = offDRL1Off;
413  offDROnOff_ = offDROnOff;
414  l1DRL1On_ = l1DRL1On;
415 
416  }
417 
419  return NOn_;
420  }
422  return onEtOn_;
423  }
425  return onOneOverEtOn_;
426  }
428  return onEtavsonPhiOn_;
429  }
431  return NOff_;
432  }
434  return offEtOff_;
435  }
437  return offEtavsoffPhiOff_;
438  }
440  return NL1_;
441  }
443  return l1EtL1_;
444  }
446  return l1Etavsl1PhiL1_;
447  }
449  return NL1On_;
450  }
452  return l1EtL1On_;
453  }
455  return l1Etavsl1PhiL1On_;
456  }
458  return NL1Off_;
459  }
461  return offEtL1Off_;
462  }
464  return offEtavsoffPhiL1Off_;
465  }
467  return NOnOff_;
468  }
470  return offEtOnOff_;
471  }
473  return offEtavsoffPhiOnOff_;
474  }
476  return NL1OnUM_;
477  }
479  return l1EtL1OnUM_;
480  }
482  return l1Etavsl1PhiL1OnUM_;
483  }
485  return NL1OffUM_;
486  }
488  return offEtL1OffUM_;
489  }
491  return offEtavsoffPhiL1OffUM_;
492  }
494  return NOnOffUM_;
495  }
497  return offEtOnOffUM_;
498  }
500  return offEtavsoffPhiOnOffUM_;
501  }
503  return offDRL1Off_;
504  }
506  return offDROnOff_;
507  }
509  return l1DRL1On_;
510  }
512  return filters_;
513  }
514  const std::string getLabel(void ) const {
515  return filterName_;
516  }
517  void setLabel(std::string labelName){
518  filterName_ = labelName;
519  return;
520  }
521  const std::string & getPath(void ) const {
522  return pathName_;
523  }
524  const std::string & getl1Path(void ) const {
525  return l1pathName_;
526  }
527  const int getL1ModuleIndex(void ) const {
528  return l1ModuleIndex_;
529  }
530  const std::string & getDenomPath(void ) const {
531  return denomPathName_;
532  }
533  const std::string & getProcess(void ) const {
534  return processName_;
535  }
536  const int getObjectType(void ) const {
537  return objectType_;
538  }
539 
540  const edm::InputTag getTag(void) const{
542  return tagName;
543  }
544 
545  ~PathInfo() {};
546 
547  PathInfo(std::string denomPathName, std::string pathName, std::string l1pathName, int l1ModuleIndex, std::string filterName, std::string processName, size_t type, float ptmin, float ptmax, float hltThreshold, float l1Threshold):
548 
549  denomPathName_(denomPathName),
550  pathName_(pathName),
551  l1pathName_(l1pathName),
552  l1ModuleIndex_(l1ModuleIndex),
553  filterName_(filterName),
554  processName_(processName),
555  objectType_(type),
556  NOn_(0), onEtOn_(0), onOneOverEtOn_(0), onEtavsonPhiOn_(0),
558  NL1_(0), l1EtL1_(0), l1Etavsl1PhiL1_(0),
565  offDRL1Off_(0), offDROnOff_(0), l1DRL1On_(0), filters_(0),
566  ptmin_(ptmin), ptmax_(ptmax),
567  hltThreshold_(hltThreshold), l1Threshold_(l1Threshold)
568 
569  {
570  };
571 
572  PathInfo(std::string denomPathName, std::string pathName, std::string l1pathName, std::string filterName, std::string processName, size_t type,
573  MonitorElement *NOn,
574  MonitorElement *onEtOn,
575  MonitorElement *onOneOverEtOn,
576  MonitorElement *onEtavsonPhiOn,
577  MonitorElement *NOff,
578  MonitorElement *offEtOff,
579  MonitorElement *offEtavsoffPhiOff,
580  MonitorElement *NL1,
581  MonitorElement *l1EtL1,
582  MonitorElement *l1Etavsl1PhiL1,
583  MonitorElement *NL1On,
584  MonitorElement *l1EtL1On,
585  MonitorElement *l1Etavsl1PhiL1On,
586  MonitorElement *NL1Off,
587  MonitorElement *offEtL1Off,
588  MonitorElement *offEtavsoffPhiL1Off,
589  MonitorElement *NOnOff,
590  MonitorElement *offEtOnOff,
591  MonitorElement *offEtavsoffPhiOnOff,
592  MonitorElement *NL1OnUM,
593  MonitorElement *l1EtL1OnUM,
594  MonitorElement *l1Etavsl1PhiL1OnUM,
595  MonitorElement *NL1OffUM,
596  MonitorElement *offEtL1OffUM,
597  MonitorElement *offEtavsoffPhiL1OffUM,
598  MonitorElement *NOnOffUM,
599  MonitorElement *offEtOnOffUM,
600  MonitorElement *offEtavsoffPhiOnOffUM,
601  MonitorElement *offDRL1Off,
602  MonitorElement *offDROnOff,
603  MonitorElement *l1DRL1On,
605  float ptmin, float ptmax
606  ):
607 
608  denomPathName_(denomPathName),
609  pathName_(pathName), l1pathName_(l1pathName),
610  filterName_(filterName), processName_(processName), objectType_(type),
611  NOn_(NOn), onEtOn_(onEtOn), onOneOverEtOn_(onOneOverEtOn), onEtavsonPhiOn_(onEtavsonPhiOn),
612  NOff_(NOff), offEtOff_(offEtOff), offEtavsoffPhiOff_(offEtavsoffPhiOff),
613  NL1_(NL1), l1EtL1_(l1EtL1), l1Etavsl1PhiL1_(l1Etavsl1PhiL1),
614  NL1On_(NL1On), l1EtL1On_(l1EtL1On), l1Etavsl1PhiL1On_(l1Etavsl1PhiL1On),
615  NL1Off_(NL1Off), offEtL1Off_(offEtL1Off), offEtavsoffPhiL1Off_(offEtavsoffPhiL1Off),
616  NOnOff_(NOnOff), offEtOnOff_(offEtOnOff), offEtavsoffPhiOnOff_(offEtavsoffPhiOnOff),
617  NL1OnUM_(NL1OnUM), l1EtL1OnUM_(l1EtL1OnUM), l1Etavsl1PhiL1OnUM_(l1Etavsl1PhiL1OnUM),
618  NL1OffUM_(NL1OffUM), offEtL1OffUM_(offEtL1OffUM), offEtavsoffPhiL1OffUM_(offEtavsoffPhiL1OffUM),
619  NOnOffUM_(NOnOffUM), offEtOnOffUM_(offEtOnOffUM), offEtavsoffPhiOnOffUM_(offEtavsoffPhiOnOffUM),
620  offDRL1Off_(offDRL1Off),
621  offDROnOff_(offDROnOff),
622  l1DRL1On_(l1DRL1On),
623  filters_(filters),
624  ptmin_(ptmin), ptmax_(ptmax)
625  {
626  };
627 
628  bool operator==(const std::string& v)
629  {
630  return v==filterName_;
631  }
632 
633  bool operator!=(const std::string& v)
634  {
635  return v!=filterName_;
636  }
637 
638  float getPtMin() const { return ptmin_; }
639  float getPtMax() const { return ptmax_; }
640  float getHltThreshold() const { return hltThreshold_; }
641  float getL1Threshold() const { return l1Threshold_; }
642 
643  std::vector< std::pair<std::string,unsigned int> > filtersAndIndices;
644 
645 
646  private:
647 
649  std::string denomPathName_;
650  std::string pathName_;
651  std::string l1pathName_;
653  std::string filterName_;
654  std::string processName_;
656 
657  // we don't own this data
669 
670  float ptmin_, ptmax_;
672 
673  const int index() {
674  return pathIndex_;
675  }
676  const int type() {
677  return objectType_;
678  }
679 
680 
681  };
682 
683 
684  public:
685 
686  // simple collection - just
687  class PathInfoCollection: public std::vector<PathInfo> {
688  public:
689 
690  PathInfoCollection(): std::vector<PathInfo>()
691  {};
692  std::vector<PathInfo>::iterator find(std::string pathName) {
693  return std::find(begin(), end(), pathName);
694  }
695  };
696 
698 
700 
701 };
702 
703 
704 class BaseMonitor
705 {
706  public:
707  virtual void clearSets( void ) = 0;
708  virtual void setPath(FourVectorHLTOffline::PathInfoCollection::iterator v) = 0;
709  virtual void monitorOffline( void ) = 0;
710  virtual void monitorL1( const int l1Index, FourVectorHLTOffline* fv) = 0;
711  virtual void monitorOnline(const int hltIndex, const int l1Index, FourVectorHLTOffline* fv) = 0;
712 
713  virtual void matchL1Offline(const trigger::TriggerObject& l1FV, FourVectorHLTOffline* fv, const int& NL1, unsigned int& NL1OffUM) = 0;
714  virtual void matchOnlineL1(const trigger::TriggerObject& onlineFV, const int& l1Index, FourVectorHLTOffline* fv, const int& NOn) = 0;
715  virtual void matchOnlineOffline(const trigger::TriggerObject& onlineFV, FourVectorHLTOffline* fv, const int& NOn) = 0;
716 
717  virtual void fillL1Match(FourVectorHLTOffline* fv) = 0;
718  virtual void fillOnlineMatch(const int l1Index, FourVectorHLTOffline* fv) = 0;
719 
720  virtual bool isTriggerType(int t) = 0;
721  virtual ~BaseMonitor(){}
722 
723 };
724 
725 template <class T>
726 class objMonData:public BaseMonitor {
727 public:
728  objMonData() { EtaMax_= 2.5; EtMin_=3.0; GenJetsFlag_ = false; BJetsFlag_ = false; fL2MuFlag = false; }
729  void setLimits(float etaMax, float etMin, float drMatch, float l1drMatch, float dRRange, float thresholdFactor)
730  {
731  EtaMax_= etaMax;
732  EtMin_= etMin;
733  DRMatch_= drMatch;
734  L1DRMatch_= l1drMatch;
735  DRRange_ = dRRange;
736  thresholdFactor_ = thresholdFactor;
737  }
738  void setTriggerType(std::vector<int> trigType) { triggerType_ = trigType; }
739  void pushTriggerType(int trigType) { triggerType_.push_back(trigType); }
740  void setL1TriggerType(std::vector<int> trigType) { l1triggerType_ = trigType; }
741  void pushL1TriggerType(int trigType) { l1triggerType_.push_back(trigType); }
742  void setPath(FourVectorHLTOffline::PathInfoCollection::iterator v) { v_ = v; }
743  void setReco(edm::Handle<T> offColl) { offColl_ = offColl; }
745  void setRecoMu(edm::Handle<reco::MuonCollection> offCollMu) { offCollMu_ = offCollMu; }
747 
748 
749 
750  // Monitor methods
751 
752  void monitorOffline();
753  void monitorL1(const int l1Index, FourVectorHLTOffline* fv);
754  void monitorOnline(const int hltIndex, const int l1Index, FourVectorHLTOffline* fv);
755  void matchL1Offline(const trigger::TriggerObject& l1FV, FourVectorHLTOffline* fv, const int& NL1, unsigned int& NL1OffUM);
756  void matchOnlineL1(const trigger::TriggerObject& onlineFV, const int& l1Index, FourVectorHLTOffline* fv, const int& NOn);
757  void matchOnlineOffline(const trigger::TriggerObject& onlineFV, FourVectorHLTOffline* fv, const int& NOn);
758  void fillOnlineMatch(const int l1Index, FourVectorHLTOffline* fv);
760  void fillOnL1Match(const int l1Index, FourVectorHLTOffline* fv);
763 
764  void clearSets();
765 
766  bool isTriggerType(int t);
767  bool isL1TriggerType(int t);
768 
775 
776 
777  void setBJetsFlag(bool flag)
778  {
779  BJetsFlag_ = flag;
780  }
781  void setL2MuFlag(bool flag)
782  {
783  fL2MuFlag = flag;
784  }
785 
786 
787 private:
788 
789  int pdgId_;
790  int pdgStatus_;
791 
792  float EtaMax_;
793  float EtMin_;
794 
795  float DRMatch_;
796  float L1DRMatch_;
797  float DRRange_;
799 
800  bool GenJetsFlag_;
801  bool BJetsFlag_;
802  bool fL2MuFlag;
803 
804  std::vector<int> triggerType_;
805  std::vector<int> l1triggerType_;
806 
811 
812  FourVectorHLTOffline::PathInfoCollection::iterator v_;
813 
814 };
815 
816 
817 template <class T>
819 {
820  bool rc = false;
821 
822  for(std::vector<int>::const_iterator it = triggerType_.begin(); it != triggerType_.end(); ++it)
823  {
824 
825  if(t == *it) { rc = true; break; }
826 
827  } // end for
828 
829  if (t==0) rc = true;
830 
831  return rc;
832 
833 }
834 
835 
836 template <class T>
838 {
839  bool rc = false;
840 
841  for(std::vector<int>::const_iterator it = l1triggerType_.begin(); it != l1triggerType_.end(); ++it)
842  {
843 
844  if(fabs(t) == fabs(*it)) { rc = true; break; }
845 
846  } // end for
847 
848  return rc;
849 
850 }
851 
852 
853 
854 
855 template <class T>
857 {
858 
859  if(! isTriggerType(v_->getObjectType()) ) return;
860 
861  unsigned int NOff = 0;
862 
863  if( offCollB_.isValid()) {
864  typedef typename reco::JetTagCollection::const_iterator const_iterator;
865  for( const_iterator iter = offCollB_->begin(), iend = offCollB_->end(); iter != iend; ++iter )
866  {
867 
868  float recoEta = (*iter).first->eta();
869  float recoPhi = (*iter).first->phi();
870  float recoPt = (*iter).first->pt();
871 
872 
873  if (fabs(recoEta) <= EtaMax_ && recoPt >= EtMin_ )
874  {
875 
876  NOff++;
877  v_->getOffEtOffHisto()->Fill(recoPt);
878  if(recoPt >= thresholdFactor_*v_->getHltThreshold())
879  v_->getOffEtaVsOffPhiOffHisto()->Fill(recoEta, recoPhi);
880 
881  }
882  /*
883  else {
884 
885  continue;
886 
887  }
888  */
889 
890  }
891 
892  }
893  else if(offCollEle_.isValid()) {
894 
895  typedef typename reco::GsfElectronCollection::const_iterator const_iterator;
896  for( const_iterator iter = offCollEle_->begin(), iend = offCollEle_->end(); iter != iend; ++iter )
897  {
898 
899  if (fabs(iter->eta()) <= EtaMax_ && iter->superCluster()->energy()*sin(iter->superCluster()->position().Theta()) >= EtMin_ )
900  {
901 
902  NOff++;
903  v_->getOffEtOffHisto()->Fill(iter->superCluster()->energy()*sin(iter->superCluster()->position().Theta()));
904 
905  if(iter->pt() >= thresholdFactor_*v_->getHltThreshold())
906  v_->getOffEtaVsOffPhiOffHisto()->Fill(iter->eta(), iter->phi());
907 
908  }
909  /*
910  else {
911 
912  continue;
913 
914  }
915  */
916 
917  }
918 
919  } // end else if
920  else if(offColl_.isValid()) {
921 
922  typedef typename T::const_iterator const_iterator;
923  for( const_iterator iter = offColl_->begin(), iend = offColl_->end(); iter != iend; ++iter )
924  {
925 
926  if (fabs(iter->eta()) <= EtaMax_ && iter->pt() >= EtMin_ )
927  {
928 
929  NOff++;
930  v_->getOffEtOffHisto()->Fill(iter->pt());
931 
932  if(iter->pt() >= thresholdFactor_*v_->getHltThreshold())
933  v_->getOffEtaVsOffPhiOffHisto()->Fill(iter->eta(), iter->phi());
934 
935  }
936  /*
937  else {
938 
939  continue;
940 
941  }
942  */
943 
944  }
945 
946  } // end else if
947 
948  if(NOff>0)v_->getNOffHisto()->Fill(NOff);
949 
950 }
951 
952 
953 template <class T>
954 void objMonData<T>::monitorL1(const int l1Index, FourVectorHLTOffline* fv)
955 {
956 
957  if ( l1Index >= fv->fTriggerObj->sizeFilters() ) return;
958 
959  unsigned int NL1=0;
960  unsigned int NL1OffUM=0;
961 
962  const trigger::TriggerObjectCollection & toc(fv->fTriggerObj->getObjects());
963  const trigger::Vids & idtype = fv->fTriggerObj->filterIds(l1Index);
964  const trigger::Keys & l1k = fv->fTriggerObj->filterKeys(l1Index);
965  bool l1accept = l1k.size() > 0;
966 
967  if(!l1accept) return;
968 
969  trigger::Vids::const_iterator idtypeiter = idtype.begin();
970 
971  for (trigger::Keys::const_iterator l1ki = l1k.begin(); l1ki !=l1k.end(); ++l1ki ) {
972 
973  trigger::TriggerObject l1FV = toc[*l1ki];
974 
975  if(isL1TriggerType(*idtypeiter))
976  {
977 
978  NL1++;
979 
980  v_->getL1EtL1Histo()->Fill(l1FV.pt());
981  v_->getL1EtaVsL1PhiL1Histo()->Fill(l1FV.eta(), l1FV.phi());
982 
983  matchL1Offline(l1FV, fv, NL1, NL1OffUM);
984 
985  } // end if isL1TriggerType
986 
987  ++idtypeiter;
988 
989  } // end for l1ki
990 
991  if(NL1 > 0) v_->getNL1Histo()->Fill(NL1);
992  if(NL1OffUM > 0) v_->getNL1OffUMHisto()->Fill(NL1OffUM);
993 
994 }
995 
996 
997 template <class T>
998 void objMonData<T>::matchL1Offline(const trigger::TriggerObject& l1FV, FourVectorHLTOffline* fv, const int& NL1, unsigned int& NL1OffUM)
999 {
1000 
1001  fimmap L1OffDRMatchMap;
1002 
1003  if (offCollB_.isValid()) {
1004 
1005  int j=0;
1006  typedef typename reco::JetTagCollection::const_iterator const_iterator;
1007  for( const_iterator iter = offCollB_->begin(), iend = offCollB_->end(); iter != iend; ++iter )
1008  {
1009 
1010  float recoEta = (*iter).first->eta();
1011  float recoPhi = (*iter).first->phi();
1012  float recoPt = (*iter).first->pt();
1013 
1014  if (fabs(recoEta) <= EtaMax_ && recoPt >= EtMin_ )
1015  {
1016 
1017  // fill UM histos (no matching required)
1018  if (v_->getOffEtL1OffUMHisto() != 0) {
1019  if(NL1 == 1) {
1020 
1021  NL1OffUM++;
1022  v_->getOffEtL1OffUMHisto()->Fill(recoPt);
1023 
1024  if(recoPt >= thresholdFactor_*v_->getHltThreshold())
1025  v_->getOffEtaVsOffPhiL1OffUMHisto()->Fill(recoEta,recoPhi);
1026 
1027  }
1028  }
1029 
1030  // make maps of matched objects
1031  float dR = reco::deltaR(recoEta,recoPhi,l1FV.eta(),l1FV.phi());
1032  if ( dR < DRRange_)
1033  {
1034 
1035  L1OffDRMatchMap.insert(std::pair<float,int>(dR,j));
1036 
1037  }
1038 
1039  }
1040 
1041  j++;
1042 
1043  }
1044 
1045  }
1046  else if (offCollMu_.isValid()) {
1047 
1048  int j=0;
1049  typedef typename reco::MuonCollection::const_iterator const_iterator;
1050  for( const_iterator iter = offCollMu_->begin(), iend = offCollMu_->end(); iter != iend; ++iter )
1051  {
1052 
1053  // get Eta, Phi of the MuonDetectorTrack,
1054  // looking at the detector most inner Position
1055  // This should be close to what L1 sees
1056  float recoEta = iter->outerTrack()->innerPosition().eta();
1057  float recoPhi = iter->outerTrack()->innerPosition().phi();
1058  float recoPt = iter->pt();
1059 
1060  if (fabs(recoEta) <= EtaMax_ && recoPt >= EtMin_ )
1061  {
1062 
1063  // fill UM histos (no matching required)
1064  if (v_->getOffEtL1OffUMHisto() != 0) {
1065  if(NL1 == 1) {
1066 
1067  NL1OffUM++;
1068  v_->getOffEtL1OffUMHisto()->Fill(recoPt);
1069 
1070  if(recoPt >= thresholdFactor_*v_->getHltThreshold())
1071  v_->getOffEtaVsOffPhiL1OffUMHisto()->Fill(recoEta,recoPhi);
1072 
1073  }
1074  }
1075 
1076  // make maps of matched objects
1077  float dR = reco::deltaR(recoEta,recoPhi,l1FV.eta(),l1FV.phi());
1078  if ( dR < DRRange_)
1079  {
1080 
1081  L1OffDRMatchMap.insert(std::pair<float,int>(dR,j));
1082 
1083  }
1084 
1085  }
1086 
1087  j++;
1088 
1089  }
1090 
1091  }
1092  else if (offCollEle_.isValid()) {
1093 
1094  int j=0;
1095  typedef typename reco::GsfElectronCollection::const_iterator const_iterator;
1096  for( const_iterator iter = offCollEle_->begin(), iend = offCollEle_->end(); iter != iend; ++iter )
1097  {
1098 
1099  if (fabs(iter->eta()) <= EtaMax_ && iter->superCluster()->energy()*sin(iter->superCluster()->position().Theta()) >= EtMin_ )
1100  {
1101 
1102  if ( v_->getOffEtL1OffUMHisto() != 0) {
1103  // fill UM histos (no matching required)
1104  if(NL1 == 1) {
1105 
1106  NL1OffUM++;
1107  v_->getOffEtL1OffUMHisto()->Fill(iter->superCluster()->energy()*sin(iter->superCluster()->position().Theta()));
1108 
1109  if(iter->superCluster()->energy()*sin(iter->superCluster()->position().Theta()) >= thresholdFactor_*v_->getHltThreshold())
1110  v_->getOffEtaVsOffPhiL1OffUMHisto()->Fill(iter->eta(),iter->phi());
1111 
1112  }
1113  }
1114 
1115  // make maps of matched objects
1116  float dR = reco::deltaR(iter->eta(),iter->phi(),l1FV.eta(),l1FV.phi());
1117  if ( dR < DRRange_)
1118  {
1119 
1120  L1OffDRMatchMap.insert(std::pair<float,int>(dR,j));
1121 
1122  }
1123 
1124  }
1125 
1126  j++;
1127 
1128  }
1129 
1130  }
1131  else if (offColl_.isValid()) {
1132 
1133  int j=0;
1134  typedef typename T::const_iterator const_iterator;
1135  for( const_iterator iter = offColl_->begin(), iend = offColl_->end(); iter != iend; ++iter )
1136  {
1137 
1138  if (fabs(iter->eta()) <= EtaMax_ && iter->pt() >= EtMin_ )
1139  {
1140 
1141  // fill UM histos (no matching required)
1142  if (v_->getOffEtL1OffUMHisto()!= 0 ) {
1143  if(NL1 == 1) {
1144 
1145  NL1OffUM++;
1146  v_->getOffEtL1OffUMHisto()->Fill(iter->pt());
1147 
1148  if(iter->pt() >= thresholdFactor_*v_->getHltThreshold())
1149  v_->getOffEtaVsOffPhiL1OffUMHisto()->Fill(iter->eta(),iter->phi());
1150 
1151  }
1152  }
1153 
1154  // make maps of matched objects
1155  float dR = reco::deltaR(iter->eta(),iter->phi(),l1FV.eta(),l1FV.phi());
1156  if ( dR < DRRange_)
1157  {
1158 
1159  L1OffDRMatchMap.insert(std::pair<float,int>(dR,j));
1160 
1161  }
1162 
1163  }
1164 
1165  j++;
1166 
1167  }
1168 
1169  }
1170  if(! L1OffDRMatchMap.empty()) L1OffDRMatchSet.insert(L1OffDRMatchMap);
1171 
1172 }
1173 
1174 
1175 template <class T>
1176 void objMonData<T>::monitorOnline(const int hltIndex, const int l1Index, FourVectorHLTOffline* fv)
1177 {
1178 
1179  if(! isTriggerType(v_->getObjectType()) ) return;
1180 
1181  // Get keys of objects passed by the last filter
1182  const trigger::Keys & k = fv->fTriggerObj->filterKeys(hltIndex);
1183 
1184  const trigger::TriggerObjectCollection & toc(fv->fTriggerObj->getObjects());
1185 
1186  unsigned int NOn=0;
1187 
1188  // Loop over HLT objects
1189  for (trigger::Keys::const_iterator ki = k.begin(); ki !=k.end(); ++ki ) {
1190 
1191  trigger::TriggerObject onlineFV = toc[*ki];
1192 
1193  NOn++;
1194 
1195  v_->getOnEtOnHisto()->Fill(onlineFV.pt());
1196  v_->getOnOneOverEtOnHisto()->Fill(1./onlineFV.pt());
1197  v_->getOnEtaVsOnPhiOnHisto()->Fill(onlineFV.eta(), onlineFV.phi());
1198 
1199  matchOnlineL1(onlineFV,l1Index, fv, NOn);
1200  matchOnlineOffline(onlineFV,fv, NOn);
1201 
1202  } // end loop over HLT objects
1203 
1204  if(NOn>0) v_->getNOnHisto()->Fill(NOn);
1205 
1206 }
1207 
1208 template <class T>
1209 void objMonData<T>::matchOnlineL1(const trigger::TriggerObject& onlineFV, const int& l1Index, FourVectorHLTOffline* fv, const int& NOn)
1210 {
1211 
1212  if ( l1Index >= fv->fTriggerObj->sizeFilters() ) return;
1213 
1214  unsigned int NOnL1UM=0;
1215 
1216  const trigger::TriggerObjectCollection & toc(fv->fTriggerObj->getObjects());
1217  const trigger::Vids & idtype = fv->fTriggerObj->filterIds(l1Index);
1218  const trigger::Keys & l1k = fv->fTriggerObj->filterKeys(l1Index);
1219 
1220  fimmap OnL1DRMatchMap;
1221  int j=0;
1222  trigger::Vids::const_iterator idtypeiter = idtype.begin();
1223  for (trigger::Keys::const_iterator l1ki = l1k.begin(); l1ki !=l1k.end(); ++l1ki )
1224  {
1225 
1226  if(isL1TriggerType(*idtypeiter))
1227  {
1228 
1229  trigger::TriggerObject l1FV = toc[*l1ki];
1230 
1231  // fill UM histos (no matching required)
1232  if (v_->getL1EtL1OnUMHisto() != 0) {
1233  if(NOn == 1) {
1234 
1235  NOnL1UM++;
1236  v_->getL1EtL1OnUMHisto()->Fill(l1FV.pt());
1237  v_->getL1EtaVsL1PhiL1OnUMHisto()->Fill(l1FV.eta(),l1FV.phi());
1238 
1239  }
1240  }
1241 
1242  float dR = reco::deltaR(l1FV.eta(),l1FV.phi(),onlineFV.eta(),onlineFV.phi());
1243 
1244  if ( dR < DRRange_)
1245  {
1246 
1247  OnL1DRMatchMap.insert(std::pair<float,int>(dR,j));
1248 
1249  }
1250 
1251  } // end if isL1TriggerType
1252 
1253  ++idtypeiter;
1254  j++;
1255 
1256  } // end for
1257 
1258  if(! OnL1DRMatchMap.empty()) OnL1DRMatchSet.insert(OnL1DRMatchMap);
1259 
1260 }
1261 
1262 
1263 template <class T>
1265 {
1266 
1267  unsigned int NOnOffUM=0;
1268 
1269  fimmap OnOffDRMatchMap;
1270 
1271  if (offCollB_.isValid()) {
1272 
1273  int j=0;
1274  typedef typename reco::JetTagCollection::const_iterator const_iterator;
1275  for( const_iterator iter = offCollB_->begin(), iend = offCollB_->end(); iter != iend; ++iter )
1276  {
1277 
1278  float recoEta = (*iter).first->eta();
1279  float recoPhi = (*iter).first->phi();
1280  float recoPt = (*iter).first->pt();
1281 
1282  if (fabs(recoEta) <= EtaMax_ && recoPt >= EtMin_ )
1283  {
1284 
1285 
1286  // fill UM histos (no matching required)
1287  if (v_->getOffEtOnOffUMHisto() != 0) {
1288  if(NOn == 1) {
1289 
1290  NOnOffUM++;
1291  v_->getOffEtOnOffUMHisto()->Fill(recoPt);
1292 
1293  if(recoPt >= thresholdFactor_*v_->getHltThreshold())
1294  v_->getOffEtaVsOffPhiOnOffUMHisto()->Fill(recoEta,recoPhi);
1295 
1296  }
1297  }
1298 
1299  // make maps of matched objects
1300  float dR = reco::deltaR(recoEta,recoPhi,onlineFV.eta(),onlineFV.phi());
1301  if ( dR < DRRange_)
1302  {
1303 
1304  OnOffDRMatchMap.insert(std::pair<float,int>(dR,j));
1305 
1306  }
1307 
1308  }
1309 
1310  j++;
1311 
1312  }
1313 
1314  }
1315  else if (offCollMu_.isValid() && fL2MuFlag) {
1316 
1317  int j=0;
1318  typedef typename reco::MuonCollection::const_iterator const_iterator;
1319  for( const_iterator iter = offCollMu_->begin(), iend = offCollMu_->end(); iter != iend; ++iter )
1320  {
1321 
1322  // get Eta, Phi of the MuonDetectorTrack,
1323  // looking at the detector most inner Position
1324  // This should be close to what L1 sees
1325  float recoEta = iter->outerTrack()->innerPosition().eta();
1326  float recoPhi = iter->outerTrack()->innerPosition().phi();
1327  float recoPt = iter->pt();
1328 
1329  if (fabs(recoEta) <= EtaMax_ && recoPt >= EtMin_ )
1330  {
1331  // fill UM histos (no matching required)
1332  if (v_->getOffEtOnOffUMHisto() != 0) {
1333  if(NOn == 1) {
1334 
1335  NOnOffUM++;
1336  v_->getOffEtOnOffUMHisto()->Fill(iter->pt());
1337 
1338  if(recoPt >= thresholdFactor_*v_->getHltThreshold())
1339  v_->getOffEtaVsOffPhiOnOffUMHisto()->Fill(iter->eta(),iter->phi());
1340 
1341  }
1342  }
1343 
1344  // make maps of matched objects
1345  float dR = reco::deltaR(recoEta,recoPhi,onlineFV.eta(),onlineFV.phi());
1346  if ( dR < DRRange_)
1347  {
1348 
1349  OnOffDRMatchMap.insert(std::pair<float,int>(dR,j));
1350 
1351  }
1352 
1353  }
1354 
1355  j++;
1356 
1357 
1358  }
1359 
1360  }
1361  else if (offCollEle_.isValid()) {
1362 
1363  int j=0;
1364 
1365  typedef typename reco::GsfElectronCollection::const_iterator const_iterator;
1366  for( const_iterator iter = offCollEle_->begin(), iend = offCollEle_->end(); iter != iend; ++iter )
1367  {
1368 
1369  if (fabs(iter->eta()) <= EtaMax_ && iter->superCluster()->energy()*sin(iter->superCluster()->position().Theta()) >= EtMin_ )
1370  {
1371 
1372  // fill UM histos (no matching required)
1373  if (v_->getOffEtOnOffUMHisto() != 0) {
1374  if(NOn == 1) {
1375 
1376  NOnOffUM++;
1377  v_->getOffEtOnOffUMHisto()->Fill(iter->superCluster()->energy()*sin(iter->superCluster()->position().Theta()));
1378 
1379  if(iter->superCluster()->energy()*sin(iter->superCluster()->position().Theta()) >= thresholdFactor_*v_->getHltThreshold())
1380  v_->getOffEtaVsOffPhiOnOffUMHisto()->Fill(iter->eta(),iter->phi());
1381 
1382  }
1383  }
1384 
1385  // make maps of matched objects
1386  float dR = reco::deltaR(iter->eta(),iter->phi(),onlineFV.eta(),onlineFV.phi());
1387  if ( dR < DRRange_)
1388  {
1389 
1390  OnOffDRMatchMap.insert(std::pair<float,int>(dR,j));
1391 
1392  }
1393 
1394  }
1395 
1396  j++;
1397 
1398 
1399  }
1400 
1401  }
1402  else if (offColl_.isValid()) {
1403 
1404  int j=0;
1405 
1406  typedef typename T::const_iterator const_iterator;
1407  for( const_iterator iter = offColl_->begin(), iend = offColl_->end(); iter != iend; ++iter )
1408  {
1409 
1410  if (fabs(iter->eta()) <= EtaMax_ && iter->pt() >= EtMin_ )
1411  {
1412 
1413  // fill UM histos (no matching required)
1414  if (v_->getOffEtOnOffUMHisto() != 0) {
1415  if(NOn == 1) {
1416 
1417  NOnOffUM++;
1418  v_->getOffEtOnOffUMHisto()->Fill(iter->pt());
1419 
1420  if(iter->pt() >= thresholdFactor_*v_->getHltThreshold())
1421  v_->getOffEtaVsOffPhiOnOffUMHisto()->Fill(iter->eta(),iter->phi());
1422 
1423  }
1424  }
1425 
1426  // make maps of matched objects
1427  float dR = reco::deltaR(iter->eta(),iter->phi(),onlineFV.eta(),onlineFV.phi());
1428  if ( dR < DRRange_)
1429  {
1430 
1431  OnOffDRMatchMap.insert(std::pair<float,int>(dR,j));
1432 
1433  }
1434 
1435  }
1436 
1437  j++;
1438 
1439 
1440  }
1441 
1442  }
1443 
1444  if(! OnOffDRMatchMap.empty()) OnOffDRMatchSet.insert(OnOffDRMatchMap);
1445 
1446 }
1447 
1448 template <class T>
1450 {
1451 
1452  float NL1Off=0;
1453 
1454  if(L1OffDRMatchSet.size() > 1) {
1455 
1456  LogDebug("FourVectorHLTOffline") << " Cleaning L1Off mmset" << std::endl;
1457  fv->cleanDRMatchSet(L1OffDRMatchSet);
1458 
1459  }
1460  // clean the set L1-Off
1461  // now fill histos
1462  for ( mmset::iterator setIter = L1OffDRMatchSet.begin( ); setIter != L1OffDRMatchSet.end( ); setIter++ )
1463  {
1464 
1465  fimmap tempMap = *setIter;
1466 
1467  fimmap::iterator it = tempMap.begin();
1468  int i = (*it).second ;
1469  float dR = (*it).first;
1470  v_->getOffDRL1OffHisto()->Fill(dR);
1471 
1472  if (dR > L1DRMatch_) continue;
1473  if( offCollB_.isValid()) {
1474 
1475  typedef typename reco::JetTagCollection::const_iterator const_iterator;
1476  const_iterator iter = offCollB_->begin();
1477  for (int count = 0; count < i; count++) iter++;
1478 
1479 
1480  NL1Off++;
1481  v_->getOffEtL1OffHisto()->Fill((*iter).first->pt());
1482  if((*iter).first->pt() >= thresholdFactor_*v_->getHltThreshold())
1483  v_->getOffEtaVsOffPhiL1OffHisto()->Fill((*iter).first->eta(),(*iter).first->phi());
1484 
1485 
1486  }
1487  else if( offCollMu_.isValid()) {
1488 
1489  typedef typename reco::MuonCollection::const_iterator const_iterator;
1490  const_iterator iter = offCollMu_->begin();
1491  for (int count = 0; count < i; count++) iter++;
1492 
1493 
1494  NL1Off++;
1495  v_->getOffEtL1OffHisto()->Fill(iter->pt());
1496  if(iter->pt() >= thresholdFactor_*v_->getHltThreshold())
1497  v_->getOffEtaVsOffPhiL1OffHisto()->Fill(iter->outerTrack()->innerPosition().eta(),iter->outerTrack()->innerPosition().phi());
1498 
1499  }
1500  else if( offCollEle_.isValid()) {
1501 
1502  typedef typename reco::GsfElectronCollection::const_iterator const_iterator;
1503  const_iterator iter = offCollEle_->begin();
1504  for (int count = 0; count < i; count++) iter++;
1505 
1506 
1507  NL1Off++;
1508  v_->getOffEtL1OffHisto()->Fill(iter->superCluster()->energy()*sin(iter->superCluster()->position().Theta()));
1509  if(iter->pt() >= thresholdFactor_*v_->getHltThreshold())
1510  v_->getOffEtaVsOffPhiL1OffHisto()->Fill(iter->eta(),iter->phi());
1511 
1512  }
1513  else if( offColl_.isValid()) {
1514 
1515  typedef typename T::const_iterator const_iterator;
1516  const_iterator iter = offColl_->begin();
1517  for (int count = 0; count < i; count++) iter++;
1518 
1519 
1520  NL1Off++;
1521  v_->getOffEtL1OffHisto()->Fill(iter->pt());
1522  if(iter->pt() >= thresholdFactor_*v_->getHltThreshold())
1523  v_->getOffEtaVsOffPhiL1OffHisto()->Fill(iter->eta(),iter->phi());
1524 
1525  }
1526 
1527  }
1528 
1529  if(NL1Off > 0) v_->getNL1OffHisto()->Fill(NL1Off);
1530 
1531 }
1532 
1533 
1534 template <class T>
1536 {
1537 
1538  unsigned int NOnOff=0;
1539 
1540  // clean the set L1-Off
1541  if(OnOffDRMatchSet.size() > 1){
1542 
1543  LogDebug("FourVectorHLTOffline") << " Cleaning OnOff mmset" << std::endl;
1544  fv->cleanDRMatchSet(OnOffDRMatchSet);
1545 
1546  }
1547  // now fill histos
1548  for ( mmset::iterator setIter = OnOffDRMatchSet.begin( ); setIter != OnOffDRMatchSet.end( ); setIter++ )
1549  {
1550 
1551 
1552  fimmap tempMap = *setIter;
1553 
1554  fimmap::iterator it = tempMap.begin();
1555  int i = (*it).second ;
1556  float dR = (*it).first;
1557  v_->getOffDROnOffHisto()->Fill(dR);
1558 
1559 
1560  if (dR > DRMatch_) continue;
1561 
1562  if( offCollB_.isValid()) {
1563 
1564 
1565  typedef typename reco::JetTagCollection::const_iterator const_iterator;
1566  const_iterator iter = offCollB_->begin();
1567  for (int count = 0; count < i; count++) iter++;
1568 
1569 
1570  NOnOff++;
1571  v_->getOffEtOnOffHisto()->Fill((*iter).first->pt());
1572  if((*iter).first->pt() >= thresholdFactor_*v_->getHltThreshold())
1573  v_->getOffEtaVsOffPhiOnOffHisto()->Fill((*iter).first->eta(),(*iter).first->phi());
1574 
1575  }
1576  else if( offCollMu_.isValid() && fL2MuFlag) {
1577 
1578  typedef typename reco::MuonCollection::const_iterator const_iterator;
1579  const_iterator iter = offCollMu_->begin();
1580  for (int count = 0; count < i; count++) iter++;
1581 
1582 
1583  NOnOff++;
1584  v_->getOffEtOnOffHisto()->Fill(iter->pt());
1585  if(iter->pt() >= thresholdFactor_*v_->getHltThreshold())
1586  v_->getOffEtaVsOffPhiOnOffHisto()->Fill(iter->outerTrack()->innerPosition().eta(),iter->outerTrack()->innerPosition().phi());
1587 
1588  }
1589  else if( offCollEle_.isValid()) {
1590 
1591  typedef typename reco::GsfElectronCollection::const_iterator const_iterator;
1592  const_iterator iter = offCollEle_->begin();
1593  for (int count = 0; count < i; count++) iter++;
1594 
1595  NOnOff++;
1596  v_->getOffEtOnOffHisto()->Fill(iter->superCluster()->energy()*sin(iter->superCluster()->position().Theta()));
1597  if(iter->superCluster()->energy()*fabs(sin(iter->superCluster()->position().Theta())) >= thresholdFactor_*v_->getHltThreshold())
1598  v_->getOffEtaVsOffPhiOnOffHisto()->Fill(iter->eta(),iter->phi());
1599 
1600  }
1601  else if( offColl_.isValid()) {
1602 
1603  typedef typename T::const_iterator const_iterator;
1604  const_iterator iter = offColl_->begin();
1605  for (int count = 0; count < i; count++) iter++;
1606 
1607  NOnOff++;
1608  v_->getOffEtOnOffHisto()->Fill(iter->pt());
1609  if(iter->pt() >= thresholdFactor_*v_->getHltThreshold())
1610  v_->getOffEtaVsOffPhiOnOffHisto()->Fill(iter->eta(),iter->phi());
1611 
1612  }
1613 
1614  }
1615 
1616  v_->getNOnOffHisto()->Fill(NOnOff);
1617 
1618 }
1619 
1620 
1621 template <class T>
1623 {
1624 
1625  const trigger::TriggerObjectCollection & toc(fv->fTriggerObj->getObjects());
1626  const trigger::Keys & l1k = fv->fTriggerObj->filterKeys(l1Index);
1627 
1628  unsigned int NOnL1=0;
1629 
1630  // clean the set On-L1
1631  if(OnL1DRMatchSet.size() > 1) {
1632 
1633  LogDebug("FourVectorHLTOffline") << " Cleaning L1On mmset" << std::endl;
1634  fv->cleanDRMatchSet(OnL1DRMatchSet);
1635 
1636  }
1637  // now fill histos
1638  for ( mmset::iterator setIter = OnL1DRMatchSet.begin( ); setIter != OnL1DRMatchSet.end( ); setIter++ )
1639  {
1640 
1641  fimmap tempMap = *setIter;
1642 
1643  fimmap::iterator it = tempMap.begin();
1644  int i = (*it).second ;
1645  float dR = (*it).first;
1646  v_->getL1DROnL1Histo()->Fill(dR);
1647 
1648  if (dR > L1DRMatch_) continue;
1649 
1650  trigger::Keys::const_iterator l1ki = l1k.begin();
1651  for (int count = 0; count < i; count++) l1ki++;
1652 
1653  NOnL1++;
1654  v_->getL1EtL1OnHisto()->Fill(toc[*l1ki].pt());
1655  v_->getL1EtaVsL1PhiL1OnHisto()->Fill(toc[*l1ki].eta(),toc[*l1ki].phi());
1656 
1657  }
1658 
1659  v_->getNL1OnHisto()->Fill(NOnL1);
1660 
1661 }
1662 
1663 template <class T>
1665 {
1666 
1667  if(! isTriggerType(v_->getObjectType()) ) return;
1668  fillOnOffMatch(fv);
1669 
1670  if ( l1Index >= fv->fTriggerObj->sizeFilters() ) return;
1671  fillOnL1Match(l1Index, fv);
1672 
1673 }
1674 
1675 template <class T>
1677 {
1678 
1679  fillL1OffMatch(fv);
1680 
1681 }
1682 
1683 template <class T>
1685 {
1686 
1687  L1OffDRMatchSet.clear();
1688  L1MCDRMatchSet.clear();
1689  OnOffDRMatchSet.clear();
1690  OnMCDRMatchSet.clear();
1691  OnL1DRMatchSet.clear();
1692  OffMCDRMatchSet.clear();
1693 
1694 }
1695 
1696 
1697 
1698 #endif
#define LogDebug(id)
MonitorElement * getL1EtaVsL1PhiL1OnUMHisto()
void setupHltMatrix(const std::string &label, std::vector< std::string > &paths)
reco::helper::JetIDHelper * jetID
type
Definition: HCALResponse.h:22
int i
Definition: DBlmapReader.cc:9
edm::Handle< T > offColl_
bool hasL1Passed(const std::string &pathname, const edm::TriggerNames &triggerNames)
virtual void fillL1Match(FourVectorHLTOffline *fv)=0
long int flag
Definition: mlp_lapack.h:47
void selectPhotons(const edm::Handle< reco::PhotonCollection > &phoHandle)
std::vector< PFTau > PFTauCollection
collection of PFTau objects
Definition: PFTauFwd.h:9
virtual ~BaseMonitor()
void countHLTPathHitsEndLumiBlock(const int &lumi)
virtual void monitorOnline(const int hltIndex, const int l1Index, FourVectorHLTOnline *fv)=0
void countHLTGroupBXHitsEndLumiBlock(const int &lumi)
edm::Handle< reco::GsfElectronCollection > fSelElectronsHandle
edm::Handle< reco::CaloMETCollection > fSelMetHandle
FourVectorHLTOffline::PathInfoCollection::iterator v_
virtual void fillOnlineMatch(const int l1Index, FourVectorHLTOnline *fv)=0
transient_vector_type::const_iterator const_iterator
std::vector< std::vector< uint > > triggerFilterIndices_
bool isL1TriggerType(int t)
MonitorElement * getL1EtaVsL1PhiL1OnHisto()
reco::CaloMETCollection * fSelectedMet
PathInfoCollection hltPaths_
MonitorElement * getOffEtaVsOffPhiL1OffUMHisto()
bool isTriggerType(int t)
float phi() const
Definition: TriggerObject.h:60
reco::PFTauCollection * fSelectedTaus
std::vector< PathInfo >::iterator find(std::string pathName)
void endRun(const edm::Run &run, const edm::EventSetup &c)
EndRun.
std::string pathsSummaryFilterEfficiencyFolder_
void setRecoMu(edm::Handle< reco::MuonCollection > offCollMu)
tuple lumi
Definition: fjr2json.py:35
std::string pathsSummaryHLTPathsPerLSFolder_
int getTriggerTypeParsePathName(const std::string &pathname)
void fillHltMatrix(const edm::TriggerNames &triggerNames)
std::vector< std::pair< std::string, std::vector< int > > > fPathBxTempCountPair
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
std::vector< std::string > specialPaths_
void matchOnlineL1(const trigger::TriggerObject &onlineFV, const int &l1Index, FourVectorHLTOnline *fv, const int &NOn)
FourVectorHLTOffline(const edm::ParameterSet &)
std::vector< int > l1triggerType_
void cleanDRMatchSet(mmset &tempSet)
Clean DR Match Set.
std::multimap< float, int > fimmap
PathInfo(std::string denomPathName, std::string pathName, std::string l1pathName, std::string filterName, std::string processName, size_t type, MonitorElement *NOn, MonitorElement *onEtOn, MonitorElement *onOneOverEtOn, 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 *NL1OnUM, MonitorElement *l1EtL1OnUM, MonitorElement *l1Etavsl1PhiL1OnUM, MonitorElement *NL1OffUM, MonitorElement *offEtL1OffUM, MonitorElement *offEtavsoffPhiL1OffUM, MonitorElement *NOnOffUM, MonitorElement *offEtOnOffUM, MonitorElement *offEtavsoffPhiOnOffUM, MonitorElement *offDRL1Off, MonitorElement *offDROnOff, MonitorElement *l1DRL1On, MonitorElement *filters, float ptmin, float ptmax)
std::vector< int > triggerType_
edm::Handle< reco::MuonCollection > fSelMuonsHandle
edm::Handle< reco::GsfElectronCollection > offCollEle_
float eta() const
Definition: TriggerObject.h:59
edm::Handle< reco::BeamSpot > fBeamSpotHandle
T eta() const
bool operator!=(const std::string &v)
virtual void monitorOffline(void)=0
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
edm::Handle< reco::PFTauCollection > fSelTausHandle
void fillOnlineMatch(const int l1Index, FourVectorHLTOnline *fv)
edm::Handle< reco::JetTagCollection > offCollB_
virtual void matchOnlineOffline(const trigger::TriggerObject &onlineFV, FourVectorHLTOffline *fv, const int &NOn)=0
const std::string & getPath(void) const
std::vector< GsfElectron > GsfElectronCollection
collection of GsfElectron objects
const edm::InputTag getTag(void) const
std::vector< TPRegexp > filters
Definition: eve_filter.cc:25
edm::InputTag triggerSummaryLabel_
void countHLTGroupL1HitsEndLumiBlock(const int &lumi)
void setRecoB(edm::Handle< reco::JetTagCollection > offCollB)
virtual bool isTriggerType(int t)=0
PathInfoCollection hltPathsDiagonal_
std::vector< std::pair< std::string, std::string > > custompathnamepairs_
void setPath(FourVectorHLTOffline::PathInfoCollection::iterator v)
std::vector< Muon > MuonCollection
collection of Muon objects
Definition: MuonFwd.h:9
std::set< fimmap, std::less< fimmap > > mmset
edm::Handle< reco::PhotonCollection > fSelPhotonsHandle
double deltaR(double eta1, double phi1, double eta2, double phi2)
Definition: deltaR.h:19
reco::GsfElectronCollection * fSelectedElectrons
Single trigger physics object (e.g., an isolated muon)
Definition: TriggerObject.h:24
const int getL1ModuleIndex(void) const
MonitorElement * getOffEtaVsOffPhiOffHisto()
FourVectorHLTOnline::PathInfoCollection::iterator v_
void matchOnlineOffline(const trigger::TriggerObject &onlineFV, FourVectorHLTOffline *fv, const int &NOn)
const std::string getL1ConditionModuleName(const std::string &pathname)
int iEvent
Definition: GenABIO.cc:243
void pushTriggerType(int trigType)
void monitorOnline(const int hltIndex, const int l1Index, FourVectorHLTOnline *fv)
edm::Handle< edm::TriggerResults > fTriggerResults
void selectJets(const edm::Event &iEvent, const edm::Handle< reco::CaloJetCollection > &jetHandle)
std::vector< MonitorElement * > v_ME_Total_BX
void matchL1Offline(const trigger::TriggerObject &l1FV, FourVectorHLTOffline *fv, const int &NL1, unsigned int &NL1OffUM)
std::string pathsSummaryHLTPathsPerBXFolder_
virtual void matchL1Offline(const trigger::TriggerObject &l1FV, FourVectorHLTOffline *fv, const int &NL1, unsigned int &NL1OffUM)=0
std::vector< std::pair< std::string, float > > fPathTempCountPair
int j
Definition: DBlmapReader.cc:9
const std::string & getProcess(void) const
void endLuminosityBlock(const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &c)
HLTConfigProvider hltConfig_
virtual void matchOnlineL1(const trigger::TriggerObject &onlineFV, const int &l1Index, FourVectorHLTOnline *fv, const int &NOn)=0
void setLabel(std::string labelName)
#define end
Definition: vmac.h:38
virtual void analyze(const edm::Event &, const edm::EventSetup &)
void setHistos(MonitorElement *const NOn, MonitorElement *const onEtOn, MonitorElement *const onOneOverEtOn, 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 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 offDRL1Off, MonitorElement *const offDROnOff, MonitorElement *const l1DRL1On)
reco::PhotonCollection * fSelectedPhotons
std::vector< MonitorElement * > v_ME_Total_BX_Norm
void fillL1OffMatch(FourVectorHLTOffline *fv)
void selectTaus(const edm::Event &iEvent)
std::vector< std::pair< std::string, unsigned int > > filtersAndIndices
bool operator==(const std::string &v)
const int getObjectType(void) const
bool isVBTFMuon(const reco::Muon &muon)
MonitorElement * ME_HLT_BX
void selectElectrons(const edm::Event &iEvent, const edm::EventSetup &iSetup, const edm::Handle< reco::GsfElectronCollection > &eleHandle)
int k[5][pyjets_maxn]
reco::MuonCollection * fSelectedMuons
bool etMin(const PFCandidate &cand, double cut)
edm::InputTag triggerResultsLabel_
std::vector< TriggerObject > TriggerObjectCollection
collection of trigger physics objects (e.g., all isolated muons)
Definition: TriggerObject.h:83
virtual void clearSets(void)=0
void monitorL1(const int l1Index, FourVectorHLTOnline *fv)
void setLimits(float etaMax, float etMin, float drMatch, float l1drMatch, float dRRange, float thresholdFactor)
void beginRun(const edm::Run &run, const edm::EventSetup &c)
std::vector< reco::CaloMET > CaloMETCollection
collection of CaloMET objects
MonitorElement * ME_HLT_CUSTOM_BX
std::vector< std::vector< std::string > > triggerFilters_
void fillOnOffMatch(FourVectorHLTOffline *fv)
std::vector< size_type > Keys
MonitorElement * getOffEtaVsOffPhiOnOffUMHisto()
edm::Handle< reco::CaloJetCollection > fSelJetsHandle
const std::string getLabel(void) const
void setL1TriggerType(std::vector< int > trigType)
std::vector< Photon > PhotonCollection
collectin of Photon objects
Definition: PhotonFwd.h:9
std::vector< std::pair< std::string, float > > fGroupTempCountPair
std::vector< std::pair< std::string, std::vector< std::string > > > fGroupNamePathsPair
void setRecoEle(edm::Handle< reco::GsfElectronCollection > offCollEle)
std::string removeVersions(std::string histVersion)
void fillL1Match(FourVectorHLTOffline *fv)
void setL2MuFlag(bool flag)
virtual void setPath(FourVectorHLTOnline::PathInfoCollection::iterator v)=0
double ptmin
Definition: HydjetWrapper.h:86
void beginLuminosityBlock(const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &c)
std::string pathsSummaryHLTCorrelationsFolder_
std::string pathsSummaryFilterCountsFolder_
const std::string & getl1Path(void) const
std::string pathsIndividualHLTPathsPerLSFolder_
#define begin
Definition: vmac.h:31
MonitorElement * getOffEtaVsOffPhiOnOffHisto()
void selectMet(const edm::Handle< reco::CaloMETCollection > &metHandle)
MonitorElement * getOffEtaVsOffPhiL1OffHisto()
MonitorElement * ME_HLTAll_LS
std::vector< std::string > fGroupName
void fillOnL1Match(const int l1Index, FourVectorHLTOnline *fv)
void countHLTGroupHitsEndLumiBlock(const int &lumi)
virtual void monitorL1(const int l1Index, FourVectorHLTOnline *fv)=0
std::vector< std::pair< std::string, float > > fGroupL1TempCountPair
reco::CaloJetCollection * fSelectedJets
void pushL1TriggerType(int trigType)
PathInfo(std::string denomPathName, std::string pathName, std::string l1pathName, int l1ModuleIndex, std::string filterName, std::string processName, size_t type, float ptmin, float ptmax, float hltThreshold, float l1Threshold)
int getHltThresholdFromName(const std::string &pathname)
edm::Handle< trigger::TriggerEvent > fTriggerObj
void setReco(edm::Handle< T > offColl)
MonitorElement * scalersSelect
void setTriggerType(std::vector< int > trigType)
std::vector< MonitorElement * > v_ME_HLTAll_LS
void setFilterHistos(MonitorElement *const filters)
mathSSE::Vec4< T > v
std::vector< int > Vids
Definition: Run.h:33
edm::Handle< reco::MuonCollection > offCollMu_
std::vector< CaloJet > CaloJetCollection
collection of CaloJet objects
void selectMuons(const edm::Handle< reco::MuonCollection > &muonHandle)
bool hasHLTPassed(const std::string &pathname, const edm::TriggerNames &triggerNames)
const std::string & getDenomPath(void) const
Definition: DDAxes.h:10
void setBJetsFlag(bool flag)