#include "hmetamatchpar.h"
#include "hparamlist.h"
ClassImp(HMetaMatchPar)
HMetaMatchPar::HMetaMatchPar(const Char_t* name,
                       const Char_t* title,
                       const Char_t* context)
           : HParCond(name,title,context) {
  
  Float_t a[6]={0.,0.,0.,0.,0.,0.};
  richThetaMinCut.Set(6,a);
  richThetaMaxCut.Set(6,a);
  richSigmaPhi.Set(6,a);
  richSigmaPhiOffset.Set(6,a);
  richQualityCut.Set(6,a);
  richIPUThetaMinCut.Set(6,a);
  richIPUThetaMaxCut.Set(6,a);
  richIPUSigmaPhi.Set(6,a);
  richIPUSigmaPhiOffset.Set(6,a);
  richIPUQualityCut.Set(6,a);
  showerSigmaXMdc.Set(6,a);
  showerSigmaYMdc.Set(6,a);
  showerSigmaXOffset.Set(6,a);
  showerSigmaYOffset.Set(6,a);
  showerQualityCut.Set(6,a);
  tofSigmaX.Set(6,a);
  tofSigmaY.Set(6,a);
  tofSigmaXOffset.Set(6,a);
  tofSigmaYOffset.Set(6,a);
  tofQualityCut.Set(6,a);
  rpcSigmaXMdc.Set(6,a);
  rpcSigmaYMdc.Set(6,a);
  rpcSigmaXOffset.Set(6,a);
  rpcSigmaYOffset.Set(6,a);
  rpcQualityCut.Set(6,a); 
}
void HMetaMatchPar::clear(void) {
  
  for(Int_t i=0;i<6;i++) {
    richThetaMinCut[i]       = 0.f;
    richThetaMaxCut[i]       = 0.f;
    richSigmaPhi[i]          = 0.f;
    richSigmaPhiOffset[i]    = 0.f;
    richQualityCut[i]        = 0.f;
    richIPUThetaMinCut[i]    = 0.f;
    richIPUThetaMaxCut[i]    = 0.f;
    richIPUSigmaPhi[i]       = 0.f;
    richIPUSigmaPhiOffset[i] = 0.f;
    richIPUQualityCut[i]     = 0.f;
    showerSigmaXMdc[i]       = 0.f;
    showerSigmaYMdc[i]       = 0.f;
    showerSigmaXOffset[i]    = 0.f;
    showerSigmaYOffset[i]    = 0.f;
    showerQualityCut[i]      = 0.f;
    tofSigmaX[i]             = 0.f;
    tofSigmaY[i]             = 0.f;
    tofSigmaXOffset[i]       = 0.f;
    tofSigmaYOffset[i]       = 0.f;
    tofQualityCut[i]         = 0.f;
    
    rpcSigmaXMdc[i]          = 0.f;
    rpcSigmaYMdc[i]          = 0.f;
    rpcSigmaXOffset[i]       = 0.f;
    rpcSigmaYOffset[i]       = 0.f;
    rpcQualityCut[i]         = 0.f;
  }
  status=kFALSE;
  resetInputVersions();
  changed=kFALSE;
}
void HMetaMatchPar::putParams(HParamList* l) {
  
  if (!l) return;
  l->add("richThetaMinCut",      richThetaMinCut);
  l->add("richThetaMaxCut",      richThetaMaxCut);
  l->add("richSigmaPhi",         richSigmaPhi);
  l->add("richSigmaPhiOffset",   richSigmaPhiOffset);
  l->add("richQualityCut",       richQualityCut);
  l->add("richIPUThetaMinCut",   richIPUThetaMinCut);
  l->add("richIPUThetaMaxCut",   richIPUThetaMaxCut);
  l->add("richIPUSigmaPhi",      richIPUSigmaPhi);
  l->add("richIPUSigmaPhiOffset",richIPUSigmaPhiOffset);
  l->add("richIPUQualityCut",    richIPUQualityCut);
  l->add("showerSigmaXMdc",      showerSigmaXMdc);
  l->add("showerSigmaYMdc",      showerSigmaYMdc);
  l->add("showerSigmaXOffset",   showerSigmaXOffset);
  l->add("showerSigmaYOffset",   showerSigmaYOffset);
  l->add("showerQualityCut",     showerQualityCut);
  l->add("tofSigmaX",            tofSigmaX);
  l->add("tofSigmaY",            tofSigmaY);
  l->add("tofSigmaXOffset",      tofSigmaXOffset);
  l->add("tofSigmaYOffset",      tofSigmaYOffset);
  l->add("tofQualityCut",        tofQualityCut);
    
  l->add("rpcSigmaXMdc",         rpcSigmaXMdc);
  l->add("rpcSigmaYMdc",         rpcSigmaYMdc);
  l->add("rpcSigmaXOffset",      rpcSigmaXOffset);
  l->add("rpcSigmaYOffset",      rpcSigmaYOffset);
  l->add("rpcQualityCut",        rpcQualityCut);
}
Bool_t HMetaMatchPar::getParams(HParamList* l) {
  
  if (!l) return kFALSE;
  if (!(l->fill("richThetaMinCut",      &richThetaMinCut)))       return kFALSE;
  if (!(l->fill("richThetaMaxCut",      &richThetaMaxCut)))       return kFALSE;
  if (!(l->fill("richSigmaPhi",         &richSigmaPhi)))          return kFALSE;
  if (!(l->fill("richSigmaPhiOffset",   &richSigmaPhiOffset)))    return kFALSE;
  if (!(l->fill("richQualityCut",       &richQualityCut)))        return kFALSE;
  if (!(l->fill("richIPUThetaMinCut",   &richIPUThetaMinCut)))    return kFALSE;
  if (!(l->fill("richIPUThetaMaxCut",   &richIPUThetaMaxCut)))    return kFALSE;
  if (!(l->fill("richIPUSigmaPhi",      &richIPUSigmaPhi)))       return kFALSE;
  if (!(l->fill("richIPUSigmaPhiOffset",&richIPUSigmaPhiOffset))) return kFALSE;
  if (!(l->fill("richIPUQualityCut",    &richIPUQualityCut)))     return kFALSE;  
  if (!(l->fill("showerSigmaXMdc",      &showerSigmaXMdc)))       return kFALSE;
  if (!(l->fill("showerSigmaYMdc",      &showerSigmaYMdc)))       return kFALSE;
  if (!(l->fill("showerSigmaXOffset",   &showerSigmaXOffset)))    return kFALSE;
  if (!(l->fill("showerSigmaYOffset",   &showerSigmaYOffset)))    return kFALSE;
  if (!(l->fill("showerQualityCut",     &showerQualityCut)))      return kFALSE;
  if (!(l->fill("tofSigmaX",            &tofSigmaX)))             return kFALSE;
  if (!(l->fill("tofSigmaY",            &tofSigmaY)))             return kFALSE;
  if (!(l->fill("tofSigmaXOffset",      &tofSigmaXOffset)))       return kFALSE;
  if (!(l->fill("tofSigmaYOffset",      &tofSigmaYOffset)))       return kFALSE;
  if (!(l->fill("tofQualityCut",        &tofQualityCut)))         return kFALSE;
  
  if (!(l->fill("rpcSigmaXMdc",         &rpcSigmaXMdc)))          return kFALSE;
  if (!(l->fill("rpcSigmaYMdc",         &rpcSigmaYMdc)))          return kFALSE;
  if (!(l->fill("rpcSigmaXOffset",      &rpcSigmaXOffset)))       return kFALSE;
  if (!(l->fill("rpcSigmaYOffset",      &rpcSigmaYOffset)))       return kFALSE;
  if (!(l->fill("rpcQualityCut",        &rpcQualityCut)))         return kFALSE;
  return kTRUE;
}
void HMetaMatchPar::Streamer(TBuffer &R__b)
{
   
   UInt_t R__s, R__c;
   if (R__b.IsReading()) {
      Version_t R__v = R__b.ReadVersion(&R__s, &R__c); if (R__v) { }
      HParCond::Streamer(R__b);
      richThetaMinCut.Streamer(R__b);
      richThetaMaxCut.Streamer(R__b);
      richSigmaPhi.Streamer(R__b);
      richSigmaPhiOffset.Streamer(R__b);
      richQualityCut.Streamer(R__b);
      richIPUThetaMinCut.Streamer(R__b);
      richIPUThetaMaxCut.Streamer(R__b);
      richIPUSigmaPhi.Streamer(R__b);
      richIPUSigmaPhiOffset.Streamer(R__b);
      richIPUQualityCut.Streamer(R__b);
      showerSigmaXMdc.Streamer(R__b);
      showerSigmaYMdc.Streamer(R__b);
      showerSigmaXOffset.Streamer(R__b);
      showerSigmaYOffset.Streamer(R__b);
      showerQualityCut.Streamer(R__b);
      tofSigmaX.Streamer(R__b);
      tofSigmaY.Streamer(R__b);
      tofSigmaXOffset.Streamer(R__b);
      tofSigmaYOffset.Streamer(R__b);
      tofQualityCut.Streamer(R__b);
      
      if(R__v > 1) {
        rpcSigmaXMdc.Streamer(R__b);   
        rpcSigmaYMdc.Streamer(R__b);   
        rpcSigmaXOffset.Streamer(R__b);
        rpcSigmaYOffset.Streamer(R__b);
        rpcQualityCut.Streamer(R__b);
      }
      
      R__b.CheckByteCount(R__s, R__c, HMetaMatchPar::IsA());
   } else {
      R__c = R__b.WriteVersion(HMetaMatchPar::IsA(), kTRUE);
      HParCond::Streamer(R__b);
      richThetaMinCut.Streamer(R__b);
      richThetaMaxCut.Streamer(R__b);
      richSigmaPhi.Streamer(R__b);
      richSigmaPhiOffset.Streamer(R__b);
      richQualityCut.Streamer(R__b);
      richIPUThetaMinCut.Streamer(R__b);
      richIPUThetaMaxCut.Streamer(R__b);
      richIPUSigmaPhi.Streamer(R__b);
      richIPUSigmaPhiOffset.Streamer(R__b);
      richIPUQualityCut.Streamer(R__b);
      showerSigmaXMdc.Streamer(R__b);
      showerSigmaYMdc.Streamer(R__b);
      showerSigmaXOffset.Streamer(R__b);
      showerSigmaYOffset.Streamer(R__b);
      showerQualityCut.Streamer(R__b);
      tofSigmaX.Streamer(R__b);
      tofSigmaY.Streamer(R__b);
      tofSigmaXOffset.Streamer(R__b);
      tofSigmaYOffset.Streamer(R__b);
      tofQualityCut.Streamer(R__b);
      
      rpcSigmaXMdc.Streamer(R__b);   
      rpcSigmaYMdc.Streamer(R__b);   
      rpcSigmaXOffset.Streamer(R__b);
      rpcSigmaYOffset.Streamer(R__b);
      rpcQualityCut.Streamer(R__b); 
      
      R__b.SetByteCount(R__c, kTRUE);
   }
}