File indexing completed on 2024-04-06 12:07:26
0001 #include "DQM/GEM/plugins/GEMEfficiencyHarvester.h"
0002
0003 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0004 #include "FWCore/Utilities/interface/isFinite.h"
0005
0006 GEMEfficiencyHarvester::GEMEfficiencyHarvester(const edm::ParameterSet& ps)
0007 : GEMDQMEfficiencyClientBase(ps), kFolders_(ps.getUntrackedParameter<std::vector<std::string> >("folders")) {}
0008
0009 GEMEfficiencyHarvester::~GEMEfficiencyHarvester() {}
0010
0011 void GEMEfficiencyHarvester::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0012 edm::ParameterSetDescription desc;
0013
0014
0015 desc.addUntracked<double>("confidenceLevel", 0.683);
0016 desc.addUntracked<std::string>("logCategory", "GEMEfficiencyHarvester");
0017
0018
0019 desc.addUntracked<std::vector<std::string> >("folders", {"GEM/Efficiency/muonSTA"});
0020 descriptions.add("gemEfficiencyHarvester", desc);
0021 }
0022
0023
0024
0025
0026
0027 void GEMEfficiencyHarvester::bookDetector1DEfficiency(DQMStore::IBooker& ibooker,
0028 DQMStore::IGetter& igetter,
0029 const std::string& folder) {
0030 const std::map<std::string, MEPair> me_pairs = makeEfficiencySourcePair(ibooker, igetter, folder, "chamber_ieta_");
0031
0032 for (const auto& [key, value] : me_pairs) {
0033
0034 const auto& [me_num, me_den] = value;
0035
0036 if (me_num->kind() != MonitorElement::Kind::TH2F) {
0037 edm::LogError(kLogCategory_) << key << "expected TH2F but got ";
0038 continue;
0039 }
0040
0041 const TH2F* h_num = me_num->getTH2F();
0042 if (h_num == nullptr) {
0043 edm::LogError(kLogCategory_) << "numerator: failed to get TH2F from MonitorElement" << key;
0044 continue;
0045 }
0046
0047 const TH2F* h_den = me_den->getTH2F();
0048 if (h_den == nullptr) {
0049 edm::LogError(kLogCategory_) << "denominator: failed to get TH2F from MonitorElement" << key;
0050 continue;
0051 }
0052
0053 const auto [parsing_success, var_name, gem_name, is_matched] = parseEfficiencySourceName(me_den->getName());
0054 if (not parsing_success) {
0055 edm::LogError(kLogCategory_) << "failed to parse " << me_den->getName();
0056 continue;
0057 }
0058
0059
0060 const TH1F* h_chamber_num = projectHistogram(h_num, TH1::kXaxis);
0061 const TH1F* h_chamber_den = projectHistogram(h_den, TH1::kXaxis);
0062 const char* eff_chamber_name = Form("eff_chamber_%s", gem_name.c_str());
0063 if (TH1F* eff = makeEfficiency(h_chamber_num, h_chamber_den, eff_chamber_name)) {
0064 ibooker.book1D(eff_chamber_name, eff);
0065 }
0066
0067 const TH1F* h_ieta_num = projectHistogram(h_num, TH1::kYaxis);
0068 const TH1F* h_ieta_den = projectHistogram(h_den, TH1::kYaxis);
0069 const char* eff_ieta_name = Form("eff_ieta_%s", gem_name.c_str());
0070 if (TH1F* eff = makeEfficiency(h_ieta_num, h_ieta_den, eff_ieta_name)) {
0071 ibooker.book1D(eff_ieta_name, eff);
0072 }
0073 }
0074 }
0075
0076 void GEMEfficiencyHarvester::dqmEndJob(DQMStore::IBooker& ibooker, DQMStore::IGetter& igetter) {
0077 for (const std::string& folder : kFolders_) {
0078 bookEfficiencyAuto(ibooker, igetter, folder);
0079 bookDetector1DEfficiency(ibooker, igetter, folder);
0080 }
0081 }