22#include < vector>
33#include " DataFormats/Common/interface/Handle.h"
44#include " DataFormats/Common/interface/View.h"
5+ #include " DataFormats/Common/interface/Ref.h"
56#include " DataFormats/Candidate/interface/VertexCompositeCandidate.h"
67#include " FWCore/Framework/interface/stream/EDFilter.h"
78#include " FWCore/Framework/interface/Event.h"
89#include " FWCore/Framework/interface/MakerMacros.h"
910#include " FWCore/ParameterSet/interface/ParameterSet.h"
11+ #include " FWCore/Utilities/interface/InputTag.h"
1012
1113class V0EventSelector : public edm ::stream::EDFilter<> {
1214public:
@@ -19,25 +21,45 @@ class V0EventSelector : public edm::stream::EDFilter<> {
1921private:
2022 const edm::EDGetTokenT<reco::VertexCompositeCandidateCollection> vccToken_;
2123 const unsigned int minNumCandidates_;
24+ const double massMin_;
25+ const double massMax_;
2226};
2327
2428V0EventSelector::V0EventSelector (const edm::ParameterSet& iConfig)
2529 : vccToken_{consumes<reco::VertexCompositeCandidateCollection>(
2630 iConfig.getParameter <edm::InputTag>(" vertexCompositeCandidates" ))},
27- minNumCandidates_{iConfig.getParameter <unsigned int >(" minCandidates" )} {}
31+ minNumCandidates_{iConfig.getParameter <unsigned int >(" minCandidates" )},
32+ massMin_{iConfig.getParameter <double >(" massMin" )},
33+ massMax_{iConfig.getParameter <double >(" massMax" )} {
34+ produces<reco::VertexCompositeCandidateCollection>();
35+ }
2836
2937bool V0EventSelector::filter (edm::Event& iEvent, const edm::EventSetup& iSetup) {
3038 edm::Handle<reco::VertexCompositeCandidateCollection> vccHandle;
3139 iEvent.getByToken (vccToken_, vccHandle);
3240
33- return vccHandle->size () >= minNumCandidates_;
41+ auto filteredVCC = std::make_unique<reco::VertexCompositeCandidateCollection>();
42+
43+ for (const auto & vcc : *vccHandle) {
44+ if (vcc.mass () >= massMin_ && vcc.mass () <= massMax_) {
45+ filteredVCC->push_back (vcc);
46+ }
47+ }
48+
49+ bool pass = filteredVCC->size () >= minNumCandidates_;
50+ iEvent.put (std::move (filteredVCC));
51+
52+ return pass;
3453}
3554
3655void V0EventSelector::fillDescriptions (edm::ConfigurationDescriptions& descriptions) {
3756 edm::ParameterSetDescription desc;
3857 desc.add <edm::InputTag>(" vertexCompositeCandidates" , edm::InputTag (" generalV0Candidates:Kshort" ));
39- desc.add <unsigned int >(" minCandidates" , 1 ); // Change '1' to your desired minimum number of candidates
58+ desc.add <unsigned int >(" minCandidates" , 1 )->setComment (" Minimum number of candidates required" );
59+ desc.add <double >(" massMin" , 0.0 )->setComment (" Minimum mass in GeV" );
60+ desc.add <double >(" massMax" , std::numeric_limits<double >::max ())->setComment (" Maximum mass in GeV" );
4061 descriptions.addWithDefaultLabel (desc);
4162}
4263
64+ // Define this module as a plug-in
4365DEFINE_FWK_MODULE (V0EventSelector);
0 commit comments