00001
00002 #ifndef __SISETGEOMETRY_H
00003 #define __SISETGEOMETRY_H 1
00004
00005 #include "GaudiKernel/Service.h"
00006
00007 #include "TkrRecon/ITkrGeometrySvc.h"
00008 #include "TkrRecon/TkrAxis.h"
00009 #include "src/TkrDetGeo.h"
00010
00011 #include "xml/IFile.h"
00012
00013 #include <string>
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 class TkrGeometrySvc : public Service,
00026 virtual public ITkrGeometrySvc
00027
00028 {
00029 public:
00030
00032 TkrGeometrySvc(const std::string& name, ISvcLocator* pSvcLocator);
00033 virtual ~TkrGeometrySvc() {}
00034
00035 StatusCode initialize();
00036 StatusCode finalize();
00037
00038
00039 int geomType() {return m_geomType;}
00040
00041 int numXTowers() {return m_numX;}
00042 int numYTowers() {return m_numY;}
00043 int numViews() {return m_nviews;}
00044 int numLayers() {return m_nlayers;}
00045
00046
00047
00048
00049
00050
00051 int indMixed() {return m_indMixed;}
00052 int viewMixed() {return m_viewMixed;}
00053 int ladderMixed() {return m_ladderMixed;}
00054 int isizeMixed() {return m_isizeMixed;}
00055 int numPlanes() {return m_nlayers;}
00056
00057 double Z0() {return m_Z0;}
00058 double towerPitch() {return m_towerPitch;}
00059 double trayWidth() {return m_trayWidth;}
00060 double trayHeight() {return m_trayHeight;}
00061 double footHeight() {return m_footHeight;}
00062
00063 double ladderWidth() {return m_ladderWidth;}
00064 double ladderLength() {return m_ladderLength;}
00065 double ladderGap() {return m_ladderGap;}
00066 double ladderInnerGap() {return m_ladderInnerGap;}
00067 int ladderNStrips() {return m_ladderNStrips;}
00068
00069 double siStripPitch() {return m_siStripPitch;}
00070 double siResolution() {return m_siResolution;}
00071 double siThickness() {return m_siThickness;}
00072 double siDeadDistance() {return m_siDeadDistance;}
00073
00074 double thinConvHeight() {return m_radthickness[1];}
00075 double thickConvHeight() {return m_radthickness[2];}
00076
00077 double siX0() {return m_siX0;}
00078 double pbX0() {return m_pbX0;}
00079
00080
00081 int ilayer(int iplane) {return numPlanes()-iplane-1;}
00082
00083 tkrDetGeo getSiLayer(int ilayer, axis a, int tower = 0);
00084
00085 tkrDetGeo getSiLadder(int ilayer, axis a, int iladder, int tower = 0);
00086 tkrDetGeo getSiDice(int ilayer, axis a, int iladder, int idice, int tower = 0);
00087
00088
00089 double pbRadLen(int ilayer);
00090 double layerGap(int ilayer);
00091 int nLadders(int ilayer, axis a);
00092 double diceSize(int ilayer, axis a, int iladder);
00093 int nDices(int ilayer, axis a, int iladder);
00094
00095
00097 StatusCode queryInterface(const IID& riid, void** ppvUnknown);
00098
00099 static const InterfaceID& interfaceID() { return ITkrGeometrySvc::interfaceID(); }
00100
00102 const IID& type() const;
00103
00104
00105
00106 private:
00107
00108 std::string m_xmlFile;
00109
00110 int m_geomType;
00111
00112 int m_numX;
00113 int m_numY;
00114 int m_nviews;
00115 int m_nlayers;
00116
00117
00118
00119
00120
00121
00122 double m_Z0;
00123
00124 double m_towerPitch;
00125 double m_trayWidth;
00126 double m_trayHeight;
00127 double m_footHeight;
00128
00129 double m_ladderWidth;
00130 double m_ladderLength;
00131 double m_ladderGap;
00132 double m_ladderInnerGap;
00133 int m_ladderNStrips;
00134
00135 double m_siStripPitch;
00136 double m_siResolution;
00137 double m_siThickness;
00138 double m_siDeadDistance;
00139
00140
00141
00142
00143
00144
00145 double m_siX0;
00146 double m_pbX0;
00147
00148 xml::IFile::intVector m_layertype;
00149 xml::IFile::intVector m_nladders;
00150
00151 xml::IFile::intVector m_iradthickness;
00152 xml::IFile::doubleVector m_radthickness;
00153
00154
00155 xml::IFile::intVector m_izgap;
00156 xml::IFile::doubleVector m_zgap;
00157
00158
00159 xml::IFile::intVector m_iXsize;
00160 xml::IFile::intVector m_iYsize;
00161 xml::IFile::doubleVector m_diesize;
00162 xml::IFile::intVector m_ndies;
00163
00164
00165
00166 int m_indMixed;
00167 int m_viewMixed;
00168 int m_ladderMixed;
00169 int m_isizeMixed;
00170 };
00171
00172 #endif