File indexing completed on 2024-04-06 12:19:16
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #include <sstream>
0021 #include <utility>
0022
0023 #include <memory>
0024
0025 #include "Alignment/Geners/interface/CompressedIO.hh"
0026 #include "Alignment/Geners/interface/StringArchive.hh"
0027 #include "Alignment/Geners/interface/Reference.hh"
0028
0029
0030 #include "FWCore/Framework/interface/ModuleFactory.h"
0031 #include "FWCore/Framework/interface/ESProducer.h"
0032 #include "FWCore/Framework/interface/ESProductHost.h"
0033 #include "FWCore/Framework/interface/ESTransientHandle.h"
0034 #include "FWCore/Utilities/interface/ReusableObjectHolder.h"
0035
0036 #include "CondFormats/JetMETObjects/interface/FFTJetCorrectorParameters.h"
0037 #include "CondFormats/JetMETObjects/interface/FFTJetLUTTypes.h"
0038
0039 #include "JetMETCorrections/FFTJetObjects/interface/FFTJetLookupTableRcd.h"
0040 #include "JetMETCorrections/FFTJetObjects/interface/FFTJetLookupTableSequence.h"
0041
0042 typedef std::shared_ptr<npstat::StorableMultivariateFunctor> StorableFunctorPtr;
0043
0044 static void insertLUTItem(FFTJetLookupTableSequence& seq,
0045 StorableFunctorPtr fptr,
0046 const std::string& name,
0047 const std::string& category) {
0048 FFTJetLookupTableSequence::iterator it = seq.find(category);
0049 if (it == seq.end())
0050 it = seq.insert(std::make_pair(category, FFTJetDict<std::string, StorableFunctorPtr>())).first;
0051 it->second.insert(std::make_pair(name, fptr));
0052 }
0053
0054 static void buildLookupTables(const FFTJetCorrectorParameters& tablePars,
0055 const std::vector<edm::ParameterSet>& tableDefs,
0056 const bool isArchiveCompressed,
0057 const bool verbose,
0058 FFTJetLookupTableSequence* ptr) {
0059
0060 std::unique_ptr<gs::StringArchive> ar;
0061 {
0062 std::istringstream is(tablePars.str());
0063 if (isArchiveCompressed)
0064 ar = gs::read_compressed_item<gs::StringArchive>(is);
0065 else
0066 ar = gs::read_item<gs::StringArchive>(is);
0067 }
0068
0069 ptr->clear();
0070
0071
0072 std::set<unsigned long long> loadedSet;
0073
0074 const unsigned nTables = tableDefs.size();
0075 for (unsigned itab = 0; itab < nTables; ++itab) {
0076 const edm::ParameterSet& ps(tableDefs[itab]);
0077 gs::SearchSpecifier nameSearch(ps.getParameter<std::string>("name"), ps.getParameter<bool>("nameIsRegex"));
0078 gs::SearchSpecifier categorySearch(ps.getParameter<std::string>("category"),
0079 ps.getParameter<bool>("categoryIsRegex"));
0080 gs::Reference<npstat::StorableMultivariateFunctor> ref(*ar, nameSearch, categorySearch);
0081 const unsigned long nItems = ref.size();
0082 for (unsigned long item = 0; item < nItems; ++item) {
0083 const unsigned long long id = ref.id(item);
0084 if (loadedSet.insert(id).second) {
0085 std::unique_ptr<npstat::StorableMultivariateFunctor> p(ref.get(item));
0086 StorableFunctorPtr fptr(p.release());
0087 std::shared_ptr<const gs::CatalogEntry> e = ar->catalogEntry(id);
0088 insertLUTItem(*ptr, fptr, e->name(), e->category());
0089 if (verbose)
0090 std::cout << "In buildLookupTables: loaded table with name \"" << e->name() << "\" and category \""
0091 << e->category() << '"' << std::endl;
0092 }
0093 }
0094 }
0095 }
0096
0097
0098
0099
0100 template <typename CT>
0101 class FFTJetLookupTableESProducer : public edm::ESProducer {
0102 public:
0103 typedef std::shared_ptr<FFTJetLookupTableSequence> ReturnType;
0104 typedef FFTJetLookupTableRcd<CT> MyRecord;
0105 typedef FFTJetCorrectorParametersRcd<CT> ParentRecord;
0106
0107 FFTJetLookupTableESProducer(const edm::ParameterSet&);
0108 ~FFTJetLookupTableESProducer() override {}
0109
0110 ReturnType produce(const MyRecord&);
0111
0112 private:
0113
0114 std::vector<edm::ParameterSet> tables;
0115 bool isArchiveCompressed;
0116 bool verbose;
0117
0118 using HostType = edm::ESProductHost<FFTJetLookupTableSequence, ParentRecord>;
0119 edm::ReusableObjectHolder<HostType> holder_;
0120
0121 edm::ESGetToken<FFTJetCorrectorParameters, ParentRecord> token_;
0122 };
0123
0124
0125
0126
0127 template <typename CT>
0128 FFTJetLookupTableESProducer<CT>::FFTJetLookupTableESProducer(const edm::ParameterSet& psIn)
0129 : tables(psIn.getParameter<std::vector<edm::ParameterSet> >("tables")),
0130 isArchiveCompressed(psIn.getParameter<bool>("isArchiveCompressed")),
0131 verbose(psIn.getUntrackedParameter<bool>("verbose")) {
0132
0133
0134 auto cc = setWhatProduced(this);
0135 token_ = cc.consumes();
0136 }
0137
0138
0139 template <typename CT>
0140 typename FFTJetLookupTableESProducer<CT>::ReturnType FFTJetLookupTableESProducer<CT>::produce(const MyRecord& iRecord) {
0141 auto host = holder_.makeOrGet([]() { return new HostType; });
0142
0143 host->template ifRecordChanges<ParentRecord>(iRecord, [this, product = host.get()](auto const& rec) {
0144 edm::ESTransientHandle<FFTJetCorrectorParameters> parHandle = rec.getTransientHandle(token_);
0145 buildLookupTables(*parHandle, tables, isArchiveCompressed, verbose, product);
0146 });
0147
0148 return host;
0149 }
0150
0151
0152
0153
0154 typedef FFTJetLookupTableESProducer<fftluttypes::EtaFlatteningFactors> FFTEtaFlatteningFactorsTableESProducer;
0155 typedef FFTJetLookupTableESProducer<fftluttypes::PileupRhoCalibration> FFTPileupRhoCalibrationTableESProducer;
0156 typedef FFTJetLookupTableESProducer<fftluttypes::PileupRhoEtaDependence> FFTPileupRhoEtaDependenceTableESProducer;
0157 typedef FFTJetLookupTableESProducer<fftluttypes::LUT0> FFTLUT0TableESProducer;
0158 typedef FFTJetLookupTableESProducer<fftluttypes::LUT1> FFTLUT1TableESProducer;
0159 typedef FFTJetLookupTableESProducer<fftluttypes::LUT2> FFTLUT2TableESProducer;
0160 typedef FFTJetLookupTableESProducer<fftluttypes::LUT3> FFTLUT3TableESProducer;
0161 typedef FFTJetLookupTableESProducer<fftluttypes::LUT4> FFTLUT4TableESProducer;
0162 typedef FFTJetLookupTableESProducer<fftluttypes::LUT5> FFTLUT5TableESProducer;
0163 typedef FFTJetLookupTableESProducer<fftluttypes::LUT6> FFTLUT6TableESProducer;
0164 typedef FFTJetLookupTableESProducer<fftluttypes::LUT7> FFTLUT7TableESProducer;
0165 typedef FFTJetLookupTableESProducer<fftluttypes::LUT8> FFTLUT8TableESProducer;
0166 typedef FFTJetLookupTableESProducer<fftluttypes::LUT9> FFTLUT9TableESProducer;
0167 typedef FFTJetLookupTableESProducer<fftluttypes::LUT10> FFTLUT10TableESProducer;
0168 typedef FFTJetLookupTableESProducer<fftluttypes::LUT11> FFTLUT11TableESProducer;
0169 typedef FFTJetLookupTableESProducer<fftluttypes::LUT12> FFTLUT12TableESProducer;
0170 typedef FFTJetLookupTableESProducer<fftluttypes::LUT13> FFTLUT13TableESProducer;
0171 typedef FFTJetLookupTableESProducer<fftluttypes::LUT14> FFTLUT14TableESProducer;
0172 typedef FFTJetLookupTableESProducer<fftluttypes::LUT15> FFTLUT15TableESProducer;
0173
0174
0175
0176 DEFINE_FWK_EVENTSETUP_MODULE(FFTEtaFlatteningFactorsTableESProducer);
0177 DEFINE_FWK_EVENTSETUP_MODULE(FFTPileupRhoCalibrationTableESProducer);
0178 DEFINE_FWK_EVENTSETUP_MODULE(FFTPileupRhoEtaDependenceTableESProducer);
0179 DEFINE_FWK_EVENTSETUP_MODULE(FFTLUT0TableESProducer);
0180 DEFINE_FWK_EVENTSETUP_MODULE(FFTLUT1TableESProducer);
0181 DEFINE_FWK_EVENTSETUP_MODULE(FFTLUT2TableESProducer);
0182 DEFINE_FWK_EVENTSETUP_MODULE(FFTLUT3TableESProducer);
0183 DEFINE_FWK_EVENTSETUP_MODULE(FFTLUT4TableESProducer);
0184 DEFINE_FWK_EVENTSETUP_MODULE(FFTLUT5TableESProducer);
0185 DEFINE_FWK_EVENTSETUP_MODULE(FFTLUT6TableESProducer);
0186 DEFINE_FWK_EVENTSETUP_MODULE(FFTLUT7TableESProducer);
0187 DEFINE_FWK_EVENTSETUP_MODULE(FFTLUT8TableESProducer);
0188 DEFINE_FWK_EVENTSETUP_MODULE(FFTLUT9TableESProducer);
0189 DEFINE_FWK_EVENTSETUP_MODULE(FFTLUT10TableESProducer);
0190 DEFINE_FWK_EVENTSETUP_MODULE(FFTLUT11TableESProducer);
0191 DEFINE_FWK_EVENTSETUP_MODULE(FFTLUT12TableESProducer);
0192 DEFINE_FWK_EVENTSETUP_MODULE(FFTLUT13TableESProducer);
0193 DEFINE_FWK_EVENTSETUP_MODULE(FFTLUT14TableESProducer);
0194 DEFINE_FWK_EVENTSETUP_MODULE(FFTLUT15TableESProducer);