File indexing completed on 2024-12-08 23:44:23
0001
0002
0003
0004 #include "FWCore/Framework/interface/global/EDProducer.h"
0005 #include "FWCore/Framework/interface/Event.h"
0006 #include "FWCore/Framework/interface/MakerMacros.h"
0007 #include "FWCore/Framework/interface/ESHandle.h"
0008 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0009 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0010 #include "FWCore/Utilities/interface/EDGetToken.h"
0011 #include "DataFormats/HGCalReco/interface/Trackster.h"
0012 #include "DataFormats/CaloRecHit/interface/CaloCluster.h"
0013 #include "SimDataFormats/Associations/interface/TICLAssociationMap.h"
0014 #include "DataFormats/Provenance/interface/ProductID.h"
0015 #include "LCToTSAssociatorProducer.h"
0016
0017 LCToTSAssociatorProducer::LCToTSAssociatorProducer(const edm::ParameterSet &pset)
0018 : LCCollectionToken_(consumes<std::vector<reco::CaloCluster>>(pset.getParameter<edm::InputTag>("layer_clusters"))),
0019 tracksterCollectionToken_(
0020 consumes<std::vector<ticl::Trackster>>(pset.getParameter<edm::InputTag>("tracksters"))) {
0021 produces<
0022 ticl::AssociationMap<ticl::mapWithSharedEnergy, std::vector<reco::CaloCluster>, std::vector<ticl::Trackster>>>();
0023 }
0024
0025 LCToTSAssociatorProducer::~LCToTSAssociatorProducer() {}
0026
0027
0028
0029
0030
0031
0032 void LCToTSAssociatorProducer::produce(edm::StreamID, edm::Event &iEvent, const edm::EventSetup &iSetup) const {
0033 using namespace edm;
0034
0035 Handle<std::vector<reco::CaloCluster>> layer_clusters;
0036 iEvent.getByToken(LCCollectionToken_, layer_clusters);
0037
0038 Handle<std::vector<ticl::Trackster>> tracksters;
0039 iEvent.getByToken(tracksterCollectionToken_, tracksters);
0040
0041
0042 auto lcToTracksterMap = std::make_unique<
0043 ticl::AssociationMap<ticl::mapWithSharedEnergy, std::vector<reco::CaloCluster>, std::vector<ticl::Trackster>>>(
0044 layer_clusters, tracksters, iEvent);
0045
0046
0047 for (unsigned int tracksterId = 0; tracksterId < tracksters->size(); ++tracksterId) {
0048 const auto &trackster = (*tracksters)[tracksterId];
0049
0050 for (unsigned int i = 0; i < trackster.vertices().size(); ++i) {
0051
0052 const auto &lc = (*layer_clusters)[trackster.vertices()[i]];
0053 float sharedEnergy = lc.energy() / trackster.vertex_multiplicity()[i];
0054 edm::Ref<std::vector<reco::CaloCluster>> lcRef(layer_clusters, trackster.vertices()[i]);
0055 edm::Ref<std::vector<ticl::Trackster>> tracksterRef(tracksters, tracksterId);
0056 lcToTracksterMap->insert(lcRef, tracksterRef, sharedEnergy);
0057 }
0058 }
0059 iEvent.put(std::move(lcToTracksterMap));
0060 }
0061
0062 void LCToTSAssociatorProducer::fillDescriptions(edm::ConfigurationDescriptions &descriptions) {
0063 edm::ParameterSetDescription desc;
0064 desc.add<edm::InputTag>("layer_clusters", edm::InputTag("hgcalMergeLayerClusters"));
0065 desc.add<edm::InputTag>("tracksters", edm::InputTag("ticlTracksters"));
0066 descriptions.add("LCToTSAssociatorProducer", desc);
0067 }
0068
0069 DEFINE_FWK_MODULE(LCToTSAssociatorProducer);