CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HLTEgammaGenericQuadraticEtaFilter.cc
Go to the documentation of this file.
1 
9 
11 
15 
21 
22 //
23 // constructors and destructor
24 //
26  candTag_ = iConfig.getParameter< edm::InputTag > ("candTag");
27  isoTag_ = iConfig.getParameter< edm::InputTag > ("isoTag");
28  nonIsoTag_ = iConfig.getParameter< edm::InputTag > ("nonIsoTag");
29 
30  lessThan_ = iConfig.getParameter<bool> ("lessThan");
31  useEt_ = iConfig.getParameter<bool> ("useEt");
32  etaBoundaryEB12_ = iConfig.getParameter<double> ("etaBoundaryEB12");
33  etaBoundaryEE12_ = iConfig.getParameter<double> ("etaBoundaryEE12");
34  thrRegularEB1_ = iConfig.getParameter<double> ("thrRegularEB1");
35  thrRegularEE1_ = iConfig.getParameter<double> ("thrRegularEE1");
36  thrOverEEB1_ = iConfig.getParameter<double> ("thrOverEEB1");
37  thrOverEEE1_ = iConfig.getParameter<double> ("thrOverEEE1");
38  thrOverE2EB1_ = iConfig.getParameter<double> ("thrOverE2EB1");
39  thrOverE2EE1_ = iConfig.getParameter<double> ("thrOverE2EE1");
40  thrRegularEB2_ = iConfig.getParameter<double> ("thrRegularEB2");
41  thrRegularEE2_ = iConfig.getParameter<double> ("thrRegularEE2");
42  thrOverEEB2_ = iConfig.getParameter<double> ("thrOverEEB2");
43  thrOverEEE2_ = iConfig.getParameter<double> ("thrOverEEE2");
44  thrOverE2EB2_ = iConfig.getParameter<double> ("thrOverE2EB2");
45  thrOverE2EE2_ = iConfig.getParameter<double> ("thrOverE2EE2");
46 
47  ncandcut_ = iConfig.getParameter<int> ("ncandcut");
48  doIsolated_ = iConfig.getParameter<bool> ("doIsolated");
49 
50  L1IsoCollTag_= iConfig.getParameter< edm::InputTag > ("L1IsoCand");
51  L1NonIsoCollTag_= iConfig.getParameter< edm::InputTag > ("L1NonIsoCand");
52 
53  candToken_ = consumes<trigger::TriggerFilterObjectWithRefs>(candTag_);
54  isoToken_ = consumes<reco::RecoEcalCandidateIsolationMap>(isoTag_);
55  if(!doIsolated_) nonIsoToken_ = consumes<reco::RecoEcalCandidateIsolationMap>(nonIsoTag_);
56 
57 //register your products
58  produces<trigger::TriggerFilterObjectWithRefs>();
59 }
60 
61 void
65  desc.add<edm::InputTag>("candTag",edm::InputTag("hltEGIsolFilter"));
66  desc.add<edm::InputTag>("isoTag",edm::InputTag("hltEGIsol"));
67  desc.add<edm::InputTag>("nonIsoTag",edm::InputTag("hltEGNonIsol"));
68  desc.add<bool>("lessThan",true);
69  desc.add<bool>("useEt",true);
70  desc.add<double>("etaBoundaryEB12",1.0);
71  desc.add<double>("etaBoundaryEE12",2.0);
72  desc.add<double>("thrRegularEB1",4.0);
73  desc.add<double>("thrRegularEE1",6.0);
74  desc.add<double>("thrOverEEB1",0.0020);
75  desc.add<double>("thrOverEEE1",0.0020);
76  desc.add<double>("thrOverE2EB1",0.0);
77  desc.add<double>("thrOverE2EE1",0.0);
78  desc.add<double>("thrRegularEB2",6.0);
79  desc.add<double>("thrRegularEE2",4.0);
80  desc.add<double>("thrOverEEB2",0.0020);
81  desc.add<double>("thrOverEEE2",0.0020);
82  desc.add<double>("thrOverE2EB2",0.0);
83  desc.add<double>("thrOverE2EE2",0.0);
84  desc.add<int>("ncandcut",1);
85  desc.add<bool>("doIsolated",false);
86  desc.add<edm::InputTag>("L1IsoCand",edm::InputTag("hltL1IsoRecoEcalCandidate"));
87  desc.add<edm::InputTag>("L1NonIsoCand",edm::InputTag("hltL1NonIsoRecoEcalCandidate"));
88  descriptions.add("hltEgammaGenericQuadraticEtaFilter",desc);
89 }
90 
92 
93 
94 // ------------ method called to produce the data ------------
95 bool
97 {
98  using namespace trigger;
99  if ( saveTags() ) {
100  filterproduct.addCollectionTag(L1IsoCollTag_);
101  if ( not doIsolated_) {
102  filterproduct.addCollectionTag(L1NonIsoCollTag_);
103  }
104  }
105  // Ref to Candidate object to be recorded in filter object
107 
108  // Set output format
109  int trigger_type = trigger::TriggerCluster;
110  if ( saveTags() ) trigger_type = trigger::TriggerPhoton;
111 
113 
114  iEvent.getByToken (candToken_,PrevFilterOutput);
115 
116  std::vector<edm::Ref<reco::RecoEcalCandidateCollection> > recoecalcands;
117  PrevFilterOutput->getObjects(TriggerCluster, recoecalcands);
118  if(recoecalcands.empty()) PrevFilterOutput->getObjects(TriggerPhoton,recoecalcands); //we dont know if its type trigger cluster or trigger photon
119 
120  //get hold of isolated association map
122  iEvent.getByToken (isoToken_,depMap);
123 
124  //get hold of non-isolated association map
126  if(!doIsolated_) iEvent.getByToken (nonIsoToken_,depNonIsoMap);
127 
128  // look at all photons, check cuts and add to filter object
129  int n = 0;
130 
131  for (unsigned int i=0; i<recoecalcands.size(); i++) {
132 
133  ref = recoecalcands[i];
134  reco::RecoEcalCandidateIsolationMap::const_iterator mapi = (*depMap).find( ref );
135  if (mapi==(*depMap).end() && !doIsolated_) mapi = (*depNonIsoMap).find( ref );
136 
137  float vali = mapi->val;
138  float energy = ref->superCluster()->energy();
139  float EtaSC = ref->eta();
140  if (useEt_) energy = energy * sin (2*atan(exp(-EtaSC)));
141  if (energy < 0.) energy=0.; /* first and second order terms assume non-negative energies */
142 
143  if ( lessThan_ ) {
144  if (fabs(EtaSC) < etaBoundaryEB12_) {
145  if ( vali <= thrRegularEB1_ + energy*thrOverEEB1_ + energy*energy*thrOverE2EB1_) {
146  n++;
147  filterproduct.addObject(trigger_type, ref);
148  continue;
149  }
150  } else if (fabs(EtaSC) < 1.479) {
151  if ( vali <= thrRegularEB2_ + energy*thrOverEEB2_ + energy*energy*thrOverE2EB2_) {
152  n++;
153  filterproduct.addObject(trigger_type, ref);
154  continue;
155  }
156  } else if (fabs(EtaSC) < etaBoundaryEE12_) {
157  if ( vali <= thrRegularEE1_ + energy*thrOverEEE1_ + energy*energy*thrOverE2EE1_) {
158  n++;
159  filterproduct.addObject(trigger_type, ref);
160  continue;
161  }
162  } else if (vali <= thrRegularEE2_ + energy*thrOverEEE2_ + energy*energy*thrOverE2EE2_) {
163  n++;
164  filterproduct.addObject(trigger_type, ref);
165  continue;
166  }
167  } else {
168  if (fabs(EtaSC) < etaBoundaryEB12_) {
169  if ( vali >= thrRegularEB1_ + energy*thrOverEEB1_ + energy*energy*thrOverE2EB1_) {
170  n++;
171  filterproduct.addObject(trigger_type, ref);
172  continue;
173  }
174  } else if (fabs(EtaSC) < 1.479) {
175  if ( vali >= thrRegularEB2_ + energy*thrOverEEB2_ + energy*energy*thrOverE2EB2_) {
176  n++;
177  filterproduct.addObject(trigger_type, ref);
178  continue;
179  }
180  } else if (fabs(EtaSC) < etaBoundaryEE12_) {
181  if ( vali >= thrRegularEE1_ + energy*thrOverEEE1_ + energy*energy*thrOverE2EE1_) {
182  n++;
183  filterproduct.addObject(trigger_type, ref);
184  continue;
185  }
186  } else if (vali >= thrRegularEE2_ + energy*thrOverEEE2_ + energy*energy*thrOverE2EE2_) {
187  n++;
188  filterproduct.addObject(trigger_type, ref);
189  continue;
190  }
191  }
192  }
193 
194  // filter decision
195  bool accept(n>=ncandcut_);
196 
197  return accept;
198 }
199 
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:464
edm::EDGetTokenT< reco::RecoEcalCandidateIsolationMap > nonIsoToken_
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
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
virtual bool hltFilter(edm::Event &, const edm::EventSetup &, trigger::TriggerFilterObjectWithRefs &filterproduct) const override
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static void makeHLTFilterDescription(edm::ParameterSetDescription &desc)
Definition: HLTFilter.cc:29
edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > candToken_
edm::EDGetTokenT< reco::RecoEcalCandidateIsolationMap > isoToken_
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)