#ifndef MARS_MH
#define MARS_MH

#ifndef MARS_MParContainer
#include "MParContainer.h"
#endif

class TH1;
class TH2;
class TH3;
class TAxis;
class TArrayD;
class TCanvas;

class MBinning;
class MParList;

class MH : public MParContainer
{
public:
    MH(const char *name=NULL, const char *title=NULL);

    virtual Bool_t SetupFill(const MParList *pList) { return kTRUE; }
    virtual Bool_t Fill(const MParContainer *par) = 0;
    virtual Bool_t Finalize() { return kTRUE; }

    static TCanvas *MakeDefCanvas(TString name="", const char *title="",
                                  const UInt_t w=580, const UInt_t h=435);
    static TCanvas *MakeDefCanvas(const TObject *obj,
                                  const UInt_t w=580, const UInt_t h=435);

    static void SetBinning(TH1 *h, const MBinning *binsx);
    static void SetBinning(TH2 *h, const MBinning *binsx, const MBinning *binsy);
    static void SetBinning(TH3 *h, const MBinning *binsx, const MBinning *binsy, const MBinning *binsz);

    static void SetBinning(TH1 *h, const TArrayD *binsx);
    static void SetBinning(TH2 *h, const TArrayD *binsx, const TArrayD *binsy);
    static void SetBinning(TH3 *h, const TArrayD *binsx, const TArrayD *binsy, const TArrayD *binsz);

    static void SetBinning(TH1 *h, const TAxis *binsx);
    static void SetBinning(TH2 *h, const TAxis *binsx, const TAxis *binsy);
    static void SetBinning(TH3 *h, const TAxis *binsx, const TAxis *binsy, const TAxis *binsz);

    static void SetBinning(TH1 *h, TH1 *x);

    ClassDef(MH, 1) //A histogram base class for Mars histograms
};

#endif

