// Author: I. Froehlich
// Written: 14.9.2012
// Revised: 

#ifndef _PF3_H_
#define _PF3_H_

#include "TF3.h"
#include "PProjector.h"


class PF3: public TF3 {

 public:

    
    //Standard ROOT ctors
    PF3();
    PF3(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);
    //PF3(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);

    PF3(const char *name, Double_t (*fcn)(Double_t *, Double_t *), 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);
    PF3(const char *name, Double_t (*fcn)(const Double_t *, const Double_t *), 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);
    PF3(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);  
    PF3(const PF3 &f3);
  
    //Pluto ctor
    PF3(const char *name, Double_t xmin, Double_t xmax, Double_t ymin, Double_t ymax, Double_t zmin, Double_t zmax);

    virtual Double_t EvalPar(const Double_t *x, const Double_t *params);
    //TF wrapper

  
    Bool_t Add(char *command);
    Bool_t Add(TH1  *histo, const char *command = "");
    Bool_t Add(TH2  *histo, const char *command = "");
    Bool_t Add(TH3  *histo, const char *command = "");
    Bool_t Add(TGraph *graph, const char *command = "");
    Bool_t Add(TGraph2D *graph, const char *command = "");


 protected:

    PProjector *projector;
    Double_t   *vf, *vx, *vy, *vz;


    ClassDef(PF3, 0)  // Pluto TF3 extension

};

#endif
 PF3.h:1
 PF3.h:2
 PF3.h:3
 PF3.h:4
 PF3.h:5
 PF3.h:6
 PF3.h:7
 PF3.h:8
 PF3.h:9
 PF3.h:10
 PF3.h:11
 PF3.h:12
 PF3.h:13
 PF3.h:14
 PF3.h:15
 PF3.h:16
 PF3.h:17
 PF3.h:18
 PF3.h:19
 PF3.h:20
 PF3.h:21
 PF3.h:22
 PF3.h:23
 PF3.h:24
 PF3.h:25
 PF3.h:26
 PF3.h:27
 PF3.h:28
 PF3.h:29
 PF3.h:30
 PF3.h:31
 PF3.h:32
 PF3.h:33
 PF3.h:34
 PF3.h:35
 PF3.h:36
 PF3.h:37
 PF3.h:38
 PF3.h:39
 PF3.h:40
 PF3.h:41
 PF3.h:42
 PF3.h:43
 PF3.h:44
 PF3.h:45
 PF3.h:46
 PF3.h:47
 PF3.h:48
 PF3.h:49
 PF3.h:50
 PF3.h:51
 PF3.h:52
 PF3.h:53
 PF3.h:54
 PF3.h:55