X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONLocalTriggerBoard.cxx;h=25fc4be82cf0a5e7edf09fb329eab98440ec3a17;hb=88c9cc107bd005d9322223e34c2c6a3f44d8c341;hp=c6aec007e98fdc11d9b0a0a00cdde7888d66ac6d;hpb=ac8095734b9f65ab746223badef2484e36280cab;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONLocalTriggerBoard.cxx b/MUON/AliMUONLocalTriggerBoard.cxx index c6aec007e98..25fc4be82cf 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" @@ -30,6 +33,8 @@ #include #include +using std::endl; +using std::cout; /// \cond CLASSIMP ClassImp(AliMUONLocalTriggerBoard) /// \endcond @@ -112,6 +117,88 @@ AliMUONLocalTriggerBoard::AliMUONLocalTriggerBoard(AliMpLocalBoard* mpLocalBoard for (Int_t i=0; i<2; i++) fLutLpt[i] = fLutHpt[i] = 0; } +//___________________________________________ +AliMUONLocalTriggerBoard::AliMUONLocalTriggerBoard(const AliMUONLocalTriggerBoard& right) : + AliMUONTriggerBoard(right), + fMpLocalBoard(right.fMpLocalBoard), + fStripX11(right.fStripX11), + fStripY11(right.fStripY11), + fDev(right.fDev), + fTrigY(right.fTrigY), + fOutput(right.fOutput), + fLUT(right.fLUT), + fCoinc44(right.fCoinc44) +{ + // + /// Copy constructor + // + for (Int_t i=0; i<2; i++) { + for (Int_t j=0; j<4; j++) { + fXY[i][j] = right.fXY[i][j]; + fXYU[i][j] = right.fXYU[i][j]; + fXYD[i][j] = right.fXYD[i][j]; + + fMask[i][j] = right.fMask[i][j]; + } + } + + for (Int_t i=0; i<2; i++) { + fLutLpt[i] = right.fLutLpt[i]; + fLutHpt[i] = right.fLutHpt[i]; + } + + for (Int_t i=0; i<5; i++) { + fMinDevStrip[i] = right.fMinDevStrip[i]; + fMinDev[i] = right.fMinDev[i]; + fCoordY[i] = right.fCoordY[i]; + } +} + +//___________________________________________ +AliMUONLocalTriggerBoard& AliMUONLocalTriggerBoard::operator=(const AliMUONLocalTriggerBoard& right) +{ +/// Assigment operator; +/// equal operator + + if (this == &right) + return *this; + + // base class assignement + AliMUONTriggerBoard::operator=(right); + + fMpLocalBoard = right.fMpLocalBoard; + fStripX11 = right.fStripX11; + fStripY11 = right.fStripY11; + fDev = right.fDev; + fTrigY = right.fTrigY; + fOutput = right.fOutput; + fLUT = right.fLUT; + fCoinc44 = right.fCoinc44; + + for (Int_t i=0; i<2; i++) { + for (Int_t j=0; j<4; j++) { + fXY[i][j] = right.fXY[i][j]; + fXYU[i][j] = right.fXYU[i][j]; + fXYD[i][j] = right.fXYD[i][j]; + + fMask[i][j] = right.fMask[i][j]; + } + } + + for (Int_t i=0; i<2; i++) { + fLutLpt[i] = right.fLutLpt[i]; + fLutHpt[i] = right.fLutHpt[i]; + } + + for (Int_t i=0; i<5; i++) { + fMinDevStrip[i] = right.fMinDevStrip[i]; + fMinDev[i] = right.fMinDev[i]; + fCoordY[i] = right.fCoordY[i]; + } + + return *this; +} + //___________________________________________ AliMUONLocalTriggerBoard::~AliMUONLocalTriggerBoard() { @@ -139,20 +226,29 @@ void AliMUONLocalTriggerBoard::Reset() for (Int_t j=0; j<4; j++) fXY[i][j] = fXYU[i][j] = fXYD[i][j] = 0; - fResponse = 0; + ResetResponse(); +} - for (Int_t i=0; i<5; i++) fMinDevStrip[i] = fMinDev[i] = fCoordY[i] = 0; +//___________________________________________ +void AliMUONLocalTriggerBoard::ResetResponse() +{ +/// reset board response +// + fResponse = 0; - fOutput = 0; + for (Int_t i=0; i<5; i++) fMinDevStrip[i] = fMinDev[i] = fCoordY[i] = 0; + + fOutput = 0; - fStripX11 = 0; - fStripY11 = 15; - fDev = 0; - fTrigY = 1; + fStripX11 = 0; + fStripY11 = 15; + fDev = 0; + fTrigY = 1; - for (Int_t i=0; i<2; i++) fLutLpt[i] = fLutHpt[i] = 0; + for (Int_t i=0; i<2; i++) fLutLpt[i] = fLutHpt[i] = 0; } + //___________________________________________ void AliMUONLocalTriggerBoard::Setbit(Int_t strip, Int_t cathode, Int_t chamber) { @@ -201,7 +297,7 @@ void AliMUONLocalTriggerBoard::SetbitM(Int_t strip, Int_t cathode, Int_t chamber //___________________________________________ -void AliMUONLocalTriggerBoard::Pattern(Option_t *option) const +void AliMUONLocalTriggerBoard::Pattern(const Option_t *option) const { /// print bit pattern /// @@ -214,9 +310,9 @@ void AliMUONLocalTriggerBoard::Pattern(Option_t *option) const //___________________________________________ -void AliMUONLocalTriggerBoard::BP(Option_t *option) const +void AliMUONLocalTriggerBoard::BP(const 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 +365,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] = {" ", " ", " ", " "}; @@ -413,28 +509,6 @@ void AliMUONLocalTriggerBoard::BP(Option_t *option) const } } -//___________________________________________ -void AliMUONLocalTriggerBoard::Module(char *mod) -{ -/// get module from name -/// - const Int_t kMaxfields = 2; char **fields = new char*[kMaxfields]; - - char s[100]; strcpy(s, GetName()); - - Int_t numlines = 0; - - for (char *token = strtok(s, "B"); - token != NULL; - token = strtok(NULL, " ")) - { - fields[numlines] = new char[strlen(token)+1]; - strcpy(fields[numlines++],token); - } - - strcpy(mod,fields[0]); -} - //___________________________________________ void AliMUONLocalTriggerBoard::TrigX(Int_t ch1q[16], Int_t ch2q[16], Int_t ch3q[32], Int_t ch4q[32]) { @@ -496,8 +570,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 +586,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 +695,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 +726,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,31 +929,33 @@ 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)); } + for (i=0; i<16; i++) ch3[i] = ch4[i] = 0; + if (GetSwitch(3)==0&&GetSwitch(4)==0){ for (i=0; i<16; i++){ ch3[i] = tmpy3to16[i]; @@ -987,15 +1063,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 +1101,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 +1128,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]; } @@ -1106,9 +1176,13 @@ Int_t AliMUONLocalTriggerBoard::GetI() const { /// old numbering /// + const Int_t kMaxfields = 2; char **fields = new char*[kMaxfields]; - char s[100]; strcpy(s, GetName()); + for (Int_t i = 0; i < kMaxfields; i++) + fields[i] = new char[1]; + + char s[100]; strncpy(s, GetName(), 99); Int_t numlines = 0; @@ -1116,6 +1190,7 @@ Int_t AliMUONLocalTriggerBoard::GetI() const token != NULL; token = strtok(NULL, " ")) { + delete [] fields[numlines]; fields[numlines] = new char[strlen(token)+1]; strcpy(fields[numlines++], token); } @@ -1126,7 +1201,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; @@ -1142,6 +1217,8 @@ Int_t AliMUONLocalTriggerBoard::GetI() const Int_t ic = 0; for (Int_t i=0; i<234; i++) if (fgkCircuitId[i] == code) {ic = i; break;} + + delete [] fields; return ic; } @@ -1154,7 +1231,7 @@ void AliMUONLocalTriggerBoard::Mask(Int_t index, UShort_t mask) if ( index >= 0 && index < 2*4 ) { Int_t i = index/4; - Int_t j = index - i*4; + Int_t j = index%4; fMask[i][j]=mask; } else @@ -1178,6 +1255,8 @@ void AliMUONLocalTriggerBoard::Scan(Option_t *option) const if (op.Contains("RESPF")) Resp("F"); + if (op.Contains("RESPO")) Resp("O"); + if (op.Contains("ALL")) { Conf(); @@ -1228,6 +1307,13 @@ void AliMUONLocalTriggerBoard::Resp(Option_t *option) const for (Int_t i=4; i>=0; i--) printf("%i",fCoordY[i]); printf(" \n"); } + if (op.Contains("O")){ + printf("-- Output --\n"); + printf("Coinc44 %i\n", fCoinc44); + printf("StripX11 %i StripY11 %i Dev %i TrigY %i\n", fStripX11, fStripY11, fDev, fTrigY); + printf("LutLpt %i %i LutHpt %i %i\n", fLutLpt[0], fLutLpt[1], fLutHpt[0], fLutHpt[1]); + printf("Response %i\n", fOutput); + } } @@ -1236,6 +1322,12 @@ void AliMUONLocalTriggerBoard::Response() { /// algo /// + if ( IsNull() ) { + fMinDev[4] = 1; + for (Int_t i=4; i>=0; i--) fCoordY[i] = 1; + return; // Do nothing if strip pattern is null + } + Int_t xX1[16], xX2[16], xXX3[32], xXX4[32]; TBits x1(16), x2(16), x3(16), x4(16); @@ -1315,3 +1407,45 @@ 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; +} + +//___________________________________________ +Bool_t AliMUONLocalTriggerBoard::IsNull() const +{ + /// Check if board has fired strips in the first station + for (Int_t icath=0; icath<2; icath++){ + for(Int_t ich=0; ich<2; ich++){ + if ( fXY[icath][ich] ) return kFALSE; + } + } + return kTRUE; +}