ROOT logo
#ifndef ALICENTRALITYGLAUBERFIT_H
#define ALICENTRALITYGLAUBERFIT_H

/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */
/*   Origin: Alberica Toia, CERN, Alberica.Toia@cern.ch                   */

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
//  class to determine centrality percentiles from 1D distributions          // 
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include <vector>
#include <TObject.h>
#include <TString.h>

class TNtuple;
class TFile;

class AliCentralityGlauberFit : public TObject {

 public:
  
  AliCentralityGlauberFit(const char * filename);
  virtual ~AliCentralityGlauberFit() {}

  void     AddHisto(TString name)      { fHistnames.push_back(name);  }
  TH1F    *GetGlauberHist()            { return fGlauberHist;         } 
  TH1F    *GetTempHist()               { return fTempHist;            } 
  void     MakeFits();
  void     MakeFitsMinuitNBD(Double_t alpha=-1, Double_t mu=-1, Double_t k=-1);
  void     SetAncestorMode(Int_t f)  { fAncestor=f; }
  void     SetFastFitMode(Int_t f)  { fFastFit=f; }
  void     SetGlauberParam(Int_t Nmu, Double_t mulow, Double_t muhigh, Int_t Nk, Double_t klow, 
                          Double_t khigh, Int_t Nalpha, Double_t alphalow, Double_t alphahigh); 
  void     SetInputFile(TString filename)         { fInrootfilename = filename;   }
  void     SetInputNtuple(TString ntuplename)     { fInntuplename   = ntuplename; }
  void     SetAncFile(TString name)               { fAncfilename    = name;       }
  void     SetNevents(Int_t f) { fNevents=f; }
  void     SetNtrials(Int_t f) { fNtrials=f; }
  void     SetOutputFile(TString filename)        { fOutrootfilename = filename;  }
  void     SetOutputNtuple(TString ntuplename)    { fOutntuplename   = ntuplename;}
  void     SetRangeToFit(Double_t multmin, Double_t multmax);
  void     SetRangeToScale(Double_t scalemin);
  void     SetRebin(Int_t f)  { fRebinFactor=f; }
  void     UseAverage(Bool_t f)  { fUseAverage=f; }
  void     UseChi2(Bool_t f)  { fUseChi2=f; }

 private:
  Int_t   fNmu;           // mu points
  Double_t fMulow;        // mu low 
  Double_t fMuhigh;       // mu high
  Int_t   fNk;            // k points
  Double_t fKlow;         // k low
  Double_t fKhigh;        // k high
  Int_t   fNalpha;        // alpha points
  Double_t fAlphalow;     // alpha low
  Double_t fAlphahigh;    // alpha high
  Int_t   fRebinFactor;   // rebin factor
  Double_t fScalemin;     // mult min where to scale
  Double_t fMultmin;      // mult min
  Double_t fMultmax;      // mult max
  TNtuple *fGlauntuple;   // glauber ntuple
  Float_t fNpart;         // number participants
  Float_t fNcoll;         // number collisions
  Float_t fB;             // impact parameter
  Float_t fTaa;           // taa
  Float_t fEffi;          // efficiency
  TH1F   *fhEffi;         // efficiency histogram
  TH1F  *fTempHist;       // Temporary pointer to data histo, to be used in minimization 
  TH1F  *fGlauberHist;    // Glauber histogram
  Int_t fFastFit;         // If 1 or 2 use cruder approximation to compute curve faster 1:NBD, 2:Gauss
  Int_t fAncestor;        // If 1 use Npart**alpha, if 2 use alpha*Npart + (1-alpha)*Ncoll
  TF1 * fNBD;             // NBD function
  Bool_t fUseChi2;        // If true, use chi2
  Bool_t fUseAverage;     // If true, use average
  TH1F *fhAncestor;       // histo for the ancestor distribution
  Int_t fNevents;         // Number of events to use in the glauber ntuple
  Int_t fNtrials;         // Number of trials to use for the average

  TString fInrootfilename;          // input root file
  TString fInntuplename;            // input Gauber ntuple
  TString fOutrootfilename;         // output root file
  TString fOutntuplename;           // output Glauber ntuple
  TString fAncfilename;             // ancestor file name
  std::vector<TString> fHistnames;  // histogram names

  Double_t  CalculateChi2(TH1F *hDATA, TH1F *thistGlau);
  TH1F     *GetTriggerEfficiencyFunction(TH1F *hist1, TH1F *hist2);
  Double_t  GetTriggerEfficiencyIntegral(TH1F *hist1, TH1F *hist2); 
  TH1F     *GlauberHisto(Double_t mu, Double_t k, Double_t alpha, TH1F *hDATA, Bool_t save=kFALSE); 
  TH1F     *MakeAncestor(Double_t alpha);
  Double_t  NBD(Int_t n, Double_t mu, Double_t k) const;
  TH1F     *NBDhist(Double_t mu, Double_t k);
  TH1F     *NormalizeHisto(TString hdistributionName);
  void      SaveHisto(TH1F *hist1,TH1F *hist2,TH1F *heffi, TFile *outrootfile);

  static void     MinuitFcnNBD(Int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag);
  static Double_t NBDFunc(const Double_t *p, const Double_t * x);

  AliCentralityGlauberFit(const AliCentralityGlauberFit&);
  AliCentralityGlauberFit &operator=(const AliCentralityGlauberFit&);

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