ROOT logo

#ifndef ALIPERFANALYZEINVPT_H
#define ALIPERFANALYZEINVPT_H

//----------------------------------------------------------------------------------------------------
// Class to analyse output of AliPerformancePtCalib.cxx and AliPerformancePtCalibMC.cxx:
// Projection of charge/pt vs theta and vs phi resp. histoprams will be fitted with either
// polynomial or gaussian fit function to extract minimum position of charge/pt.
// Fit options and theta, phi bins can be set by user.
// Attention: use the Set* functions of AliPerformancePtCalib.h and AliPerformancePtCalibMC.h
// when running AliPerformancePtCalib*::Analyse().
//
// Author: S. Schuchmann 11/13/2009 
//----------------------------------------------------------------------------------------------------

class TNamed;
class TString;
class TList;
class TF1;
class TH1F; 
class TH2F;
class TH1D;
class TGraphErrors;
//class TMath;
class TCanvas;
class TObjArray;


class AliPerfAnalyzeInvPt : public TNamed {

public:
   AliPerfAnalyzeInvPt(const Char_t* name="AliPerfAnalyzeInvPt", const Char_t* title="AliPerfAnalyzeInvPt");
   virtual ~AliPerfAnalyzeInvPt(){;}
   void InitGraphs(Double_t *binsXTheta,Double_t *fitParamTheta,Double_t *errFitParamTheta,Double_t *binsXPhi,Double_t *fitParamPhi,Double_t *errFitParamPhi);
   void InitFitFcn();
   void StartAnalysis(const TH2F *histThetaInvPt, const TH2F *histPhiInvPt, TObjArray* aFolderObj);
   void SetProjBinsPhi(const Double_t *pBins,const Int_t sizep);
   void SetProjBinsTheta(const Double_t *tBins, const Int_t sizet);
   void SetMakeFitOption(const Bool_t setGausFit, const Double_t exclusionR,const Double_t fitR );
   void SetDoRebin(const Int_t rebin){if(rebin) {fDoRebin = kTRUE; fRebin = rebin;}}
  
protected:
   Double_t fThetaBins[100];// array of theta bins for projection and fit
   Double_t fPhiBins[100];// array of phi bins for projection and fit
  
   Int_t fNThetaBins;// number of theta bins for projection and fit
   Int_t fNPhiBins; // number of phi bins for projection and fit
   Double_t fRange;// fit range of 1/pt spectrum
   Double_t fExclRange ;// range of exlusion of points around 0 when fitting 1/pt
   Bool_t fFitGaus;// set this flag for usage of gaussian fit function instead of polynomial (default)
   Bool_t  fDoRebin;
   Int_t  fRebin;
   // projection histos
   TH1D *fHistFitTheta[100];// projection histos for analysis in theta bins
   TH1D *fHistFitPhi[100];// projection histos for analysis in phi bins

   //histos for copy of input histos
   TH2F *fHistH2InvPtTheta; // for copy of input histos 
   TH2F *fHistH2InvPtPhi; // for copy of input histos
   
   //graphs for displaying the fit parameters (minimum position of 1/pt and error)
   TGraphErrors *fGrMinPosTheta;
   TGraphErrors *fGrMinPosPhi;

 

private:
   //fit functions
   TF1 *fFitMinPos;//fit function for first fit with polynomial
   TF1 *fFitMinPosRejP;//fit function for second fit with polynomial to improve result
   TF1 *fFitInvGauss;//fit functionfor first fit with gaussian
   TF1 *fFitInvGaussRejP;//fit function for second fit with gaussian to improve result

   // infput for fit functions
   static Double_t Polynomial(Double_t *x, const Double_t *par);
   static Double_t PolynomialRejP(Double_t *x, const Double_t *par);
   static Double_t InvGauss(Double_t *x, const Double_t *par);
   static Double_t InvGaussRejP(Double_t *x, const Double_t *par);

   //functions for fitting procedure
   void MakeFit(TH1D *dmproy, TF1 * fitpb, Double_t &mean, Double_t &ErrMean,  Double_t &excl,Double_t &range);
   void MakeFitBetter(TH1D *dmproy, TF1 * fitpb2, Double_t &mean, Double_t &ErrMean, Double_t &f, Double_t &excl, Double_t &range);
   void MakeFitInvGauss(TH1D *dmproy, TF1 * fitpb2, Double_t &mean, Double_t &ErrMean,Double_t &excl , Double_t &range);
   void MakeFitInvGaussBetter(TH1D *dmproy, TF1 * fitpb2, Double_t &mean, Double_t &ErrMean, Double_t &f,Double_t &excl,  Double_t &range);
 

  

   AliPerfAnalyzeInvPt(const AliPerfAnalyzeInvPt&);            // not implemented 
   AliPerfAnalyzeInvPt& operator=(const AliPerfAnalyzeInvPt&); // not implemented 

   ClassDef(AliPerfAnalyzeInvPt, 1); 
};

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