1 #ifndef JetMETCorrections_FFTJetModules_plugins_FFTJetCorrectionESProducer_h 2 #define JetMETCorrections_FFTJetModules_plugins_FFTJetCorrectionESProducer_h 28 #include "Alignment/Geners/interface/CompressedIO.hh" 54 template<
class CorrectorSequence>
58 const std::vector<edm::ParameterSet>&
sequence,
59 const bool isArchiveCompressed,
const bool verbose,
60 CorrectorSequence* ptr)
62 typedef typename CorrectorSequence::Corrector Corrector;
63 typedef typename CorrectorSequence::jet_type jet_type;
66 CPP11_auto_ptr<gs::StringArchive> ar;
68 std::istringstream is(tablePars.
str());
69 if (isArchiveCompressed)
70 ar = gs::read_compressed_item<gs::StringArchive>(is);
72 ar = gs::read_item<gs::StringArchive>(is);
80 const unsigned nLevels = sequence.size();
81 for (
unsigned lev=0; lev<nLevels; ++lev)
82 ptr->addCorrector(parseFFTJetCorrector<Corrector>(
83 sequence[lev], *ar, verbose));
87 unsigned previousLevel = 0;
88 for (
unsigned lev=0; lev<nLevels; ++lev)
90 const unsigned level = (*ptr)[lev].level();
93 if (level <= previousLevel)
95 <<
"Error in buildCorrectorSequence: " 96 <<
"correction levels are out of order\n";
97 previousLevel =
level;
105 template<
typename CT>
123 ReturnType
produce(
const MyRecord&);
140 template<
typename CT>
153 template<
typename CT>
161 host->template ifRecordChanges<ParentRecord>(iRecord,
162 [
this,product=
host.get()](
auto const& rec) {
165 buildCorrectorSequence<CorrectorSequence>(
172 #endif // JetMETCorrections_FFTJetModules_plugins_FFTJetCorrectionESProducer_h
auto setWhatProduced(T *iThis, const es::Label &iLabel={})
const std::string & str() const
static void buildCorrectorSequence(const FFTJetCorrectorParameters &tablePars, const std::vector< edm::ParameterSet > &sequence, const bool isArchiveCompressed, const bool verbose, CorrectorSequence *ptr)
edm::ReusableObjectHolder< HostType > holder_
std::shared_ptr< T > makeOrGet(F iFunc)
If there isn't an object already available, creates a new one using iFunc.
FFTJetCorrectorParametersRcd< CT > ParentRecord
FFTJetCorrectionESProducer(const edm::ParameterSet &)
FFTJetCorrectionsTypemap< CT >::jet_type jet_type
ReturnType produce(const MyRecord &)
FFTJetCorrectorSequenceRcd< CT > MyRecord
~FFTJetCorrectionESProducer() override
edm::ESProductHost< CorrectorSequence, ParentRecord > HostType
FFTJetCorrectorSequence< jet_type, FFTJetCorrectorTransientFromJet, FFTJetCorrectorResultFromTransient > CorrectorSequence
std::vector< edm::ParameterSet > sequence
std::shared_ptr< CorrectorSequence > ReturnType