CMS 3D CMS Logo

GEDPhotonProducer.cc
Go to the documentation of this file.
1 #include <iostream>
2 #include <vector>
3 #include <memory>
4 
5 // Framework
9 
11 
16 
28 
30 
33 
36 
39 
42 
43 namespace {
44  inline double ptFast(const double energy, const math::XYZPoint& position, const math::XYZPoint& origin) {
45  const auto v = position - origin;
46  return energy * std::sqrt(v.perp2() / v.mag2());
47  }
48 } // namespace
49 
51  if (step == "final")
52  flags_ = kFinal;
53  else if (step == "oot")
54  flags_ = kOOT;
55  else if (step == "ootfinal")
56  flags_ = (kOOT | kFinal);
57  else if (step == "tmp")
58  flags_ = 0;
59  else {
60  throw cms::Exception("InvalidConfig")
61  << " reconstructStep " << step << " is invalid, the options are: tmp, final,oot or ootfinal" << std::endl;
62  }
63 }
64 
66  : recoStep_(config.getParameter<std::string>("reconstructionStep")), conf_(config) {
67  // use configuration file to setup input/output collection names
68  //
69  photonProducer_ = conf_.getParameter<edm::InputTag>("photonProducer");
70 
71  if (recoStep_.isFinal()) {
72  photonProducerT_ = consumes<reco::PhotonCollection>(photonProducer_);
73  pfCandidates_ = consumes<reco::PFCandidateCollection>(conf_.getParameter<edm::InputTag>("pfCandidates"));
74 
76  auto getVMToken = [&pfIsolCfg, this](const std::string& name) {
77  return consumes<edm::ValueMap<float>>(pfIsolCfg.getParameter<edm::InputTag>(name));
78  };
79  phoChargedIsolationToken_ = getVMToken("chargedHadronIso");
80  phoNeutralHadronIsolationToken_ = getVMToken("neutralHadronIso");
81  phoPhotonIsolationToken_ = getVMToken("photonIso");
82  phoChargedWorstVtxIsoToken_ = getVMToken("chargedHadronWorstVtxIso");
83  phoChargedWorstVtxGeomVetoIsoToken_ = getVMToken("chargedHadronWorstVtxGeomVetoIso");
84  phoChargedPFPVIsoToken_ = getVMToken("chargedHadronPFPVIso");
85 
86  //OOT photons in legacy 80X re-miniAOD do not have PF cluster embeded into the reco object
87  //to preserve 80X behaviour
88  if (conf_.exists("pfECALClusIsolation")) {
90  consumes<edm::ValueMap<float>>(conf_.getParameter<edm::InputTag>("pfECALClusIsolation"));
91  }
92  if (conf_.exists("pfHCALClusIsolation")) {
94  consumes<edm::ValueMap<float>>(conf_.getParameter<edm::InputTag>("pfHCALClusIsolation"));
95  }
96  } else {
97  photonCoreProducerT_ = consumes<reco::PhotonCoreCollection>(photonProducer_);
98  }
99 
100  auto pfEg = conf_.getParameter<edm::InputTag>("pfEgammaCandidates");
101  if (not pfEg.label().empty())
102  pfEgammaCandidates_ = consumes<reco::PFCandidateCollection>(pfEg);
103  barrelEcalHits_ = consumes<EcalRecHitCollection>(conf_.getParameter<edm::InputTag>("barrelEcalHits"));
104  endcapEcalHits_ = consumes<EcalRecHitCollection>(conf_.getParameter<edm::InputTag>("endcapEcalHits"));
105  preshowerHits_ = consumes<EcalRecHitCollection>(conf_.getParameter<edm::InputTag>("preshowerHits"));
106  vertexProducer_ = consumes<reco::VertexCollection>(conf_.getParameter<edm::InputTag>("primaryVertexProducer"));
107 
108  auto hcTow = conf_.getParameter<edm::InputTag>("hcalTowers");
109  if (not hcTow.label().empty())
110  hcalTowers_ = consumes<CaloTowerCollection>(hcTow);
111  //
112  photonCollection_ = conf_.getParameter<std::string>("outputPhotonCollection");
113  hOverEConeSize_ = conf_.getParameter<double>("hOverEConeSize");
114  highEt_ = conf_.getParameter<double>("highEt");
115  // R9 value to decide converted/unconverted
116  minR9Barrel_ = conf_.getParameter<double>("minR9Barrel");
117  minR9Endcap_ = conf_.getParameter<double>("minR9Endcap");
118  usePrimaryVertex_ = conf_.getParameter<bool>("usePrimaryVertex");
119  runMIPTagger_ = conf_.getParameter<bool>("runMIPTagger");
120 
121  candidateP4type_ = config.getParameter<std::string>("candidateP4type");
122  valueMapPFCandPhoton_ = config.getParameter<std::string>("valueMapPhotons");
123 
124  edm::ParameterSet posCalcParameters = config.getParameter<edm::ParameterSet>("posCalcParameters");
126 
127  //AA
128  //Flags and Severities to be excluded from photon calculations
129  const std::vector<std::string> flagnamesEB =
130  config.getParameter<std::vector<std::string>>("RecHitFlagToBeExcludedEB");
131 
132  const std::vector<std::string> flagnamesEE =
133  config.getParameter<std::vector<std::string>>("RecHitFlagToBeExcludedEE");
134 
135  flagsexclEB_ = StringToEnumValue<EcalRecHit::Flags>(flagnamesEB);
136 
137  flagsexclEE_ = StringToEnumValue<EcalRecHit::Flags>(flagnamesEE);
138 
139  const std::vector<std::string> severitynamesEB =
140  config.getParameter<std::vector<std::string>>("RecHitSeverityToBeExcludedEB");
141 
142  severitiesexclEB_ = StringToEnumValue<EcalSeverityLevel::SeverityLevel>(severitynamesEB);
143 
144  const std::vector<std::string> severitynamesEE =
145  config.getParameter<std::vector<std::string>>("RecHitSeverityToBeExcludedEE");
146 
147  severitiesexclEE_ = StringToEnumValue<EcalSeverityLevel::SeverityLevel>(severitynamesEE);
148 
149  thePhotonEnergyCorrector_ = new PhotonEnergyCorrector(conf_, consumesCollector());
150 
151  //AA
152 
153  //
154 
155  // Parameters for the position calculation:
156  // std::map<std::string,double> providedParameters;
157  // providedParameters.insert(std::make_pair("LogWeighted",conf_.getParameter<bool>("posCalc_logweight")));
158  //providedParameters.insert(std::make_pair("T0_barl",conf_.getParameter<double>("posCalc_t0_barl")));
159  //providedParameters.insert(std::make_pair("T0_endc",conf_.getParameter<double>("posCalc_t0_endc")));
160  //providedParameters.insert(std::make_pair("T0_endcPresh",conf_.getParameter<double>("posCalc_t0_endcPresh")));
161  //providedParameters.insert(std::make_pair("W0",conf_.getParameter<double>("posCalc_w0")));
162  //providedParameters.insert(std::make_pair("X0",conf_.getParameter<double>("posCalc_x0")));
163  //posCalculator_ = PositionCalc(providedParameters);
164  // cut values for pre-selection
165  preselCutValuesBarrel_.push_back(conf_.getParameter<double>("minSCEtBarrel"));
166  preselCutValuesBarrel_.push_back(conf_.getParameter<double>("maxHoverEBarrel"));
167  preselCutValuesBarrel_.push_back(conf_.getParameter<double>("ecalRecHitSumEtOffsetBarrel"));
168  preselCutValuesBarrel_.push_back(conf_.getParameter<double>("ecalRecHitSumEtSlopeBarrel"));
169  preselCutValuesBarrel_.push_back(conf_.getParameter<double>("hcalTowerSumEtOffsetBarrel"));
170  preselCutValuesBarrel_.push_back(conf_.getParameter<double>("hcalTowerSumEtSlopeBarrel"));
171  preselCutValuesBarrel_.push_back(conf_.getParameter<double>("nTrackSolidConeBarrel"));
172  preselCutValuesBarrel_.push_back(conf_.getParameter<double>("nTrackHollowConeBarrel"));
173  preselCutValuesBarrel_.push_back(conf_.getParameter<double>("trackPtSumSolidConeBarrel"));
174  preselCutValuesBarrel_.push_back(conf_.getParameter<double>("trackPtSumHollowConeBarrel"));
175  preselCutValuesBarrel_.push_back(conf_.getParameter<double>("sigmaIetaIetaCutBarrel"));
176  //
177  preselCutValuesEndcap_.push_back(conf_.getParameter<double>("minSCEtEndcap"));
178  preselCutValuesEndcap_.push_back(conf_.getParameter<double>("maxHoverEEndcap"));
179  preselCutValuesEndcap_.push_back(conf_.getParameter<double>("ecalRecHitSumEtOffsetEndcap"));
180  preselCutValuesEndcap_.push_back(conf_.getParameter<double>("ecalRecHitSumEtSlopeEndcap"));
181  preselCutValuesEndcap_.push_back(conf_.getParameter<double>("hcalTowerSumEtOffsetEndcap"));
182  preselCutValuesEndcap_.push_back(conf_.getParameter<double>("hcalTowerSumEtSlopeEndcap"));
183  preselCutValuesEndcap_.push_back(conf_.getParameter<double>("nTrackSolidConeEndcap"));
184  preselCutValuesEndcap_.push_back(conf_.getParameter<double>("nTrackHollowConeEndcap"));
185  preselCutValuesEndcap_.push_back(conf_.getParameter<double>("trackPtSumSolidConeEndcap"));
186  preselCutValuesEndcap_.push_back(conf_.getParameter<double>("trackPtSumHollowConeEndcap"));
187  preselCutValuesEndcap_.push_back(conf_.getParameter<double>("sigmaIetaIetaCutEndcap"));
188  //
189 
190  //moved from beginRun to here, I dont see how this could cause harm as its just reading in the exactly same parameters each run
191  if (!recoStep_.isFinal()) {
195  flagsexclEB_,
196  flagsexclEE_,
199  consumesCollector());
202  thePhotonMIPHaloTagger_->setup(mipVariableSet, consumesCollector());
203 
204  } else {
206  thePhotonMIPHaloTagger_ = nullptr;
207  }
208 
209  checkHcalStatus_ = conf_.getParameter<bool>("checkHcalStatus");
210 
211  // Register the product
212  produces<reco::PhotonCollection>(photonCollection_);
215 }
216 
221  //delete energyCorrectionF;
222 }
223 
224 void GEDPhotonProducer::beginRun(edm::Run const& r, edm::EventSetup const& theEventSetup) {
225  if (!recoStep_.isFinal()) {
226  thePhotonEnergyCorrector_->init(theEventSetup);
227  }
228 }
229 
230 void GEDPhotonProducer::endRun(edm::Run const& r, edm::EventSetup const& theEventSetup) {}
231 
232 void GEDPhotonProducer::produce(edm::Event& theEvent, const edm::EventSetup& theEventSetup) {
233  using namespace edm;
234  // nEvt_++;
235 
237  auto outputPhotonCollection_p = std::make_unique<reco::PhotonCollection>();
238  edm::ValueMap<reco::PhotonRef> pfEGCandToPhotonMap;
239 
240  // Get the PhotonCore collection
241  bool validPhotonCoreHandle = false;
242  Handle<reco::PhotonCoreCollection> photonCoreHandle;
243  bool validPhotonHandle = false;
244  Handle<reco::PhotonCollection> photonHandle;
245  //value maps for isolation
246  edm::Handle<edm::ValueMap<float>> phoChargedIsolationMap;
247  edm::Handle<edm::ValueMap<float>> phoNeutralHadronIsolationMap;
248  edm::Handle<edm::ValueMap<float>> phoPhotonIsolationMap;
249  edm::Handle<edm::ValueMap<float>> phoChargedWorstVtxIsoMap;
250  edm::Handle<edm::ValueMap<float>> phoChargedWorstVtxGeomVetoIsoMap;
251  edm::Handle<edm::ValueMap<float>> phoChargedPFPVIsoMap;
252 
253  edm::Handle<edm::ValueMap<float>> phoPFECALClusIsolationMap;
254  edm::Handle<edm::ValueMap<float>> phoPFHCALClusIsolationMap;
255 
256  if (recoStep_.isFinal()) {
257  theEvent.getByToken(photonProducerT_, photonHandle);
258  //get isolation objects
259  theEvent.getByToken(phoChargedIsolationToken_, phoChargedIsolationMap);
260  theEvent.getByToken(phoNeutralHadronIsolationToken_, phoNeutralHadronIsolationMap);
261  theEvent.getByToken(phoPhotonIsolationToken_, phoPhotonIsolationMap);
262  theEvent.getByToken(phoChargedWorstVtxIsoToken_, phoChargedWorstVtxIsoMap);
263  theEvent.getByToken(phoChargedWorstVtxGeomVetoIsoToken_, phoChargedWorstVtxGeomVetoIsoMap);
264  theEvent.getByToken(phoChargedPFPVIsoToken_, phoChargedPFPVIsoMap);
265 
266  //OOT photons in legacy 80X re-miniAOD workflow dont have cluster isolation embed in them
268  theEvent.getByToken(phoPFECALClusIsolationToken_, phoPFECALClusIsolationMap);
269  }
271  theEvent.getByToken(phoPFHCALClusIsolationToken_, phoPFHCALClusIsolationMap);
272  }
273 
274  if (photonHandle.isValid()) {
275  validPhotonHandle = true;
276  } else {
277  throw cms::Exception("GEDPhotonProducer") << "Error! Can't get the product " << photonProducer_.label() << "\n";
278  }
279  } else {
280  theEvent.getByToken(photonCoreProducerT_, photonCoreHandle);
281  if (photonCoreHandle.isValid()) {
282  validPhotonCoreHandle = true;
283  } else {
284  throw cms::Exception("GEDPhotonProducer")
285  << "Error! Can't get the photonCoreProducer " << photonProducer_.label() << "\n";
286  }
287  }
288 
289  // Get EcalRecHits
290  bool validEcalRecHits = true;
291  Handle<EcalRecHitCollection> barrelHitHandle;
292  const EcalRecHitCollection dummyEB;
293  theEvent.getByToken(barrelEcalHits_, barrelHitHandle);
294  if (!barrelHitHandle.isValid()) {
295  throw cms::Exception("GEDPhotonProducer") << "Error! Can't get the barrelEcalHits";
296  }
297  const EcalRecHitCollection& barrelRecHits(validEcalRecHits ? *(barrelHitHandle.product()) : dummyEB);
298 
299  Handle<EcalRecHitCollection> endcapHitHandle;
300  theEvent.getByToken(endcapEcalHits_, endcapHitHandle);
301  const EcalRecHitCollection dummyEE;
302  if (!endcapHitHandle.isValid()) {
303  throw cms::Exception("GEDPhotonProducer") << "Error! Can't get the endcapEcalHits";
304  }
305  const EcalRecHitCollection& endcapRecHits(validEcalRecHits ? *(endcapHitHandle.product()) : dummyEE);
306 
307  bool validPreshowerRecHits = true;
308  Handle<EcalRecHitCollection> preshowerHitHandle;
309  theEvent.getByToken(preshowerHits_, preshowerHitHandle);
310  EcalRecHitCollection preshowerRecHits;
311  if (!preshowerHitHandle.isValid()) {
312  throw cms::Exception("GEDPhotonProducer") << "Error! Can't get the preshowerEcalHits";
313  }
314  if (validPreshowerRecHits)
315  preshowerRecHits = *(preshowerHitHandle.product());
316 
317  Handle<reco::PFCandidateCollection> pfEGCandidateHandle;
318  // Get the PF refined cluster collection
320  theEvent.getByToken(pfEgammaCandidates_, pfEGCandidateHandle);
321  if (!pfEGCandidateHandle.isValid()) {
322  throw cms::Exception("GEDPhotonProducer") << "Error! Can't get the pfEgammaCandidates";
323  }
324  }
325 
326  Handle<reco::PFCandidateCollection> pfCandidateHandle;
327 
328  if (recoStep_.isFinal()) {
329  // Get the PF candidates collection
330  theEvent.getByToken(pfCandidates_, pfCandidateHandle);
331  //OOT photons have no PF candidates so its not an error in this case
332  if (!pfCandidateHandle.isValid() && !recoStep_.isOOT()) {
333  throw cms::Exception("GEDPhotonProducer") << "Error! Can't get the pfCandidates";
334  }
335  }
336 
337  //AA
338  //Get the severity level object
340  theEventSetup.get<EcalSeverityLevelAlgoRcd>().get(sevLv);
341  //
342 
343  // get Hcal towers collection
344  Handle<CaloTowerCollection> hcalTowersHandle;
345  if (not hcalTowers_.isUninitialized()) {
346  theEvent.getByToken(hcalTowers_, hcalTowersHandle);
347  }
348 
349  // get the geometry from the event setup:
350  theEventSetup.get<CaloGeometryRecord>().get(theCaloGeom_);
351 
352  //
353  // update energy correction function
354  // energyCorrectionF->init(theEventSetup);
355 
356  edm::ESHandle<CaloTopology> pTopology;
357  theEventSetup.get<CaloTopologyRecord>().get(theCaloTopo_);
359 
360  // Get the primary event vertex
361  Handle<reco::VertexCollection> vertexHandle;
362  const reco::VertexCollection dummyVC;
363  bool validVertex = true;
364  if (usePrimaryVertex_) {
365  theEvent.getByToken(vertexProducer_, vertexHandle);
366  if (!vertexHandle.isValid()) {
367  throw cms::Exception("GEDPhotonProducer") << "Error! Can't get the product primary Vertex Collection";
368  }
369  }
370  const reco::VertexCollection& vertexCollection(usePrimaryVertex_ && validVertex ? *(vertexHandle.product())
371  : dummyVC);
372 
373  // math::XYZPoint vtx(0.,0.,0.);
374  //if (vertexCollection.size()>0) vtx = vertexCollection.begin()->position();
375 
376  // get the regression calculator ready
377  thePhotonEnergyCorrector_->init(theEventSetup);
379  thePhotonEnergyCorrector_->gedRegression()->setEvent(theEvent);
380  thePhotonEnergyCorrector_->gedRegression()->setEventContent(theEventSetup);
381  }
382 
383  int iSC = 0; // index in photon collection
384  // Loop over barrel and endcap SC collections and fill the photon collection
385  if (validPhotonCoreHandle)
386  fillPhotonCollection(theEvent,
387  theEventSetup,
388  photonCoreHandle,
389  topology,
390  &barrelRecHits,
391  &endcapRecHits,
392  &preshowerRecHits,
393  *hcalTowersHandle,
394  //vtx,
397  iSC);
398 
399  iSC = 0;
400  if (validPhotonHandle && recoStep_.isFinal())
401  fillPhotonCollection(theEvent,
402  theEventSetup,
403  photonHandle,
404  pfCandidateHandle,
405  pfEGCandidateHandle,
406  pfEGCandToPhotonMap,
407  vertexHandle,
409  iSC,
410  phoChargedIsolationMap,
411  phoNeutralHadronIsolationMap,
412  phoPhotonIsolationMap,
413  phoChargedWorstVtxIsoMap,
414  phoChargedWorstVtxGeomVetoIsoMap,
415  phoChargedPFPVIsoMap,
416  phoPFECALClusIsolationMap,
417  phoPFHCALClusIsolationMap);
418 
419  // put the product in the event
420  edm::LogInfo("GEDPhotonProducer") << " Put in the event " << iSC << " Photon Candidates \n";
421  outputPhotonCollection_p->assign(outputPhotonCollection.begin(), outputPhotonCollection.end());
422  const edm::OrphanHandle<reco::PhotonCollection> photonOrphHandle =
423  theEvent.put(std::move(outputPhotonCollection_p), photonCollection_);
424 
427  auto pfEGCandToPhotonMap_p = std::make_unique<edm::ValueMap<reco::PhotonRef>>();
428  edm::ValueMap<reco::PhotonRef>::Filler filler(*pfEGCandToPhotonMap_p);
429  unsigned nObj = pfEGCandidateHandle->size();
430  std::vector<reco::PhotonRef> values(nObj);
432  for (unsigned int lCand = 0; lCand < nObj; lCand++) {
433  reco::PFCandidateRef pfCandRef(reco::PFCandidateRef(pfEGCandidateHandle, lCand));
434  reco::SuperClusterRef pfScRef = pfCandRef->superClusterRef();
435 
436  for (unsigned int lSC = 0; lSC < photonOrphHandle->size(); lSC++) {
437  reco::PhotonRef photonRef(reco::PhotonRef(photonOrphHandle, lSC));
438  reco::SuperClusterRef scRef = photonRef->superCluster();
439  if (pfScRef != scRef)
440  continue;
441  values[lCand] = photonRef;
442  }
443  }
444 
445  filler.insert(pfEGCandidateHandle, values.begin(), values.end());
446  filler.fill();
447  theEvent.put(std::move(pfEGCandToPhotonMap_p), valueMapPFCandPhoton_);
448  }
449 }
450 
452  edm::EventSetup const& es,
453  const edm::Handle<reco::PhotonCoreCollection>& photonCoreHandle,
454  const CaloTopology* topology,
455  const EcalRecHitCollection* ecalBarrelHits,
456  const EcalRecHitCollection* ecalEndcapHits,
461  int& iSC) {
463  const EcalRecHitCollection* hits = nullptr;
464  std::vector<double> preselCutValues;
465  std::vector<int> flags_, severitiesexcl_;
466 
467  for (unsigned int lSC = 0; lSC < photonCoreHandle->size(); lSC++) {
468  reco::PhotonCoreRef coreRef(reco::PhotonCoreRef(photonCoreHandle, lSC));
469  reco::SuperClusterRef parentSCRef = coreRef->parentSuperCluster();
470  reco::SuperClusterRef scRef = coreRef->superCluster();
471 
472  // const reco::SuperCluster* pClus=&(*scRef);
473  iSC++;
474 
475  DetId::Detector thedet = scRef->seed()->hitsAndFractions()[0].first.det();
476  int subdet = scRef->seed()->hitsAndFractions()[0].first.subdetId();
477  if (subdet == EcalBarrel) {
478  preselCutValues = preselCutValuesBarrel_;
479  hits = ecalBarrelHits;
480  flags_ = flagsexclEB_;
481  severitiesexcl_ = severitiesexclEB_;
482  } else if (subdet == EcalEndcap) {
483  preselCutValues = preselCutValuesEndcap_;
484  hits = ecalEndcapHits;
485  flags_ = flagsexclEE_;
486  severitiesexcl_ = severitiesexclEE_;
487  } else if (EcalTools::isHGCalDet(thedet)) {
488  preselCutValues = preselCutValuesEndcap_;
489  hits = nullptr;
490  flags_ = flagsexclEE_;
491  severitiesexcl_ = severitiesexclEE_;
492  } else {
493  edm::LogWarning("") << "GEDPhotonProducer: do not know if it is a barrel or endcap SuperCluster: " << thedet
494  << ' ' << subdet;
495  }
496 
497  // SC energy preselection
498  if (parentSCRef.isNonnull() &&
499  ptFast(parentSCRef->energy(), parentSCRef->position(), math::XYZPoint(0, 0, 0)) <= preselCutValues[0])
500  continue;
501  // calculate HoE
502 
503  double HoE1, HoE2;
504  HoE1 = HoE2 = 0.;
505 
506  std::vector<CaloTowerDetId> TowersBehindClus;
507  float hcalDepth1OverEcalBc, hcalDepth2OverEcalBc;
508  hcalDepth1OverEcalBc = hcalDepth2OverEcalBc = 0.f;
509  bool invalidHcal = false;
510 
511  if (not hcalTowers_.isUninitialized()) {
512  EgammaTowerIsolation towerIso1(hOverEConeSize_, 0., 0., 1, &hcalTowers);
513  EgammaTowerIsolation towerIso2(hOverEConeSize_, 0., 0., 2, &hcalTowers);
514  HoE1 = towerIso1.getTowerESum(&(*scRef)) / scRef->energy();
515  HoE2 = towerIso2.getTowerESum(&(*scRef)) / scRef->energy();
516 
517  EgammaHadTower towerIsoBehindClus(es);
518  TowersBehindClus = towerIsoBehindClus.towersOf(*scRef);
519  hcalDepth1OverEcalBc = towerIsoBehindClus.getDepth1HcalESum(TowersBehindClus, hcalTowers) / scRef->energy();
520  hcalDepth2OverEcalBc = towerIsoBehindClus.getDepth2HcalESum(TowersBehindClus, hcalTowers) / scRef->energy();
521 
522  if (checkHcalStatus_ && hcalDepth1OverEcalBc == 0 && hcalDepth2OverEcalBc == 0) {
523  invalidHcal = !towerIsoBehindClus.hasActiveHcal(TowersBehindClus);
524  }
525  }
526 
527  // std::cout << " GEDPhotonProducer calculation of HoE with towers in a cone " << HoE1 << " " << HoE2 << std::endl;
528  //std::cout << " GEDPhotonProducer calcualtion of HoE with towers behind the BCs " << hcalDepth1OverEcalBc << " " << hcalDepth2OverEcalBc << std::endl;
529 
530  float maxXtal = (hits != nullptr ? EcalClusterTools::eMax(*(scRef->seed()), &(*hits)) : 0.f);
531  //AA
532  //Change these to consider severity level of hits
533  float e1x5 = (hits != nullptr ? EcalClusterTools::e1x5(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
534  float e2x5 = (hits != nullptr ? EcalClusterTools::e2x5Max(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
535  float e3x3 = (hits != nullptr ? EcalClusterTools::e3x3(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
536  float e5x5 = (hits != nullptr ? EcalClusterTools::e5x5(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
537  std::vector<float> cov =
538  (hits != nullptr ? EcalClusterTools::covariances(*(scRef->seed()), &(*hits), &(*topology), geometry)
539  : std::vector<float>({0.f, 0.f, 0.f}));
540  std::vector<float> locCov =
541  (hits != nullptr ? EcalClusterTools::localCovariances(*(scRef->seed()), &(*hits), &(*topology))
542  : std::vector<float>({0.f, 0.f, 0.f}));
543 
544  float sigmaEtaEta = sqrt(cov[0]);
545  float sigmaIetaIeta = sqrt(locCov[0]);
546 
547  float full5x5_maxXtal = (hits != nullptr ? noZS::EcalClusterTools::eMax(*(scRef->seed()), &(*hits)) : 0.f);
548  //AA
549  //Change these to consider severity level of hits
550  float full5x5_e1x5 =
551  (hits != nullptr ? noZS::EcalClusterTools::e1x5(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
552  float full5x5_e2x5 =
553  (hits != nullptr ? noZS::EcalClusterTools::e2x5Max(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
554  float full5x5_e3x3 =
555  (hits != nullptr ? noZS::EcalClusterTools::e3x3(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
556  float full5x5_e5x5 =
557  (hits != nullptr ? noZS::EcalClusterTools::e5x5(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
558  std::vector<float> full5x5_cov =
559  (hits != nullptr ? noZS::EcalClusterTools::covariances(*(scRef->seed()), &(*hits), &(*topology), geometry)
560  : std::vector<float>({0.f, 0.f, 0.f}));
561  std::vector<float> full5x5_locCov =
562  (hits != nullptr ? noZS::EcalClusterTools::localCovariances(*(scRef->seed()), &(*hits), &(*topology))
563  : std::vector<float>({0.f, 0.f, 0.f}));
564 
565  float full5x5_sigmaEtaEta = sqrt(full5x5_cov[0]);
566  float full5x5_sigmaIetaIeta = sqrt(full5x5_locCov[0]);
567 
568  // compute position of ECAL shower
569  math::XYZPoint caloPosition = scRef->position();
570 
572  double photonEnergy = 1.;
573  math::XYZPoint vtx(0., 0., 0.);
574  if (!vertexCollection.empty())
575  vtx = vertexCollection.begin()->position();
576  // compute momentum vector of photon from primary vertex and cluster position
577  math::XYZVector direction = caloPosition - vtx;
578  //math::XYZVector momentum = direction.unit() * photonEnergy ;
579  math::XYZVector momentum = direction.unit();
580 
581  // Create dummy candidate with unit momentum and zero energy to allow setting of all variables. The energy is set for last.
582  math::XYZTLorentzVectorD p4(momentum.x(), momentum.y(), momentum.z(), photonEnergy);
583  reco::Photon newCandidate(p4, caloPosition, coreRef, vtx);
584 
585  //std::cout << " standard p4 before " << newCandidate.p4() << " energy " << newCandidate.energy() << std::endl;
586  //std::cout << " type " <<newCandidate.getCandidateP4type() << " standard p4 after " << newCandidate.p4() << " energy " << newCandidate.energy() << std::endl;
587 
588  // Calculate fiducial flags and isolation variable. Blocked are filled from the isolationCalculator
589  reco::Photon::FiducialFlags fiducialFlags;
590  reco::Photon::IsolationVariables isolVarR03, isolVarR04;
591  if (!EcalTools::isHGCalDet(thedet)) {
592  thePhotonIsolationCalculator_->calculate(&newCandidate, evt, es, fiducialFlags, isolVarR04, isolVarR03);
593  }
594  newCandidate.setFiducialVolumeFlags(fiducialFlags);
595  newCandidate.setIsolationVariables(isolVarR04, isolVarR03);
596 
598  reco::Photon::ShowerShape showerShape;
599  showerShape.e1x5 = e1x5;
600  showerShape.e2x5 = e2x5;
601  showerShape.e3x3 = e3x3;
602  showerShape.e5x5 = e5x5;
603  showerShape.maxEnergyXtal = maxXtal;
604  showerShape.sigmaEtaEta = sigmaEtaEta;
605  showerShape.sigmaIetaIeta = sigmaIetaIeta;
606  showerShape.hcalDepth1OverEcal = HoE1;
607  showerShape.hcalDepth2OverEcal = HoE2;
608  showerShape.hcalDepth1OverEcalBc = hcalDepth1OverEcalBc;
609  showerShape.hcalDepth2OverEcalBc = hcalDepth2OverEcalBc;
610  showerShape.hcalTowersBehindClusters = TowersBehindClus;
611  showerShape.invalidHcal = invalidHcal;
613  const float spp = (!edm::isFinite(locCov[2]) ? 0. : sqrt(locCov[2]));
614  const float sep = locCov[1];
615  showerShape.sigmaIetaIphi = sep;
616  showerShape.sigmaIphiIphi = spp;
617  showerShape.e2nd = (hits != nullptr ? EcalClusterTools::e2nd(*(scRef->seed()), &(*hits)) : 0.f);
618  showerShape.eTop = (hits != nullptr ? EcalClusterTools::eTop(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
619  showerShape.eLeft = (hits != nullptr ? EcalClusterTools::eLeft(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
620  showerShape.eRight = (hits != nullptr ? EcalClusterTools::eRight(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
621  showerShape.eBottom = (hits != nullptr ? EcalClusterTools::eBottom(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
622  showerShape.e1x3 = (hits != nullptr ? EcalClusterTools::e1x3(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
623  showerShape.e2x2 = (hits != nullptr ? EcalClusterTools::e2x2(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
624  showerShape.e2x5Max = (hits != nullptr ? EcalClusterTools::e2x5Max(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
625  showerShape.e2x5Left =
626  (hits != nullptr ? EcalClusterTools::e2x5Left(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
627  showerShape.e2x5Right =
628  (hits != nullptr ? EcalClusterTools::e2x5Right(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
629  showerShape.e2x5Top = (hits != nullptr ? EcalClusterTools::e2x5Top(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
630  showerShape.e2x5Bottom =
631  (hits != nullptr ? EcalClusterTools::e2x5Bottom(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
632  if (hits) {
633  Cluster2ndMoments clus2ndMoments = EcalClusterTools::cluster2ndMoments(*(scRef->seed()), *hits);
634  showerShape.smMajor = clus2ndMoments.sMaj;
635  showerShape.smMinor = clus2ndMoments.sMin;
636  showerShape.smAlpha = clus2ndMoments.alpha;
637  } else {
638  showerShape.smMajor = 0.f;
639  showerShape.smMinor = 0.f;
640  showerShape.smAlpha = 0.f;
641  }
642 
643  // fill preshower shapes
645  const float sigmaRR = toolsforES.eseffsirir(*scRef);
646  showerShape.effSigmaRR = sigmaRR;
647  newCandidate.setShowerShapeVariables(showerShape);
648 
649  reco::Photon::SaturationInfo saturationInfo;
650  const reco::CaloCluster& seedCluster = *(scRef->seed());
651  DetId seedXtalId = seedCluster.seed();
652  int nSaturatedXtals = 0;
653  bool isSeedSaturated = false;
654  if (hits != nullptr) {
655  const auto hitsAndFractions = scRef->hitsAndFractions();
656  for (auto&& hitFractionPair : hitsAndFractions) {
657  auto&& ecalRecHit = hits->find(hitFractionPair.first);
658  if (ecalRecHit == hits->end())
659  continue;
660  if (ecalRecHit->checkFlag(EcalRecHit::Flags::kSaturated)) {
661  nSaturatedXtals++;
662  if (seedXtalId == ecalRecHit->detid())
663  isSeedSaturated = true;
664  }
665  }
666  }
667  saturationInfo.nSaturatedXtals = nSaturatedXtals;
668  saturationInfo.isSeedSaturated = isSeedSaturated;
669  newCandidate.setSaturationInfo(saturationInfo);
670 
672  reco::Photon::ShowerShape full5x5_showerShape;
673  full5x5_showerShape.e1x5 = full5x5_e1x5;
674  full5x5_showerShape.e2x5 = full5x5_e2x5;
675  full5x5_showerShape.e3x3 = full5x5_e3x3;
676  full5x5_showerShape.e5x5 = full5x5_e5x5;
677  full5x5_showerShape.maxEnergyXtal = full5x5_maxXtal;
678  full5x5_showerShape.sigmaEtaEta = full5x5_sigmaEtaEta;
679  full5x5_showerShape.sigmaIetaIeta = full5x5_sigmaIetaIeta;
681  const float full5x5_spp = (!edm::isFinite(full5x5_locCov[2]) ? 0. : sqrt(full5x5_locCov[2]));
682  const float full5x5_sep = full5x5_locCov[1];
683  full5x5_showerShape.sigmaIetaIphi = full5x5_sep;
684  full5x5_showerShape.sigmaIphiIphi = full5x5_spp;
685  full5x5_showerShape.e2nd = (hits != nullptr ? noZS::EcalClusterTools::e2nd(*(scRef->seed()), &(*hits)) : 0.f);
686  full5x5_showerShape.eTop =
687  (hits != nullptr ? noZS::EcalClusterTools::eTop(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
688  full5x5_showerShape.eLeft =
689  (hits != nullptr ? noZS::EcalClusterTools::eLeft(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
690  full5x5_showerShape.eRight =
691  (hits != nullptr ? noZS::EcalClusterTools::eRight(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
692  full5x5_showerShape.eBottom =
693  (hits != nullptr ? noZS::EcalClusterTools::eBottom(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
694  full5x5_showerShape.e1x3 =
695  (hits != nullptr ? noZS::EcalClusterTools::e1x3(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
696  full5x5_showerShape.e2x2 =
697  (hits != nullptr ? noZS::EcalClusterTools::e2x2(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
698  full5x5_showerShape.e2x5Max =
699  (hits != nullptr ? noZS::EcalClusterTools::e2x5Max(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
700  full5x5_showerShape.e2x5Left =
701  (hits != nullptr ? noZS::EcalClusterTools::e2x5Left(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
702  full5x5_showerShape.e2x5Right =
703  (hits != nullptr ? noZS::EcalClusterTools::e2x5Right(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
704  full5x5_showerShape.e2x5Top =
705  (hits != nullptr ? noZS::EcalClusterTools::e2x5Top(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
706  full5x5_showerShape.e2x5Bottom =
707  (hits != nullptr ? noZS::EcalClusterTools::e2x5Bottom(*(scRef->seed()), &(*hits), &(*topology)) : 0.f);
708  if (hits) {
709  Cluster2ndMoments clus2ndMoments = noZS::EcalClusterTools::cluster2ndMoments(*(scRef->seed()), *hits);
710  full5x5_showerShape.smMajor = clus2ndMoments.sMaj;
711  full5x5_showerShape.smMinor = clus2ndMoments.sMin;
712  full5x5_showerShape.smAlpha = clus2ndMoments.alpha;
713  } else {
714  full5x5_showerShape.smMajor = 0.f;
715  full5x5_showerShape.smMinor = 0.f;
716  full5x5_showerShape.smAlpha = 0.f;
717  }
718  // fill preshower shapes
719  full5x5_showerShape.effSigmaRR = sigmaRR;
720  newCandidate.full5x5_setShowerShapeVariables(full5x5_showerShape);
721 
724  // Photon candidate takes by default (set in photons_cfi.py)
725  // a 4-momentum derived from the ecal photon-specific corrections.
726  if (!EcalTools::isHGCalDet(thedet)) {
727  thePhotonEnergyCorrector_->calculate(evt, newCandidate, subdet, vertexCollection, es);
728  if (candidateP4type_ == "fromEcalEnergy") {
729  newCandidate.setP4(newCandidate.p4(reco::Photon::ecal_photons));
730  newCandidate.setCandidateP4type(reco::Photon::ecal_photons);
731  } else if (candidateP4type_ == "fromRegression1") {
732  newCandidate.setP4(newCandidate.p4(reco::Photon::regression1));
733  newCandidate.setCandidateP4type(reco::Photon::regression1);
734  } else if (candidateP4type_ == "fromRegression2") {
735  newCandidate.setP4(newCandidate.p4(reco::Photon::regression2));
736  newCandidate.setCandidateP4type(reco::Photon::regression2);
737  } else if (candidateP4type_ == "fromRefinedSCRegression") {
738  newCandidate.setP4(newCandidate.p4(reco::Photon::regression2));
739  newCandidate.setCandidateP4type(reco::Photon::regression2);
740  }
741  } else {
742  math::XYZVector gamma_momentum = direction.unit() * scRef->energy();
743  math::XYZTLorentzVectorD p4(gamma_momentum.x(), gamma_momentum.y(), gamma_momentum.z(), scRef->energy());
744  newCandidate.setP4(p4);
745  newCandidate.setCandidateP4type(reco::Photon::ecal_photons);
746  // Make it an EE photon
747  reco::Photon::FiducialFlags fiducialFlags;
748  fiducialFlags.isEE = true;
749  newCandidate.setFiducialVolumeFlags(fiducialFlags);
750  }
751 
752  // std::cout << " final p4 " << newCandidate.p4() << " energy " << newCandidate.energy() << std::endl;
753 
754  // std::cout << " GEDPhotonProducer from candidate HoE with towers in a cone " << newCandidate.hadronicOverEm() << " " << newCandidate.hadronicDepth1OverEm() << " " << newCandidate.hadronicDepth2OverEm() << std::endl;
755  // std::cout << " GEDPhotonProducer from candidate of HoE with towers behind the BCs " << newCandidate.hadTowOverEm() << " " << newCandidate.hadTowDepth1OverEm() << " " << newCandidate.hadTowDepth2OverEm() << std::endl;
756 
757  // fill MIP Vairables for Halo: Block for MIP are filled from PhotonMIPHaloTagger
759  if (subdet == EcalBarrel && runMIPTagger_) {
760  thePhotonMIPHaloTagger_->MIPcalculate(&newCandidate, evt, es, mipVar);
761  newCandidate.setMIPVariables(mipVar);
762  }
763 
765  bool isLooseEM = true;
766  if (newCandidate.pt() < highEt_) {
767  if (newCandidate.hadronicOverEm() >= preselCutValues[1])
768  isLooseEM = false;
769  if (newCandidate.ecalRecHitSumEtConeDR04() > preselCutValues[2] + preselCutValues[3] * newCandidate.pt())
770  isLooseEM = false;
771  if (newCandidate.hcalTowerSumEtConeDR04() > preselCutValues[4] + preselCutValues[5] * newCandidate.pt())
772  isLooseEM = false;
773  if (newCandidate.nTrkSolidConeDR04() > int(preselCutValues[6]))
774  isLooseEM = false;
775  if (newCandidate.nTrkHollowConeDR04() > int(preselCutValues[7]))
776  isLooseEM = false;
777  if (newCandidate.trkSumPtSolidConeDR04() > preselCutValues[8])
778  isLooseEM = false;
779  if (newCandidate.trkSumPtHollowConeDR04() > preselCutValues[9])
780  isLooseEM = false;
781  if (newCandidate.sigmaIetaIeta() > preselCutValues[10])
782  isLooseEM = false;
783  }
784 
785  if (isLooseEM)
786  outputPhotonCollection.push_back(newCandidate);
787  }
788 }
789 
791  edm::EventSetup const& es,
792  const edm::Handle<reco::PhotonCollection>& photonHandle,
793  const edm::Handle<reco::PFCandidateCollection> pfCandidateHandle,
794  const edm::Handle<reco::PFCandidateCollection> pfEGCandidateHandle,
795  edm::ValueMap<reco::PhotonRef> pfEGCandToPhotonMap,
798  int& iSC,
799  const edm::Handle<edm::ValueMap<float>>& chargedHadrons,
800  const edm::Handle<edm::ValueMap<float>>& neutralHadrons,
802  const edm::Handle<edm::ValueMap<float>>& chargedHadronsWorstVtx,
803  const edm::Handle<edm::ValueMap<float>>& chargedHadronsWorstVtxGeomVeto,
804  const edm::Handle<edm::ValueMap<float>>& chargedHadronsPFPV,
805  const edm::Handle<edm::ValueMap<float>>& pfEcalClusters,
806  const edm::Handle<edm::ValueMap<float>>& pfHcalClusters) {
807  std::vector<double> preselCutValues;
808 
809  for (unsigned int lSC = 0; lSC < photonHandle->size(); lSC++) {
810  reco::PhotonRef phoRef(reco::PhotonRef(photonHandle, lSC));
811  reco::SuperClusterRef parentSCRef = phoRef->parentSuperCluster();
812  reco::SuperClusterRef scRef = phoRef->superCluster();
813  DetId::Detector thedet = scRef->seed()->hitsAndFractions()[0].first.det();
814  int subdet = scRef->seed()->hitsAndFractions()[0].first.subdetId();
815  if (subdet == EcalBarrel) {
816  preselCutValues = preselCutValuesBarrel_;
817  } else if (subdet == EcalEndcap) {
818  preselCutValues = preselCutValuesEndcap_;
819  } else if (EcalTools::isHGCalDet(thedet)) {
820  preselCutValues = preselCutValuesEndcap_;
821  } else {
822  edm::LogWarning("") << "GEDPhotonProducer: do not know if it is a barrel or endcap SuperCluster" << thedet << ' '
823  << subdet;
824  }
825 
826  // SC energy preselection
827  if (parentSCRef.isNonnull() &&
828  ptFast(parentSCRef->energy(), parentSCRef->position(), math::XYZPoint(0, 0, 0)) <= preselCutValues[0])
829  continue;
830  reco::Photon newCandidate(*phoRef);
831  iSC++;
832 
833  // Calculate the PF isolation and ID - for the time being there is no calculation. Only the setting
836 
837  //get the pointer for the photon object
838  edm::Ptr<reco::Photon> photonPtr(photonHandle, lSC);
839 
840  if (!recoStep_.isOOT()) { //out of time photons do not have PF info so skip in this case
841  pfIso.chargedHadronIso = (*chargedHadrons)[photonPtr];
842  pfIso.neutralHadronIso = (*neutralHadrons)[photonPtr];
843  pfIso.photonIso = (*photons)[photonPtr];
844  pfIso.chargedHadronWorstVtxIso = (*chargedHadronsWorstVtx)[photonPtr];
845  pfIso.chargedHadronWorstVtxGeomVetoIso = (*chargedHadronsWorstVtxGeomVeto)[photonPtr];
846  pfIso.chargedHadronPFPVIso = (*chargedHadronsPFPV)[photonPtr];
847  }
848 
849  //OOT photons in legacy 80X reminiAOD workflow dont have pf cluster isolation embeded into them at this stage
851  pfIso.sumEcalClusterEt = (*pfEcalClusters)[photonPtr];
852  } else
853  pfIso.sumEcalClusterEt = 0.;
854 
856  pfIso.sumHcalClusterEt = (*pfHcalClusters)[photonPtr];
857  } else
858  pfIso.sumHcalClusterEt = 0.;
859 
860  newCandidate.setPflowIsolationVariables(pfIso);
861  newCandidate.setPflowIDVariables(pfID);
862 
863  // do the regression
864  thePhotonEnergyCorrector_->calculate(evt, newCandidate, subdet, *vertexHandle, es);
865  if (candidateP4type_ == "fromEcalEnergy") {
866  newCandidate.setP4(newCandidate.p4(reco::Photon::ecal_photons));
868  } else if (candidateP4type_ == "fromRegression1") {
869  newCandidate.setP4(newCandidate.p4(reco::Photon::regression1));
871  } else if (candidateP4type_ == "fromRegression2") {
872  newCandidate.setP4(newCandidate.p4(reco::Photon::regression2));
874  } else if (candidateP4type_ == "fromRefinedSCRegression") {
875  newCandidate.setP4(newCandidate.p4(reco::Photon::regression2));
877  }
878 
879  // std::cout << " GEDPhotonProducer pf based isolation chargedHadron " << newCandidate.chargedHadronIso() << " neutralHadron " << newCandidate.neutralHadronIso() << " Photon " << newCandidate.photonIso() << std::endl;
880  //std::cout << " GEDPhotonProducer from candidate HoE with towers in a cone " << newCandidate.hadronicOverEm() << " " << newCandidate.hadronicDepth1OverEm() << " " << newCandidate.hadronicDepth2OverEm() << std::endl;
881  //std::cout << " GEDPhotonProducer from candidate of HoE with towers behind the BCs " << newCandidate.hadTowOverEm() << " " << newCandidate.hadTowDepth1OverEm() << " " << newCandidate.hadTowDepth2OverEm() << std::endl;
882  //std::cout << " standard p4 before " << newCandidate.p4() << " energy " << newCandidate.energy() << std::endl;
883  //std::cout << " type " <<newCandidate.getCandidateP4type() << " standard p4 after " << newCandidate.p4() << " energy " << newCandidate.energy() << std::endl;
884  //std::cout << " final p4 " << newCandidate.p4() << " energy " << newCandidate.energy() << std::endl;
885 
886  outputPhotonCollection.push_back(newCandidate);
887  }
888 }
EgHLTOffHistBins_cfi.e1x5
e1x5
Definition: EgHLTOffHistBins_cfi.py:22
reco::Photon::ShowerShape::eTop
float eTop
Definition: Photon.h:155
GEDPhotonProducer::conf_
edm::ParameterSet conf_
Definition: GEDPhotonProducer.h:143
reco::Photon::ShowerShape::sigmaIphiIphi
float sigmaIphiIphi
Definition: Photon.h:153
reco::Photon::ShowerShape::maxEnergyXtal
float maxEnergyXtal
Definition: Photon.h:144
GEDPhotonProducer::preshowerHits_
edm::EDGetTokenT< EcalRecHitCollection > preshowerHits_
Definition: GEDPhotonProducer.h:99
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
reco::Photon::ShowerShape::hcalDepth2OverEcalBc
float hcalDepth2OverEcalBc
Definition: Photon.h:148
reco::Photon::ShowerShape::eRight
float eRight
Definition: Photon.h:157
GEDPhotonProducer::thePhotonMIPHaloTagger_
PhotonMIPHaloTagger * thePhotonMIPHaloTagger_
Definition: GEDPhotonProducer.h:152
PhotonMIPHaloTagger::setup
void setup(const edm::ParameterSet &conf, edm::ConsumesCollector &&iC)
Definition: PhotonMIPHaloTagger.cc:47
PhotonIsolationCalculator::setup
void setup(const edm::ParameterSet &conf, std::vector< int > const &flagsEB_, std::vector< int > const &flagsEE_, std::vector< int > const &severitiesEB_, std::vector< int > const &severitiesEE_, edm::ConsumesCollector &&iC)
Definition: PhotonIsolationCalculator.cc:44
geometry
ESHandle< TrackerGeometry > geometry
Definition: TkLasBeamFitter.cc:200
GEDPhotonProducer::valueMapPFCandPhoton_
std::string valueMapPFCandPhoton_
Definition: GEDPhotonProducer.h:119
reco::Photon::ShowerShape::e2x5Left
float e2x5Left
Definition: Photon.h:162
reco::Photon::ShowerShape::sigmaEtaEta
float sigmaEtaEta
Definition: Photon.h:138
MessageLogger.h
edm::Handle::product
T const * product() const
Definition: Handle.h:70
hfClusterShapes_cfi.hits
hits
Definition: hfClusterShapes_cfi.py:5
reco::Photon::SaturationInfo::nSaturatedXtals
int nSaturatedXtals
Definition: Photon.h:259
reco::Photon::ShowerShape::e1x5
float e1x5
Definition: Photon.h:140
EcalTools::isHGCalDet
static bool isHGCalDet(DetId::Detector thedet)
identify HGCal cells
Definition: EcalTools.h:48
step
step
Definition: StallMonitor.cc:94
f
double f[11][100]
Definition: MuScleFitUtils.cc:78
PFCandidate.h
GEDPhotonProducer::~GEDPhotonProducer
~GEDPhotonProducer() override
Definition: GEDPhotonProducer.cc:217
GEDPhotonProducer::produce
void produce(edm::Event &evt, const edm::EventSetup &es) override
Definition: GEDPhotonProducer.cc:232
EcalSeverityLevelAlgoRcd.h
reco::Photon::ShowerShape::e1x3
float e1x3
Definition: Photon.h:159
edm::Run
Definition: Run.h:45
GEDPhotonProducer::thePhotonIsolationCalculator_
PhotonIsolationCalculator * thePhotonIsolationCalculator_
Definition: GEDPhotonProducer.h:121
reco::Photon::FiducialFlags::isEE
bool isEE
Definition: Photon.h:96
CaloGeometryRecord
Definition: CaloGeometryRecord.h:30
EcalClusterToolsT::e2x5Bottom
static float e2x5Bottom(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
Definition: EcalClusterTools.h:593
reco::Photon::ShowerShape::e2nd
float e2nd
Definition: Photon.h:154
edm
HLT enums.
Definition: AlignableModifier.h:19
GEDPhotonProducer::beginRun
void beginRun(edm::Run const &r, edm::EventSetup const &es) final
Definition: GEDPhotonProducer.cc:224
gedPhotons_cfi.mipVariableSet
mipVariableSet
Definition: gedPhotons_cfi.py:36
math::XYZTLorentzVectorD
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > XYZTLorentzVectorD
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:14
EcalClusterToolsT::covariances
static std::vector< float > covariances(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology, const CaloGeometry *geometry, float w0=4.7)
Definition: EcalClusterTools.h:957
reco::VertexCollection
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
geometry
Definition: geometry.py:1
edm::LogInfo
Definition: MessageLogger.h:254
GEDPhotonProducer::thePhotonEnergyCorrector_
PhotonEnergyCorrector * thePhotonEnergyCorrector_
Definition: GEDPhotonProducer.h:158
reco::Photon::p4
const LorentzVector & p4(P4type type) const
reco::Photon::ShowerShape::e2x2
float e2x2
Definition: Photon.h:160
reco::Photon::ShowerShape::invalidHcal
bool invalidHcal
Definition: Photon.h:150
reco::Photon::SaturationInfo
Definition: Photon.h:258
reco::Photon::PflowIsolationVariables::chargedHadronPFPVIso
float chargedHadronPFPVIso
Definition: Photon.h:463
EcalClusterToolsT::eMax
static float eMax(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits)
Definition: EcalClusterTools.h:550
edm::SortedCollection< EcalRecHit >
PhotonFwd.h
GEDPhotonProducer::phoChargedPFPVIsoToken_
edm::EDGetTokenT< edm::ValueMap< float > > phoChargedPFPVIsoToken_
Definition: GEDPhotonProducer.h:112
HLT_2018_cff.endcapRecHits
endcapRecHits
Definition: HLT_2018_cff.py:13538
GEDPhotonProducer::theCaloTopo_
edm::ESHandle< CaloTopology > theCaloTopo_
Definition: GEDPhotonProducer.h:147
reco::Photon::PflowIsolationVariables::chargedHadronIso
float chargedHadronIso
Definition: Photon.h:460
CaloTopologyRecord
Definition: CaloTopologyRecord.h:10
PhotonCore.h
reco::Photon::ShowerShape::eBottom
float eBottom
Definition: Photon.h:158
findQualityFiles.v
v
Definition: findQualityFiles.py:179
MonitorAlCaEcalPi0_cfi.posCalcParameters
posCalcParameters
Definition: MonitorAlCaEcalPi0_cfi.py:72
edm::Handle
Definition: AssociativeIterator.h:50
GEDPhotonProducer::photonCollection_
std::string photonCollection_
Definition: GEDPhotonProducer.h:92
GEDPhotonProducer::flagsexclEB_
std::vector< int > flagsexclEB_
Definition: GEDPhotonProducer.h:126
CaloTopology
Definition: CaloTopology.h:19
reco::Photon::PflowIsolationVariables::neutralHadronIso
float neutralHadronIso
Definition: Photon.h:464
EcalBarrel
Definition: EcalSubdetector.h:10
EgammaHadTower.h
PhotonIsolationCalculator
Definition: PhotonIsolationCalculator.h:17
edm::Ref< PFCandidateCollection >
ForwardSubdetector.h
CaloConeSelector.h
reco::Photon::ShowerShape::e2x5Bottom
float e2x5Bottom
Definition: Photon.h:165
PhotonMIPHaloTagger::MIPcalculate
void MIPcalculate(const reco::Photon *, const edm::Event &, const edm::EventSetup &es, reco::Photon::MIPVariables &mipId)
Definition: PhotonMIPHaloTagger.cc:57
reco::Photon::PflowIsolationVariables::chargedHadronWorstVtxGeomVetoIso
float chargedHadronWorstVtxGeomVetoIso
Definition: Photon.h:462
config
Definition: config.py:1
edm::InputTag::label
std::string const & label() const
Definition: InputTag.h:36
DetId
Definition: DetId.h:17
Photon.h
GEDPhotonProducer::photonCoreProducerT_
edm::EDGetTokenT< reco::PhotonCoreCollection > photonCoreProducerT_
Definition: GEDPhotonProducer.h:95
reco::Photon::PflowIsolationVariables
Definition: Photon.h:459
CaloGeometry
Definition: CaloGeometry.h:21
EgammaHadTower::hasActiveHcal
bool hasActiveHcal(const std::vector< CaloTowerDetId > &towers) const
Definition: EgammaHadTower.cc:116
reco::Photon::ShowerShape::sigmaIetaIphi
float sigmaIetaIphi
Definition: Photon.h:152
GEDPhotonProducer::flagsexclEE_
std::vector< int > flagsexclEE_
Definition: GEDPhotonProducer.h:127
EgammaTowerIsolation::getTowerESum
double getTowerESum(const reco::Candidate *cand, const std::vector< CaloTowerDetId > *detIdToExclude=nullptr) const
Definition: EgammaTowerIsolation.h:208
reco::Photon::ecal_photons
Definition: Photon.h:273
EgammaHadTower::getDepth2HcalESum
double getDepth2HcalESum(const std::vector< CaloTowerDetId > &towers, CaloTowerCollection const &) const
Definition: EgammaHadTower.cc:105
GEDPhotonProducer::recoStep_
RecoStepInfo recoStep_
Definition: GEDPhotonProducer.h:140
EcalClusterToolsT::e2x5Max
static float e2x5Max(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
Definition: EcalClusterTools.h:603
edm::EventSetup::get
T get() const
Definition: EventSetup.h:73
reco::Photon::ShowerShape::eLeft
float eLeft
Definition: Photon.h:156
EcalClusterToolsT::e2x5Top
static float e2x5Top(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
Definition: EcalClusterTools.h:585
reco::Photon::setPflowIsolationVariables
void setPflowIsolationVariables(const PflowIsolationVariables &pfisol)
Set Particle Flow Isolation variables.
Definition: Photon.h:497
ecaldqm::topology
const CaloTopology * topology(nullptr)
GEDPhotonProducer::endcapEcalHits_
edm::EDGetTokenT< EcalRecHitCollection > endcapEcalHits_
Definition: GEDPhotonProducer.h:98
EcalClusterToolsT::e2x2
static float e2x2(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
Definition: EcalClusterTools.h:489
contentValuesCheck.values
values
Definition: contentValuesCheck.py:38
reco::Photon::ShowerShape::smAlpha
float smAlpha
Definition: Photon.h:168
GEDPhotonProducer::pfEgammaCandidates_
edm::EDGetTokenT< reco::PFCandidateCollection > pfEgammaCandidates_
Definition: GEDPhotonProducer.h:100
edm::EDGetTokenT::isUninitialized
bool isUninitialized() const
Definition: EDGetToken.h:70
reco::CaloCluster
Definition: CaloCluster.h:31
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
edm::ESHandle< EcalSeverityLevelAlgo >
EcalSeverityLevelAlgoRcd
Definition: EcalSeverityLevelAlgoRcd.h:12
HLT_2018_cff.full5x5_sigmaIetaIeta
full5x5_sigmaIetaIeta
Definition: HLT_2018_cff.py:12293
reco::Photon::ShowerShape::smMajor
float smMajor
Definition: Photon.h:166
GEDPhotonProducer::posCalculator_
PositionCalc posCalculator_
Definition: GEDPhotonProducer.h:144
HCALHighEnergyHPDFilter_cfi.energy
energy
Definition: HCALHighEnergyHPDFilter_cfi.py:5
GEDPhotonProducer::severitiesexclEE_
std::vector< int > severitiesexclEE_
Definition: GEDPhotonProducer.h:129
StringToEnumValue.h
edm::Event::getByToken
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:528
GEDPhotonProducer::minR9Endcap_
double minR9Endcap_
Definition: GEDPhotonProducer.h:136
Cluster2ndMoments::alpha
float alpha
Definition: EcalClusterTools.h:68
EgammaTowerIsolation.h
reco::Photon::ShowerShape::hcalDepth1OverEcalBc
float hcalDepth1OverEcalBc
Definition: Photon.h:147
EcalClusterLazyTools
EcalClusterToolsT::cluster2ndMoments
static Cluster2ndMoments cluster2ndMoments(const reco::BasicCluster &basicCluster, const EcalRecHitCollection &recHits, double phiCorrectionFactor=0.8, double w0=4.7, bool useLogWeights=true)
Definition: EcalClusterTools.h:1446
EcalSeverityLevelAlgo.h
reco::Photon::ShowerShape::e2x5Right
float e2x5Right
Definition: Photon.h:163
EcalClusterToolsT::eTop
static float eTop(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
Definition: EcalClusterTools.h:668
CaloGeometryRecord.h
GEDPhotonProducer::phoChargedWorstVtxGeomVetoIsoToken_
edm::EDGetTokenT< edm::ValueMap< float > > phoChargedWorstVtxGeomVetoIsoToken_
Definition: GEDPhotonProducer.h:111
badGlobalMuonTaggersAOD_cff.vtx
vtx
Definition: badGlobalMuonTaggersAOD_cff.py:5
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
Vertex.h
GEDPhotonProducer::phoChargedIsolationToken_
edm::EDGetTokenT< edm::ValueMap< float > > phoChargedIsolationToken_
Definition: GEDPhotonProducer.h:107
EcalEndcap
Definition: EcalSubdetector.h:10
edm::LogWarning
Definition: MessageLogger.h:141
reco::Photon::ShowerShape::effSigmaRR
float effSigmaRR
Definition: Photon.h:151
GEDPhotonProducer::phoPFHCALClusIsolationToken_
edm::EDGetTokenT< edm::ValueMap< float > > phoPFHCALClusIsolationToken_
Definition: GEDPhotonProducer.h:115
ClusterShape.h
edm::ParameterSet::exists
bool exists(std::string const &parameterName) const
checks if a parameter exists
Definition: ParameterSet.cc:674
GEDPhotonProducer::GEDPhotonProducer
GEDPhotonProducer(const edm::ParameterSet &ps)
Definition: GEDPhotonProducer.cc:65
IOMC_cff.ecalRecHit
ecalRecHit
Definition: IOMC_cff.py:103
CaloSubdetectorGeometry.h
GEDPhotonProducer::photonProducerT_
edm::EDGetTokenT< reco::PhotonCollection > photonProducerT_
Definition: GEDPhotonProducer.h:96
reco::Photon::PflowIsolationVariables::chargedHadronWorstVtxIso
float chargedHadronWorstVtxIso
Definition: Photon.h:461
edm::ParameterSet
Definition: ParameterSet.h:36
math::XYZPoint
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
Cluster2ndMoments::sMaj
float sMaj
Definition: EcalClusterTools.h:65
reco::Photon::ShowerShape::e2x5Max
float e2x5Max
Definition: Photon.h:161
reco::Photon::ShowerShape::hcalDepth2OverEcal
float hcalDepth2OverEcal
Definition: Photon.h:146
GEDPhotonProducer::barrelEcalHits_
edm::EDGetTokenT< EcalRecHitCollection > barrelEcalHits_
Definition: GEDPhotonProducer.h:97
reco::Photon::ShowerShape::e2x5Top
float e2x5Top
Definition: Photon.h:164
PhotonMIPHaloTagger
Definition: PhotonMIPHaloTagger.h:17
GEDPhotonProducer::RecoStepInfo::isOOT
bool isOOT() const
Definition: GEDPhotonProducer.h:54
reco::Photon::ShowerShape::sigmaIetaIeta
float sigmaIetaIeta
Definition: Photon.h:139
cosmicPhotonAnalyzer_cfi.eMax
eMax
Definition: cosmicPhotonAnalyzer_cfi.py:10
trigObjTnPSource_cfi.filler
filler
Definition: trigObjTnPSource_cfi.py:21
GEDPhotonProducer::RecoStepInfo::flags_
unsigned int flags_
Definition: GEDPhotonProducer.h:58
edm::Ref::isNonnull
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:238
GEDPhotonProducer::RecoStepInfo::RecoStepInfo
RecoStepInfo(const std::string &recoStep)
Definition: GEDPhotonProducer.cc:50
GEDPhotonProducer::candidateP4type_
std::string candidateP4type_
Definition: GEDPhotonProducer.h:159
EcalClusterToolsT::eBottom
static float eBottom(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
Definition: EcalClusterTools.h:676
reco::Photon::ShowerShape::e2x5
float e2x5
Definition: Photon.h:141
math::XYZVector
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
CaloTopologyRecord.h
reco::Photon::ShowerShape::smMinor
float smMinor
Definition: Photon.h:167
reco::Photon::FiducialFlags
Definition: Photon.h:93
position
static int position[264][3]
Definition: ReadPGInfo.cc:289
GEDPhotonProducer::RecoStepInfo::kOOT
Definition: GEDPhotonProducer.h:51
EgammaTowerIsolation
Definition: EgammaTowerIsolation.h:196
PositionCalc
Definition: PositionCalc.h:29
GEDPhotonProducer::severitiesexclEB_
std::vector< int > severitiesexclEB_
Definition: GEDPhotonProducer.h:128
GEDPhotonProducer::hOverEConeSize_
double hOverEConeSize_
Definition: GEDPhotonProducer.h:131
createfilelist.int
int
Definition: createfilelist.py:10
p4
double p4[4]
Definition: TauolaWrapper.h:92
edm::Event::put
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:132
GEDPhotonProducer::minR9Barrel_
double minR9Barrel_
Definition: GEDPhotonProducer.h:135
GEDPhotonProducer::RecoStepInfo::kFinal
Definition: GEDPhotonProducer.h:51
BPHMonitor_cfi.photons
photons
Definition: BPHMonitor_cfi.py:91
DetId::Detector
Detector
Definition: DetId.h:24
EcalClusterToolsT::e2nd
static float e2nd(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits)
Definition: EcalClusterTools.h:555
edm::EventSetup
Definition: EventSetup.h:57
gedPhotons_cfi.isolationSumsCalculatorSet
isolationSumsCalculatorSet
Definition: gedPhotons_cfi.py:34
get
#define get
reco::Photon::IsolationVariables
Definition: Photon.h:358
EcalTools.h
reco::CaloCluster::seed
DetId seed() const
return DetId of seed
Definition: CaloCluster.h:219
PFCandidateEGammaExtraFwd.h
EcalClusterToolsT::eRight
static float eRight(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
Definition: EcalClusterTools.h:660
GEDPhotonProducer::phoPFECALClusIsolationToken_
edm::EDGetTokenT< edm::ValueMap< float > > phoPFECALClusIsolationToken_
Definition: GEDPhotonProducer.h:114
GEDPhotonProducer::phoNeutralHadronIsolationToken_
edm::EDGetTokenT< edm::ValueMap< float > > phoNeutralHadronIsolationToken_
Definition: GEDPhotonProducer.h:108
GEDPhotonProducer::fillPhotonCollection
void fillPhotonCollection(edm::Event &evt, edm::EventSetup const &es, const edm::Handle< reco::PhotonCoreCollection > &photonCoreHandle, const CaloTopology *topology, const EcalRecHitCollection *ecalBarrelHits, const EcalRecHitCollection *ecalEndcapHits, const EcalRecHitCollection *preshowerHits, CaloTowerCollection const &hcalTowers, const reco::VertexCollection &pvVertices, reco::PhotonCollection &outputCollection, int &iSC)
Definition: GEDPhotonProducer.cc:451
EcalClusterToolsT::e2x5Right
static float e2x5Right(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
Definition: EcalClusterTools.h:569
conversions_cfi.hcalTowers
hcalTowers
Definition: conversions_cfi.py:21
GEDPhotonProducer.h
edm::Ptr
Definition: AssociationVector.h:31
alignCSCRings.r
r
Definition: alignCSCRings.py:93
CaloTopology.h
ValueMap.h
HLT_2018_cff.barrelRecHits
barrelRecHits
Definition: HLT_2018_cff.py:13541
EcalClusterToolsT::e3x3
static float e3x3(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
Definition: EcalClusterTools.h:514
PhotonEnergyCorrector::gedRegression
std::unique_ptr< ModifyObjectValueBase > & gedRegression()
Definition: PhotonEnergyCorrector.h:28
VertexFwd.h
gedPhotonSequence_cff.pfIsolCfg
pfIsolCfg
Definition: gedPhotonSequence_cff.py:27
reco::Photon::setPflowIDVariables
void setPflowIDVariables(const PflowIDVariables &pfid)
Definition: Photon.h:519
reco::Photon
Definition: Photon.h:21
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
EgammaHadTower::towersOf
std::vector< CaloTowerDetId > towersOf(const reco::SuperCluster &sc) const
Definition: EgammaHadTower.cc:50
PhotonEnergyCorrector::init
void init(const edm::EventSetup &theEventSetup)
Definition: PhotonEnergyCorrector.cc:60
reco::Photon::ShowerShape::hcalTowersBehindClusters
std::vector< CaloTowerDetId > hcalTowersBehindClusters
Definition: Photon.h:149
GEDPhotonProducer::phoChargedWorstVtxIsoToken_
edm::EDGetTokenT< edm::ValueMap< float > > phoChargedWorstVtxIsoToken_
Definition: GEDPhotonProducer.h:110
reco::Photon::ShowerShape
Definition: Photon.h:137
PhotonEnergyCorrector
Definition: PhotonEnergyCorrector.h:24
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
edm::OrphanHandle
Definition: EDProductfwd.h:39
GEDPhotonProducer::checkHcalStatus_
bool checkHcalStatus_
Definition: GEDPhotonProducer.h:161
reco::Photon::PflowIDVariables
Definition: Photon.h:499
isFinite.h
gedPhotons_cfi.outputPhotonCollection
outputPhotonCollection
Definition: gedPhotons_cfi.py:30
PhotonEnergyCorrector::calculate
void calculate(edm::Event &evt, reco::Photon &, int subdet, const reco::VertexCollection &vtxcol, const edm::EventSetup &iSetup)
Definition: PhotonEnergyCorrector.cc:80
spclusmultinvestigator_cfi.vertexCollection
vertexCollection
Definition: spclusmultinvestigator_cfi.py:4
EcalClusterToolsT::e2x5Left
static float e2x5Left(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
Definition: EcalClusterTools.h:577
PFCandidateEGammaExtra.h
edm::ValueMap
Definition: ValueMap.h:107
Exception
Definition: hltDiff.cc:246
EcalClusterToolsT::e1x5
static float e1x5(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
Definition: EcalClusterTools.h:620
GEDPhotonProducer::usePrimaryVertex_
bool usePrimaryVertex_
Definition: GEDPhotonProducer.h:142
reco::Photon::ShowerShape::hcalDepth1OverEcal
float hcalDepth1OverEcal
Definition: Photon.h:145
ptFast
double ptFast(const double energy, const math::XYZPoint &position, const math::XYZPoint &origin)
Definition: SuperClusterImporter.cc:12
reco::Photon::regression1
Definition: Photon.h:273
reco::Photon::setCandidateP4type
void setCandidateP4type(const P4type type)
Definition: Photon.h:312
EgammaHadTower::getDepth1HcalESum
double getDepth1HcalESum(const std::vector< CaloTowerDetId > &towers, CaloTowerCollection const &) const
Definition: EgammaHadTower.cc:94
reco::Photon::SaturationInfo::isSeedSaturated
bool isSeedSaturated
Definition: Photon.h:260
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
EcalClusterToolsT::e5x5
static float e5x5(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
Definition: EcalClusterTools.h:534
GEDPhotonProducer::RecoStepInfo::isFinal
bool isFinal() const
Definition: GEDPhotonProducer.h:55
reco::Photon::PflowIsolationVariables::photonIso
float photonIso
Definition: Photon.h:465
Exception.h
reco::Photon::MIPVariables
Definition: Photon.h:324
Cluster2ndMoments::sMin
float sMin
Definition: EcalClusterTools.h:66
reco::Photon::ShowerShape::e3x3
float e3x3
Definition: Photon.h:142
GEDPhotonProducer::preselCutValuesEndcap_
std::vector< double > preselCutValuesEndcap_
Definition: GEDPhotonProducer.h:155
reco::Photon::PflowIsolationVariables::sumEcalClusterEt
float sumEcalClusterEt
Definition: Photon.h:466
GEDPhotonProducer::preselCutValuesBarrel_
std::vector< double > preselCutValuesBarrel_
Definition: GEDPhotonProducer.h:154
electronIdCutBasedExt_cfi.sigmaEtaEta
sigmaEtaEta
Definition: electronIdCutBasedExt_cfi.py:123
reco::Photon::PflowIsolationVariables::sumHcalClusterEt
float sumHcalClusterEt
Definition: Photon.h:467
PhotonIsolationCalculator::calculate
void calculate(const reco::Photon *, const edm::Event &, const edm::EventSetup &es, reco::Photon::FiducialFlags &phofid, reco::Photon::IsolationVariables &phoisolR03, reco::Photon::IsolationVariables &phoisolR04) const
Definition: PhotonIsolationCalculator.cc:180
reco::PhotonCollection
std::vector< Photon > PhotonCollection
collectin of Photon objects
Definition: PhotonFwd.h:9
GEDPhotonProducer::highEt_
double highEt_
Definition: GEDPhotonProducer.h:134
MaterialEffects_cfi.photonEnergy
photonEnergy
Definition: MaterialEffects_cfi.py:26
edm::helper::Filler
Definition: ValueMap.h:22
EcalClusterToolsT::eLeft
static float eLeft(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
Definition: EcalClusterTools.h:652
EgammaHadTower
Definition: EgammaHadTower.h:17
edm::isFinite
constexpr bool isFinite(T x)
EgHLTOffHistBins_cfi.e2x5
e2x5
Definition: EgHLTOffHistBins_cfi.py:21
reco::Photon::regression2
Definition: Photon.h:273
GEDPhotonProducer::pfCandidates_
edm::EDGetTokenT< reco::PFCandidateCollection > pfCandidates_
Definition: GEDPhotonProducer.h:101
GEDPhotonProducer::endRun
void endRun(edm::Run const &, edm::EventSetup const &) final
Definition: GEDPhotonProducer.cc:230
GEDPhotonProducer::theCaloGeom_
edm::ESHandle< CaloGeometry > theCaloGeom_
Definition: GEDPhotonProducer.h:146
reco::Photon::setP4
void setP4(P4type type, const LorentzVector &p4, float p4Error, bool setToRecoCandidate)
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
edm::Event
Definition: Event.h:73
EcalClusterToolsT::e1x3
static float e1x3(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
Definition: EcalClusterTools.h:636
gedPhotons_cfi.preshowerHits
preshowerHits
Definition: gedPhotons_cfi.py:47
GEDPhotonProducer::hcalTowers_
edm::EDGetTokenT< CaloTowerCollection > hcalTowers_
Definition: GEDPhotonProducer.h:102
Cluster2ndMoments
Definition: EcalClusterTools.h:63
GEDPhotonProducer::phoPhotonIsolationToken_
edm::EDGetTokenT< edm::ValueMap< float > > phoPhotonIsolationToken_
Definition: GEDPhotonProducer.h:109
edm::InputTag
Definition: InputTag.h:15
GEDPhotonProducer::vertexProducer_
edm::EDGetTokenT< reco::VertexCollection > vertexProducer_
Definition: GEDPhotonProducer.h:103
GEDPhotonProducer::runMIPTagger_
bool runMIPTagger_
Definition: GEDPhotonProducer.h:137
ElectronSeed.h
GEDPhotonProducer::photonProducer_
edm::InputTag photonProducer_
Definition: GEDPhotonProducer.h:93
EcalClusterToolsT::localCovariances
static std::vector< float > localCovariances(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology, float w0=4.7)
Definition: EcalClusterTools.h:1034
reco::Photon::ShowerShape::e5x5
float e5x5
Definition: Photon.h:143
Conversion.h