#ifndef MARS_MHCalibrationPix
#define MARS_MHCalibrationPix

#ifndef MARS_MHGausEvents
#include "MHGausEvents.h"
#endif

class MHCalibrationPix : public MHGausEvents
{
private:

  const static Float_t  fgBlackoutLimit; //! Default for fBlackoutLimit (now set to: 5. )
  const static Float_t  fgPickupLimit;   //! Default for fPickupLimit   (now set to: 5. )
  
protected:

  Float_t  fEventFrequency;              // Event frequency in Hertz (to be set)

  Float_t *CreateEventXaxis(Int_t n);    // Create an x-axis for the Event TGraphs
  Float_t *CreatePSDXaxis  (Int_t n);    // Create an x-axis for the PSD TGraphs
  
  Float_t  fBlackoutLimit;               // Lower nr sigmas from mean until event is considered blackout
  Int_t    fSaturated;                   // Number of events classified as saturated
  Float_t  fPickupLimit;                 // Upper nr sigmas from mean until event is considered pickup
  Int_t    fPixId;                       // Pixel ID 

public:

  MHCalibrationPix(const char* name=NULL, const char* title=NULL);
  ~MHCalibrationPix() {}

  void  Clear(Option_t *o="");

  //  TObject *Clone(const char* name="") const;
  
  void  CreateGraphEvents();          // Create the TGraph fGraphEvents of fEvents                    
  void  CreateGraphPowerSpectrum();   // Create the TGraph fGraphPowerSpectrum out of fPowerSpectrum

  // Getters
  const Double_t GetBlackout       () const;  
  const Float_t  GetEventFrequency () const { return fEventFrequency; }
  const Double_t GetPickup         () const;
  const Int_t    GetPixId          () const { return fPixId;          }
  const Float_t  GetSaturated      () const { return fSaturated;      }

  // Fits
  Bool_t RepeatFit(const Option_t *option="RQ0"); // Repeat fit within limits defined by fPickupLimit
  void   BypassFit();                             // Take mean and RMS from the histogram
  
  // Setters
  void  AddSaturated        ( const Int_t    i                   ) { fSaturated     += i;   }
  void  SetBlackoutLimit    ( const Float_t  lim=fgBlackoutLimit ) { fBlackoutLimit  = lim; }
  void  SetEventFrequency   ( const Float_t  f                   ) { fEventFrequency = f;   }
  void  SetPickupLimit      ( const Float_t  lim=fgPickupLimit   ) { fPickupLimit    = lim; }
  void  SetPixId            ( const Int_t    i                   ) { fPixId          = i;   }

  // Miscelleaneous
  virtual void ChangeHistId(const Int_t id);      // Changes names and titles of the histogram
  virtual void Renorm();                          // Re-normalize the results 
  
  ClassDef(MHCalibrationPix, 1) // Base class for calibration events 
};

#endif
