00001 #ifndef ElectroWeakAnalysis_ZMuMu_ZMuMuBack_h 00002 #define ElectroWeakAnalysis_ZMuMu_ZMuMuBack_h 00003 00004 #include "PhysicsTools/Utilities/interface/Exponential.h" 00005 #include "PhysicsTools/Utilities/interface/Polynomial.h" 00006 #include <boost/shared_ptr.hpp> 00007 00008 namespace function{ 00009 class ZMuMuBack { 00010 public: 00011 enum{ arguments = 1 }; 00012 enum{ parameters = 4 }; 00013 ZMuMuBack(boost::shared_ptr<double> Nb, boost::shared_ptr<double> l, 00014 boost::shared_ptr<double> a, boost::shared_ptr<double> b): 00015 Nbkg(Nb), lambda(l), a1(a), a2(b), 00016 expo_(-(*l)), poly_(1., *a, *b) {} 00017 ZMuMuBack(double Nb, double l, double a, double b): 00018 Nbkg(new double(Nb)), lambda(new double(l)), a1(new double(a)), a2(new double(b)), 00019 expo_(-l), poly_(1, a, b) {} 00020 double operator()(double x) const { 00021 return *Nbkg * expo_(x) * poly_(x); 00022 } 00023 void setParameters(double Nb, double l, double a, double b) { 00024 *Nbkg = Nb; 00025 *lambda = l; 00026 *a1 = a; 00027 *a2 = b; 00028 expo_.setParameters(-l); 00029 poly_.setParameters(1., a, b); 00030 } 00031 00032 boost::shared_ptr<double> Nbkg, lambda, a1, a2; 00033 private: 00034 Exponential expo_; 00035 Polynomial<2> poly_; 00036 }; 00037 } 00038 00039 #endif