#ifndef CANDDATAQUALITY_H
#define CANDDATAQUALITY_H

#include "Candidate/CandBase.h"

class AlgHandle;
class CandContext;
class CandDataQualityHandle;

class CandDataQuality : public CandBase
{
  friend class CandDataQualityHandle;

public:
  typedef enum EDataQuality {
    kOkay = 0x00,
    kBad = 0x01,
    kLowMultiplicity = 0x02,
    kHighMultiplicity = 0x04,
    kLightInjection = 0x08,
    kTimeFrameBoundary=0x10,
    kManyColdChips = 0x20,
    kManyHotChips = 0x40,
    kManyBusyChips = 0x80,
    kManyReadoutErrors = 0x100,
    kFailed = 0x1000
  } DataQuality_t;

  static CandDataQualityHandle MakeCandidate(AlgHandle& ah, CandContext& ch);
  CandDataQuality();

protected:
  CandDataQuality(AlgHandle& ah);
  CandDataQuality(AlgHandle& ah, CandHandle& ch, CandContext& cx);
  CandDataQuality(const CandDataQuality& rhs);
  virtual ~CandDataQuality();
  virtual CandDataQuality* Dup() const;
  virtual void CreateLocalHandle();

private: 

  Int_t fTime;
  Int_t fRunType;
  Int_t fRun;
  Int_t fSubRun;
  Int_t fTimeFrame;
  Int_t fSnarl;
  Int_t fTriggerSource;
  Int_t fTriggerTime;
  Int_t fErrorCode;
  Int_t fCrateMask;
  Int_t fPreTriggerDigits;
  Int_t fPostTriggerDigits;
  Int_t fSnarlMultiplicity;
  Int_t fSpillStatus;
  Int_t fSpillType;
  Int_t fSpillTimeError;
  Int_t fLiTrigger;
  Int_t fLiTime;
  Int_t fLiSubtractedTime;
  Int_t fLiRelativeTime;
  Int_t fLiCalibPoint;
  Int_t fLiCalibType;
  Int_t fLiPulserBox;
  Int_t fLiPulserLed;
  Int_t fLiPulseHeight;
  Int_t fLiPulseWidth;

  CandDataQuality::DataQuality_t fDataQuality;

  ClassDef(CandDataQuality,1)
};

#endif 

