Back to home page

Project CMSSW displayed by LXR

 
 

    


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

0001 #ifndef Analysis_AnalysisFilters_interface_RunLumiSelector_h
0002 #define Analysis_AnalysisFilters_interface_RunLumiSelector_h
0003 
0004 #ifndef __GCCXML__
0005 #include "FWCore/Framework/interface/ConsumesCollector.h"
0006 #endif
0007 #include "FWCore/Common/interface/EventBase.h"
0008 #include "DataFormats/Common/interface/Handle.h"
0009 
0010 #include "PhysicsTools/SelectorUtils/interface/EventSelector.h"
0011 #include "DataFormats/VertexReco/interface/Vertex.h"
0012 
0013 #include <vector>
0014 #include <string>
0015 
0016 // make a selector for this selection
0017 class RunLumiSelector : public EventSelector {
0018 public:
0019   RunLumiSelector() {}
0020 
0021 #ifndef __GCCXML__
0022   RunLumiSelector(edm::ParameterSet const& params, edm::ConsumesCollector&& iC) : RunLumiSelector(params) {}
0023 #endif
0024 
0025   RunLumiSelector(edm::ParameterSet const& params) {
0026     push_back("RunLumi");
0027 
0028     if (params.exists("lumisToProcess")) {
0029       lumis_ = params.getUntrackedParameter<std::vector<edm::LuminosityBlockRange> >("lumisToProcess");
0030       set("RunLumi");
0031     } else {
0032       lumis_.clear();
0033       set("RunLumi", false);
0034     }
0035 
0036     retInternal_ = getBitTemplate();
0037   }
0038 
0039   bool operator()(edm::EventBase const& ev, pat::strbitset& ret) override {
0040     if (!ignoreCut("RunLumi")) {
0041       bool goodLumi = false;
0042       for (std::vector<edm::LuminosityBlockRange>::const_iterator lumisBegin = lumis_.begin(),
0043                                                                   lumisEnd = lumis_.end(),
0044                                                                   ilumi = lumisBegin;
0045            ilumi != lumisEnd;
0046            ++ilumi) {
0047         if (ev.id().run() >= ilumi->startRun() && ev.id().run() <= ilumi->endRun() &&
0048             ev.id().luminosityBlock() >= ilumi->startLumi() && ev.id().luminosityBlock() <= ilumi->endLumi()) {
0049           goodLumi = true;
0050           break;
0051         }
0052       }
0053       if (goodLumi)
0054         passCut(ret, "RunLumi");
0055     } else {
0056       passCut(ret, "RunLumi");
0057     }
0058 
0059     setIgnored(ret);
0060     return (bool)ret;
0061   }
0062 
0063   using EventSelector::operator();
0064 
0065 private:
0066   std::vector<edm::LuminosityBlockRange> lumis_;
0067 };
0068 
0069 #endif