File indexing completed on 2024-04-06 12:19:17
0001 #include <iostream>
0002 #include <sstream>
0003
0004 #include "Alignment/Geners/interface/Reference.hh"
0005
0006 #include "JetMETCorrections/FFTJetObjects/interface/loadFFTJetInterpolationTable.h"
0007 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0008 #include "FWCore/Utilities/interface/Exception.h"
0009
0010 static void dumpArchiveMetadata(gs::StringArchive& ar, std::ostream& os) {
0011 const unsigned long long idSmall = ar.smallestId();
0012 if (!idSmall)
0013 os << "!!! No records in the archive !!!" << std::endl;
0014 else {
0015 const unsigned long long idLarge = ar.largestId();
0016 unsigned long long count = 0;
0017 for (unsigned long long id = idSmall; id <= idLarge; ++id)
0018 if (ar.itemExists(id)) {
0019 std::shared_ptr<const gs::CatalogEntry> e = ar.catalogEntry(id);
0020 os << '\n';
0021 e->humanReadable(os);
0022 ++count;
0023 }
0024 os << '\n' << count << " records in the archive" << std::endl;
0025 }
0026 }
0027
0028 std::unique_ptr<npstat::StorableMultivariateFunctor> loadFFTJetInterpolationTable(const edm::ParameterSet& ps,
0029 gs::StringArchive& ar,
0030 const bool verbose) {
0031 gs::SearchSpecifier nameSearch(ps.getParameter<std::string>("name"), ps.getParameter<bool>("nameIsRegex"));
0032 gs::SearchSpecifier categorySearch(ps.getParameter<std::string>("category"),
0033 ps.getParameter<bool>("categoryIsRegex"));
0034 gs::Reference<npstat::StorableMultivariateFunctor> ref(ar, nameSearch, categorySearch);
0035
0036
0037 if (!ref.unique()) {
0038 std::ostringstream os;
0039 os << "Error in loadFFTJetInterpolationTable: table with name \"" << nameSearch.pattern() << "\" ";
0040 if (nameSearch.useRegex())
0041 os << "(regex) ";
0042 os << "and category \"" << categorySearch.pattern() << "\" ";
0043 if (categorySearch.useRegex())
0044 os << "(regex) ";
0045 os << "is not ";
0046 if (ref.empty())
0047 os << "found";
0048 else
0049 os << "unique";
0050 os << " in the archive. Archive contents are:\n";
0051 dumpArchiveMetadata(ar, os);
0052 throw cms::Exception("FFTJetBadConfig", os.str());
0053 }
0054
0055 std::unique_ptr<npstat::StorableMultivariateFunctor> p = ref.get(0);
0056 if (verbose) {
0057 std::cout << "In loadFFTJetInterpolationTable: loaded table with metadata" << std::endl;
0058 std::shared_ptr<const gs::CatalogEntry> e = ref.indexedCatalogEntry(0);
0059 e->humanReadable(std::cout);
0060 std::cout << std::endl;
0061 std::cout << "Actual table class name is \"" << p->classId().name() << '"' << std::endl;
0062 }
0063 return p;
0064 }