#ifndef DATAQUALITYREADER_H
#define DATAQUALITYREADER_H
 
#include "JobControl/JobCModule.h"
  
#include "CandDataQualityHandle.h"
#include "CandDeadChipHandle.h"

#include "DQHeader.h"
#include "DQRawDigits.h"
#include "DQHotColdElectronics.h"
#include "DQLightInjection.h"
#include "DQSpillServer.h"

#include "TFile.h"
#include "TTree.h"

class JobCommand;
class MomNavigator;
 
class DataQualityReader : public JobCModule, public TObject
{
 
public:
 
  DataQualityReader();
  ~DataQualityReader();
  void BeginJob();
  JobCResult Reco(MomNavigator* mom);
  JobCResult Ana(const MomNavigator* mom);
  const Registry& DefaultConfig() const;
  void Config(const Registry& r);
  void HandleCommand(JobCommand* command);
  void EndJob();
   
private:

  Bool_t fRecord;
  Bool_t fSnarl;
  Bool_t fFilter;
  Int_t fCounter;

  DQHeader* fDQHeader;
  DQRawDigits* fDQRawDigits;
  DQHotColdElectronics* fDQHotColdElectronics;
  DQLightInjection* fDQLightInjection;
  DQSpillServer* fDQSpillServer;

  void ProcessHeader(TObject* obj);
  void ProcessBlock(TObject* obj);
  Bool_t ApplyFilter(CandDataQualityHandle* cdh);

  Int_t fWriteDataQuality;
  Int_t fWriteDeadChips;
  Int_t fFilterOnOff;
  Int_t fFilterBadDataQuality;
  Int_t fFilterLowMultiplicity;
  Int_t fFilterHighMultiplicity;
  Int_t fFilterWord;

  TFile* fDataQualityFile;
  TTree* fDataQualityTree;
  Int_t Time;
  Int_t RunType;
  Int_t Run;
  Int_t SubRun;
  Int_t TimeFrame;
  Int_t Snarl;
  Int_t TriggerSource;
  Int_t TriggerTime;
  Int_t ErrorCode;
  Int_t CrateMask;
  Int_t PreTriggerDigits;
  Int_t PostTriggerDigits;
  Int_t SnarlMultiplicity;
  Int_t SpillStatus;
  Int_t SpillType;
  Int_t SpillTimeError;
  Int_t LiTrigger;
  Int_t LiTime;
  Int_t LiSubtractedTime;
  Int_t LiRelativeTime;
  Int_t LiCalibPoint;
  Int_t LiCalibType;
  Int_t LiPulserBox;
  Int_t LiPulserLed;
  Int_t LiPulseHeight;
  Int_t LiPulseWidth;
  Int_t ColdChips;
  Int_t HotChips;
  Int_t BusyChips;
  Int_t ReadoutErrors;
  Int_t DataQuality;

  TFile* fDeadChipFile;
  TTree* fDeadChipTree;
  Int_t Entries;
  Int_t ChannelId;
  Int_t Adc;
  Int_t Tdc;
  Int_t TriggerRate;
  Int_t ChipStatus;

  ClassDef(DataQualityReader,1)
};
                   
#endif
