Go to the documentation of this file.00001 #ifndef JetMETCorrections_FFTJetObjects_FFTJetScaleCalculators_h
00002 #define JetMETCorrections_FFTJetObjects_FFTJetScaleCalculators_h
00003
00004 #include <cassert>
00005 #include <cmath>
00006
00007 #include "JetMETCorrections/FFTJetObjects/interface/AbsFFTSpecificScaleCalculator.h"
00008 #include "JetMETCorrections/FFTJetObjects/interface/AbsFFTJetScaleCalculator.h"
00009 #include "FWCore/Utilities/interface/Exception.h"
00010
00011 template<class MyJet, class Adjustable>
00012 class FFTEtaLogPtConeRadiusMapper :
00013 public AbsFFTJetScaleCalculator<MyJet, Adjustable>
00014 {
00015 public:
00016 inline explicit FFTEtaLogPtConeRadiusMapper(
00017 CPP11_shared_ptr<npstat::AbsMultivariateFunctor> f)
00018 : AbsFFTJetScaleCalculator<MyJet, Adjustable>(f) {}
00019
00020 private:
00021 inline void map(const MyJet& jet,
00022 const Adjustable& current,
00023 double* buf, const unsigned dim) const
00024 {
00025 assert(buf);
00026 if (dim != 3)
00027 throw cms::Exception("FFTJetBadConfig")
00028 << "In FFTEtaLogPtConeRadiusMapper::map: "
00029 << "invalid table dimensionality: "
00030 << dim << std::endl;
00031 buf[0] = current.vec().eta();
00032 buf[1] = log(current.vec().pt());
00033 buf[2] = jet.getFFTSpecific().f_recoScale();
00034 }
00035 };
00036
00037 template<class MyJet, class Adjustable>
00038 class FFTSpecificScaleCalculator :
00039 public AbsFFTJetScaleCalculator<MyJet, Adjustable>
00040 {
00041 public:
00042
00043
00044
00045
00046
00047 inline FFTSpecificScaleCalculator(
00048 CPP11_shared_ptr<npstat::AbsMultivariateFunctor> f,
00049 const AbsFFTSpecificScaleCalculator* p)
00050 : AbsFFTJetScaleCalculator<MyJet, Adjustable>(f), calc_(p) {assert(p);}
00051
00052 inline virtual ~FFTSpecificScaleCalculator() {delete calc_;}
00053
00054 private:
00055 inline void map(const MyJet& jet,
00056 const Adjustable& current,
00057 double* buf, const unsigned dim) const
00058 {
00059 return calc_->mapFFTJet(jet, jet.getFFTSpecific(),
00060 current.vec(), buf, dim);
00061 }
00062
00063 const AbsFFTSpecificScaleCalculator* calc_;
00064 };
00065
00066 #endif // JetMETCorrections_FFTJetObjects_FFTJetScaleCalculators_h