Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-01-18 03:42:22

0001 // -*- C++ -*-
0002 //
0003 // Package:    ExtraFromSeeds
0004 // Class:      ExtraFromSeeds
0005 //
0006 /**\class ExtraFromSeeds ExtraFromSeeds.cc RecoTracker/ExtraFromSeeds/src/ExtraFromSeeds.cc
0007 
0008  Description: [one line class summary]
0009 
0010  Implementation:
0011      [Notes on implementation]
0012 */
0013 //
0014 // Original Author:  Jean-Roch Vlimant,40 3-A28,+41227671209,
0015 //         Created:  Fri Feb 17 12:03:11 CET 2012
0016 //
0017 //
0018 
0019 // system include files
0020 #include <memory>
0021 
0022 // user include files
0023 #include "DataFormats/TrackReco/interface/Track.h"
0024 #include "DataFormats/TrackReco/interface/TrackExtra.h"
0025 #include "DataFormats/TrackReco/interface/TrackExtraFwd.h"
0026 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0027 #include "FWCore/Framework/interface/Event.h"
0028 #include "FWCore/Framework/interface/Frameworkfwd.h"
0029 #include "FWCore/Framework/interface/MakerMacros.h"
0030 #include "FWCore/Framework/interface/global/EDProducer.h"
0031 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0032 
0033 //
0034 // class declaration
0035 //
0036 
0037 class ExtraFromSeeds : public edm::global::EDProducer<> {
0038 public:
0039   explicit ExtraFromSeeds(const edm::ParameterSet&);
0040   ~ExtraFromSeeds() override = default;
0041 
0042   static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0043 
0044 private:
0045   void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override;
0046 
0047   const edm::EDGetTokenT<reco::TrackCollection> tracks_;
0048   typedef std::vector<unsigned int> ExtremeLight;
0049 
0050   // ----------member data ---------------------------
0051 };
0052 
0053 //
0054 // constructors and destructor
0055 //
0056 ExtraFromSeeds::ExtraFromSeeds(const edm::ParameterSet& iConfig)
0057     : tracks_(consumes<reco::TrackCollection>(iConfig.getParameter<edm::InputTag>("tracks"))) {
0058   produces<ExtremeLight>();
0059   produces<TrackingRecHitCollection>();
0060 }
0061 
0062 //
0063 // member functions
0064 //
0065 
0066 // ------------ method called to produce the data  ------------
0067 void ExtraFromSeeds::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const {
0068   // in
0069   edm::Handle<reco::TrackCollection> tracks;
0070   iEvent.getByToken(tracks_, tracks);
0071 
0072   // out
0073   std::unique_ptr<ExtremeLight> exxtralOut(new ExtremeLight());
0074   exxtralOut->resize(tracks->size());
0075 
0076   std::unique_ptr<TrackingRecHitCollection> hitOut(new TrackingRecHitCollection());
0077   TrackingRecHitRefProd rHits = iEvent.getRefBeforePut<TrackingRecHitCollection>();
0078   hitOut->reserve(3 * tracks->size());
0079 
0080   for (unsigned int ie = 0; ie != tracks->size(); ++ie) {
0081     const reco::Track& track = (*tracks)[ie];
0082     const reco::TrackExtra& extra = *track.extra();
0083     //only for high purity tracks
0084     if (!track.quality(reco::TrackBase::highPurity))
0085       continue;
0086 
0087     (*exxtralOut)[ie] = extra.seedRef()->nHits();
0088     for (auto const& seedHit : extra.seedRef()->recHits()) {
0089       hitOut->push_back(seedHit.clone());
0090     }
0091   }
0092 
0093   iEvent.put(std::move(exxtralOut));
0094   iEvent.put(std::move(hitOut));
0095 }
0096 
0097 // ------------ method fills 'descriptions' with the allowed parameters for the module  ------------
0098 void ExtraFromSeeds::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0099   edm::ParameterSetDescription desc;
0100   desc.add<edm::InputTag>("tracks", edm::InputTag("generalTracks"));
0101   descriptions.addWithDefaultLabel(desc);
0102 }
0103 
0104 #include "FWCore/Framework/interface/MakerMacros.h"
0105 DEFINE_FWK_MODULE(ExtraFromSeeds);