Back to home page

Project CMSSW displayed by LXR

 
 

    


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   // Get the Clusters
0062   edm::Handle<Phase2TrackerCluster1DCollectionNew> clusters;
0063   event.getByToken(token_, clusters);
0064 
0065   // load the cpe via the eventsetup
0066   const auto& cpe = &eventSetup.getData(tCPE_);
0067 
0068   // Get the geometry
0069   const TrackerGeometry* tkGeom = &eventSetup.getData(tTrackerGeom_);
0070 
0071   // Global container for the RecHits of each module
0072   auto outputRecHits = std::make_unique<Phase2TrackerRecHit1DCollectionNew>();
0073 
0074   // Loop over clusters
0075   for (const auto& clusterDetSet : *clusters) {
0076     DetId detId(clusterDetSet.detId());
0077 
0078     // Geometry
0079     const GeomDetUnit* geomDetUnit(tkGeom->idToDetUnit(detId));
0080 
0081     // Container for the clusters that will be produced for this modules
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       // Create a persistent edm::Ref to the cluster
0089       edm::Ref<Phase2TrackerCluster1DCollectionNew, Phase2TrackerCluster1D> cluster =
0090           edmNew::makeRefTo(clusters, &clusterRef);
0091 
0092       // Make a RecHit and add it to the DetSet
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);