34 #include <Riostream.h> 44 111, 121, 131, 141, 151, 161, 171,
45 211, 212, 221, 222, 231, 232, 241, 242, 251, 252, 261, 262, 271,
46 311, 312, 321, 322, 331, 332, 341, 342, 351, 352, 361, 362, 371,
47 411, 412, 413, 421, 422, 423, 424, 431, 432, 433, 434, 441, 442, 451, 452, 461, 462, 471,
48 521, 522, 523, 524, 531, 532, 533, 534, 541, 542, 551, 552, 561, 562, 571,
49 611, 612, 613, 621, 622, 623, 624, 631, 632, 633, 634, 641, 642, 651, 652, 661, 662, 671,
50 711, 712, 721, 722, 731, 732, 741, 742, 751, 752, 761, 762, 771,
51 811, 812, 821, 822, 831, 832, 841, 842, 851, 852, 861, 862, 871,
52 911, 921, 931, 941, 951, 961, 971,
53 -111, -121, -131, -141, -151, -161, -171,
54 -211, -212, -221, -222, -231, -232, -241, -242, -251, -252, -261, -262, -271,
55 -311, -312, -321, -322, -331, -332, -341, -342, -351, -352, -361, -362, -371,
56 -411, -412, -413, -421, -422, -423, -424, -431, -432, -433, -434, -441, -442, -451, -452, -461, -462, -471,
57 -521, -522, -523, -524, -531, -532, -533, -534, -541, -542, -551, -552, -561, -562, -571,
58 -611, -612, -613, -621, -622, -623, -624, -631, -632, -633, -634, -641, -642, -651, -652, -661, -662, -671,
59 -711, -712, -721, -722, -731, -732, -741, -742, -751, -752, -761, -762, -771,
60 -811, -812, -821, -822, -831, -832, -841, -842, -851, -852, -861, -862, -871,
61 -911, -921, -931, -941, -951, -961, -971
79 for (Int_t i=0; i<2; i++)
80 for (Int_t j=0; j<4; j++)
107 for (Int_t i=0; i<2; i++)
108 for (Int_t j=0; j<4; j++)
112 fMask[i][j] = 0xFFFF;
135 for (Int_t i=0; i<2; i++) {
136 for (Int_t j=0; j<4; j++) {
137 fXY[i][j] = right.
fXY[i][j];
145 for (Int_t i=0; i<2; i++) {
150 for (Int_t i=0; i<5; i++) {
178 for (Int_t i=0; i<2; i++) {
179 for (Int_t j=0; j<4; j++) {
180 fXY[i][j] = right.
fXY[i][j];
188 for (Int_t i=0; i<2; i++) {
193 for (Int_t i=0; i<5; i++) {
214 for (Int_t i=0; i<2; i++)
215 for (Int_t j=0; j<4; j++)
245 UShort_t stripBit = ( (1<<strip) & 0xFFFF );
246 fXY[cathode][chamber] |= ( stripBit &
fMask[cathode][chamber] );
257 if (op.Contains(
"X"))
BP(
"X");
259 if (op.Contains(
"Y"))
BP(
"Y");
268 const Int_t kModuleId[126] =
269 {11,12,13,14,15,16,17,
270 21,22,23,24,25,26,27,
271 31,32,33,34,35,36,37,
272 41,42,43,44,45,46,47,
273 51,52,53,54,55,56,57,
274 61,62,63,64,65,66,67,
275 71,72,73,74,75,76,77,
276 81,82,83,84,85,86,87,
277 91,92,93,94,95,96,97,
278 -11,-12,-13,-14,-15,-16,-17,
279 -21,-22,-23,-24,-25,-26,-27,
280 -31,-32,-33,-34,-35,-36,-37,
281 -41,-42,-43,-44,-45,-46,-47,
282 -51,-52,-53,-54,-55,-56,-57,
283 -61,-62,-63,-64,-65,-66,-67,
284 -71,-72,-73,-74,-75,-76,-77,
285 -81,-82,-83,-84,-85,-86,-87,
286 -91,-92,-93,-94,-95,-96,-97};
288 const Int_t kNstripY[126]=
289 { 8, 8, 8, 8, 8, 8,16,
291 16,16,16,16,16, 8,16,
292 16,16,16,16,16, 8,16,
294 16,16,16,16,16, 8,16,
295 16,16,16,16,16, 8,16,
300 16,16,16,16,16, 8,16,
301 16,16,16,16,16, 8,16,
303 16,16,16,16,16, 8,16,
304 16,16,16,16,16, 8,16,
306 8, 8, 8, 8, 8, 8,16};
310 TString nn = GetName();
312 if (op.Contains(
"X"))
314 printf(
"-------- TRIGGER INPUT ---------\n");
315 printf(
"--- warning: switchs not activated at this level ---\n");
316 printf(
"===============================================================\n");
317 printf(
" 5432109876543210");
319 const char *x[4] = {
"XMC11",
"XMC12",
"XMC21",
"XMC22"};
320 const char *s[4] = {
" ",
325 for (Int_t ch=0; ch<4; ch++)
327 printf(
"\n %s%s", x[ch], s[ch]);
329 UShort_t xy =
fXY[0][ch];
331 TBits w(16); w.Set(16,&xy);
336 UShort_t xyd =
fXYD[0][ch], xyu =
fXYU[0][ch];
337 TBits dw(16), uw(16); dw.Set(16,&xyd); uw.Set(16,&xyu);
341 for (Int_t i=0;i<16;i++) ew[i+8] = w[i];
343 for (Int_t i=0;i<8;i++)
354 printf(
"10987654321098765432109876543210\n");
357 if (op.Contains(
"Y"))
359 printf(
"---------------------------------------------------------------\n");
364 Int_t idCircuit = 0, absidModule = 0;
366 if (!(nn.Contains(
"Int")))
369 absidModule = TMath::Abs(Int_t(idCircuit/10));
374 for (Int_t i=0; i<63; i++)
376 if (kModuleId[i]==absidModule)
383 Int_t nStrip = kNstripY[iModule];
384 for (Int_t istrip=nStrip-1; istrip>=0; istrip--) {
385 if (istrip>9)
printf(
"%i",istrip-10*Int_t(istrip/10));
386 if (istrip<10)
printf(
"%i",istrip);
396 TBits v11(8); v11.Set(8,&xyval);
401 TBits v12(8); v12.Set(8,&xyval);
406 TBits v21(8); v21.Set(8,&xyval);
411 TBits v22(8); v22.Set(8,&xyval);
418 TBits v11(16); v11.Set(16,&xyval);
423 TBits v12(16); v12.Set(16,&xyval);
428 TBits v21(16); v21.Set(16,&xyval);
433 TBits v22(16); v22.Set(16,&xyval);
439 printf(
"---------------------------------------------------------------");
440 printf(
"\n upper part of circuit %i",idCircuit);
443 TBits wu21(16); wu21.Set(16,&xyval);
447 TBits wu22(16); wu22.Set(16,&xyval);
449 printf(
"\n lower part of circuit %i",idCircuit);
452 TBits wl21(16); wl21.Set(16,&xyval);
456 TBits wl22(16); wl22.Set(16,&xyval);
459 printf(
"===============================================================\n");
470 Int_t ch1e[19], ch2e[20], ch3e[35], ch4e[36];
471 Int_t sgleHit1[31], sgleHit2[63];
472 Int_t dbleHit1[31], dbleHit2[63];
478 for (i=0; i<31; i++) {
482 for (i=0; i<63; i++) {
490 for (i=0; i<19; i++) {
491 if (i<1||i>16) ch1e[i]=0;
492 else ch1e[i]=ch1q[i-1];
494 for (i=0; i<20; i++) {
495 if (i<2||i>17) ch2e[i]=0;
496 else ch2e[i]=ch2q[i-2];
498 for (i=0; i<35; i++) {
499 if (i<1||i>32) ch3e[i]=0;
500 else if (i>=1 && i<=8) ch3e[i]=ch3q[i-1]&!
GetSwitch(7);
501 else if (i>=9 && i<=24) ch3e[i]=ch3q[i-1]&!
GetSwitch(8);
502 else if (i>=25 && i<=32) ch3e[i]=ch3q[i-1]&!
GetSwitch(9);
504 for (i=0; i<36; i++) {
505 if (i<2||i>33) ch4e[i]=0;
506 else if (i>=2 && i<=9) ch4e[i]=ch4q[i-2]&!
GetSwitch(7);
507 else if (i>=10 && i<=25) ch4e[i]=ch4q[i-2]&!
GetSwitch(8);
508 else if (i>=26 && i<=33) ch4e[i]=ch4q[i-2]&!
GetSwitch(9);
512 for (i=0; i<=15; i++) {
513 sgleHit1[2*i] = (!ch1e[i+1]|(ch1e[i]^ch1e[i+2])) &
514 (!ch2e[i+2] | (ch2e[i+1]^ch2e[i+3]));
516 dbleHit1[2*i] = ch1e[i+1]&!(ch1e[i+2]^ch1e[i]) &
517 (ch2e[i+2] | (!ch2e[i]&ch2e[i+1]) | (ch2e[i+3]&!ch2e[i+4]));
520 for (i=0; i<=14; i++) {
521 sgleHit1[2*i+1] = (!ch1e[i+1]|!ch1e[i+2]|(ch1e[i]^ch1e[i+3])) &
522 (!ch2e[i+2] | !ch2e[i+3] | (ch2e[i+1]^ch2e[i+4]));
523 dbleHit1[2*i+1] = ch1e[i+1]&ch1e[i+2]&!(ch1e[i]^ch1e[i+3]) &
524 ((ch2e[i+2]&(!ch2e[i+1]|!ch2e[i])) |
525 (ch2e[i+3]&(ch2e[i+2]|!ch2e[i+4]|!ch2e[i+5])));
529 for (i=0; i<=31; i++) {
530 sgleHit2[2*i] = (!ch3e[i+1]|(ch3e[i]^ch3e[i+2])) &
531 (!ch4e[i+2] | (ch4e[i+1]^ch4e[i+3]));
532 dbleHit2[2*i] = ch3e[i+1]&!(ch3e[i+2]^ch3e[i]) &
533 (ch4e[i+2] | (!ch4e[i]&ch4e[i+1]) | (ch4e[i+3]&!ch4e[i+4]));
536 for (i=0; i<=30; i++) {
537 sgleHit2[2*i+1] = (!ch3e[i+1]|!ch3e[i+2]|(ch3e[i]^ch3e[i+3])) &
538 (!ch4e[i+2] | !ch4e[i+3] | (ch4e[i+1]^ch4e[i+4]));
539 dbleHit2[2*i+1] = ch3e[i+1]&ch3e[i+2]&!(ch3e[i]^ch3e[i+3]) &
540 ((ch4e[i+2]&(!ch4e[i+1]|!ch4e[i])) |
541 (ch4e[i+3]&((ch4e[i+2]|!ch4e[i+4])|!ch4e[i+5])));
546 printf(
"===============================================================\n");
547 printf(
" X plane after sgle and dble \n");
548 printf(
" 0987654321098765432109876543210");
550 for (istrip=30; istrip>=0; istrip--)
printf(
"%i",(!sgleHit1[istrip]));
552 for (istrip=30; istrip>=0; istrip--)
printf(
"%i",dbleHit1[istrip]);
554 for (istrip=62; istrip>=0; istrip--)
printf(
"%i",(!sgleHit2[istrip]));
556 for (istrip=62; istrip>=0; istrip--)
printf(
"%i",dbleHit2[istrip]);
557 printf(
"\n 210987654321098765432109876543210987654321098765432109876543210\n");
563 Int_t rearImage[31][31];
564 for (i=0; i<31; i++) {
565 for (j=0; j<31; j++) {
570 Int_t notOr1=!dbleHit1[30] & !dbleHit1[29] & !dbleHit1[28] & !dbleHit1[27] &
571 !dbleHit1[26] & !dbleHit1[25] & !dbleHit1[24] & !dbleHit1[23] &
572 !dbleHit1[22] & !dbleHit1[21] & !dbleHit1[20] & !dbleHit1[19] &
573 !dbleHit1[18] & !dbleHit1[17] & !dbleHit1[16] & !dbleHit1[15] &
574 !dbleHit1[14] & !dbleHit1[13] & !dbleHit1[12] & !dbleHit1[11] &
575 !dbleHit1[10] & !dbleHit1[9] & !dbleHit1[8] & !dbleHit1[7] &
576 !dbleHit1[6] & !dbleHit1[5] & !dbleHit1[4] & !dbleHit1[3] &
577 !dbleHit1[2] & !dbleHit1[1] & !dbleHit1[0] & !
fCoinc44;
579 Int_t notOr2= !dbleHit2[62] & !dbleHit2[61] & !dbleHit2[60] & !dbleHit2[59] &
580 !dbleHit2[58] & !dbleHit2[57] & !dbleHit2[56] & !dbleHit2[55] &
581 !dbleHit2[54] & !dbleHit2[53] & !dbleHit2[52] & !dbleHit2[51] &
582 !dbleHit2[50] & !dbleHit2[49] & !dbleHit2[48] & !dbleHit2[47] &
583 !dbleHit2[46] & !dbleHit2[45] & !dbleHit2[44] & !dbleHit2[43] &
584 !dbleHit2[42] & !dbleHit2[41] & !dbleHit2[40] & !dbleHit2[39] &
585 !dbleHit2[38] & !dbleHit2[37] & !dbleHit2[36] & !dbleHit2[35] &
586 !dbleHit2[34] & !dbleHit2[33] & !dbleHit2[32] & !dbleHit2[31] &
587 !dbleHit2[30] & !dbleHit2[29] & !dbleHit2[28] & !dbleHit2[27] &
588 !dbleHit2[26] & !dbleHit2[25] & !dbleHit2[24] & !dbleHit2[23] &
589 !dbleHit2[22] & !dbleHit2[21] & !dbleHit2[20] & !dbleHit2[19] &
590 !dbleHit2[18] & !dbleHit2[17] & !dbleHit2[16] & !dbleHit2[15] &
591 !dbleHit2[14] & !dbleHit2[13] & !dbleHit2[12] & !dbleHit2[11] &
592 !dbleHit2[10] & !dbleHit2[9] & !dbleHit2[8] & !dbleHit2[7] &
593 !dbleHit2[6] & !dbleHit2[5] & !dbleHit2[4] & !dbleHit2[3] &
594 !dbleHit2[2] & !dbleHit2[1] & !dbleHit2[0] & !
fCoinc44;
597 for (i=0; i<31; i++) {
598 sgleHit1[i] = !sgleHit1[i]¬Or1;
600 for (i=0; i<63; i++) {
601 sgleHit2[i] = !sgleHit2[i]¬Or2;
605 for (i=0; i<31; i++){
606 Int_t tmpSgleHit2[31];
607 Int_t tmpDbleHit2[31];
608 for (j=0; j<31; j++){
609 tmpSgleHit2[j] = sgleHit2[i+j+1];
610 tmpDbleHit2[j] = dbleHit2[i+j+1];
613 for (Int_t k=0; k<31; k++) {
614 rearImage[i][k]=(sgleHit1[i]&tmpDbleHit2[k])|
615 (dbleHit1[i]&(tmpSgleHit2[k]|tmpDbleHit2[k]));
621 printf(
"===============================================================\n");
622 for (i=30; i>=0; i--) {
624 for (istrip=30; istrip>=0; istrip--)
printf(
"%i",rearImage[i][istrip]);
633 for (i=0; i<31; i++) {
634 for (j=0; j<6; j++) {
639 for (i=0; i<31; i++){
640 Int_t leftDev[5], rightDev[5];
641 Int_t orL1, andL1, andL2, orR1, orR2, andR1, andR2, andR3;
644 orL1=rearImage[i][16]|rearImage[i][18]|rearImage[i][20]|rearImage[i][22];
645 andL1=!rearImage[i][17]&!rearImage[i][19]&!rearImage[i][21] & !orL1;
646 andL2=!rearImage[i][23]&!rearImage[i][24]&!rearImage[i][25]&!rearImage[i][26];
648 leftDev[0] = (rearImage[i][16]|!rearImage[i][17]) &
649 (rearImage[i][16]|rearImage[i][18]|(!rearImage[i][19]&
650 (rearImage[i][20]|!rearImage[i][21]))) &
651 (orL1|(!rearImage[i][23]&(rearImage[i][24]|!rearImage[i][25]))) &
652 (orL1|rearImage[i][24]|rearImage[i][26]|(!rearImage[i][27]&
653 (rearImage[i][28]|!rearImage[i][29])));
655 leftDev[1] = !rearImage[i][16] &
656 !(!rearImage[i][17]&!rearImage[i][18]&!rearImage[i][21]&!rearImage[i][22] &
657 (!rearImage[i][25]&!rearImage[i][26]&(rearImage[i][27]|rearImage[i][28]))) &
658 (rearImage[i][17]|rearImage[i][18] | (!rearImage[i][19]&!rearImage[i][20])) &
659 (rearImage[i][17]|rearImage[i][18]|rearImage[i][21]|rearImage[i][22] |
660 (!rearImage[i][23]&!rearImage[i][24]));
662 leftDev[2] = (!rearImage[i][16]&!rearImage[i][17]&!rearImage[i][18]) &
663 (rearImage[i][19]|rearImage[i][20]|rearImage[i][21]|rearImage[i][22] | andL2);
668 !rearImage[i][27]&!rearImage[i][28]&!rearImage[i][29]&!rearImage[i][30] &
672 orR1=rearImage[i][8]|rearImage[i][10]|rearImage[i][12]|rearImage[i][14];
673 orR2=rearImage[i][8]|rearImage[i][9]|rearImage[i][10]|rearImage[i][11];
674 andR1=!rearImage[i][12]&!rearImage[i][13]&!rearImage[i][14]&!rearImage[i][15];
676 !rearImage[i][8]&!rearImage[i][9]&!rearImage[i][10]&!rearImage[i][11] & andR1;
677 andR3=!rearImage[i][4]&!rearImage[i][5]&!rearImage[i][6]&!rearImage[i][7];
679 rightDev[0] = !rearImage[i][15]&(rearImage[i][14]|!rearImage[i][13]) &
680 ((rearImage[i][12]|rearImage[i][14]|(!rearImage[i][11]&
681 (rearImage[i][10]|!rearImage[i][9]))) &
682 ((orR1|(!rearImage[i][7]&(rearImage[i][6]|!rearImage[i][5]))) &
683 (orR1|rearImage[i][4]|rearImage[i][6]|(!rearImage[i][3]&(rearImage[i][2]|
684 !rearImage[i][1])))));
686 rightDev[1] = !rearImage[i][15]&!rearImage[i][14] &
687 !(!rearImage[i][4]&!rearImage[i][5]&!rearImage[i][8]&!rearImage[i][9] &
688 (!rearImage[i][12]&!rearImage[i][13]&(rearImage[i][2]|rearImage[i][3]))) &
689 (rearImage[i][12]|rearImage[i][13] | (!rearImage[i][10]&!rearImage[i][11])) &
690 (rearImage[i][8]|rearImage[i][9]|rearImage[i][12]|rearImage[i][13] |
691 (!rearImage[i][6]&!rearImage[i][7]));
693 rightDev[2] = andR1 & (orR2 | andR3);
696 !rearImage[i][0]&!rearImage[i][1]&!rearImage[i][2]&!rearImage[i][3] &
700 Int_t tmpLeftDev=0, tmpRightDev=0;
702 tmpLeftDev = tmpLeftDev + Int_t(leftDev[j]<<j);
703 tmpRightDev = tmpRightDev + Int_t(rightDev[j]<<j);
707 if (tmpLeftDev < tmpRightDev ){
708 for (j=0; j<5; j++){ dev[i][j]=leftDev[j];}
711 for (j=0; j<5; j++){ dev[i][j]=rightDev[j];}
718 printf(
"===============================================================\n");
719 for (i=30; i>=0; i--) {
721 for (istrip=5; istrip>=0; istrip--)
printf(
"%i",dev[i][istrip]);
729 Int_t bga1[16], bga2[8], bga3[4], bga4[2], bga5;
730 Int_t tmpbga1[16][6], tmpbga2[8][6], tmpbga3[4][6], tmpbga4[2][6], tmpbga5[6];
731 Int_t tmpMax[6]={1,1,1,1,1,0};
733 for (i=0; i<15; i++) {
734 Sort2x5(dev[2*i],dev[2*i+1],tmpbga1[i],bga1[i]);
736 Sort2x5(dev[30],tmpMax,tmpbga1[15],bga1[15]);
740 printf(
"===============================================================\n");
741 printf(
" sorting : 1st level \n");
742 for (i=15; i>=0; i--) {
743 printf(
"\t %i \t",bga1[i]);
744 for (j=5; j>=0; j--)
printf(
"%i",tmpbga1[i][j]);
749 for (i=0; i<8; i++) {
750 Sort2x5(tmpbga1[2*i],tmpbga1[2*i+1],tmpbga2[i],bga2[i]);
755 printf(
"===============================================================\n");
756 printf(
" sorting : 2nd level \n");
757 for (i=7; i>=0; i--) {
758 printf(
"\t %i \t",bga2[i]);
759 for (j=5; j>=0; j--)
printf(
"%i",tmpbga1[i][j]);
764 for (i=0; i<4; i++) {
765 Sort2x5(tmpbga2[2*i],tmpbga2[2*i+1],tmpbga3[i],bga3[i]);
770 printf(
"===============================================================\n");
771 printf(
" sorting : 3rd level \n");
772 for (i=3; i>=0; i--) {
773 printf(
"\t %i \t",bga3[i]);
774 for (j=5; j>=0; j--)
printf(
"%i",tmpbga3[i][j]);
779 for (i=0; i<2; i++) {
780 Sort2x5(tmpbga3[2*i],tmpbga3[2*i+1],tmpbga4[i],bga4[i]);
785 printf(
"===============================================================\n");
786 printf(
" sorting : 4th level \n");
787 for (i=1; i>=0; i--) {
788 printf(
"\t %i \t",bga4[i]);
789 for (j=5; j>=0; j--)
printf(
"%i",tmpbga4[i][j]);
794 Sort2x5(tmpbga4[0],tmpbga4[1],tmpbga5,bga5);
797 fMinDev[4] = tmpbga5[5] | tmpbga5[4];
798 for (i=0; i<4; i++) {
799 fMinDev[i]=tmpbga5[i] & !tmpbga5[4];
807 if (tmpAd<=3) fMinDevStrip[2]=bga3[tmpAd];
809 tmpAd=fMinDevStrip[2]+fMinDevStrip[3]*2+fMinDevStrip[4]*4;
810 if (tmpAd<=7) fMinDevStrip[1]=bga2[tmpAd];
812 tmpAd=fMinDevStrip[1]+fMinDevStrip[2]*2+fMinDevStrip[3]*4+fMinDevStrip[4]*8;
813 if (tmpAd<=15) fMinDevStrip[0]=bga1[tmpAd];
816 printf(
"===============================================================\n");
818 for (i=4; i>=0; i--)
printf(
"%i",fMinDevStrip[i]);
822 printf(
"===============================================================\n");
829 Int_t minDev[6], Int_t &dev1GTdev2)
832 Int_t tmpDev1=0, tmpDev2=0;
834 for (Int_t j=0; j<5; j++)
836 tmpDev1 += Int_t(dev1[j]<<j);
837 tmpDev2 += Int_t(dev2[j]<<j);
840 if (tmpDev1<=tmpDev2)
842 for (Int_t j=0; j<=5; j++) minDev[j]=dev1[j];
847 for (Int_t j=0; j<=5; j++) minDev[j]=dev2[j];
854 Int_t y3u[16], Int_t y3d[16], Int_t y4u[16], Int_t y4d[16])
878 Int_t ch1[16], ch2[16], ch3[16], ch4[16];
880 Int_t tmpy3to16[16], tmpy4to16[16];
881 Int_t tmpy3uto16[16], tmpy3dto16[16], tmpy4uto16[16], tmpy4dto16[16];
908 for (i=0; i<16; i++) ch3[i] = ch4[i] = 0;
911 for (i=0; i<16; i++){
912 ch3[i] = tmpy3to16[i];
913 ch4[i] = tmpy4to16[i];
917 for (i=0; i<16; i++){
918 ch3[i] = tmpy3dto16[i]|tmpy3to16[i];
919 ch4[i] = tmpy4dto16[i]|tmpy4to16[i];
923 for (i=0; i<16; i++){
924 ch3[i] = tmpy3uto16[i]|tmpy3to16[i];
925 ch4[i] = tmpy4uto16[i]|tmpy4to16[i];
929 for (i=0; i<16; i++){
930 ch3[i] = tmpy3dto16[i]|tmpy3to16[i]|tmpy3uto16[i];
931 ch4[i] = tmpy4dto16[i]|tmpy4to16[i]|tmpy4uto16[i];
937 printf(
"===============================================================\n");
938 printf(
" Y plane after PreHandling x2m x2u x2d orMud %i %i %i %i %i \n",
941 for (istrip=15; istrip>=0; istrip--) {
942 if (istrip>9)
printf(
"%i",istrip-10*Int_t(istrip/10));
943 if (istrip<10)
printf(
"%i",istrip);
946 for (istrip=15; istrip>=0; istrip--)
printf(
"%i",ch1[istrip]);
948 for (istrip=15; istrip>=0; istrip--)
printf(
"%i",ch2[istrip]);
950 for (istrip=15; istrip>=0; istrip--)
printf(
"%i",ch3[istrip]);
952 for (istrip=15; istrip>=0; istrip--)
printf(
"%i",ch4[istrip]);
960 Int_t sgle1[16], dble1[16];
961 Int_t sgle2[16], dble2[16];
964 for (i=0; i<16; i++) {
965 dble1[i] = ch1[i] & ch2[i];
966 dble2[i] = ch3[i] & ch4[i];
968 sgle1[i] = (ch1[i]|ch2[i]);
969 sgle2[i] = (ch3[i]|ch4[i]);
974 printf(
"===============================================================\n");
975 printf(
" Y plane after sgle dble \n");
977 for (istrip=15; istrip>=0; istrip--) {
978 if (istrip>9)
printf(
"%i",istrip-10*Int_t(istrip/10));
979 if (istrip<10)
printf(
"%i",istrip);
982 for (istrip=15; istrip>=0; istrip--)
printf(
"%i",sgle1[istrip]);
984 for (istrip=15; istrip>=0; istrip--)
printf(
"%i",dble1[istrip]);
986 for (istrip=15; istrip>=0; istrip--)
printf(
"%i",sgle2[istrip]);
988 for (istrip=15; istrip>=0; istrip--)
printf(
"%i",dble2[istrip]);
994 Int_t notOr1, notOr2;
996 notOr1=!dble1[15] & !dble1[14] & !dble1[13] & !dble1[12] &
997 !dble1[11] & !dble1[10] & !dble1[9] & !dble1[8] &
998 !dble1[7] & !dble1[6] & !dble1[5] & !dble1[4] &
999 !dble1[3] & !dble1[2] & !dble1[1] & !dble1[0];
1001 notOr2=!dble2[15] & !dble2[14] & !dble2[13] & !dble2[12] &
1002 !dble2[11] & !dble2[10] & !dble2[9] & !dble2[8] &
1003 !dble2[7] & !dble2[6] & !dble2[5] & !dble2[4] &
1004 !dble2[3] & !dble2[2] & !dble2[1] & !dble2[0];
1006 for (i=0; i<16; i++) {
1007 sgle1[i] = sgle1[i] & notOr1 & !
fCoinc44;
1008 sgle2[i] = sgle2[i] & notOr2 & !
fCoinc44;
1014 Int_t frontImage[16];
1016 for (i=1; i<15; i++) {
1017 frontImage[i] = ((dble1[i] | sgle1[i]) &
1018 (dble2[i+1] | dble2[i] | dble2[i-1])) |
1019 (dble1[i] & (sgle2[i+1] | sgle2[i] | sgle2[i-1]));
1021 frontImage[0] = ((dble1[0] | sgle1[0]) &
1022 (dble2[1] | dble2[0])) | (dble1[0] & (sgle2[1] | sgle2[0]));
1024 frontImage[15] = ((dble1[15] | sgle1[15]) &
1025 (dble2[15] | dble2[14])) | (dble1[15] & (sgle2[15] | sgle2[14]));
1030 printf(
"===============================================================\n");
1031 printf(
" Y plane frontImage\n");
1033 for (istrip=15; istrip>=0; istrip--) {
1034 if (istrip>9)
printf(
"%i",istrip-10*Int_t(istrip/10));
1035 if (istrip<10)
printf(
"%i",istrip);
1038 for (istrip=15; istrip>=0; istrip--)
printf(
"%i",frontImage[istrip]);
1046 Int_t or1, or2, and1, and2, and3;
1048 or1 = frontImage[7]|frontImage[5]|frontImage[3]|frontImage[1];
1049 or2 = frontImage[7]|frontImage[6]|frontImage[5]|frontImage[4];
1050 and1 = !frontImage[3]&!frontImage[2]&!frontImage[1]&!frontImage[0];
1051 and2 = !frontImage[7]&!frontImage[6]&!frontImage[5]&!frontImage[4] & and1;
1052 and3 = !frontImage[11]&!frontImage[10]&!frontImage[9]&!frontImage[8];
1054 fCoordY[0] = !frontImage[0]&(frontImage[1]|!frontImage[2]) &
1055 (frontImage[3]|frontImage[1]|(!frontImage[4]&(frontImage[5]|!frontImage[6]))) &
1056 (or1|(!frontImage[8]&(frontImage[9]|!frontImage[10]))) &
1057 (or1|frontImage[11]|frontImage[9]|(!frontImage[12]&(frontImage[13]|!frontImage[14])));
1059 fCoordY[1] = !frontImage[0]&!frontImage[1] &
1060 !(!frontImage[11]&!frontImage[10]&!frontImage[7]&!frontImage[6] &
1061 !frontImage[3]&!frontImage[2]&(frontImage[13]|frontImage[12])) &
1062 (frontImage[3]|frontImage[2] | (!frontImage[5]&!frontImage[4])) &
1063 (frontImage[7]|frontImage[6]|frontImage[3]|frontImage[2] |
1064 (!frontImage[9]&!frontImage[8]));
1066 fCoordY[2] = and1 & (or2 | and3);
1070 fCoordY[4] = !frontImage[15]&!frontImage[14]&!frontImage[13]&!frontImage[12] &
1086 for (Int_t i=0; i<5; i++) iStripX += static_cast<int>(
fMinDevStrip[i] << i );
1087 for (Int_t i=0; i<4; i++) deviation += static_cast<int>(
fMinDev[i] << i );
1092 for (Int_t i=0; i<4; i++) iStripY += static_cast<int>(
fCoordY[i] << i );
1101 if (xOutput && yOutput){
1105 if ( !
fMinDev[4] && deviation ) sign=-1;
1106 if ( !
fMinDev[4] && !deviation ) sign= 0;
1107 if (
fMinDev[4] == 1 ) sign=+1;
1119 static_cast<int>(
fLutLpt[1]<<1) +
1120 static_cast<int>(
fLutHpt[0]<<2) +
1121 static_cast<int>(
fLutHpt[1]<<3);
1131 const Int_t kMaxfields = 2;
char **fields =
new char*[kMaxfields];
1133 for (Int_t i = 0; i < kMaxfields; i++)
1134 fields[i] =
new char[1];
1136 char s[100]; strncpy(s, GetName(), 99);
1140 for (
char *token = strtok(s,
"B");
1142 token = strtok(NULL,
" "))
1144 delete [] fields[numlines];
1145 fields[numlines] =
new char[strlen(token)+1];
1146 strcpy(fields[numlines++], token);
1149 TString l(fields[0]);
1153 Int_t lL = atoi(&l[4]),
cC = atoi(&l[2]), sS = (copy==
'R') ? +1 : -1;
1155 const char *
b[4] = {
"12",
"34",
"56",
"78"};
1159 for (Int_t i=0; i<4; i++)
if (!strcmp(fields[1],b[i])) {ib = i;
break;} ib++;
1162 lL -= 9; lL = abs(lL); lL++;
1164 Int_t code = 100 * lL + 10 *
cC + ib;
1170 for (Int_t i=0; i<234; i++)
if (
fgkCircuitId[i] == code) {ic = i;
break;}
1182 if ( index >= 0 && index < 2*4 )
1190 AliError(Form(
"Index %d out of bounds (max %d)",index,8));
1199 TString op = option;
1201 if (op.Contains(
"CONF"))
Conf();
1203 if (op.Contains(
"BITP"))
Pattern();
1205 if (op.Contains(
"RESPI"))
Resp(
"I");
1207 if (op.Contains(
"RESPF"))
Resp(
"F");
1209 if (op.Contains(
"RESPO"))
Resp(
"O");
1211 if (op.Contains(
"ALL"))
1225 cout <<
"Switch(" << GetName() <<
")" 1236 <<
" trans. conn. " <<
GetTC()
1237 <<
" Slot = " <<
fSlot 1246 TString op = option;
1248 if (op.Contains(
"I"))
1251 printf(
"===============================================================\n");
1252 printf(
"-------- TRIGGER OUTPUT --------\n");
1253 printf(
"minDevStrip = ");
1261 if (op.Contains(
"O")){
1262 printf(
"-- Output --\n");
1278 for (Int_t i=4; i>=0; i--)
fCoordY[i] = 1;
1282 Int_t xX1[16], xX2[16], xXX3[32], xXX4[32];
1284 TBits x1(16), x2(16), x3(16), x4(16);
1288 xyv =
fXY[0][0]; x1.Set(16,&xyv);
1289 xyv =
fXY[0][1]; x2.Set(16,&xyv);
1290 xyv =
fXY[0][2]; x3.Set(16,&xyv);
1291 xyv =
fXY[0][3]; x4.Set(16,&xyv);
1293 TBits x3u(16), x4u(16), x3d(16), x4d(16);
1295 xyv =
fXYU[0][2]; x3u.Set(16,&xyv);
1296 xyv =
fXYU[0][3]; x4u.Set(16,&xyv);
1298 xyv =
fXYD[0][2]; x3d.Set(16,&xyv);
1299 xyv =
fXYD[0][3]; x4d.Set(16,&xyv);
1301 for (Int_t i=0;i<16;i++)
1310 for (Int_t i=0;i<8;i++)
1315 xXX3[i+24] = x3u[i];
1316 xXX4[i+24] = x4u[i];
1321 TrigX(xX1, xX2, xXX3, xXX4);
1323 Int_t yY1[16], yY2[16], yY3[16], yY4[16];
1325 Int_t yY3U[16], yY3D[16], yY4U[16], yY4D[16];
1327 TBits y1(16), y2(16), y3(16), y4(16);
1329 TBits y3u(16), y3d(16), y4u(16), y4d(16);
1331 xyv =
fXY[1][0]; y1.Set(16,&xyv);
1332 xyv =
fXY[1][1]; y2.Set(16,&xyv);
1333 xyv =
fXY[1][2]; y3.Set(16,&xyv);
1334 xyv =
fXY[1][3]; y4.Set(16,&xyv);
1336 xyv =
fXYU[1][2]; y3u.Set(16,&xyv);
1337 xyv =
fXYD[1][2]; y3d.Set(16,&xyv);
1338 xyv =
fXYU[1][3]; y4u.Set(16,&xyv);
1339 xyv =
fXYD[1][3]; y4d.Set(16,&xyv);
1341 for (Int_t i=0;i<16;i++)
1355 TrigY(yY1, yY2, yY3, yY4, yY3U, yY3D, yY4U, yY4D);
1366 Bool_t output = kFALSE;
1368 for (Int_t i=0; i<4; i++) iStripY += static_cast<int>(
fCoordY[i] << i );
1370 if (
fCoordY[4]==1 && iStripY==15) output=kFALSE;
1381 Int_t deviation = 0;
1382 Bool_t output = kFALSE;
1384 for (Int_t i=0; i<4; i++) deviation += static_cast<int>(
fMinDev[i] << i );
1386 if (
fMinDev[4]==1 && !deviation) output=kFALSE;
1396 for (Int_t icath=0; icath<2; icath++){
1397 for(Int_t ich=0; ich<2; ich++){
1398 if (
fXY[icath][ich] )
return kFALSE;
virtual void SetbitM(Int_t strip, Int_t cathode, Int_t chamber)
printf("Chi2/npoints = %f\n", TMath::Sqrt(chi2/npoints))
virtual void Scan(Option_t *option="") const
virtual method for derivated classes
virtual void TrigX(Int_t ch1q[16], Int_t ch2q[16], Int_t ch3q[32], Int_t ch4q[32])
AliMUONLocalTriggerBoard & operator=(const AliMUONLocalTriggerBoard &right)
virtual Int_t GetI() const
AliMUONTriggerLut * fLUT
! Pointer to trigger LUT, that we do not own.
UShort_t fMask[2][4]
Mask.
UShort_t fResponse
RESPONSE.
static const Int_t fgkCircuitId[234]
old numbering (to be removed)
Class that manages the properties of the local board.
Int_t fMinDevStrip[5]
X (from algo)
virtual void BP(const Option_t *option) const
display X/Y bp
virtual UShort_t GetSwitch(Int_t i) const
Return i-th Switch value.
UShort_t fXYU[2][4]
Bit pattern UP.
virtual void ResetResponse()
virtual void Response()
virtual method for derivated classes
Int_t fStripX11
MT1 X position of the valid road.
Int_t fStripY11
MT1 Y position of the valid road.
void GetLutOutput(Int_t circuit, Int_t xstrip, Int_t idev, Int_t ystrip, Int_t lutLpt[2], Int_t lutHpt[2]) const
Trigger board base class.
virtual void LocalTrigger()
virtual void Mask(Int_t index, UShort_t value)
Implementation of local trigger board objects.
Int_t fCoinc44
Coinc 44 (0/1 = coinc34/coinc44)
virtual ~AliMUONLocalTriggerBoard()
Int_t fLutLpt[2]
Low Pt cuts estimated from LUT.
virtual void TrigY(Int_t y1[16], Int_t y2[16], Int_t y3[16], Int_t y4[16], Int_t y3u[16], Int_t y3d[16], Int_t y4u[16], Int_t y4d[16])
Int_t fOutput
Board has triggered.
AliMpLocalBoard * fMpLocalBoard
pointer to the local board mapping
Int_t fDev
X deviation as in table 3-1 of Local Trigger Board PRR.
Int_t fTrigY
Trigger in Y.
virtual Int_t GetNumber() const
Return Board number.
virtual void Resp(Option_t *option) const
local trigger info before ("I") and after ("F") LUT
Int_t fMinDev[5]
Dev (from algo)
virtual Bool_t IsTrigX() const
Int_t fLutHpt[2]
High Pt cuts estimated from LUT.
AliMUONTriggerBoard & operator=(const AliMUONTriggerBoard &rhs)
AliMUONLocalTriggerBoard()
virtual Bool_t IsNull() const
UShort_t fXY[2][4]
Bit pattern.
UShort_t fXYD[2][4]
Bit pattern DOWN.
virtual void Reset()
virtual method for derivated classes
Int_t fCoordY[5]
Y (from algo)
virtual void Conf() const
#define AliError(message)
Int_t fSlot
SLOT NUMBER IN CRATE.
virtual void Sort2x5(Int_t dev1[6], Int_t dev2[6], Int_t minDev[6], Int_t &dev1GTdev2)
virtual void Pattern(const Option_t *option="X Y") const
virtual Bool_t GetTC() const
Return Transverse connector.
virtual Bool_t IsTrigY() const