Main Page   Namespace List   Class Hierarchy   Compound List   File List   Compound Members   File Members  

TkrGeometrySvc.h

Go to the documentation of this file.
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 //   TkrGeometrySvc
00018 //
00019 //       Tracker Geometry Service. Used to keep track of the 
00020 //   particular tracker geometry in use
00021 //----------------------------------------------
00022 //             Tracy Usher, SLAC, 2/28/01
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     //Retrieve stored information
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     /* no longer used
00047     int    numPbLayers()     {return m_nPbLayers;}
00048     int    numSuperGLayers() {return m_nSuperGLayers;}
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     // planes and layers differ in the ordering
00081     int ilayer(int iplane)   {return numPlanes()-iplane-1;}
00082     
00083     tkrDetGeo getSiLayer(int ilayer, axis a, int tower = 0);
00084     //tkrDetGeo getPbLayer(int ilayer, int tower = 0);
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     // geometry related access
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;  // File name for constants
00109 
00110     int    m_geomType;
00111     
00112     int    m_numX;          // number of Towers in X
00113     int    m_numY;          // number of Towers in Y
00114     int    m_nviews;        // two views, always!
00115     int    m_nlayers;       // total number of x-y layers
00116 
00117     /* no longer used
00118     int    m_nPbLayers;     // tot number of layers with radiator (no longer used)
00119     int    m_nSuperGLayers; // number of superglast layers (no longer used)
00120     */
00121 
00122     double m_Z0;            // Tower coord of the middle of the bottom Si layer
00123     
00124     double m_towerPitch;    // Distance between centers of adjacent towers
00125     double m_trayWidth;
00126     double m_trayHeight;    // from top of one tray to the next (actually pitch)
00127     double m_footHeight;     // Height of foot under bottom tray
00128     
00129     double m_ladderWidth;
00130     double m_ladderLength;
00131     double m_ladderGap;     // gap between adjacent ladders
00132     double m_ladderInnerGap;// gap between SSDs on the same ladder
00133     int    m_ladderNStrips; 
00134     
00135     double m_siStripPitch;
00136     double m_siResolution;
00137     double m_siThickness;
00138     double m_siDeadDistance;
00139 
00140     /*  Obsolete -- use m_radthickness below...
00141     double m_thinConvHeight;    // height of thin converter
00142     double m_thickConvHeight;   // height of thick converter
00143     */
00144     
00145     double m_siX0;          // radiation length of silicon    
00146     double m_pbX0;          // radiation length of "lead" (may be tungsten)
00147 
00148     xml::IFile::intVector m_layertype;    // X-Y (0) or Y-X (1)
00149     xml::IFile::intVector m_nladders;     // number of ladders filled vs layer
00150 
00151     xml::IFile::intVector m_iradthickness; // index of radiator thickness vs layer
00152     xml::IFile::doubleVector m_radthickness; // radiator thicknesses
00153 
00154 
00155     xml::IFile::intVector m_izgap;        // index to zgap vs layer
00156     xml::IFile::doubleVector m_zgap;      // list of gaps
00157 
00158     // this "automates" the die sizes, including the horrible mixed layer
00159     xml::IFile::intVector m_iXsize;       // index to size of dies in X layers
00160     xml::IFile::intVector m_iYsize;       // index to size of dies in Y layers
00161     xml::IFile::doubleVector m_diesize;   // list of die sizes
00162     xml::IFile::intVector m_ndies;        // list if number of dies/ladder (goes with die size)
00163 
00164     // the horrible mixed tray
00165     
00166     int    m_indMixed;      // layer index of mixed tray
00167     int    m_viewMixed;     // view containing mixed ladders
00168     int    m_ladderMixed;   // ladder which is different
00169     int    m_isizeMixed;    // index to die size on different ladder
00170 };
00171 
00172 #endif

Generated at Wed Nov 21 12:21:21 2001 by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000