ROOT logo
/*****************************************************************************
 * Project: RooFit                                                           *
 * author: Max Baak (mbaak@cern.ch)                                          *
 *****************************************************************************/

#ifndef ROO1DMOMENTMORPHFUNC
#define ROO1DMOMENTMORPHFUNC

#include "RooAbsReal.h"
#include "RooRealProxy.h"
#include "RooCategoryProxy.h"
#include "RooAbsReal.h"
#include "RooAbsCategory.h"
#include "RooSetProxy.h"
#include "RooArgList.h"
#include "TMatrixD.h"
#include "TVectorD.h"

#include <vector>
#include <string>
class RooChangeTracker ;

class Roo1DMomentMorphFunction : public RooAbsReal {
public:

  enum Setting { Linear, NonLinear, NonLinearPosFractions, NonLinearLinFractions } ;

  Roo1DMomentMorphFunction() ;

  Roo1DMomentMorphFunction(const char *name, const char *title, RooAbsReal& _m, const RooArgList& varList,
			   const TVectorD& mrefpoints, const Setting& setting = Linear );
  Roo1DMomentMorphFunction(const Roo1DMomentMorphFunction& other, const char* name=0) ;

  virtual TObject* clone(const char* newname) const { return new Roo1DMomentMorphFunction(*this,newname); }
  virtual ~Roo1DMomentMorphFunction();

  void     setMode(const Setting& setting) { _setting = setting; }

protected:

  Double_t evaluate() const ;

  void calculateFractions() const;

  void     initialize();

  inline   Int_t ij(const Int_t& i, const Int_t& j) const { return (i*_varList.getSize()+j); }
  int      idxmin(const double& m) const;
  int      idxmax(const double& m) const;

  RooRealProxy m ;
  RooSetProxy  _varList ;
  mutable TVectorD* _mref;
  mutable TVectorD* _frac; 

  TIterator* _varItr ;   //! do not persist
  mutable TMatrixD* _M; 

  Setting _setting;

  ClassDef(Roo1DMomentMorphFunction,1) // Your description goes here...
};
 
#endif


 Roo1DMomentMorphFunction.h:1
 Roo1DMomentMorphFunction.h:2
 Roo1DMomentMorphFunction.h:3
 Roo1DMomentMorphFunction.h:4
 Roo1DMomentMorphFunction.h:5
 Roo1DMomentMorphFunction.h:6
 Roo1DMomentMorphFunction.h:7
 Roo1DMomentMorphFunction.h:8
 Roo1DMomentMorphFunction.h:9
 Roo1DMomentMorphFunction.h:10
 Roo1DMomentMorphFunction.h:11
 Roo1DMomentMorphFunction.h:12
 Roo1DMomentMorphFunction.h:13
 Roo1DMomentMorphFunction.h:14
 Roo1DMomentMorphFunction.h:15
 Roo1DMomentMorphFunction.h:16
 Roo1DMomentMorphFunction.h:17
 Roo1DMomentMorphFunction.h:18
 Roo1DMomentMorphFunction.h:19
 Roo1DMomentMorphFunction.h:20
 Roo1DMomentMorphFunction.h:21
 Roo1DMomentMorphFunction.h:22
 Roo1DMomentMorphFunction.h:23
 Roo1DMomentMorphFunction.h:24
 Roo1DMomentMorphFunction.h:25
 Roo1DMomentMorphFunction.h:26
 Roo1DMomentMorphFunction.h:27
 Roo1DMomentMorphFunction.h:28
 Roo1DMomentMorphFunction.h:29
 Roo1DMomentMorphFunction.h:30
 Roo1DMomentMorphFunction.h:31
 Roo1DMomentMorphFunction.h:32
 Roo1DMomentMorphFunction.h:33
 Roo1DMomentMorphFunction.h:34
 Roo1DMomentMorphFunction.h:35
 Roo1DMomentMorphFunction.h:36
 Roo1DMomentMorphFunction.h:37
 Roo1DMomentMorphFunction.h:38
 Roo1DMomentMorphFunction.h:39
 Roo1DMomentMorphFunction.h:40
 Roo1DMomentMorphFunction.h:41
 Roo1DMomentMorphFunction.h:42
 Roo1DMomentMorphFunction.h:43
 Roo1DMomentMorphFunction.h:44
 Roo1DMomentMorphFunction.h:45
 Roo1DMomentMorphFunction.h:46
 Roo1DMomentMorphFunction.h:47
 Roo1DMomentMorphFunction.h:48
 Roo1DMomentMorphFunction.h:49
 Roo1DMomentMorphFunction.h:50
 Roo1DMomentMorphFunction.h:51
 Roo1DMomentMorphFunction.h:52
 Roo1DMomentMorphFunction.h:53
 Roo1DMomentMorphFunction.h:54
 Roo1DMomentMorphFunction.h:55
 Roo1DMomentMorphFunction.h:56
 Roo1DMomentMorphFunction.h:57
 Roo1DMomentMorphFunction.h:58
 Roo1DMomentMorphFunction.h:59
 Roo1DMomentMorphFunction.h:60
 Roo1DMomentMorphFunction.h:61
 Roo1DMomentMorphFunction.h:62
 Roo1DMomentMorphFunction.h:63
 Roo1DMomentMorphFunction.h:64
 Roo1DMomentMorphFunction.h:65
 Roo1DMomentMorphFunction.h:66