CMS 3D CMS Logo

ElectronIDValueMapProducer.cc
Go to the documentation of this file.
3 
6 
8 
11 
14 
17 
20 
22 
23 #include <memory>
24 #include <vector>
25 
27 
28  public:
29 
31  ~ElectronIDValueMapProducer() override;
32 
33  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
34 
35  private:
36 
37  void produce(edm::Event&, const edm::EventSetup&) override;
38 
39  std::unique_ptr<noZS::EcalClusterLazyTools> lazyToolnoZS;
40 
41  // for AOD and MiniAOD case
46 
47  constexpr static char eleFull5x5SigmaIEtaIEta_[] = "eleFull5x5SigmaIEtaIEta";
48  constexpr static char eleFull5x5SigmaIEtaIPhi_[] = "eleFull5x5SigmaIEtaIPhi";
49  constexpr static char eleFull5x5E1x5_[] = "eleFull5x5E1x5";
50  constexpr static char eleFull5x5E2x5_[] = "eleFull5x5E2x5";
51  constexpr static char eleFull5x5E5x5_[] = "eleFull5x5E5x5";
52  constexpr static char eleFull5x5R9_[] = "eleFull5x5R9";
53  constexpr static char eleFull5x5Circularity_[] = "eleFull5x5Circularity";
54 };
55 
57  // Declare consummables, handle both AOD and miniAOD case
58  : src_ ( consumesCollector(), iConfig, "src", "srcMiniAOD")
59  , ebRecHits_(src_, consumesCollector(), iConfig, "ebReducedRecHitCollection", "ebReducedRecHitCollectionMiniAOD")
60  , eeRecHits_(src_, consumesCollector(), iConfig, "eeReducedRecHitCollection", "eeReducedRecHitCollectionMiniAOD")
61  , esRecHits_(src_, consumesCollector(), iConfig, "esReducedRecHitCollection", "esReducedRecHitCollectionMiniAOD")
62 {
63 
64  produces<edm::ValueMap<float> >(eleFull5x5SigmaIEtaIEta_);
65  produces<edm::ValueMap<float> >(eleFull5x5SigmaIEtaIPhi_);
66  produces<edm::ValueMap<float> >(eleFull5x5E1x5_);
67  produces<edm::ValueMap<float> >(eleFull5x5E2x5_);
68  produces<edm::ValueMap<float> >(eleFull5x5E5x5_);
69  produces<edm::ValueMap<float> >(eleFull5x5R9_);
70  produces<edm::ValueMap<float> >(eleFull5x5Circularity_);
71 
72 }
73 
75 }
76 
78 
79  // Get handle on electrons
80  auto src = src_.getValidHandle(iEvent);
81 
82  lazyToolnoZS = std::make_unique<noZS::EcalClusterLazyTools>(iEvent, iSetup,
83  ebRecHits_.get(iEvent),
84  eeRecHits_.get(iEvent),
85  esRecHits_.get(iEvent));
86 
87  // size_t n = src->size();
88  std::vector<float> eleFull5x5SigmaIEtaIEta, eleFull5x5SigmaIEtaIPhi;
89  std::vector<float> eleFull5x5R9, eleFull5x5Circularity;
90  std::vector<float> eleFull5x5E1x5,eleFull5x5E2x5,eleFull5x5E5x5;
91 
92  // reco::GsfElectron::superCluster() is virtual so we can exploit polymorphism
93  for (const auto &ele : *src) {
94  const auto& theseed = *(ele.superCluster()->seed());
95 
96  std::vector<float> vCov = lazyToolnoZS->localCovariances( theseed );
97  const float see = (edm::isNotFinite(vCov[0]) ? 0. : sqrt(vCov[0]));
98  const float sep = vCov[1];
99  eleFull5x5SigmaIEtaIEta.push_back(see);
100  eleFull5x5SigmaIEtaIPhi.push_back(sep);
101  eleFull5x5R9.push_back(lazyToolnoZS->e3x3( theseed ) / ele.superCluster()->rawEnergy() );
102 
103  const float e1x5 = lazyToolnoZS->e1x5( theseed );
104  const float e2x5 = lazyToolnoZS->e2x5Max( theseed );
105  const float e5x5 = lazyToolnoZS->e5x5( theseed );
106  const float circularity = (e5x5 != 0.) ? 1.-e1x5/e5x5 : -1;
107 
108  eleFull5x5E1x5.push_back(e1x5);
109  eleFull5x5E2x5.push_back(e2x5);
110  eleFull5x5E5x5.push_back(e5x5);
111  eleFull5x5Circularity.push_back(circularity);
112  }
113 
114  writeValueMap(iEvent, src, eleFull5x5SigmaIEtaIEta, eleFull5x5SigmaIEtaIEta_);
115  writeValueMap(iEvent, src, eleFull5x5SigmaIEtaIPhi, eleFull5x5SigmaIEtaIPhi_);
116  writeValueMap(iEvent, src, eleFull5x5R9, eleFull5x5R9_);
117  writeValueMap(iEvent, src, eleFull5x5E1x5, eleFull5x5E1x5_);
118  writeValueMap(iEvent, src, eleFull5x5E2x5, eleFull5x5E2x5_);
119  writeValueMap(iEvent, src, eleFull5x5E5x5, eleFull5x5E5x5_);
120  writeValueMap(iEvent, src, eleFull5x5Circularity, eleFull5x5Circularity_);
121 }
122 
124  // electronIDValueMapProducer
126  desc.add<edm::InputTag>("src", edm::InputTag("gedGsfElectrons"));
127  desc.add<edm::InputTag>("srcMiniAOD", edm::InputTag("slimmedElectrons","","@skipCurrentProcess"));
128  desc.add<edm::InputTag>("ebReducedRecHitCollection", edm::InputTag("reducedEcalRecHitsEB"));
129  desc.add<edm::InputTag>("eeReducedRecHitCollection", edm::InputTag("reducedEcalRecHitsEE"));
130  desc.add<edm::InputTag>("esReducedRecHitCollection", edm::InputTag("reducedEcalRecHitsES"));
131  desc.add<edm::InputTag>("ebReducedRecHitCollectionMiniAOD", edm::InputTag("reducedEgamma","reducedEBRecHits"));
132  desc.add<edm::InputTag>("eeReducedRecHitCollectionMiniAOD", edm::InputTag("reducedEgamma","reducedEERecHits"));
133  desc.add<edm::InputTag>("esReducedRecHitCollectionMiniAOD", edm::InputTag("reducedEgamma","reducedESRecHits"));
134  descriptions.add("electronIDValueMapProducer", desc);
135 }
136 
137 
std::unique_ptr< noZS::EcalClusterLazyTools > lazyToolnoZS
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
MultiTokenT< EcalRecHitCollection > ebRecHits_
#define constexpr
void writeValueMap(edm::Event &iEvent, const edm::Handle< HandleType > &handle, const std::vector< ValueType > &values, const std::string &label)
Definition: Utils.h:13
int iEvent
Definition: GenABIO.cc:230
bool isNotFinite(T x)
Definition: isFinite.h:10
T sqrt(T t)
Definition: SSEVec.h:18
void produce(edm::Event &, const edm::EventSetup &) override
ParameterDescriptionBase * add(U const &iLabel, T const &value)
edm::Handle< T > getValidHandle(const edm::Event &iEvent)
Definition: MultiToken.h:83
ElectronIDValueMapProducer(const edm::ParameterSet &)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
MultiTokenT< EcalRecHitCollection > esRecHits_
MultiTokenT< edm::View< reco::GsfElectron > > src_
MultiTokenT< EcalRecHitCollection > eeRecHits_
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)