00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef ST_TPC_DB_GEOMETRY_HH
00035 #define ST_TPC_DB_GEOMETRY_HH
00036 #include <Stiostream.h>
00037 #include <vector>
00038
00039 #if defined __SUNPRO_CC && __SUNPRO_CC >= 0x500
00040 using std::vector;
00041 #endif
00042
00043 #include "StGlobals.hh"
00044 #include "StThreeVector.hh"
00045 #include "StTpcGeometry.hh"
00046
00047 class StTpcDb;
00048 class StTpcDbGeometry : public StTpcGeometry {
00049
00050 public:
00051 ~StTpcDbGeometry();
00052
00053
00054
00055 static StTpcGeometry* instance();
00056 static StTpcGeometry* instance(StTpcDb*);
00057
00058
00059 int numberOfRows() const;
00060 int numberOfInnerRows() const;
00061 int numberOfInnerRows48() const;
00062 int numberOfInnerRows52() const;
00063 int numberOfOuterRows() const;
00064 int numberOfPadsAtRow(int) const;
00065 double radialDistanceAtRow(int) const;
00066 double innerSectorRowPitch1() const;
00067 double innerSectorRowPitch2() const;
00068 double outerSectorRowPitch() const;
00069 double ioSectorSpacing() const;
00070
00071 int numberOfSectors() const;
00072
00073 int numberOfTimeBuckets() const;
00074
00075
00076 double innerSectorPadWidth() const;
00077 double outerSectorPadWidth() const;
00078 double innerSectorPadLength() const;
00079 double outerSectorPadLength() const;
00080 double innerSectorPadPitch() const;
00081 double outerSectorPadPitch() const;
00082
00083
00084 double anodeWireRadius() const;
00085 double frischGridWireRadius() const;
00086 double gateWireRadius() const;
00087
00088 double anodeWirePitch() const;
00089 double frischGridPitch() const;
00090 double gatePitch() const;
00091
00092 double innerSectorAnodeWirePadPlaneSeparation() const;
00093 double innerSectorFrischGridPadPlaneSeparation() const;
00094 double innerSectorGatingGridPadPlaneSeparation() const;
00095
00096 double outerSectorAnodeWirePadPlaneSeparation() const;
00097 double outerSectorFrischGridPadPlaneSeparation() const;
00098 double outerSectorGatingGridPadPlaneSeparation() const;
00099
00100 int numberOfInnerSectorAnodeWires() const;
00101 double firstInnerSectorAnodeWire() const;
00102 double lastInnerSectorAnodeWire() const;
00103 double innerSectorAnodeWire(int) const;
00104
00105
00106 int numberOfOuterSectorAnodeWires() const;
00107 double firstOuterSectorAnodeWire() const;
00108 double lastOuterSectorAnodeWire() const;
00109 double outerSectorAnodeWire(int) const;
00110
00111 double innerSectorEdge() const;
00112 double outerSectorEdge() const;
00113
00114
00115 double endCapZ() const;
00116 double driftDistance() const;
00117 double ifcRadius() const;
00118 double ofcRadius() const;
00119 double frischGrid() const;
00120 double innerSectorzOffSet() const;
00121 double outerSectorzOffSet() const;
00122
00123 bool acceptance(StThreeVector<StDouble>&) const;
00124
00125
00126 void print(ostream& os = cout) const;
00127
00128 private:
00129
00130 StTpcDbGeometry(StTpcDb*);
00131
00132 private:
00133 static StTpcGeometry* mInstance;
00134 StTpcDb* gTpcDbPtr;
00135
00136 int mPadRows;
00137 int mInnerPadRows;
00138 int mInnerPadRows48;
00139 int mInnerPadRows52;
00140 int mOuterPadRows;
00141 int mTimeBuckets;
00142 int mSectors;
00143 double mIfcRadius;
00144 double mOfcRadius;
00145 double mEndCapZ;
00146 double mInnerSectorPadWidth;
00147 double mInnerSectorPadLength;
00148 double mInnerSectorPadPitch;
00149 double mInnerSectorRowPitch1;
00150 double mInnerSectorRowPitch2;
00151 double mFirstPadRow;
00152 double mFirstOuterSectorPadRow;
00153 double mLastOuterSectorPadRow;
00154 double mFirstRowWidth;
00155 double mLastRowWidth;
00156 double mInnerSectorEdge;
00157
00158 double mOuterSectorPadWidth;
00159 double mOuterSectorPadLength;
00160 double mOuterSectorPadPitch;
00161 double mOuterSectorRowPitch;
00162 double mOuterSectorLength;
00163 double mIoSectorSeparation;
00164 double mOuterSectorEdge;
00165 double mIoSectorSpacing;
00166
00167 double mFrischGrid;
00168 double mDriftDistance;
00169 double mInnerSectorzOffSet;
00170 double mOuterSectorzOffSet;
00171
00172 #ifndef ST_NO_TEMPLATE_DEF_ARGS
00173 vector<int> mPadsInRow;
00174 vector<double> mRadialDistanceAtRow;
00175 #else
00176 vector<int, allocator<int> > mPadsInRow;
00177 vector<double, allocator<double> > mRadialDistanceAtRow;
00178 #endif
00179
00180 double mAnodeWireRadius;
00181 double mFrischGridWireRadius;
00182 double mGateWireRadius;
00183
00184 double mAnodeWirePitch;
00185 double mFrischGridWirePitch;
00186 double mGateWirePitch;
00187
00188 double mInnerSectorAnodeWirePadPlaneSeparation;
00189 double mInnerSectorFrischGridPadPlaneSeparation;
00190 double mInnerSectorGatingGridPadPlaneSeparation;
00191
00192 double mOuterSectorAnodeWirePadPlaneSeparation;
00193 double mOuterSectorFrischGridPadPlaneSeparation;
00194 double mOuterSectorGatingGridPadPlaneSeparation;
00195
00196 double mFirstInnerSectorAnodeWire;
00197 double mLastInnerSectorAnodeWire;
00198 int mNumberOfInnerSectorAnodeWires;
00199
00200 double mFirstOuterSectorAnodeWire;
00201 double mLastOuterSectorAnodeWire;
00202 int mNumberOfOuterSectorAnodeWires;
00203 };
00204
00205 inline int StTpcDbGeometry::numberOfRows() const {return(mPadRows);}
00206 inline int StTpcDbGeometry::numberOfInnerRows() const {return(mInnerPadRows);}
00207 inline int StTpcDbGeometry::numberOfInnerRows48() const {return(mInnerPadRows48);}
00208 inline int StTpcDbGeometry::numberOfInnerRows52() const {return(mInnerPadRows52);}
00209 inline int StTpcDbGeometry::numberOfOuterRows() const {return(mOuterPadRows);}
00210 inline int StTpcDbGeometry::numberOfTimeBuckets() const {return(mTimeBuckets);}
00211 inline int StTpcDbGeometry::numberOfSectors() const {return(mSectors);}
00212 inline double StTpcDbGeometry::innerSectorRowPitch1() const {return (mInnerSectorRowPitch1);}
00213 inline double StTpcDbGeometry::innerSectorRowPitch2() const {return (mInnerSectorRowPitch2);}
00214 inline double StTpcDbGeometry::outerSectorRowPitch() const {return (mOuterSectorRowPitch);}
00215
00216 inline double StTpcDbGeometry::innerSectorPadWidth() const {return (mInnerSectorPadWidth);}
00217 inline double StTpcDbGeometry::outerSectorPadWidth() const {return (mOuterSectorPadWidth);}
00218 inline double StTpcDbGeometry::innerSectorPadLength() const {return (mInnerSectorPadLength);}
00219 inline double StTpcDbGeometry::outerSectorPadLength() const {return (mOuterSectorPadLength);}
00220
00221 inline double StTpcDbGeometry::innerSectorPadPitch() const {return (mInnerSectorPadPitch);}
00222 inline double StTpcDbGeometry::outerSectorPadPitch() const {return (mOuterSectorPadPitch);}
00223
00224 inline double StTpcDbGeometry::frischGrid() const {return (mFrischGrid);}
00225 inline double StTpcDbGeometry::endCapZ() const {return (mEndCapZ);}
00226 inline double StTpcDbGeometry::driftDistance() const {return (mDriftDistance);}
00227 inline double StTpcDbGeometry::innerSectorzOffSet() const {return mInnerSectorzOffSet;}
00228 inline double StTpcDbGeometry::outerSectorzOffSet() const {return mOuterSectorzOffSet;}
00229
00230 inline double StTpcDbGeometry::ifcRadius() const {return (mIfcRadius);}
00231 inline double StTpcDbGeometry::ofcRadius() const {return (mOfcRadius);}
00232
00233
00234 inline double StTpcDbGeometry::anodeWireRadius() const {return mAnodeWireRadius;}
00235 inline double StTpcDbGeometry::frischGridWireRadius() const {return mFrischGridWireRadius;}
00236 inline double StTpcDbGeometry::gateWireRadius() const {return mGateWireRadius;}
00237
00238 inline double StTpcDbGeometry::anodeWirePitch() const {return mAnodeWirePitch;}
00239 inline double StTpcDbGeometry::frischGridPitch() const {return mFrischGridWirePitch;}
00240 inline double StTpcDbGeometry::gatePitch() const {return mGateWirePitch;}
00241
00242 inline double StTpcDbGeometry::innerSectorAnodeWirePadPlaneSeparation() const {return mInnerSectorAnodeWirePadPlaneSeparation;}
00243 inline double StTpcDbGeometry::innerSectorFrischGridPadPlaneSeparation() const {return mInnerSectorFrischGridPadPlaneSeparation;}
00244 inline double StTpcDbGeometry::innerSectorGatingGridPadPlaneSeparation() const {return mInnerSectorGatingGridPadPlaneSeparation;}
00245 inline double StTpcDbGeometry::outerSectorAnodeWirePadPlaneSeparation() const {return mOuterSectorAnodeWirePadPlaneSeparation;}
00246 inline double StTpcDbGeometry::outerSectorFrischGridPadPlaneSeparation() const {return mOuterSectorFrischGridPadPlaneSeparation;}
00247 inline double StTpcDbGeometry::outerSectorGatingGridPadPlaneSeparation() const {return mOuterSectorGatingGridPadPlaneSeparation;}
00248
00249
00250 inline double StTpcDbGeometry::firstInnerSectorAnodeWire() const {return (mFirstInnerSectorAnodeWire);}
00251 inline double StTpcDbGeometry::lastInnerSectorAnodeWire() const {return (mLastInnerSectorAnodeWire);}
00252 inline int StTpcDbGeometry::numberOfInnerSectorAnodeWires() const {return (mNumberOfInnerSectorAnodeWires);}
00253
00254 inline double StTpcDbGeometry::firstOuterSectorAnodeWire() const{ return (mFirstOuterSectorAnodeWire);}
00255 inline double StTpcDbGeometry::lastOuterSectorAnodeWire() const{ return (mLastOuterSectorAnodeWire);}
00256 inline int StTpcDbGeometry::numberOfOuterSectorAnodeWires() const { return (mNumberOfOuterSectorAnodeWires);}
00257
00258 inline double StTpcDbGeometry::innerSectorEdge() const { return (mInnerSectorEdge);}
00259 inline double StTpcDbGeometry::outerSectorEdge() const { return (mOuterSectorEdge);}
00260 inline double StTpcDbGeometry::ioSectorSpacing() const { return (mIoSectorSpacing);}
00261 #endif