CMS 3D CMS Logo

CMSSW_4_4_3_patch1/src/DQM/HLTEvF/interface/TrigResRateMon.h

Go to the documentation of this file.
00001 #ifndef TRIGRESRATEMON_H
00002 #define TRIGRESRATEMON_H
00003 // -*- C++ -*-
00004 //
00005 // Package:    TrigResRateMon
00006 // Class:      TrigResRateMon
00007 // 
00015 // Original Author:
00016 //        Vladimir Rekovic, July 2010
00017 //
00018 //
00019 // $Id: TrigResRateMon.h,v 1.2 2010/09/29 23:07:07 rekovic Exp $
00020 //
00021 //
00022 
00023 // system include files
00024 #include <memory>
00025 #include <unistd.h>
00026 
00027 
00028 // user include files
00029 #include "FWCore/Framework/interface/Frameworkfwd.h"
00030 #include "FWCore/Framework/interface/EDAnalyzer.h"
00031 
00032 #include "FWCore/Framework/interface/Event.h"
00033 #include "FWCore/Framework/interface/MakerMacros.h"
00034 #include "DataFormats/HLTReco/interface/TriggerEvent.h"
00035 #include "DataFormats/Common/interface/TriggerResults.h"
00036 #include "HLTrigger/HLTcore/interface/HLTConfigProvider.h"
00037 
00038 #include "DQMServices/Core/interface/DQMStore.h"
00039 #include "DQMServices/Core/interface/MonitorElement.h"
00040 #include "FWCore/ServiceRegistry/interface/Service.h"
00041 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00042 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00043 
00044 // added VR
00045 #include "FWCore/Framework/interface/EDAnalyzer.h"
00046 #include "DataFormats/Common/interface/Handle.h"
00047 #include "FWCore/Framework/interface/Run.h"
00048 #include "FWCore/Framework/interface/MakerMacros.h"
00049 #include "FWCore/Framework/interface/ESHandle.h"
00050 
00051 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00052 
00053 #include "DataFormats/HLTReco/interface/TriggerObject.h"
00054 #include "DataFormats/Common/interface/TriggerResults.h"
00055 #include "DataFormats/HLTReco/interface/TriggerEvent.h"
00056 #include "DataFormats/HLTReco/interface/TriggerTypeDefs.h"
00057 #include "HLTrigger/HLTcore/interface/HLTConfigProvider.h"
00058 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
00059 
00060 /*
00061    needs cleaining of include statments (VR)
00062 */
00063 
00064 #include "DataFormats/HLTReco/interface/TriggerEventWithRefs.h"
00065 #include "DataFormats/JetReco/interface/JetFloatAssociation.h"
00066 
00067 #include "DataFormats/Math/interface/deltaR.h"
00068 #include  "DataFormats/HLTReco/interface/TriggerTypeDefs.h"
00069 
00070 #include "DQMServices/Core/interface/MonitorElement.h"
00071 
00072 
00073 
00074 #include <iostream>
00075 #include <fstream>
00076 #include <vector>
00077 
00078 namespace edm {
00079    class TriggerNames;
00080 }
00081 
00082 //typedef std::multimap<float,int> fimmap ;
00083 //typedef std::set<fimmap , less<fimmap> > mmset;
00084 
00085 class TrigResRateMon : public edm::EDAnalyzer {
00086 
00087    public:
00088       explicit TrigResRateMon(const edm::ParameterSet&);
00089       ~TrigResRateMon();
00090 
00091       //void cleanDRMatchSet(mmset& tempSet);
00092 
00093       edm::Handle<trigger::TriggerEvent> fTriggerObj;
00094       //edm::Handle<reco::BeamSpot> fBeamSpotHandle;
00095 
00096    private:
00097       virtual void beginJob() ;
00098       virtual void analyze(const edm::Event&, const edm::EventSetup&);
00099       virtual void endJob() ;
00100 
00101       // BeginRun
00102       void beginRun(const edm::Run& run, const edm::EventSetup& c);
00103 
00104       // EndRun
00105       void endRun(const edm::Run& run, const edm::EventSetup& c);
00106       void setupHltMatrix(const std::string& label, std::vector<std::string> &  paths);
00107       void setupStreamMatrix(const std::string& label, std::vector<std::string> &  paths);
00108       void setupHltLsPlots();
00109       void setupHltBxPlots();
00110       void countHLTPathHitsEndLumiBlock(const int & lumi);
00111       void countHLTGroupHitsEndLumiBlock(const int & lumi);
00112       void countHLTGroupL1HitsEndLumiBlock(const int & lumi);
00113       void countHLTGroupBXHitsEndLumiBlock(const int & lumi);
00114 
00115       void fillHltMatrix(const edm::TriggerNames & triggerNames);
00116       void normalizeHLTMatrix();
00117 
00118       int getTriggerTypeParsePathName(const std::string & pathname);
00119       const std::string getL1ConditionModuleName(const std::string & pathname);
00120       bool hasL1Passed(const std::string & pathname, const edm::TriggerNames & triggerNames);
00121       bool hasHLTPassed(const std::string & pathname, const edm::TriggerNames& triggerNames);
00122       int getThresholdFromName(const std::string & pathname);
00123 
00124 
00125       void beginLuminosityBlock(const edm::LuminosityBlock& lumiSeg, const edm::EventSetup& c);   
00126       void endLuminosityBlock(const edm::LuminosityBlock& lumiSeg, const edm::EventSetup& c);   
00127 
00128       // ----------member data --------------------------- 
00129       int nev_;
00130       DQMStore * dbe_;
00131       bool fLumiFlag;
00132       bool fIsSetup;
00133 
00134       // JetID helper
00135       //reco::helper::JetIDHelper *jetID;
00136 
00137 
00138 
00139       MonitorElement* ME_HLTAll_LS;
00140       MonitorElement* ME_HLT_BX;
00141       MonitorElement* ME_HLT_CUSTOM_BX;
00142       std::vector<MonitorElement*> v_ME_HLTAll_LS;
00143       std::vector<MonitorElement*> v_ME_Total_BX;
00144       std::vector<MonitorElement*> v_ME_Total_BX_Norm;
00145 
00146       std::vector<MonitorElement*> v_ME_HLTPassPass;
00147       std::vector<MonitorElement*> v_ME_HLTPassPass_Normalized;
00148       std::vector<MonitorElement*> v_ME_HLTPass_Normalized_Any;
00149 
00150       std::string pathsSummaryFolder_;
00151       std::string pathsSummaryStreamsFolder_;
00152       std::string pathsSummaryHLTCorrelationsFolder_;
00153       std::string pathsSummaryFilterEfficiencyFolder_;
00154       std::string pathsSummaryFilterCountsFolder_;
00155       std::string pathsSummaryHLTPathsPerLSFolder_;
00156       std::string pathsIndividualHLTPathsPerLSFolder_;
00157       std::string pathsSummaryHLTPathsPerBXFolder_;
00158       std::string fCustomBXPath;
00159 
00160       std::vector<std::string> fGroupName;
00161 
00162 
00163       unsigned int nLS_; 
00164       double LSsize_ ;
00165       double thresholdFactor_ ;
00166       unsigned int referenceBX_; 
00167       unsigned int Nbx_; 
00168 
00169       bool plotAll_;
00170       bool doCombineRuns_;
00171       bool doVBTFMuon_;
00172       int currentRun_;
00173       
00174       unsigned int nBins_; 
00175       unsigned int nBins2D_; 
00176       unsigned int nBinsDR_; 
00177       unsigned int nBinsOneOverEt_; 
00178       double ptMin_ ;
00179       double ptMax_ ;
00180       double dRMax_ ;
00181       double dRMaxElectronMuon_ ;
00182       
00183       double electronEtaMax_;
00184       double electronEtMin_;
00185       double electronDRMatch_;
00186       double electronL1DRMatch_;
00187       double muonEtaMax_;
00188       double muonEtMin_;
00189       double muonDRMatch_;
00190       double muonL1DRMatch_;
00191       double tauEtaMax_;
00192       double tauEtMin_;
00193       double tauDRMatch_;
00194       double tauL1DRMatch_;
00195       double jetEtaMax_;
00196       double jetEtMin_;
00197       double jetDRMatch_;
00198       double jetL1DRMatch_;
00199       double bjetEtaMax_;
00200       double bjetEtMin_;
00201       double bjetDRMatch_;
00202       double bjetL1DRMatch_;
00203       double photonEtaMax_;
00204       double photonEtMin_;
00205       double photonDRMatch_;
00206       double photonL1DRMatch_;
00207       double trackEtaMax_;
00208       double trackEtMin_;
00209       double trackDRMatch_;
00210       double trackL1DRMatch_;
00211       double metEtaMax_;
00212       double metMin_;
00213       double metDRMatch_;
00214       double metL1DRMatch_;
00215       double htEtaMax_;
00216       double htMin_;
00217       double htDRMatch_;
00218       double htL1DRMatch_;
00219       double sumEtMin_;
00220 
00221       // Muon quality cuts
00222       double dxyCut_;
00223       double normalizedChi2Cut_;
00224       int trackerHitsCut_;
00225       int pixelHitsCut_;
00226       int muonHitsCut_;
00227       bool isAlsoTrackerMuon_;
00228       int nMatchesCut_;
00229 
00230       std::vector<std::pair<std::string, std::string> > custompathnamepairs_;
00231 
00232       std::vector <std::vector <std::string> > triggerFilters_;
00233       std::vector <std::vector <uint> > triggerFilterIndices_;
00234       std::vector <std::pair<std::string, float> > fPathTempCountPair;
00235       std::vector <std::pair<std::string, std::vector<int> > > fPathBxTempCountPair;
00236       std::vector <std::pair<std::string, float> > fGroupTempCountPair;
00237       std::vector <std::pair<std::string, float> > fGroupL1TempCountPair;
00238       std::vector <std::pair<std::string, std::vector<std::string> > > fGroupNamePathsPair;
00239 
00240       std::vector<std::string> specialPaths_;
00241 
00242       std::string dirname_;
00243       std::string processname_;
00244       std::string muonRecoCollectionName_;
00245       bool monitorDaemon_;
00246       int theHLTOutputType;
00247       edm::InputTag triggerSummaryLabel_;
00248       edm::InputTag triggerResultsLabel_;
00249       edm::InputTag recHitsEBTag_, recHitsEETag_;
00250       HLTConfigProvider hltConfig_;
00251       // data across paths
00252       MonitorElement* scalersSelect;
00253       // helper class to store the data path
00254 
00255       edm::Handle<edm::TriggerResults> triggerResults_;
00256 
00257       class PathInfo {
00258 
00259        PathInfo():
00260         pathIndex_(-1), denomPathName_("unset"), pathName_("unset"), l1pathName_("unset"), filterName_("unset"), processName_("unset"), objectType_(-1) {};
00261 
00262        public:
00263 
00264           void setFilterHistos(MonitorElement* const filters) 
00265           {
00266               filters_   =  filters;
00267           }
00268 
00269           void setHistos(
00270 
00271             MonitorElement* const NOn, 
00272             MonitorElement* const onEtOn, 
00273             MonitorElement* const onOneOverEtOn, 
00274             MonitorElement* const onEtavsonPhiOn,  
00275             MonitorElement* const NOff, 
00276             MonitorElement* const offEtOff, 
00277             MonitorElement* const offEtavsoffPhiOff,
00278             MonitorElement* const NL1, 
00279             MonitorElement* const l1EtL1, 
00280             MonitorElement* const l1Etavsl1PhiL1,
00281             MonitorElement* const NL1On, 
00282             MonitorElement* const l1EtL1On, 
00283             MonitorElement* const l1Etavsl1PhiL1On,
00284             MonitorElement* const NL1Off,   
00285             MonitorElement* const offEtL1Off, 
00286             MonitorElement* const offEtavsoffPhiL1Off,
00287             MonitorElement* const NOnOff, 
00288             MonitorElement* const offEtOnOff, 
00289             MonitorElement* const offEtavsoffPhiOnOff,
00290             MonitorElement* const NL1OnUM, 
00291             MonitorElement* const l1EtL1OnUM, 
00292             MonitorElement* const l1Etavsl1PhiL1OnUM,
00293             MonitorElement* const NL1OffUM,   
00294             MonitorElement* const offEtL1OffUM, 
00295             MonitorElement* const offEtavsoffPhiL1OffUM,
00296             MonitorElement* const NOnOffUM, 
00297             MonitorElement* const offEtOnOffUM, 
00298             MonitorElement* const offEtavsoffPhiOnOffUM,
00299             MonitorElement* const offDRL1Off, 
00300             MonitorElement* const offDROnOff, 
00301             MonitorElement* const l1DRL1On)  
00302          {
00303 
00304               NOn_ = NOn;
00305               onEtOn_ = onEtOn;
00306               onOneOverEtOn_ = onOneOverEtOn;
00307               onEtavsonPhiOn_ = onEtavsonPhiOn;
00308               NOff_ = NOff;
00309               offEtOff_ = offEtOff;
00310               offEtavsoffPhiOff_ = offEtavsoffPhiOff;
00311               NL1_ = NL1;
00312               l1EtL1_ = l1EtL1;
00313               l1Etavsl1PhiL1_ = l1Etavsl1PhiL1;
00314               NL1On_ = NL1On;
00315               l1EtL1On_ = l1EtL1On;
00316               l1Etavsl1PhiL1On_ = l1Etavsl1PhiL1On;
00317               NL1Off_ = NL1Off;
00318               offEtL1Off_ = offEtL1Off;
00319               offEtavsoffPhiL1Off_ = offEtavsoffPhiL1Off;
00320               NOnOff_ = NOnOff;
00321               offEtOnOff_ = offEtOnOff;
00322               offEtavsoffPhiOnOff_ = offEtavsoffPhiOnOff;
00323               NL1OnUM_ = NL1OnUM;
00324               l1EtL1OnUM_ = l1EtL1OnUM;
00325               l1Etavsl1PhiL1OnUM_ = l1Etavsl1PhiL1OnUM;
00326               NL1OffUM_ = NL1OffUM;
00327               offEtL1OffUM_ = offEtL1OffUM;
00328               offEtavsoffPhiL1OffUM_ = offEtavsoffPhiL1OffUM;
00329               NOnOffUM_ = NOnOffUM;
00330               offEtOnOffUM_ = offEtOnOffUM;
00331               offEtavsoffPhiOnOffUM_ = offEtavsoffPhiOnOffUM;
00332               offDRL1Off_ =  offDRL1Off; 
00333               offDROnOff_ =  offDROnOff; 
00334               l1DRL1On_   =  l1DRL1On;
00335 
00336          }
00337 
00338          MonitorElement * getNOnHisto() {
00339           return NOn_;
00340          }
00341          MonitorElement * getOnEtOnHisto() {
00342            return onEtOn_;
00343          }
00344          MonitorElement * getOnOneOverEtOnHisto() {
00345            return onOneOverEtOn_;
00346          }
00347          MonitorElement * getOnEtaVsOnPhiOnHisto() {
00348            return onEtavsonPhiOn_;
00349          }
00350          MonitorElement * getNOffHisto() {
00351            return NOff_;
00352          }
00353          MonitorElement * getOffEtOffHisto() {
00354            return offEtOff_;
00355          }
00356          MonitorElement * getOffEtaVsOffPhiOffHisto() {
00357            return offEtavsoffPhiOff_;
00358          }
00359          MonitorElement * getNL1Histo() {
00360            return NL1_;
00361          }
00362          MonitorElement * getL1EtL1Histo() {
00363            return l1EtL1_;
00364          }
00365          MonitorElement * getL1EtaVsL1PhiL1Histo() {
00366            return l1Etavsl1PhiL1_;
00367          }
00368          MonitorElement * getNL1OnHisto() {
00369            return NL1On_;
00370          }
00371          MonitorElement * getL1EtL1OnHisto() {
00372            return l1EtL1On_;
00373          }
00374          MonitorElement * getL1EtaVsL1PhiL1OnHisto() {
00375            return l1Etavsl1PhiL1On_;
00376          }
00377          MonitorElement * getNL1OffHisto() {
00378            return NL1Off_;
00379          }
00380          MonitorElement * getOffEtL1OffHisto() {
00381            return offEtL1Off_;
00382          }
00383          MonitorElement * getOffEtaVsOffPhiL1OffHisto() {
00384            return offEtavsoffPhiL1Off_;
00385          }
00386          MonitorElement * getNOnOffHisto() {
00387            return NOnOff_;
00388          }
00389          MonitorElement * getOffEtOnOffHisto() {
00390            return offEtOnOff_;
00391          }
00392          MonitorElement * getOffEtaVsOffPhiOnOffHisto() {
00393            return offEtavsoffPhiOnOff_;
00394          }
00395          MonitorElement * getNL1OnUMHisto() {
00396            return NL1OnUM_;
00397          }
00398          MonitorElement * getL1EtL1OnUMHisto() {
00399            return l1EtL1OnUM_;
00400          }
00401          MonitorElement * getL1EtaVsL1PhiL1OnUMHisto() {
00402            return l1Etavsl1PhiL1OnUM_;
00403          }
00404          MonitorElement * getNL1OffUMHisto() {
00405            return NL1OffUM_;
00406          }
00407          MonitorElement * getOffEtL1OffUMHisto() {
00408            return offEtL1OffUM_;
00409          }
00410          MonitorElement * getOffEtaVsOffPhiL1OffUMHisto() {
00411            return offEtavsoffPhiL1OffUM_;
00412          }
00413          MonitorElement * getNOnOffUMHisto() {
00414            return NOnOffUM_;
00415          }
00416          MonitorElement * getOffEtOnOffUMHisto() {
00417            return offEtOnOffUM_;
00418          }
00419          MonitorElement * getOffEtaVsOffPhiOnOffUMHisto() {
00420            return offEtavsoffPhiOnOffUM_;
00421          }
00422          MonitorElement * getOffDRL1OffHisto() {
00423            return offDRL1Off_;
00424          }
00425          MonitorElement * getOffDROnOffHisto() {
00426            return offDROnOff_;
00427          }
00428          MonitorElement * getL1DROnL1Histo() {
00429            return l1DRL1On_;
00430          }
00431          MonitorElement * getFiltersHisto() {
00432            return filters_;
00433          }
00434          const std::string getLabel(void ) const {
00435            return filterName_;
00436          }
00437          void setLabel(std::string labelName){
00438            filterName_ = labelName;
00439            return;
00440          }
00441          const std::string & getPath(void ) const {
00442            return pathName_;
00443          }
00444          const std::string & getl1Path(void ) const {
00445            return l1pathName_;
00446          }
00447          const int getL1ModuleIndex(void ) const {
00448            return l1ModuleIndex_;
00449          }
00450          const std::string & getDenomPath(void ) const {
00451            return denomPathName_;
00452          }
00453          const std::string & getProcess(void ) const {
00454            return processName_;
00455          }
00456          const int getObjectType(void ) const {
00457            return objectType_;
00458          }
00459 
00460         const edm::InputTag getTag(void) const{
00461           edm::InputTag tagName(filterName_,"",processName_);
00462           return tagName;
00463         }
00464 
00465         ~PathInfo() {};
00466 
00467         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):
00468 
00469           denomPathName_(denomPathName), 
00470           pathName_(pathName), 
00471           l1pathName_(l1pathName), 
00472           l1ModuleIndex_(l1ModuleIndex), 
00473           filterName_(filterName), 
00474           processName_(processName), 
00475           objectType_(type),
00476           NOn_(0), onEtOn_(0), onOneOverEtOn_(0), onEtavsonPhiOn_(0), 
00477           NOff_(0), offEtOff_(0), offEtavsoffPhiOff_(0),
00478           NL1_(0), l1EtL1_(0), l1Etavsl1PhiL1_(0),
00479           NL1On_(0), l1EtL1On_(0), l1Etavsl1PhiL1On_(0),
00480           NL1Off_(0), offEtL1Off_(0), offEtavsoffPhiL1Off_(0),
00481           NOnOff_(0), offEtOnOff_(0), offEtavsoffPhiOnOff_(0),
00482           NL1OnUM_(0), l1EtL1OnUM_(0), l1Etavsl1PhiL1OnUM_(0),
00483           NL1OffUM_(0), offEtL1OffUM_(0), offEtavsoffPhiL1OffUM_(0),
00484           NOnOffUM_(0), offEtOnOffUM_(0), offEtavsoffPhiOnOffUM_(0),
00485           offDRL1Off_(0), offDROnOff_(0), l1DRL1On_(0), filters_(0),
00486           ptmin_(ptmin), ptmax_(ptmax),
00487           hltThreshold_(hltThreshold), l1Threshold_(l1Threshold)
00488 
00489         {
00490         };
00491 
00492         PathInfo(std::string denomPathName, std::string pathName, std::string l1pathName, std::string filterName, std::string processName, size_t type,
00493           MonitorElement *NOn,
00494           MonitorElement *onEtOn,
00495           MonitorElement *onOneOverEtOn,
00496           MonitorElement *onEtavsonPhiOn,
00497           MonitorElement *NOff,
00498           MonitorElement *offEtOff,
00499           MonitorElement *offEtavsoffPhiOff,
00500           MonitorElement *NL1,
00501           MonitorElement *l1EtL1,
00502           MonitorElement *l1Etavsl1PhiL1,
00503           MonitorElement *NL1On,
00504           MonitorElement *l1EtL1On,
00505           MonitorElement *l1Etavsl1PhiL1On,
00506           MonitorElement *NL1Off,
00507           MonitorElement *offEtL1Off,
00508           MonitorElement *offEtavsoffPhiL1Off,
00509           MonitorElement *NOnOff,
00510           MonitorElement *offEtOnOff,
00511           MonitorElement *offEtavsoffPhiOnOff,
00512           MonitorElement *NL1OnUM,
00513           MonitorElement *l1EtL1OnUM,
00514           MonitorElement *l1Etavsl1PhiL1OnUM,
00515           MonitorElement *NL1OffUM,
00516           MonitorElement *offEtL1OffUM,
00517           MonitorElement *offEtavsoffPhiL1OffUM,
00518           MonitorElement *NOnOffUM,
00519           MonitorElement *offEtOnOffUM,
00520           MonitorElement *offEtavsoffPhiOnOffUM,
00521           MonitorElement *offDRL1Off, 
00522           MonitorElement *offDROnOff, 
00523           MonitorElement *l1DRL1On,
00524           MonitorElement *filters,
00525           float ptmin, float ptmax
00526           ):
00527 
00528             denomPathName_(denomPathName), 
00529             pathName_(pathName), l1pathName_(l1pathName), 
00530             filterName_(filterName), processName_(processName), objectType_(type),
00531             NOn_(NOn), onEtOn_(onEtOn), onOneOverEtOn_(onOneOverEtOn), onEtavsonPhiOn_(onEtavsonPhiOn), 
00532             NOff_(NOff), offEtOff_(offEtOff), offEtavsoffPhiOff_(offEtavsoffPhiOff),
00533             NL1_(NL1), l1EtL1_(l1EtL1), l1Etavsl1PhiL1_(l1Etavsl1PhiL1),
00534             NL1On_(NL1On), l1EtL1On_(l1EtL1On), l1Etavsl1PhiL1On_(l1Etavsl1PhiL1On),
00535             NL1Off_(NL1Off), offEtL1Off_(offEtL1Off), offEtavsoffPhiL1Off_(offEtavsoffPhiL1Off),
00536             NOnOff_(NOnOff), offEtOnOff_(offEtOnOff), offEtavsoffPhiOnOff_(offEtavsoffPhiOnOff),
00537             NL1OnUM_(NL1OnUM), l1EtL1OnUM_(l1EtL1OnUM), l1Etavsl1PhiL1OnUM_(l1Etavsl1PhiL1OnUM),
00538             NL1OffUM_(NL1OffUM), offEtL1OffUM_(offEtL1OffUM), offEtavsoffPhiL1OffUM_(offEtavsoffPhiL1OffUM),
00539             NOnOffUM_(NOnOffUM), offEtOnOffUM_(offEtOnOffUM), offEtavsoffPhiOnOffUM_(offEtavsoffPhiOnOffUM),
00540             offDRL1Off_(offDRL1Off), 
00541             offDROnOff_(offDROnOff), 
00542             l1DRL1On_(l1DRL1On),
00543             filters_(filters),
00544             ptmin_(ptmin), ptmax_(ptmax)
00545         {
00546         };
00547 
00548         bool operator==(const std::string& v) 
00549         {
00550           return v==filterName_;
00551         }
00552 
00553         bool operator!=(const std::string& v) 
00554         {
00555           return v!=filterName_;
00556         }
00557 
00558         float getPtMin() const { return ptmin_; }
00559         float getPtMax() const { return ptmax_; }
00560         float getHltThreshold() const { return hltThreshold_; }
00561         float getL1Threshold() const { return l1Threshold_; }
00562 
00563         std::vector< std::pair<std::string,unsigned int> > filtersAndIndices;
00564 
00565 
00566       private:
00567 
00568         int pathIndex_;
00569         std::string denomPathName_;
00570         std::string pathName_;
00571         std::string l1pathName_;
00572         int l1ModuleIndex_;
00573         std::string filterName_;
00574         std::string processName_;
00575         int objectType_;
00576         
00577         // we don't own this data
00578         MonitorElement *NOn_, *onEtOn_, *onOneOverEtOn_, *onEtavsonPhiOn_;
00579         MonitorElement *NOff_, *offEtOff_, *offEtavsoffPhiOff_;
00580         MonitorElement *NL1_, *l1EtL1_, *l1Etavsl1PhiL1_;
00581         MonitorElement *NL1On_, *l1EtL1On_, *l1Etavsl1PhiL1On_;
00582         MonitorElement *NL1Off_, *offEtL1Off_, *offEtavsoffPhiL1Off_;
00583         MonitorElement *NOnOff_, *offEtOnOff_, *offEtavsoffPhiOnOff_;
00584         MonitorElement *NL1OnUM_, *l1EtL1OnUM_, *l1Etavsl1PhiL1OnUM_;
00585         MonitorElement *NL1OffUM_, *offEtL1OffUM_, *offEtavsoffPhiL1OffUM_;
00586         MonitorElement *NOnOffUM_, *offEtOnOffUM_, *offEtavsoffPhiOnOffUM_;
00587         MonitorElement *offDRL1Off_, *offDROnOff_, *l1DRL1On_;
00588         MonitorElement *filters_;
00589         
00590         float ptmin_, ptmax_;
00591         float hltThreshold_, l1Threshold_;
00592         
00593         const int index() { 
00594           return pathIndex_;
00595         }
00596         const int type() { 
00597           return objectType_;
00598         }
00599 
00600 
00601      };
00602      
00603 
00604    public:
00605 
00606      // simple collection - just 
00607      class PathInfoCollection: public std::vector<PathInfo> {
00608        public:
00609 
00610          PathInfoCollection(): std::vector<PathInfo>() 
00611         {};
00612          std::vector<PathInfo>::iterator find(std::string pathName) {
00613             return std::find(begin(), end(), pathName);
00614          }
00615       };
00616 
00617       PathInfoCollection hltPaths_;
00618 
00619       PathInfoCollection hltPathsDiagonal_;
00620 
00621 };
00622 
00623 
00624 
00625 
00626 
00627 #endif