#ifndef MARS_MCalibrationBlindPix
#define MARS_MCalibrationBlindPix

#ifndef MARS_MHCalibrationBlindPixel
#include "MHCalibrationBlindPixel.h"
#endif

#ifndef MARS_MH
#include "MH.h"
#endif

class TH1I;
class MCalibrationBlindPix : public MParContainer
{
private:

  MHCalibrationBlindPixel *fHist; // Pointer to the histograms performing the fits, etc.  

  Float_t fLambda;           // The mean charge after the fit
  Float_t fMu0;              // The position of the pedestal-peak
  Float_t fMu1;              // The position of the first phe-peak
  Float_t fSigma0;           // The width of the pedestal-peak
  Float_t fSigma1;           // The width of the first phe-peak  

  Float_t fErrLambda;        // The error of the mean charge after the fit
  Float_t fErrMu0;           // The error of the position of the pedestal-peak
  Float_t fErrMu1;           // The error of the position of the first phe-peak
  Float_t fErrSigma0;        // The error of the width of the pedestal-peak
  Float_t fErrSigma1;        // The error of the width of the first phe-peak  
  
  Float_t fTime;                // The mean arrival time after the fit  
  Float_t fErrTime;             // The error of the mean arrival time after the fit
  
  
public:

  MCalibrationBlindPix(const char *name=NULL, const char *title=NULL);
  ~MCalibrationBlindPix();
  
  void Clear(Option_t *o="");
  
  // Getters
  Float_t GetLambda()    const    { return fLambda;  }
  Float_t GetMu0()       const    { return fMu0;  }
  Float_t GetMu1()       const    { return fMu1;  }
  Float_t GetSigma0()    const    { return fSigma0;  }
  Float_t GetSigma1()    const    { return fSigma1;  }

  Float_t GetErrLambda() const    { return fErrLambda;  }
  Float_t GetErrMu0()    const    { return fErrMu0;  }
  Float_t GetErrMu1()    const    { return fErrMu1;  }
  Float_t GetErrSigma0() const    { return fErrSigma0;  }
  Float_t GetErrSigma1() const    { return fErrSigma1;  }

  Float_t GetTime()      const    { return fTime;         }
  Float_t GetErrTime()   const    { return fErrTime;      }

  MHCalibrationBlindPixel *GetHist()     const  { return fHist;  }
  MHCalibrationBlindPixel *GetHist()            { return fHist;  }
  
  Bool_t IsFitOK()  const;
  
  // Fill histos
  Bool_t FillCharge(const Int_t q); 
  Bool_t FillTime(const Float_t t); 
  Bool_t FillGraphs(const Int_t qhi, const Int_t qlo) const { return fHist->FillGraphs(qhi,qlo); }
  
  // Fits
  Bool_t FitCharge();
  Bool_t FitTime();
  void ChangeFitFunc(MHCalibrationBlindPixel::FitFunc_t f) const  { fHist->ChangeFitFunc(f); }
  
  // Draws
  void Draw(Option_t *opt="")                  { fHist->Draw(opt); }
  TObject *DrawClone(Option_t *opt="") const  {  return fHist->DrawClone(opt); }  

  Bool_t CheckOscillations();  
  
  ClassDef(MCalibrationBlindPix, 1)	// Container for Calibration Blind Pixel
};

#endif

