File indexing completed on 2024-04-06 12:09:48
0001 #include "DQMOffline/RecoB/interface/TaggingVariablePlotter.h"
0002
0003 using namespace std;
0004 using namespace edm;
0005 using namespace reco;
0006
0007 TaggingVariablePlotter::VariableConfig::VariableConfig(const string &name,
0008 const ParameterSet &pSet,
0009 const string &category,
0010 const string &label,
0011 unsigned int mc,
0012 DQMStore::IBooker &ibook)
0013 : var(getTaggingVariableName(name)),
0014 nBins(pSet.getParameter<unsigned int>("nBins")),
0015 min(pSet.getParameter<double>("min")),
0016 max(pSet.getParameter<double>("max")) {
0017 if (var == btau::lastTaggingVariable)
0018 throw cms::Exception("Configuration") << "Tagging variable \"" << name << "\" does not exist." << endl;
0019
0020 if (pSet.exists("logScale"))
0021 logScale = pSet.getParameter<bool>("logScale");
0022 else
0023 logScale = false;
0024
0025 std::vector<unsigned int> indices;
0026 if (pSet.exists("indices"))
0027 indices = pSet.getParameter<vector<unsigned int>>("indices");
0028 else
0029 indices.push_back(0);
0030
0031 for (const unsigned int iter : indices) {
0032 Plot plot;
0033 plot.histo = std::make_shared<FlavourHistograms<double>>(
0034 name + (iter ? Form("%d", iter) : "") + (category.empty() ? "_" + label : ("_" + category) + "_" + label),
0035 TaggingVariableDescription[var],
0036 nBins,
0037 min,
0038 max,
0039 false,
0040 logScale,
0041 true,
0042 "b",
0043 label,
0044 mc,
0045 ibook);
0046 plot.index = iter;
0047 plots.push_back(plot);
0048 }
0049 }
0050
0051 TaggingVariablePlotter::TaggingVariablePlotter(const std::string &tagName,
0052 const EtaPtBin &etaPtBin,
0053 const ParameterSet &pSet,
0054 unsigned int mc,
0055 bool willFinalize,
0056 DQMStore::IBooker &ibook,
0057 const string &category)
0058 : BaseTagInfoPlotter(tagName, etaPtBin), mcPlots_(mc) {
0059 const std::string tagVarDir(theExtensionString.substr(1));
0060
0061 if (willFinalize)
0062 return;
0063
0064 const vector<string> &pSets = pSet.getParameterNames();
0065 for (const std::string &iter : pSets) {
0066 VariableConfig var(iter, pSet.getParameter<ParameterSet>(iter), category, tagVarDir, mcPlots_, ibook);
0067 variables.push_back(var);
0068 }
0069 }
0070
0071 TaggingVariablePlotter::~TaggingVariablePlotter() {}
0072
0073 void TaggingVariablePlotter::analyzeTag(const BaseTagInfo *baseTagInfo, double jec, int jetFlavour, float w ) {
0074 analyzeTag(baseTagInfo->taggingVariables(), jetFlavour, w);
0075 }
0076
0077 void TaggingVariablePlotter::analyzeTag(const TaggingVariableList &vars, int jetFlavour, float w ) {
0078 for (const VariableConfig &cfg : variables) {
0079 const std::vector<TaggingValue> values(vars.getList(cfg.var, false));
0080 if (values.empty())
0081 continue;
0082
0083 const unsigned int &size = values.size();
0084
0085 for (const VariableConfig::Plot &plot : cfg.plots) {
0086 if (plot.index == 0) {
0087 for (const TaggingValue &val : values)
0088 plot.histo->fill(jetFlavour, val, w);
0089 } else if (plot.index - 1 < size)
0090 plot.histo->fill(jetFlavour, values[plot.index - 1], w);
0091 }
0092 }
0093 }