File indexing completed on 2024-10-08 05:11:31
0001
0002 #include <memory>
0003 #include <algorithm>
0004
0005
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
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
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
0058
0059
0060
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
0080 DEFINE_FWK_MODULE(TrackMultiplicityFilter);