File indexing completed on 2025-01-12 23:42:06
0001 #include "FWCore/Framework/interface/ConsumesCollector.h"
0002 #include "FWCore/Framework/interface/ESHandle.h"
0003 #include "FWCore/Framework/interface/ESHandle.h"
0004 #include "FWCore/Framework/interface/Event.h"
0005 #include "FWCore/Framework/interface/EventSetup.h"
0006 #include "FWCore/Framework/interface/MakerMacros.h"
0007 #include "FWCore/Framework/interface/global/EDProducer.h"
0008 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0009 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0010 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0011 #include "FWCore/PluginManager/interface/ModuleDef.h"
0012 #include "FWCore/Utilities/interface/InputTag.h"
0013
0014 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
0015 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
0016 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0017 #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h"
0018
0019 #include "DataFormats/Common/interface/DetSetVector.h"
0020 #include "DataFormats/Phase2TrackerCluster/interface/Phase2TrackerCluster1D.h"
0021 #include "DataFormats/TrackerRecHit2D/interface/Phase2TrackerRecHit1D.h"
0022 #include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
0023 #include "DataFormats/DetId/interface/DetId.h"
0024
0025 #include "RecoLocalTracker/Records/interface/TkPhase2OTCPERecord.h"
0026 #include "RecoLocalTracker/Phase2TrackerRecHits/interface/Phase2StripCPE.h"
0027
0028 #include <vector>
0029 #include <string>
0030
0031 class Phase2TrackerRecHits : public edm::global::EDProducer<> {
0032 public:
0033 explicit Phase2TrackerRecHits(const edm::ParameterSet& conf);
0034 ~Phase2TrackerRecHits() override = default;
0035 void produce(edm::StreamID sid, edm::Event& event, const edm::EventSetup& eventSetup) const final;
0036
0037 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0038
0039 private:
0040 edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> const tTrackerGeom_;
0041 edm::ESGetToken<ClusterParameterEstimator<Phase2TrackerCluster1D>, TkPhase2OTCPERecord> const tCPE_;
0042
0043 edm::EDGetTokenT<Phase2TrackerCluster1DCollectionNew> token_;
0044 };
0045
0046 Phase2TrackerRecHits::Phase2TrackerRecHits(edm::ParameterSet const& conf)
0047 : tTrackerGeom_(esConsumes<TrackerGeometry, TrackerDigiGeometryRecord>()),
0048 tCPE_(esConsumes(conf.getParameter<edm::ESInputTag>("Phase2StripCPE"))),
0049 token_(consumes<Phase2TrackerCluster1DCollectionNew>(conf.getParameter<edm::InputTag>("src"))) {
0050 produces<Phase2TrackerRecHit1DCollectionNew>();
0051 }
0052
0053 void Phase2TrackerRecHits::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0054 edm::ParameterSetDescription desc;
0055 desc.add<edm::ESInputTag>("Phase2StripCPE", edm::ESInputTag("phase2StripCPEESProducer", "Phase2StripCPE"));
0056 desc.add<edm::InputTag>("src", edm::InputTag("siPhase2Clusters"));
0057 descriptions.addWithDefaultLabel(desc);
0058 }
0059
0060 void Phase2TrackerRecHits::produce(edm::StreamID sid, edm::Event& event, const edm::EventSetup& eventSetup) const {
0061
0062 edm::Handle<Phase2TrackerCluster1DCollectionNew> clusters;
0063 event.getByToken(token_, clusters);
0064
0065
0066 const auto& cpe = &eventSetup.getData(tCPE_);
0067
0068
0069 const TrackerGeometry* tkGeom = &eventSetup.getData(tTrackerGeom_);
0070
0071
0072 auto outputRecHits = std::make_unique<Phase2TrackerRecHit1DCollectionNew>();
0073
0074
0075 for (const auto& clusterDetSet : *clusters) {
0076 DetId detId(clusterDetSet.detId());
0077
0078
0079 const GeomDetUnit* geomDetUnit(tkGeom->idToDetUnit(detId));
0080
0081
0082 Phase2TrackerRecHit1DCollectionNew::FastFiller rechits(*outputRecHits, clusterDetSet.detId());
0083
0084 for (const auto& clusterRef : clusterDetSet) {
0085 ClusterParameterEstimator<Phase2TrackerCluster1D>::LocalValues lv =
0086 cpe->localParameters(clusterRef, *geomDetUnit);
0087
0088
0089 edm::Ref<Phase2TrackerCluster1DCollectionNew, Phase2TrackerCluster1D> cluster =
0090 edmNew::makeRefTo(clusters, &clusterRef);
0091
0092
0093 Phase2TrackerRecHit1D hit(lv.first, lv.second, *geomDetUnit, cluster);
0094
0095 rechits.push_back(hit);
0096 }
0097 }
0098
0099 outputRecHits->shrink_to_fit();
0100 event.put(std::move(outputRecHits));
0101 }
0102
0103 DEFINE_FWK_MODULE(Phase2TrackerRecHits);