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

/* $Id$ */

//_________________________________________________________________________
// This is a set of histogram
// utilities for the EMCAL
// to make some common
// functions easier
//                  
//*-- Authors: J.L. Klay (LLNL) & Aleksei Pavlinov (WSU)

#include <TNamed.h>

class TList;
class TString;
class TH1;
class TGraph;
class TGraphErrors;
class TF1;
class TLatex;
class TChain;
//class TLorentzVector;
class TArrayF;

//class AliESDCaloCluster;
//class AliEMCALRecPoint;
//class AliRunLoader;

class AliEMCALHistoUtilities: public TNamed {
  public:  AliEMCALHistoUtilities(const char *name="emcalUtilitiesRoutines",
  const char *tit="EMCAL utility routines");
  AliEMCALHistoUtilities(const  AliEMCALHistoUtilities &) : TNamed("", ""){
    Fatal("cpy ctor", "not implemented") ; }
  virtual ~AliEMCALHistoUtilities();

  // service routine
  static TList *MoveHistsToList(const char* name="ListOfHists", Bool_t putToBrowser=kTRUE, Bool_t setOwner=kFALSE);
  static void FillH1(TList *l=0, Int_t ind=0, Double_t x=-99999., Double_t w=1., Double_t error=0.);
  static void FillH2(TList *l=0, Int_t ind=0, Double_t x=-99999., Double_t y=-99999., Double_t w=1.);
  static void FillHProf(TList *l=0, Int_t ind=0, Double_t x=-99999., Double_t y=-99999., Double_t w=1.);
  static void FillHnSparse(TList *l=0, Int_t ind=0, Double_t* x=0, Double_t w=1.);
  static int  SaveListOfHists(TList *mylist=0, const char* name="test", Bool_t kSingleKey=kFALSE,
  const char* opt="RECREATE");
  static void AddToNameAndTitle(TNamed *h=0, const char *name=0, const char *title=0);
  static void AddToNameAndTitleToList(TList *l=0, const char *name=0, const char *title=0);
  static void ResetListOfHists(TList *l);
  static void Titles(TH1 *hid=0, const char *titx="",const char *tity="");
  static TList* CreateProjectionsX(TList *l=0, const Int_t ind=2, const Char_t* name="prox");

  static TLatex *Lat(const char *text="", Float_t x=0.0,Float_t y=0.0, Int_t align=22, Float_t tsize=0.05, short tcolor = 1); 
  static TGraph *DrawGraph(Int_t n=4, Double_t *x=0, Double_t *y=0, Int_t markerColor=4,  
  Int_t markerStyle=4, const char* opt="", const char* tit="", const char* xTit="  jet E_{t}  ",
  const char* yTit="", Int_t ifun=0, const char *optFit="W+", const char *fun="");
  static TGraphErrors *DrawGraphErrors(const Int_t n=4,Double_t *x=0,Double_t *y=0,Double_t *ex=0, 
  Double_t *ey=0, Int_t markerColor=4,Int_t markerStyle=4, const char* opt="", 
  const char* tit="", const char* xTit="  jet E_{t}  ",
  const char* yTit="", Int_t ifun=0, const char *optFit="W+", const char *fun="");
  // TChain
  static void InitChain(TChain *chain=0, const char* nameListOfFiles=0, Int_t nFileMax=0); 
  //static AliRunLoader* InitKinematics(const Int_t nev=0, const char* galiceName="galice.root");
  //static AliRunLoader* GetRunLoader(const Int_t nev, const Char_t* galiceName,
	//			 const Char_t* eventFolderName, AliRunLoader* rlOld);
  //
  static Double_t GetMomentum(const char* nameListOfFiles); 
  static int ParseString(const TString &topt, TObjArray &Opt); 
  // Analysis utilites
  //static Bool_t GetLorentzVectorFromESDCluster(TLorentzVector &v, const AliESDCaloCluster *cl);
  //static Bool_t GetLorentzVectorFromRecPoint(TLorentzVector &v, const AliEMCALRecPoint  *rp);
  // Drawing 
  static void DrawHist(TH1* hid=0,int lineWidth=1,int lineColor=1,const char* opt="",int lineStyle=1);
  // Fitting:
  static TF1* Gausi(const char *addName, double xmi, double xma, double N, double mean, double sig, 
  double width);
  static TF1* Gausi(const char *addName, double xmi, double xma, TH1 *h);

  static TF1* GausiPol2(const char *addName, double xmi, double xma, TF1 *g, TF1* bg);
  //
  static Double_t Gi(Double_t *x, Double_t *par);
  static Double_t GiPol2(Double_t *x, Double_t *par);
  // Calibration stuff
  static Double_t GetCorrectionCoefficientForGamma1(const Double_t eRec);
  static Double_t GetCorrectedEnergyForGamma1(const Double_t eRec);
  static TF1* GetResolutionFunction(const char *opt, TString &latexName);
  //
  // Analysis
  //
  // Trigger 
  static TList* GetTriggersListOfHists(const Int_t scale=0, const Int_t nTrig=5, const Bool_t toBrowser=kFALSE);
  static void   FillTriggersListOfHists(TList *l=0, TArrayF *triggerPosition=0, TArrayF *triggerAmplitudes=0);
  // Jet(s) kinematics
  static TList* GetJetsListOfHists(Int_t njet=2, Bool_t toBrowser=kFALSE);
  //static void   FillJetKineListOfHists(TList *l, AliRunLoader* rl, TLorentzVector &goodJet);

  AliEMCALHistoUtilities & operator = (const AliEMCALHistoUtilities &) {
    Fatal("operator =", "not implemented") ; return *this ; }
  
  ClassDef(AliEMCALHistoUtilities,1) // EMCAL utility routines
};

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