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 
22 
31 
37 
42 
45 
51 
54 
56 class HLTConfigProvider;
59 
60 namespace egHLT {
61 
62  class OffHelper {
63  private:
64  OffEgSel eleLooseCuts_; //loose selection cuts (loose has no relation to other 'loose' cuts)
65  OffEgSel eleCuts_; //normal selection cuts
66  OffEgSel phoLooseCuts_; //loose selection cuts (loose has no relation to other 'loose' cuts)
67  OffEgSel phoCuts_; //normal selection cuts
68 
69  std::vector<std::pair<TrigCodes::TrigBitSet, OffEgSel> > trigCuts_; //non sorted vector (for now)
70 
84 
89 
94 
100 
105 
108 
110 
112 
114  std::vector<std::string> hltFiltersUsed_;
115  std::vector<std::pair<std::string, int> >
116  hltFiltersUsedWithNrCandsCut_; //stores the filter name + number of candidates required to pass that filter for it to accept
117  std::vector<std::pair<std::string, std::string> >
118  l1PreAndSeedFilters_; //filter names of a l1 prescaler and the corresponding l1 seed filter
119  std::vector<std::string> l1PreScaledPaths_; //l1 pre-scaled path names
120  std::vector<std::string> l1PreScaledFilters_; //l1 pre scale filters
121 
122  //allow us to recompute e/gamma HLT isolations (note we also have em and hcal but they have to be declared for every event)
123  //which is awkward and I havent thought of a good way around it yet
126 
127  //our hlt isolation parameters...
128  //ecal
138  //tracker
150  //hcal
155  //flags to disable calculations if same as reco (saves time)
160 
161  std::vector<edm::ParameterSet> trigCutParams_; //probably the least bad option
162 
163  public:
165  : eleLooseCuts_(),
166  eleCuts_(),
167  phoLooseCuts_(),
168  phoCuts_(),
169  hltEleTrkIsolAlgo_(nullptr),
170  hltPhoTrkIsolAlgo_(nullptr) {}
171  OffHelper& operator=(const OffHelper&) = delete;
172  OffHelper(const OffHelper&) = delete;
173  ~OffHelper();
174 
175  void setup(const edm::ParameterSet& conf, edm::ConsumesCollector&& iC);
177  const std::vector<std::string>& hltFiltersUsed,
178  const TrigCodes& trigCodes);
179 
180  //int is the error code, 0 = no error
181  //it should never throw, print to screen or crash, this is the only error reporting it does
182  int makeOffEvt(const edm::Event& edmEvent,
183  const edm::EventSetup& setup,
184  egHLT::OffEvt& offEvent,
185  const TrigCodes& trigCodes);
186 
187  int getHandles(const edm::Event& event, const edm::EventSetup& setup);
188  int fillOffEleVec(std::vector<OffEle>& offEles);
189  int fillOffPhoVec(std::vector<OffPho>& offPhos);
190  int setTrigInfo(const edm::Event& edmEvent, egHLT::OffEvt& offEvent, const TrigCodes& trigCodes);
191 
192  void fillIsolData(const reco::GsfElectron& ele, OffEle::IsolData& isolData);
193  void fillClusShapeData(const reco::GsfElectron& ele, OffEle::ClusShapeData& clusShapeData);
194  void fillHLTData(const reco::GsfElectron& ele, OffEle::HLTData& hltData);
195 
196  void fillIsolData(const reco::Photon& pho, OffPho::IsolData& isolData);
197  void fillClusShapeData(const reco::Photon& pho, OffPho::ClusShapeData& clusShapeData);
198  void fillHLTDataPho(const reco::Photon& pho, OffPho::HLTData& hltData);
199 
200  //tempory debugging functions
201  const trigger::TriggerEvent* trigEvt() const { return trigEvt_.product(); }
202  const std::vector<std::pair<TrigCodes::TrigBitSet, OffEgSel> >& trigCuts() const { return trigCuts_; }
203 
204  template <class T>
206 
208  };
209 
210  template <class T>
212  bool success = event.getByToken(token, handle);
213  return success && handle.product();
214  }
215 } // namespace egHLT
216 
217 #endif
double hltEMIsolEtaSliceEB_
edm::ESGetToken< CaloTopology, CaloTopologyRecord > caloTopoToken_
edm::Handle< reco::TrackCollection > isolTrks_
The single EDProduct to be saved for each event (AOD case)
Definition: TriggerEvent.h:26
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_
int setTrigInfo(const edm::Event &edmEvent, egHLT::OffEvt &offEvent, const TrigCodes &trigCodes)
std::vector< std::pair< std::string, std::string > > l1PreAndSeedFilters_
double hltEMIsolOuterCone_
T const * product() const
Definition: Handle.h:70
OffEgSel eleLooseCuts_
const std::vector< std::pair< TrigCodes::TrigBitSet, OffEgSel > > & trigCuts() const
edm::EDGetTokenT< HBHERecHitCollection > hbheHitsToken
std::vector< std::string > l1PreScaledPaths_
EgammaHLTTrackIsolation * hltPhoTrkIsolAlgo_
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
std::vector< edm::ParameterSet > trigCutParams_
double hltEleTrkIsolInnerCone_
edm::Handle< HBHERecHitCollection > hbheHits_
double hltPhoTrkIsolPtMin_
std::vector< std::pair< std::string, int > > hltFiltersUsedWithNrCandsCut_
double hltEleTrkIsolZSpan_
edm::EDGetTokenT< trigger::TriggerEvent > triggerSummaryToken
const EcalPFRecHitThresholds * thresholds
OffHelper & operator=(const OffHelper &)=delete
void fillHLTDataPho(const reco::Photon &pho, OffPho::HLTData &hltData)
double hltHadIsolInnerCone_
double hltPhoTrkIsolZSpan_
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_
const trigger::TriggerEvent * trigEvt() const
edm::Handle< reco::GsfElectronCollection > recoEles_
edm::EDGetTokenT< edm::TriggerResults > trigResultsToken
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_
std::vector< std::pair< TrigCodes::TrigBitSet, OffEgSel > > trigCuts_
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_
edm::ESGetToken< CaloGeometry, CaloGeometryRecord > caloGeomToken_
edm::ESGetToken< EcalSeverityLevelAlgo, EcalSeverityLevelAlgoRcd > ecalSeverityToken_
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magFieldToken_
Definition: event.py:1
edm::EDGetTokenT< reco::VertexCollection > vertexToken
int fillOffEleVec(std::vector< OffEle > &offEles)