Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-10-25 09:43:55

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   double count = std::count_if(tracks->begin(), tracks->end(), selector_);
0066   pass = (count >= nmin_);
0067 
0068   edm::LogInfo("TrackMultiplicityFilter") << "pass : " << pass;
0069 
0070   return pass;
0071 }
0072 //define this as a plug-in
0073 DEFINE_FWK_MODULE(TrackMultiplicityFilter);