CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HLTElectronMissingHitsFilter.cc
Go to the documentation of this file.
1 
14 
19 
21  candTag_ = iConfig.getParameter< edm::InputTag > ("candTag");
22  candToken_ = consumes<trigger::TriggerFilterObjectWithRefs>(candTag_);
23  electronTag_ = iConfig.getParameter< edm::InputTag >("electronProducer");
24  electronToken_ = consumes<reco::ElectronCollection>(electronTag_);
25  barrelcut_ = iConfig.getParameter<int> ("barrelcut");
26  endcapcut_ = iConfig.getParameter<int> ("endcapcut");
27  ncandcut_ = iConfig.getParameter<int> ("ncandcut");
28 }
29 
31 {}
32 
36  desc.add<edm::InputTag>("candTag", edm::InputTag("hltSingleElectronOneOEMinusOneOPFilter"));
37  desc.add<edm::InputTag>("electronProducer", edm::InputTag("hltL1NonIsoHLTNonIsoSingleElectronEt15LTIPixelMatchFilte"));
38  desc.add<int>("barrelcut", 0);
39  desc.add<int>("endcapcut", 0);
40  desc.add<int>("ncandcut", 1);
41  descriptions.add("hltElectronMissingHitsFilter", desc);
42 }
43 
45 
46  using namespace trigger;
47 
48  if (saveTags())
49  filterproduct.addCollectionTag(electronTag_);
50 
52  iEvent.getByToken(candToken_,PrevFilterOutput);
53 
54  std::vector<edm::Ref<reco::RecoEcalCandidateCollection> > recoecalcands;
55  PrevFilterOutput->getObjects(TriggerCluster, recoecalcands);
56  if(recoecalcands.empty())
57  PrevFilterOutput->getObjects(TriggerPhoton,recoecalcands);
58 
60  iEvent.getByToken(electronToken_,electronHandle);
61 
62  int n(0);
63 
65  for (unsigned int i=0; i<recoecalcands.size(); i++) {
66 
67  reco::SuperClusterRef scCand = recoecalcands[i]->superCluster();
68  for(reco::ElectronCollection::const_iterator iElectron = electronHandle->begin(); iElectron != electronHandle->end(); iElectron++) {
69  reco::ElectronRef electronref(reco::ElectronRef(electronHandle, iElectron - electronHandle->begin()));
70  const reco::SuperClusterRef scEle = electronref->superCluster();
71  if(scCand == scEle) {
72 
73  int missinghits = 0;
74  if (electronref->gsfTrack().isNonnull()){
75  missinghits = electronref->gsfTrack()->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS);
76  } else if (electronref->track().isNonnull()){
77  missinghits = electronref->track()->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS);
78  }else{
79  std::cerr << "Electron without track..." << std::endl;
80  }
81 
82  if(fabs(electronref->eta()) < 1.479) {
83  if (missinghits < barrelcut_) {
84  n++;
85  filterproduct.addObject(TriggerElectron, electronref);
86  }
87  }
88 
89  if(fabs(electronref->eta()) > 1.479) {
90  if (missinghits < endcapcut_) {
91  n++;
92  filterproduct.addObject(TriggerElectron, electronref);
93  }
94  }
95  }
96  }
97  }
98 
99  bool accept(n >= ncandcut_);
100 
101  return accept;
102 }
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:252
HLTElectronMissingHitsFilter(const edm::ParameterSet &)
edm::EDGetTokenT< reco::ElectronCollection > electronToken_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:464
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
Definition: TopDQMHelpers.h:24
void addObject(int id, const reco::RecoEcalCandidateRef &ref)
setters for L3 collections: (id=physics type, and Ref&lt;C&gt;)
int iEvent
Definition: GenABIO.cc:230
ParameterDescriptionBase * add(U const &iLabel, T const &value)
virtual bool hltFilter(edm::Event &, const edm::EventSetup &, trigger::TriggerFilterObjectWithRefs &filterproduct) const override
edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > candToken_
static void makeHLTFilterDescription(edm::ParameterSetDescription &desc)
Definition: HLTFilter.cc:29
void addCollectionTag(const edm::InputTag &collectionTag)
collectionTags
void add(std::string const &label, ParameterSetDescription const &psetDescription)
bool saveTags() const
Definition: HLTFilter.h:45
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)