ROOT logo
//_________________________________________________________________________
//  Procedure of fast altro fitting     
//                  
//*-- Author:  Aleksei Pavlinov; IHEP, Protvino, Russia & WSU, Detroit, USA

#ifndef ALICALOFASTALTROFITV0_H
#define ALICALOFASTALTROFITV0_H
/* Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice     */
/* $Id$ */

/* History of svn commits
 * $Log$
 */

#include <TNamed.h>
// --- ROOT system ---
class TCanvas;
class TVirtualPad;
class TF1;
class TH1F;

class AliCaloFastAltroFitv0 : public TNamed {

public:

  AliCaloFastAltroFitv0();
  AliCaloFastAltroFitv0(const char* name, const char* title,
  const Double_t sig=1.3, const Double_t tau=2.35, const Double_t n=2.);
  virtual ~AliCaloFastAltroFitv0(); 

  virtual void FastFit(Int_t* t, Int_t* y, Int_t nPoints, Double_t sig, Double_t tau, 
  Double_t n, Double_t ped, Double_t tMax);

  void FastFit(TH1F* h, Double_t sig, Double_t tau, 
  Double_t n, Double_t ped, Double_t tMax);

  void Reset();
  void SetSig(const Double_t sig) {fSig = sig;}
  void SetTau(const Double_t tau) {fTau = tau;}
  void SetN(const Double_t n)     {fN = n;}
  void SetParameters(const Double_t sig, const Double_t tau, const Double_t n) 
  {fSig = sig; fTau = tau; fN = n;}

  Double_t GetSig()    const {return fSig;}
  Double_t GetTau()    const {return fTau;}
  Double_t GetN()      const {return fN;}
  Double_t GetPed()    const {return fPed;}

  Double_t GetEnergy() const {return fAmp;}
  Double_t GetAmp()    const {return GetEnergy();}
  Double_t GetAmpErr() const {return fAmpErr;}
  Double_t GetTime()   const {return fT0;}
  Double_t GetT0()     const {return GetTime();}
  Double_t GetT0Err()  const {return fT0Err;}
  Double_t GetChi2()   const {return fChi2;}
  Int_t    GetNDF()    const {return fNDF;}
  Int_t    GetNfit()   const {return fNfit;}
  Int_t    GetNoFit()  const {return fNoFit;}

  void GetFitResult(Double_t &amp, Double_t &eamp, Double_t &t0, Double_t &et0, 
                    Double_t &chi2,Int_t &ndf) const;
  void     GetFittedPoints(Int_t &nfit, Double_t* ar[2]) const;

  // Drawing for QA
  TCanvas* DrawFastFunction(); // *MENU*
  static Double_t StdResponseFunction(const Double_t *x, const  Double_t *par); 

  static void CutRightPart(Int_t *t,Int_t *y,Int_t nPoints, Double_t tMax, Int_t &ii); 
  static void DeductPedestal(Int_t* t, Int_t* y, Int_t nPointsIn, Double_t ped, Double_t tau, 
  Double_t* tn, Double_t* yn, Int_t &nPointsOut);

  static void FastFit(const Double_t* t, const Double_t* y, const Int_t nPoints, 
                      const Double_t sig, const Double_t tau,
                      Double_t &amp, Double_t &eamp, Double_t &t0, Double_t &et0, Double_t &chi2);
  static Bool_t QuadraticRoots(const Double_t a, const Double_t b, const Double_t c, 
                               Double_t &x1, Double_t &x2);
  static void Amplitude(const Double_t* t, const Double_t* y, const Int_t nPoints, 
                        const Double_t sig, const Double_t tau, 
                        Double_t t0, Double_t &amp, Double_t &chi2);
  static void CalculateParsErrors(const Double_t* t, const Double_t* y, const Int_t nPoints, 
                                 const Double_t sig, const Double_t tau,
				 Double_t &amp, Double_t &t0, Double_t &eamp, Double_t &et0);
protected:
  Double_t fSig; // error in amplitude - used in chi2 calculation
  Double_t fTau; // first  fixed parameter od fitting function (should be - filter time response
  Double_t fN;   // second fixed parameter od fitting function (should be positive)
  Double_t fPed; // pedestal

  Double_t fAmp;    // amplitude
  Double_t fAmpErr; // amplitude error
  Double_t fT0;     // time
  Double_t fT0Err;  // time error
  Double_t fChi2;   // chi square
  Int_t    fNDF;    // number degree of freedom
  Int_t    fNoFit;  // no solution for square equation

  // Working variable
  Int_t     fNfit;   //! number points for fit
  Double_t* fTfit;   //! points for fit after selection - time bins
  Double_t* fAmpfit; //!                                - amplitudes
  // 
  TF1*      fStdFun; //! function for drawing

private:
  AliCaloFastAltroFitv0(const AliCaloFastAltroFitv0 &obj);
  AliCaloFastAltroFitv0& operator= (const AliCaloFastAltroFitv0 &obj);

  ClassDef(AliCaloFastAltroFitv0,1) // Class for fast altro fitting
};

#endif // ALICALOFASTALTROFITV0_H
 AliCaloFastAltroFitv0.h:1
 AliCaloFastAltroFitv0.h:2
 AliCaloFastAltroFitv0.h:3
 AliCaloFastAltroFitv0.h:4
 AliCaloFastAltroFitv0.h:5
 AliCaloFastAltroFitv0.h:6
 AliCaloFastAltroFitv0.h:7
 AliCaloFastAltroFitv0.h:8
 AliCaloFastAltroFitv0.h:9
 AliCaloFastAltroFitv0.h:10
 AliCaloFastAltroFitv0.h:11
 AliCaloFastAltroFitv0.h:12
 AliCaloFastAltroFitv0.h:13
 AliCaloFastAltroFitv0.h:14
 AliCaloFastAltroFitv0.h:15
 AliCaloFastAltroFitv0.h:16
 AliCaloFastAltroFitv0.h:17
 AliCaloFastAltroFitv0.h:18
 AliCaloFastAltroFitv0.h:19
 AliCaloFastAltroFitv0.h:20
 AliCaloFastAltroFitv0.h:21
 AliCaloFastAltroFitv0.h:22
 AliCaloFastAltroFitv0.h:23
 AliCaloFastAltroFitv0.h:24
 AliCaloFastAltroFitv0.h:25
 AliCaloFastAltroFitv0.h:26
 AliCaloFastAltroFitv0.h:27
 AliCaloFastAltroFitv0.h:28
 AliCaloFastAltroFitv0.h:29
 AliCaloFastAltroFitv0.h:30
 AliCaloFastAltroFitv0.h:31
 AliCaloFastAltroFitv0.h:32
 AliCaloFastAltroFitv0.h:33
 AliCaloFastAltroFitv0.h:34
 AliCaloFastAltroFitv0.h:35
 AliCaloFastAltroFitv0.h:36
 AliCaloFastAltroFitv0.h:37
 AliCaloFastAltroFitv0.h:38
 AliCaloFastAltroFitv0.h:39
 AliCaloFastAltroFitv0.h:40
 AliCaloFastAltroFitv0.h:41
 AliCaloFastAltroFitv0.h:42
 AliCaloFastAltroFitv0.h:43
 AliCaloFastAltroFitv0.h:44
 AliCaloFastAltroFitv0.h:45
 AliCaloFastAltroFitv0.h:46
 AliCaloFastAltroFitv0.h:47
 AliCaloFastAltroFitv0.h:48
 AliCaloFastAltroFitv0.h:49
 AliCaloFastAltroFitv0.h:50
 AliCaloFastAltroFitv0.h:51
 AliCaloFastAltroFitv0.h:52
 AliCaloFastAltroFitv0.h:53
 AliCaloFastAltroFitv0.h:54
 AliCaloFastAltroFitv0.h:55
 AliCaloFastAltroFitv0.h:56
 AliCaloFastAltroFitv0.h:57
 AliCaloFastAltroFitv0.h:58
 AliCaloFastAltroFitv0.h:59
 AliCaloFastAltroFitv0.h:60
 AliCaloFastAltroFitv0.h:61
 AliCaloFastAltroFitv0.h:62
 AliCaloFastAltroFitv0.h:63
 AliCaloFastAltroFitv0.h:64
 AliCaloFastAltroFitv0.h:65
 AliCaloFastAltroFitv0.h:66
 AliCaloFastAltroFitv0.h:67
 AliCaloFastAltroFitv0.h:68
 AliCaloFastAltroFitv0.h:69
 AliCaloFastAltroFitv0.h:70
 AliCaloFastAltroFitv0.h:71
 AliCaloFastAltroFitv0.h:72
 AliCaloFastAltroFitv0.h:73
 AliCaloFastAltroFitv0.h:74
 AliCaloFastAltroFitv0.h:75
 AliCaloFastAltroFitv0.h:76
 AliCaloFastAltroFitv0.h:77
 AliCaloFastAltroFitv0.h:78
 AliCaloFastAltroFitv0.h:79
 AliCaloFastAltroFitv0.h:80
 AliCaloFastAltroFitv0.h:81
 AliCaloFastAltroFitv0.h:82
 AliCaloFastAltroFitv0.h:83
 AliCaloFastAltroFitv0.h:84
 AliCaloFastAltroFitv0.h:85
 AliCaloFastAltroFitv0.h:86
 AliCaloFastAltroFitv0.h:87
 AliCaloFastAltroFitv0.h:88
 AliCaloFastAltroFitv0.h:89
 AliCaloFastAltroFitv0.h:90
 AliCaloFastAltroFitv0.h:91
 AliCaloFastAltroFitv0.h:92
 AliCaloFastAltroFitv0.h:93
 AliCaloFastAltroFitv0.h:94
 AliCaloFastAltroFitv0.h:95
 AliCaloFastAltroFitv0.h:96
 AliCaloFastAltroFitv0.h:97
 AliCaloFastAltroFitv0.h:98
 AliCaloFastAltroFitv0.h:99
 AliCaloFastAltroFitv0.h:100
 AliCaloFastAltroFitv0.h:101
 AliCaloFastAltroFitv0.h:102
 AliCaloFastAltroFitv0.h:103
 AliCaloFastAltroFitv0.h:104
 AliCaloFastAltroFitv0.h:105
 AliCaloFastAltroFitv0.h:106
 AliCaloFastAltroFitv0.h:107
 AliCaloFastAltroFitv0.h:108
 AliCaloFastAltroFitv0.h:109
 AliCaloFastAltroFitv0.h:110
 AliCaloFastAltroFitv0.h:111
 AliCaloFastAltroFitv0.h:112