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

///////////////////////////////////////////////////////////////////////////////////////////
//                                                                                       //
// Generic Histogram container with support for groups and filling of groups by passing  //
// a vector of data                                                                      //
//                                                                                       //
// Authors:                                                                              //
//   Jens Wiechula <Jens.Wiechula@cern.ch>                                               //
//   Julian Book   <Julian.Book@cern.ch>                                                 //
//                                                                                       //
///////////////////////////////////////////////////////////////////////////////////////////

#include <Rtypes.h>

#include <TNamed.h>
// #include <TCollection.h>
#include <THashList.h>
#include <TVectorDfwd.h>
#include <THnBase.h>
#include <TBits.h>

class TH1;
class TString;
class TList;
// class TVectorT<double>;

class AliDielectronHistos : public TNamed {
public:

  AliDielectronHistos();
  AliDielectronHistos(const char* name, const char* title);
  virtual ~AliDielectronHistos();

  enum {kNoAutoFill=1000000000, kNoProfile=999, kNoWeights=998};

  void UserProfile(const char* histClass,const char *name, const char* title,
		   UInt_t valTypeP,
		   Int_t nbinsX, Double_t xmin, Double_t xmax,
		   UInt_t valTypeX, Bool_t logBinX=kFALSE, TString option="",
		   UInt_t valTypeW=kNoWeights);

  void UserProfile(const char* histClass,const char *name, const char* title,
		   UInt_t valTypeP,
		   Int_t nbinsX, Double_t xmin, Double_t xmax,
		   Int_t nbinsY, Double_t ymin, Double_t ymax,
		   UInt_t valTypeX, UInt_t valTypeY,
		   Bool_t logBinX=kFALSE, Bool_t logBinY=kFALSE, TString option="",
		   UInt_t valTypeW=kNoWeights);
  
  void UserProfile(const char* histClass,const char *name, const char* title,
		   UInt_t valTypeP,
		   Int_t nbinsX, Double_t xmin, Double_t xmax,
		   Int_t nbinsY, Double_t ymin, Double_t ymax,
		   Int_t nbinsZ, Double_t zmin, Double_t zmax,
		   UInt_t valTypeX, UInt_t valTypeY, UInt_t valTypeZ,
		   Bool_t logBinX=kFALSE, Bool_t logBinY=kFALSE, Bool_t logBinZ=kFALSE, TString option="",
		   UInt_t valTypeW=kNoWeights);
  
  void UserProfile(const char* histClass,const char *name, const char* title,
		   UInt_t valTypeP,
		   const char* binning, UInt_t valTypeX, TString option="",
		   UInt_t valTypeW=kNoWeights);
  
  void UserProfile(const char* histClass,const char *name, const char* title,
		   UInt_t valTypeP,
		   const TVectorD * const binsX, UInt_t valTypeX, TString option="",
		   UInt_t valTypeW=kNoWeights);
  
  void UserProfile(const char* histClass,const char *name, const char* title,
		   UInt_t valTypeP,
		   const TVectorD * const binsX, const TVectorD * const binsY,
		   UInt_t valTypeX, UInt_t valTypeY, TString option="",
		   UInt_t valTypeW=kNoWeights);
  
  void UserProfile(const char* histClass,const char *name, const char* title,
		   UInt_t valTypeP,
		   const TVectorD * const binsX, const TVectorD * const binsY, const TVectorD * const binsZ,
		   UInt_t valTypeX, UInt_t valTypeY, UInt_t valTypeZ, TString option="",
		   UInt_t valTypeW=kNoWeights);

  void UserHistogram(const char* histClass, Int_t ndim, Int_t *bins, Double_t *mins, Double_t *maxs, UInt_t *vars, UInt_t valTypeW=kNoWeights);
  void UserSparse(   const char* histClass, Int_t ndim, Int_t *bins, Double_t *mins, Double_t *maxs, UInt_t *vars, UInt_t valTypeW=kNoWeights);
  void UserHistogram(const char* histClass, Int_t ndim, TObjArray *limits, UInt_t *vars, UInt_t valTypeW=kNoWeights);
  void UserSparse(   const char* histClass, Int_t ndim, TObjArray *limits, UInt_t *vars, UInt_t valTypeW=kNoWeights);

  void UserHistogram(const char* histClass,const char *name, const char* title,
                     Int_t nbinsX, Double_t xmin, Double_t xmax, UInt_t valTypeX, Bool_t logBinX=kFALSE,
		     UInt_t valTypeW=kNoWeights)
  { UserProfile(histClass,name,title,kNoProfile,nbinsX,xmin,xmax,valTypeX,logBinX,"",valTypeW); }

  void UserHistogram(const char* histClass,const char *name, const char* title,
                     Int_t nbinsX, Double_t xmin, Double_t xmax, Int_t nbinsY, Double_t ymin, Double_t ymax,
                     UInt_t valTypeX, UInt_t valTypeY, Bool_t logBinX=kFALSE, Bool_t logBinY=kFALSE,
		     UInt_t valTypeW=kNoWeights)
  { UserProfile(histClass,name,title,kNoProfile,nbinsX,xmin,xmax,nbinsY,ymin,ymax,valTypeX,valTypeY,logBinX,logBinY,valTypeW); }

  void UserHistogram(const char* histClass,const char *name, const char* title,
                     Int_t nbinsX, Double_t xmin, Double_t xmax, Int_t nbinsY, Double_t ymin, Double_t ymax,
                     Int_t nbinsZ, Double_t zmin, Double_t zmax, UInt_t valTypeX, UInt_t valTypeY, UInt_t valTypeZ,
                     Bool_t logBinX=kFALSE, Bool_t logBinY=kFALSE, Bool_t logBinZ=kFALSE,
		     UInt_t valTypeW=kNoWeights)
  { UserProfile(histClass,name,title,kNoProfile,nbinsX,xmin,xmax,nbinsY,ymin,ymax,nbinsZ,zmin,zmax,valTypeX,valTypeY,valTypeZ,logBinX,logBinY,logBinZ,valTypeW); }

  void UserHistogram(const char* histClass,const char *name, const char* title,
                     const char* binning, UInt_t valTypeX, UInt_t valTypeW=kNoWeights)
  { UserProfile(histClass,name,title,kNoProfile,binning,valTypeX,"",valTypeW); }
  //  void UserHistogram(const char* histClass,const char *name, const char* title,
  //                     const TVectorD * const binsX, UInt_t valTypeX)
  //  { UserProfile(histClass,name,title,kNoProfile,binsX,valTypeX); }

  void UserHistogram(const char* histClass,const char *name, const char* title,
		     const TVectorD * const binsX, UInt_t valTypeX, UInt_t valTypeW=kNoWeights)
  { UserProfile(histClass,name,title,kNoProfile,binsX,valTypeX,"",valTypeW); }

  void UserHistogram(const char* histClass,const char *name, const char* title,
                     const TVectorD * const binsX, const TVectorD * const binsY, UInt_t valTypeX, UInt_t valTypeY,
		     UInt_t valTypeW=kNoWeights)
  { UserProfile(histClass,name,title,kNoProfile,binsX,binsY,valTypeX,valTypeY,"",valTypeW); }

  void UserHistogram(const char* histClass,const char *name, const char* title,
                     const TVectorD * const binsX, const TVectorD * const binsY, const TVectorD * const binsZ,
                     UInt_t valTypeX, UInt_t valTypeY, UInt_t valTypeZ,
		     UInt_t valTypeW=kNoWeights)
  { UserProfile(histClass,name,title,kNoProfile,binsX,binsY,binsZ,valTypeX,valTypeY,valTypeZ,"",valTypeW); }

  void UserHistogram(const char* histClass, TObject* hist, UInt_t valTypes=kNoAutoFill);

  // some functions needed to garantuee backward compatibility
  void UserHistogram(const char* histClass,const char *name, const char* title,
                     Int_t nbinsX, Double_t xmin, Double_t xmax)
  { UserProfile(histClass,name,title,kNoProfile,nbinsX,xmin,xmax,kNoAutoFill); }
  void UserHistogram(const char* histClass,const char *name, const char* title,
                     Int_t nbinsX, Double_t xmin, Double_t xmax,
                     Int_t nbinsY, Double_t ymin, Double_t ymax)
  { UserProfile(histClass,name,title,kNoProfile,nbinsX,xmin,xmax,nbinsY,ymin,ymax,kNoAutoFill,kNoAutoFill); }


  void Fill(const char* histClass, const char* name, Double_t xval);
  void Fill(const char* histClass, const char* name, Double_t xval, Double_t yval);
  void Fill(const char* histClass, const char* name, Double_t xval, Double_t yval, Double_t zval);
  
//   void FillClass(const char* histClass, const TVectorD &vals);
  void FillClass(const char* histClass, Int_t nValues, const Double_t *values);
  
  TObject* GetHist(const char* histClass, const char* name) const;
  TH1* GetHistogram(const char* histClass, const char* name) const;
  TObject* GetHist(const char* cutClass, const char* histClass, const char* name) const;
  TH1* GetHistogram(const char* cutClass, const char* histClass, const char* name) const;

  void SetHistogramList(THashList &list, Bool_t setOwner=kTRUE);
  void ResetHistogramList(){fHistoList.Clear();}
  const THashList* GetHistogramList() const {return &fHistoList;}

  void SetList(TList * const list) { fList=list; }
  TList *GetList() const { return fList; }
	TBits *GetUsedVars() const { return fUsedVars; }

  void AddClass(const char* histClass);

  void DumpToFile(const char* file="histos.root");
  void ReadFromFile(const char* file="histos.root");
  
  virtual void Print(const Option_t* option = "") const;
  virtual void Draw(const Option_t* option = "");
  virtual void DrawSame(const char* histName, const Option_t *opt="leg can");

  void SetReservedWords(const char* words);

//   virtual void       Add(TObject *obj) {};
//   virtual void       Clear(Option_t *option="") {};
//   virtual void       Delete(Option_t *option="") {};
//   virtual TObject  **GetObjectRef(const TObject *obj) const { return 0; }
//   virtual TIterator *MakeIterator(Bool_t dir = kIterForward) const ;
//   virtual TObject   *Remove(TObject *obj) { return 0; }

  Bool_t SetCutClass(const char* cutClass);
  static void StoreVariables(TObject *obj, UInt_t valType[20]);
  static void StoreVariables(TH1 *obj, UInt_t valType[20]);
  static void StoreVariables(THnBase *obj, UInt_t valType[20]);
  static void AdaptNameTitle(TH1 *hist, const char* histClass);
  static Int_t GetPrecision(Double_t value);
  static void FillValues(TObject *obj, const Double_t *values);
  static void FillValues(TH1 *obj, const Double_t *values);
  static void FillValues(THnBase *obj, const Double_t *values);

private:

  void FillVarArray(TObject *obj, UInt_t *valType);

  
  THashList fHistoList;             //-> list of histograms
  TList    *fList;                  //! List of list of histograms
	TBits     *fUsedVars;            // list of used variables

  TString *fReservedWords;          //! list of reserved words
  void UserHistogramReservedWords(const char* histClass, const TObject *hist, UInt_t valTypes);
  void FillClass(THashTable *classTable, Int_t nValues, Double_t *values);
  
  void PrintPDF(Option_t* opt);
  void PrintStructure() const;

  Bool_t IsHistogramOk(const char* classTable, const char* name);
  

  AliDielectronHistos(const AliDielectronHistos &hist);
  AliDielectronHistos& operator = (const AliDielectronHistos &hist);

  ClassDef(AliDielectronHistos,3)
};

#endif

 AliDielectronHistos.h:1
 AliDielectronHistos.h:2
 AliDielectronHistos.h:3
 AliDielectronHistos.h:4
 AliDielectronHistos.h:5
 AliDielectronHistos.h:6
 AliDielectronHistos.h:7
 AliDielectronHistos.h:8
 AliDielectronHistos.h:9
 AliDielectronHistos.h:10
 AliDielectronHistos.h:11
 AliDielectronHistos.h:12
 AliDielectronHistos.h:13
 AliDielectronHistos.h:14
 AliDielectronHistos.h:15
 AliDielectronHistos.h:16
 AliDielectronHistos.h:17
 AliDielectronHistos.h:18
 AliDielectronHistos.h:19
 AliDielectronHistos.h:20
 AliDielectronHistos.h:21
 AliDielectronHistos.h:22
 AliDielectronHistos.h:23
 AliDielectronHistos.h:24
 AliDielectronHistos.h:25
 AliDielectronHistos.h:26
 AliDielectronHistos.h:27
 AliDielectronHistos.h:28
 AliDielectronHistos.h:29
 AliDielectronHistos.h:30
 AliDielectronHistos.h:31
 AliDielectronHistos.h:32
 AliDielectronHistos.h:33
 AliDielectronHistos.h:34
 AliDielectronHistos.h:35
 AliDielectronHistos.h:36
 AliDielectronHistos.h:37
 AliDielectronHistos.h:38
 AliDielectronHistos.h:39
 AliDielectronHistos.h:40
 AliDielectronHistos.h:41
 AliDielectronHistos.h:42
 AliDielectronHistos.h:43
 AliDielectronHistos.h:44
 AliDielectronHistos.h:45
 AliDielectronHistos.h:46
 AliDielectronHistos.h:47
 AliDielectronHistos.h:48
 AliDielectronHistos.h:49
 AliDielectronHistos.h:50
 AliDielectronHistos.h:51
 AliDielectronHistos.h:52
 AliDielectronHistos.h:53
 AliDielectronHistos.h:54
 AliDielectronHistos.h:55
 AliDielectronHistos.h:56
 AliDielectronHistos.h:57
 AliDielectronHistos.h:58
 AliDielectronHistos.h:59
 AliDielectronHistos.h:60
 AliDielectronHistos.h:61
 AliDielectronHistos.h:62
 AliDielectronHistos.h:63
 AliDielectronHistos.h:64
 AliDielectronHistos.h:65
 AliDielectronHistos.h:66
 AliDielectronHistos.h:67
 AliDielectronHistos.h:68
 AliDielectronHistos.h:69
 AliDielectronHistos.h:70
 AliDielectronHistos.h:71
 AliDielectronHistos.h:72
 AliDielectronHistos.h:73
 AliDielectronHistos.h:74
 AliDielectronHistos.h:75
 AliDielectronHistos.h:76
 AliDielectronHistos.h:77
 AliDielectronHistos.h:78
 AliDielectronHistos.h:79
 AliDielectronHistos.h:80
 AliDielectronHistos.h:81
 AliDielectronHistos.h:82
 AliDielectronHistos.h:83
 AliDielectronHistos.h:84
 AliDielectronHistos.h:85
 AliDielectronHistos.h:86
 AliDielectronHistos.h:87
 AliDielectronHistos.h:88
 AliDielectronHistos.h:89
 AliDielectronHistos.h:90
 AliDielectronHistos.h:91
 AliDielectronHistos.h:92
 AliDielectronHistos.h:93
 AliDielectronHistos.h:94
 AliDielectronHistos.h:95
 AliDielectronHistos.h:96
 AliDielectronHistos.h:97
 AliDielectronHistos.h:98
 AliDielectronHistos.h:99
 AliDielectronHistos.h:100
 AliDielectronHistos.h:101
 AliDielectronHistos.h:102
 AliDielectronHistos.h:103
 AliDielectronHistos.h:104
 AliDielectronHistos.h:105
 AliDielectronHistos.h:106
 AliDielectronHistos.h:107
 AliDielectronHistos.h:108
 AliDielectronHistos.h:109
 AliDielectronHistos.h:110
 AliDielectronHistos.h:111
 AliDielectronHistos.h:112
 AliDielectronHistos.h:113
 AliDielectronHistos.h:114
 AliDielectronHistos.h:115
 AliDielectronHistos.h:116
 AliDielectronHistos.h:117
 AliDielectronHistos.h:118
 AliDielectronHistos.h:119
 AliDielectronHistos.h:120
 AliDielectronHistos.h:121
 AliDielectronHistos.h:122
 AliDielectronHistos.h:123
 AliDielectronHistos.h:124
 AliDielectronHistos.h:125
 AliDielectronHistos.h:126
 AliDielectronHistos.h:127
 AliDielectronHistos.h:128
 AliDielectronHistos.h:129
 AliDielectronHistos.h:130
 AliDielectronHistos.h:131
 AliDielectronHistos.h:132
 AliDielectronHistos.h:133
 AliDielectronHistos.h:134
 AliDielectronHistos.h:135
 AliDielectronHistos.h:136
 AliDielectronHistos.h:137
 AliDielectronHistos.h:138
 AliDielectronHistos.h:139
 AliDielectronHistos.h:140
 AliDielectronHistos.h:141
 AliDielectronHistos.h:142
 AliDielectronHistos.h:143
 AliDielectronHistos.h:144
 AliDielectronHistos.h:145
 AliDielectronHistos.h:146
 AliDielectronHistos.h:147
 AliDielectronHistos.h:148
 AliDielectronHistos.h:149
 AliDielectronHistos.h:150
 AliDielectronHistos.h:151
 AliDielectronHistos.h:152
 AliDielectronHistos.h:153
 AliDielectronHistos.h:154
 AliDielectronHistos.h:155
 AliDielectronHistos.h:156
 AliDielectronHistos.h:157
 AliDielectronHistos.h:158
 AliDielectronHistos.h:159
 AliDielectronHistos.h:160
 AliDielectronHistos.h:161
 AliDielectronHistos.h:162
 AliDielectronHistos.h:163
 AliDielectronHistos.h:164
 AliDielectronHistos.h:165
 AliDielectronHistos.h:166
 AliDielectronHistos.h:167
 AliDielectronHistos.h:168
 AliDielectronHistos.h:169
 AliDielectronHistos.h:170
 AliDielectronHistos.h:171
 AliDielectronHistos.h:172
 AliDielectronHistos.h:173
 AliDielectronHistos.h:174
 AliDielectronHistos.h:175
 AliDielectronHistos.h:176
 AliDielectronHistos.h:177
 AliDielectronHistos.h:178
 AliDielectronHistos.h:179
 AliDielectronHistos.h:180
 AliDielectronHistos.h:181
 AliDielectronHistos.h:182
 AliDielectronHistos.h:183
 AliDielectronHistos.h:184
 AliDielectronHistos.h:185
 AliDielectronHistos.h:186
 AliDielectronHistos.h:187
 AliDielectronHistos.h:188
 AliDielectronHistos.h:189
 AliDielectronHistos.h:190
 AliDielectronHistos.h:191
 AliDielectronHistos.h:192
 AliDielectronHistos.h:193
 AliDielectronHistos.h:194
 AliDielectronHistos.h:195
 AliDielectronHistos.h:196
 AliDielectronHistos.h:197
 AliDielectronHistos.h:198
 AliDielectronHistos.h:199
 AliDielectronHistos.h:200
 AliDielectronHistos.h:201
 AliDielectronHistos.h:202
 AliDielectronHistos.h:203
 AliDielectronHistos.h:204
 AliDielectronHistos.h:205
 AliDielectronHistos.h:206
 AliDielectronHistos.h:207
 AliDielectronHistos.h:208
 AliDielectronHistos.h:209
 AliDielectronHistos.h:210
 AliDielectronHistos.h:211
 AliDielectronHistos.h:212
 AliDielectronHistos.h:213
 AliDielectronHistos.h:214
 AliDielectronHistos.h:215
 AliDielectronHistos.h:216