00001
00002 #ifndef GEAR_VXDLayerLayoutImpl_H
00003 #define GEAR_VXDLayerLayoutImpl_H 1
00004
00005 #include "gear/VXDLayerLayout.h"
00006 #include <vector>
00007
00008 namespace gear {
00009
00019 class VXDLayerLayoutImpl : public VXDLayerLayout {
00020
00021 public:
00022
00024 struct Layer {
00025 int NLadders ;
00026 double Phi0 ;
00027 double Distance ;
00028 double Offset ;
00029 double Thickness ;
00030 double Length ;
00031 double Width ;
00032 double RadLength ;
00033 } ;
00034
00035 typedef std::vector<Layer> LayerVec ;
00036
00037
00038 virtual ~VXDLayerLayoutImpl() { ; }
00039
00042 virtual int getNLayers() const { return _lVec.size() ; }
00043
00047 virtual int getNLadders(int layerIndex) const { return _lVec.at( layerIndex ).NLadders ; }
00048
00052 virtual double getPhi0(int layerIndex) const { return _lVec.at( layerIndex ).Phi0 ; }
00053
00057 virtual double getLadderRadLength(int layerIndex) const { return _lVec.at( layerIndex ).RadLength ; }
00058
00062 virtual double getLadderDistance(int layerIndex) const { return _lVec.at( layerIndex ).Distance ; }
00063
00067 virtual double getLadderThickness(int layerIndex) const { return _lVec.at( layerIndex ).Thickness ; }
00068
00075 virtual double getLadderOffset(int layerIndex) const { return _lVec.at( layerIndex ).Offset ; }
00076
00080 virtual double getLadderWidth(int layerIndex) const { return _lVec.at( layerIndex ).Width ; }
00081
00085 virtual double getLadderLength(int layerIndex) const { return _lVec.at( layerIndex ).Length ; }
00086
00090 virtual double getSensitiveRadLength(int layerIndex) const { return _sVec.at( layerIndex ).RadLength ; }
00091
00094 virtual double getSensitiveDistance(int layerIndex) const { return _sVec.at( layerIndex ).Distance ; }
00095
00098 virtual double getSensitiveThickness(int layerIndex) const { return _sVec.at( layerIndex ).Thickness ; }
00099
00105 virtual double getSensitiveOffset(int layerIndex) const { return _sVec.at( layerIndex ).Offset ; }
00106
00109 virtual double getSensitiveWidth(int layerIndex) const { return _sVec.at( layerIndex ).Width ; }
00110
00113 virtual double getSensitiveLength(int layerIndex) const { return _sVec.at( layerIndex ).Length ; }
00114
00117 virtual void addLayer(int nLadders, double phi0,
00118
00119 double ladderDistance, double ladderOffset, double ladderThickness,
00120 double ladderLength, double ladderWidth, double ladderRadLength,
00121
00122 double sensitiveDistance, double sensitiveOffset, double sensitiveThickness,
00123 double sensitiveLength, double sensitiveWidth, double sensitiveRadLength);
00124
00127 virtual double getMaxRadius( int layerIndex , bool sensitive=false ) const ;
00128
00131 virtual double getStartInnerPhi( int layerIndex , bool sensitive=false ) const ;
00132
00135 virtual double getEndInnerPhi( int layerIndex , bool sensitive=false ) const ;
00136
00139 virtual double getStartOuterPhi( int layerIndex , bool sensitive=false ) const ;
00140
00143 virtual double getEndOuterPhi( int layerIndex , bool sensitive=false ) const ;
00144
00149 virtual double getThicknessForPhi( int layerIndex, double phi , bool sensitive=false ) const ;
00150
00151
00152 protected:
00153
00154
00155 LayerVec _lVec ;
00156
00157 LayerVec _sVec ;
00158
00159 private:
00160
00161
00162 };
00163 }
00164 #endif