
// DQRawDigits
// ===========
// This class monitors the Raw Digit data blocks
// and records busy electronics and readout errors.

#ifndef DQRAWDIGITS_H
#define DQRAWDIGITS_H

#include "RawData/RawDaqHeader.h"
#include "RawData/RawDaqSnarlHeader.h"
#include "RawData/RawDaqHeaderBlock.h"
#include "RawData/RawSnarlHeaderBlock.h"
#include "RawData/RawDigitDataBlock.h"
#include "RawReadout.h"

#include "TObject.h"
#include "TObjArray.h"

class DQRawDigits : public TObject
{
 
 public:
  DQRawDigits();
  DQRawDigits(const DQRawDigits& rhs);
  ~DQRawDigits();

  void Process(RawDaqHeader* hdr);
  void Process(RawDaqSnarlHeader* hdr);
  void Process(RawDaqHeaderBlock* rdb);
  void Process(RawSnarlHeaderBlock* rdb);
  void Process(RawDigitDataBlock* rdb);

  Int_t GetTime() const              { return fTime; }
  Int_t GetTriggerTime() const       { return fTriggerTime; }
  Int_t GetSnarl() const             { return fSnarl; }
  Int_t GetPreTriggerDigits() const  { return fPreTriggerDigits; }
  Int_t GetPostTriggerDigits() const { return fPostTriggerDigits; }
  Int_t GetSnarlMultiplicity() const { return fSnarlMultiplicity; }
  Int_t GetSnarlPassFail() const     { return fSnarlPassFail; }
  
  Int_t GetLast() const;
  TObject* At(Int_t i) const;

 private:

  Int_t fTime; 
  Int_t fBaseTime;
  Int_t fTriggerTime;
  Int_t fTriggerBaseTime;

  Int_t fSnarl;
  Int_t fPreTriggerDigits;
  Int_t fPostTriggerDigits;
  Int_t fSnarlMultiplicity;
  Int_t fSnarlPassFail;

  RawReadout* fRawReadout;
                  
  TObjArray* fRawDigitsList;

  TObjArray* fReadoutErrorList;
  TObjArray* fReadoutBusyList;

  ClassDef(DQRawDigits,1);
            
};   

#endif
