Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-06-12 23:30:05

0001 /**********************************************************************
0002  *
0003  * Author: F.Ferro - INFN Genova
0004  *
0005  **********************************************************************/
0006 
0007 #include "CondFormats/DataRecord/interface/PPSPixelTopologyRcd.h"
0008 #include "CondFormats/PPSObjects/interface/PPSPixelTopology.h"
0009 #include "DataFormats/CTPPSDetId/interface/CTPPSPixelDetId.h"
0010 #include "DataFormats/CTPPSReco/interface/CTPPSPixelCluster.h"
0011 #include "DataFormats/CTPPSReco/interface/CTPPSPixelRecHit.h"
0012 #include "DataFormats/Common/interface/DetSet.h"
0013 #include "DataFormats/Common/interface/DetSetVector.h"
0014 #include "DataFormats/Common/interface/Handle.h"
0015 #include "DataFormats/DetId/interface/DetId.h"
0016 #include "FWCore/Framework/interface/ESHandle.h"
0017 #include "FWCore/Framework/interface/Event.h"
0018 #include "FWCore/Framework/interface/EventSetup.h"
0019 #include "FWCore/Framework/interface/global/EDProducer.h"
0020 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0021 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0022 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0023 #include "FWCore/Utilities/interface/EDGetToken.h"
0024 #include "FWCore/Utilities/interface/EDPutToken.h"
0025 #include "FWCore/Utilities/interface/ESGetToken.h"
0026 #include "FWCore/Utilities/interface/InputTag.h"
0027 #include "RecoPPS/Local/interface/RPixClusterToHit.h"
0028 
0029 class CTPPSPixelRecHitProducer : public edm::global::EDProducer<> {
0030 public:
0031   explicit CTPPSPixelRecHitProducer(const edm::ParameterSet &param);
0032 
0033   ~CTPPSPixelRecHitProducer() override = default;
0034 
0035   void produce(edm::StreamID, edm::Event &, edm::EventSetup const &) const override;
0036 
0037   static void fillDescriptions(edm::ConfigurationDescriptions &descriptions);
0038 
0039 private:
0040   const edm::ESGetToken<PPSPixelTopology, PPSPixelTopologyRcd> pixelTopologyToken_;
0041   const edm::EDGetTokenT<edm::DetSetVector<CTPPSPixelCluster>> clustersToken_;
0042   const edm::EDPutTokenT<edm::DetSetVector<CTPPSPixelRecHit>> rechitsToken_;
0043   const RPixClusterToHit clusterToHit_;
0044 };
0045 
0046 CTPPSPixelRecHitProducer::CTPPSPixelRecHitProducer(const edm::ParameterSet &config)
0047     : pixelTopologyToken_(esConsumes<PPSPixelTopology, PPSPixelTopologyRcd>()),
0048       clustersToken_(
0049           consumes<edm::DetSetVector<CTPPSPixelCluster>>(config.getParameter<edm::InputTag>("RPixClusterTag"))),
0050       rechitsToken_(produces<edm::DetSetVector<CTPPSPixelRecHit>>()),
0051       clusterToHit_(config) {}
0052 
0053 void CTPPSPixelRecHitProducer::fillDescriptions(edm::ConfigurationDescriptions &descriptions) {
0054   edm::ParameterSetDescription desc;
0055   desc.add<edm::InputTag>("RPixClusterTag", edm::InputTag("ctppsPixelClusters"));
0056   desc.addUntracked<int>("RPixVerbosity", 0);  // used by RPixClusterToHit
0057   descriptions.add("ctppsPixelRecHits", desc);
0058 }
0059 
0060 void CTPPSPixelRecHitProducer::produce(edm::StreamID, edm::Event &event, edm::EventSetup const &setup) const {
0061   PPSPixelTopology const &thePixelTopology = setup.getData(pixelTopologyToken_);
0062   edm::DetSetVector<CTPPSPixelCluster> const &clusters = event.get(clustersToken_);
0063   edm::DetSetVector<CTPPSPixelRecHit> rechits;
0064   rechits.reserve(clusters.size());
0065 
0066   // run the reconstruction
0067   for (auto const &cluster : clusters) {
0068     edm::DetSet<CTPPSPixelRecHit> &rechit = rechits.find_or_insert(cluster.id);
0069     rechit.data.reserve(cluster.data.size());
0070 
0071     // calculate the cluster parameters and convert it into a rechit
0072     clusterToHit_.buildHits(cluster.id, cluster.data, rechit.data, thePixelTopology);
0073   }
0074 
0075   event.emplace(rechitsToken_, std::move(rechits));
0076 }
0077 
0078 #include "FWCore/Framework/interface/MakerMacros.h"
0079 DEFINE_FWK_MODULE(CTPPSPixelRecHitProducer);