#ifndef MARS_MPedCalcPedRun
#define MARS_MPedCalcPedRun

/////////////////////////////////////////////////////////////////////////////
//                                                                         //
// MPedCalcPedRun                                                          //
//                                                                         //
// Evaluate the pedestals from pedestal runs                               //
//                                                                         //
/////////////////////////////////////////////////////////////////////////////

#ifndef MARS_MTask
#include "MTask.h"
#endif

#include <TArrayF.h>

class MRawRunHeader;
class MRawEvtData;
class MPedestalCam;

class MPedCalcPedRun : public MTask
{
    Byte_t fNumHiGainSamples;

    Int_t fCounter; // keep number of processed events

    MRawRunHeader *fRunheader; // raw event run header
    MRawEvtData  *fRawEvt;     // raw event data (time slices)
    MPedestalCam *fPedestals;  // Pedestals of all pixels in the camera

    TArrayF fSumx;   // sum of values
    TArrayF fSumx2;  // sum of squared values

    Float_t CalcHiGainMean(Byte_t *ptr, const Byte_t *end) const;
    Float_t CalcHiGainRms(Byte_t *ptr, const Byte_t *end, Float_t higainped) const;
    Float_t GetSumx2(Byte_t* ptr, const Byte_t* end) const; 
   //Float_t CalcHiGainMeanErr(Float_t higainrms) const;
    //Float_t CalcHiGainRmsErr(Float_t higainrms) const;

    Bool_t ReInit(MParList *pList);

    Int_t PreProcess(MParList *pList);
    Int_t Process();
    Int_t PostProcess();

public:

    MPedCalcPedRun(const char *name=NULL, const char *title=NULL);

    ClassDef(MPedCalcPedRun, 0)   // Task to calculate pedestals from pedestal runs raw data
};

#endif
