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 #include <string.h>
00046 #include <assert.h>
00047 #include <iostream>
00048 #include "StTriggerData2005.h"
00049 #include "StDaqLib/TRG/trgStructures2005.h"
00050 #include "StDaqLib/TRG/L2jetResults2006.h"
00051 #include "StDaqLib/TRG/L2pedResults2006.h"
00052 #include "StDaqLib/TRG/L2gammaResult2006.h"
00053
00054 ClassImp(StTriggerData2005)
00055
00056 StTriggerData2005::StTriggerData2005()
00057 {
00058 mYear=2005;
00059 mData=0;
00060 }
00061
00062 StTriggerData2005::StTriggerData2005(const TrgDataType2005* data, int run)
00063 {
00064 mYear=2005;
00065 mRun = run;
00066 mData= new TrgDataType2005;
00067 int npre = data->EvtDesc.npre;
00068 int npost = data->EvtDesc.npost;
00069 assert(npre >=0);
00070 assert(npre <=5);
00071 assert(npost>=0);
00072 assert(npost<=5);
00073 int size = sizeof(EvtDescData2005)+sizeof(TrgSumData2005)
00074 + sizeof(RawTrgDet2005)*(npre+npost+1);
00075
00076 memcpy(mData,data,size);
00077 memset((char*)mData+size,0,sizeof(TrgDataType2005)-size);
00078 }
00079
00080 unsigned int StTriggerData2005::version() const
00081 {
00082 return mData->EvtDesc.TrgDataFmtVer;
00083 }
00084
00085 StTriggerData2005::~StTriggerData2005() {delete mData;}
00086
00087 unsigned int StTriggerData2005::token() const
00088 {
00089 return mData->EvtDesc.TrgToken;
00090 }
00091
00092 unsigned int StTriggerData2005::triggerWord() const
00093 {
00094 return mData->EvtDesc.TriggerWord;
00095 }
00096
00097 unsigned int StTriggerData2005::actionWord() const
00098 {
00099 return
00100 ( (unsigned short)(mData->EvtDesc.actionWdTrgCommand) * 16 * 16 * 16 ) +
00101 ( (unsigned short)(mData->EvtDesc.actionWdDaqCommand) * 16 * 16 ) +
00102 ( mData->EvtDesc.actionWdDetectorBitMask & 0x00ff ) ;
00103 }
00104
00105 unsigned int StTriggerData2005::numberOfPreXing() const
00106 {
00107 return mData->EvtDesc.npre;
00108 }
00109
00110 unsigned int StTriggerData2005::numberOfPostXing() const
00111 {
00112 return mData->EvtDesc.npost;
00113 }
00114
00115 unsigned short StTriggerData2005::busyStatus() const{
00116 return mData->EvtDesc.modifiedBusyStatus;
00117 }
00118
00119 unsigned short StTriggerData2005::dsmInput() const{
00120 return mData->EvtDesc.DSMInput;
00121 }
00122
00123 unsigned short StTriggerData2005::trgToken() const{
00124 return mData->EvtDesc.TrgToken;
00125 }
00126
00127 unsigned short StTriggerData2005::dsmAddress() const{
00128 return mData->EvtDesc.DSMAddress;
00129 }
00130
00131 unsigned short StTriggerData2005::mAddBits() const{
00132 return mData->EvtDesc.addBits;
00133 }
00134
00135 unsigned short StTriggerData2005::bcData(int channel) const{
00136 return mData->TrgSum.DSMdata.BCdata[channel];
00137 }
00138
00139 unsigned short StTriggerData2005::lastDSM(int channel) const{
00140 return mData->TrgSum.DSMdata.lastDSM[channel];
00141 }
00142
00143 unsigned short StTriggerData2005::tcuBits() const
00144 {
00145 return mData->EvtDesc.DSMInput;
00146 }
00147
00148 unsigned int StTriggerData2005::bunchCounterHigh() const
00149 {
00150 return mData->EvtDesc.bunchXing_hi;
00151 }
00152
00153 unsigned int StTriggerData2005::bunchCounterLow() const
00154 {
00155 return mData->EvtDesc.bunchXing_lo;
00156 }
00157
00158 unsigned int StTriggerData2005::bunchId48Bit() const
00159 {
00160 unsigned long long bxinghi,bxing1,bxinglo, bx;
00161 bxinghi = mData->TrgSum.DSMdata.BCdata[3];
00162 bxing1 = mData->TrgSum.DSMdata.BCdata[10];
00163 bxinglo = (bxing1 << 16) + mData->TrgSum.DSMdata.BCdata[11];
00164 bx = (bxinghi << 32) + bxinglo;
00165 return (int)(bx % 120);
00166 }
00167
00168 unsigned int StTriggerData2005::bunchId7Bit() const
00169 {
00170 int b7=0, b7dat;
00171 b7dat = mData->TrgSum.DSMdata.BCdata[2];
00172 b7 = b7dat & 0x7f;
00173 return b7;
00174 }
00175
00176 unsigned int StTriggerData2005::spinBit() const
00177 {
00178 return (mData->TrgSum.DSMdata.lastDSM[7]/16)%256;
00179 }
00180
00181 unsigned int StTriggerData2005::spinBitYellowFilled() const
00182 {
00183 unsigned int sb = spinBit();
00184 return sb%2;
00185 }
00186
00187 unsigned int StTriggerData2005::spinBitYellowUp() const
00188 {
00189 unsigned int sb = spinBit();
00190 return (sb/2)%2;
00191 }
00192
00193 unsigned int StTriggerData2005::spinBitYellowDown() const
00194 {
00195 unsigned int sb = spinBit();
00196 return (sb/4)%2;
00197 }
00198
00199 unsigned int StTriggerData2005::spinBitYellowUnpol() const
00200 {
00201 unsigned int sb = spinBit();
00202 return (sb/8)%2;
00203 }
00204
00205 unsigned int StTriggerData2005::spinBitBlueFilled() const
00206 {
00207 unsigned int sb = spinBit();
00208 return (sb/16)%2;
00209 }
00210
00211 unsigned int StTriggerData2005::spinBitBlueUp() const
00212 {
00213 unsigned int sb = spinBit();
00214 return (sb/32)%2;
00215 }
00216
00217 unsigned int StTriggerData2005::spinBitBlueDown() const
00218 {
00219 unsigned int sb = spinBit();
00220 return (sb/64)%2;
00221 }
00222
00223 unsigned int StTriggerData2005::spinBitBlueUnpol() const
00224 {
00225 unsigned int sb = spinBit();
00226 return (sb/128)%2;
00227 }
00228
00229 unsigned short StTriggerData2005::ctbRaw(int address, int prepost) const
00230 {
00231 return mData->rawTriggerDet[prepostAddress(prepost)].CTB[address];
00232 }
00233
00234 unsigned short StTriggerData2005::ctb(int pmt, int prepost) const
00235 {
00236 static const unsigned char ctbMap[240] = {
00237 7, 6, 5, 4, 3, 23, 22, 21, 20, 19,
00238 2, 1, 0, 15, 14, 18, 17, 16, 31, 30,
00239 13, 12, 11, 10, 9, 29, 28, 27, 26, 25,
00240 39, 38, 37, 36, 35, 55, 54, 53, 52, 51,
00241 34, 33, 32, 47, 46, 50, 49, 48, 63, 62,
00242 45, 44, 43, 42, 41, 61, 60, 59, 58, 57,
00243 71, 70, 69, 68, 67, 87, 86, 85, 84, 83,
00244 66, 65, 64, 79, 78, 82, 81, 80, 95, 94,
00245 77, 76, 75, 74, 73, 93, 92, 91, 90, 89,
00246 103, 102, 101, 100, 99, 119, 118, 117, 116, 115,
00247 98, 97, 96, 111, 110, 114, 113, 112, 127, 126,
00248 109, 108, 107, 106, 105, 125, 124, 123, 122, 121,
00249 135, 134, 133, 132, 131, 151, 150, 149, 148, 147,
00250 130, 129, 128, 143, 142, 146, 145, 144, 159, 158,
00251 141, 140, 139, 138, 137, 157, 156, 155, 154, 153,
00252 167, 166, 165, 164, 163, 183, 182, 181, 180, 179,
00253 162, 161, 160, 175, 174, 178, 177, 176, 191, 190,
00254 173, 172, 171, 170, 169, 189, 188, 187, 186, 185,
00255 199, 198, 197, 196, 195, 215, 214, 213, 212, 211,
00256 194, 193, 192, 207, 206, 210, 209, 208, 223, 222,
00257 205, 204, 203, 202, 201, 221, 220, 219, 218, 217,
00258 231, 230, 229, 228, 227, 247, 246, 245, 244, 243,
00259 226, 225, 224, 239, 238, 242, 241, 240, 255, 254,
00260 237, 236, 235, 234, 233, 253, 252, 251, 250, 249,
00261 } ;
00262 int v=0;
00263 int add=prepostAddress(prepost);
00264 if(add>=0) v=mData->rawTriggerDet[add].CTB[ctbMap[pmt]];
00265 if(mRun>7000000 && mRun<7151026){
00266 if (add== 76){v=mData->rawTriggerDet[prepostAddress(prepost)].ZDCSMD[7];}
00267 else if(add== 75){v=mData->rawTriggerDet[prepostAddress(prepost)].ZDCSMD[6];}
00268 else if(add== 74){v=mData->rawTriggerDet[prepostAddress(prepost)].ZDCSMD[5];}
00269 else if(add==166){v=mData->rawTriggerDet[prepostAddress(prepost)].ZDCSMD[4];}
00270 else if(add==165){v=mData->rawTriggerDet[prepostAddress(prepost)].ZDCSMD[3];}
00271 else if(add==164){v=mData->rawTriggerDet[prepostAddress(prepost)].ZDCSMD[2];}
00272 }
00273 else if(mRun>=7151026){
00274 if (add== 4){v=mData->rawTriggerDet[prepostAddress(prepost)].ZDCSMD[7];}
00275 else if(add== 3){v=mData->rawTriggerDet[prepostAddress(prepost)].ZDCSMD[6];}
00276 else if(add== 2){v=mData->rawTriggerDet[prepostAddress(prepost)].ZDCSMD[5];}
00277 else if(add==238){v=mData->rawTriggerDet[prepostAddress(prepost)].ZDCSMD[4];}
00278 else if(add==237){v=mData->rawTriggerDet[prepostAddress(prepost)].ZDCSMD[3];}
00279 else if(add==236){v=mData->rawTriggerDet[prepostAddress(prepost)].ZDCSMD[2];}
00280 }
00281 return v;
00282 }
00283
00284 unsigned short StTriggerData2005::ctbTraySlat(int tray, int slat, int prepost) const{
00285 static const unsigned char ctbMap[2][120] = {
00286 { 109, 108, 107, 106, 105, 7, 6, 5, 4, 3,
00287 2, 1, 0, 15, 14, 13, 12, 11, 10, 9,
00288 39, 38, 37, 36, 35, 34, 33, 32, 47, 46,
00289 45, 44, 43, 42, 41, 71, 70, 69, 68, 67,
00290 66, 65, 64, 79, 78, 77, 76, 75, 74, 73,
00291 103, 102, 101, 100, 99, 98, 97, 96, 111, 110,
00292 141, 140, 139, 138, 137, 167, 166, 165, 164, 163,
00293 162, 161, 160, 175, 174, 173, 172, 171, 170, 169,
00294 199, 198, 197, 196, 195, 194, 193, 192, 207, 206,
00295 205, 204, 203, 202, 201, 231, 230, 229, 228, 227,
00296 226, 225, 224, 239, 238, 237, 236, 235, 234, 233,
00297 135, 134, 133, 132, 131, 130, 129, 128, 143, 142},
00298 { 125, 124, 123, 122, 121, 23, 22, 21, 20, 19,
00299 18, 17, 16, 31, 30, 29, 28, 27, 26, 25,
00300 55, 54, 53, 52, 51, 50, 49, 48, 63, 62,
00301 61, 60, 59, 58, 57, 87, 86, 85, 84, 83,
00302 82, 81, 80, 95, 94, 93, 92, 91, 90, 89,
00303 119, 118, 117, 116, 115, 114, 113, 112, 127, 126,
00304 157, 156, 155, 154, 153, 183, 182, 181, 180, 179,
00305 178, 177, 176, 191, 190, 189, 188, 187, 186, 185,
00306 215, 214, 213, 212, 211, 210, 209, 208, 223, 222,
00307 221, 220, 219, 218, 217, 247, 246, 245, 244, 243,
00308 242, 241, 240, 255, 254, 253, 252, 251, 250, 249,
00309 151, 150, 149, 148, 147, 146, 145, 144, 159, 158}
00310 };
00311 int v=0;
00312 int add=prepostAddress(prepost);
00313 if(add>=0) v=mData->rawTriggerDet[add].CTB[ctbMap[slat][tray]];
00314 if(mRun>7000000 && mRun<7151026){
00315 if (tray== 46 && slat==0){v=mData->rawTriggerDet[prepostAddress(prepost)].ZDCSMD[7];}
00316 else if(tray== 47 && slat==0){v=mData->rawTriggerDet[prepostAddress(prepost)].ZDCSMD[6];}
00317 else if(tray== 48 && slat==0){v=mData->rawTriggerDet[prepostAddress(prepost)].ZDCSMD[5];}
00318 else if(tray== 66 && slat==0){v=mData->rawTriggerDet[prepostAddress(prepost)].ZDCSMD[4];}
00319 else if(tray== 67 && slat==0){v=mData->rawTriggerDet[prepostAddress(prepost)].ZDCSMD[3];}
00320 else if(tray== 68 && slat==0){v=mData->rawTriggerDet[prepostAddress(prepost)].ZDCSMD[2];}
00321 }
00322 else if(mRun>=7151026){
00323 if (tray== 8 && slat==0){v=mData->rawTriggerDet[prepostAddress(prepost)].ZDCSMD[7];}
00324 else if(tray== 9 && slat==0){v=mData->rawTriggerDet[prepostAddress(prepost)].ZDCSMD[6];}
00325 else if(tray== 10 && slat==0){v=mData->rawTriggerDet[prepostAddress(prepost)].ZDCSMD[5];}
00326 else if(tray==104 && slat==0){v=mData->rawTriggerDet[prepostAddress(prepost)].ZDCSMD[4];}
00327 else if(tray==105 && slat==0){v=mData->rawTriggerDet[prepostAddress(prepost)].ZDCSMD[3];}
00328 else if(tray==106 && slat==0){v=mData->rawTriggerDet[prepostAddress(prepost)].ZDCSMD[2];}
00329 }
00330 return v;
00331 }
00332
00333 unsigned short StTriggerData2005::ctbSum(int prepost) const{
00334 unsigned short sum=0;
00335 for (int i=1; i<240; i++){sum+=ctb(i,prepost);}
00336 return sum;
00337 }
00338
00339 unsigned short StTriggerData2005::mwc(int pmt, int prepost) const
00340 {
00341 static const unsigned char mwcMap[96] = {
00342 71, 70, 69, 68, 67, 66, 65, 64, 79, 78, 77, 76,
00343 95, 94, 93, 92, 87, 86, 85, 84, 83, 82, 81, 80,
00344 99, 98, 97, 96, 111, 110, 109, 108, 103, 102, 101, 100,
00345 119, 118, 117, 116, 115, 114, 113, 112, 127, 126, 125, 124,
00346 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12,
00347 31, 30, 29, 28, 23, 22, 21, 20, 19, 18, 17, 16,
00348 35, 34, 33, 32, 47, 46, 45, 44, 39, 38, 37, 36,
00349 55, 54, 53, 52, 51, 50, 49, 48, 63, 62, 61, 60,
00350 };
00351 return mData->rawTriggerDet[prepostAddress(prepost)].MWC[mwcMap[pmt]];
00352 }
00353
00354 unsigned short StTriggerData2005::bbcADC(StBeamDirection eastwest, int pmt, int prepost) const
00355 {
00356 static const int q_map[2][24] = {
00357 { 8 , 5 , 4 , 40 , 37 , 36 , 7 , 6 ,
00358 3 , 2 , 1 , 39 , 38 , 35 , 34 , 33 ,
00359 72 , 71 , 70 , 69 , 68 , 67 , 66 , 65 },
00360 { 24 , 21 , 20 , 56 , 53 , 52 , 23 , 22 ,
00361 19 , 18 , 17 , 55 , 54 , 51 , 50 , 49 ,
00362 88 , 87 , 86 , 85 , 84 , 83 , 82 , 81 }
00363 };
00364 return mData->rawTriggerDet[prepostAddress(prepost)].BBC[q_map[eastwest][pmt-1]-1];
00365 }
00366
00367 unsigned short StTriggerData2005::bbcTDC(StBeamDirection eastwest, int pmt, int prepost) const
00368 {
00369 static const int t_map[2][24] ={
00370 { 16 , 13 , 12 , 48 , 45 , 44 , 15 , 14 ,
00371 11 , 10 , 9 , 47 , 46 , 43 , 42 , 41 ,
00372 80 , 79 , 78 , 77 , 76 , 75 , 74 , 73 },
00373 { 32 , 29 , 28 , 64 , 61 , 60 , 31 , 30 ,
00374 27 , 26 , 25 , 63 , 62 , 59 , 58 , 57 ,
00375 96 , 95 , 94 , 93 , 92 , 91 , 90 , 89 }
00376 };
00377 return mData->rawTriggerDet[prepostAddress(prepost)].BBC[t_map[eastwest][pmt-1]-1];
00378 }
00379
00380 unsigned short StTriggerData2005::bbcADCSum(StBeamDirection eastwest, int prepost) const
00381 {
00382 int address = prepostAddress(prepost);
00383 if (eastwest==east){
00384 return
00385 mData->rawTriggerDet[address].BBClayer1[7]%2048+
00386 mData->rawTriggerDet[address].BBClayer1[3]%2048;
00387 }
00388 else {
00389 return
00390 mData->rawTriggerDet[address].BBClayer1[5]%2048+
00391 mData->rawTriggerDet[address].BBClayer1[1]%2048;
00392 }
00393 }
00394
00395 unsigned short StTriggerData2005::bbcADCSumLargeTile(StBeamDirection eastwest, int prepost) const
00396 {
00397 int address = prepostAddress(prepost);
00398 if (eastwest==east) { return mData->rawTriggerDet[address].BBClayer1[11]%2048; }
00399 else { return mData->rawTriggerDet[address].BBClayer1[10]%2048; }
00400 }
00401
00402 unsigned short StTriggerData2005::bbcEarliestTDC(StBeamDirection eastwest, int prepost) const
00403 {
00404 int address = prepostAddress(prepost), t1, t2;
00405 if (eastwest==east){
00406 t1 = mData->rawTriggerDet[address].BBClayer1[6]%256;
00407 t2 = mData->rawTriggerDet[address].BBClayer1[2]%256;
00408 }
00409 else {
00410 t1 = mData->rawTriggerDet[address].BBClayer1[4]%256;
00411 t2 = mData->rawTriggerDet[address].BBClayer1[0]%256;
00412 }
00413 return (t1>t2) ? t1 : t2;
00414 }
00415
00416 unsigned short StTriggerData2005::bbcTimeDifference() const
00417 {
00418 return mData->TrgSum.DSMdata.VTX[3]%512;
00419 }
00420
00421 unsigned short StTriggerData2005::fpd(StBeamDirection eastwest, int module, int pmt, int prepost) const
00422 {
00423 static const short fpdmap[2][6][49] = {
00424
00425 {
00426
00427 {39, 38, 37, 36, 35, 34, 33,
00428 7, 6, 5, 23, 22, 21, 55,
00429 4, 3, 2, 20, 19, 18, 54,
00430 1, 0, 15, 17, 16, 31, 53,
00431 14, 13, 12, 30, 29, 28, 52,
00432 11, 10, 9, 27, 26, 25, 51,
00433 32, 47, 46, 45, 44, 43, 42},
00434
00435 { 103,101,100, 99, 98, 97, 96,
00436 71, 70, 69, 87, 86, 85, 48,
00437 68, 67, 66, 84, 83, 82, 63,
00438 65, 64, 79, 81, 80, 95, 61,
00439 78, 77 ,76, 94, 93, 92, 60,
00440 75, 74, 73, 91, 90, 89, 59,
00441 111,110,109,108, 107, 106,105},
00442
00443 {135, 134, 133, 132, 131, 130, 129, 128, 143, 142,
00444 119, 118, 117, 116, 115, 114, 113, 112,
00445 127, 126, 125, 124, 123, 122, 121,
00446 -1, -1, -1,
00447 -1, -1, -1, -1, -1, -1, -1,
00448 -1, -1, -1, -1, -1, -1, -1,
00449 -1, -1, -1, -1, -1, -1, -1},
00450
00451 {151, 150, 149, 148, 147, 146, 145, 144,
00452 159, 158, 157, 156, 155, 154, 153,
00453 167, 166, 165, 164, 163, 162, 161, 160, 175, 174,
00454 -1, -1, -1,
00455 -1, -1, -1, -1, -1, -1, -1,
00456 -1, -1, -1, -1, -1, -1, -1,
00457 -1, -1, -1, -1, -1, -1, -1},
00458
00459 { 50, 49, 141, 140, 139, 138, 137,
00460 -1, -1, -1, -1, -1, -1, -1,
00461 -1, -1, -1, -1, -1, -1, -1,
00462 -1, -1, -1, -1, -1, -1, -1,
00463 -1, -1, -1, -1, -1, -1, -1,
00464 -1, -1, -1, -1, -1, -1, -1,
00465 -1, -1, -1, -1, -1, -1, -1},
00466
00467 { 58, 57, 173, 172, 171, 170, 169,
00468 -1, -1, -1, -1, -1, -1, -1,
00469 -1, -1, -1, -1, -1, -1, -1,
00470 -1, -1, -1, -1, -1, -1, -1,
00471 -1, -1, -1, -1, -1, -1, -1,
00472 -1, -1, -1, -1, -1, -1, -1,
00473 -1, -1, -1, -1, -1, -1, -1},
00474 },
00475
00476 {
00477
00478 { -1, -1, -1, -1, -1, -1, -1,
00479 -1, -1, -1, -1, -1, -1, -1,
00480 -1, -1, -1, -1, -1, -1, -1,
00481 -1, -1, -1, -1, -1, -1, -1,
00482 -1, -1, -1, -1, -1, -1, -1,
00483 -1, -1, -1, -1, -1, -1, -1,
00484 -1, -1, -1, -1, -1, -1, -1},
00485
00486 { 71, 70, 87, 86, 96, 97, 48,
00487 69, 68, 85, 84, 98, 99, 63,
00488 67, 66, 83, 82, 100, 101, 62,
00489 65, 64, 81, 80, 102, 103, 61,
00490 79, 78, 90, 91, 106, 107, 60,
00491 77, 76, 92, 93, 108, 109, 59,
00492 75, 74, 94, 95, 110, 111, 58},
00493
00494 { -1, -1, -1, -1, -1, -1, -1,
00495 -1, -1, -1, -1, -1, -1, -1,
00496 -1, -1, -1, -1, -1, -1, -1,
00497 -1, -1, -1, -1, -1, -1, -1,
00498 -1, -1, -1, -1, -1, -1, -1,
00499 -1, -1, -1, -1, -1, -1, -1,
00500 -1, -1, -1, -1, -1, -1, -1},
00501
00502 { 77, 70, 69, 68, 67,
00503 66, 65, 64, 79, 78,
00504 87, 86, 85, 84, 83,
00505 82, 81, 80, 95, 94,
00506 93, 76, 91, 90, 89,
00507 -1, -1, -1,
00508 -1, -1, -1, -1, -1, -1, -1,
00509 -1, -1, -1, -1, -1, -1, -1,
00510 -1, -1, -1, -1, -1, -1, -1},
00511
00512 { -1, -1, -1, -1, -1, -1, -1,
00513 -1, -1, -1, -1, -1, -1, -1,
00514 -1, -1, -1, -1, -1, -1, -1,
00515 -1, -1, -1, -1, -1, -1, -1,
00516 -1, -1, -1, -1, -1, -1, -1,
00517 -1, -1, -1, -1, -1, -1, -1,
00518 -1, -1, -1, -1, -1, -1, -1},
00519
00520 { 7, 6, 5, 4, 3, 2, 1,
00521 -1, -1, -1, -1, -1, -1, -1,
00522 -1, -1, -1, -1, -1, -1, -1,
00523 -1, -1, -1, -1, -1, -1, -1,
00524 -1, -1, -1, -1, -1, -1, -1,
00525 -1, -1, -1, -1, -1, -1, -1,
00526 -1, -1, -1, -1, -1, -1, -1},
00527 }
00528 };
00529 int address = fpdmap[eastwest][module][pmt-1];
00530 if (address>=0){
00531 if (eastwest==east){
00532 if (address<112) return mData->rawTriggerDet[prepostAddress(prepost)].FPDEastNSLayer0[address];
00533 else return mData->rawTriggerDet[prepostAddress(prepost)].FPDEastTBLayer0[address-112];
00534 }else{
00535 if (address<112) return mData->rawTriggerDet[prepostAddress(prepost)].FPDWestNSLayer0[address];
00536 else return mData->rawTriggerDet[prepostAddress(prepost)].FPDWestTBLayer0[address-112];
00537 }
00538 }else{
00539 return 0;
00540 }
00541 }
00542
00543 unsigned short StTriggerData2005::fpdSum(StBeamDirection eastwest, int module) const
00544 {
00545 static const short map[2][4]={{3,2,1,0},{7,6,5,4}};
00546 static const short nbit[2][4]={{16384,16384,8192,8192},{16384,16384,8192,8192}};
00547 return mData->TrgSum.DSMdata.FPD[map[eastwest][module]] % nbit[eastwest][module];
00548 }
00549
00550 unsigned short StTriggerData2005::fpdLayer1DSMRaw(StBeamDirection eastwest, int channel, int prepost) const{
00551 if (eastwest==east){
00552 if (channel<8) return mData->rawTriggerDet[prepostAddress(prepost)].FPDEastNSLayer1[channel];
00553 if (channel<16) return mData->rawTriggerDet[prepostAddress(prepost)].FPDEastTBLayer1[channel-8];
00554 }
00555 else{
00556 if (channel<8) return mData->rawTriggerDet[prepostAddress(prepost)].FPDWestNSLayer1[channel];
00557 if (channel<16) return mData->rawTriggerDet[prepostAddress(prepost)].FPDWestTBLayer1[channel-8];
00558 }
00559 return 0;
00560 }
00561
00562 unsigned short StTriggerData2005::fpdLayer1DSM(StBeamDirection eastwest, int module, int board, int prepost) const{
00563 static const short map[4][4]={{3,2,1,0},{7,6,5,4},{3,2,6,7},{1,0,4,5}};
00564 if (board<4){
00565 if (eastwest==east){
00566 if (module<2) return mData->rawTriggerDet[prepostAddress(prepost)].FPDEastNSLayer1[map[module][board]];
00567 else return mData->rawTriggerDet[prepostAddress(prepost)].FPDEastTBLayer1[map[module][board]];
00568 }
00569 else{
00570 if (module<2) return mData->rawTriggerDet[prepostAddress(prepost)].FPDWestNSLayer1[map[module][board]];
00571 else return mData->rawTriggerDet[prepostAddress(prepost)].FPDWestTBLayer1[map[module][board]];
00572 }
00573 }
00574 return 0;
00575 }
00576
00577 unsigned short StTriggerData2005::fpdLayer2DSMRaw(int channel) const{
00578 if (channel<8) return mData->TrgSum.DSMdata.FPD[channel];
00579 return 0;
00580 }
00581
00582 unsigned short StTriggerData2005::fpdLayer2DSM(StBeamDirection eastwest, int module) const{
00583 static const int dsmmap[2][4]={{3,2,1,0},{7,6,5,4}};
00584 if (module<4) return mData->TrgSum.DSMdata.FPD[dsmmap[eastwest][module]];
00585 return 0;
00586 }
00587
00588 unsigned short StTriggerData2005::zdcAtChannel(int channel, int prepost) const
00589 {
00590 static const int dsmmap[16]={7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8};
00591 if (channel>=0 && channel<16){ return mData->rawTriggerDet[prepostAddress(prepost)].ZDC[dsmmap[channel]]; }
00592 return 0;
00593 }
00594
00595 unsigned short StTriggerData2005::zdcAtAddress(int address, int prepost) const
00596 {
00597 if (address>=0 && address<16){ return mData->rawTriggerDet[prepostAddress(prepost)].ZDC[address]; }
00598 return 0;
00599 }
00600
00601 unsigned short StTriggerData2005::zdcUnAttenuated(StBeamDirection eastwest, int prepost) const
00602 {
00603 if (eastwest==east) {return mData->rawTriggerDet[prepostAddress(prepost)].ZDC[4];}
00604 if (eastwest==west) {return mData->rawTriggerDet[prepostAddress(prepost)].ZDC[0];}
00605 return 0;
00606 }
00607
00608 unsigned short StTriggerData2005::zdcAttenuated(StBeamDirection eastwest, int prepost) const
00609 {
00610 if (eastwest==east) {return mData->rawTriggerDet[prepostAddress(prepost)].ZDC[13];}
00611 if (eastwest==west) {return mData->rawTriggerDet[prepostAddress(prepost)].ZDC[10];}
00612 return 0;
00613 }
00614
00615 unsigned short StTriggerData2005::zdcADC(StBeamDirection eastwest, int pmt, int prepost) const
00616 {
00617 if (eastwest==east && pmt==1) {return mData->rawTriggerDet[prepostAddress(prepost)].ZDC[7];}
00618 if (eastwest==east && pmt==2) {return mData->rawTriggerDet[prepostAddress(prepost)].ZDC[6];}
00619 if (eastwest==east && pmt==3) {return mData->rawTriggerDet[prepostAddress(prepost)].ZDC[5];}
00620 if (eastwest==west && pmt==1) {return mData->rawTriggerDet[prepostAddress(prepost)].ZDC[3];}
00621 if (eastwest==west && pmt==2) {return mData->rawTriggerDet[prepostAddress(prepost)].ZDC[2];}
00622 if (eastwest==west && pmt==3) {return mData->rawTriggerDet[prepostAddress(prepost)].ZDC[1];}
00623 return 0;
00624
00625 }
00626
00627 unsigned short StTriggerData2005::zdcTDC(StBeamDirection eastwest, int prepost) const
00628 {
00629 if (eastwest==east) {return mData->rawTriggerDet[prepostAddress(prepost)].ZDC[8];}
00630 if (eastwest==west) {return mData->rawTriggerDet[prepostAddress(prepost)].ZDC[9];}
00631 return 0;
00632 }
00633
00634 unsigned short StTriggerData2005::zdcHardwareSum(int prepost) const
00635 {
00636 return mData->rawTriggerDet[prepostAddress(prepost)].ZDC[14];
00637 }
00638
00639 unsigned short StTriggerData2005::zdcSMD(StBeamDirection eastwest, int verthori, int strip, int prepost) const
00640 {
00641 static const int zdcsmd_map[2][2][8] ={
00642
00643
00644
00645
00646
00647
00648 { { 7, 6, 5, 4, 3, 2, 1, 11} ,
00649 { 0,15,14,13,12,8,10, 9} } ,
00650 { {23,22,21,20,19,18,17,24} ,
00651 {16,31,30,29,28,27,26,25} }
00652 };
00653 static const int zdcsmd_map2006[2][2][8] ={
00654 { {23,22,21,20,-1,-1,1,14} ,
00655 {19,18,17,16,-1,-1,13,8} } ,
00656 { {31,30,29,28,-1,-1,0,15} ,
00657 {27,26,25,24,-1,-1,12,9} }
00658 };
00659 if (verthori<0 || verthori>1) return 0;
00660 if (strip<1 || strip>8) return 0;
00661 int add=-1;
00662 if(mRun<7000000) {add=zdcsmd_map[eastwest][verthori][strip-1];}
00663 else {add=zdcsmd_map2006[eastwest][verthori][strip-1];}
00664 if(add>=0) return mData->rawTriggerDet[prepostAddress(prepost)].ZDCSMD[add];
00665 else return 0;
00666 };
00667
00668 unsigned short StTriggerData2005::bemcLayer1DSM(int channel, int prepost) const {
00669 const int n_bemc_layer1=48;
00670 if (channel<0 || channel >=n_bemc_layer1) {
00671 gMessMgr->Warning() << "Barrel DSM layer 1 out of range (" << channel << ")" << endm;
00672 return 0;
00673 }
00674 return mData->rawTriggerDet[prepostAddress(prepost)].BEMClayer1[channel];
00675 }
00676
00677 unsigned short StTriggerData2005::eemcLayer1DSM(int channel, int prepost) const {
00678 const int n_eemc_layer1=48;
00679 if (channel<0 || channel >=n_eemc_layer1) {
00680 gMessMgr->Warning() << "Endap DSM layer 1 out of range (" << channel << ")" << endm;
00681 return 0;
00682 }
00683 return mData->rawTriggerDet[prepostAddress(prepost)].EEMClayer1[channel];
00684 }
00685
00686 unsigned short StTriggerData2005::emcLayer2DSM(int channel) const {
00687 const int n_emc_layer2=8;
00688 if (channel<0 || channel >=n_emc_layer2) {
00689 gMessMgr->Warning() << "EMC DSM layer 2 out of range (" << channel << ")" << endm;
00690 return 0;
00691 }
00692 return mData->TrgSum.DSMdata.EMC[channel];
00693 }
00694
00695 unsigned char StTriggerData2005::bemcHighTower(int patch_id, int prepost) const
00696 {
00697
00698 const int m_max_patch=300;
00699
00700 if ( patch_id < 0 || patch_id >= m_max_patch) {
00701 gMessMgr->Warning() << "Invalid Barrel patch id: " << patch_id << endm;
00702 return 0;
00703 }
00704
00705 int dsm=patch_id/10;
00706 int channel=patch_id%10;
00707 unsigned short trg_word;
00708 if (dsm>=15)
00709 trg_word=decodeEmc12bit(dsm-15,channel,mData->rawTriggerDet[prepostAddress(prepost)].BEMCEast);
00710 else
00711 trg_word=decodeEmc12bit(dsm,channel,mData->rawTriggerDet[prepostAddress(prepost)].BEMCWest);
00712 return trg_word & 0x3F;
00713 }
00714
00715 unsigned char StTriggerData2005::bemcJetPatch (int patch_id, int prepost) const
00716 {
00717
00718 const int m_max_patch=300;
00719
00720 if ( patch_id < 0 || patch_id >= m_max_patch) {
00721 gMessMgr->Warning() << "Invalid Barrel patch id: " << patch_id << endm;
00722 return 0;
00723 }
00724
00725 int dsm=patch_id/10;
00726 int channel=patch_id%10;
00727 unsigned short trg_word;
00728 if (dsm>=15)
00729 trg_word=decodeEmc12bit(dsm-15,channel,mData->rawTriggerDet[prepostAddress(prepost)].BEMCEast);
00730 else
00731 trg_word=decodeEmc12bit(dsm,channel,mData->rawTriggerDet[prepostAddress(prepost)].BEMCWest);
00732 return trg_word >> 6;
00733 }
00734
00735 unsigned char StTriggerData2005::eemcHighTower(int patch_id, int prepost) const
00736 {
00737
00738 const int m_max_patch=90;
00739
00740 if ( patch_id < 0 || patch_id >= m_max_patch) {
00741 gMessMgr->Warning() << "Invalid Endcap patch id" << endm;
00742 return 0;
00743 }
00744
00745 int dsm=patch_id/10;
00746 int channel=patch_id%10;
00747 unsigned short trg_word;
00748 trg_word=decodeEmc12bit(dsm,channel,mData->rawTriggerDet[prepostAddress(prepost)].EEMC);
00749 return trg_word & 0x3F;
00750 }
00751
00752 unsigned char StTriggerData2005::eemcJetPatch (int patch_id, int prepost) const
00753 {
00754
00755 const int m_max_patch=90;
00756
00757 if ( patch_id < 0 || patch_id >= m_max_patch) {
00758 gMessMgr->Warning() << "Invalid Endcap patch id" << endm;
00759 return 0;
00760 }
00761
00762 int dsm=patch_id/10;
00763 int channel=patch_id%10;
00764 unsigned short trg_word;
00765 trg_word=decodeEmc12bit(dsm,channel,mData->rawTriggerDet[prepostAddress(prepost)].EEMC);
00766 return trg_word >> 6;
00767 }
00768
00769 unsigned char StTriggerData2005::bemcHighestTowerADC(int prepost) const
00770 {
00771
00772 const int m_max_patch=300;
00773 unsigned char h=0;
00774 for (int i=1; i<m_max_patch; i++){
00775 unsigned char hh=bemcHighTower(i,prepost);
00776 if (h>hh) h=hh;
00777 }
00778 return h;
00779 }
00780
00781 unsigned char StTriggerData2005::eemcHighestTowerADC(int prepost) const
00782 {
00783
00784 const int m_max_patch=90;
00785 unsigned char h=0;
00786 for (int i=1; i<m_max_patch; i++){
00787 unsigned char hh=eemcHighTower(i,prepost);
00788 if (h>hh) h=hh;
00789 }
00790 return h;
00791 }
00792
00793 void StTriggerData2005::dump() const
00794 {
00795 printf("***** StTriggerData Dump *****\n");
00796 printf(" Year=%d Version=%x\n",year(),version());
00797 printf(" %d pre and %d post crossing data available\n",numberOfPreXing(),numberOfPostXing());
00798 printf(" Token=%d TriggerWord=%x ActionWord=%x BusyStatus=%x\n",
00799 token(), triggerWord(), actionWord(), busyStatus());
00800 printf(" TUC Bits=%d : ",tcuBits());
00801 for (int i=0; i<16; i++) {printf(" %d",(tcuBits()>>(15-i))%2);}; printf("\n");
00802 printf(" BunchId 7bit=%d 48bit=%d\n",bunchId7Bit(), bunchId48Bit());
00803 printf(" Spin Bits=%d : ",spinBit());
00804 for (int i=0; i<8; i++) {printf(" %d",(spinBit()>>(7-i))%2);}; printf("\n");
00805 printf(" CTB ADC : "); for (int i=0; i<240;i++){ printf("%d ",ctb(i,0)); }; printf("\n");
00806 printf(" MWC ADC : "); for (int i=0; i<96; i++){ printf("%d ",mwc(i,0)); }; printf("\n");
00807 printf(" BBC East ADC : "); for (int i=1; i<=24;i++){ printf("%d ",bbcADC(east,i,0)); }; printf("\n");
00808 printf(" BBC West ADC : "); for (int i=1; i<=24;i++){ printf("%d ",bbcADC(west,i,0)); }; printf("\n");
00809 printf(" BBC East TAC : "); for (int i=1; i<=16;i++){ printf("%d ",bbcTDC(east,i,0)); }; printf("\n");
00810 printf(" BBC West TAC : "); for (int i=1; i<=16;i++){ printf("%d ",bbcTDC(west,i,0)); }; printf("\n");
00811 for (int i=-numberOfPreXing(); i<=static_cast<int>(numberOfPostXing()); i++){
00812 printf(" BBC Sums %d xing : ",i);
00813 printf("East=%d West=%d Large tile East=%d West=%d\n",
00814 bbcADCSum(east,i),bbcADCSum(west,i),
00815 bbcADCSumLargeTile(east,i),bbcADCSumLargeTile(west,i));
00816 }
00817 printf(" BBC Earilest : "); printf("East=%d West=%d Difference+256=%d\n",
00818 bbcEarliestTDC(east,0),bbcEarliestTDC(west,0),bbcTimeDifference());
00819 printf(" FPD East North : ");for (int i=1; i<=49;i++){ printf("%d ",fpd(east,0,i,0)); }; printf("\n");
00820 printf(" FPD East South : ");for (int i=1; i<=49;i++){ printf("%d ",fpd(east,1,i,0)); }; printf("\n");
00821 printf(" FPD East Top : ");for (int i=1; i<=25;i++){ printf("%d ",fpd(east,2,i,0)); }; printf("\n");
00822 printf(" FPD East Bottom : ");for (int i=1; i<=25;i++){ printf("%d ",fpd(east,3,i,0)); }; printf("\n");
00823 printf(" FPD East North PS: ");for (int i=1; i<= 7;i++){ printf("%d ",fpd(east,4,i,0)); }; printf("\n");
00824 printf(" FPD East South PS: ");for (int i=1; i<= 7;i++){ printf("%d ",fpd(east,5,i,0)); }; printf("\n");
00825 printf(" FPD West South : ");for (int i=1; i<=49;i++){ printf("%d ",fpd(west,1,i,0)); }; printf("\n");
00826 printf(" FPD West Bottom : ");for (int i=1; i<=25;i++){ printf("%d ",fpd(west,3,i,0)); }; printf("\n");
00827 printf(" FPD West South PS: ");for (int i=1; i<= 7;i++){ printf("%d ",fpd(west,5,i,0)); }; printf("\n");
00828 printf(" FPD Sums East : ");for (int j=0; j<4 ;j++) printf("%d ",fpdSum(east,j)); printf("\n");
00829 printf(" FPD Sums West : ");for (int j=0; j<4 ;j++) printf("%d ",fpdSum(west,j)); printf("\n");
00830 printf(" ZDC Sum(A) East : ");printf("%d ",zdcAttenuated(east)); printf("\n");
00831 printf(" ZDC Sum(A) West : ");printf("%d ",zdcAttenuated(west)); printf("\n");
00832 printf(" ZDC Sum(UA) East : ");printf("%d ",zdcUnAttenuated(east)); printf("\n");
00833 printf(" ZDC Sum(UA) West : ");printf("%d ",zdcUnAttenuated(west)); printf("\n");
00834 printf("\n");
00835 printf("***** StTriggerData Dump *****\n");
00836 }
00837
00838 char* StTriggerData2005::getTriggerStructure()
00839 {
00840 return (char*) mData;
00841 }
00842
00843 TrgDataType2005* StTriggerData2005::getTriggerStructure2005()
00844 {
00845 return mData;
00846 }
00847
00848 int StTriggerData2005::getRawSize() const
00849 {
00850 int npre = numberOfPreXing();
00851 int npost = numberOfPostXing();
00852 int rawSize=sizeof(EvtDescData2005)+sizeof(TrgSumData2005)
00853 + sizeof(RawTrgDet2005)*(npre+npost+1);
00854 return rawSize;
00855 }
00856
00857 unsigned char * StTriggerData2005::getDsm0_EEMC(int prepost) const {
00858 return mData->rawTriggerDet[prepostAddress(prepost)].EEMC;
00859 }
00860
00861 unsigned short int * StTriggerData2005::getDsm1_EEMC(int prepost) const{
00862 return mData->rawTriggerDet[prepostAddress(prepost)].EEMClayer1;
00863 }
00864
00865 unsigned short int * StTriggerData2005::getDsm2_EMC() const{
00866 return mData->TrgSum.DSMdata.EMC;
00867 }
00868
00869 unsigned short int * StTriggerData2005::getDsm3() const{
00870 return mData->TrgSum.DSMdata.lastDSM;
00871 }
00872
00873 int StTriggerData2005::L2ResultsOffset(StL2AlgorithmId id) const
00874 {
00875 if(mRun<7000000) return -1;
00876
00877 switch(id) {
00878 case l2Diagnostic: return L2RESULTS_OFFSET_TRG;
00879 case l2EmcCheck: return L2RESULTS_OFFSET_EMC_CHECK;
00880 case l2Jpsi: return L2RESULTS_OFFSET_JPSI;
00881 case l2Upsilon: return L2RESULTS_OFFSET_UPS;
00882 case l2Dijet: return L2RESULTS_OFFSET_DIJET;
00883 case l2EmcPedestal: return L2RESULTS_OFFSET_EMC_PED;
00884 case l2Pi0Gamma: return L2RESULTS_OFFSET_PIG;
00885 default: return -1;
00886 }
00887 }
00888
00889 bool StTriggerData2005::isL2Triggered(StL2TriggerResultType id) const
00890 {
00891 if(mRun<7000000) return false;
00892 if(mRun>7270000) return false;
00893
00894 int offset;
00895 offset=L2ResultsOffset(l2Dijet);
00896 L2jetResults2006 *jet = (L2jetResults2006 *) &(mData->TrgSum.L2Result[offset]);
00897 offset=L2ResultsOffset(l2Pi0Gamma);
00898 L2gammaResult *gam_bemc = (L2gammaResult *) &(mData->TrgSum.L2Result[offset]);
00899 L2gammaResult *gam_eemc = (L2gammaResult *) &(mData->TrgSum.L2Result[offset+2]);
00900
00901 switch(id) {
00902 case l2Trg2006BEMCGammaPi:
00903 return (gam_bemc->trigger & 0x3)==0x3;
00904 break;
00905 case l2Trg2006BEMCGammaPiRandom:
00906 return gam_bemc->trigger & 0x4;
00907 break;
00908 case l2Trg2006EEMCGammaPi:
00909 return (gam_eemc->trigger & 0x3)==0x3;
00910 break;
00911 case l2Trg2006EEMCGammaPiRandom:
00912 return gam_eemc->trigger & 0x4;
00913 break;
00914 case l2Trg2006MonoJet:
00915 return jet->int0.decision & 0x40;
00916 break;
00917 case l2Trg2006DiJet:
00918 return jet->int0.decision & 0x80;
00919 break;
00920 case l2Trg2006RandomJet:
00921 return jet->int0.decision & 0x20;
00922 break;
00923 default:
00924 return false;
00925 }
00926 }
00927
00928 unsigned int StTriggerData2005::l2ResultLength() const
00929 {
00930 return sizeof(mData->TrgSum.L2Result)/sizeof(unsigned int);
00931 }
00932
00933 const unsigned int* StTriggerData2005::l2Result() const
00934 {
00935 return mData->TrgSum.L2Result;
00936 }