#ifndef HMDCCLUSINF_H
#define HMDCCLUSINF_H
#include "TObject.h"
class HMdcClusInf : public TObject {
protected:
  Char_t fitStatus;       
  Char_t levelClFinding;  
  Char_t nModsClus;       
  Char_t nModsFit;        
  Short_t clusSize;       
  Short_t nMergClus;      
  Short_t nLayers;        
  Short_t nLayersFitted;  
  Short_t nDrTimes;       
  Short_t nDrTimesFitted; 
  Short_t indClus;        
  Short_t indClusFit;     
  Float_t sigma1;         
  Float_t sigma2;         
  Float_t alpha;          
  
  Float_t xHit;           
  Float_t yHit;           
  Float_t xClus;          
  Float_t yClus;          
  Float_t dedx;           
  Float_t dedxSigma;      
  UChar_t dedxNWire;      
  UChar_t dedxNWireCut;   
public:
    HMdcClusInf(void) : clusSize(0), nMergClus(0), nLayers(0), nLayersFitted(0),
        nDrTimes(0), nDrTimesFitted(0), indClus(-1), indClusFit(-1), dedx(0),
        dedxSigma(0), dedxNWire(0), dedxNWireCut(0) {;}
    ~HMdcClusInf(void) {;}
    void clear(void) {
	clusSize=nMergClus=nDrTimes=0;
	indClus=indClusFit=-1;
	dedx=dedxSigma=dedxNWire=dedxNWireCut=nLayers=nLayersFitted=0;
        xHit=yHit=xClus=yClus=0.;
    }
  void setIsFitted(void) {fitStatus=1;}
  void setIsNotFitted(void) {fitStatus=0;}
  void setFitStat(const Char_t st) {fitStatus=st;}
  void setLevelClFinding(const Char_t lv) {levelClFinding=lv;}
  void setNModInCl(const Char_t nm) {nModsClus=nm;}
  void setNModInFit(const Char_t nm) {nModsFit=nm;}
  void setClusSize(const Short_t sz) {clusSize=sz;}
  void setNMergClust(const Short_t nmc) {nMergClus=nmc;}
  void setNLayers(const Short_t nl) {nLayers=nl;}
  void setNLayersFitted(const Short_t nlf) {nLayersFitted=nlf;}
  void setNDrTimes(const Short_t ndt) {nDrTimes=ndt;}
  void setNDrTimesFitted(const Short_t nwf) {nDrTimesFitted=nwf;}
  void setClusIndex(const Short_t ind) {indClus=ind;}
  void setClusFitIndex(const Short_t ind) {indClusFit=ind;}
  void setSigma1(const Float_t par){sigma1=par;}
  void setSigma2(const Float_t par){sigma2=par;}
  void setAlpha(const Float_t al) {alpha=al;}
  void setShape(const Float_t s1,const Float_t s2,const Float_t al)
    {sigma1=s1; sigma2=s2;alpha=al;}
  void setdedx(Float_t dedxval){dedx=dedxval;}
  void setSigmadedx(Float_t sig){dedxSigma=sig;}
  void setNWirededx(UChar_t nw){dedxNWire=nw;}
  void setNWireCutdedx(UChar_t nw){dedxNWireCut=nw;}
  
  void setXYHit(Float_t x,Float_t y)  {xHit=x; yHit=y;} 
  void setXYClus(Float_t x,Float_t y) {xClus=x; yClus=y;}
  Float_t getdedx(){return dedx;}
  Float_t getSigmadedx(){return dedxSigma;}
  UChar_t getNWirededx(){return dedxNWire;}
  UChar_t getNWireCutdedx(){return dedxNWireCut;}
  Char_t  getFitStat(void) {return fitStatus;}
  Char_t  getLevelClFinding(void) {return levelClFinding;}
  Char_t  getNModInCl(void) {return nModsClus;}
  Char_t  getNModInFit(void) {return nModsFit;}
  Int_t   getClusSize(void) {return clusSize;}
  Short_t getNMergClust(void) {return nMergClus;}
  Short_t getNLayers() {return nLayers;}
  Short_t getNLayersFitted() {return nLayersFitted;}
  Short_t getNDrTimes(void) {return nDrTimes;}
  Short_t getNDrTimesFitted(void) {return nDrTimesFitted;}
  Short_t getClusIndex(void) {return indClus;}
  Short_t getClusFitIndex(void) {return indClusFit;}
  Float_t getSigma1(void) {return sigma1;}
  Float_t getSigma2(void) {return sigma2;}
  Float_t getAlpha(void) {return alpha;}
  void getShape(Float_t& s1,Float_t& s2,Float_t& al)
    {s1=sigma1; s2=sigma2; al=alpha;}
  Float_t getRatio(void) {return (sigma1>0.) ? sigma2/sigma1 : 0.;}
  Bool_t isClParEqual(HMdcClusInf *cf) {
    if(clusSize!=cf->clusSize || nDrTimes!=cf->nDrTimes || 
        nMergClus != cf->nMergClus || alpha!=cf->alpha) return kFALSE;
    return kTRUE;
  }
  
  Float_t getXHit(void)  {return xHit;}
  Float_t getYHit(void)  {return yHit;}
  Float_t getXClus(void) {return xClus;}
  Float_t getYClus(void) {return yClus;}
  virtual void print(void) const;
  ClassDef(HMdcClusInf,1) 
};
#endif  /* HMDCCLUSINF_H */