CMS 3D CMS Logo

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