#ifndef __HShowerHit_H
#define __HShowerHit_H
#pragma interface
#include "TObject.h"
class HShowerHit : public TObject {
public:
        HShowerHit(){clear();}
        HShowerHit(const Float_t fCharge){clear();m_fCharge=fCharge;}
       ~HShowerHit() {}
        Int_t clear();
	inline Int_t calcAddress() const {
	    Char_t s = (m_nSector) ? m_nSector : 6;
	    return 100000 * s + 10000 * m_nModule + 100 * m_nRow + m_nCol;
	}
        Int_t  getAddress(void) {return calcAddress();}
        Char_t getSector(void) {return m_nSector;}
        Char_t getModule(void) {return m_nModule;}
        Char_t getRow(void) {return m_nRow;}
        Char_t getCol(void) {return m_nCol;}
        Float_t getSum(Int_t i);
        Float_t getSum25(){return m_fSum2_25;}
        Float_t getSumN(){return m_fSum2_N;}
        Float_t getVar(Int_t i);
        Int_t   getClusterSize(Int_t i);
        Float_t getLocalMax(){return m_fLocalMax;}
        void    getXY(Float_t *px, Float_t *py){*px = m_fX; *py = m_fY;}
        Float_t getZ(); 
        void    getSigmaXY(Float_t *px, Float_t *py){*px = m_fSigmaX; *py = m_fSigmaY;}
        Float_t getSigmaX(){return m_fSigmaX;}
        Float_t getSigmaY(){return m_fSigmaY;}
        void    getLabXYZ(Float_t *px, Float_t *py, Float_t *pz) {*px = m_fLabX; *py = m_fLabY;*pz = m_fLabZ;}
        void    getSphereCoord(Float_t *pr, Float_t *pphi, Float_t *ptheta) {*pr = m_fRad; *pphi = m_fPhi ; *ptheta = m_fTheta;}
        Float_t getCharge(){return m_fCharge;}
        Float_t getShower(){return m_fShower;}
        Float_t getSumDiff01(){return m_fSumDiff01;}
        Float_t getSumDiff02(){return m_fSumDiff02;}
        void  copyToTrueAddress(void) { m_nAddress = calcAddress();}
        void  setTrueAddress(Int_t address ) { m_nAddress = address;}
        Int_t getTrueAddress(void) { return m_nAddress;}
        void setSector(Char_t s) {m_nSector = s;}
        void setModule(Char_t m) {m_nModule = m;}
        void setRow(Char_t r) {m_nRow = r;}
        void setCol(Char_t c) {m_nCol = c;}
        void setSum(Int_t i, Float_t fSum);
        void setVar(Int_t i, Float_t fVar);
        void setClusterSize(Int_t i, Int_t cs);
        void setSum25(Float_t fSum);
        void setLocalMax(Float_t lmax){m_fLocalMax = lmax;}
        void setXY(Float_t x, Float_t y){m_fX = x; m_fY = y;}
        void setSigmaXY(Float_t x, Float_t y){m_fSigmaX = x; m_fSigmaY = y;}
        void setLabXYZ(Float_t x, Float_t y, Float_t z)
                                    {m_fLabX = x; m_fLabY = y;m_fLabZ = z;}
        void setSphereCoord(Float_t r, Float_t phi, Float_t theta)
                                    {m_fRad = r; m_fPhi = phi ; m_fTheta=theta;}
        void setCharge(Float_t fCharge){m_fCharge = fCharge;}
        void setShower(Float_t fShower){m_fShower = fShower;}
        virtual void updateCalc();
        Bool_t IsSortable() const { return kTRUE; }
        inline Int_t Compare(const TObject *obj) const;
        ClassDef(HShowerHit,1) 
private:
       Float_t m_fX;  
       Float_t m_fY;
       Float_t m_fSigmaX;
       Float_t m_fSigmaY; 
       Float_t m_fLabX;  
       Float_t m_fLabY;
       Float_t m_fLabZ;
       Float_t m_fRad; 
       Float_t m_fPhi;
       Float_t m_fTheta;
       Float_t m_fSum0;  
       Float_t m_fSum1;  
       Float_t m_fSum2;  
       Float_t m_fSum2_25;  
       Float_t m_fSum2_N;  
       Float_t m_fVar0;  
       Float_t m_fVar1;  
       Float_t m_fVar2;  
       Float_t m_fLocalMax; 
       Float_t m_fSumDiff01;  
       Float_t m_fSumDiff02;  
       Float_t m_fSumDiff12;  
       Float_t m_fShower; 
                          
       
       Int_t m_nClusterSize0;
       Int_t m_nClusterSize1;
       Int_t m_nClusterSize2;
       Char_t m_nSector; 
       Char_t m_nModule;
       Char_t m_nRow;
       Char_t m_nCol;
       Float_t m_fCharge; 
       Int_t m_nAddress;  
};
inline Int_t  HShowerHit::Compare(const TObject *obj) const {
    Int_t addr = calcAddress();
    if (addr == ((HShowerHit*)obj)->getAddress()) return 0;
    return (addr > ((HShowerHit*)obj)->getAddress()) ? 1 : -1;
}
#endif