Go to the documentation of this file.00001 #ifndef JetMETCorrections_FFTJetObjects_AbsFFTJetScaleCalculator_h
00002 #define JetMETCorrections_FFTJetObjects_AbsFFTJetScaleCalculator_h
00003
00004 #include <vector>
00005 #include "Alignment/Geners/interface/CPP11_shared_ptr.hh"
00006 #include "JetMETCorrections/InterpolationTables/interface/AbsMultivariateFunctor.h"
00007
00008 template<class Jet, class Adjustable>
00009 class AbsFFTJetScaleCalculator
00010 {
00011 public:
00012 typedef Jet jet_type;
00013 typedef Adjustable adjustable_type;
00014
00015 inline explicit AbsFFTJetScaleCalculator(
00016 CPP11_shared_ptr<npstat::AbsMultivariateFunctor> f)
00017 : functor(f), buffer_(f->minDim()) {}
00018
00019 inline virtual ~AbsFFTJetScaleCalculator() {}
00020
00021 inline double scale(const Jet& jet, const Adjustable& current) const
00022 {
00023 const unsigned dim = buffer_.size();
00024 double* buf = dim ? &buffer_[0] : static_cast<double*>(0);
00025 this->map(jet, current, buf, dim);
00026 return (*functor)(buf, dim);
00027 }
00028
00029 private:
00030 AbsFFTJetScaleCalculator();
00031
00032 virtual void map(const Jet& jet,
00033 const Adjustable& current,
00034 double* buf, unsigned dim) const = 0;
00035
00036 CPP11_shared_ptr<npstat::AbsMultivariateFunctor> functor;
00037 mutable std::vector<double> buffer_;
00038 };
00039
00040 #endif // JetMETCorrections_FFTJetObjects_AbsFFTJetScaleCalculator_h