test
CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
EgHLTOffHelper.cc
Go to the documentation of this file.
2 
3 
8 
10 
13 
19 
23 
24 #include <iostream>
25 
26 using namespace egHLT;
27 
28 
29 
31 {
34 }
35 
37 {
38 
39  ecalRecHitsEBToken = iC.consumes <EcalRecHitCollection > (conf.getParameter<edm::InputTag>("BarrelRecHitCollection"));
40  ecalRecHitsEEToken = iC.consumes <EcalRecHitCollection > (conf.getParameter<edm::InputTag>("EndcapRecHitCollection"));
41  caloJetsToken = iC.consumes <reco::CaloJetCollection > (conf.getParameter<edm::InputTag>("CaloJetCollection"));
42  isolTrkToken = iC.consumes <reco::TrackCollection > (conf.getParameter<edm::InputTag>("IsolTrackCollection"));
43  hbheHitsToken = iC.consumes <HBHERecHitCollection > (conf.getParameter<edm::InputTag>("HBHERecHitCollection"));
44  hfHitsToken = iC.consumes <HFRecHitCollection > (conf.getParameter<edm::InputTag>("HFRecHitCollection"));
45  electronsToken = iC.consumes <reco::GsfElectronCollection > (conf.getParameter<edm::InputTag>("ElectronCollection"));
46  photonsToken = iC.consumes <reco::PhotonCollection > (conf.getParameter<edm::InputTag>("PhotonCollection"));
47  triggerSummaryToken = iC.consumes <trigger::TriggerEvent> (conf.getParameter<edm::InputTag>("triggerSummaryLabel"));
48  hltTag_ = conf.getParameter<std::string>("hltTag");
49  beamSpotToken = iC.consumes <reco::BeamSpot > (conf.getParameter<edm::InputTag>("BeamSpotProducer"));
50  caloTowersToken = iC.consumes <CaloTowerCollection > (conf.getParameter<edm::InputTag>("CaloTowers"));
51  trigResultsToken = iC.consumes <edm::TriggerResults > (conf.getParameter<edm::InputTag>("TrigResults"));
52  vertexToken = iC.consumes <reco::VertexCollection > (conf.getParameter<edm::InputTag>("VertexCollection"));
53 
54  eleCuts_.setup(conf.getParameter<edm::ParameterSet>("eleCuts"));
55  eleLooseCuts_.setup(conf.getParameter<edm::ParameterSet>("eleLooseCuts"));
56  phoCuts_.setup(conf.getParameter<edm::ParameterSet>("phoCuts"));
57  phoLooseCuts_.setup(conf.getParameter<edm::ParameterSet>("phoLooseCuts"));
58 
59  //now we have the isolations completely configurable via python
60  hltEMIsolOuterCone_ = conf.getParameter<double>("hltEMIsolOuterCone");
61  hltEMIsolInnerConeEB_ = conf.getParameter<double>("hltEMIsolInnerConeEB");
62  hltEMIsolEtaSliceEB_ = conf.getParameter<double>("hltEMIsolEtaSliceEB");
63  hltEMIsolEtMinEB_ = conf.getParameter<double>("hltEMIsolEtMinEB");
64  hltEMIsolEMinEB_ = conf.getParameter<double>("hltEMIsolEMinEB");
65  hltEMIsolInnerConeEE_ = conf.getParameter<double>("hltEMIsolInnerConeEE");
66  hltEMIsolEtaSliceEE_ = conf.getParameter<double>("hltEMIsolEtaSliceEE");
67  hltEMIsolEtMinEE_ = conf.getParameter<double>("hltEMIsolEtMinEE");
68  hltEMIsolEMinEE_ = conf.getParameter<double>("hltEMIsolEMinEE");
69 
70  hltPhoTrkIsolPtMin_ = conf.getParameter<double>("hltPhoTrkIsolPtMin");
71  hltPhoTrkIsolOuterCone_ = conf.getParameter<double>("hltPhoTrkIsolOuterCone");
72  hltPhoTrkIsolInnerCone_ = conf.getParameter<double>("hltPhoTrkIsolInnerCone");
73  hltPhoTrkIsolZSpan_ = conf.getParameter<double>("hltPhoTrkIsolZSpan");
74  hltPhoTrkIsolRSpan_ = conf.getParameter<double>("hltPhoTrkIsolZSpan");
75  hltPhoTrkIsolCountTrks_ = conf.getParameter<bool>("hltPhoTrkIsolCountTrks");
76 
77  hltEleTrkIsolPtMin_ = conf.getParameter<double>("hltEleTrkIsolPtMin");
78  hltEleTrkIsolOuterCone_ = conf.getParameter<double>("hltEleTrkIsolOuterCone");
79  hltEleTrkIsolInnerCone_ = conf.getParameter<double>("hltEleTrkIsolInnerCone");
80  hltEleTrkIsolZSpan_ = conf.getParameter<double>("hltEleTrkIsolZSpan");
81  hltEleTrkIsolRSpan_ = conf.getParameter<double>("hltEleTrkIsolZSpan");
82 
83  hltHadIsolOuterCone_ = conf.getParameter<double>("hltHadIsolOuterCone");
84  hltHadIsolInnerCone_ = conf.getParameter<double>("hltHadIsolInnerCone");
85  hltHadIsolEtMin_ = conf.getParameter<double>("hltHadIsolEtMin");
86  hltHadIsolDepth_ = conf.getParameter<int>("hltHadIsolDepth");
87 
88  calHLTHcalIsol_ = conf.getParameter<bool>("calHLTHcalIsol");
89  calHLTEmIsol_ = conf.getParameter<bool>("calHLTEmIsol");
90  calHLTEleTrkIsol_ = conf.getParameter<bool>("calHLTEleTrkIsol");
91  calHLTPhoTrkIsol_ = conf.getParameter<bool>("calHLTPhoTrkIsol");
92 
93  trigCutParams_ = conf.getParameter<std::vector<edm::ParameterSet> >("triggerCuts"); //setupTriggers used to be in this function but had to be moved due to HLTConfigChanges (has to be called beginRun) so we have to save this for later.
94 
95  hltEleTrkIsolAlgo_ = new EgammaHLTTrackIsolation(hltEleTrkIsolPtMin_,hltEleTrkIsolOuterCone_,hltEleTrkIsolZSpan_,hltEleTrkIsolRSpan_,hltEleTrkIsolInnerCone_);
96  hltPhoTrkIsolAlgo_ = new EgammaHLTTrackIsolation(hltPhoTrkIsolPtMin_,hltPhoTrkIsolOuterCone_,hltPhoTrkIsolZSpan_,hltPhoTrkIsolRSpan_,hltPhoTrkIsolInnerCone_);
97 
98 
99 }
100 
101 //this code was taken out of OffHelper::setup due to HLTConfigProvider changes
102 //it still assumes that this is called only once
103 void OffHelper::setupTriggers(const HLTConfigProvider& hltConfig,const std::vector<std::string>& hltFiltersUsed, const TrigCodes& trigCodes)
104 {
105  hltFiltersUsed_ = hltFiltersUsed; //expensive but only do this once and faster ways could make things less clear
106  //now work out how many objects are requires to pass filter for it to accept
109  for(size_t filterNr=0;filterNr<hltFiltersUsed_.size();filterNr++){
110  hltFiltersUsedWithNrCandsCut_.push_back(std::make_pair(hltFiltersUsed_[filterNr],getMRObjs[filterNr]));
111  }
112 
113  //now loading the cuts for every trigger into our vector which stores them
114  //only load cuts for triggers that are in hltFiltersUsed
115 
116  for(size_t trigNr=0;trigNr<trigCutParams_.size();trigNr++) {
117  std::string trigName = trigCutParams_[trigNr].getParameter<std::string>("trigName");
118  if(std::find(hltFiltersUsed_.begin(),hltFiltersUsed_.end(),trigName)!=hltFiltersUsed_.end()){ //perhaps I should sort hltFiltersUsed_....
119  trigCuts_.push_back(std::make_pair(trigCodes.getCode(trigName),OffEgSel(trigCutParams_[trigNr])));
120  // std::cout<<trigName<<std::endl<<"between"<<std::endl<<trigCutParams_[trigNr]<<std::endl<<"after"<<std::endl;
121  }
122  }
123  trigCutParams_.clear();//dont need it any more, get rid of it
124 
125  //to make my life difficult, the scaled l1 paths are special
126  //and arent stored in trigger event
127  //to I have to figure out the path, see if it passes
128  //and then hunt down the l1 seed filter and use that to match to the pho/ele
129  //matching on l1 seed filter is not enough as that will be passed for normal
130  //electron triggers even if pre-scale hasnt fired
131  l1PreScaledFilters_.clear();
132  l1PreScaledPaths_.clear();
133  l1PreAndSeedFilters_.clear();
134  for(size_t filterNr=0;filterNr<hltFiltersUsed_.size();filterNr++){
135  if(hltFiltersUsed_[filterNr].find("hltPreL1")==0){ //l1 prescaled path
136  l1PreScaledFilters_.push_back(hltFiltersUsed_[filterNr]);
137  }
138  }
139 
141  if(l1PreScaledPaths_.size()==l1PreScaledFilters_.size()){
142  for(size_t pathNr=0;pathNr<l1PreScaledPaths_.size();pathNr++){
143 
145  //---Morse====
146  //std::cout<<l1PreScaledFilters_[pathNr]<<" "<<l1PreScaledPaths_[pathNr]<<" "<<l1SeedFilter<<std::endl;
147  //------------
148  l1PreAndSeedFilters_.push_back(std::make_pair(l1PreScaledFilters_[pathNr],l1SeedFilter));
149  }
150  }
151 }
152 
153 int OffHelper::makeOffEvt(const edm::Event& edmEvent,const edm::EventSetup& setup,egHLT::OffEvt& offEvent,const TrigCodes& c)
154 {
155  offEvent.clear();
156  int errCode=0; //excution stops as soon as an error is flagged
157  if(errCode==0) errCode = getHandles(edmEvent,setup);
158  if(errCode==0) errCode = fillOffEleVec(offEvent.eles());
159  if(errCode==0) errCode = fillOffPhoVec(offEvent.phos());
160  if(errCode==0) errCode = setTrigInfo(edmEvent, offEvent, c);
161  if(errCode==0) offEvent.setJets(recoJets_);
162  return errCode;
163 }
164 
165 
167 {
168  try {
169  setup.get<CaloGeometryRecord>().get(caloGeom_);
170  setup.get<CaloTopologyRecord>().get(caloTopology_);
171  //setup.get<EcalSeverityLevelAlgoRcd>().get(ecalSeverityLevel_);
172  }catch(cms::Exception& iException){
173  return errCodes::Geom;
174  }
175  try {
176  setup.get<IdealMagneticFieldRecord>().get(magField_);
177  }catch(cms::Exception& iException){
178  return errCodes::MagField;
179  }
180 
181  //get objects
182  if(!getHandle(event,triggerSummaryToken,trigEvt_)) return errCodes::TrigEvent; //must have this, otherwise skip event
183  if(!getHandle(event,trigResultsToken,trigResults_)) return errCodes::TrigEvent; //re using bit to minimise bug fix code changes
184  if(!getHandle(event,electronsToken,recoEles_)) return errCodes::OffEle; //need for electrons
185  if(!getHandle(event,photonsToken, recoPhos_)) return errCodes::OffPho; //need for photons
186  if(!getHandle(event,caloJetsToken,recoJets_)) return errCodes::OffJet; //need for electrons and photons
187  if(!getHandle(event,vertexToken,recoVertices_)) return errCodes::OffVertex; //need for eff vs nVertex
188 
189  //need for HLT isolations (rec hits also need for sigmaIPhiIPhi (ele/pho) and r9 pho)
193  if(!getHandle(event,hbheHitsToken, hbheHits_)) return errCodes::HBHERecHits; //I dont think we need hbhe rec-hits any more
194  if(!getHandle(event,hfHitsToken, hfHits_)) return errCodes::HFRecHits;//I dont think we need hf rec-hits any more
197 
198 
199  return 0;
200 }
201 
202 //this function coverts GsfElectrons to a format which is actually useful to me
203 int OffHelper::fillOffEleVec(std::vector<OffEle>& egHLTOffEles)
204 {
205  egHLTOffEles.clear();
206  egHLTOffEles.reserve(recoEles_->size());
207  for(reco::GsfElectronCollection::const_iterator gsfIter=recoEles_->begin(); gsfIter!=recoEles_->end();++gsfIter){
208  if(!gsfIter->ecalDrivenSeed()) continue; //avoid PF electrons (this is Eg HLT validation and HLT is ecal driven)
209 
210  int nVertex=0;
211  for(reco::VertexCollection::const_iterator nVit=recoVertices_->begin(); nVit!=recoVertices_->end();++nVit){
212  if( !nVit->isFake()
213  && nVit->ndof()>4
214  && std::fabs( nVit->z()<24.0)
215  && sqrt(nVit->x()*nVit->x() + nVit->y()*nVit->y())<2.0){nVertex++;}
216  }
217  //if(nVertex>20)std::cout<<"nVertex: "<<nVertex<<std::endl;
218  OffEle::EventData eventData;
219  eventData.NVertex=nVertex;
220 
221  OffEle::IsolData isolData;
222  fillIsolData(*gsfIter,isolData);
223 
224  OffEle::ClusShapeData clusShapeData;
225  fillClusShapeData(*gsfIter,clusShapeData);
226 
227  OffEle::HLTData hltData;
228  fillHLTData(*gsfIter,hltData);
229 
230  egHLTOffEles.push_back(OffEle(*gsfIter,clusShapeData,isolData,hltData,eventData));
231 
232  //now we would like to set the cut results
233  OffEle& ele = egHLTOffEles.back();
234  ele.setCutCode(eleCuts_.getCutCode(ele));
236 
237  std::vector<std::pair<TrigCodes::TrigBitSet,int> >trigCutsCutCodes;
238  for(size_t i=0;i<trigCuts_.size();i++) trigCutsCutCodes.push_back(std::make_pair(trigCuts_[i].first,trigCuts_[i].second.getCutCode(ele)));
239  ele.setTrigCutsCutCodes(trigCutsCutCodes);
240  }//end loop over gsf electron collection
241  return 0;
242 }
243 
245 {
251 
252  isolData.ptTrks=ele.dr03TkSumPt();
253  isolData.nrTrks=999; //no longer supported
254  isolData.em= ele.dr03EcalRecHitSumEt();
255  isolData.hadDepth1 = ele.dr03HcalDepth1TowerSumEt();
256  isolData.hadDepth2 = ele.dr03HcalDepth2TowerSumEt();
257 
258  //now time to do the HLT algos
259  if(calHLTHcalIsol_) isolData.hltHad=hcalIsolAlgo.getTowerESum(&ele);
260  else isolData.hltHad = 0.;
262  else isolData.hltTrksEle = 0.;
263  if(calHLTPhoTrkIsol_){
265  else isolData.hltTrksPho=hltPhoTrkIsolAlgo_->photonPtSum(&ele,isolTrks_.product(),false);
266  }
267  else isolData.hltTrksPho = 0.;
268  if(calHLTEmIsol_) isolData.hltEm = ecalIsolAlgoEB.getEtSum(&ele) +
269  ecalIsolAlgoEE.getEtSum(&ele);
270  else isolData.hltEm = 0.;
271 
272 }
273 
274 
276 {
277  clusShapeData.sigmaEtaEta = ele.sigmaEtaEta();
278  clusShapeData.sigmaIEtaIEta = ele.sigmaIetaIeta();
279  double e5x5 = ele.e5x5();
280  if(e5x5!=0.){
281  clusShapeData.e1x5Over5x5 = ele.e1x5()/e5x5;
282  clusShapeData.e2x5MaxOver5x5 = ele.e2x5Max()/e5x5;
283  }else{
284  clusShapeData.e1x5Over5x5 = -1;
285  clusShapeData.e2x5MaxOver5x5 = -1;
286  }
287 
288  //want to calculate r9, sigmaPhiPhi and sigmaIPhiIPhi, have to do old fashioned way
289  const reco::BasicCluster& seedClus = *(ele.superCluster()->seed());
290  const DetId seedDetId = seedClus.hitsAndFractions()[0].first; //note this may not actually be the seed hit but it doesnt matter because all hits will be in the barrel OR endcap
291  if(seedDetId.subdetId()==EcalBarrel){
292  std::vector<float> stdCov = EcalClusterTools::covariances(seedClus,ebRecHits_.product(),caloTopology_.product(),caloGeom_.product());
293  std::vector<float> crysCov = EcalClusterTools::localCovariances(seedClus,ebRecHits_.product(),caloTopology_.product());
294  clusShapeData.sigmaPhiPhi = sqrt(stdCov[2]);
295  clusShapeData.sigmaIPhiIPhi = sqrt(crysCov[2]);
296  if(ele.superCluster()->rawEnergy()!=0.){
297  clusShapeData.r9 = EcalClusterTools::e3x3(seedClus,ebRecHits_.product(),caloTopology_.product()) / ele.superCluster()->rawEnergy();
298  }else clusShapeData.r9 = -1.;
299 
300  }else{
301  std::vector<float> stdCov = EcalClusterTools::covariances(seedClus,eeRecHits_.product(),caloTopology_.product(),caloGeom_.product());
302  std::vector<float> crysCov = EcalClusterTools::localCovariances(seedClus,eeRecHits_.product(),caloTopology_.product());
303  clusShapeData.sigmaPhiPhi = sqrt(stdCov[2]);
304  clusShapeData.sigmaIPhiIPhi = sqrt(crysCov[2]);
305  if(ele.superCluster()->rawEnergy()!=0.){
306  clusShapeData.r9 = EcalClusterTools::e3x3(seedClus,eeRecHits_.product(),caloTopology_.product()) / ele.superCluster()->rawEnergy();
307  }else clusShapeData.r9 = -1.;
308  }
309 }
310 
311 //reco approximations of hlt quantities
313 {
314  if(ele.closestCtfTrackRef().isNonnull() &&
315  ele.closestCtfTrackRef()->extra().isNonnull()){
316  reco::TrackRef ctfTrack = ele.closestCtfTrackRef();
317  reco::SuperClusterRef scClus = ele.superCluster();
318 
319  //dEta
320  const reco::BeamSpot::Point& bsPos = beamSpot_->position();
321  math::XYZPoint scPosWRTVtx(scClus->x()-bsPos.x(), scClus->y()-bsPos.y() , scClus->z()-ctfTrack->vz());
322  hltData.dEtaIn = fabs(scPosWRTVtx.eta()-ctfTrack->eta());
323 
324  //dPhi: lifted straight from hlt code
325  float deltaPhi=fabs(ctfTrack->outerPosition().phi()-scClus->phi());
326  if(deltaPhi>6.283185308) deltaPhi -= 6.283185308;
327  if(deltaPhi>3.141592654) deltaPhi = 6.283185308-deltaPhi;
328  hltData.dPhiIn = deltaPhi;
329 
330  //invEInvP
331  if(ele.ecalEnergy()!=0 && ctfTrack->p()!=0) hltData.invEInvP= 1/ele.ecalEnergy() - 1/ctfTrack->p();
332  else hltData.invEInvP = 0;
333  }else{
334  hltData.dEtaIn =999;
335  hltData.dPhiIn =999;
336  hltData.invEInvP = 999;
337 
338  }
339 
340  //Now get HLT p4 from triggerobject
342  //trigTools::fillHLTposition(phos(),hltFiltersUsed_,l1PreAndSeedFilters_,evtTrigBits,trigEvt_.product(),hltTag_);
343 }
344 
345 
347 {
348  //Now get HLT p4 from triggerobject
350  //trigTools::fillHLTposition(phos(),hltFiltersUsed_,l1PreAndSeedFilters_,evtTrigBits,trigEvt_.product(),hltTag_);
351 }
352 
353 
354 
355 
356 //this function coverts Photons to a format which more useful to me
357 int OffHelper::fillOffPhoVec(std::vector<OffPho>& egHLTOffPhos)
358 {
359  egHLTOffPhos.clear();
360  egHLTOffPhos.reserve(recoPhos_->size());
361  for(reco::PhotonCollection::const_iterator phoIter=recoPhos_->begin(); phoIter!=recoPhos_->end();++phoIter){
362 
363  OffPho::IsolData isolData;
364  OffPho::ClusShapeData clusShapeData;
365 
366  fillIsolData(*phoIter,isolData);
367  fillClusShapeData(*phoIter,clusShapeData);
368 
369  OffPho::HLTData hltData;
370  fillHLTDataPho(*phoIter,hltData);
371 
372  egHLTOffPhos.push_back(OffPho(*phoIter,clusShapeData,isolData,hltData));
373  OffPho& pho = egHLTOffPhos.back();
374  pho.setCutCode(phoCuts_.getCutCode(pho));
376 
377  std::vector<std::pair<TrigCodes::TrigBitSet,int> >trigCutsCutCodes;
378  for(size_t i=0;i<trigCuts_.size();i++) trigCutsCutCodes.push_back(std::make_pair(trigCuts_[i].first,trigCuts_[i].second.getCutCode(pho)));
379  pho.setTrigCutsCutCodes(trigCutsCutCodes);
380 
381 
382  }//end loop over photon collection
383  return 0;
384 }
385 
386 
388 {
394 
395  isolData.nrTrks = pho.nTrkHollowConeDR03();
396  isolData.ptTrks = pho.trkSumPtHollowConeDR03();
397  isolData.em = pho.ecalRecHitSumEtConeDR03();
398  isolData.had = pho.hcalTowerSumEtConeDR03();
399 
400  //now calculate hlt algos
401  if(calHLTHcalIsol_) isolData.hltHad=hcalIsolAlgo.getTowerESum(&pho);
402  else isolData.hltHad = 0.;
403  if(calHLTPhoTrkIsol_){
405  else isolData.hltTrks=hltPhoTrkIsolAlgo_->photonPtSum(&pho,isolTrks_.product(),false);
406  }
407  else isolData.hltTrks = 0.;
408  if(calHLTEmIsol_) isolData.hltEm = ecalIsolAlgoEB.getEtSum(&pho) +
409  ecalIsolAlgoEE.getEtSum(&pho);
410  else isolData.hltEm = 0.;
411 
412 }
413 
415 {
416  clusShapeData.sigmaEtaEta = pho.sigmaEtaEta();
417  clusShapeData.sigmaIEtaIEta = pho.sigmaIetaIeta();
418  double e5x5 = pho.e5x5();
419  if(e5x5!=0.){ //even though it is almost impossible for this to be 0., this code can never ever crash under any situation
420  clusShapeData.e1x5Over5x5 = pho.e1x5()/e5x5;
421  clusShapeData.e2x5MaxOver5x5 = pho.e2x5()/e5x5;
422  }else{
423  clusShapeData.e1x5Over5x5 = -1;
424  clusShapeData.e2x5MaxOver5x5 = -1;
425  }
426  clusShapeData.r9 = pho.r9();
427 
428  //sigmaPhiPhi and sigmaIPhiIPhi are not in object (and nor should they be) so have to get them old fashioned way
429  //need to figure out if its in the barrel or endcap
430  //get the first hit of the cluster and figure out if its barrel or endcap
431  const reco::BasicCluster& seedClus = *(pho.superCluster()->seed());
432  const DetId seedDetId = seedClus.hitsAndFractions()[0].first; //note this may not actually be the seed hit but it doesnt matter because all hits will be in the barrel OR endcap (it is also incredably inefficient as it getHitsByDetId passes the vector by value not reference
433  if(seedDetId.subdetId()==EcalBarrel){
434  std::vector<float> stdCov = EcalClusterTools::covariances(seedClus,ebRecHits_.product(),caloTopology_.product(),caloGeom_.product());
435  std::vector<float> crysCov = EcalClusterTools::localCovariances(seedClus,ebRecHits_.product(),caloTopology_.product());
436  clusShapeData.sigmaPhiPhi = sqrt(stdCov[2]);
437  clusShapeData.sigmaIPhiIPhi = sqrt(crysCov[2]);
438  }else{
439  std::vector<float> stdCov = EcalClusterTools::covariances(seedClus,eeRecHits_.product(),caloTopology_.product(),caloGeom_.product());
440  std::vector<float> crysCov = EcalClusterTools::localCovariances(seedClus,eeRecHits_.product(),caloTopology_.product());
441 
442  clusShapeData.sigmaPhiPhi = sqrt(stdCov[2]);
443  clusShapeData.sigmaIPhiIPhi = sqrt(crysCov[2]);
444  }
445 }
446 
447 int OffHelper::setTrigInfo(const edm::Event & edmEvent, egHLT::OffEvt& offEvent, const TrigCodes& trigCodes)
448 {
450  //the l1 prescale paths dont have a filter with I can figure out if it passed or failed with so have to use TriggerResults
451  if(l1PreScaledPaths_.size()==l1PreScaledFilters_.size()){ //check to ensure both vectors have same number of events incase of screw ups
452  const edm::TriggerNames & triggerNames = edmEvent.triggerNames(*trigResults_);
453  for(size_t pathNr=0;pathNr<l1PreScaledPaths_.size();pathNr++){ //now we have to check the prescaled l1 trigger paths
454  unsigned int pathIndex = triggerNames.triggerIndex(l1PreScaledPaths_[pathNr]);
455  if(pathIndex<trigResults_->size() && trigResults_->accept(pathIndex)){
456  evtTrigBits |= trigCodes.getCode(l1PreScaledFilters_[pathNr]);
457  }
458  }
459  }
460 
461  offEvent.setEvtTrigBits(evtTrigBits);
462 
465  return 0;
466 }
void setTrigCutsCutCodes(const std::vector< std::pair< TrigCodes::TrigBitSet, int > > &trigCutsCutCodes)
Definition: EgHLTOffPho.h:95
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
void fillHLTposition(T &obj, U &hltData, const std::vector< std::string > &filters, const trigger::TriggerEvent *trigEvt, const std::string &hltTag)
double hltEMIsolEtaSliceEB_
edm::Handle< reco::TrackCollection > isolTrks_
virtual edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const
Definition: Event.cc:234
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:252
The single EDProduct to be saved for each event (AOD case)
Definition: TriggerEvent.h:25
reco::SuperClusterRef superCluster() const
Ref to SuperCluster.
int fillOffPhoVec(std::vector< OffPho > &offPhos)
double hltPhoTrkIsolRSpan_
TrigBitSet getCode(const char *descript) const
edm::EDGetTokenT< CaloTowerCollection > caloTowersToken
float e5x5() const
Definition: Photon.h:221
float hcalTowerSumEtConeDR03() const
Hcal isolation sum.
Definition: Photon.h:411
void setLooseCutCode(int code)
Definition: EgHLTOffEle.h:109
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 getCutCode(const OffEle &ele, int cutMask=~0x0) const
int setTrigInfo(const edm::Event &edmEvent, egHLT::OffEvt &offEvent, const TrigCodes &trigCodes)
double hltEMIsolOuterCone_
OffEgSel eleLooseCuts_
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
float e1x5() const
Shower shape variables.
Definition: Photon.h:218
edm::EDGetTokenT< HBHERecHitCollection > hbheHitsToken
std::vector< std::string > l1PreScaledPaths_
EgammaHLTTrackIsolation * hltPhoTrkIsolAlgo_
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
std::vector< std::pair< std::string, std::string > > l1PreAndSeedFilters_
double hltEleTrkIsolOuterCone_
void clear()
Definition: EgHLTOffEvt.cc:5
math::XYZPoint Point
point in the space
Definition: BeamSpot.h:29
void fillIsolData(const reco::GsfElectron &ele, OffEle::IsolData &isolData)
int photonTrackCount(const reco::RecoCandidate *const recocand, const reco::TrackCollection *isoTracks, bool useVertex)
float dr03HcalDepth2TowerSumEt() const
Definition: GsfElectron.h:494
void fillHLTData(const reco::GsfElectron &ele, OffEle::HLTData &hltData)
float trkSumPtHollowConeDR03() const
Definition: Photon.h:425
float e2x5Max() const
Definition: GsfElectron.h:419
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
edm::EDGetTokenT< reco::TrackCollection > isolTrkToken
double hltEMIsolInnerConeEE_
std::vector< GsfElectron > GsfElectronCollection
collection of GsfElectron objects
void setEvtTrigBits(TrigCodes::TrigBitSet bits)
Definition: EgHLTOffEvt.h:55
edm::EDGetTokenT< reco::GsfElectronCollection > electronsToken
std::vector< edm::ParameterSet > trigCutParams_
double hltEleTrkIsolInnerCone_
TrackRef closestCtfTrackRef() const
Definition: GsfElectron.h:199
edm::Handle< HBHERecHitCollection > hbheHits_
double hltPhoTrkIsolPtMin_
double hltEleTrkIsolZSpan_
edm::EDGetTokenT< trigger::TriggerEvent > triggerSummaryToken
void fillHLTDataPho(const reco::Photon &pho, OffPho::HLTData &hltData)
float sigmaIetaIeta() const
Definition: GsfElectron.h:416
unsigned int triggerIndex(std::string const &name) const
Definition: TriggerNames.cc:32
double hltHadIsolInnerCone_
float electronPtSum(const reco::Track *const tr, const reco::TrackCollection *isoTracks)
Get Pt sum of tracks inside an isolation cone for electrons.
void setup(const edm::ParameterSet &)
T sqrt(T t)
Definition: SSEVec.h:18
std::string getL1SeedFilterOfPath(const HLTConfigProvider &hltConfig, const std::string &path)
virtual SuperClusterRef superCluster() const
reference to a SuperCluster
Definition: GsfElectron.h:182
double hltPhoTrkIsolZSpan_
std::vector< std::pair< std::string, int > > hltFiltersUsedWithNrCandsCut_
edm::EDGetTokenT< EcalRecHitCollection > ecalRecHitsEEToken
double hltEleTrkIsolRSpan_
float sigmaIetaIeta() const
Definition: Photon.h:224
double hltHadIsolOuterCone_
std::vector< int > getMinNrObjsRequiredByFilter(const std::vector< std::string > &filterName)
edm::EDGetTokenT< reco::PhotonCollection > photonsToken
float dr03TkSumPt() const
Definition: GsfElectron.h:491
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_
float dr03HcalDepth1TowerSumEt() const
Definition: GsfElectron.h:493
void setLooseCutCode(int code)
Definition: EgHLTOffPho.h:92
float e2x5() const
Definition: Photon.h:219
edm::Handle< std::vector< reco::CaloJet > > recoJets_
float sigmaEtaEta() const
Definition: Photon.h:223
double hltEleTrkIsolPtMin_
TrigCodes::TrigBitSet getFiltersPassed(const std::vector< std::pair< std::string, int > > &filters, const trigger::TriggerEvent *trigEvt, const std::string &hltTag, const TrigCodes &trigCodes)
int nTrkHollowConeDR03() const
Definition: Photon.h:429
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
void setCutCode(int code)
Definition: EgHLTOffEle.h:108
edm::ESHandle< MagneticField > magField_
edm::Handle< trigger::TriggerEvent > trigEvt_
edm::ESHandle< CaloGeometry > caloGeom_
const std::vector< OffPho > & phos() const
Definition: EgHLTOffEvt.h:48
double hltPhoTrkIsolInnerCone_
Definition: DetId.h:18
void setCutCode(int code)
Definition: EgHLTOffPho.h:91
double hltEMIsolEtaSliceEE_
double hltEMIsolInnerConeEB_
edm::Handle< reco::GsfElectronCollection > recoEles_
edm::EDGetTokenT< edm::TriggerResults > trigResultsToken
T const * product() const
Definition: Handle.h:81
edm::EDGetTokenT< HFRecHitCollection > hfHitsToken
edm::Handle< edm::TriggerResults > trigResults_
edm::ESHandle< CaloTopology > caloTopology_
float e1x5() const
Definition: GsfElectron.h:418
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
int makeOffEvt(const edm::Event &edmEvent, const edm::EventSetup &setup, egHLT::OffEvt &offEvent, const TrigCodes &trigCodes)
std::vector< Photon > PhotonCollection
collectin of Photon objects
Definition: PhotonFwd.h:9
const T & get() const
Definition: EventSetup.h:56
T const * product() const
Definition: ESHandle.h:86
edm::EDGetTokenT< reco::CaloJetCollection > caloJetsToken
std::vector< std::string > l1PreScaledFilters_
float ecalEnergy() const
Definition: GsfElectron.h:785
void setJets(edm::Handle< std::vector< reco::CaloJet > > jets)
Definition: EgHLTOffEvt.h:56
float dr03EcalRecHitSumEt() const
Definition: GsfElectron.h:492
edm::EDGetTokenT< EcalRecHitCollection > ecalRecHitsEBToken
edm::Handle< EcalRecHitCollection > eeRecHits_
const std::vector< OffEle > & eles() const
Definition: EgHLTOffEvt.h:46
float e5x5() const
Definition: GsfElectron.h:420
void setTrigCutsCutCodes(const std::vector< std::pair< TrigCodes::TrigBitSet, int > > &trigCutsCutCodes)
Definition: EgHLTOffEle.h:111
int getHandles(const edm::Event &event, const edm::EventSetup &setup)
void setup(const edm::ParameterSet &conf, edm::ConsumesCollector &&iC)
double hltPhoTrkIsolOuterCone_
float ecalRecHitSumEtConeDR03() const
Isolation variables in cone dR=0.3.
Definition: Photon.h:409
edm::Handle< CaloTowerCollection > caloTowers_
edm::Handle< EcalRecHitCollection > ebRecHits_
std::vector< std::string > hltFiltersUsed_
edm::Handle< reco::VertexCollection > recoVertices_
float r9() const
Definition: Photon.h:227
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_
void setFiltersObjPasses(std::vector< T > &objs, const std::vector< std::string > &filters, const std::vector< std::pair< std::string, std::string > > &l1PreAndSeedFilters, const TrigCodes::TrigBitSet &evtTrigBits, const TrigCodes &trigCodes, const trigger::TriggerEvent *trigEvt, const std::string &hltTag)
tuple size
Write out results.
float photonPtSum(const reco::RecoCandidate *const recocand, const reco::TrackCollection *isoTracks, bool useVertex)
void translateFiltersToPathNames(const HLTConfigProvider &hltConfig, const std::vector< std::string > &filters, std::vector< std::string > &paths)
std::vector< CaloJet > CaloJetCollection
collection of CaloJet objects
float sigmaEtaEta() const
Definition: GsfElectron.h:415
edm::EDGetTokenT< reco::VertexCollection > vertexToken
int fillOffEleVec(std::vector< OffEle > &offEles)
virtual GsfTrackRef gsfTrack() const
reference to a GsfTrack
Definition: GsfElectron.h:183
std::bitset< maxNrBits_ > TrigBitSet