#include "CandDataQualityHandle.h"
#include "CandDeadChipHandle.h"

#include "MessageService/MsgService.h"

ClassImp(CandDataQualityHandle)

CandDataQualityHandle::CandDataQualityHandle()
{

}

CandDataQualityHandle::CandDataQualityHandle(const CandDataQualityHandle& cdh) :
  CandHandle(cdh)
{

}
CandDataQualityHandle::CandDataQualityHandle(CandDataQuality* cd) :
  CandHandle(cd)
{

}

CandDataQualityHandle::~CandDataQualityHandle()
{

}

CandDataQualityHandle* CandDataQualityHandle::DupHandle() const
{
  return new CandDataQualityHandle(*this);
}

Int_t CandDataQualityHandle::GetTime() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fTime;
}

Int_t CandDataQualityHandle::GetRunType() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fRunType;
}

Int_t CandDataQualityHandle::GetRun() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fRun;
}

Int_t CandDataQualityHandle::GetSubRun() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fSubRun;
}

Int_t CandDataQualityHandle::GetTimeFrame() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fTimeFrame;
}

Int_t CandDataQualityHandle::GetSnarl() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fSnarl;
}

Int_t CandDataQualityHandle::GetTriggerSource() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fTriggerSource;
}

Int_t CandDataQualityHandle::GetTriggerTime() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fTriggerTime;
}

Int_t CandDataQualityHandle::GetErrorCode() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fErrorCode;
}

Int_t CandDataQualityHandle::GetCrateMask() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fCrateMask;
}

Int_t CandDataQualityHandle::GetPreTriggerDigits() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fPreTriggerDigits;
}

Int_t CandDataQualityHandle::GetPostTriggerDigits() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fPostTriggerDigits;
}

Int_t CandDataQualityHandle::GetSnarlMultiplicity() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fSnarlMultiplicity;
}

Int_t CandDataQualityHandle::GetSpillStatus() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fSpillStatus;
}

Int_t CandDataQualityHandle::GetSpillType() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fSpillType;
}

Int_t CandDataQualityHandle::GetSpillTimeError() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fSpillTimeError;
}

Int_t CandDataQualityHandle::GetLiTrigger() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fLiTrigger;
}

Int_t CandDataQualityHandle::GetLiTime() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fLiTime;
}

Int_t CandDataQualityHandle::GetLiSubtractedTime() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fLiSubtractedTime;
}

Int_t CandDataQualityHandle::GetLiRelativeTime() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fLiRelativeTime;
}

Int_t CandDataQualityHandle::GetLiCalibPoint() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fLiCalibPoint;
}

Int_t CandDataQualityHandle::GetLiCalibType() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fLiCalibType;
}

Int_t CandDataQualityHandle::GetLiPulserBox() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fLiPulserBox;
}

Int_t CandDataQualityHandle::GetLiPulserLed() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fLiPulserLed;
}

Int_t CandDataQualityHandle::GetLiPulseHeight() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fLiPulseHeight;
}

Int_t CandDataQualityHandle::GetLiPulseWidth() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fLiPulseWidth;
}

CandDataQuality::DataQuality_t CandDataQualityHandle::GetDataQuality() const
{
  return dynamic_cast<const CandDataQuality*>(GetCandBase())->fDataQuality;
}

void CandDataQualityHandle::SetTime(Int_t time)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fTime=time;
}

void CandDataQualityHandle::SetRunType(Int_t runtype)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fRunType=runtype;
}

void CandDataQualityHandle::SetRun(Int_t run)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fRun=run;
}

void CandDataQualityHandle::SetSubRun(Int_t subrun)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fSubRun=subrun;
}

void CandDataQualityHandle::SetTimeFrame(Int_t timeframe)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fTimeFrame=timeframe;
}

void CandDataQualityHandle::SetSnarl(Int_t snarl)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fSnarl=snarl;
}

void CandDataQualityHandle::SetTriggerSource(Int_t trigsource)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fTriggerSource=trigsource;
}

void CandDataQualityHandle::SetTriggerTime(Int_t trigtime)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fTriggerTime=trigtime;
}

void CandDataQualityHandle::SetErrorCode(Int_t errorcode)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fErrorCode=errorcode;
}

void CandDataQualityHandle::SetCrateMask(Int_t cratemask)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fCrateMask=cratemask;
}

void CandDataQualityHandle::SetPreTriggerDigits(Int_t predigits)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fPreTriggerDigits=predigits;
}

void CandDataQualityHandle::SetPostTriggerDigits(Int_t postdigits)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fPostTriggerDigits=postdigits;
}

void CandDataQualityHandle::SetSnarlMultiplicity(Int_t snarldigits)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fSnarlMultiplicity=snarldigits;
}

void CandDataQualityHandle::SetSpillStatus(Int_t spillstatus)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fSpillStatus=spillstatus;
}

void CandDataQualityHandle::SetSpillType(Int_t spilltype)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fSpillType=spilltype;
}

void CandDataQualityHandle::SetSpillTimeError(Int_t gpserror)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fSpillTimeError=gpserror;
}

void CandDataQualityHandle::SetLiTrigger(Int_t litrigger)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fLiTrigger=litrigger;
}

void CandDataQualityHandle::SetLiTime(Int_t litime)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fLiTime=litime;
}

void CandDataQualityHandle::SetLiSubtractedTime(Int_t lisubtime)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fLiSubtractedTime=lisubtime;
}

void CandDataQualityHandle::SetLiRelativeTime(Int_t lireltime)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fLiRelativeTime=lireltime;
}

void CandDataQualityHandle::SetLiCalibPoint(Int_t calibpoint)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fLiCalibPoint=calibpoint;
}

void CandDataQualityHandle::SetLiCalibType(Int_t calibtype)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fLiCalibType=calibtype;
}

void CandDataQualityHandle::SetLiPulserBox(Int_t box)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fLiPulserBox=box;
}

void CandDataQualityHandle::SetLiPulserLed(Int_t led)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fLiPulserLed=led;
}

void CandDataQualityHandle::SetLiPulseHeight(Int_t pulseheight)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fLiPulseHeight=pulseheight;
}

void CandDataQualityHandle::SetLiPulseWidth(Int_t pulsewidth)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fLiPulseWidth=pulsewidth;
}

void CandDataQualityHandle::SetDataQuality(CandDataQuality::DataQuality_t dataquality)
{
  dynamic_cast<CandDataQuality*>(GetOwnedCandBase())->fDataQuality=dataquality;
}

Int_t CandDataQualityHandle::GetColdChips() const
{
  Int_t ncoldchips=0;

  TIter chipitr(this->GetDaughterIterator());
  while(CandDeadChipHandle* cdh = dynamic_cast<CandDeadChipHandle*>(chipitr())){
    if( (cdh->GetChipStatus()&CandDeadChip::kCold)==(CandDeadChip::kCold) ){
      ncoldchips++;
    }
  }

  return ncoldchips;
}
 
Int_t CandDataQualityHandle::GetHotChips() const
{
  Int_t nhotchips=0;

  TIter chipitr(this->GetDaughterIterator());
  while(CandDeadChipHandle* cdh = dynamic_cast<CandDeadChipHandle*>(chipitr())){
    if( (cdh->GetChipStatus()&CandDeadChip::kHot)==(CandDeadChip::kHot) ){
      nhotchips++;
    }
  }

  return nhotchips;
}
 
Int_t CandDataQualityHandle::GetBusyChips() const
{
  Int_t nbusychips=0;

  TIter chipitr(this->GetDaughterIterator());
  while(CandDeadChipHandle* cdh = dynamic_cast<CandDeadChipHandle*>(chipitr())){
    if( (cdh->GetChipStatus()&CandDeadChip::kBusy)==(CandDeadChip::kBusy) ){
      nbusychips++;
    }
  }

  return nbusychips;
}
  
Int_t CandDataQualityHandle::GetReadoutErrors() const
{
  Int_t nreadouterrors=0;

  TIter chipitr(this->GetDaughterIterator());
  while(CandDeadChipHandle* cdh = dynamic_cast<CandDeadChipHandle*>(chipitr())){
    if( (cdh->GetChipStatus()&CandDeadChip::kError)==(CandDeadChip::kError) ){
      nreadouterrors++;
    }
  }

  return nreadouterrors;
}

CandDeadChip::ChipStatus_t CandDataQualityHandle::GetChipStatus(RawChannelId rawch) const
{
  CandDeadChip::ChipStatus_t chipstatus(CandDeadChip::kOkay);
  
  TIter chipitr(this->GetDaughterIterator());
  while(CandDeadChipHandle* cdh = dynamic_cast<CandDeadChipHandle*>(chipitr())){
    if( cdh->IsSameChip(rawch) ){
      chipstatus = cdh->GetChipStatus();
    }
  }

  return chipstatus;
}

XXXITRIMP(CandDataQualityHandle)

