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
00031
00032
00033
00035 #ifndef STAR_StFtpcSlowSimField
00036 #define STAR_StFtpcSlowSimField
00037
00038 class Inparam;
00039 class StFtpcParamReader;
00040 class StFtpcDbReader;
00041 extern int Locate(const int npt, const float* x, const float xx);
00042
00043
00044
00045
00046
00047 class StFtpcSlowSimField
00048 {
00049 public:
00050 StFtpcSlowSimField(StFtpcParamReader *paramReader,
00051 StFtpcDbReader *dbReader);
00052 ~StFtpcSlowSimField();
00053 float Interpolate(const int npt, const float* x,
00054 const float* y,const int ich,
00055 const float xx);
00056 float InterpValue(const int npt, const float* x,
00057 const float* y, const float xx);
00058 void Output() const;
00059
00060 int GetGridIndex(const float r) const
00061 { return ((int) ((r - innerRadius)*inverseDeltaRadius) ) ; }
00062
00063
00064
00065 void GetVelocityZ(const float inverseRadius, const int padrow, const float phi, float *inverseVelocity, float *angle);
00066
00067 float GetVelAtReadout() const { return finalVelocity; }
00068
00069 float GetDeltaRadius() const { return del_r; }
00070
00071 float GetInverseDeltaRadius() const { return inverseDeltaRadius; }
00072
00073 float GetTwoDeltaRadius() const { return twoDeltaRadius; }
00074
00075 float GetDiffusionXSqr(const int i) const {return grid_point[i].diff_x;}
00076
00077 float GetDiffusionZSqr(const int i) const {return grid_point[i].diff_z;}
00078
00079 float GetDlnvDr(const int i) const {return grid_point[i].dlnv_dr;}
00080
00081 private:
00082 StFtpcParamReader *mParam;
00083 StFtpcDbReader *mDb;
00084
00085 float del_r;
00086 float inverseDeltaRadius;
00087 float twoDeltaRadius;
00088 float finalVelocity;
00089
00090 int nMagboltzBins;
00091 int nPadrowPositions;
00092 float EFieldMin;
00093 float EFieldStep;
00094 float EFieldStepInverted;
00095 float EFieldStepInvConverted;
00096 float radTimesField;
00097 float innerRadius;
00098 float outerRadius;
00099 float *preciseEField;
00100
00101 float *inverseDriftVelocityWest;
00102 float *preciseLorentzAngleWest;
00103 float *inverseDriftVelocityEast;
00104 float *preciseLorentzAngleEast;
00105 float angleFactor;
00106
00107
00108 float mOffsetCathodeWest;
00109 float mOffsetCathodeEast;
00110 float mAngleOffsetWest;
00111 float mAngleOffsetEast;
00112
00113 struct grid_data {
00114 float rhit;
00115 float ef;
00116 float vel_z;
00117 float diff_z;
00118 float diff_x;
00119 float diff_y;
00120 float lorentz;
00121 float dlnv_dr;
00122 };
00123 grid_data *grid_point;
00124 };
00125
00126 #endif
00127