#ifndef RICHPAD_H
#define RICHPAD_H
#include "TObjArray.h"
#include "TObject.h"
class HRichPadCorner;
class HRichPad : public TObject {
private:
   Int_t fCornersNr;            
   TObjArray fPadCornersArray;  
   Float_t fX;                  
   Float_t fY;                  
   Int_t   fPadX;               
   Int_t   fPadY;               
   Int_t   fPadNr;              
   Int_t   fPadFlag;            
   Float_t fAmplitFraction;     
   Float_t fXlab[6];            
   Float_t fYlab[6];            
   Float_t fZlab[6];            
   Float_t fTheta;              
   Float_t fPhi[6];             
   Float_t fXmin;               
   Float_t fYmin;               
   Float_t fXmax;               
   Float_t fYmax;               
   Bool_t fPadActive;           
public:
   HRichPad();
   virtual ~HRichPad();
   HRichPad(const HRichPad& source);
   HRichPad& operator=(const HRichPad& source);
   void reset();
   void calcPadCenter();
   Bool_t isOut(Float_t x, Float_t y);
   Bool_t isOutX(Float_t x);
   Int_t addCorner(HRichPadCorner* corner);
   HRichPadCorner* getCorner(Int_t n);
   Int_t getCornersNr();
   Float_t getXmin();
   Float_t getYmin();
   Float_t getXmax();
   Float_t getYmax();
   Float_t getX();
   Float_t getY();
   Int_t  getPadX();
   Int_t  getPadY();
   Int_t  getPadNr();
   void   getXY(Float_t *pX, Float_t *pY);
   void   getPadXY(Int_t *pX, Int_t *pY);
   Int_t  getPadFlag();
   Bool_t getPadActive();
   Float_t getXlab(const Int_t sec);
   Float_t getYlab(const Int_t sec);
   Float_t getZlab(const Int_t sec);
   Float_t getTheta();
   Float_t getPhi(const Int_t sec);
   void getXYZlab(const Int_t sec, Float_t *pX, Float_t *pY, Float_t *pZ);
   void getAngles(const Int_t sec, Float_t *pTheta, Float_t *pPhi);
   Float_t getAmplitFraction();
   Int_t setCorner(HRichPadCorner* corner, Int_t n);
   void setXmin(Float_t xmin);
   void setYmin(Float_t ymin);
   void setXmax(Float_t xmax);
   void setYmax(Float_t ymax);
   void setX(const Float_t x);
   void setY(const Float_t y);
   void setPadX(Int_t padx);
   void setPadY(Int_t pady);
   void setPadNr(Int_t padnr);
   void setXY(const Float_t x, const Float_t y);
   void setPadXY(Int_t padx, Int_t pady);
   void setPadFlag(Int_t flag);
   void setPadActive(Bool_t active);
   void setAmplitFraction(Float_t ampl);
   void setXlab(const Int_t sec, const Float_t x);
   void setYlab(const Int_t sec, const Float_t y);
   void setZlab(const Int_t sec, const Float_t z);
   void setXYZlab(const Int_t sec, const Float_t x,
                  const Float_t y, const Float_t z);
   void setTheta(const Float_t thetha);
   void setPhi(const Int_t sec, const Float_t phi);
   void CalcNrtoXY(Int_t padsx);
   void CalcXYtoNr(Int_t padsx);
   ClassDef(HRichPad, 1)
};
inline Int_t HRichPad::getCornersNr()
{
   return fCornersNr;
}
inline Float_t HRichPad::getXmin()
{
   return fXmin;
}
inline Float_t HRichPad::getYmin()
{
   return fYmin;
}
inline Float_t HRichPad::getXmax()
{
   return fXmax;
}
inline Float_t HRichPad::getYmax()
{
   return fYmax;
}
inline Float_t HRichPad::getX()
{
   return fX;
}
inline Float_t HRichPad::getY()
{
   return fY;
}
inline Int_t  HRichPad::getPadX()
{
   return fPadX;
}
inline Int_t  HRichPad::getPadY()
{
   return fPadY;
}
inline Int_t  HRichPad::getPadNr()
{
   return fPadNr;
}
inline Int_t  HRichPad::getPadFlag()
{
   return fPadFlag;
}
inline Bool_t HRichPad::getPadActive()
{
   return fPadActive;
}
inline Float_t HRichPad::getXlab(const Int_t sec)
{
   return fXlab[sec];
}
inline Float_t HRichPad::getYlab(const Int_t sec)
{
   return fYlab[sec];
}
inline Float_t HRichPad::getZlab(const Int_t sec)
{
   return fZlab[sec];
}
inline Float_t HRichPad::getTheta()
{
   return fTheta;
}
inline Float_t HRichPad::getPhi(const Int_t sec)
{
   return fPhi[sec];
}
inline Float_t HRichPad::getAmplitFraction()
{
   return fAmplitFraction;
}
inline void HRichPad::setXmin(Float_t xmin)
{
   fXmin = xmin;
}
inline void HRichPad::setYmin(Float_t ymin)
{
   fYmin = ymin;
}
inline void HRichPad::setXmax(Float_t xmax)
{
   fXmax = xmax;
}
inline void HRichPad::setYmax(Float_t ymax)
{
   fYmax = ymax;
}
inline void HRichPad::setX(const Float_t x)
{
   fX = x;
}
inline void HRichPad::setY(const Float_t y)
{
   fY = y;
}
inline void HRichPad::setPadX(Int_t padx)
{
   fPadX = padx;
}
inline void HRichPad::setPadY(Int_t pady)
{
   fPadY = pady;
}
inline void HRichPad::setPadNr(Int_t padnr)
{
   fPadNr = padnr;
}
inline void HRichPad::setXY(const Float_t x, const Float_t y)
{
   fX = x;
   fY = y;
}
inline void HRichPad::setPadXY(Int_t padx, Int_t pady)
{
   fPadX = padx;
   fPadY = pady;
}
inline void HRichPad::setPadFlag(Int_t flag)
{
   fPadFlag = flag;
}
inline void HRichPad::setPadActive(Bool_t active)
{
   fPadActive = active;
}
inline void HRichPad::setAmplitFraction(Float_t ampl)
{
   fAmplitFraction = ampl;
}
inline void HRichPad::setXlab(const Int_t sec, const Float_t x)
{
   fXlab[sec] = x;
}
inline void HRichPad::setYlab(const Int_t sec, const Float_t y)
{
   fYlab[sec] = y;
}
inline void HRichPad::setZlab(const Int_t sec, const Float_t z)
{
   fZlab[sec] = z;
}
inline void HRichPad::setXYZlab(const Int_t sec, const Float_t x,
                                const Float_t y, const Float_t z)
{
   fXlab[sec] = x;
   fYlab[sec] = y;
   fZlab[sec] = z;
}
inline void HRichPad::setTheta(const Float_t thetha)
{
   fTheta = thetha;
}
inline void HRichPad::setPhi(const Int_t sec, const Float_t phi)
{
   fPhi[sec] = phi;
}
#endif // RICHPAD_H