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 #include <algorithm>
00034 #include "StFpdTriggerDetector.h"
00035 #include "tables/St_dst_TrgDet_Table.h"
00036 #include "StTriggerData.h"
00037
00038 static const char rcsid[] = "$Id: StFpdTriggerDetector.cxx,v 2.6 2007/07/11 23:06:45 perev Exp $";
00039
00040 ClassImp(StFpdTriggerDetector)
00041
00042 StFpdTriggerDetector::StFpdTriggerDetector()
00043 {
00044 clear();
00045 init();
00046 }
00047
00048 StFpdTriggerDetector::StFpdTriggerDetector(const dst_TrgDet_st& t)
00049 {
00050 clear();
00051 init();
00052 }
00053
00054 StFpdTriggerDetector::StFpdTriggerDetector(const StTriggerData& t)
00055 {
00056 clear();
00057 init();
00058 for(int ew=0; ew<2; ew++) {
00059 for(unsigned int nstbps=0; nstbps<mMaxModule; nstbps++) {
00060 int tst=(char*)&mAdc[ew][nstbps]-(char*)&mAdc[0][0];
00061 assert(tst>=0 && tst<(int)sizeof(mAdc));
00062 for(unsigned int tower=0; tower<mMaxTower[nstbps]; tower++){
00063 mAdc[ew][nstbps][tower]=t.fpd((StBeamDirection)ew,nstbps,tower+1);
00064 } }
00065 for(unsigned int nstbps=0; nstbps<mMaxBoard; nstbps++) {
00066 for(int bd=0; bd<mMaxBoard; bd++) {
00067 int tst=(char*)&mLayer1[ew][nstbps][bd]-(char*)&mLayer1[0][0][0];
00068 assert(tst>=0 && tst<(int)sizeof(mLayer1));
00069 mLayer1[ew][nstbps][bd]=t.fpdLayer1DSM((StBeamDirection)ew,nstbps,bd);
00070 }
00071 mLayer2[ew][nstbps]=t.fpdLayer2DSM((StBeamDirection)ew,nstbps);
00072 }
00073 }
00074 }
00075
00076 StFpdTriggerDetector::StFpdTriggerDetector(const StFpdTriggerDetector& det)
00077 {
00078 init();
00079 copy(det.mEN, det.mEN+mMaxNS, mEN);
00080 copy(det.mES, det.mES+mMaxNS, mES);
00081 copy(det.mET, det.mET+mMaxTB, mET);
00082 copy(det.mEB, det.mEB+mMaxTB, mEB);
00083 copy(det.mEPN, det.mEPN+mMaxPS, mEPN);
00084 copy(det.mEPS, det.mEPS+mMaxPS, mEPS);
00085 copy(det.mWN, det.mWN+mMaxNS, mWN);
00086 copy(det.mWS, det.mWS+mMaxNS, mWS);
00087 copy(det.mWT, det.mWT+mMaxTB, mWT);
00088 copy(det.mWB, det.mWB+mMaxTB, mWB);
00089 copy(det.mWPN, det.mWPN+mMaxPS, mWPN);
00090 copy(det.mWPS, det.mWPS+mMaxPS, mWPS);
00091 for (int i=0; i<2; i++)
00092 for (int j=0; j<mMaxModule; j++) {
00093 for (int k=0; k<mMaxBoard; k++) mLayer1[i][j][k] = det.mLayer1[i][j][k] ;
00094 mLayer2[i][j] = det.mLayer2[i][j];
00095 }
00096 }
00097
00098 StFpdTriggerDetector&
00099 StFpdTriggerDetector::operator=(const StFpdTriggerDetector& det)
00100 {
00101 if (this != &det) {
00102 init();
00103 copy(det.mEN, det.mEN+mMaxNS, mEN);
00104 copy(det.mES, det.mES+mMaxNS, mES);
00105 copy(det.mET, det.mET+mMaxTB, mET);
00106 copy(det.mEB, det.mEB+mMaxTB, mEB);
00107 copy(det.mEPN, det.mEPN+mMaxPS, mEPN);
00108 copy(det.mEPS, det.mEPS+mMaxPS, mEPS);
00109 copy(det.mWN, det.mWN+mMaxNS, mWN);
00110 copy(det.mWS, det.mWS+mMaxNS, mWS);
00111 copy(det.mWT, det.mWT+mMaxTB, mWT);
00112 copy(det.mWB, det.mWB+mMaxTB, mWB);
00113 copy(det.mWPN, det.mWPN+mMaxPS, mWPN);
00114 copy(det.mWPS, det.mWPS+mMaxPS, mWPS);
00115 for (int i=0; i<2; i++)
00116 for (int j=0; j<mMaxModule; j++) {
00117 for (int k=0; k<mMaxBoard; k++) mLayer1[i][j][k] = det.mLayer1[i][j][k] ;
00118 mLayer2[i][j] = det.mLayer2[i][j];
00119 }
00120 }
00121 return *this;
00122 }
00123
00124 StFpdTriggerDetector::~StFpdTriggerDetector() {}
00125
00126 void
00127 StFpdTriggerDetector::init()
00128 {
00129 mMaxTower[0]=mMaxNS; mMaxTower[1]=mMaxNS;
00130 mMaxTower[2]=mMaxTB; mMaxTower[3]=mMaxTB;
00131 mMaxTower[4]=mMaxPS; mMaxTower[5]=mMaxPS;
00132 mAdc[0][0]=mEN ;mAdc[0][1]=mES ;mAdc[0][2]=mET;mAdc[0][3]=mEB;
00133 mAdc[0][4]=mEPN;mAdc[0][5]=mEPS;
00134 mAdc[1][0]=mWN ;mAdc[1][1]=mWS ;mAdc[1][2]=mWT;mAdc[1][3]=mWB;
00135 mAdc[1][4]=mWPN;mAdc[1][5]=mWPS;
00136 }
00137
00138 void
00139 StFpdTriggerDetector::clear()
00140 {
00141 memset(mBeg,0,mEnd-mBeg);
00142 }
00143
00144 unsigned int
00145 StFpdTriggerDetector::numberOfTowers(unsigned int nstbps) const
00146 {
00147 if (nstbps<mMaxModule)
00148 return mMaxTower[nstbps];
00149 else
00150 return 0;
00151 }
00152
00153 unsigned int
00154 StFpdTriggerDetector::numberOfModules() const {return mMaxModule;}
00155
00156 unsigned int
00157 StFpdTriggerDetector::numberOfLayer1Boards() const {return mMaxBoard;}
00158
00159 unsigned int
00160 StFpdTriggerDetector::adc(StBeamDirection ew, unsigned int nstbps, unsigned int tower) const
00161 {
00162 if (nstbps<mMaxModule) {
00163 if (tower < mMaxTower[nstbps])
00164 return static_cast<unsigned int>(mAdc[ew][nstbps][tower]);
00165 }
00166 return 0;
00167 }
00168
00169 unsigned int
00170 StFpdTriggerDetector::layer1(StBeamDirection ew, unsigned int nstbps, unsigned int board) const
00171 {
00172 if (nstbps<mMaxModule && board<mMaxBoard)
00173 return static_cast<unsigned int>(mLayer1[ew][nstbps][board]);
00174 return 0;
00175 }
00176
00177 unsigned int
00178 StFpdTriggerDetector::layer2(StBeamDirection ew, unsigned int nstbps) const
00179 {
00180 if (nstbps<mMaxModule)
00181 return static_cast<unsigned int>(mLayer2[ew][nstbps]);
00182 return 0;
00183 }
00184
00185 void
00186 StFpdTriggerDetector::setAdc(StBeamDirection ew, unsigned int nstbps, unsigned int tower, unsigned char v)
00187 {
00188 if (nstbps<mMaxModule)
00189 if (tower < mMaxTower[nstbps])
00190 mAdc[ew][nstbps][tower]=v;
00191 }
00192
00193 void
00194 StFpdTriggerDetector::setLayer1(StBeamDirection ew, unsigned int nstbps, unsigned int board, unsigned short v)
00195 {
00196 if (nstbps<mMaxModule && board<mMaxBoard)
00197 mLayer1[ew][nstbps][board]=v;
00198 }
00199
00200 void
00201 StFpdTriggerDetector::setLayer2(StBeamDirection ew, unsigned int nstbps, unsigned short v)
00202 {
00203 if (nstbps<mMaxModule)
00204 mLayer2[ew][nstbps]=v;
00205 }
00206
00207 void
00208 StFpdTriggerDetector::dump() const
00209 {
00210 printf("StFpdTriggerDetector::dump()\n");
00211 printf("numberOfModules()=%d numberOfLayer1Boards()=%d\n",numberOfModules(),numberOfLayer1Boards());
00212 for(int ew=0; ew<2; ew++){
00213 if(ew==0) printf("East\n");
00214 else printf("West\n");
00215 for(unsigned int nstbps=0; nstbps<numberOfModules(); nstbps++){
00216 printf("Module=%d numberOfTowers=%d\n",nstbps,numberOfTowers(nstbps));
00217 for(unsigned int tower=0; tower<numberOfTowers(nstbps); tower++){
00218 printf("%4d ",adc((StBeamDirection)ew,nstbps,tower));
00219 if(numberOfTowers(nstbps)==49 && tower%7==6) printf("\n");
00220 if(numberOfTowers(nstbps)==25 && tower%5==4) printf("\n");
00221 if(numberOfTowers(nstbps)==7 && tower%7==6) printf("\n");
00222 }
00223 printf("Layer1=");
00224 for(unsigned int bd=0; bd<numberOfLayer1Boards(); bd++){
00225 printf("%4d ",layer1((StBeamDirection)ew,nstbps,bd));
00226 }
00227 printf("\nLayer2=%d\n",layer2((StBeamDirection)ew,nstbps));
00228 }
00229 }
00230 }