File indexing completed on 2024-04-06 12:30:40
0001 #include "DataFormats/Common/interface/Handle.h"
0002 #include "FWCore/Framework/interface/global/EDAnalyzer.h"
0003 #include "FWCore/Framework/interface/Event.h"
0004 #include "FWCore/Framework/interface/MakerMacros.h"
0005 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0006 #include "FWCore/Utilities/interface/EDGetToken.h"
0007 #include "FWCore/Utilities/interface/InputTag.h"
0008 #include "SimDataFormats/PileupSummaryInfo/interface/PileupSummaryInfo.h"
0009
0010 #include <algorithm>
0011 #include <vector>
0012
0013 class TestPreMixingPileupAnalyzer : public edm::global::EDAnalyzer<> {
0014 public:
0015 public:
0016 explicit TestPreMixingPileupAnalyzer(edm::ParameterSet const& iConfig);
0017 void analyze(edm::StreamID, edm::Event const& iEvent, edm::EventSetup const& iSetup) const override;
0018
0019 private:
0020 edm::EDGetTokenT<std::vector<PileupSummaryInfo>> inputToken_;
0021 std::vector<unsigned int> allowedPileups_;
0022 };
0023
0024 TestPreMixingPileupAnalyzer::TestPreMixingPileupAnalyzer(edm::ParameterSet const& iConfig)
0025 : inputToken_(consumes<std::vector<PileupSummaryInfo>>(iConfig.getUntrackedParameter<edm::InputTag>("src"))),
0026 allowedPileups_(iConfig.getUntrackedParameter<std::vector<unsigned int>>("allowedPileups")) {}
0027
0028 void TestPreMixingPileupAnalyzer::analyze(edm::StreamID,
0029 edm::Event const& iEvent,
0030 edm::EventSetup const& iSetup) const {
0031 edm::Handle<std::vector<PileupSummaryInfo>> h;
0032 iEvent.getByToken(inputToken_, h);
0033 const auto& summary = *h;
0034
0035 auto it = std::find_if(summary.begin(), summary.end(), [](const auto& s) { return s.getBunchCrossing() == 0; });
0036 if (it == summary.end()) {
0037 throw cms::Exception("LogicError") << "Did not find PileupSummaryInfo in bunch crossing 0";
0038 }
0039
0040 float trueNumInteractions = it->getTrueNumInteractions();
0041 auto pubin = static_cast<unsigned int>(trueNumInteractions);
0042 auto it2 = std::find(allowedPileups_.begin(), allowedPileups_.end(), pubin);
0043 if (it2 == allowedPileups_.end()) {
0044 cms::Exception ex{"LogicError"};
0045 ex << "Got event with true number of interactions " << trueNumInteractions << ", pileup bin is thus " << pubin
0046 << ", that is not in the list of allowed values:";
0047 for (auto v : allowedPileups_) {
0048 ex << " " << v;
0049 }
0050 throw ex;
0051 }
0052 }
0053
0054 DEFINE_FWK_MODULE(TestPreMixingPileupAnalyzer);