#include "hgeantrpc.h"
#include "TBuffer.h"
ClassImp(HGeantRpc)
HGeantRpc::HGeantRpc(void) {
  trackNumber       = 0;
  trackLength       = 0.0;
  loctrackLength    = 0.0;
  eHit              = 0.0;
  xHit              = 0.0;
  yHit              = 0.0;
  zHit              = 0.0;
  tofHit            = 0.0;
  momHit            = 0.0;
  thetaHit          = 0.0;
  phiHit            = 0.0;
  detectorID        = -999;
  
  loctrackLength1   = 0.0;
  eHit1             = 0.0;
  xHit1             = 0.0;
  yHit1             = 0.0;
  momHit1           = 0.0;
  loctrackLength2   = 0.0;
  eHit2             = 0.0;
  xHit2             = 0.0;
  yHit2             = 0.0;
  momHit2           = 0.0;
  loctrackLength3   = 0.0;
  eHit3             = 0.0;
  xHit3             = 0.0;
  yHit3             = 0.0;
  momHit3           = 0.0;
  HGeantRpc_version = -999;
}
HGeantRpc::~HGeantRpc(void) {
}
void HGeantRpc::setIncidence(Float_t athetaHit, Float_t aphiHit)
{
  thetaHit = athetaHit;
  phiHit   = aphiHit;
}
void HGeantRpc:: getIncidence(Float_t& athetaHit, Float_t& aphiHit)
{
  athetaHit = thetaHit;
  aphiHit   = phiHit;
}
void HGeantRpc:: setTLength(Float_t atrackLength, Float_t aloctrackLength)
{
  trackLength    = atrackLength;
  loctrackLength = aloctrackLength;
}
void HGeantRpc:: getTLength(Float_t& atrackLength, Float_t& aloctrackLength)
{
  atrackLength    = trackLength;
  aloctrackLength = loctrackLength;
}
void HGeantRpc::setHit(Float_t axHit, Float_t ayHit, Float_t azHit,
                       Float_t atofHit, Float_t amomHit, Float_t aeHit,
                       Float_t aloctrackLength)
{
  eHit           = aeHit;
  xHit           = axHit;
  yHit           = ayHit;
  zHit           = azHit;
  tofHit         = atofHit;
  momHit         = amomHit;
  loctrackLength = aloctrackLength;
}
void HGeantRpc::setHit(Float_t axHit, Float_t ayHit, Float_t azHit,
                       Float_t atofHit, Float_t amomHit, Float_t aeHit)
{
  eHit   = aeHit;
  xHit   = axHit;
  yHit   = ayHit;
  zHit   = azHit;
  tofHit = atofHit;
  momHit = amomHit;
}
void HGeantRpc:: getHit(Float_t& axHit, Float_t& ayHit, Float_t& azHit,
                        Float_t& atofHit, Float_t& amomHit, Float_t& aeHit)
{
  aeHit   = eHit;
  axHit   = xHit;
  ayHit   = yHit;
  azHit   = zHit;
  atofHit = tofHit;
  amomHit = momHit;
}
Float_t HGeantRpc::getlocTLengthGap(Int_t nGap)
{
  if(nGap==0) {
    return loctrackLength;
  } else if(nGap==1) {
    return loctrackLength1;
  } else if(nGap==2) {
    return loctrackLength2;
  } else if(nGap==3) {
    return loctrackLength3;
  }
  return 0.0;
}
void HGeantRpc::setGap(Int_t nGap, Float_t axHit, Float_t ayHit, Float_t amomHit,
                       Float_t aeHit, Float_t aloctrackLength)
{
  if(nGap==0) {
    loctrackLength  = aloctrackLength;
    eHit            = aeHit;
    xHit            = axHit;
    yHit            = ayHit;
    momHit          = amomHit;
  } else if(nGap==1) {
    xHit1           = axHit;
    yHit1           = ayHit;
    momHit1         = amomHit;
    eHit1           = aeHit;
    loctrackLength1 = aloctrackLength;
  } else if(nGap==2) {
    loctrackLength2 = aloctrackLength;
    eHit2           = aeHit;
    xHit2           = axHit;
    yHit2           = ayHit;
    momHit2         = amomHit;
  } else if(nGap==3) {
    loctrackLength3 = aloctrackLength;
    eHit3           = aeHit;
    xHit3           = axHit;
    yHit3           = ayHit;
    momHit3         = amomHit;
  }
}
void HGeantRpc::getGap(Int_t nGap, Float_t& axHit, Float_t& ayHit, Float_t& amomHit,
                       Float_t& aeHit, Float_t& aloctrackLength)
{
  if(nGap==0) {
    aloctrackLength = loctrackLength;
    aeHit           = eHit;
    axHit           = xHit;
    ayHit           = yHit;
    amomHit         = momHit;
  } else if(nGap==1) {
    aloctrackLength = loctrackLength1;
    aeHit           = eHit1;
    axHit           = xHit1;
    ayHit           = yHit1;
    amomHit         = momHit1;
  } else if(nGap==2) {
    aloctrackLength = loctrackLength2;
    aeHit           = eHit2;
    axHit           = xHit2;
    ayHit           = yHit2;
    amomHit         = momHit2;
  } else if(nGap==3) {
    aloctrackLength = loctrackLength3;
    aeHit           = eHit3;
    axHit           = xHit3;
    ayHit           = yHit3;
    amomHit         = momHit3;
  }
}
void HGeantRpc::getGap(Int_t nGap, Float_t& axHit, Float_t& ayHit, Float_t& amomHit,
                       Float_t& aeHit)
{
  if(nGap==0) {
    aeHit   = eHit;
    axHit   = xHit;
    ayHit   = yHit;
    amomHit = momHit;
  } else if(nGap==1) {
    aeHit   = eHit1;
    axHit   = xHit1;
    ayHit   = yHit1;
    amomHit = momHit1;
  } else if(nGap==2) {
    aeHit   = eHit2;
    axHit   = xHit2;
    ayHit   = yHit2;
    amomHit = momHit2;
  } else if(nGap==3) {
    aeHit   = eHit3;
    axHit   = xHit3;
    ayHit   = yHit3;
    amomHit = momHit3;
  }
}
void HGeantRpc::getGap(Int_t nGap, Float_t& axHit, Float_t& ayHit, Float_t& amomHit)
{
  if(nGap==0) {
    axHit   = xHit;
    ayHit   = yHit;
    amomHit = momHit;
  } else if(nGap==1) {
    axHit   = xHit1;
    ayHit   = yHit1;
    amomHit = momHit1;
  } else if(nGap==2) {
    axHit   = xHit2;
    ayHit   = yHit2;
    amomHit = momHit2;
  } else if(nGap==3) {
    axHit   = xHit3;
    ayHit   = yHit3;
    amomHit = momHit3;
  }
}
void HGeantRpc::getHit(Float_t& axHit, Float_t& ayHit, Float_t& azHit,
                       Float_t& atofHit, Float_t& amomHit, Float_t& aeHit,
                       Float_t& aloctrackLength)
{
  aloctrackLength = loctrackLength;
  aeHit           = eHit;
  axHit           = xHit;
  ayHit           = yHit;
  azHit           = zHit;
  atofHit         = tofHit;
  amomHit         = momHit;
}
void HGeantRpc::getHit(Float_t& axHit, Float_t& ayHit, Float_t& azHit,
                       Float_t& atofHit, Float_t& amomHit)
{
  axHit   = xHit;
  ayHit   = yHit;
  azHit   = zHit;
  atofHit = tofHit;
  amomHit = momHit;
}
void HGeantRpc::getHit(Float_t& axHit, Float_t& ayHit, Float_t& azHit,
                       Float_t& atofHit)
{
  axHit   = xHit;
  ayHit   = yHit;
  azHit   = zHit;
  atofHit = tofHit;
}
void HGeantRpc::getHitDigi(Float_t& axHit, Float_t& atofHit,
                           Float_t& amomHit, Float_t& aloctrackLength)
{
  aloctrackLength = loctrackLength;
  axHit           = xHit;
  atofHit         = tofHit;
  amomHit         = momHit;
}
void HGeantRpc::getCellAverage(Float_t gap, Float_t& axHit, Float_t& ayHit, Float_t& azHit,
                               Float_t& atofHit, Float_t& amomHit, Float_t& aeHit,
                               Float_t& aloctrackLength)
{
  aloctrackLength = 0.0;
  aeHit           = 0.0;
  axHit           = 0.0;
  ayHit           = 0.0;
  azHit           = zHit;
  atofHit         = tofHit;
  amomHit         = 0.0;
  UInt_t ii=0;
  if((momHit>0.)||(eHit!=0.)) {
    if(loctrackLength>=0.) {
      aloctrackLength += loctrackLength;
    } else {
      aloctrackLength += gap;
    }
    aeHit             += eHit;
    axHit             += xHit;
    ayHit             += yHit;
    amomHit           += momHit;
    ii++;
  }
  if((momHit1>0.)||(eHit1!=0.)) {
    if(loctrackLength1>=0.) {
      aloctrackLength += loctrackLength1;
    } else {
      aloctrackLength += gap;
    }
    aeHit             += eHit1;
    axHit             += xHit1;
    ayHit             += yHit1;
    amomHit           += momHit1;
    ii++;
  }
  if((momHit2>0.)||(eHit2!=0.)) {
    if(loctrackLength2>=0.) {
      aloctrackLength += loctrackLength2;
    } else {
      aloctrackLength += gap;
    }
    aeHit             += eHit2;
    axHit             += xHit2;
    ayHit             += yHit2;
    amomHit           += momHit2;
    ii++;
  }
  if((momHit3>0.)||(eHit3!=0.)) {
    if(loctrackLength3>=0.) {
      aloctrackLength += loctrackLength3;
    } else {
      aloctrackLength += gap;
    }
    aeHit             += eHit3;
    axHit             += xHit3;
    ayHit             += yHit3;
    amomHit           += momHit3;
    ii++;
  }
  if(ii>0) {
    Float_t aii=(Float_t)ii;
    axHit           /= aii;
    ayHit           /= aii;
    amomHit         /= aii;
    aeHit           /= aii;
    aloctrackLength /= aii;
  }
}
void HGeantRpc::getCellAverage(Float_t& axHit, Float_t& ayHit, Float_t& azHit,
                               Float_t& atofHit, Float_t& amomHit, Float_t& aeHit)
{
  aeHit      = 0.0;
  axHit      = 0.0;
  ayHit      = 0.0;
  azHit      = zHit;
  atofHit    = tofHit;
  amomHit    = 0.0;
  UInt_t ii=0;
  if((momHit>0.)||(eHit!=0.)) {
    aeHit   += eHit;
    axHit   += xHit;
    ayHit   += yHit;
    amomHit += momHit;
    ii++;
  }
  if((momHit1>0.)||(eHit1!=0.)) {
    aeHit   += eHit1;
    axHit   += xHit1;
    ayHit   += yHit1;
    amomHit += momHit1;
    ii++;
  }
  if((momHit2>0.)||(eHit2!=0.)) {
    aeHit   += eHit2;
    axHit   += xHit2;
    ayHit   += yHit2;
    amomHit += momHit2;
    ii++;
  }
  if((momHit3>0.)||(eHit3!=0.)) {
    aeHit   += eHit3;
    axHit   += xHit3;
    ayHit   += yHit3;
    amomHit += momHit3;
    ii++;
  }
  if(ii>0) {
    Float_t aii=(Float_t)ii;
    aeHit   /= aii;
    axHit   /= aii;
    ayHit   /= aii;
    amomHit /= aii;
  }
}
void HGeantRpc::getCellAverage(Float_t& axHit, Float_t& ayHit, Float_t& azHit,
                               Float_t& atofHit, Float_t& amomHit)
{
  axHit   = 0.0;
  ayHit   = 0.0;
  azHit   = zHit;
  atofHit = tofHit;
  amomHit = 0.0;
  UInt_t ii=0;
  if((momHit>0.)||(eHit!=0.)) {
    axHit   += xHit;
    ayHit   += yHit;
    amomHit += momHit;
    ii++;
  }
  if((momHit1>0.)||(eHit1!=0.)) {
    axHit   += xHit1;
    ayHit   += yHit1;
    amomHit += momHit1;
    ii++;
  }
  if((momHit2>0.)||(eHit2!=0.)) {
    axHit   += xHit2;
    ayHit   += yHit2;
    amomHit += momHit2;
    ii++;
  }
  if((momHit3>0.)||(eHit3!=0.)) {
    axHit   += xHit3;
    ayHit   += yHit3;
    amomHit += momHit3;
    ii++;
  }
  if(ii>0) {
    Float_t aii=(Float_t)ii;
    axHit   /= aii;
    ayHit   /= aii;
    amomHit /= aii;
  }
}
void HGeantRpc::getCellAverage(Float_t& axHit, Float_t& ayHit, Float_t& azHit,
                               Float_t& atofHit)
{
  axHit      = 0.0;
  ayHit      = 0.0;
  azHit      = zHit;
  atofHit    = tofHit;
  UInt_t ii=0;
  if((momHit>0.)||(eHit>0.)) {
    axHit   += xHit;
    ayHit   += yHit;
    ii++;
  }
  if((momHit1>0.)||(eHit1!=0.)) {
    axHit   += xHit1;
    ayHit   += yHit1;
    ii++;
  }
  if((momHit2>0.)||(eHit2!=0.)) {
    axHit   += xHit2;
    ayHit   += yHit2;
    ii++;
  }
  if((momHit3>0.)||(eHit3!=0.)) {
    axHit   += xHit3;
    ayHit   += yHit3;
    ii++;
  }
  if(ii>0) {
    Float_t aii=(Float_t)ii;
    axHit             /= aii;
    ayHit             /= aii;
  }
}
void HGeantRpc::getCellAverageDigi(Float_t gap, Float_t& axHit, Float_t& atofHit,
                                   Float_t& amomHit, Float_t& aloctrackLength)
{
  aloctrackLength      = 0.0;
  axHit                = 0.0;
  atofHit              = tofHit;
  amomHit              = 0.0;
  UInt_t ii=0;
  if((momHit>0.)||(eHit!=0.)) {
    if(loctrackLength>=0.) {
      aloctrackLength += loctrackLength;
    } else {
      aloctrackLength += gap;
    }
    axHit             += xHit;
    amomHit           += momHit;
    ii++;
  }
  if((momHit1>0.)||(eHit1!=0.)) {
    if(loctrackLength1>=0.) {
      aloctrackLength += loctrackLength1;
    } else {
      aloctrackLength += gap;
    }
    axHit             += xHit1;
    amomHit           += momHit1;
    ii++;
  }
  if((momHit2>0.)||(eHit2!=0.)) {
    if(loctrackLength2>=0.) {
      aloctrackLength += loctrackLength2;
    } else {
      aloctrackLength += gap;
    }
    axHit             += xHit2;
    amomHit           += momHit2;
    ii++;
  }
  if((momHit3>0.)||(eHit3!=0.)) {
    if(loctrackLength3>=0.) {
      aloctrackLength += loctrackLength3;
    } else {
      aloctrackLength += gap;
    }
    axHit             += xHit3;
    amomHit           += momHit3;
    ii++;
  }
  if(ii>0) {
    Float_t aii=(Float_t)ii;
    aloctrackLength   /= aii;
    axHit             /= aii;
    amomHit           /= aii;
  }
}
void HGeantRpc::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) { }
      HLinkedDataObject::Streamer(R__b);
      
      
      
      
      if(R__v==4) {
        
        
        
        R__b >> trackNumber;
        R__b >> trackLength;
        R__b >> loctrackLength;
        R__b >> eHit;
        R__b >> xHit;
        R__b >> yHit;
        R__b >> zHit;
        R__b >> tofHit;
        R__b >> momHit;
        R__b >> thetaHit;
        R__b >> phiHit;
        R__b >> detectorID;
        
        HGeantRpc_version = 4;
        
        loctrackLength1 = 0.0;
        eHit1           = 0.0;
        xHit1           = 0.0;
        yHit1           = 0.0;
        momHit1         = 0.0;
        loctrackLength2 = 0.0;
        eHit2           = 0.0;
        xHit2           = 0.0;
        yHit2           = 0.0;
        momHit2         = 0.0;
        loctrackLength3 = 0.0;
        eHit3           = 0.0;
        xHit3           = 0.0;
        yHit3           = 0.0;
        momHit3         = 0.0;
      } else {
        
        
        
        R__b >> trackNumber;
        R__b >> trackLength;
        R__b >> loctrackLength;
        R__b >> eHit;
        R__b >> xHit;
        R__b >> yHit;
        R__b >> zHit;
        R__b >> tofHit;
        R__b >> momHit;
        R__b >> thetaHit;
        R__b >> phiHit;
        R__b >> detectorID;
        R__b >> loctrackLength1;
        R__b >> eHit1;
        R__b >> xHit1;
        R__b >> yHit1;
        R__b >> momHit1;
        R__b >> loctrackLength2;
        R__b >> eHit2;
        R__b >> xHit2;
        R__b >> yHit2;
        R__b >> momHit2;
        R__b >> loctrackLength3;
        R__b >> eHit3;
        R__b >> xHit3;
        R__b >> yHit3;
        R__b >> momHit3;
        
        HGeantRpc_version = 5;
      }
      R__b.CheckByteCount(R__s, R__c, HGeantRpc::IsA());
   } else {
      R__c = R__b.WriteVersion(HGeantRpc::IsA(), kTRUE);
      HLinkedDataObject::Streamer(R__b);
      R__b << trackNumber;
      R__b << trackLength;
      R__b << loctrackLength;
      R__b << eHit;
      R__b << xHit;
      R__b << yHit;
      R__b << zHit;
      R__b << tofHit;
      R__b << momHit;
      R__b << thetaHit;
      R__b << phiHit;
      R__b << detectorID;
      R__b << loctrackLength1;
      R__b << eHit1;
      R__b << xHit1;
      R__b << yHit1;
      R__b << momHit1;
      R__b << loctrackLength2;
      R__b << eHit2;
      R__b << xHit2;
      R__b << yHit2;
      R__b << momHit2;
      R__b << loctrackLength3;
      R__b << eHit3;
      R__b << xHit3;
      R__b << yHit3;
      R__b << momHit3;
      R__b.SetByteCount(R__c, kTRUE);
   }
}