diff --git a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/CalibrationDataInterface/CalibrationDataEigenVariations.h b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/CalibrationDataInterface/CalibrationDataEigenVariations.h index 94b332549990cf2b58c79c5b994dce04fe0353fd..c2eb5e166a586c1c497779d48004f24de5a09618 100644 --- a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/CalibrationDataInterface/CalibrationDataEigenVariations.h +++ b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/CalibrationDataInterface/CalibrationDataEigenVariations.h @@ -103,6 +103,9 @@ namespace Analysis /** eigenvector variations */ std::vector<std::pair<TH1*, TH1*> > m_eigen; + /** indicate whether statistical uncertainties are stored as variations */ + bool m_statVariations; + // /** @ data members needed for eigenvector method **/ // /** the map stores the int which is needed to access the other vector<> objects **/ // mutable std::map<std::string, unsigned int> m_eigenvectorMethod_index; diff --git a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/CalibrationDataInterface/CalibrationDataInterfaceROOT.h b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/CalibrationDataInterface/CalibrationDataInterfaceROOT.h index 1a6590e9964b82d9cbc3d80096f68e4bd6560c14..d7683803a042ac75b350f87837c1f83892788f9e 100644 --- a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/CalibrationDataInterface/CalibrationDataInterfaceROOT.h +++ b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/CalibrationDataInterface/CalibrationDataInterfaceROOT.h @@ -99,7 +99,8 @@ namespace Analysis const std::map<std::string, std::vector<std::string> >& excludeFromEV, const std::map<std::string, Analysis::EVReductionStrategy> EVReductions, bool useEV = true, bool useMCMCSF = true, - bool useTopologyRescaling = false, bool useRecommendedEVExclusions = false); + bool useTopologyRescaling = false, bool useRecommendedEVExclusions = false, + bool verbose = true); /** default constructor for PROOF object retrieval */ CalibrationDataInterfaceROOT(); @@ -412,6 +413,9 @@ namespace Analysis /** if true, exclude pre-recommended lists of uncertainties from the covariance matrix building, in addition to the above user specified lists **/ bool m_useRecommendedEVExclusions; + + /** if true, allow also for some informational (and not only error/warning) messages **/ + bool m_verbose; // ------------------------------------------------------------------------------------------ diff --git a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/Root/CalibrationDataEigenVariations.cxx b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/Root/CalibrationDataEigenVariations.cxx index 824c1f8011b16bdf3f45c8b2a6d3c05c9dbaf1d4..31375312c8240a29323360ea85055ddead9ff2c8 100644 --- a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/Root/CalibrationDataEigenVariations.cxx +++ b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/Root/CalibrationDataEigenVariations.cxx @@ -15,6 +15,7 @@ #include <limits> #include <set> #include <algorithm> +#include <string> #include <cmath> #include "TH1.h" @@ -38,7 +39,10 @@ namespace { // But in order to avoid unnecessary overhead, the actual dimensionality of the histograms is accounted for. // Construct the (diagonal) covariance matrix for the statistical uncertainties on the "ref" results - TMatrixDSym getStatCovarianceMatrix(const TH1* hist) { + // Note that when statistical uncertainties are stored as variations, they are already accounted for and hence should not be duplicated; hence they are dummy here + // (this is not very nice, in that the result of this function will technically be wrong, + // but the statistical uncertainty covariance matrix is anyway not separately visible to the outside world) + TMatrixDSym getStatCovarianceMatrix(const TH1* hist, bool zero) { Int_t nbinx = hist->GetNbinsX()+2, nbiny = hist->GetNbinsY()+2, nbinz = hist->GetNbinsZ()+2; Int_t rows = nbinx; if (hist->GetDimension() > 1) rows *= nbiny; @@ -54,7 +58,7 @@ namespace { for (Int_t biny = 1; biny < nbiny-1; ++biny) for (Int_t binz = 1; binz < nbinz-1; ++binz) { Int_t bin = hist->GetBin(binx, biny, binz); - double err = hist->GetBinError(bin); + double err = zero ? 0 : hist->GetBinError(bin); stat(bin, bin) = err*err; } return stat; @@ -198,7 +202,7 @@ ClassImp(CalibrationDataEigenVariations) //________________________________________________________________________________ CalibrationDataEigenVariations::CalibrationDataEigenVariations(const CalibrationDataHistogramContainer* cnt, bool excludeRecommendedUncertaintySet) : - m_cnt(cnt), m_initialized(false), m_namedExtrapolation(-1) +m_cnt(cnt), m_initialized(false), m_namedExtrapolation(-1), m_statVariations(false) { // if specified, add items recommended for exclusion from EV decomposition by the calibration group to the 'named uncertainties' list if (excludeRecommendedUncertaintySet) { @@ -208,6 +212,11 @@ CalibrationDataEigenVariations::CalibrationDataEigenVariations(const Calibration std::cerr << "CalibrationDataEigenVariations warning: exclusion of pre-set uncertainties list requested but no (or empty) list found" << std::endl; } } + // also flag if statistical uncertainties stored as variations (this typically happens as a result of smoothing / pruning of SF results) + vector<string> uncs = m_cnt->listUncertainties(); + for (auto name : uncs) { + if (name.find("stat_np") != string::npos) m_statVariations = true; + } } //________________________________________________________________________________ @@ -284,7 +293,9 @@ CalibrationDataEigenVariations::getEigenCovarianceMatrix() const // First, treat the statistics separately. // Account for the possibility that this is handled as a (non-trivial) covariance matrix TMatrixDSym* sCov = dynamic_cast<TMatrixDSym*>(m_cnt->GetValue("statistics")); - TMatrixDSym cov = (sCov) ? *sCov : getStatCovarianceMatrix(result); + // Alternatively, statistical uncertainties may be accounted for as variations (i.e., much like systematic uncertainties). + // In that case, we create a null matrix here and add the statistical contributions along with the systematic ones. + TMatrixDSym cov = (sCov) ? *sCov : getStatCovarianceMatrix(result, m_statVariations); // Then loop through the list of (other) uncertainties std::vector<string> uncs = m_cnt->listUncertainties(); diff --git a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/Root/CalibrationDataInterfaceROOT.cxx b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/Root/CalibrationDataInterfaceROOT.cxx index 08149d577387c831d77b4fb4f29c6c85958cb61e..708fcd7cb0f1acd58306733c4f50a2d3f8687e1c 100644 --- a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/Root/CalibrationDataInterfaceROOT.cxx +++ b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/CalibrationDataInterface/Root/CalibrationDataInterfaceROOT.cxx @@ -289,8 +289,9 @@ ClassImp(Analysis::CalibrationDataInterfaceROOT) #endif //________________________________________________________________________________ -Analysis::CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT(const string& taggerName, string configname, string pathname) - : m_runEigenVectorMethod(false), m_useRecommendedEVExclusions(false), m_absEtaStrategy(GiveUp), m_otherStrategy(Flag) +Analysis::CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT(const string& taggerName, string configname, string pathname) : + m_runEigenVectorMethod(false), m_useRecommendedEVExclusions(false), m_verbose(true), + m_absEtaStrategy(GiveUp), m_otherStrategy(Flag) { // Normal constructor. // @@ -313,11 +314,13 @@ Analysis::CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT(const strin m_filenameSF = pathname + filename.Data(); } - cout << "=== CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT ===" << endl; - cout << " Config name : " << configname << endl; - cout << " taggerName : " << taggerName << endl; - cout << " Efficiency file name : " << m_filenameEff << endl - << " SF file name : " << m_filenameSF << endl; + if (m_verbose) { + cout << "=== CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT ===" << endl; + cout << " Config name : " << configname << endl; + cout << " taggerName : " << taggerName << endl; + cout << " Efficiency file name : " << m_filenameEff << endl + << " SF file name : " << m_filenameSF << endl; + } m_fileEff = TFile::Open(m_filenameEff.c_str(), "READ"); if (m_filenameEff == m_filenameSF) @@ -325,10 +328,12 @@ Analysis::CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT(const strin else m_fileSF = TFile::Open(m_filenameSF.c_str(), "READ"); - TObjString* s; - m_fileSF->GetObject("VersionInfo/BuildNumber", s); - if (s) cout << " CDI file build number: " << s->GetName() << endl; - cout << endl; + if (m_verbose) { + TObjString* s; + m_fileSF->GetObject("VersionInfo/BuildNumber", s); + if (s) cout << " CDI file build number: " << s->GetName() << endl; + cout << endl; + } std::string flavours[] = { "B", "C", "T", "Light" }; string testPrefix(taggerName); testPrefix += "."; @@ -396,23 +401,25 @@ Analysis::CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT(const strin m_excludeFromCovMatrix[flavour].insert(m_excludeFromCovMatrix[flavour].end(), to_exclude.begin(), to_exclude.end()); } - cout << " List of uncertainties to exclude:"; unsigned int n_excluded = 0; for (auto const& flavour : flavours) { n_excluded += m_excludeFromCovMatrix[flavour].size(); } - if (n_excluded == 0) cout << " none"; - for (auto const& flavour : flavours) { - if (m_excludeFromCovMatrix[flavour].size() > 0) { - cout << "\n\t" << flavour << ":\t"; - for (unsigned int i = 0; i < m_excludeFromCovMatrix[flavour].size(); ++i) { - cout << m_excludeFromCovMatrix[flavour][i]; - if (i+1 != m_excludeFromCovMatrix[flavour].size()) cout << "; "; + if (m_verbose) { + cout << " List of uncertainties to exclude:"; + if (n_excluded == 0) cout << " none"; + for (auto const& flavour : flavours) { + if (m_excludeFromCovMatrix[flavour].size() > 0) { + cout << "\n\t" << flavour << ":\t"; + for (unsigned int i = 0; i < m_excludeFromCovMatrix[flavour].size(); ++i) { + cout << m_excludeFromCovMatrix[flavour][i]; + if (i+1 != m_excludeFromCovMatrix[flavour].size()) cout << "; "; + } + cout << endl; } - cout << endl; } + cout << endl; } - cout << endl; // The following determines whether also pre-determined (recommended) lists of uncertainties are to be excluded from EV decomposition. // These lists are stored with the CalibrationDataContainers, which have not been instantiated yet (so we cannot show them at this point). @@ -463,7 +470,7 @@ Analysis::CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT(const strin // MC/MC (topology) scale factors: making this user-steerable is intended to be *temporary* only m_useTopologyRescaling = (bool) env.GetValue("useTopologySF", 0); - cout << "======= end of CalibrationDataInterfaceROOT instantiation ========" << endl; + if (m_verbose) cout << "======= end of CalibrationDataInterfaceROOT instantiation ========" << endl; } @@ -476,10 +483,10 @@ Analysis::CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT(const std:: const std::map<std::string, std::vector<std::string> >& excludeFromEV, const std::map<std::string, EVReductionStrategy> EVReductions, bool useEV, bool useMCMCSF, bool useTopologyRescaling, - bool useRecommendedEEVExclusions) : + bool useRecommendedEEVExclusions, bool verbose) : m_filenameSF(fileSF), m_filenameEff(""), m_runEigenVectorMethod(useEV), m_EVReductions(EVReductions), - m_useRecommendedEVExclusions(useRecommendedEEVExclusions), + m_useRecommendedEVExclusions(useRecommendedEEVExclusions), m_verbose(verbose), m_useMCMCSF(useMCMCSF), m_useTopologyRescaling(useTopologyRescaling), m_maxAbsEta(2.5), m_absEtaStrategy(GiveUp), m_otherStrategy(Flag), m_maxTagWeight(10.0) @@ -512,11 +519,13 @@ Analysis::CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT(const std:: // Note: at present, the means to change the strategies and maximum values initialized above do not exist // when using this constructor - cout << "=== CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT ===" << endl; - cout << " taggerName : " << taggerName.c_str() << endl; - if (fileEff) cout << " Efficiency file name : " << fileEff << endl; - cout << " SF file name : " << fileSF << endl - << endl; + if (m_verbose) { + cout << "=== CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT ===" << endl; + cout << " taggerName : " << taggerName.c_str() << endl; + if (fileEff) cout << " Efficiency file name : " << fileEff << endl; + cout << " SF file name : " << fileSF << endl + << endl; + } m_taggerName = taggerName; @@ -527,11 +536,13 @@ Analysis::CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT(const std:: } else m_fileEff = m_fileSF; - TObjString* s; - m_fileSF->GetObject("VersionInfo/BuildNumber", s); - if (s) cout << " CDI file build number: " << s->GetName() << endl; - cout << endl; - + if (m_verbose) { + TObjString* s; + m_fileSF->GetObject("VersionInfo/BuildNumber", s); + if (s) cout << " CDI file build number: " << s->GetName() << endl; + cout << endl; + } + for (unsigned int i = 0; i < jetAliases.size(); ++i) { // Each alias specification uses an arrow ("->"). Forget about entries // not properly following this specification. @@ -546,26 +557,29 @@ Analysis::CalibrationDataInterfaceROOT::CalibrationDataInterfaceROOT(const std:: if (m_runEigenVectorMethod) { m_excludeFromCovMatrix = excludeFromEV; - cout << " List of uncertainties to exclude:"; std::string flavours[] = { "B", "C", "T", "Light" }; unsigned int n_excluded = 0; for (auto const& flavour : flavours) { n_excluded += m_excludeFromCovMatrix[flavour].size(); } - if (n_excluded == 0) cout << " none"; - for (auto const& flavour : flavours) { - if (m_excludeFromCovMatrix[flavour].size() > 0) { - cout << "\n\t" << flavour << ":\t"; - for (unsigned int i = 0; i < m_excludeFromCovMatrix[flavour].size(); ++i) { - cout << m_excludeFromCovMatrix[flavour][i]; - if (i+1 != m_excludeFromCovMatrix[flavour].size()) cout << "; "; + if (m_verbose) { + cout << " List of uncertainties to exclude:"; + if (n_excluded == 0) cout << " none"; + for (auto const& flavour : flavours) { + if (m_excludeFromCovMatrix[flavour].size() > 0) { + cout << "\n\t" << flavour << ":\t"; + for (unsigned int i = 0; i < m_excludeFromCovMatrix[flavour].size(); ++i) { + cout << m_excludeFromCovMatrix[flavour][i]; + if (i+1 != m_excludeFromCovMatrix[flavour].size()) cout << "; "; + } + cout << endl; } - cout << endl; } + cout << endl; } - cout << endl; } - cout << "======= end of CalibrationDataInterfaceROOT instantiation ========" << endl; + + if (m_verbose) cout << "======= end of CalibrationDataInterfaceROOT instantiation ========" << endl; } //________________________________________________________________________________ @@ -631,7 +645,7 @@ Analysis::CalibrationDataInterfaceROOT::~CalibrationDataInterfaceROOT() } // Print summary output on out-of-bounds issues - if (m_absEtaStrategy == Flag) { + if (m_absEtaStrategy == Flag && m_verbose) { bool found = false; cout << "\t\tCalibrationDataInterfaceROOT |eta| out-of-bounds summary:" << endl; for (unsigned int index = 0; index < m_mainCounters.size(); ++index) @@ -641,7 +655,7 @@ Analysis::CalibrationDataInterfaceROOT::~CalibrationDataInterfaceROOT() } if (!found) cout << "\t\t\tNo issues found" << endl; } - if (m_otherStrategy == Flag) { + if (m_otherStrategy == Flag && m_verbose) { bool found = false; cout << "\t\tCalibrationDataInterfaceROOT object out-of-bounds summary:" << endl; for (unsigned int index = 0; index < m_mainCounters.size(); ++index) @@ -694,7 +708,7 @@ Analysis::CalibrationDataInterfaceROOT::retrieveCalibrationIndex (const std::str string flavour = (label == "N/A") ? "Light" : label; string dirname = m_taggerName + "/" + getAlias(author) + "/" + OP + "/" + flavour; string cntname = getContainername(flavour, isSF, mapIndex); - const_cast<Analysis::CalibrationDataInterfaceROOT*>(this)->retrieveContainer(dirname, cntname, isSF); + const_cast<Analysis::CalibrationDataInterfaceROOT*>(this)->retrieveContainer(dirname, cntname, isSF, m_verbose); it = m_objectIndices.find(name); if (it == m_objectIndices.end()) return false; } @@ -793,8 +807,8 @@ Analysis::CalibrationDataInterfaceROOT::getScaleFactor (const CalibrationDataVar if (!m_runEigenVectorMethod && (unc == SFEigen || unc == SFNamed)) { - cerr << " ERROR. Trying to call eigenvector method but initialization not switched on in b-tagging .env config file." << endl; - cerr << " Please correct your .env config file first. Nominal uncertainties used. " << endl; + cerr << " ERROR. Trying to call eigenvector method but initialization not switched on in b-tagging configuration." << endl; + cerr << " Please correct your configuration first. Nominal uncertainties used. " << endl; } if (unc == SFEigen || unc == SFNamed) { const CalibrationDataEigenVariations* eigenVariation=m_eigenVariationsMap[container]; @@ -2340,6 +2354,8 @@ Analysis::CalibrationDataInterfaceROOT::retrieveContainer(const string& dir, con // file (the calibration scale factor file). Note that it is assumed that scale // factor objects will always be retrieved from the calibration scale factor file. // doPrint: if true, print out some basic information about the successfully retrieved container + // (note that this is typically steered by the m_verbose setting; + // only for the retrieval of the maps used for MC/MC SF calculations, this printout is always switched off) // construct the full object name string name = dir + "/" + cntname; @@ -2359,7 +2375,7 @@ Analysis::CalibrationDataInterfaceROOT::retrieveContainer(const string& dir, con if (!isSF && !cnt && m_fileSF != m_fileEff) m_fileSF->GetObject(name.c_str(), cnt); m_objects.push_back(cnt); if (!cnt) { - cout << "btag Calib: retrieveContainer: failed to retrieve container named " << name.c_str() << " from file" << endl; + cerr << "btag Calib: retrieveContainer: failed to retrieve container named " << name.c_str() << " from file" << endl; return 0; } @@ -2385,7 +2401,7 @@ Analysis::CalibrationDataInterfaceROOT::retrieveContainer(const string& dir, con delete mapEff; } else { string SFCalibName = getContainername(getBasename(dir), true); - if (m_objectIndices.find(SFCalibName) == m_objectIndices.end()) retrieveContainer(dir, SFCalibName, true); + if (m_objectIndices.find(SFCalibName) == m_objectIndices.end()) retrieveContainer(dir, SFCalibName, true, doPrint); } } @@ -2414,13 +2430,13 @@ Analysis::CalibrationDataInterfaceROOT::retrieveContainer(const string& dir, con m_hadronisationReference[idx] = it->second; } } else if (m_useMCMCSF) - cout << "btag Calib: retrieveContainer: MC hadronisation reference map not found -- this should not happen!" << endl; + cerr << "btag Calib: retrieveContainer: MC hadronisation reference map not found -- this should not happen!" << endl; } if (m_hadronisationReference[idx] == -1 || ! m_objects[m_hadronisationReference[idx]]) // Not being able to construct the MC/MC scale factors will lead to a potential bias. // However, this is not considered sufficiently severe that we will flag it as an error. if (m_useMCMCSF) - cout << "btag Calib: retrieveContainer: warning: unable to apply MC/MC scale factors for container " + cerr << "btag Calib: retrieveContainer: warning: unable to apply MC/MC scale factors for container " << name << " with hadronisation reference = '" << spec << "'" << endl; // Initialize the Eigenvector variation object corresponding to this object, if applicable. Notes: @@ -2445,7 +2461,7 @@ Analysis::CalibrationDataInterfaceROOT::retrieveContainer(const string& dir, con newEigenVariation->initialize(); int to_retain = histoContainer->getEigenvectorReduction(m_EVReductions[flavour]); if (to_retain > -1) { - cout << "btag Calib: reducing number of eigenvector variations for flavour " << flavour << " to " << to_retain << endl; + if (m_verbose) cout << "btag Calib: reducing number of eigenvector variations for flavour " << flavour << " to " << to_retain << endl; // The merged variations will end up as the first entry in the specified list, i.e., as the last of the variations to be "retained" newEigenVariation->mergeVariationsFrom(size_t(to_retain-1)); } else if (m_EVReductions[flavour] != Loose) diff --git a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/Root/BTaggingEfficiencyTool.cxx b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/Root/BTaggingEfficiencyTool.cxx index 55d071d4851473e183f8215ac6ca879e35b016f0..a7571748508afcb31aecfab4d69d1445b0bad255 100644 --- a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/Root/BTaggingEfficiencyTool.cxx +++ b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/Root/BTaggingEfficiencyTool.cxx @@ -150,6 +150,7 @@ BTaggingEfficiencyTool::BTaggingEfficiencyTool( const std::string & name) : asg: declareProperty("ExtendedFlavourLabel", m_extFlavourLabel = false, "specify whether or not to use an 'extended' flavour labelling (allowing for multiple HF hadrons or perhaps partons)"); declareProperty("OldConeFlavourLabel", m_oldConeFlavourLabel = false, "when using cone-based flavour labelling, specify whether or not to use the (deprecated) Run-1 legacy labelling"); declareProperty("IgnoreOutOfValidityRange", m_ignoreOutOfValidityRange = false, "ignore out-of-extrapolation-range errors as returned by the underlying tool"); + declareProperty("VerboseCDITool", m_verboseCDITool = true, "specify whether or not to retain 'normal' printout from the underlying tool"); // initialise some variables needed for caching // TODO : add configuration of the mapIndices - rather than just using the default of 0 //m_mapIndices["Light"] = m_mapIndices["T"] = m_mapIndices["C"] = m_mapIndices["B"] = 0; @@ -318,7 +319,8 @@ StatusCode BTaggingEfficiencyTool::initialize() { m_systStrategy != "Envelope", // assume that eigenvector variations will be used unless the "Envelope" model is used true, // use MC/MC scale factors false, // do not use topology rescaling (only relevant for pseudo-continuous tagging) - m_useRecommendedEVExclusions); // if true, add pre-set lists of uncertainties to be excluded from EV decomposition + m_useRecommendedEVExclusions, // if true, add pre-set lists of uncertainties to be excluded from EV decomposition + m_verboseCDITool); // if false, suppress any non-error/warning messages setMapIndex("Light",0); setMapIndex("C",0); diff --git a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/util/BTaggingEfficiencyToolTester.cxx b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/util/BTaggingEfficiencyToolTester.cxx index d3edc7a96a295c7979ceb6808d20fcc43c142d4c..3aebe5cec7bde09e01bf4c156a542badd52fd4fb 100644 --- a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/util/BTaggingEfficiencyToolTester.cxx +++ b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/util/BTaggingEfficiencyToolTester.cxx @@ -25,10 +25,10 @@ int main() { std::string workingPointName = "FixedCutBEff_70"; asg::AnaToolHandle<IBTaggingEfficiencyTool> tool("BTaggingEfficiencyTool/BTagEffTest"); - StatusCode code1 = tool.setProperty("ScaleFactorFileName","xAODBTaggingEfficiency/13TeV/2017-21-13TeV-MC16-CDI-2018-02-09_v1.root" ); + StatusCode code1 = tool.setProperty("ScaleFactorFileName","xAODBTaggingEfficiency/13TeV/2019-21-13TeV-MC16-CDI-2019-10-07_v1.root" ); StatusCode code2 = tool.setProperty("TaggerName", taggerName ); StatusCode code3 = tool.setProperty("OperatingPoint", workingPointName); - StatusCode code4 = tool.setProperty("JetAuthor", "AntiKt4EMTopoJets" ); + StatusCode code4 = tool.setProperty("JetAuthor", "AntiKt4EMPFlowJets_BTagging201810" ); //provide a file which tells the tool which efficiency maps to use, and connects sample DSIDs to the right efficiency map. //you can find a tool to automatically create this config file here: https://gitlab.cern.ch/mstamenk/automate-hadronisation-information @@ -56,7 +56,7 @@ int main() { // select your efficiency map based on the DSID of your sample: - unsigned int sample_dsid = 410501; + unsigned int sample_dsid = 410470; tool->setMapIndex(sample_dsid); diff --git a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/xAODBTaggingEfficiency/BTaggingEfficiencyTool.h b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/xAODBTaggingEfficiency/BTaggingEfficiencyTool.h index 594d3316ecfc7192ff206b7d6c14cce6d30048db..91c824ea9303e27e5c17246c53f15d8982389941 100644 --- a/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/xAODBTaggingEfficiency/BTaggingEfficiencyTool.h +++ b/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/xAODBTaggingEfficiency/BTaggingEfficiencyTool.h @@ -312,6 +312,8 @@ private: bool m_useRecommendedEVExclusions; /// if true, ignore out-of-extrapolation range errors (i.e., return CorrectionCode::Ok if these are encountered) bool m_ignoreOutOfValidityRange; + /// if false, suppress any non-error/warning printout from the underlying tool + bool m_verboseCDITool; /// @} /// @name Cached variables