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 #include <algorithm>
00057 #include "StZdcTriggerDetector.h"
00058 #include "tables/St_dst_TrgDet_Table.h"
00059 #include "StTriggerData.h"
00060 #if !defined(ST_NO_NAMESPACES)
00061 using std::fill_n;
00062 using std::copy;
00063 #endif
00064
00065 static const char rcsid[] = "$Id: StZdcTriggerDetector.cxx,v 2.14 2006/09/14 00:02:53 ullrich Exp $";
00066
00067 ClassImp(StZdcTriggerDetector)
00068
00069 StZdcTriggerDetector::StZdcTriggerDetector()
00070 {
00071 fill_n(mAdc, static_cast<int>(mMaxZdcWords), 0);
00072 fill_n(mTdc, static_cast<int>(mMaxZdcWords), 0);
00073 fill_n(mZdcSmdEast, static_cast<int>(mMaxZdcWords), 0);
00074 fill_n(mZdcSmdWest, static_cast<int>(mMaxZdcWords), 0);
00075 fill_n(mSumAdc, 2, 0);
00076 mSum = 0;
00077 mVertexZ = 0;
00078 }
00079
00080 StZdcTriggerDetector::StZdcTriggerDetector(const dst_TrgDet_st& t)
00081 {
00082 copy(t.adcZDC+0, t.adcZDC+mMaxZdcWords, mAdc);
00083 copy(t.tdcZDC+0, t.tdcZDC+mMaxZdcWords, mTdc);
00084 fill_n(mZdcSmdEast, static_cast<int>(mMaxZdcWords), 0);
00085 fill_n(mZdcSmdWest, static_cast<int>(mMaxZdcWords), 0);
00086 mSumAdc[east] = t.adcZDCEast;
00087 mSumAdc[west] = t.adcZDCWest;
00088 mSum = t.adcZDCsum;
00089 mVertexZ = t.ZDCvertexZ;
00090 }
00091
00092 StZdcTriggerDetector::StZdcTriggerDetector(const StTriggerData& t)
00093 {
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104 mAdc[0] = t.zdcUnAttenuated(west);
00105 mAdc[1] = t.zdcADC(west, 3);
00106 mAdc[2] = t.zdcADC(west, 2);
00107 mAdc[3] = t.zdcADC(west, 1);
00108 mAdc[4] = t.zdcUnAttenuated(east);
00109 mAdc[5] = t.zdcADC(east, 3);
00110 mAdc[6] = t.zdcADC(east, 2);
00111 mAdc[7] = t.zdcADC(east, 1);
00112
00113 mAdc[8] = t.zdcTDC(east);
00114 mAdc[9] = t.zdcTDC(west);
00115
00116 mAdc[10] = t.zdcAttenuated(west);
00117 mAdc[11] = t.zdcAtAddress(11);
00118 mAdc[12] = t.zdcAtAddress(12);
00119 mAdc[13] = t.zdcAttenuated(east);
00120 mAdc[14] = t.zdcAtAddress(14);
00121 mAdc[15] = t.zdcAtAddress(15);
00122 mVertexZ = t.zdcVertexZ();
00123
00124 mSumAdc[east] = t.zdcAttenuated(east);
00125 mSumAdc[west] = t.zdcAttenuated(west);
00126 mSum = t.zdcAtAddress(14);
00127
00128 for (int i=0; i<mMaxZdcWords; i++)
00129 mZdcSmdEast[i] = t.zdcSMD(east, ((i>7) ? 1 : 0), ((i>7) ? (i-7) : (i+1)));
00130 for (int i=0; i<mMaxZdcWords; i++)
00131 mZdcSmdWest[i] = t.zdcSMD(west, ((i>7) ? 1 : 0), ((i>7) ? (i-7) : (i+1)));
00132
00133 fill_n(mTdc, static_cast<int>(mMaxZdcWords), 0);
00134 }
00135
00136 StZdcTriggerDetector::~StZdcTriggerDetector() {}
00137
00138 unsigned int
00139 StZdcTriggerDetector::numberOfZdcCounters() const {return mMaxZdcWords;}
00140
00141 unsigned int
00142 StZdcTriggerDetector::numberOfZdcWords() const {return mMaxZdcWords;}
00143
00144 float
00145 StZdcTriggerDetector::adc(unsigned int i) const
00146 {
00147 if (i < mMaxZdcWords)
00148 return mAdc[i];
00149 else
00150 return 0;
00151 }
00152
00153 float
00154 StZdcTriggerDetector::tdc(unsigned int i) const
00155 {
00156 if (i < mMaxZdcWords)
00157 return mTdc[i];
00158 else
00159 return 0;
00160 }
00161
00162 float
00163 StZdcTriggerDetector::adcSum(StBeamDirection dir) const
00164 {
00165 return mSumAdc[dir];
00166 }
00167
00168
00169 float
00170 StZdcTriggerDetector::zdcSmd(StBeamDirection eastwest, int verthori, int strip) const
00171 {
00172
00173 if (eastwest<0 || eastwest>1) return 0.;
00174 if (verthori<0 || verthori>1) return 0.;
00175 if (strip > 8) return 0.;
00176
00177 return ((eastwest<1) ? (mZdcSmdEast[strip -1 + verthori*8]) : (mZdcSmdWest[strip-1 + verthori*8]));
00178 }
00179
00180
00181 float
00182 StZdcTriggerDetector::adcSum() const {return mSum;}
00183
00184 float
00185 StZdcTriggerDetector::vertexZ() const {return mVertexZ;}
00186
00187 void
00188 StZdcTriggerDetector::setAdc(unsigned int i, float val)
00189 {
00190 if (i < mMaxZdcWords)
00191 mAdc[i] = val;
00192 }
00193
00194 void
00195 StZdcTriggerDetector::setTdc(unsigned int i, float val)
00196 {
00197 if (i < mMaxZdcWords)
00198 mTdc[i] = val;
00199 }
00200
00201 void
00202 StZdcTriggerDetector::setAdcSum(StBeamDirection dir, float val)
00203 {
00204 mSumAdc[dir] = val;
00205 }
00206
00207 void
00208 StZdcTriggerDetector::setAdcSum(float val)
00209 {
00210 mSum = val;
00211 }
00212
00213 void
00214 StZdcTriggerDetector::setVertexZ(float val)
00215 {
00216 mVertexZ = val;
00217 }
00218
00219 void
00220 StZdcTriggerDetector::setZdcSmd(StBeamDirection eastwest, int verthori, int strip, float val)
00221 {
00222 if (eastwest<0 || eastwest>1) return ;
00223 if (verthori<0 || verthori>1) return ;
00224 if (strip > 8) return ;
00225
00226 if (eastwest==0) mZdcSmdEast[strip -1 + verthori*8] = val;
00227 else if (eastwest==1) mZdcSmdWest[strip -1 + verthori*8] = val;
00228
00229 }