
#include "MessageService/MsgService.h"  
#include "JobControl/JobCModuleRegistry.h"
#include "Algorithm/AlgHandle.h"

#include "CandDataQuality.h"
#include "CandDataQualityHandle.h"

ClassImp(CandDataQuality)

CandDataQuality::CandDataQuality() :
  fTime(-1),
  fRunType(-1),
  fRun(-1),
  fSubRun(-1),
  fTimeFrame(-1),
  fSnarl(-1),
  fTriggerSource(-1),
  fTriggerTime(-1),
  fErrorCode(0),
  fCrateMask(0),
  fPreTriggerDigits(0),
  fPostTriggerDigits(0),
  fSpillStatus(-1),
  fSpillType(-1),
  fSpillTimeError(-1),
  fLiTrigger(0),
  fLiTime(-99999),
  fLiSubtractedTime(-99999),
  fLiRelativeTime(-99999),
  fLiCalibPoint(-1),
  fLiCalibType(-1),
  fLiPulserBox(-1),
  fLiPulserLed(-1),
  fLiPulseHeight(-1),
  fLiPulseWidth(-1),
  fDataQuality(CandDataQuality::kOkay)
{

}

CandDataQuality::CandDataQuality(AlgHandle& ah) :
  CandBase(ah),
  fTime(-1),
  fRunType(-1),
  fRun(-1),
  fSubRun(-1),
  fTimeFrame(-1),
  fSnarl(-1),
  fTriggerSource(-1),
  fTriggerTime(-1),
  fErrorCode(0),
  fCrateMask(0),
  fPreTriggerDigits(0),
  fPostTriggerDigits(0),
  fSpillStatus(-1),
  fSpillType(-1),
  fSpillTimeError(-1),
  fLiTrigger(0),
  fLiTime(-99999),
  fLiSubtractedTime(-99999),
  fLiRelativeTime(-99999),
  fLiCalibPoint(-1),
  fLiCalibType(-1),
  fLiPulserBox(-1),
  fLiPulserLed(-1),
  fLiPulseHeight(-1),
  fLiPulseWidth(-1),
  fDataQuality(CandDataQuality::kOkay)
{

}

CandDataQuality::CandDataQuality(AlgHandle& ah, CandHandle& ch, CandContext& cx) :
  CandBase(ah),
  fTime(-1),
  fRunType(-1),
  fRun(-1),
  fSubRun(-1),
  fTimeFrame(-1),
  fSnarl(-1),
  fTriggerSource(-1),
  fTriggerTime(-1),
  fErrorCode(0),
  fCrateMask(0),
  fPreTriggerDigits(0),
  fPostTriggerDigits(0),
  fSpillStatus(-1),
  fSpillType(-1),
  fSpillTimeError(-1),
  fLiTrigger(0),
  fLiTime(-99999),
  fLiSubtractedTime(-99999),
  fLiRelativeTime(-99999),
  fLiCalibPoint(-1),
  fLiCalibType(-1),
  fLiPulserBox(-1),
  fLiPulserLed(-1),
  fLiPulseHeight(-1),
  fLiPulseWidth(-1),
  fDataQuality(CandDataQuality::kOkay)
{
  SetLocalHandle(new CandDataQualityHandle(this));
  { CandDataQualityHandle cth(this); ch = cth; }
  ah.RunAlg(ch, cx);
}

CandDataQuality::CandDataQuality(const CandDataQuality& rhs) : 
  CandBase(rhs),
  fTime(rhs.fTime),
  fRunType(rhs.fRunType),
  fRun(rhs.fRun),
  fSubRun(rhs.fSubRun),
  fTimeFrame(rhs.fTimeFrame),
  fSnarl(rhs.fSnarl),
  fTriggerSource(rhs.fTriggerSource),
  fTriggerTime(rhs.fTriggerTime),
  fErrorCode(rhs.fErrorCode),
  fCrateMask(rhs.fCrateMask),
  fPreTriggerDigits(rhs.fPreTriggerDigits),
  fPostTriggerDigits(rhs.fPostTriggerDigits),
  fSnarlMultiplicity(rhs.fSnarlMultiplicity),
  fSpillStatus(rhs.fSpillStatus),
  fSpillType(rhs.fSpillType),
  fSpillTimeError(rhs.fSpillTimeError),
  fLiTrigger(rhs.fLiTrigger),
  fLiTime(rhs.fLiTime),
  fLiSubtractedTime(rhs.fLiSubtractedTime),
  fLiRelativeTime(rhs.fLiRelativeTime),
  fLiCalibPoint(rhs.fLiCalibPoint),
  fLiCalibType(rhs.fLiCalibType),
  fLiPulserBox(rhs.fLiPulserBox),
  fLiPulserLed(rhs.fLiPulserLed),
  fLiPulseHeight(rhs.fLiPulseHeight),
  fLiPulseWidth(rhs.fLiPulseWidth),
  fDataQuality(rhs.fDataQuality)
{

}

CandDataQuality::~CandDataQuality()
{

}

CandDataQuality* CandDataQuality::Dup() const
{
  CandDataQuality *cb = new CandDataQuality(*this);
  cb->CreateLocalHandle();
  TIter iterdau = GetDaughterIterator();
  CandHandle *dau;
  while ((dau=(CandHandle *) iterdau())) cb->AddDaughterLink(*dau);
  return cb;
}

void CandDataQuality::CreateLocalHandle()
{
  this->SetLocalHandle(new CandDataQualityHandle(this));
}

CandDataQualityHandle CandDataQuality::MakeCandidate(AlgHandle& ah, CandContext& cx)
{
  CandDataQualityHandle cdh;
  new CandDataQuality(ah,cdh,cx);
  return cdh;
}



