Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-10-08 05:11:31

0001 // system include files
0002 #include <memory>
0003 #include <algorithm>
0004 
0005 // user include files
0006 #include "CommonTools/Utils/interface/StringCutObjectSelector.h"
0007 #include "DataFormats/Common/interface/Handle.h"
0008 #include "DataFormats/TrackReco/interface/HitPattern.h"
0009 #include "DataFormats/TrackReco/interface/Track.h"
0010 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0011 #include "FWCore/Framework/interface/Event.h"
0012 #include "FWCore/Framework/interface/Frameworkfwd.h"
0013 #include "FWCore/Framework/interface/MakerMacros.h"
0014 #include "FWCore/Framework/interface/global/EDFilter.h"
0015 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0016 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0017 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0018 
0019 //
0020 // class declaration
0021 //
0022 
0023 class TrackMultiplicityFilter : public edm::global::EDFilter<> {
0024 public:
0025   explicit TrackMultiplicityFilter(const edm::ParameterSet&);
0026   ~TrackMultiplicityFilter() override = default;
0027   static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0028 
0029 private:
0030   bool filter(edm::StreamID, edm::Event&, const edm::EventSetup&) const override;
0031 
0032   // ----------member data ---------------------------
0033   const edm::InputTag tracksTag_;
0034   const edm::EDGetTokenT<reco::TrackCollection> tracksToken_;
0035   const StringCutObjectSelector<reco::Track> selector_;
0036   const unsigned int nmin_;
0037 };
0038 
0039 using namespace std;
0040 using namespace edm;
0041 
0042 void TrackMultiplicityFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0043   edm::ParameterSetDescription desc;
0044   desc.addUntracked<edm::InputTag>("trackInputTag", edm::InputTag("generalTracks"));
0045   desc.addUntracked<std::string>("cut", std::string(""));
0046   desc.addUntracked<uint32_t>("nmin", 0.);
0047   descriptions.addWithDefaultLabel(desc);
0048 }
0049 
0050 TrackMultiplicityFilter::TrackMultiplicityFilter(const edm::ParameterSet& ps)
0051     : tracksTag_(ps.getUntrackedParameter<edm::InputTag>("trackInputTag", edm::InputTag("generalTracks"))),
0052       tracksToken_(consumes<reco::TrackCollection>(tracksTag_)),
0053       selector_(ps.getUntrackedParameter<std::string>("cut", "")),
0054       nmin_(ps.getUntrackedParameter<uint32_t>("nmin", 0.)) {}
0055 
0056 //
0057 // member functions
0058 //
0059 
0060 // ------------ method called on each new Event  ------------
0061 bool TrackMultiplicityFilter::filter(edm::StreamID iStream, edm::Event& iEvent, const edm::EventSetup& iSetup) const {
0062   bool pass = false;
0063   edm::Handle<reco::TrackCollection> tracks;
0064   iEvent.getByToken(tracksToken_, tracks);
0065 
0066   if (!tracks.isValid()) {
0067     edm::LogError("TrackMultiplicityFilter")
0068         << "Error >> Failed to get TrackMultiplicityFilter for label: " << tracksTag_;
0069     return false;
0070   }
0071 
0072   double count = std::count_if(tracks->begin(), tracks->end(), selector_);
0073   pass = (count >= nmin_);
0074 
0075   edm::LogInfo("TrackMultiplicityFilter") << "pass : " << pass;
0076 
0077   return pass;
0078 }
0079 //define this as a plug-in
0080 DEFINE_FWK_MODULE(TrackMultiplicityFilter);