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