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