Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:09:10

0001 // system include files
0002 #include <memory>
0003 #include <algorithm>
0004 
0005 // user include files
0006 #include "DataFormats/Common/interface/Handle.h"
0007 #include "DataFormats/TrackReco/interface/HitPattern.h"
0008 #include "DataFormats/TrackReco/interface/Track.h"
0009 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0010 #include "FWCore/Framework/interface/Event.h"
0011 #include "FWCore/Framework/interface/Frameworkfwd.h"
0012 #include "FWCore/Framework/interface/global/EDProducer.h"
0013 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0014 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0015 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0016 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0017 #include "FWCore/Utilities/interface/InputTag.h"
0018 #include "FWCore/Utilities/interface/StreamID.h"
0019 
0020 // class declaration
0021 class AlcaRecoTrackSelector : public edm::global::EDProducer<> {
0022 public:
0023   explicit AlcaRecoTrackSelector(const edm::ParameterSet&);
0024   ~AlcaRecoTrackSelector() override = default;
0025   static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0026 
0027 private:
0028   void produce(edm::StreamID streamID, edm::Event& iEvent, edm::EventSetup const& iSetup) const override;
0029 
0030   const edm::InputTag tracksTag_;
0031   const edm::EDGetTokenT<reco::TrackCollection> tracksToken_;
0032   const double ptmin_;
0033   const double pmin_;
0034   const double etamin_;
0035   const double etamax_;
0036   const int nhits_;
0037 };
0038 
0039 void AlcaRecoTrackSelector::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0040   edm::ParameterSetDescription desc;
0041   desc.addUntracked<edm::InputTag>("trackInputTag", edm::InputTag("generalTracks"));
0042   desc.addUntracked<double>("ptmin", 0.);
0043   desc.addUntracked<double>("pmin", 0.);
0044   desc.addUntracked<double>("etamin", -4.);
0045   desc.addUntracked<double>("etamax", 4.);
0046   desc.addUntracked<unsigned int>("nhits", 1);
0047   descriptions.addWithDefaultLabel(desc);
0048 }
0049 
0050 AlcaRecoTrackSelector::AlcaRecoTrackSelector(const edm::ParameterSet& ps)
0051     : tracksTag_(ps.getUntrackedParameter<edm::InputTag>("trackInputTag", edm::InputTag("generalTracks"))),
0052       tracksToken_(consumes<reco::TrackCollection>(tracksTag_)),
0053       ptmin_(ps.getUntrackedParameter<double>("ptmin", 0.)),
0054       pmin_(ps.getUntrackedParameter<double>("pmin", 0.)),
0055       etamin_(ps.getUntrackedParameter<double>("etamin", -4.)),
0056       etamax_(ps.getUntrackedParameter<double>("etamax", 4.)),
0057       nhits_(ps.getUntrackedParameter<uint32_t>("nhits", 1)) {
0058   produces<reco::TrackCollection>("");
0059 }
0060 
0061 void AlcaRecoTrackSelector::produce(edm::StreamID streamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const {
0062   std::unique_ptr<reco::TrackCollection> outputTColl(new reco::TrackCollection());
0063 
0064   // Read Track collection
0065   edm::Handle<reco::TrackCollection> tracks;
0066   iEvent.getByToken(tracksToken_, tracks);
0067 
0068   if (tracks.isValid()) {
0069     for (auto const& trk : *tracks) {
0070       if (trk.pt() < ptmin_)
0071         continue;
0072       if (trk.p() < pmin_)
0073         continue;
0074       if (trk.eta() < etamin_)
0075         continue;
0076       if (trk.eta() > etamax_)
0077         continue;
0078       if (trk.hitPattern().numberOfAllHits(reco::HitPattern::TRACK_HITS) <= nhits_)
0079         continue;
0080       outputTColl->push_back(trk);
0081     }
0082   } else {
0083     edm::LogError("AlcaRecoTrackSelector") << "Error >> Failed to get AlcaRecoTrackSelector for label: " << tracksTag_;
0084   }
0085   iEvent.put(std::move(outputTColl));
0086 }
0087 
0088 // Define this as a plug-in
0089 #include "FWCore/Framework/interface/MakerMacros.h"
0090 DEFINE_FWK_MODULE(AlcaRecoTrackSelector);