X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONLocalTriggerBoard.cxx;h=9dc5583acde13d68ebc23b0fe574eb6019d6420e;hb=99c136e1c3e77da0cd9cfccb149742d67c36aaa2;hp=c6aec007e98fdc11d9b0a0a00cdde7888d66ac6d;hpb=ac8095734b9f65ab746223badef2484e36280cab;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONLocalTriggerBoard.cxx b/MUON/AliMUONLocalTriggerBoard.cxx index c6aec007e98..9dc5583acde 100644 --- a/MUON/AliMUONLocalTriggerBoard.cxx +++ b/MUON/AliMUONLocalTriggerBoard.cxx @@ -15,13 +15,16 @@ /* $Id$ */ +//----------------------------------------------------------------------------- /// \class AliMUONLocalTriggerBoard /// A local trigger board has as input a bit pattern and returns /// the local trigger response after comparison w/ a LUT /// \todo Change member functions comments in capital letters to normal text /// /// \author Rachid Guernane (LPCCFd) +//----------------------------------------------------------------------------- +#include #include "AliMUONLocalTriggerBoard.h" #include "AliMUONTriggerLut.h" @@ -216,7 +219,7 @@ void AliMUONLocalTriggerBoard::Pattern(Option_t *option) const //___________________________________________ void AliMUONLocalTriggerBoard::BP(Option_t *option) const { -/// RESPECT THE OLD PRINTOUT FORMAT +/// Respect the old printout format const Int_t kModuleId[126] = {11,12,13,14,15,16,17, // right side of the chamber @@ -269,8 +272,8 @@ void AliMUONLocalTriggerBoard::BP(Option_t *option) const printf("===============================================================\n"); printf(" 5432109876543210"); - char *x[4] = {"XMC11","XMC12","XMC21","XMC22"}; - char *s[4] = {" ", + const char *x[4] = {"XMC11","XMC12","XMC21","XMC22"}; + const char *s[4] = {" ", " ", " ", " "}; @@ -496,8 +499,8 @@ void AliMUONLocalTriggerBoard::TrigX(Int_t ch1q[16], Int_t ch2q[16], Int_t ch3q[ sgleHit1[2*i+1] = (!ch1e[i+1]|!ch1e[i+2]|(ch1e[i]^ch1e[i+3])) & (!ch2e[i+2] | !ch2e[i+3] | (ch2e[i+1]^ch2e[i+4])); dbleHit1[2*i+1] = ch1e[i+1]&ch1e[i+2]&!(ch1e[i]^ch1e[i+3]) & - (ch2e[i+2]&(!ch2e[i+1]|!ch2e[i]) | - ch2e[i+3]&(ch2e[i+2]|!ch2e[i+4]|!ch2e[i+5])); + ((ch2e[i+2]&(!ch2e[i+1]|!ch2e[i])) | + (ch2e[i+3]&(ch2e[i+2]|!ch2e[i+4]|!ch2e[i+5]))); } //--- calculate dble & sgle second station @@ -512,8 +515,8 @@ void AliMUONLocalTriggerBoard::TrigX(Int_t ch1q[16], Int_t ch2q[16], Int_t ch3q[ sgleHit2[2*i+1] = (!ch3e[i+1]|!ch3e[i+2]|(ch3e[i]^ch3e[i+3])) & (!ch4e[i+2] | !ch4e[i+3] | (ch4e[i+1]^ch4e[i+4])); dbleHit2[2*i+1] = ch3e[i+1]&ch3e[i+2]&!(ch3e[i]^ch3e[i+3]) & - (ch4e[i+2]&(!ch4e[i+1]|!ch4e[i]) | - ch4e[i+3]&(ch4e[i+2]|!ch4e[i+4]|!ch4e[i+5])); + ((ch4e[i+2]&(!ch4e[i+1]|!ch4e[i])) | + (ch4e[i+3]&((ch4e[i+2]|!ch4e[i+4])|!ch4e[i+5]))); } //--- @@ -621,18 +624,18 @@ void AliMUONLocalTriggerBoard::TrigX(Int_t ch1q[16], Int_t ch2q[16], Int_t ch3q[ andL2=!rearImage[i][23]&!rearImage[i][24]&!rearImage[i][25]&!rearImage[i][26]; leftDev[0] = (rearImage[i][16]|!rearImage[i][17]) & - (rearImage[i][16]|rearImage[i][18]|!rearImage[i][19]& - (rearImage[i][20]|!rearImage[i][21])) & - (orL1|!rearImage[i][23]&(rearImage[i][24]|!rearImage[i][25])) & - (orL1|rearImage[i][24]|rearImage[i][26]|!rearImage[i][27]& - (rearImage[i][28]|!rearImage[i][29])); + (rearImage[i][16]|rearImage[i][18]|(!rearImage[i][19]& + (rearImage[i][20]|!rearImage[i][21]))) & + (orL1|(!rearImage[i][23]&(rearImage[i][24]|!rearImage[i][25]))) & + (orL1|rearImage[i][24]|rearImage[i][26]|(!rearImage[i][27]& + (rearImage[i][28]|!rearImage[i][29]))); leftDev[1] = !rearImage[i][16] & !(!rearImage[i][17]&!rearImage[i][18]&!rearImage[i][21]&!rearImage[i][22] & - (!rearImage[i][25]&!rearImage[i][26]&(rearImage[i][27]|rearImage[i][28]))) & - (rearImage[i][17]|rearImage[i][18] | !rearImage[i][19]&!rearImage[i][20]) & + (!rearImage[i][25]&!rearImage[i][26]&(rearImage[i][27]|rearImage[i][28]))) & + (rearImage[i][17]|rearImage[i][18] | (!rearImage[i][19]&!rearImage[i][20])) & (rearImage[i][17]|rearImage[i][18]|rearImage[i][21]|rearImage[i][22] | - !rearImage[i][23]&!rearImage[i][24]); + (!rearImage[i][23]&!rearImage[i][24])); leftDev[2] = (!rearImage[i][16]&!rearImage[i][17]&!rearImage[i][18]) & (rearImage[i][19]|rearImage[i][20]|rearImage[i][21]|rearImage[i][22] | andL2); @@ -652,18 +655,18 @@ void AliMUONLocalTriggerBoard::TrigX(Int_t ch1q[16], Int_t ch2q[16], Int_t ch3q[ andR3=!rearImage[i][4]&!rearImage[i][5]&!rearImage[i][6]&!rearImage[i][7]; rightDev[0] = !rearImage[i][15]&(rearImage[i][14]|!rearImage[i][13]) & - ((rearImage[i][12]|rearImage[i][14]|!rearImage[i][11]& - (rearImage[i][10]|!rearImage[i][9])) & - ((orR1|!rearImage[i][7]&(rearImage[i][6]|!rearImage[i][5])) & - (orR1|rearImage[i][4]|rearImage[i][6]|!rearImage[i][3]&(rearImage[i][2]| - !rearImage[i][1])))); + ((rearImage[i][12]|rearImage[i][14]|(!rearImage[i][11]& + (rearImage[i][10]|!rearImage[i][9]))) & + ((orR1|(!rearImage[i][7]&(rearImage[i][6]|!rearImage[i][5]))) & + (orR1|rearImage[i][4]|rearImage[i][6]|(!rearImage[i][3]&(rearImage[i][2]| + !rearImage[i][1]))))); rightDev[1] = !rearImage[i][15]&!rearImage[i][14] & !(!rearImage[i][4]&!rearImage[i][5]&!rearImage[i][8]&!rearImage[i][9] & (!rearImage[i][12]&!rearImage[i][13]&(rearImage[i][2]|rearImage[i][3]))) & - (rearImage[i][12]|rearImage[i][13] | !rearImage[i][10]&!rearImage[i][11]) & + (rearImage[i][12]|rearImage[i][13] | (!rearImage[i][10]&!rearImage[i][11])) & (rearImage[i][8]|rearImage[i][9]|rearImage[i][12]|rearImage[i][13] | - !rearImage[i][6]&!rearImage[i][7]); + (!rearImage[i][6]&!rearImage[i][7])); rightDev[2] = andR1 & (orR2 | andR3); rightDev[3] = andR2; @@ -855,29 +858,29 @@ void AliMUONLocalTriggerBoard::TrigY(Int_t y1[16], Int_t y2[16], Int_t y3[16], I Int_t tmpy3to16[16], tmpy4to16[16]; Int_t tmpy3uto16[16], tmpy3dto16[16], tmpy4uto16[16], tmpy4dto16[16]; for (i=0; i<8; i++){ - ch1[2*i] = y1[i]&GetSwitch(1) | y1[2*i]&!GetSwitch(1); - ch1[2*i+1] = y1[i]&GetSwitch(1) | y1[2*i+1]&!GetSwitch(1); + ch1[2*i] = (y1[i]&GetSwitch(1)) | (y1[2*i]&!GetSwitch(1)); + ch1[2*i+1] = (y1[i]&GetSwitch(1)) | (y1[2*i+1]&!GetSwitch(1)); - ch2[2*i] = y2[i]&GetSwitch(1) | y2[2*i]&!GetSwitch(1); - ch2[2*i+1] = y2[i]&GetSwitch(1) | y2[2*i+1]&!GetSwitch(1); + ch2[2*i] = (y2[i]&GetSwitch(1)) | (y2[2*i]&!GetSwitch(1)); + ch2[2*i+1] = (y2[i]&GetSwitch(1)) | (y2[2*i+1]&!GetSwitch(1)); - tmpy3to16[2*i ] = y3[i]&GetSwitch(1) | y3[2*i ]&!GetSwitch(1); - tmpy3to16[2*i+1] = y3[i]&GetSwitch(1) | y3[2*i+1]&!GetSwitch(1); + tmpy3to16[2*i ] = (y3[i]&GetSwitch(1)) | (y3[2*i ]&!GetSwitch(1)); + tmpy3to16[2*i+1] = (y3[i]&GetSwitch(1)) | (y3[2*i+1]&!GetSwitch(1)); - tmpy4to16[2*i ] = y4[i]&GetSwitch(1) | y4[2*i ]&!GetSwitch(1); - tmpy4to16[2*i+1] = y4[i]&GetSwitch(1) | y4[2*i+1]&!GetSwitch(1); + tmpy4to16[2*i ] = (y4[i]&GetSwitch(1)) | (y4[2*i ]&!GetSwitch(1)); + tmpy4to16[2*i+1] = (y4[i]&GetSwitch(1)) | (y4[2*i+1]&!GetSwitch(1)); - tmpy3uto16[2*i ] = y3u[i]&GetSwitch(2) | y3u[2*i ]&!GetSwitch(2); - tmpy3uto16[2*i+1] = y3u[i]&GetSwitch(2) | y3u[2*i+1]&!GetSwitch(2); + tmpy3uto16[2*i ] = (y3u[i]&GetSwitch(2)) | (y3u[2*i ]&!GetSwitch(2)); + tmpy3uto16[2*i+1] = (y3u[i]&GetSwitch(2)) | (y3u[2*i+1]&!GetSwitch(2)); - tmpy4uto16[2*i ] = y4u[i]&GetSwitch(2) | y4u[2*i ]&!GetSwitch(2); - tmpy4uto16[2*i+1] = y4u[i]&GetSwitch(2) | y4u[2*i+1]&!GetSwitch(2); + tmpy4uto16[2*i ] = (y4u[i]&GetSwitch(2)) | (y4u[2*i ]&!GetSwitch(2)); + tmpy4uto16[2*i+1] = (y4u[i]&GetSwitch(2)) | (y4u[2*i+1]&!GetSwitch(2)); - tmpy3dto16[2*i ] = y3d[i]&GetSwitch(0) | y3d[2*i ]&!GetSwitch(0); - tmpy3dto16[2*i+1] = y3d[i]&GetSwitch(0) | y3d[2*i+1]&!GetSwitch(0); + tmpy3dto16[2*i ] = (y3d[i]&GetSwitch(0)) | (y3d[2*i ]&!GetSwitch(0)); + tmpy3dto16[2*i+1] = (y3d[i]&GetSwitch(0)) | (y3d[2*i+1]&!GetSwitch(0)); - tmpy4dto16[2*i ] = y4d[i]&GetSwitch(0) | y4d[2*i ]&!GetSwitch(0); - tmpy4dto16[2*i+1] = y4d[i]&GetSwitch(0) | y4d[2*i+1]&!GetSwitch(0); + tmpy4dto16[2*i ] = (y4d[i]&GetSwitch(0)) | (y4d[2*i ]&!GetSwitch(0)); + tmpy4dto16[2*i+1] = (y4d[i]&GetSwitch(0)) | (y4d[2*i+1]&!GetSwitch(0)); } if (GetSwitch(3)==0&&GetSwitch(4)==0){ @@ -987,15 +990,15 @@ void AliMUONLocalTriggerBoard::TrigY(Int_t y1[16], Int_t y2[16], Int_t y3[16], I Int_t frontImage[16]; for (i=1; i<15; i++) { - frontImage[i] = (dble1[i] | sgle1[i]) & - (dble2[i+1] | dble2[i] | dble2[i-1]) | - dble1[i] & (sgle2[i+1] | sgle2[i] | sgle2[i-1]); + frontImage[i] = ((dble1[i] | sgle1[i]) & + (dble2[i+1] | dble2[i] | dble2[i-1])) | + (dble1[i] & (sgle2[i+1] | sgle2[i] | sgle2[i-1])); } - frontImage[0] = (dble1[0] | sgle1[0]) & - (dble2[1] | dble2[0]) | dble1[0] & (sgle2[1] | sgle2[0]); + frontImage[0] = ((dble1[0] | sgle1[0]) & + (dble2[1] | dble2[0])) | (dble1[0] & (sgle2[1] | sgle2[0])); - frontImage[15] = (dble1[15] | sgle1[15]) & - (dble2[15] | dble2[14]) | dble1[15] & (sgle2[15] | sgle2[14]); + frontImage[15] = ((dble1[15] | sgle1[15]) & + (dble2[15] | dble2[14])) | (dble1[15] & (sgle2[15] | sgle2[14])); //debug @@ -1025,16 +1028,16 @@ void AliMUONLocalTriggerBoard::TrigY(Int_t y1[16], Int_t y2[16], Int_t y3[16], I and3 = !frontImage[11]&!frontImage[10]&!frontImage[9]&!frontImage[8]; fCoordY[0] = !frontImage[0]&(frontImage[1]|!frontImage[2]) & - (frontImage[3]|frontImage[1]|!frontImage[4]&(frontImage[5]|!frontImage[6])) & - (or1|!frontImage[8]&(frontImage[9]|!frontImage[10])) & - (or1|frontImage[11]|frontImage[9]|!frontImage[12]&(frontImage[13]|!frontImage[14])); + (frontImage[3]|frontImage[1]|(!frontImage[4]&(frontImage[5]|!frontImage[6]))) & + (or1|(!frontImage[8]&(frontImage[9]|!frontImage[10]))) & + (or1|frontImage[11]|frontImage[9]|(!frontImage[12]&(frontImage[13]|!frontImage[14]))); fCoordY[1] = !frontImage[0]&!frontImage[1] & !(!frontImage[11]&!frontImage[10]&!frontImage[7]&!frontImage[6] & !frontImage[3]&!frontImage[2]&(frontImage[13]|frontImage[12])) & - (frontImage[3]|frontImage[2] | !frontImage[5]&!frontImage[4]) & + (frontImage[3]|frontImage[2] | (!frontImage[5]&!frontImage[4])) & (frontImage[7]|frontImage[6]|frontImage[3]|frontImage[2] | - !frontImage[9]&!frontImage[8]); + (!frontImage[9]&!frontImage[8])); fCoordY[2] = and1 & (or2 | and3); @@ -1052,23 +1055,17 @@ void AliMUONLocalTriggerBoard::LocalTrigger() Int_t deviation=0; Int_t iStripY=0; Int_t iStripX=0; - Bool_t xOutput=kFALSE; - Bool_t yOutput=kFALSE; - - for (Int_t i=0; i<4; i++) deviation += static_cast( fMinDev[i] << i ); - for (Int_t i=0; i<4; i++) iStripY += static_cast( fCoordY[i] << i ); - - if (fMinDev[4]==1 && !deviation) xOutput=kFALSE; // no trigger in X - else xOutput=kTRUE; // trigger in X - if (fCoordY[4]==1 && iStripY==15) yOutput=kFALSE; // no trigger in Y - else yOutput=kTRUE; // trigger in Y + Bool_t xOutput = IsTrigX(); + Bool_t yOutput = IsTrigY(); if (xOutput) { for (Int_t i=0; i<5; i++) iStripX += static_cast( fMinDevStrip[i] << i ); + for (Int_t i=0; i<4; i++) deviation += static_cast( fMinDev[i] << i ); fDev = deviation; fStripX11 = iStripX; } if (yOutput) { + for (Int_t i=0; i<4; i++) iStripY += static_cast( fCoordY[i] << i ); fStripY11 = iStripY; fTrigY = fCoordY[4]; } @@ -1126,7 +1123,7 @@ Int_t AliMUONLocalTriggerBoard::GetI() const Int_t lL = atoi(&l[4]), cC = atoi(&l[2]), sS = (copy=='R') ? +1 : -1; - char *b[4] = {"12", "34", "56", "78"}; + const char *b[4] = {"12", "34", "56", "78"}; Int_t ib = 0; @@ -1315,3 +1312,33 @@ void AliMUONLocalTriggerBoard::Response() LocalTrigger(); } +//___________________________________________ +Bool_t AliMUONLocalTriggerBoard::IsTrigY() const +{ + /// Return the response of non-bending plane + Int_t iStripY = 0; + Bool_t output = kFALSE; + + for (Int_t i=0; i<4; i++) iStripY += static_cast( fCoordY[i] << i ); + + if (fCoordY[4]==1 && iStripY==15) output=kFALSE; // no trigger in Y + else output=kTRUE; // trigger in Y + + return output; +} + +//___________________________________________ +Bool_t AliMUONLocalTriggerBoard::IsTrigX() const +{ + /// Return the response of bending plane + + Int_t deviation = 0; + Bool_t output = kFALSE; + + for (Int_t i=0; i<4; i++) deviation += static_cast( fMinDev[i] << i ); + + if (fMinDev[4]==1 && !deviation) output=kFALSE; // no trigger in X + else output=kTRUE; // trigger in X + + return output; +}