CMS 3D CMS Logo

EGFull5x5ShowerShapeModifier.cc
Go to the documentation of this file.
2 
6 
9 
10 namespace {
11  const edm::InputTag empty_tag("");
12  template <typename T, typename U, typename V>
13  inline void make_consumes(const T& tag, edm::EDGetTokenT<U>& tok, V& sume) {
14  if (!(empty_tag == tag))
15  tok = sume.template consumes(tag);
16  }
17 } // namespace
18 
19 #include <unordered_map>
20 
22 public:
23  struct electron_config {
46  };
47 
48  struct photon_config {
71  };
72 
74 
75  void setEvent(const edm::Event&) final;
76 
77  void modifyObject(pat::Electron&) const final;
78  void modifyObject(pat::Photon&) const final;
79 
80 private:
83  std::vector<edm::Ptr<reco::GsfElectron>> eles_by_oop; // indexed by original object ptr
84  std::unordered_map<unsigned, edm::Handle<edm::ValueMap<float>>> ele_vmaps;
85  std::vector<edm::Ptr<reco::Photon>> phos_by_oop;
86  std::unordered_map<unsigned, edm::Handle<edm::ValueMap<float>>> pho_vmaps;
87  mutable unsigned ele_idx,
88  pho_idx; // hack here until we figure out why some slimmedPhotons don't have original object ptrs
89 };
90 
93  "EGFull5x5ShowerShapeModifierFromValueMaps");
94 
97  : ModifyObjectValueBase(conf) {
98  if (conf.exists("electron_config")) {
99  auto const& electrons = conf.getParameterSet("electron_config");
100  if (electrons.exists("electronSrc"))
101  make_consumes(electrons.getParameter<edm::InputTag>("electronSrc"), e_conf.tok_electron_src, cc);
102  if (electrons.exists("sigmaEtaEta"))
103  make_consumes(electrons.getParameter<edm::InputTag>("sigmaEtaEta"), e_conf.tok_sigmaEtaEta, cc);
104  if (electrons.exists("sigmaIetaIeta"))
105  make_consumes(electrons.getParameter<edm::InputTag>("sigmaIetaIeta"), e_conf.tok_sigmaIetaIeta, cc);
106  if (electrons.exists("sigmaIphiIphi"))
107  make_consumes(electrons.getParameter<edm::InputTag>("sigmaIphiIphi"), e_conf.tok_sigmaIphiIphi, cc);
108  if (electrons.exists("e1x5"))
109  make_consumes(electrons.getParameter<edm::InputTag>("e1x5"), e_conf.tok_e1x5, cc);
110  if (electrons.exists("e2x5Max"))
111  make_consumes(electrons.getParameter<edm::InputTag>("e2x5Max"), e_conf.tok_e2x5Max, cc);
112  if (electrons.exists("e5x5"))
113  make_consumes(electrons.getParameter<edm::InputTag>("e5x5"), e_conf.tok_e5x5, cc);
114  if (electrons.exists("r9"))
115  make_consumes(electrons.getParameter<edm::InputTag>("r9"), e_conf.tok_r9, cc);
116  if (electrons.exists("hcalOverEcalDepth1"))
117  make_consumes(electrons.getParameter<edm::InputTag>("hcalOverEcalDepth1"), e_conf.tok_hcalOverEcalDepth1, cc);
118  if (electrons.exists("hcalOverEcalDepth2"))
119  make_consumes(electrons.getParameter<edm::InputTag>("hcalOverEcalDepth2"), e_conf.tok_hcalOverEcalDepth2, cc);
120  if (electrons.exists("hcalOverEcalDepth3"))
121  make_consumes(electrons.getParameter<edm::InputTag>("hcalOverEcalDepth3"), e_conf.tok_hcalOverEcalDepth3, cc);
122  if (electrons.exists("hcalOverEcalDepth4"))
123  make_consumes(electrons.getParameter<edm::InputTag>("hcalOverEcalDepth4"), e_conf.tok_hcalOverEcalDepth4, cc);
124  if (electrons.exists("hcalOverEcalDepth5"))
125  make_consumes(electrons.getParameter<edm::InputTag>("hcalOverEcalDepth5"), e_conf.tok_hcalOverEcalDepth5, cc);
126  if (electrons.exists("hcalOverEcalDepth6"))
127  make_consumes(electrons.getParameter<edm::InputTag>("hcalOverEcalDepth6"), e_conf.tok_hcalOverEcalDepth6, cc);
128  if (electrons.exists("hcalOverEcalDepth7"))
129  make_consumes(electrons.getParameter<edm::InputTag>("hcalOverEcalDepth7"), e_conf.tok_hcalOverEcalDepth7, cc);
130  if (electrons.exists("hcalOverEcalBcDepth1"))
131  make_consumes(electrons.getParameter<edm::InputTag>("hcalOverEcalBcDepth1"), e_conf.tok_hcalOverEcalBcDepth1, cc);
132  if (electrons.exists("hcalOverEcalBcDepth2"))
133  make_consumes(electrons.getParameter<edm::InputTag>("hcalOverEcalBcDepth2"), e_conf.tok_hcalOverEcalBcDepth2, cc);
134  if (electrons.exists("hcalOverEcalBcDepth3"))
135  make_consumes(electrons.getParameter<edm::InputTag>("hcalOverEcalBcDepth3"), e_conf.tok_hcalOverEcalBcDepth3, cc);
136  if (electrons.exists("hcalOverEcalBcDepth4"))
137  make_consumes(electrons.getParameter<edm::InputTag>("hcalOverEcalBcDepth4"), e_conf.tok_hcalOverEcalBcDepth4, cc);
138  if (electrons.exists("hcalOverEcalBcDepth5"))
139  make_consumes(electrons.getParameter<edm::InputTag>("hcalOverEcalBcDepth5"), e_conf.tok_hcalOverEcalBcDepth5, cc);
140  if (electrons.exists("hcalOverEcalBcDepth6"))
141  make_consumes(electrons.getParameter<edm::InputTag>("hcalOverEcalBcDepth6"), e_conf.tok_hcalOverEcalBcDepth6, cc);
142  if (electrons.exists("hcalOverEcalBcDepth7"))
143  make_consumes(electrons.getParameter<edm::InputTag>("hcalOverEcalBcDepth7"), e_conf.tok_hcalOverEcalBcDepth7, cc);
144  }
145  if (conf.exists("photon_config")) {
146  auto const& photons = conf.getParameterSet("photon_config");
147  if (photons.exists("photonSrc"))
148  make_consumes(photons.getParameter<edm::InputTag>("photonSrc"), ph_conf.tok_photon_src, cc);
149  if (photons.exists("sigmaEtaEta"))
150  make_consumes(photons.getParameter<edm::InputTag>("sigmaEtaEta"), ph_conf.tok_sigmaEtaEta, cc);
151  if (photons.exists("sigmaIetaIeta"))
152  make_consumes(photons.getParameter<edm::InputTag>("sigmaIetaIeta"), ph_conf.tok_sigmaIetaIeta, cc);
153  if (photons.exists("e1x5"))
154  make_consumes(photons.getParameter<edm::InputTag>("e1x5"), ph_conf.tok_e1x5, cc);
155  if (photons.exists("e2x5"))
156  make_consumes(photons.getParameter<edm::InputTag>("e2x5"), ph_conf.tok_e2x5, cc);
157  if (photons.exists("e3x3"))
158  make_consumes(photons.getParameter<edm::InputTag>("e3x3"), ph_conf.tok_e3x3, cc);
159  if (photons.exists("e5x5"))
160  make_consumes(photons.getParameter<edm::InputTag>("e5x5"), ph_conf.tok_e5x5, cc);
161  if (photons.exists("maxEnergyXtal"))
162  make_consumes(photons.getParameter<edm::InputTag>("maxEnergyXtal"), ph_conf.tok_maxEnergyXtal, cc);
163  if (photons.exists("hcalOverEcalDepth1"))
164  make_consumes(photons.getParameter<edm::InputTag>("hcalOverEcalDepth1"), ph_conf.tok_hcalOverEcalDepth1, cc);
165  if (photons.exists("hcalOverEcalDepth2"))
166  make_consumes(photons.getParameter<edm::InputTag>("hcalOverEcalDepth2"), ph_conf.tok_hcalOverEcalDepth2, cc);
167  if (photons.exists("hcalOverEcalDepth3"))
168  make_consumes(photons.getParameter<edm::InputTag>("hcalOverEcalDepth3"), ph_conf.tok_hcalOverEcalDepth3, cc);
169  if (photons.exists("hcalOverEcalDepth4"))
170  make_consumes(photons.getParameter<edm::InputTag>("hcalOverEcalDepth4"), ph_conf.tok_hcalOverEcalDepth4, cc);
171  if (photons.exists("hcalOverEcalDepth5"))
172  make_consumes(photons.getParameter<edm::InputTag>("hcalOverEcalDepth5"), ph_conf.tok_hcalOverEcalDepth5, cc);
173  if (photons.exists("hcalOverEcalDepth6"))
174  make_consumes(photons.getParameter<edm::InputTag>("hcalOverEcalDepth6"), ph_conf.tok_hcalOverEcalDepth6, cc);
175  if (photons.exists("hcalOverEcalDepth7"))
176  make_consumes(photons.getParameter<edm::InputTag>("hcalOverEcalDepth7"), ph_conf.tok_hcalOverEcalDepth7, cc);
177  if (photons.exists("hcalOverEcalBcDepth1"))
178  make_consumes(photons.getParameter<edm::InputTag>("hcalOverEcalBcDepth1"), ph_conf.tok_hcalOverEcalBcDepth1, cc);
179  if (photons.exists("hcalOverEcalBcDepth2"))
180  make_consumes(photons.getParameter<edm::InputTag>("hcalOverEcalBcDepth2"), ph_conf.tok_hcalOverEcalBcDepth2, cc);
181  if (photons.exists("hcalOverEcalBcDepth3"))
182  make_consumes(photons.getParameter<edm::InputTag>("hcalOverEcalBcDepth3"), ph_conf.tok_hcalOverEcalBcDepth3, cc);
183  if (photons.exists("hcalOverEcalBcDepth4"))
184  make_consumes(photons.getParameter<edm::InputTag>("hcalOverEcalBcDepth4"), ph_conf.tok_hcalOverEcalBcDepth4, cc);
185  if (photons.exists("hcalOverEcalBcDepth5"))
186  make_consumes(photons.getParameter<edm::InputTag>("hcalOverEcalBcDepth5"), ph_conf.tok_hcalOverEcalBcDepth5, cc);
187  if (photons.exists("hcalOverEcalBcDepth6"))
188  make_consumes(photons.getParameter<edm::InputTag>("hcalOverEcalBcDepth6"), ph_conf.tok_hcalOverEcalBcDepth6, cc);
189  if (photons.exists("hcalOverEcalBcDepth7"))
190  make_consumes(photons.getParameter<edm::InputTag>("hcalOverEcalBcDepth7"), ph_conf.tok_hcalOverEcalBcDepth7, cc);
191  }
192 
193  ele_idx = pho_idx = 0;
194 }
195 
196 namespace {
197  inline void get_product(const edm::Event& evt,
199  std::unordered_map<unsigned, edm::Handle<edm::ValueMap<float>>>& map) {
200  if (!tok.isUninitialized())
201  map[tok.index()] = evt.getHandle(tok);
202  }
203 } // namespace
204 
206  eles_by_oop.clear();
207  phos_by_oop.clear();
208  ele_vmaps.clear();
209  pho_vmaps.clear();
210 
211  ele_idx = pho_idx = 0;
212 
215 
216  eles_by_oop.resize(eles->size());
217  std::copy(eles->ptrs().begin(), eles->ptrs().end(), eles_by_oop.begin());
218  }
219 
220  get_product(evt, e_conf.tok_sigmaEtaEta, ele_vmaps);
221  get_product(evt, e_conf.tok_sigmaIetaIeta, ele_vmaps);
222  get_product(evt, e_conf.tok_sigmaIphiIphi, ele_vmaps);
223  get_product(evt, e_conf.tok_e1x5, ele_vmaps);
224  get_product(evt, e_conf.tok_e2x5Max, ele_vmaps);
225  get_product(evt, e_conf.tok_e5x5, ele_vmaps);
226  get_product(evt, e_conf.tok_r9, ele_vmaps);
227  get_product(evt, e_conf.tok_hcalOverEcalDepth1, ele_vmaps);
228  get_product(evt, e_conf.tok_hcalOverEcalDepth2, ele_vmaps);
229  get_product(evt, e_conf.tok_hcalOverEcalDepth3, ele_vmaps);
230  get_product(evt, e_conf.tok_hcalOverEcalDepth4, ele_vmaps);
231  get_product(evt, e_conf.tok_hcalOverEcalDepth5, ele_vmaps);
232  get_product(evt, e_conf.tok_hcalOverEcalDepth6, ele_vmaps);
233  get_product(evt, e_conf.tok_hcalOverEcalDepth7, ele_vmaps);
234  get_product(evt, e_conf.tok_hcalOverEcalBcDepth1, ele_vmaps);
235  get_product(evt, e_conf.tok_hcalOverEcalBcDepth2, ele_vmaps);
236  get_product(evt, e_conf.tok_hcalOverEcalBcDepth3, ele_vmaps);
237  get_product(evt, e_conf.tok_hcalOverEcalBcDepth4, ele_vmaps);
238  get_product(evt, e_conf.tok_hcalOverEcalBcDepth5, ele_vmaps);
239  get_product(evt, e_conf.tok_hcalOverEcalBcDepth6, ele_vmaps);
240  get_product(evt, e_conf.tok_hcalOverEcalBcDepth7, ele_vmaps);
241 
243  auto phos = evt.getHandle(ph_conf.tok_photon_src);
244 
245  phos_by_oop.resize(phos->size());
246  std::copy(phos->ptrs().begin(), phos->ptrs().end(), phos_by_oop.begin());
247  }
248 
249  get_product(evt, ph_conf.tok_sigmaEtaEta, pho_vmaps);
250  get_product(evt, ph_conf.tok_sigmaIetaIeta, pho_vmaps);
251  get_product(evt, ph_conf.tok_e1x5, pho_vmaps);
252  get_product(evt, ph_conf.tok_e2x5, pho_vmaps);
253  get_product(evt, ph_conf.tok_e3x3, pho_vmaps);
254  get_product(evt, ph_conf.tok_e5x5, pho_vmaps);
255  get_product(evt, ph_conf.tok_maxEnergyXtal, pho_vmaps);
256  get_product(evt, ph_conf.tok_hcalOverEcalDepth1, pho_vmaps);
257  get_product(evt, ph_conf.tok_hcalOverEcalDepth2, pho_vmaps);
258  get_product(evt, ph_conf.tok_hcalOverEcalDepth3, pho_vmaps);
259  get_product(evt, ph_conf.tok_hcalOverEcalDepth4, pho_vmaps);
260  get_product(evt, ph_conf.tok_hcalOverEcalDepth5, pho_vmaps);
261  get_product(evt, ph_conf.tok_hcalOverEcalDepth6, pho_vmaps);
262  get_product(evt, ph_conf.tok_hcalOverEcalDepth7, pho_vmaps);
263  get_product(evt, ph_conf.tok_hcalOverEcalBcDepth1, pho_vmaps);
264  get_product(evt, ph_conf.tok_hcalOverEcalBcDepth2, pho_vmaps);
265  get_product(evt, ph_conf.tok_hcalOverEcalBcDepth3, pho_vmaps);
266  get_product(evt, ph_conf.tok_hcalOverEcalBcDepth4, pho_vmaps);
267  get_product(evt, ph_conf.tok_hcalOverEcalBcDepth5, pho_vmaps);
268  get_product(evt, ph_conf.tok_hcalOverEcalBcDepth6, pho_vmaps);
269  get_product(evt, ph_conf.tok_hcalOverEcalBcDepth7, pho_vmaps);
270 }
271 
272 namespace {
273  template <typename T, typename U, typename V>
274  inline void assignValue(const T& ptr, const U& tok, const V& map, float& value) {
275  if (!tok.isUninitialized())
276  value = map.find(tok.index())->second->get(ptr.id(), ptr.key());
277  }
278 } // namespace
279 
281  // we encounter two cases here, either we are running AOD -> MINIAOD
282  // and the value maps are to the reducedEG object, can use original object ptr
283  // or we are running MINIAOD->MINIAOD and we need to fetch the pat objects to reference
285 
286  // The calls to this function should be matched to the order of the electrons
287  // in eles_by_oop. In case it is called too many times, it will throw thanks
288  // to the use of std::vector<T>::at().
290  ptr = eles_by_oop.at(ele_idx);
291 
292  //now we go through and modify the objects using the valuemaps we read in
293  auto full5x5 = ele.full5x5_showerShape();
294  assignValue(ptr, e_conf.tok_sigmaEtaEta, ele_vmaps, full5x5.sigmaEtaEta);
295  assignValue(ptr, e_conf.tok_sigmaIetaIeta, ele_vmaps, full5x5.sigmaIetaIeta);
296  assignValue(ptr, e_conf.tok_sigmaIphiIphi, ele_vmaps, full5x5.sigmaIphiIphi);
297  assignValue(ptr, e_conf.tok_e1x5, ele_vmaps, full5x5.e1x5);
298  assignValue(ptr, e_conf.tok_e2x5Max, ele_vmaps, full5x5.e2x5Max);
299  assignValue(ptr, e_conf.tok_e5x5, ele_vmaps, full5x5.e5x5);
300  assignValue(ptr, e_conf.tok_r9, ele_vmaps, full5x5.r9);
301  assignValue(ptr, e_conf.tok_hcalOverEcalDepth1, ele_vmaps, full5x5.hcalOverEcal[0]);
302  assignValue(ptr, e_conf.tok_hcalOverEcalDepth2, ele_vmaps, full5x5.hcalOverEcal[1]);
303  assignValue(ptr, e_conf.tok_hcalOverEcalDepth3, ele_vmaps, full5x5.hcalOverEcal[2]);
304  assignValue(ptr, e_conf.tok_hcalOverEcalDepth4, ele_vmaps, full5x5.hcalOverEcal[3]);
305  assignValue(ptr, e_conf.tok_hcalOverEcalDepth5, ele_vmaps, full5x5.hcalOverEcal[4]);
306  assignValue(ptr, e_conf.tok_hcalOverEcalDepth6, ele_vmaps, full5x5.hcalOverEcal[5]);
307  assignValue(ptr, e_conf.tok_hcalOverEcalDepth7, ele_vmaps, full5x5.hcalOverEcal[6]);
308  assignValue(ptr, e_conf.tok_hcalOverEcalBcDepth1, ele_vmaps, full5x5.hcalOverEcalBc[0]);
309  assignValue(ptr, e_conf.tok_hcalOverEcalBcDepth2, ele_vmaps, full5x5.hcalOverEcalBc[1]);
310  assignValue(ptr, e_conf.tok_hcalOverEcalBcDepth3, ele_vmaps, full5x5.hcalOverEcalBc[2]);
311  assignValue(ptr, e_conf.tok_hcalOverEcalBcDepth4, ele_vmaps, full5x5.hcalOverEcalBc[3]);
312  assignValue(ptr, e_conf.tok_hcalOverEcalBcDepth5, ele_vmaps, full5x5.hcalOverEcalBc[4]);
313  assignValue(ptr, e_conf.tok_hcalOverEcalBcDepth6, ele_vmaps, full5x5.hcalOverEcalBc[5]);
314  assignValue(ptr, e_conf.tok_hcalOverEcalBcDepth7, ele_vmaps, full5x5.hcalOverEcalBc[6]);
315 
316  ele.full5x5_setShowerShape(full5x5);
317  ++ele_idx;
318 }
319 
321  // we encounter two cases here, either we are running AOD -> MINIAOD
322  // and the value maps are to the reducedEG object, can use original object ptr
323  // or we are running MINIAOD->MINIAOD and we need to fetch the pat objects to reference
325 
326  // The calls to this function should be matched to the order of the electrons
327  // in eles_by_oop. In case it is called too many times, it will throw thanks
328  // to the use of std::vector<T>::at().
330  ptr = phos_by_oop.at(pho_idx);
331 
332  //now we go through and modify the objects using the valuemaps we read in
333  auto full5x5 = pho.full5x5_showerShapeVariables();
334  assignValue(ptr, ph_conf.tok_sigmaEtaEta, pho_vmaps, full5x5.sigmaEtaEta);
335  assignValue(ptr, ph_conf.tok_sigmaIetaIeta, pho_vmaps, full5x5.sigmaIetaIeta);
336  assignValue(ptr, ph_conf.tok_e1x5, pho_vmaps, full5x5.e1x5);
337  assignValue(ptr, ph_conf.tok_e2x5, pho_vmaps, full5x5.e2x5);
338  assignValue(ptr, ph_conf.tok_e3x3, pho_vmaps, full5x5.e3x3);
339  assignValue(ptr, ph_conf.tok_e5x5, pho_vmaps, full5x5.e5x5);
340  assignValue(ptr, ph_conf.tok_maxEnergyXtal, pho_vmaps, full5x5.maxEnergyXtal);
341  assignValue(ptr, ph_conf.tok_hcalOverEcalDepth1, pho_vmaps, full5x5.hcalOverEcal[0]);
342  assignValue(ptr, ph_conf.tok_hcalOverEcalDepth2, pho_vmaps, full5x5.hcalOverEcal[1]);
343  assignValue(ptr, ph_conf.tok_hcalOverEcalDepth3, pho_vmaps, full5x5.hcalOverEcal[2]);
344  assignValue(ptr, ph_conf.tok_hcalOverEcalDepth4, pho_vmaps, full5x5.hcalOverEcal[3]);
345  assignValue(ptr, ph_conf.tok_hcalOverEcalDepth5, pho_vmaps, full5x5.hcalOverEcal[4]);
346  assignValue(ptr, ph_conf.tok_hcalOverEcalDepth6, pho_vmaps, full5x5.hcalOverEcal[5]);
347  assignValue(ptr, ph_conf.tok_hcalOverEcalDepth7, pho_vmaps, full5x5.hcalOverEcal[6]);
348  assignValue(ptr, ph_conf.tok_hcalOverEcalBcDepth1, pho_vmaps, full5x5.hcalOverEcalBc[0]);
349  assignValue(ptr, ph_conf.tok_hcalOverEcalBcDepth2, pho_vmaps, full5x5.hcalOverEcalBc[1]);
350  assignValue(ptr, ph_conf.tok_hcalOverEcalBcDepth3, pho_vmaps, full5x5.hcalOverEcalBc[2]);
351  assignValue(ptr, ph_conf.tok_hcalOverEcalBcDepth4, pho_vmaps, full5x5.hcalOverEcalBc[3]);
352  assignValue(ptr, ph_conf.tok_hcalOverEcalBcDepth5, pho_vmaps, full5x5.hcalOverEcalBc[4]);
353  assignValue(ptr, ph_conf.tok_hcalOverEcalBcDepth6, pho_vmaps, full5x5.hcalOverEcalBc[5]);
354  assignValue(ptr, ph_conf.tok_hcalOverEcalBcDepth7, pho_vmaps, full5x5.hcalOverEcalBc[6]);
355 
356  pho.full5x5_setShowerShapeVariables(full5x5);
357  ++pho_idx;
358 }
edm::EDGetTokenT< edm::View< pat::Photon > > tok_photon_src
edm::EDGetTokenT< edm::ValueMap< float > > tok_hcalOverEcalDepth7
Analysis-level Photon class.
Definition: Photon.h:46
EGFull5x5ShowerShapeModifierFromValueMaps(const edm::ParameterSet &conf, edm::ConsumesCollector &cc)
edm::EDGetTokenT< edm::ValueMap< float > > tok_hcalOverEcalBcDepth7
std::unordered_map< unsigned, edm::Handle< edm::ValueMap< float > > > pho_vmaps
edm::EDGetTokenT< edm::ValueMap< float > > tok_hcalOverEcalBcDepth4
edm::EDGetTokenT< edm::ValueMap< float > > tok_hcalOverEcalBcDepth1
const ShowerShape & full5x5_showerShapeVariables() const
Definition: Photon.h:213
edm::EDGetTokenT< edm::ValueMap< float > > tok_hcalOverEcalBcDepth3
bool exists(std::string const &parameterName) const
checks if a parameter exists
constexpr bool isUninitialized() const noexcept
Definition: EDGetToken.h:104
ParameterSet const & getParameterSet(std::string const &) const
edm::EDGetTokenT< edm::ValueMap< float > > tok_hcalOverEcalBcDepth2
edm::EDGetTokenT< edm::View< pat::Electron > > tok_electron_src
edm::EDGetTokenT< edm::ValueMap< float > > tok_hcalOverEcalBcDepth5
edm::EDGetTokenT< edm::ValueMap< float > > tok_hcalOverEcalBcDepth2
edm::EDGetTokenT< edm::ValueMap< float > > tok_hcalOverEcalBcDepth4
edm::EDGetTokenT< edm::ValueMap< float > > tok_hcalOverEcalBcDepth6
edm::EDGetTokenT< edm::ValueMap< float > > tok_hcalOverEcalBcDepth6
edm::EDGetTokenT< edm::ValueMap< float > > tok_hcalOverEcalBcDepth1
U second(std::pair< T, U > const &p)
edm::EDGetTokenT< edm::ValueMap< float > > tok_hcalOverEcalDepth2
edm::EDGetTokenT< edm::ValueMap< float > > tok_hcalOverEcalDepth5
const ShowerShape & full5x5_showerShape() const
Definition: GsfElectron.h:488
uint32_t T const *__restrict__ uint32_t const *__restrict__ int32_t int Histo::index_type cudaStream_t V
Definition: value.py:1
edm::EDGetTokenT< edm::ValueMap< float > > tok_hcalOverEcalDepth4
std::vector< edm::Ptr< reco::Photon > > phos_by_oop
edm::EDGetTokenT< edm::ValueMap< float > > tok_hcalOverEcalDepth1
Analysis-level electron class.
Definition: Electron.h:51
constexpr unsigned int index() const noexcept
Definition: EDGetToken.h:103
edm::EDGetTokenT< edm::ValueMap< float > > tok_hcalOverEcalDepth6
void full5x5_setShowerShapeVariables(const ShowerShape &a)
Definition: Photon.h:216
Handle< PROD > getHandle(EDGetTokenT< PROD > token) const
Definition: Event.h:564
std::unordered_map< unsigned, edm::Handle< edm::ValueMap< float > > > ele_vmaps
std::vector< edm::Ptr< reco::GsfElectron > > eles_by_oop
#define DEFINE_EDM_PLUGIN(factory, type, name)
const edm::Ptr< reco::Candidate > & originalObjectRef() const
reference to original object. Returns a null reference if not available
Definition: PATObject.h:537
long double T
void full5x5_setShowerShape(const ShowerShape &s)
Definition: GsfElectron.h:492
edm::EDGetTokenT< edm::ValueMap< float > > tok_hcalOverEcalBcDepth5
edm::EDGetTokenT< edm::ValueMap< float > > tok_hcalOverEcalBcDepth7
edm::EDGetTokenT< edm::ValueMap< float > > tok_hcalOverEcalDepth3
edm::EDGetTokenT< edm::ValueMap< float > > tok_hcalOverEcalBcDepth3