#ifndef MARS_MCalibrate
#define MARS_MCalibrate

/////////////////////////////////////////////////////////////////////////////
//                                                                         //
// MCalibrate                                                              //
//                                                                         //
// Integrates the desired ADC time slices of one pixel and apply           //
// calibration constants                                                   //
//                                                                         //
/////////////////////////////////////////////////////////////////////////////
#ifndef MARS_MTask
#include "MTask.h"
#endif

class MGeomCam;
class MCalibrationCam;
class MExtractedSignalCam;
class MCerPhotEvt;

class MCalibrate : public MTask
{
private:
    MCalibrationCam     *fCalibrations; // Calibration constants 
    MExtractedSignalCam *fSignals;      // Integrated charge in FADCs counts
    MCerPhotEvt         *fCerPhotEvt; // Cerenkov Photon Event used for calculation

    Float_t fConversionHiLo;
    UShort_t fCalibrationMode;
    
    Int_t PreProcess(MParList *pList);
    Bool_t ReInit(MParList *pList);
    Int_t Process();

public:

    enum CalibrationMode_t{kNone=0,kBlindPixel,kFfactor,kPinDiode,kCombined};
    static const CalibrationMode_t kDefault = kBlindPixel;

    MCalibrate(CalibrationMode_t calmode = kDefault,const char *name=NULL, const char *title=NULL);

    void SetConversionHiLo(Float_t conv) { fConversionHiLo = conv; };
    void SetCalibrationMode(CalibrationMode_t calmode=kDefault){ fCalibrationMode=calmode;};
    
    ClassDef(MCalibrate, 0)   // Task to calculate cerenkov photons using calibration constants
};
 

#endif
