File indexing completed on 2023-03-17 11:16:04
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #include <memory>
0014
0015
0016 #include "FWCore/Framework/interface/Frameworkfwd.h"
0017 #include "FWCore/Framework/interface/global/EDProducer.h"
0018
0019 #include "FWCore/Framework/interface/Event.h"
0020 #include "FWCore/Framework/interface/MakerMacros.h"
0021
0022 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0023 #include "FWCore/Utilities/interface/StreamID.h"
0024
0025 #include "DataFormats/PatCandidates/interface/Electron.h"
0026 #include "DataFormats/PatCandidates/interface/Photon.h"
0027
0028 #include "DataFormats/Common/interface/View.h"
0029
0030
0031
0032
0033
0034 template <typename T>
0035 class EGMSeedGainProducer : public edm::global::EDProducer<> {
0036 public:
0037 explicit EGMSeedGainProducer(const edm::ParameterSet& iConfig)
0038 : src_(consumes<edm::View<T>>(iConfig.getParameter<edm::InputTag>("src"))),
0039 recHitsEB_(consumes<EcalRecHitCollection>(iConfig.getParameter<edm::InputTag>("recHitsEB"))),
0040 recHitsEE_(consumes<EcalRecHitCollection>(iConfig.getParameter<edm::InputTag>("recHitsEE"))) {
0041 produces<edm::ValueMap<int>>();
0042 }
0043 ~EGMSeedGainProducer() override{};
0044
0045 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0046
0047 private:
0048 void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override;
0049
0050
0051
0052 edm::EDGetTokenT<edm::View<T>> src_;
0053 edm::EDGetTokenT<EcalRecHitCollection> recHitsEB_;
0054 edm::EDGetTokenT<EcalRecHitCollection> recHitsEE_;
0055 };
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070 template <typename T>
0071 void EGMSeedGainProducer<T>::produce(edm::StreamID streamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const {
0072 auto src = iEvent.getHandle(src_);
0073 const auto& recHitsEBProd = iEvent.get(recHitsEB_);
0074 const auto& recHitsEEProd = iEvent.get(recHitsEE_);
0075
0076 unsigned nSrc = src->size();
0077 std::vector<int> gainSeed(nSrc, 12);
0078
0079
0080 for (unsigned i = 0; i < nSrc; i++) {
0081 auto obj = src->ptrAt(i);
0082 auto detid = obj->superCluster()->seed()->seed();
0083 const auto& coll = obj->isEB() ? recHitsEBProd : recHitsEEProd;
0084 auto seed = coll.find(detid);
0085 if (seed != coll.end()) {
0086 if (seed->checkFlag(EcalRecHit::kHasSwitchToGain6))
0087 gainSeed[i] = 6;
0088 if (seed->checkFlag(EcalRecHit::kHasSwitchToGain1))
0089 gainSeed[i] = 1;
0090 }
0091 }
0092
0093 std::unique_ptr<edm::ValueMap<int>> gainSeedV(new edm::ValueMap<int>());
0094 edm::ValueMap<int>::Filler fillerCorr(*gainSeedV);
0095 fillerCorr.insert(src, gainSeed.begin(), gainSeed.end());
0096 fillerCorr.fill();
0097 iEvent.put(std::move(gainSeedV));
0098 }
0099
0100
0101 template <typename T>
0102 void EGMSeedGainProducer<T>::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0103 edm::ParameterSetDescription desc;
0104 desc.add<edm::InputTag>("src")->setComment("input physics object collection");
0105 desc.add<edm::InputTag>("recHitsEB", edm::InputTag("reducedEgamma", "reducedEBRecHits"))
0106 ->setComment("EB rechit collection");
0107 desc.add<edm::InputTag>("recHitsEE", edm::InputTag("reducedEgamma", "reducedEERecHits"))
0108 ->setComment("EE rechit collection");
0109 descriptions.addDefault(desc);
0110 }
0111
0112 typedef EGMSeedGainProducer<pat::Electron> ElectronSeedGainProducer;
0113 typedef EGMSeedGainProducer<pat::Photon> PhotonSeedGainProducer;
0114
0115
0116 DEFINE_FWK_MODULE(ElectronSeedGainProducer);
0117 DEFINE_FWK_MODULE(PhotonSeedGainProducer);