#ifndef HHISTARRAY_H
#define HHISTARRAY_H
#include "TNamed.h"
#include "TString.h"
#include "TArrayI.h"
#include "TObjArray.h"
#include "TH1.h"
#include "TH2.h"
#include "honlinemonhist.h"
#include "TLegend.h"
class HOnlineNamedLegend;
class HOnlineLegendDrawer : public TNamed {
TObjArray* array; 
protected:
public:
    HOnlineLegendDrawer(const Char_t* name   ="",
		  const Char_t* title  ="");
    ~HOnlineLegendDrawer(void);
    
    
    void          draw(HOnlineMonHistAddon*);
    
    HOnlineNamedLegend* add (HOnlineMonHistAddon*);
    ClassDef(HOnlineLegendDrawer,1) 
};
class HOnlineNamedLegend : public TNamed {
protected:
TLegend* legend;  
public:
    HOnlineNamedLegend (const Char_t* name   ="",
		  const Char_t* title  ="",HOnlineMonHistAddon* =0);
    ~HOnlineNamedLegend(void);
    
    TLegend* getP(){return legend;}
    ClassDef(HOnlineNamedLegend,1) 
};
class HOnlineTrendArray : public HOnlineMonHistAddon{
protected:
    TObjArray* array; 
public:
    HOnlineTrendArray(const Char_t* name   ="",
		const Char_t* title  ="",
		Int_t active=0,Int_t resetable=0, Int_t size=1,Int_t size2=1,
		Int_t nBinsX=0,Float_t Xlo=0,Float_t Xup=0);
    
    HOnlineTrendArray(HOnlineMonHistAddon&);
    ~HOnlineTrendArray(void);
    
    void     getDim(Int_t* i,Int_t* j)    {*i=arraySize1;*j=arraySize2;}
    
    Int_t    getSizeAll()    {return arraySize1*arraySize2;}
    
    
    
    void     fill   (Int_t,Int_t,Stat_t,Stat_t val = 0);
    
    void     reset(Int_t level,Int_t count);
    
    void     create();
    
    void     drawAll( Bool_t allowHiddenZero=1 , Double_t min = -1e200,Double_t max=1e200);
    
    void     draw( Bool_t allowHiddenZero=1 );
    
    void     add(HOnlineMonHistAddon* h2);
    
    TH1*     getP(Int_t s=0,Int_t m=0){return ((TH1*) (*array)[s*arraySize2+m]);}
    void     getMinMax(Double_t& min,Double_t& max);
    ClassDef(HOnlineTrendArray,1) 
};
class HOnlineHistArray : public HOnlineMonHistAddon{
protected:
    TObjArray* array;
public:
    HOnlineHistArray(const Char_t* name   ="",
		  const Char_t* title  ="",
		  Int_t active=0,Int_t resetable=0, Int_t size=1,Int_t size2=1,
		  Int_t nBinsX=0,Float_t Xlo=0,Float_t Xup=0);
    
    HOnlineHistArray(HOnlineMonHistAddon&);
    ~HOnlineHistArray(void);
    
    void     getDim(Int_t* i,Int_t* j)    {*i=arraySize1;*j=arraySize2;}
    
    Int_t    getSizeAll()    {return arraySize1*arraySize2;}
    
    void     fill   (Int_t,Int_t,Stat_t,Stat_t b = 0);
    
    void     setBinContent(Int_t,Int_t,Int_t,Stat_t);
    
    Stat_t   getBinContent(Int_t,Int_t,Int_t);
    
    void     setBinError  (Int_t,Int_t,Int_t,Stat_t);
    
    Stat_t   getBinError  (Int_t,Int_t,Int_t);
    
    void     reset(Int_t level,Int_t count);
    
    void     create();
    
    
    void     drawAll( Bool_t allowHiddenZero=1 , Double_t min = -1e200,Double_t max=1e200 );
    
    void     draw( Bool_t allowHiddenZero=1 );
    
    void     add(HOnlineMonHistAddon* h2);
    
    TH1*     getP(Int_t s=0,Int_t m=0){return ((TH1*) (*array)[s*arraySize2+m]);}
    void     getMinMax(Double_t& min,Double_t& max);
    ClassDef(HOnlineHistArray,1) 
};
class HOnlineHistArray2 : public HOnlineMonHistAddon{
protected:
    TObjArray* array;
public:
    HOnlineHistArray2(const Char_t* name   ="",
		   const Char_t* title  ="",
		   Int_t active=0,Int_t resetable=0, Int_t size=1,Int_t size2=1,
		   Int_t nBinsX=0,Float_t Xlo=0,Float_t Xup=0);
    
    HOnlineHistArray2(HOnlineMonHistAddon&);
    ~HOnlineHistArray2(void);
    
    void     getDim(Int_t* i,Int_t* j)    {*i=arraySize1;*j=arraySize2;}
    
    Int_t    getSizeAll()    {return arraySize1*arraySize2;}
    
    void     fill   (Int_t,Int_t,Stat_t,Stat_t);
    
    void     setBinContent(Int_t,Int_t,Int_t,Int_t,Stat_t);
    
    Stat_t   getBinContent(Int_t,Int_t,Int_t,Int_t);
    
    void     setBinError  (Int_t,Int_t,Int_t,Int_t,Stat_t);
    
    Stat_t   getBinError  (Int_t,Int_t,Int_t,Int_t);
    
    void     create();
    
    
    void     drawAll( Bool_t allowHiddenZero=1, Double_t min = -1e200,Double_t max=1e200);
    
    void     draw( Bool_t allowHiddenZero=1 );
    
    void     reset(Int_t level,Int_t count);
    
    void     add(HOnlineMonHistAddon* h2);
    
    TH2*     getP(Int_t s=0,Int_t m=0){return ((TH2*) (*array)[s*arraySize2+m]);}
    void     getMinMax(Double_t& min,Double_t& max);
    ClassDef(HOnlineHistArray2,1) 
};
#endif  /*!HHISTARRAY_H*/