#ifndef HBASETRACK_H
#define HBASETRACK_H
#include "TObject.h"
#include "hsymmat.h"
class HBaseTrack:public TObject
{
  protected:
   Float_t z;            
   Float_t r;            
   Float_t theta;        
   Float_t phi;          
   Short_t tofHitInd;    
   Short_t tofClustInd;  
   Short_t showerHitInd; 
   Short_t rpcClustInd;  
   Float_t p;            
   Float_t beta;         
   Float_t mass2;        
   Float_t tof;          
   Char_t polarity;      
   Char_t sector;        
   HSymMat6 cov;         
   Float_t metaEloss;    
   Float_t tarDist;
   Double_t tofdist;     
   Float_t qIOMatch;     
 public:
  HBaseTrack();
  HBaseTrack(HBaseTrack &);
  virtual ~HBaseTrack(){;};
  void     setIOMatching  (Float_t _qIOMatch)           { qIOMatch = _qIOMatch;}
  void     setZ           (Float_t Z,Float_t err)       { z = Z; cov.setErr(0,err);}
  void     setR           (Float_t R,Float_t err)       { r = R; cov.setErr(1,err);}
  void     setP           (Float_t P,Float_t err)       { p = P; cov.setErr(2,err);}
  void     setTheta       (Float_t THETA, Float_t err)  { theta = THETA; cov.setErr(3,err);}
  void     setPhi         (Float_t PHI,Float_t err)     { phi   = PHI;   cov.setErr(4,err);}
  void     setTofHitInd   (Short_t tof)                 { tofHitInd    = tof;}
  void     setTofClustInd (Short_t tof)                 { tofClustInd  = tof;}
  void     setShowerHitInd(Short_t shower)              { showerHitInd = shower;}
  void     setEmcClustInd (Short_t emc)                 { showerHitInd = emc;}
  void     setRpcClustInd (Short_t rpc)                 { rpcClustInd  = rpc;}
  void     setMass2       (Float_t MASS2,Float_t err)   { mass2 = MASS2; cov.setErr(5,err);}
  void     setTof         (Float_t TOF)                 { tof = TOF;}
  void     setPolarity    (Char_t POLARYTY)             { polarity = POLARYTY;}
  void     setSector      (Char_t SECTOR)               { sector = SECTOR;}
  void     setBeta        (Float_t BETA)                { beta = BETA;}
  void     setMetaEloss   (Float_t e)                   { metaEloss = e;}
  void     setTarDist     (Float_t _tarDist)            { tarDist = _tarDist;}
  void     setTofDist     (Double_t d)                  { tofdist = d; }
  Float_t  getIOMatch     (void) const                  { return qIOMatch; }
  Float_t  getIOMatching  (void) const                  { return qIOMatch; }
  Float_t  getZ           (void) const                  { return z;}
  Float_t  getErrZ        (void)                        { return cov.getErr(0);}
  Float_t  getR           (void) const                  { return r;}
  Float_t  getErrR        (void)                        { return cov.getErr(1);}
  Float_t  getTheta       (void) const                  { return theta;}
  Float_t  getErrTheta    (void)                        { return cov.getErr(3);}
  Float_t  getPhi         (void) const                  { return phi;}
  Float_t  getErrPhi      (void)                        { return cov.getErr(4);}
  Bool_t   isOverlap      (void) const                  { return ((showerHitInd>-1 || rpcClustInd>-1) && (tofHitInd>-1 || tofClustInd>-1) ) ? kTRUE:kFALSE; }
  Int_t    getSystem      (void) const                  { return ( tofHitInd>-1 || tofClustInd>-1 ) ? 1 : ((showerHitInd>-1 || rpcClustInd>-1) ? 0:-1); } 
  Short_t  getShowerHitInd(void) const                  { return showerHitInd;}
  Short_t  getEmcClustInd (void) const                  { return showerHitInd;}
  Short_t  getTofHitInd   (void) const                  { return tofHitInd;}
  Short_t  getTofClustInd (void) const                  { return tofClustInd;}
  Short_t  getRpcClustInd (void) const                  { return rpcClustInd;}
  Float_t  getP           (void) const                  { return p;}
  Float_t  getErrP        (void)                        { return cov.getErr(2);}
  Float_t  getMass2       (void)                        { return mass2;}
  Float_t  getErrMass2    (void)                        { return cov.getErr(5);}
  Float_t  getTof         (void) const                  { return tof;}
  Char_t   getPolarity    (void) const                  { return polarity;}
  Char_t   getSector      (void) const                  { return sector;}
  Float_t  getBeta        (void) const                  { return beta;}
  Float_t  getMetaEloss   (void) const                  { return metaEloss;}
  HSymMat &getCovariance  (void)                        { return cov; }
  Float_t  getTarDist     (void) const                  { return tarDist;}
  Double_t getTofDist     (void)                        { return tofdist; }
   
  ClassDef(HBaseTrack,2)
};
#endif