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