Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-12-08 23:44:23

0001 // Author: Felice Pantaleo, felice.pantaleo@cern.ch 06/2024
0002 
0003 // user include files
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 // member functions
0029 //
0030 
0031 // ------------ method called to produce the data  ------------
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   // Create association map
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   // Loop over tracksters
0047   for (unsigned int tracksterId = 0; tracksterId < tracksters->size(); ++tracksterId) {
0048     const auto &trackster = (*tracksters)[tracksterId];
0049     // Loop over vertices in trackster
0050     for (unsigned int i = 0; i < trackster.vertices().size(); ++i) {
0051       // Get layerCluster
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);