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 #ifndef ST_TRS_TRANSPORTER_HH
00042 #define ST_TRS_TRANSPORTER_HH
00043
00044 #include "StGlobals.hh"
00045 #include "Randomize.h"
00046
00047
00048 #include "StTpcGeometry.hh"
00049 #include "StTpcSlowControl.hh"
00050 #include "StMagneticField.hh"
00051 #include "StTrsDeDx.hh"
00052 #include "StTrsMiniChargeSegment.hh"
00053
00054 class StTrsChargeTransporter {
00055 public:
00056 StTrsChargeTransporter(StTpcGeometry*, StTpcSlowControl*, StTrsDeDx*, StMagneticField*);
00057 virtual ~StTrsChargeTransporter();
00058
00059
00060
00061
00062 virtual void transportToWire(StTrsMiniChargeSegment&,double &,double &) = 0;
00063 virtual double chargeAttachment(double) const = 0;
00064 virtual double wireGridTransmission() = 0;
00065
00066
00067 void setChargeAttachment(bool);
00068 void setGatingGridTransparency(bool);
00069 void setGatingGridVoltage(float);
00070 void setTransverseDiffusion(bool);
00071 void setLongitudinalDiffusion(bool);
00072 void setExB(bool);
00073 void setDriftVelocity(Double_t dv) {mDriftVelocity = dv;}
00074
00075 double transparencyCalculation();
00076
00077 private:
00078 StTrsChargeTransporter() {}
00079
00080
00081 void Lg();
00082 double transitionVoltage();
00083 double maximumTransparency();
00084 void sigmaGC();
00085 void sigmaG();
00086 double sigmaGPlus();
00087 double zeroGateVoltage();
00088 double linearOnset();
00089 double linearTransparency();
00090
00091
00092 protected:
00093 bool mChargeAttachment;
00094 bool mGatingGridTransparency;
00095 bool mTransverseDiffusion;
00096 bool mLongitudinalDiffusion;
00097 bool mExB;
00098 bool mDoTransparencyCalc;
00099
00100 double mAttachment;
00101 double mTransparency;
00102 double mSigmaTransverse;
00103 double mSigmaLongitudinal;
00104 double mOmegaTau;
00105 double mDriftVelocity;
00106 double mO2Concentration;
00107
00108
00109
00110
00111 double mGateVoltage;
00112 double mLg;
00113 double mSGC;
00114 double mSG;
00115 double mDriftVoltage;
00116 double mDriftDistance;
00117 double mGateWireRadius;
00118 double mGatePitch;
00119 double mZGate;
00120
00121 StTpcGeometry* mGeomDb;
00122 StTpcSlowControl* mSCDb;
00123 StTrsDeDx* mGasDb;
00124 StMagneticField* mMagDb;
00125
00126 protected:
00127 static HepJamesRandom mEngine;
00128 static RandFlat mFlatDistribution;
00129 static RandGauss mGaussDistribution;
00130 };
00131 inline void StTrsChargeTransporter::setChargeAttachment(bool a) {mChargeAttachment = a;}
00132 inline void StTrsChargeTransporter::setGatingGridTransparency(bool t) {mGatingGridTransparency = t;}
00133 inline void StTrsChargeTransporter::setGatingGridVoltage(float v) {mGateVoltage = v;}
00134 inline void StTrsChargeTransporter::setTransverseDiffusion(bool td) {mTransverseDiffusion = td;}
00135 inline void StTrsChargeTransporter::setLongitudinalDiffusion(bool ld) {mLongitudinalDiffusion = ld;}
00136 inline void StTrsChargeTransporter::setExB(bool eb) {mExB = eb;}
00137 #endif