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