00001 #ifndef PhysicsTools_IsolationUtils_IntegrandThetaFunction_h 00002 #define PhysicsTools_IsolationUtils_IntegrandThetaFunction_h 00003 00004 // -*- C++ -*- 00005 // 00006 // Package: IntegrandThetaFunction 00007 // Class: IntegrandThetaFunction 00008 // 00017 // 00018 // Original Author: Christian Veelken, UC Davis 00019 // Created: Thu Nov 2 13:47:40 CST 2006 00020 // $Id: IntegrandThetaFunction.h,v 1.2 2009/01/14 10:53:14 hegner Exp $ 00021 // 00022 // 00023 00024 // ROOT include files 00025 #include <Math/ParamFunction.h> 00026 #include <Math/Integrator.h> 00027 00028 class IntegralOverPhiFunction; 00029 00030 // 00031 // class declaration 00032 // 00033 00034 class IntegrandThetaFunction : public ROOT::Math::ParamFunction<ROOT::Math::IParametricGradFunctionOneDim> 00035 { 00036 public: 00037 IntegrandThetaFunction(); 00038 IntegrandThetaFunction(const IntegrandThetaFunction& bluePrint); 00039 ~IntegrandThetaFunction(); 00040 00041 IntegrandThetaFunction& operator=(const IntegrandThetaFunction& bluePrint); 00042 00043 void SetParameterTheta0(double theta0); 00044 void SetParameterPhi0(double phi0); 00045 void SetParameterAlpha(double alpha); 00046 00047 virtual ROOT::Math::IGenFunction* Clone () const { return new IntegrandThetaFunction(*this); } 00048 00049 private: 00050 void SetParameters(double* param); 00051 00052 double DoEval(double x) const; 00053 virtual double DoEvalPar(double, const double*) const; 00054 double DoDerivative(double x) const; 00055 virtual double DoParameterDerivative(double, const double*, unsigned int) const; 00056 void DoParameterGradient(double x, double* paramGradient) const; 00057 00058 mutable double theta0_; // polar angle of cone axis 00059 mutable double phi0_; // azimuth angle of cone axis 00060 mutable double alpha_; // opening angle of cone (measured from cone axis) 00061 00062 mutable IntegralOverPhiFunction* fPhi_; 00063 00064 static const unsigned int debugLevel_ = 0; 00065 }; 00066 00067 #endif