CMS 3D CMS Logo

EgHLTOffHelper.h
Go to the documentation of this file.
1 #ifndef DQMOFFLINE_TRIGGER_EGHLTOFFHELPER
2 #define DQMOFFLINE_TRIGGER_EGHLTOFFHELPER
3 
4 //class: EgHLTOffHelper (Egamma HLT offline helper)
5 //
6 //author: Sam Harper (July 2008)
7 //
8 //
9 //aim: to hide temporary place holder code away from the rest of the system
10 //
11 //implimentation: currently no isolation producers or electron selection cut meets my needs
12 // while I would like to use a central tool, for now I'm cludging my own as
13 // placeholders
14 
15 
23 
32 
38 
43 
46 
52 
54 class HLTConfigProvider;
56 
57 namespace egHLT {
58 
59  class OffHelper {
60 
61  private:
62 
63  OffEgSel eleLooseCuts_; //loose selection cuts (loose has no relation to other 'loose' cuts)
64  OffEgSel eleCuts_; //normal selection cuts
65  OffEgSel phoLooseCuts_; //loose selection cuts (loose has no relation to other 'loose' cuts)
66  OffEgSel phoCuts_; //normal selection cuts
67 
68  std::vector<std::pair<TrigCodes::TrigBitSet,OffEgSel> > trigCuts_;//non sorted vector (for now)
69 
70 
84 
89 
95 
100 
103 
105 
107 
108 
109 
111  std::vector<std::string> hltFiltersUsed_;
112  std::vector<std::pair<std::string,int> > hltFiltersUsedWithNrCandsCut_; //stores the filter name + number of candidates required to pass that filter for it to accept
113  std::vector<std::pair<std::string,std::string> > l1PreAndSeedFilters_; //filter names of a l1 prescaler and the corresponding l1 seed filter
114  std::vector<std::string> l1PreScaledPaths_;//l1 pre-scaled path names
115  std::vector<std::string> l1PreScaledFilters_;//l1 pre scale filters
116 
117  //allow us to recompute e/gamma HLT isolations (note we also have em and hcal but they have to be declared for every event)
118  //which is awkward and I havent thought of a good way around it yet
121 
122  //our hlt isolation parameters...
123  //ecal
133  //tracker
145  //hcal
150  //flags to disable calculations if same as reco (saves time)
155 
156 
157  std::vector<edm::ParameterSet> trigCutParams_; //probably the least bad option
158 
159  private: //disabling copy / assignment
160  OffHelper & operator=(const OffHelper&) = delete;
161  OffHelper(const OffHelper&) = delete;
162 
163  public:
164  OffHelper(): eleLooseCuts_(),eleCuts_(),phoLooseCuts_(),phoCuts_(),hltEleTrkIsolAlgo_(nullptr),hltPhoTrkIsolAlgo_(nullptr){}
165  ~OffHelper();
166 
167  void setup(const edm::ParameterSet& conf, edm::ConsumesCollector && iC);
168  void setupTriggers(const HLTConfigProvider& config,const std::vector<std::string>& hltFiltersUsed, const TrigCodes& trigCodes);
169 
170  //int is the error code, 0 = no error
171  //it should never throw, print to screen or crash, this is the only error reporting it does
172  int makeOffEvt(const edm::Event& edmEvent,const edm::EventSetup& setup,egHLT::OffEvt& offEvent,const TrigCodes& trigCodes);
173 
174  int getHandles(const edm::Event& event,const edm::EventSetup& setup);
175  int fillOffEleVec(std::vector<OffEle>& offEles);
176  int fillOffPhoVec(std::vector<OffPho>& offPhos);
177  int setTrigInfo(const edm::Event & edmEvent, egHLT::OffEvt& offEvent, const TrigCodes& trigCodes);
178 
179  void fillIsolData(const reco::GsfElectron& ele,OffEle::IsolData& isolData);
180  void fillClusShapeData(const reco::GsfElectron& ele,OffEle::ClusShapeData& clusShapeData);
181  void fillHLTData(const reco::GsfElectron& ele,OffEle::HLTData& hltData);
182 
183  void fillIsolData(const reco::Photon& pho,OffPho::IsolData& isolData);
184  void fillClusShapeData(const reco::Photon& pho,OffPho::ClusShapeData& clusShapeData);
185  void fillHLTDataPho(const reco::Photon& pho,OffPho::HLTData& hltData);
186 
187  //tempory debugging functions
188  const trigger::TriggerEvent* trigEvt()const{return trigEvt_.product();}
189  const std::vector<std::pair<TrigCodes::TrigBitSet,OffEgSel> >& trigCuts()const{return trigCuts_;}
190 
191 
192  template<class T> static bool getHandle(const edm::Event& event,const edm::EDGetTokenT<T>& token,edm::Handle<T>& handle);
193 
194  };
195 
196 
197  template<class T> bool OffHelper::getHandle(const edm::Event& event,const edm::EDGetTokenT<T>& token, edm::Handle<T>& handle)
198  {
199 
200  bool success=event.getByToken(token,handle);
201  return success && handle.product();
202 
203 
204  }
205 }
206 
207 #endif
double hltEMIsolEtaSliceEB_
edm::Handle< reco::TrackCollection > isolTrks_
The single EDProduct to be saved for each event (AOD case)
Definition: TriggerEvent.h:25
int fillOffPhoVec(std::vector< OffPho > &offPhos)
double hltPhoTrkIsolRSpan_
edm::EDGetTokenT< CaloTowerCollection > caloTowersToken
OffEgSel phoLooseCuts_
void fillClusShapeData(const reco::GsfElectron &ele, OffEle::ClusShapeData &clusShapeData)
edm::Handle< reco::PhotonCollection > recoPhos_
std::vector< std::pair< TrigCodes::TrigBitSet, OffEgSel > > trigCuts_
int setTrigInfo(const edm::Event &edmEvent, egHLT::OffEvt &offEvent, const TrigCodes &trigCodes)
double hltEMIsolOuterCone_
#define nullptr
OffEgSel eleLooseCuts_
edm::EDGetTokenT< HBHERecHitCollection > hbheHitsToken
std::vector< std::string > l1PreScaledPaths_
EgammaHLTTrackIsolation * hltPhoTrkIsolAlgo_
std::vector< std::pair< std::string, std::string > > l1PreAndSeedFilters_
double hltEleTrkIsolOuterCone_
void fillIsolData(const reco::GsfElectron &ele, OffEle::IsolData &isolData)
Definition: config.py:1
void fillHLTData(const reco::GsfElectron &ele, OffEle::HLTData &hltData)
edm::EDGetTokenT< reco::TrackCollection > isolTrkToken
double hltEMIsolInnerConeEE_
edm::EDGetTokenT< reco::GsfElectronCollection > electronsToken
const std::vector< std::pair< TrigCodes::TrigBitSet, OffEgSel > > & trigCuts() const
std::vector< edm::ParameterSet > trigCutParams_
double hltEleTrkIsolInnerCone_
edm::Handle< HBHERecHitCollection > hbheHits_
double hltPhoTrkIsolPtMin_
double hltEleTrkIsolZSpan_
edm::EDGetTokenT< trigger::TriggerEvent > triggerSummaryToken
OffHelper & operator=(const OffHelper &)=delete
void fillHLTDataPho(const reco::Photon &pho, OffPho::HLTData &hltData)
double hltHadIsolInnerCone_
const trigger::TriggerEvent * trigEvt() const
double hltPhoTrkIsolZSpan_
std::vector< std::pair< std::string, int > > hltFiltersUsedWithNrCandsCut_
edm::EDGetTokenT< EcalRecHitCollection > ecalRecHitsEEToken
double hltEleTrkIsolRSpan_
double hltHadIsolOuterCone_
edm::EDGetTokenT< reco::PhotonCollection > photonsToken
static bool getHandle(const edm::Event &event, const edm::EDGetTokenT< T > &token, edm::Handle< T > &handle)
edm::EDGetTokenT< reco::BeamSpot > beamSpotToken
edm::Handle< HFRecHitCollection > hfHits_
edm::Handle< std::vector< reco::CaloJet > > recoJets_
double hltEleTrkIsolPtMin_
edm::ESHandle< MagneticField > magField_
edm::Handle< trigger::TriggerEvent > trigEvt_
edm::ESHandle< CaloGeometry > caloGeom_
double hltPhoTrkIsolInnerCone_
double hltEMIsolEtaSliceEE_
double hltEMIsolInnerConeEB_
edm::Handle< reco::GsfElectronCollection > recoEles_
edm::EDGetTokenT< edm::TriggerResults > trigResultsToken
T const * product() const
Definition: Handle.h:74
edm::EDGetTokenT< HFRecHitCollection > hfHitsToken
edm::Handle< edm::TriggerResults > trigResults_
edm::ESHandle< CaloTopology > caloTopology_
int makeOffEvt(const edm::Event &edmEvent, const edm::EventSetup &setup, egHLT::OffEvt &offEvent, const TrigCodes &trigCodes)
edm::EDGetTokenT< reco::CaloJetCollection > caloJetsToken
std::vector< std::string > l1PreScaledFilters_
edm::EDGetTokenT< EcalRecHitCollection > ecalRecHitsEBToken
edm::Handle< EcalRecHitCollection > eeRecHits_
int getHandles(const edm::Event &event, const edm::EventSetup &setup)
void setup(const edm::ParameterSet &conf, edm::ConsumesCollector &&iC)
double hltPhoTrkIsolOuterCone_
edm::Handle< CaloTowerCollection > caloTowers_
edm::Handle< EcalRecHitCollection > ebRecHits_
std::vector< std::string > hltFiltersUsed_
edm::Handle< reco::VertexCollection > recoVertices_
edm::ESHandle< EcalSeverityLevelAlgo > ecalSeverityLevel_
void setupTriggers(const HLTConfigProvider &config, const std::vector< std::string > &hltFiltersUsed, const TrigCodes &trigCodes)
EgammaHLTTrackIsolation * hltEleTrkIsolAlgo_
edm::Handle< reco::BeamSpot > beamSpot_
std::string hltTag_
Definition: event.py:1
edm::EDGetTokenT< reco::VertexCollection > vertexToken
int fillOffEleVec(std::vector< OffEle > &offEles)