File indexing completed on 2024-04-06 12:23:32
0001 #include "PhysicsTools/JetCharge/plugins/JetChargeProducer.h"
0002
0003 JetChargeProducer::JetChargeProducer(const edm::ParameterSet &cfg)
0004 : srcToken_(consumes<reco::JetTracksAssociationCollection>(cfg.getParameter<edm::InputTag>("src"))), algo_(cfg) {
0005 produces<JetChargeCollection>();
0006 }
0007
0008 void JetChargeProducer::produce(edm::StreamID, edm::Event &iEvent, const edm::EventSetup &iSetup) const {
0009 edm::Handle<reco::JetTracksAssociationCollection> hJTAs;
0010 iEvent.getByToken(srcToken_, hJTAs);
0011 typedef reco::JetTracksAssociationCollection::const_iterator IT;
0012 typedef edm::RefToBase<reco::Jet> JetRef;
0013
0014 if (hJTAs->keyProduct().isNull()) {
0015
0016 iEvent.put(std::make_unique<JetChargeCollection>());
0017 return;
0018 }
0019 auto ret = std::make_unique<JetChargeCollection>(hJTAs->keyProduct());
0020 for (IT it = hJTAs->begin(), ed = hJTAs->end(); it != ed; ++it) {
0021 const JetRef &jet = it->first;
0022 const reco::TrackRefVector &tracks = it->second;
0023 float val = static_cast<float>(algo_.charge(jet->p4(), tracks));
0024 reco::JetFloatAssociation::setValue(*ret, jet, val);
0025 }
0026
0027 iEvent.put(std::move(ret));
0028 }