CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_6_1_2_SLHC2/src/JetMETCorrections/FFTJetObjects/interface/AbsFFTJetScaleCalculator.h

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