#include "TString.h"
#include "hrpcdigipar.h"
#include "hpario.h"
#include "hdetpario.h"
#include "hparamlist.h"
using namespace std;
ClassImp(HRpcDigiPar)
HRpcDigiPar::HRpcDigiPar(const char* name,const char* title,
		const char* context) : HParCond(name,title,context) {
	clear();
}
void HRpcDigiPar::clear() {
	fVprop    = 0.;
	fS_x      = 0.;
	fS0_time  = 0.;
	fS1_time  = 0.;
	fS2_time  = 0.;
	fS3_time  = 0.;
	fT_off    = 0.;
	fQmean0   = 0.;
	fQmean1   = 0.;
	fQmean2   = 0.;
	fQwid0    = 0.;
	fQwid1    = 0.;
	fQwid2    = 0.;
	fEff0     = 0.;
	fEff1     = 0.;
	fEff2     = 0.;
	fEff3     = 0.;
	fEff4     = 0.;
	fEff5     = 0.;
	fTime2Tdc = 0.;
	fPedestal = 0.;
	fQtoW0    = 0.;
	fQtoW1    = 0.;
	fQtoW2    = 0.;
	fQtoW3    = 0.;
	fGap      = 0.;
        fMode     = 0;
	status=kFALSE;
	resetInputVersions();
}
void HRpcDigiPar::putParams(HParamList* l) {
	if (!l) return;
	l->add("fVprop"   ,fVprop);
	l->add("fS_x"     ,fS_x);
	l->add("fS_time"  ,fS0_time);
	l->add("fS1_time" ,fS1_time);
	l->add("fS2_time" ,fS2_time);
	l->add("fS3_time" ,fS3_time);
	l->add("fT_off"   ,fT_off);
	l->add("fQmean"   ,fQmean0);
	l->add("fQmean1"  ,fQmean1);
	l->add("fQmean2"  ,fQmean2);
	l->add("fQwid"    ,fQwid0);
	l->add("fQwid1"   ,fQwid1);
	l->add("fQwid2"   ,fQwid2);
	l->add("fEff"     ,fEff0);
	l->add("fEff1"    ,fEff1);
	l->add("fEff2"    ,fEff2);
	l->add("fEff3"    ,fEff3);
	l->add("fEff4"    ,fEff4);
	l->add("fEff5"    ,fEff5);
	l->add("fTime2Tdc",fTime2Tdc);
	l->add("fPedestal",fPedestal);
	l->add("fQtoW0"   ,fQtoW0);
	l->add("fQtoW1"   ,fQtoW1);
	l->add("fQtoW2"   ,fQtoW2);
	l->add("fQtoW3"   ,fQtoW3);
	l->add("fGap"     ,fGap);
	l->add("fMode"    ,fMode);
}
Bool_t HRpcDigiPar::getParams(HParamList* l) {
	if (!l) return kFALSE;
	if (!(l->fill("fVprop"   ,&fVprop)))    return kFALSE;
	if (!(l->fill("fS_x"     ,&fS_x)))      return kFALSE;
	if (!(l->fill("fS_time"  ,&fS0_time)))  return kFALSE;
	if (!(l->fill("fS1_time" ,&fS1_time)))  {Info("getParams","old database without S1_time"); fS1_time=0.;}
	if (!(l->fill("fS2_time" ,&fS2_time)))  {Info("getParams", "old database without S2_time"); fS2_time=0.;}
	if (!(l->fill("fS3_time" ,&fS3_time)))  {Info("getParams", "old database without S3_time"); fS3_time=0.;}
	if (!(l->fill("fT_off"   ,&fT_off)))    return kFALSE;
	if (!(l->fill("fQmean"   ,&fQmean0)))   return kFALSE;
	if (!(l->fill("fQmean1"  ,&fQmean1)))   {Info("getParams", "old database without Qmean1"); fQmean1=0.;}
	if (!(l->fill("fQmean2"  ,&fQmean2)))   {Info("getParams", "old database without Qmean2"); fQmean2=0.;}
	if (!(l->fill("fQwid"    ,&fQwid0)))    {Info("getParams", "old database without Qwid1"); fQwid0=0.;}
	if (!(l->fill("fQwid1"   ,&fQwid1)))    {Info("getParams", "old database without Qwid2"); fQwid1=0.;}
	if (!(l->fill("fQwid2"   ,&fQwid2)))    {Info("getParams", "old database without Qwid3"); fQwid2=0.;}
	if (!(l->fill("fEff"     ,&fEff0)))     return kFALSE;
	if (!(l->fill("fEff1"    ,&fEff1)))     {Info("getParams", "old database without Eff1"); fEff1=0.;}
	if (!(l->fill("fEff2"    ,&fEff2)))     {Info("getParams", "old database without Eff2"); fEff2=0.;}
	if (!(l->fill("fEff3"    ,&fEff3)))     {Info("getParams", "old database without Eff3"); fEff3=0.;}
	if (!(l->fill("fEff4"    ,&fEff4)))     {Info("getParams", "old database without Eff3"); fEff4=0.;}
	if (!(l->fill("fEff5"    ,&fEff5)))     {Info("getParams", "old database without Eff3"); fEff5=0.;}
	if (!(l->fill("fTime2Tdc",&fTime2Tdc))) return kFALSE;
	if (!(l->fill("fPedestal",&fPedestal))) return kFALSE;
	if (!(l->fill("fQtoW0"   ,&fQtoW0)))    return kFALSE;
	if (!(l->fill("fQtoW1"   ,&fQtoW1)))    return kFALSE;
	if (!(l->fill("fQtoW2"   ,&fQtoW2)))    return kFALSE;
	if (!(l->fill("fQtoW3"   ,&fQtoW3)))    return kFALSE;
	if (!(l->fill("fGap"     ,&fGap)))      return kFALSE;
	if (!(l->fill("fMode"    ,&fMode)))     {Info("getParams", "old database without fMode"); fMode=0;}
	return kTRUE;
}
void HRpcDigiPar::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);
      R__b >> fVprop;
      R__b >> fS_x;
      R__b >> fS0_time;
      if(R__v>1) {
        R__b >> fS1_time;
	R__b >> fS2_time;
	R__b >> fS3_time;
      } else {
        fS1_time=0.;
	fS2_time=0.;
	fS3_time=0.;
      }
      R__b >> fT_off;
      R__b >> fQmean0;
      if(R__v>1) {
        R__b >> fQmean1;
	R__b >> fQmean2;
        R__b >> fQwid0;
        R__b >> fQwid1;
	R__b >> fQwid2;
      } else {
        fQmean1=0.;
	fQmean2=0.;
        fQwid0=0.;
        fQwid1=0.;
	fQwid2=0.;
      }
      R__b >> fEff0;
      if(R__v>1) {
        R__b >> fEff1;
	R__b >> fEff2;
	R__b >> fEff3;
      } else {
        fEff1=0.;
	fEff2=0.;
	fEff3=0.;
      }
      if(R__v>2) {
        R__b >> fEff4;
	R__b >> fEff5;
      } else {
        fEff4=0.;
	fEff5=0.;
      }
      R__b >> fTime2Tdc;
      R__b >> fPedestal;
      R__b >> fQtoW0;
      R__b >> fQtoW1;
      R__b >> fQtoW2;
      R__b >> fQtoW3;
      R__b >> fGap;
      if(R__v>1) {
        R__b >> fMode;
      } else {
        fMode=0;
      }
      R__b.CheckByteCount(R__s, R__c, HRpcDigiPar::IsA());
   } else {
      R__c = R__b.WriteVersion(HRpcDigiPar::IsA(), kTRUE);
      HParCond::Streamer(R__b);
      R__b << fVprop;
      R__b << fS_x;
      R__b << fS0_time;
      R__b << fS1_time;
      R__b << fS2_time;
      R__b << fS3_time;
      R__b << fT_off;
      R__b << fQmean0;
      R__b << fQmean1;
      R__b << fQmean2;
      R__b << fQwid0;
      R__b << fQwid1;
      R__b << fQwid2;
      R__b << fEff0;
      R__b << fEff1;
      R__b << fEff2;
      R__b << fEff3;
      R__b << fEff4;
      R__b << fEff5;
      R__b << fTime2Tdc;
      R__b << fPedestal;
      R__b << fQtoW0;
      R__b << fQtoW1;
      R__b << fQtoW2;
      R__b << fQtoW3;
      R__b << fGap;
      R__b << fMode;
      R__b.SetByteCount(R__c, kTRUE);
   }
}