File indexing completed on 2024-04-06 12:13:26
0001
0002
0003
0004
0005
0006
0007
0008 #include <memory>
0009 #include <iostream>
0010
0011
0012
0013 #include "FWCore/Framework/interface/Frameworkfwd.h"
0014 #include "FWCore/Framework/interface/global/EDAnalyzer.h"
0015
0016 #include "FWCore/Framework/interface/Event.h"
0017 #include "FWCore/Framework/interface/Run.h"
0018 #include "FWCore/Framework/interface/EventSetup.h"
0019 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0020 #include "FWCore/Framework/interface/LuminosityBlock.h"
0021 #include "FWCore/Utilities/interface/EDGetToken.h"
0022 #include "FWCore/Utilities/interface/thread_safety_macros.h"
0023 #include "FWCore/Framework/interface/MakerMacros.h"
0024
0025 #include "SimDataFormats/GeneratorProducts/interface/GenFilterInfo.h"
0026
0027
0028
0029
0030 namespace gfea {
0031 struct Empty {};
0032 };
0033
0034 class GenFilterEfficiencyAnalyzer final : public edm::global::EDAnalyzer<edm::LuminosityBlockCache<gfea::Empty>> {
0035 public:
0036 explicit GenFilterEfficiencyAnalyzer(const edm::ParameterSet&);
0037 ~GenFilterEfficiencyAnalyzer() final;
0038
0039 private:
0040 void analyze(edm::StreamID, const edm::Event&, const edm::EventSetup&) const final;
0041 std::shared_ptr<gfea::Empty> globalBeginLuminosityBlock(edm::LuminosityBlock const&,
0042 edm::EventSetup const&) const final;
0043 void globalEndLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) const final;
0044 void endJob() final;
0045
0046 edm::EDGetTokenT<GenFilterInfo> genFilterInfoToken_;
0047 mutable std::mutex mutex_;
0048 CMS_THREAD_GUARD(mutex_) mutable GenFilterInfo totalGenFilterInfo_;
0049
0050
0051 };
0052
0053 GenFilterEfficiencyAnalyzer::GenFilterEfficiencyAnalyzer(const edm::ParameterSet& pset)
0054 : genFilterInfoToken_(consumes<GenFilterInfo, edm::InLumi>(pset.getParameter<edm::InputTag>("genFilterInfoTag"))),
0055 totalGenFilterInfo_(0, 0, 0, 0, 0., 0., 0., 0.) {}
0056
0057 GenFilterEfficiencyAnalyzer::~GenFilterEfficiencyAnalyzer() {}
0058
0059 void GenFilterEfficiencyAnalyzer::analyze(edm::StreamID, const edm::Event&, const edm::EventSetup&) const {}
0060
0061 std::shared_ptr<gfea::Empty> GenFilterEfficiencyAnalyzer::globalBeginLuminosityBlock(edm::LuminosityBlock const& iLumi,
0062 edm::EventSetup const&) const {
0063 return std::shared_ptr<gfea::Empty>();
0064 }
0065
0066
0067
0068 void GenFilterEfficiencyAnalyzer::globalEndLuminosityBlock(edm::LuminosityBlock const& iLumi,
0069 edm::EventSetup const&) const {
0070 edm::Handle<GenFilterInfo> genFilter;
0071 iLumi.getByToken(genFilterInfoToken_, genFilter);
0072
0073 std::cout << "Lumi section " << iLumi.id() << std::endl;
0074
0075 std::cout << "N total = " << genFilter->sumWeights() << " N passed = " << genFilter->sumPassWeights()
0076 << " N failed = " << genFilter->sumFailWeights() << std::endl;
0077 std::cout << "Generator filter efficiency = " << genFilter->filterEfficiency(-1) << " +- "
0078 << genFilter->filterEfficiencyError(-1) << std::endl;
0079 {
0080 std::lock_guard<std::mutex> guard(mutex_);
0081 totalGenFilterInfo_.mergeProduct(*genFilter);
0082 }
0083 }
0084
0085 void GenFilterEfficiencyAnalyzer::endJob() {
0086 std::cout << "Total events = " << totalGenFilterInfo_.sumWeights()
0087 << " Passed events = " << totalGenFilterInfo_.sumPassWeights() << std::endl;
0088 std::cout << "Filter efficiency = " << totalGenFilterInfo_.filterEfficiency(-1) << " +- "
0089 << totalGenFilterInfo_.filterEfficiencyError(-1) << std::endl;
0090 }
0091
0092 DEFINE_FWK_MODULE(GenFilterEfficiencyAnalyzer);