File indexing completed on 2025-06-12 23:30:05
0001
0002
0003
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 ¶m);
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);
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
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
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);