28 class TF3 :
public TF2 {
37 TF3(
const char *name,
const char *formula, Double_t xmin=0, Double_t xmax=1, Double_t ymin=0,
38 Double_t ymax=1, Double_t zmin=0, Double_t zmax=1, Option_t * opt =
nullptr);
40 TF3(
const char *name, Double_t (*fcn)(Double_t *, Double_t *), Double_t xmin=0, Double_t xmax=1, Double_t ymin=0,
41 Double_t ymax=1, Double_t zmin=0, Double_t zmax=1, Int_t npar=0, Int_t ndim = 3);
42 TF3(
const char *name, Double_t (*fcn)(
const Double_t *,
const Double_t *), Double_t xmin=0, Double_t xmax=1, Double_t ymin=0,
43 Double_t ymax=1, Double_t zmin=0, Double_t zmax=1, Int_t npar=0, Int_t ndim = 3);
48 TF3(
const char *name, ROOT::Math::ParamFunctor f, Double_t xmin = 0, Double_t xmax = 1, Double_t ymin = 0, Double_t ymax = 1, Double_t zmin=0, Double_t zmax=1, Int_t npar = 0, Int_t ndim = 3);
53 template <
class PtrObj,
typename MemFn>
54 TF3(
const char *name,
const PtrObj& p, MemFn memFn, Double_t xmin, Double_t xmax, Double_t ymin, Double_t ymax, Double_t zmin, Double_t zmax, Int_t npar,
56 TF2(name,p,memFn,xmin,xmax,ymin,ymax,npar,ndim),
57 fZmin(zmin), fZmax(zmax), fNpz(30)
60 template <
class PtrObj,
typename MemFn>
61 TF3(
const char *name,
const PtrObj& p, MemFn memFn, Double_t xmin, Double_t xmax, Double_t ymin, Double_t ymax, Double_t zmin, Double_t zmax, Int_t npar,
62 const char * ,
const char * ) :
63 TF2(name,p,memFn,xmin,xmax,ymin,ymax,npar,3),
64 fZmin(zmin), fZmax(zmax), fNpz(30)
68 template <
typename Func>
69 TF3(
const char *name, Func f, Double_t xmin, Double_t xmax, Double_t ymin, Double_t ymax, Double_t zmin, Double_t zmax, Int_t npar,
71 TF2(name,f,xmin,xmax,ymin,ymax,npar,ndim),
72 fZmin(zmin), fZmax(zmax), fNpz(30)
75 template <
typename Func>
76 TF3(
const char *name, Func f, Double_t xmin, Double_t xmax, Double_t ymin, Double_t ymax, Double_t zmin, Double_t zmax, Int_t npar,
78 TF2(name,f,xmin,xmax,ymin,ymax,npar,3),
79 fZmin(zmin), fZmax(zmax), fNpz(30)
83 TF3& operator=(
const TF3 &rhs);
85 virtual void Copy(TObject &f3)
const;
86 virtual Int_t DistancetoPrimitive(Int_t px, Int_t py);
87 virtual void Draw(Option_t *option=
"");
88 virtual TObject *DrawDerivative(Option_t * =
"al") {
return 0;}
89 virtual TObject *DrawIntegral(Option_t * =
"al") {
return 0;}
90 virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py);
91 virtual Double_t GetMinimumXYZ(Double_t &x, Double_t &y, Double_t &z);
92 virtual Double_t GetMaximumXYZ(Double_t &x, Double_t &y, Double_t &z);
93 Int_t GetNpz()
const {
return fNpz;}
94 virtual void GetRandom3(Double_t &xrandom, Double_t &yrandom, Double_t &zrandom);
96 virtual void GetRange(Double_t &xmin, Double_t &xmax)
const;
97 virtual void GetRange(Double_t &xmin, Double_t &ymin, Double_t &xmax, Double_t &ymax)
const ;
98 virtual void GetRange(Double_t &xmin, Double_t &ymin, Double_t &zmin, Double_t &xmax, Double_t &ymax, Double_t &zmax)
const;
99 virtual Double_t GetSave(
const Double_t *x);
100 virtual Double_t GetZmin()
const {
return fZmin;}
101 virtual Double_t GetZmax()
const {
return fZmax;}
103 virtual Double_t Integral(Double_t ax, Double_t bx, Double_t ay, Double_t by, Double_t az, Double_t bz, Double_t epsrel=1.e-6);
104 virtual Bool_t IsInside(
const Double_t *x)
const;
105 virtual TH1 *CreateHistogram();
106 virtual void Paint(Option_t *option=
"");
107 virtual void Save(Double_t xmin, Double_t xmax, Double_t ymin, Double_t ymax, Double_t zmin, Double_t zmax);
108 virtual void SavePrimitive(std::ostream &out, Option_t *option =
"");
109 virtual void SetClippingBoxOff();
110 virtual void SetClippingBoxOn(Double_t xclip=0, Double_t yclip=0, Double_t zclip=0);
111 virtual void SetNpz(Int_t npz=30);
112 virtual void SetRange(Double_t xmin, Double_t xmax);
113 virtual void SetRange(Double_t xmin, Double_t ymin, Double_t xmax, Double_t ymax);
114 virtual void SetRange(Double_t xmin, Double_t ymin, Double_t zmin, Double_t xmax, Double_t ymax, Double_t zmax);
117 virtual Double_t Moment3(Double_t nx, Double_t ax, Double_t bx, Double_t ny, Double_t ay, Double_t by, Double_t nz, Double_t az, Double_t bz, Double_t epsilon=0.000001);
118 virtual Double_t CentralMoment3(Double_t nx, Double_t ax, Double_t bx, Double_t ny, Double_t ay, Double_t by, Double_t nz, Double_t az, Double_t bz, Double_t epsilon=0.000001);
120 virtual Double_t Mean3X(Double_t ax, Double_t bx, Double_t ay, Double_t by, Double_t az, Double_t bz, Double_t epsilon=0.000001) {
return Moment3(1,ax,bx,0,ay,by,0,az,bz,epsilon);}
121 virtual Double_t Mean3Y(Double_t ax, Double_t bx, Double_t ay, Double_t by, Double_t az, Double_t bz, Double_t epsilon=0.000001) {
return Moment3(0,ax,bx,1,ay,by,0,az,bz,epsilon);}
122 virtual Double_t Mean3Z(Double_t ax, Double_t bx, Double_t ay, Double_t by, Double_t az, Double_t bz, Double_t epsilon=0.000001) {
return Moment3(0,ax,bx,0,ay,by,1,az,bz,epsilon);}
124 virtual Double_t Variance3X(Double_t ax, Double_t bx, Double_t ay, Double_t by, Double_t az, Double_t bz, Double_t epsilon=0.000001) {
return CentralMoment3(2,ax,bx,0,ay,by,0,az,bz,epsilon);}
125 virtual Double_t Variance3Y(Double_t ax, Double_t bx, Double_t ay, Double_t by, Double_t az, Double_t bz, Double_t epsilon=0.000001) {
return CentralMoment3(0,ax,bx,2,ay,by,0,az,bz,epsilon);}
126 virtual Double_t Variance3Z(Double_t ax, Double_t bx, Double_t ay, Double_t by, Double_t az, Double_t bz, Double_t epsilon=0.000001) {
return CentralMoment3(0,ax,bx,0,ay,by,2,az,bz,epsilon);}
128 virtual Double_t Covariance3XY(Double_t ax, Double_t bx, Double_t ay, Double_t by, Double_t az, Double_t bz, Double_t epsilon=0.000001) {
return CentralMoment3(1,ax,bx,1,ay,by,0,az,bz,epsilon);}
129 virtual Double_t Covariance3XZ(Double_t ax, Double_t bx, Double_t ay, Double_t by, Double_t az, Double_t bz, Double_t epsilon=0.000001) {
return CentralMoment3(1,ax,bx,0,ay,by,1,az,bz,epsilon);}
130 virtual Double_t Covariance3YZ(Double_t ax, Double_t bx, Double_t ay, Double_t by, Double_t az, Double_t bz, Double_t epsilon=0.000001) {
return CentralMoment3(0,ax,bx,1,ay,by,1,az,bz,epsilon);}
134 virtual Double_t FindMinMax(Double_t* x,
bool findmax)
const;
139 inline void TF3::GetRange(Double_t &xmin, Double_t &xmax)
const
140 { TF2::GetRange(xmin, xmax); }
141 inline void TF3::GetRange(Double_t &xmin, Double_t &ymin, Double_t &xmax, Double_t &ymax)
const
142 { TF2::GetRange(xmin, ymin, xmax, ymax); }
143 inline void TF3::SetRange(Double_t xmin, Double_t xmax)
144 { TF2::SetRange(xmin, xmax); }
145 inline void TF3::SetRange(Double_t xmin, Double_t ymin, Double_t xmax, Double_t ymax)
146 { TF2::SetRange(xmin, ymin, xmax, ymax); }