ROOT logo
#ifndef ALISPLINEFIT_H
#define ALISPLINEFIT_H
/* Copyright(c) 2006-07, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

#include "TGraph.h"
#include "TGraphSmooth.h"
#include "TRandom.h"
#include "TSpline.h"
#include "TLinearFitter.h"
#include "TDecompSVD.h"
#include "TDecompSparse.h"
#include "TMatrixDSparse.h"
#include "TF1.h"
#include "TH1F.h"
#include "TObject.h"
#include "TClonesArray.h"
#include "TMath.h"

#include "TTreeStream.h"

class AliSplineFit : public TObject {
 public:
  AliSplineFit();
  AliSplineFit(const AliSplineFit&);
  ~AliSplineFit();
  AliSplineFit& operator=(const AliSplineFit&);
  Double_t   Eval(Double_t x, Int_t deriv=0) const;
  void       InitKnots(TGraph * graph, Int_t min, Int_t iter, Double_t maxDelta);
  void       MakeKnots0(TGraph * graph, Double_t maxdelta, Int_t minpoints);
  void       SplineFit(Int_t nder);
  void       CopyGraph();
  void       MakeSmooth(TGraph * graph, Float_t ratio, Option_t * type);
  void       Update(TSpline3 *spline, Int_t nknots);
  void       Cleanup();
  Int_t      GetKnots() const {return fN;}
  Double_t*  GetX() const {return fX;}
  Double_t*  GetY0() const {return fY0;}
  Double_t*  GetY1() const {return fY1;}
  //
  // Test functions
  //
  TGraph * MakeGraph(Double_t xmin, Double_t xmax, Int_t npoints, Int_t deriv=0) const ;
  TGraph * MakeDiff(TGraph * graph) const ;
  TH1F   * MakeDiffHisto(TGraph * graph) const;
  //
  static void Test(Int_t npoints=2000, Int_t ntracks=100, Float_t snoise=0.05);
  //
  static TGraph * GenerGraph(Int_t npoints, Double_t fraction, Double_t s1, Double_t s2, Double_t s3, Int_t der=0);
  static TGraph * GenerNoise(TGraph * graph0, Double_t s0);

  void SetGraph (TGraph* graph) { fGraph=graph; }
  void SetMinPoints (Int_t minPoints) { fMinPoints=minPoints;}
  Int_t GetMinPoints() const { return fMinPoints; }

 protected:

  //
  // working parameters for spline fit
  //
  Int_t    OptimizeKnots(Int_t nIter);
  Float_t  CheckKnot(Int_t iKnot);
  Bool_t   RefitKnot(Int_t iKnot);
  //
  Bool_t        fBDump;   //  dump debug information flag
  TGraph       *fGraph;   //! initial graph
  Int_t         fNmin;    //  number of points per one knot in iteration 0
  Int_t         fMinPoints; // minimum number of points to create AliSplineFit
  Double_t      fSigma;   //  locally estimated sigma
  Double_t      fMaxDelta;//  maximal deviation of the spline fit
  Int_t         fN0;      //  number of knots in iteration 0
  TClonesArray *fParams;  //  object array of parameters in knots
  TClonesArray *fCovars;  //  object array of covariance in knots
  Int_t        *fIndex;   //[fN0] index of point corresponding to knot
  static TLinearFitter* fitterStatic(); // static fitter to save processing time
  //
  //
  //
  Int_t    fN;            //  number of knots after compression
  Double_t fChi2;         //  chi2 per degree of freedom
  Double_t *fX;           //[fN] - xknot value
  Double_t *fY0;          //[fN] - y value at X
  Double_t *fY1;          //[fN] - y derivative value at X
  Double_t *fChi2I;       //[fN] - chi2 on interval
  ClassDef(AliSplineFit, 2);
};
#endif
 AliSplineFit.h:1
 AliSplineFit.h:2
 AliSplineFit.h:3
 AliSplineFit.h:4
 AliSplineFit.h:5
 AliSplineFit.h:6
 AliSplineFit.h:7
 AliSplineFit.h:8
 AliSplineFit.h:9
 AliSplineFit.h:10
 AliSplineFit.h:11
 AliSplineFit.h:12
 AliSplineFit.h:13
 AliSplineFit.h:14
 AliSplineFit.h:15
 AliSplineFit.h:16
 AliSplineFit.h:17
 AliSplineFit.h:18
 AliSplineFit.h:19
 AliSplineFit.h:20
 AliSplineFit.h:21
 AliSplineFit.h:22
 AliSplineFit.h:23
 AliSplineFit.h:24
 AliSplineFit.h:25
 AliSplineFit.h:26
 AliSplineFit.h:27
 AliSplineFit.h:28
 AliSplineFit.h:29
 AliSplineFit.h:30
 AliSplineFit.h:31
 AliSplineFit.h:32
 AliSplineFit.h:33
 AliSplineFit.h:34
 AliSplineFit.h:35
 AliSplineFit.h:36
 AliSplineFit.h:37
 AliSplineFit.h:38
 AliSplineFit.h:39
 AliSplineFit.h:40
 AliSplineFit.h:41
 AliSplineFit.h:42
 AliSplineFit.h:43
 AliSplineFit.h:44
 AliSplineFit.h:45
 AliSplineFit.h:46
 AliSplineFit.h:47
 AliSplineFit.h:48
 AliSplineFit.h:49
 AliSplineFit.h:50
 AliSplineFit.h:51
 AliSplineFit.h:52
 AliSplineFit.h:53
 AliSplineFit.h:54
 AliSplineFit.h:55
 AliSplineFit.h:56
 AliSplineFit.h:57
 AliSplineFit.h:58
 AliSplineFit.h:59
 AliSplineFit.h:60
 AliSplineFit.h:61
 AliSplineFit.h:62
 AliSplineFit.h:63
 AliSplineFit.h:64
 AliSplineFit.h:65
 AliSplineFit.h:66
 AliSplineFit.h:67
 AliSplineFit.h:68
 AliSplineFit.h:69
 AliSplineFit.h:70
 AliSplineFit.h:71
 AliSplineFit.h:72
 AliSplineFit.h:73
 AliSplineFit.h:74
 AliSplineFit.h:75
 AliSplineFit.h:76
 AliSplineFit.h:77
 AliSplineFit.h:78
 AliSplineFit.h:79
 AliSplineFit.h:80
 AliSplineFit.h:81
 AliSplineFit.h:82
 AliSplineFit.h:83
 AliSplineFit.h:84
 AliSplineFit.h:85
 AliSplineFit.h:86
 AliSplineFit.h:87