File indexing completed on 2025-01-18 03:42:22
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #include <memory>
0021
0022
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
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
0051 };
0052
0053
0054
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
0064
0065
0066
0067 void ExtraFromSeeds::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const {
0068
0069 edm::Handle<reco::TrackCollection> tracks;
0070 iEvent.getByToken(tracks_, tracks);
0071
0072
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
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
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);