library: libHist #include "TF3.h"

# TF3

class description - source file - inheritance tree (.pdf)

## class TF3 : public TF2

| Inheritance Chart:
`TObject`
| <- | `TNamed`
| <- | `TFormula`
`TAttLine`
`TAttFill`
`TAttMarker`
| <- | `TF1`
| <- | `TF2`
| <- | `TF3` |

        public:

                           TF3()
                           TF3(const char* name, const char* formula, Double_t xmin = 0, Double_t xmax = 1, Double_t ymin = 0, Double_t ymax = 1, Double_t zmin = 0, Double_t zmax = 1)
                           TF3(const char* name, void* fcn, 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)
                           TF3(const char* name, Double_t (*)(Double_t*, Double_t*) fcn, 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)
                           TF3(const TF3& f3)
                   virtual ~TF3()
          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)
            static TClass* Class()
              virtual void Copy(TObject& f3) const
          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)
          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)
          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)
             virtual Int_t DistancetoPrimitive(Int_t px, Int_t py)
              virtual void Draw(Option_t* option = "")
              virtual void DrawDerivative(Option_t* = "al")
              virtual void DrawIntegral(Option_t* = "al")
              virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
                     Int_t GetNpz() const
              virtual void GetRandom3(Double_t& xrandom, Double_t& yrandom, Double_t& zrandom)
              virtual void GetRange(Double_t& xmin, Double_t& xmax) const
              virtual void GetRange(Double_t& xmin, Double_t& ymin, Double_t& xmax, Double_t& ymax) const
              virtual void GetRange(Double_t& xmin, Double_t& ymin, Double_t& zmin, Double_t& xmax, Double_t& ymax, Double_t& zmax) const
          virtual Double_t GetZmax() const
          virtual Double_t GetZmin() const
          virtual Double_t Integral(Double_t a, Double_t b, const Double_t* params = 0, Double_t epsilon = 0.000001)
          virtual Double_t Integral(Double_t ax, Double_t bx, Double_t ay, Double_t by, Double_t epsilon = 0.000001)
          virtual Double_t Integral(Double_t ax, Double_t bx, Double_t ay, Double_t by, Double_t az, Double_t bz, Double_t epsilon = 0.000001)
           virtual TClass* IsA() const
            virtual Bool_t IsInside(const Double_t* x) const
          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)
          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)
          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)
          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)
                      TF3& operator=(const TF3& rhs)
              virtual void Paint(Option_t* option = "")
              virtual void SavePrimitive(ofstream& out, Option_t* option)
              virtual void SetClippingBoxOff()
              virtual void SetClippingBoxOn(Double_t xclip = 0, Double_t yclip = 0, Double_t zclip = 0)
              virtual void SetNpz(Int_t npz = 30)
              virtual void SetRange(Double_t xmin, Double_t xmax)
              virtual void SetRange(Double_t xmin, Double_t ymin, Double_t xmax, Double_t ymax)
              virtual void SetRange(Double_t xmin, Double_t ymin, Double_t zmin, Double_t xmax, Double_t ymax, Double_t zmax)
              virtual void ShowMembers(TMemberInspector& insp, char* parent)
              virtual void Streamer(TBuffer& b)
                      void StreamerNVirtual(TBuffer& b)
          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)
          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)
          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)

### Data Members

        protected:

          Double_t fZmin  Lower bound for the range in z
          Double_t fZmax  Upper bound for the range in z
             Int_t fNpz   Number of points along z used for the graphical representation

## Class Description

     a 3-Dim function with parameters

TF3(): TF2()

    *-*-*-*-*-*-*-*-*-*-*F3 default constructor*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
    *-*                  ======================

TF3(const char *name,const char *formula, Double_t xmin, Double_t xmax, Double_t ymin, Double_t ymax, Double_t zmin, Double_t zmax) :TF2(name,formula,xmin,xmax,ymax,ymin)

    *-*-*-*-*-*-*F3 constructor using a formula definition*-*-*-*-*-*-*-*-*-*-*
    *-*          =========================================
    *-*
    *-*  See TFormula constructor for explanation of the formula syntax.
    *-*
    *-*
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

TF3(const char *name,void *fcn, Double_t xmin, Double_t xmax, Double_t ymin, Double_t ymax, Double_t zmin, Double_t zmax, Int_t npar) :TF2(name,fcn,xmin,xmax,ymin,ymax,npar)

    *-*-*-*-*-*-*F3 constructor using a pointer to an interpreted function*-*-*
    *-*          =========================================================
    *-*
    *-*   npar is the number of free parameters used by the function
    *-*
    *-*  Creates a function of type C between xmin and xmax and ymin,ymax.
    *-*  The function is defined with npar parameters
    *-*  fcn must be a function of type:
    *-*     Double_t fcn(Double_t *x, Double_t *params)
    *-*
    *-*  This constructor is called for functions of type C by CINT.
    *-*
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

TF3(const char *name,Double_t (*fcn)(Double_t *, Double_t *), Double_t xmin, Double_t xmax, Double_t ymin, Double_t ymax, Double_t zmin, Double_t zmax, Int_t npar) :TF2(name,fcn,xmin,xmax,ymin,ymax,npar)

    *-*-*-*-*-*-*F3 constructor using a pointer to real function*-*-*-*-*-*-*-*
    *-*          ===============================================
    *-*
    *-*   npar is the number of free parameters used by the function
    *-*
    *-*  For example, for a 3-dim function with 3 parameters, the user function
    *-*      looks like:
    *-*    Double_t fun1(Double_t *x, Double_t *par)
    *-*        return par[0]*x[2] + par[1]*exp(par[2]*x[0]*x[1]);
    *-*
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

~TF3()

    *-*-*-*-*-*-*-*-*-*-*F3 default destructor*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
    *-*                  =====================

TF3(const TF3 &f3) : TF2()

void Copy(TObject &obj) const

    *-*-*-*-*-*-*-*-*-*-*Copy this F3 to a new F3*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
    *-*                  ========================

Int_t DistancetoPrimitive(Int_t px, Int_t py)

    *-*-*-*-*-*-*-*-*-*-*Compute distance from point px,py to a function*-*-*-*-*
    *-*                  ===============================================
    *-*  Compute the closest distance of approach from point px,py to this function.
    *-*  The distance is computed in pixels units.
    *-*
    *-*  Algorithm:
    *-*
    *-*
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

void Draw(Option_t *option)

    *-*-*-*-*-*-*-*-*-*-*Draw this function with its current attributes*-*-*-*-*
    *-*                  ==============================================

void ExecuteEvent(Int_t event, Int_t px, Int_t py)

    *-*-*-*-*-*-*-*-*-*-*Execute action corresponding to one event*-*-*-*
    *-*                  =========================================
    *-*  This member function is called when a F3 is clicked with the locator
    *-*
    *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

void GetRandom3(Double_t &xrandom, Double_t &yrandom, Double_t &zrandom)

    *-*-*-*-*-*Return 3 random numbers following this function shape*-*-*-*-*-*
    *-*        =====================================================
    *-*
    *-*   The distribution contained in this TF3 function is integrated
    *-*   over the cell contents.
    *-*   It is normalized to 1.
    *-*   Getting the three random numbers implies:
    *-*     - Generating a random number between 0 and 1 (say r1)
    *-*     - Look in which cell in the normalized integral r1 corresponds to
    *-*     - make a linear interpolation in the returned cell
    *-*
    *-*
    *-*  IMPORTANT NOTE
    *-*  The integral of the function is computed at fNpx * fNpy * fNpz points.
    *-*  If the function has sharp peaks, you should increase the number of
    *-*  points (SetNpx, SetNpy, SetNpz) such that the peak is correctly tabulated
    *-*  at several points.

void GetRange(Double_t &xmin, Double_t &ymin, Double_t &zmin, Double_t &xmax, Double_t &ymax, Double_t &zmax) const

    *-*-*-*-*-*-*-*-*-*-*Return range of function*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
    *-*                  ========================

Double_t Integral(Double_t ax, Double_t bx, Double_t ay, Double_t by, Double_t az, Double_t bz, Double_t epsilon)

     Return Integral of a 3d function in range [ax,bx],[ay,by],[az,bz]

Bool_t IsInside(const Double_t *x) const

     Return kTRUE is the point is inside the function range

void Paint(Option_t *option)

    *-*-*-*-*-*-*-*-*Paint this 3-D function with its current attributes*-*-*-*-*
    *-*              ===================================================

void SetClippingBoxOff()

     Set the function clipping box (for drawing) "off".

void SavePrimitive(ofstream &out, Option_t *option)

     Save primitive as a C++ statement(s) on output stream out

void SetClippingBoxOn(Double_t xclip, Double_t yclip, Double_t zclip)

     Set the function clipping box (for drawing) "on" and define the clipping box.
     xclip, yclip and zclip is a point within the function range. All the
     function values having x<=xclip and y<=yclip and z>=zclip are clipped.

void SetNpz(Int_t npz)

     Set the number of points used to draw the function

     The default number of points along x is 30 for 2-d/3-d functions.
     You can increase this value to get a better resolution when drawing
     pictures with sharp peaks or to get a better result when using TF3::GetRandom2
     the minimum number of points is 4, the maximum is 10000 for 2-d/3-d functions

void SetRange(Double_t xmin, Double_t ymin, Double_t zmin, Double_t xmax, Double_t ymax, Double_t zmax)

    *-*-*-*-*-*Initialize the upper and lower bounds to draw the function*-*-*-*
    *-*        ==========================================================

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)

     Return x^nx * y^ny * z^nz moment of a 3d function in range [ax,bx],[ay,by],[az,bz]
       Author: Gene Van Buren <gene@bnl.gov>

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)

     Return x^nx * y^ny * z^nz central moment of a 3d function in range [ax,bx],[ay,by],[az,bz]
       Author: Gene Van Buren <gene@bnl.gov>

### Inline Functions

                   TF3& operator=(const TF3& rhs)
                   void DrawDerivative(Option_t* = "al")
                   void DrawIntegral(Option_t* = "al")
                  Int_t GetNpz() const
                   void GetRange(Double_t& xmin, Double_t& ymin, Double_t& xmax, Double_t& ymax) const
                   void GetRange(Double_t& xmin, Double_t& ymin, Double_t& zmin, Double_t& xmax, Double_t& ymax, Double_t& zmax) const
               Double_t GetZmin() const
               Double_t GetZmax() const
               Double_t Integral(Double_t ax, Double_t bx, Double_t ay, Double_t by, Double_t epsilon = 0.000001)
               Double_t Integral(Double_t ax, Double_t bx, Double_t ay, Double_t by, Double_t az, Double_t bz, Double_t epsilon = 0.000001)
                   void SetRange(Double_t xmin, Double_t ymin, Double_t xmax, Double_t ymax)
                   void SetRange(Double_t xmin, Double_t ymin, Double_t zmin, Double_t xmax, Double_t ymax, Double_t zmax)
               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)
               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)
               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)
               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)
               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)
               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)
               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)
               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)
               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)
                TClass* Class()
                TClass* IsA() const
                   void ShowMembers(TMemberInspector& insp, char* parent)
                   void Streamer(TBuffer& b)
                   void StreamerNVirtual(TBuffer& b)

Author: Rene Brun 27/10/95
Last update: root/hist:$Name: $:$Id: TF3.cxx,v 1.18 2005/03/10 13:46:10 brun Exp $
Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *