00001 #ifndef FixedPadSizeDiskLayout_h
00002 #define FixedPadSizeDiskLayout_h 1
00003
00004 #include <vector>
00005 #include "gear/PadRowLayout2D.h"
00006
00007
00008 namespace gear {
00009
00010
00011
00022 class FixedPadSizeDiskLayout : public PadRowLayout2D {
00023
00024 public:
00025
00027 struct Row{
00028 int NPad ;
00029 double RCenter ;
00030 double PhiPad ;
00031 } ;
00032
00033
00034 protected:
00035 double _rMin ;
00036 double _rMax ;
00037 double _rowHeight ;
00038 double _padWidth ;
00039 double _padHeight ;
00040 double _padGap ;
00041 int _nRow ;
00042 int _nPad ;
00043 std::vector<Row> _rows ;
00044 std::vector<double> _extent ;
00045 mutable std::vector< std::vector<int>* > _padIndices ;
00046
00047
00048 public:
00049
00056 FixedPadSizeDiskLayout( double rMin, double rMax, double padHeight, double PadWidth,
00057 int nRow=0 ,
00058 double padGap=0.) ;
00059
00061 virtual ~FixedPadSizeDiskLayout() ;
00062
00063
00065 virtual double getPadGap() const { return _padGap ; }
00066
00069 virtual double getFixedPadWidth() const { return _padWidth ; }
00070
00071
00074 virtual int getPadLayoutType() const { return PadRowLayout2D::POLAR ; }
00075
00078 virtual int getPadShape() const { return PadRowLayout2D::RECTANGLE ; }
00079
00082 virtual int getNPads() const { return _nPad ; }
00083
00086 virtual int getNRows() const ;
00087
00090 virtual double getRowHeight(int rowNumber) const { return _rowHeight ; }
00091
00094 virtual double getPadHeight(int padIndex) const { return _padHeight ; }
00095
00098 virtual double getPadWidth(int padIndex) const ;
00099
00102 virtual Point2D getPadCenter(int padIndex) const;
00103
00104
00108 virtual const std::vector<int>& getPadsInRow(int rowNumber) const ;
00109
00113 virtual const std::vector<double>& getPlaneExtent() const { return _extent ; }
00114
00117 virtual int getRowNumber(int padIndex) const { return ( 0xffff0000 & padIndex ) >> 16 ; }
00118
00121 virtual int getPadNumber(int padIndex) const { return ( 0x0000ffff & padIndex ) ; }
00122
00125 virtual int getPadIndex(int rowNum, int padNum) const;
00126
00130 virtual int getNearestPad(double c0, double c1) const;
00131
00134 virtual int getRightNeighbour(int padIndex) const;
00135
00138 virtual int getLeftNeighbour(int padIndex) const;
00139
00142 virtual bool isInsidePad(double c0, double c1, int padIndex) const;
00143
00146 virtual bool isInsidePad(double c0, double c1) const;
00147
00148 };
00149
00150 }
00151 #endif // ifndef FixedPadSizeDiskLayout_h