#ifndef HMDCWIREFIT_H
#define HMDCWIREFIT_H
#include "TObject.h"
#include "TMath.h"
class HMdcWireFit : public TObject {
protected:
  
  Char_t  sec;           
  Char_t  mod;           
  Char_t  layer;         
  Short_t cell;          
  Char_t  timeNum;       
  
  
  Float_t tdcTimeCal1;   
  Float_t tdcTime;       
  Float_t dev;           
  Float_t weight;        
  Float_t driftTime;     
  Float_t fullTime;      
  Float_t minDist;       
                         
  Float_t alpha;         
  Bool_t  isInCell;      
  Float_t tdcTimeErr;    
  Bool_t  isUsedInFit;   
  
  Float_t tot;           
  Float_t cellPath;      
public:
  HMdcWireFit()  {clear();}
  ~HMdcWireFit() {;}
  inline void clear();
  inline void setAddress(Char_t s,Char_t m,Char_t l,Short_t c);
  void    setSec(Char_t s)           {sec=s;}
  void    setMod(Char_t m)           {mod=m;}
  void    setLayer(Char_t l)         {layer=l;}
  void    setCell(Short_t c)         {cell=c;}
  void    setTimeNum(Char_t t)       {timeNum=t;}
  void    setDev(Float_t v)          {dev=v;}
  void    setWeight(Float_t v)       {weight=v;}
  void    setIsUsedFlag(Bool_t f)    {isUsedInFit=f;}
  void    setDriftTime(Float_t v)    {driftTime=v;}
  void    setFullTime(Float_t v)     {fullTime=v;}
  void    setCal1Time(Float_t v)     {tdcTimeCal1=v;}
  void    setTdcTime(Float_t v)      {tdcTime=v;}
  void    setMinDist(Float_t v)      {minDist=v;}
  void    setAlpha(Float_t v)        {alpha=v;}
  void    setIsInCell(Bool_t v)      {isInCell=v;}
  void    setTdcTimeErr(Float_t v)   {tdcTimeErr=v;}
  void    setToT(Float_t v)          {tot = v;}
  void    setCellPath(Float_t v)     {cellPath = v;}
  inline void getAddress(Int_t& s,Int_t& m,Int_t& l,Int_t& c) const;
  Char_t  getSec(void) const         {return sec;}
  Char_t  getMod(void) const         {return mod;}
  Char_t  getLayer(void) const       {return layer;}
  Short_t getCell(void) const        {return cell;}
  Char_t  getTimeNum(void) const     {return timeNum;}
  Float_t getDev(void) const         {return dev;}
  Float_t getWeight(void) const      {return weight;}
  Bool_t  isWrUsedInFit(void) const  {return isUsedInFit;}
  Float_t getDriftTime(void) const   {return driftTime;}
  Float_t getFullTime(void) const    {return fullTime;}
  Float_t getTimeOffset(void) const  {return fullTime-driftTime;}
  Float_t getTdcTime(void) const     {return tdcTime>0.f ? tdcTime : 0.f;}
  Float_t getTdcTimeF(void) const    {return tdcTime;}
  Float_t getSignalTime(void) const  {return tdcTimeCal1-tdcTime;}
  Float_t getCal1Time(void) const    {return tdcTimeCal1;}
  Float_t getMinDist(void) const     {return TMath::Abs(minDist);}
  Bool_t  isUnderWire(void) const    {return minDist < 0.;}
  Bool_t  isOverWire(void) const     {return minDist >= 0.;}
  Float_t getAlpha(void) const       {return alpha;}
  Bool_t  getIsInCell(void) const    {return isInCell;}
  Float_t getTdcTimeErr(void)const   {return tdcTimeErr;}
  Float_t getChi2(void) const        {Float_t c=dev/tdcTimeErr; return c*c;}
  Float_t getToT(void) const         {return tot;}
  Float_t getCellPath(void) const    {return cellPath;}
  virtual Bool_t isGeant(void) const {return kFALSE;}
  virtual void   print(void);
  ClassDef(HMdcWireFit,2)  
};
inline void HMdcWireFit::setAddress(Char_t s,Char_t m,Char_t l,Short_t c) {
  
  sec   = s;
  mod   = m;
  layer = l;
  cell  = c;
}
inline void HMdcWireFit::getAddress(Int_t& s,Int_t& m,Int_t& l,Int_t& c)
    const {
  
  s = sec;
  m = mod;
  l = layer;
  c = cell;
}
inline void HMdcWireFit::clear() {
  
  sec = mod = layer = timeNum = -1;
  cell       = -1;
  tdcTimeErr = 1.;
}
#endif /* HMDCWIREFIT_H */