#ifndef __HShowerHit_H
#define __HShowerHit_H
#pragma interface

//*-- AUTHOR : Leszek Kidon
//*-- Modified : 02/06/06 by Jacek Otwinowski
//    setTrueAddress() and getTrueAddress() functions added

#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,5) //ROOT extension

private:
       Float_t m_fX;  //local coord
       Float_t m_fY;
       Float_t m_fSigmaX;
       Float_t m_fSigmaY; 

       Float_t m_fLabX;  //spatial coord in lab
       Float_t m_fLabY;
       Float_t m_fLabZ;

       Float_t m_fRad; // sphere coord in lab
       Float_t m_fPhi;
       Float_t m_fTheta;

       Float_t m_fSum0;  //sum of charge of nine pads in pre
       Float_t m_fSum1;  //sum of charge of nine pads in post
       Float_t m_fSum2;  //sum of charge  of nine pads in post2
       Float_t m_fSum2_25;  //sum of charge of 25 pads in post2
       Float_t m_fSum2_N;  //normalized sum of charge of 25 pads to 9 pads
       Float_t m_fVar0;  //var. of sum of charge in pre
       Float_t m_fVar1;  //var. of sum of charge in post
       Float_t m_fVar2;  //var. of sum of charge in post2
       Float_t m_fLocalMax; //charge in local max - not used

       Float_t m_fSumDiff01;  //:= m_fSum1 - m_fSum0
       Float_t m_fSumDiff02;  //:= m_fSum2 - m_fSum0
       Float_t m_fSumDiff12;  //:= m_fSum2 - m_fSum1
       Float_t m_fShower; //value of shower definition. it's defined
                          //in HShowerCriterium

       //number of fired cells around local max and local max
       Int_t m_nClusterSize0;
       Int_t m_nClusterSize1;
       Int_t m_nClusterSize2;

       Char_t m_nSector; //position of pad
       Char_t m_nModule;
       Char_t m_nRow;
       Char_t m_nCol;

       Float_t m_fCharge; //charge in local max

       Int_t m_nAddress;  //combined address of position pads
};


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


Last change: Sat May 22 13:13:38 2010
Last generated: 2010-05-22 13:13

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.