X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONLocalTriggerBoard.cxx;h=b4025a07e9299c5dbf8dd669c691b4247e9929d4;hb=71d22fe82fefed03bffc0cd46bfea6125ee1bc74;hp=ac8cfb8b1b70d4681c81f725e6d01748e63a29f2;hpb=1657f946aacfcb7b256e1ef2355593e67161036c;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONLocalTriggerBoard.cxx b/MUON/AliMUONLocalTriggerBoard.cxx index ac8cfb8b1b7..b4025a07e92 100644 --- a/MUON/AliMUONLocalTriggerBoard.cxx +++ b/MUON/AliMUONLocalTriggerBoard.cxx @@ -15,23 +15,28 @@ /* $Id$ */ -//_________________________________________________________________________ -// Implementation of local trigger board objects -// A local trigger board has as input a bit pattern and returns -// the local trigger response after comparison w/ a LUT -//*-- Author: Rachid Guernane (LPCCFd) -//* -//* - +//----------------------------------------------------------------------------- +/// \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" -#include "AliMUONTriggerConstants.h" #include "AliLog.h" #include #include +/// \cond CLASSIMP +ClassImp(AliMUONLocalTriggerBoard) +/// \endcond + const Int_t AliMUONLocalTriggerBoard::fgkCircuitId[234] = { 111, 121, 131, 141, 151, 161, 171, @@ -57,18 +62,18 @@ const Int_t AliMUONLocalTriggerBoard::fgkCircuitId[234] = //___________________________________________ AliMUONLocalTriggerBoard::AliMUONLocalTriggerBoard() : AliMUONTriggerBoard(), - fNumber(0), - fCrate(0), - fTC(kTRUE), + fMpLocalBoard(0x0), fStripX11(0), - fStripY11(0), + fStripY11(15), fDev(0), + fTrigY(1), fOutput(0), - fLUT(0x0) + fLUT(0x0), + fCoinc44(0) { -//* constructor -//* - +/// default constructor +/// + for (Int_t i=0; i<2; i++) for (Int_t j=0; j<4; j++) { @@ -77,28 +82,25 @@ AliMUONLocalTriggerBoard::AliMUONLocalTriggerBoard() fMask[i][j] = 0xFFFF; } - for (Int_t i=0; i<10; i++) fSwitch[i] = 0; - for (Int_t i=0; i<5; i++) fMinDevStrip[i] = fMinDev[i] = fCoordY[i] = 0; - for (Int_t i=0; i<2; i++) fLutLpt[i] = fLutHpt[i] = fLutApt[i] = 0; + for (Int_t i=0; i<2; i++) fLutLpt[i] = fLutHpt[i] = 0; } //___________________________________________ -AliMUONLocalTriggerBoard::AliMUONLocalTriggerBoard(const char *name, Int_t a, - AliMUONTriggerLut* lut) - : AliMUONTriggerBoard(name, a), - fNumber(0), - fCrate(0), - fTC(kTRUE), +AliMUONLocalTriggerBoard::AliMUONLocalTriggerBoard(AliMpLocalBoard* mpLocalBoard) + : AliMUONTriggerBoard(mpLocalBoard->GetName(), mpLocalBoard->GetSlot()), + fMpLocalBoard(mpLocalBoard), fStripX11(0), - fStripY11(0), + fStripY11(15), fDev(0), + fTrigY(1), fOutput(0), - fLUT(lut) + fLUT(0x0), + fCoinc44(0) { -//* constructor -//* +/// Standard constructor +/// for (Int_t i=0; i<2; i++) for (Int_t j=0; j<4; j++) @@ -108,49 +110,34 @@ AliMUONLocalTriggerBoard::AliMUONLocalTriggerBoard(const char *name, Int_t a, fMask[i][j] = 0xFFFF; } - for (Int_t i=0; i<10; i++) fSwitch[i] = 0; - for (Int_t i=0; i<5; i++) fMinDevStrip[i] = fMinDev[i] = fCoordY[i] = 0; - for (Int_t i=0; i<2; i++) fLutLpt[i] = fLutHpt[i] = fLutApt[i] = 0; + for (Int_t i=0; i<2; i++) fLutLpt[i] = fLutHpt[i] = 0; } -//______________________________________________________________________________ -AliMUONLocalTriggerBoard::AliMUONLocalTriggerBoard(const AliMUONLocalTriggerBoard& right) - : AliMUONTriggerBoard(right), - fNumber(right.fNumber), - fCrate(right.fCrate), - fTC(right.fTC), - fStripX11(right.fStripX11), - fStripY11(right.fStripY11), - fDev(right.fDev), - fOutput(right.fOutput), - fLUT(right.fLUT) -{ -/// Protected copy constructor (not implemented) - - AliFatal("Copy constructor not provided."); +//___________________________________________ +AliMUONLocalTriggerBoard::~AliMUONLocalTriggerBoard() +{ +/// Destructor } -//______________________________________________________________________________ -AliMUONLocalTriggerBoard& -AliMUONLocalTriggerBoard::operator=(const AliMUONLocalTriggerBoard& right) -{ -/// Protected assignement operator (not implemented) - // check assignement to self - if (this == &right) return *this; +//___________________________________________ +Int_t AliMUONLocalTriggerBoard::GetNumber() const +{ +/// return board number for notified boards - AliFatal("Assignement operator not provided."); - - return *this; -} + if (fMpLocalBoard->IsNotified()) + return fMpLocalBoard->GetId(); + else + return 0; +} //___________________________________________ void AliMUONLocalTriggerBoard::Reset() { -//* reset board -//* +/// reset board +/// for (Int_t i=0; i<2; i++) for (Int_t j=0; j<4; j++) fXY[i][j] = fXYU[i][j] = fXYD[i][j] = 0; @@ -161,15 +148,18 @@ void AliMUONLocalTriggerBoard::Reset() fOutput = 0; - fStripX11 = fStripY11 = fDev = 0; + fStripX11 = 0; + fStripY11 = 15; + fDev = 0; + fTrigY = 1; - for (Int_t i=0; i<2; i++) fLutLpt[i] = fLutHpt[i] = fLutApt[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) { -// 0 .. LBS : N-1 .. MSB +/// 0 .. LBS : N-1 .. MSB TBits w, m; UShort_t xy = fXY[cathode][chamber], mask = fMask[cathode][chamber]; @@ -193,7 +183,7 @@ void AliMUONLocalTriggerBoard::Setbit(Int_t strip, Int_t cathode, Int_t chamber) //___________________________________________ void AliMUONLocalTriggerBoard::SetbitM(Int_t strip, Int_t cathode, Int_t chamber) { -// 0 .. LBS : N-1 .. MSB +/// 0 .. LBS : N-1 .. MSB TBits w, m; UShort_t xy = fXY[cathode][chamber], mask = fMask[cathode][chamber]; @@ -212,11 +202,12 @@ void AliMUONLocalTriggerBoard::SetbitM(Int_t strip, Int_t cathode, Int_t chamber fXY[cathode][chamber] = value; } + //___________________________________________ void AliMUONLocalTriggerBoard::Pattern(Option_t *option) const { -//* print bit pattern -//* +/// print bit pattern +/// TString op = option; if (op.Contains("X")) BP("X"); @@ -228,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 @@ -277,6 +268,7 @@ void AliMUONLocalTriggerBoard::BP(Option_t *option) const if (op.Contains("X")) { printf("-------- TRIGGER INPUT ---------\n"); + printf("--- warning: switchs not activated at this level ---\n"); printf("===============================================================\n"); printf(" 5432109876543210"); @@ -354,7 +346,7 @@ void AliMUONLocalTriggerBoard::BP(Option_t *option) const UShort_t xyval = 0; - if (fSwitch[1]) + if (GetSwitch(1)) { xyval = fXY[1][0]; TBits v11(8); v11.Set(8,&xyval); @@ -424,32 +416,11 @@ void AliMUONLocalTriggerBoard::BP(Option_t *option) const } } -//___________________________________________ -void AliMUONLocalTriggerBoard::Conf() const -{ -//* board switches -//* - cout << "Switch(" << GetName() << ")" - << " x2d = " << fSwitch[0] - << " x2m = " << fSwitch[1] - << " x2u = " << fSwitch[2] - << " OR[0] = " << fSwitch[3] - << " OR[1] = " << fSwitch[4] - << " EN-Y = " << fSwitch[5] - << " ZERO-ALLY-LSB = " << fSwitch[6] - << " ZERO-down = " << fSwitch[7] - << " ZERO-middle = " << fSwitch[8] - << " ZERO-up = " << fSwitch[9] - << " trans. conn. " << fTC - << " Slot = " << fSlot - << endl; -} - //___________________________________________ void AliMUONLocalTriggerBoard::Module(char *mod) { -//* get module from name -//* +/// get module from name +/// const Int_t kMaxfields = 2; char **fields = new char*[kMaxfields]; char s[100]; strcpy(s, GetName()); @@ -468,13 +439,12 @@ void AliMUONLocalTriggerBoard::Module(char *mod) } //___________________________________________ -void AliMUONLocalTriggerBoard::TrigX(Int_t ch1q[16], Int_t ch2q[16], Int_t ch3q[32], Int_t ch4q[32], - Int_t coinc44) +void AliMUONLocalTriggerBoard::TrigX(Int_t ch1q[16], Int_t ch2q[16], Int_t ch3q[32], Int_t ch4q[32]) { -// note : coinc44 = flag 0 or 1 (0 coincidence -> 3/4, 1 coincidence -> 4/4) -//--------------------------------------------------------- -// step # 1 : declustering, reduction DS, calculate sgle & dble -//--------------------------------------------------------- +/// note : coinc44 = flag 0 or 1 (0 coincidence -> 3/4, 1 coincidence -> 4/4) \n +///--------------------------------------------------------- \n +/// step # 1 : declustering, reduction DS, calculate sgle & dble \n +///--------------------------------------------------------- Int_t ch1e[19], ch2e[20], ch3e[35], ch4e[36]; Int_t sgleHit1[31], sgleHit2[63]; Int_t dbleHit1[31], dbleHit2[63]; @@ -493,6 +463,8 @@ void AliMUONLocalTriggerBoard::TrigX(Int_t ch1q[16], Int_t ch2q[16], Int_t ch3q[ } //--- inititialize che using chq +//--- switch zero_down, zero_middle & zero_up added 30/05/07 +//--- fSwitch[7/8/9] = zero_down/zero_middle/zero_up for (i=0; i<19; i++) { if (i<1||i>16) ch1e[i]=0; else ch1e[i]=ch1q[i-1]; @@ -503,14 +475,17 @@ void AliMUONLocalTriggerBoard::TrigX(Int_t ch1q[16], Int_t ch2q[16], Int_t ch3q[ } for (i=0; i<35; i++) { if (i<1||i>32) ch3e[i]=0; - else ch3e[i]=ch3q[i-1]; + else if (i>=1 && i<=8) ch3e[i]=ch3q[i-1]&!GetSwitch(7); + else if (i>=9 && i<=24) ch3e[i]=ch3q[i-1]&!GetSwitch(8); + else if (i>=25 && i<=32) ch3e[i]=ch3q[i-1]&!GetSwitch(9); } for (i=0; i<36; i++) { if (i<2||i>33) ch4e[i]=0; - else ch4e[i]=ch4q[i-2]; + else if (i>=2 && i<=9) ch4e[i]=ch4q[i-2]&!GetSwitch(7); + else if (i>=10 && i<=25) ch4e[i]=ch4q[i-2]&!GetSwitch(8); + else if (i>=26 && i<=33) ch4e[i]=ch4q[i-2]&!GetSwitch(9); } - //--- calculate dble & sgle first station for (i=0; i<=15; i++) { sgleHit1[2*i] = (!ch1e[i+1]|(ch1e[i]^ch1e[i+2])) & @@ -577,7 +552,7 @@ void AliMUONLocalTriggerBoard::TrigX(Int_t ch1q[16], Int_t ch2q[16], Int_t ch3q[ !dbleHit1[14] & !dbleHit1[13] & !dbleHit1[12] & !dbleHit1[11] & !dbleHit1[10] & !dbleHit1[9] & !dbleHit1[8] & !dbleHit1[7] & !dbleHit1[6] & !dbleHit1[5] & !dbleHit1[4] & !dbleHit1[3] & - !dbleHit1[2] & !dbleHit1[1] & !dbleHit1[0] & !coinc44; + !dbleHit1[2] & !dbleHit1[1] & !dbleHit1[0] & !fCoinc44; Int_t notOr2= !dbleHit2[62] & !dbleHit2[61] & !dbleHit2[60] & !dbleHit2[59] & !dbleHit2[58] & !dbleHit2[57] & !dbleHit2[56] & !dbleHit2[55] & @@ -594,7 +569,7 @@ void AliMUONLocalTriggerBoard::TrigX(Int_t ch1q[16], Int_t ch2q[16], Int_t ch3q[ !dbleHit2[14] & !dbleHit2[13] & !dbleHit2[12] & !dbleHit2[11] & !dbleHit2[10] & !dbleHit2[9] & !dbleHit2[8] & !dbleHit2[7] & !dbleHit2[6] & !dbleHit2[5] & !dbleHit2[4] & !dbleHit2[3] & - !dbleHit2[2] & !dbleHit2[1] & !dbleHit2[0] & !coinc44; + !dbleHit2[2] & !dbleHit2[1] & !dbleHit2[0] & !fCoinc44; // DS reduction for (i=0; i<31; i++) { @@ -831,7 +806,7 @@ void AliMUONLocalTriggerBoard::TrigX(Int_t ch1q[16], Int_t ch2q[16], Int_t ch3q[ void AliMUONLocalTriggerBoard::Sort2x5(Int_t dev1[6], Int_t dev2[6], Int_t minDev[6], Int_t &dev1GTdev2) { -// returns minimun between dev1 and dev2 +/// returns minimun between dev1 and dev2 Int_t tmpDev1=0, tmpDev2=0; for (Int_t j=0; j<5; j++) @@ -854,20 +829,19 @@ void AliMUONLocalTriggerBoard::Sort2x5(Int_t dev1[6], Int_t dev2[6], //___________________________________________ void AliMUONLocalTriggerBoard::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 coinc44) + Int_t y3u[16], Int_t y3d[16], Int_t y4u[16], Int_t y4d[16]) { -// note : resMid = 1 -> cancel -//--------------------------------------------------------- -// step # 1 : prehandling Y -//--------------------------------------------------------- +/// note : resMid = 1 -> cancel \n +///---------------------------------------------------------\n +/// step # 1 : prehandling Y \n +///--------------------------------------------------------- Int_t i; Int_t istrip; for (i=0; i<16; i++) { - y3[i]=y3[i]&!fSwitch[8]; - y4[i]=y4[i]&!fSwitch[8]; + y3[i]=y3[i]&!GetSwitch(8); + y4[i]=y4[i]&!GetSwitch(8); } // 10/29/04 fZeroAllYLSB added @@ -884,50 +858,50 @@ 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]&fSwitch[1] | y1[2*i]&!fSwitch[1]; - ch1[2*i+1] = y1[i]&fSwitch[1] | y1[2*i+1]&!fSwitch[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]&fSwitch[1] | y2[2*i]&!fSwitch[1]; - ch2[2*i+1] = y2[i]&fSwitch[1] | y2[2*i+1]&!fSwitch[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]&fSwitch[1] | y3[2*i ]&!fSwitch[1]; - tmpy3to16[2*i+1] = y3[i]&fSwitch[1] | y3[2*i+1]&!fSwitch[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]&fSwitch[1] | y4[2*i ]&!fSwitch[1]; - tmpy4to16[2*i+1] = y4[i]&fSwitch[1] | y4[2*i+1]&!fSwitch[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]&fSwitch[2] | y3u[2*i ]&!fSwitch[2]; - tmpy3uto16[2*i+1] = y3u[i]&fSwitch[2] | y3u[2*i+1]&!fSwitch[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]&fSwitch[2] | y4u[2*i ]&!fSwitch[2]; - tmpy4uto16[2*i+1] = y4u[i]&fSwitch[2] | y4u[2*i+1]&!fSwitch[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]&fSwitch[0] | y3d[2*i ]&!fSwitch[0]; - tmpy3dto16[2*i+1] = y3d[i]&fSwitch[0] | y3d[2*i+1]&!fSwitch[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]&fSwitch[0] | y4d[2*i ]&!fSwitch[0]; - tmpy4dto16[2*i+1] = y4d[i]&fSwitch[0] | y4d[2*i+1]&!fSwitch[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 (fSwitch[3]==0&&fSwitch[4]==0){ + if (GetSwitch(3)==0&&GetSwitch(4)==0){ for (i=0; i<16; i++){ ch3[i] = tmpy3to16[i]; ch4[i] = tmpy4to16[i]; } } - if (fSwitch[3]==0&&fSwitch[4]==1){ + if (GetSwitch(3)==0&&GetSwitch(4)==1){ for (i=0; i<16; i++){ ch3[i] = tmpy3dto16[i]|tmpy3to16[i]; ch4[i] = tmpy4dto16[i]|tmpy4to16[i]; } } - if (fSwitch[3]==1&&fSwitch[4]==0){ + if (GetSwitch(3)==1&&GetSwitch(4)==0){ for (i=0; i<16; i++){ ch3[i] = tmpy3uto16[i]|tmpy3to16[i]; ch4[i] = tmpy4uto16[i]|tmpy4to16[i]; } } - if (fSwitch[3]==1&&fSwitch[4]==1){ + if (GetSwitch(3)==1&&GetSwitch(4)==1){ for (i=0; i<16; i++){ ch3[i] = tmpy3dto16[i]|tmpy3to16[i]|tmpy3uto16[i]; ch4[i] = tmpy4dto16[i]|tmpy4to16[i]|tmpy4uto16[i]; @@ -938,7 +912,7 @@ void AliMUONLocalTriggerBoard::TrigY(Int_t y1[16], Int_t y2[16], Int_t y3[16], I if(AliDebugLevel()==4||AliDebugLevel()==5) { printf("===============================================================\n"); printf(" Y plane after PreHandling x2m x2u x2d orMud %i %i %i %i %i \n", - fSwitch[1],fSwitch[2], fSwitch[0],fSwitch[3],fSwitch[4]); + GetSwitch(1),GetSwitch(2), GetSwitch(0),GetSwitch(3),GetSwitch(4)); printf(" "); for (istrip=15; istrip>=0; istrip--) { if (istrip>9) printf("%i",istrip-10*Int_t(istrip/10)); @@ -1006,8 +980,8 @@ void AliMUONLocalTriggerBoard::TrigY(Int_t y1[16], Int_t y2[16], Int_t y3[16], I !dble2[3] & !dble2[2] & !dble2[1] & !dble2[0]; for (i=0; i<16; i++) { - sgle1[i] = sgle1[i] & notOr1 & !coinc44; - sgle2[i] = sgle2[i] & notOr2 & !coinc44; + sgle1[i] = sgle1[i] & notOr1 & !fCoinc44; + sgle2[i] = sgle2[i] & notOr2 & !fCoinc44; } //--------------------------------------------------------- @@ -1076,50 +1050,65 @@ void AliMUONLocalTriggerBoard::TrigY(Int_t y1[16], Int_t y2[16], Int_t y3[16], I //___________________________________________ void AliMUONLocalTriggerBoard::LocalTrigger() { -//* L0 trigger after LUT -//* - Int_t deviation=0, iStripY=0; +/// L0 trigger after LUT +/// + 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) fOutput=0; // No trigger - else - { - if (fCoordY[4]==1 && iStripY==15) fOutput=0; // No trigger - else - fOutput=1; - } - - if (fOutput) - { - for (Int_t i=0; i<5; i++) fStripX11 += static_cast( fMinDevStrip[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 + if (xOutput) { + for (Int_t i=0; i<5; i++) iStripX += static_cast( fMinDevStrip[i] << i ); fDev = deviation; - + fStripX11 = iStripX; + } + if (yOutput) { fStripY11 = iStripY; - - Int_t sign = 0; - - if ( !fMinDev[4] && deviation ) sign=-1; - if ( !fMinDev[4] && !deviation ) sign= 0; - if ( fMinDev[4] == 1 ) sign=+1; - - fDev *= sign; - + fTrigY = fCoordY[4]; + } + +// cout << " Local Trigger " << " " << fNumber << " " << +// xOutput << " " << yOutput << " " << fDev << " " << fStripX11 << " " << +// fTrigY << " " << fStripY11 << "\n"; + + if (xOutput && yOutput){ // trigger in X and Y + fOutput =1; + + Int_t sign = 0; + if ( !fMinDev[4] && deviation ) sign=-1; + if ( !fMinDev[4] && !deviation ) sign= 0; + if ( fMinDev[4] == 1 ) sign=+1; + + deviation *= sign; + // calculate deviation in [0;+30] - fDev += 15; - + deviation += 15; + // GET LUT OUTPUT FOR icirc/istripX1/deviation/istripY - fLUT->GetLutOutput(fNumber, fStripX11, fDev, fStripY11, fLutLpt, fLutHpt, fLutApt); - } + fLUT->GetLutOutput(GetNumber(), fStripX11, deviation, fStripY11, fLutLpt, fLutHpt); + } + + fResponse = fLutLpt[0] + + static_cast(fLutLpt[1]<<1) + + static_cast(fLutHpt[0]<<2) + + static_cast(fLutHpt[1]<<3); + } //___________________________________________ Int_t AliMUONLocalTriggerBoard::GetI() const { -//* old numbering -//* +/// old numbering +/// const Int_t kMaxfields = 2; char **fields = new char*[kMaxfields]; char s[100]; strcpy(s, GetName()); @@ -1163,8 +1152,8 @@ Int_t AliMUONLocalTriggerBoard::GetI() const //___________________________________________ void AliMUONLocalTriggerBoard::Mask(Int_t index, UShort_t mask) { -//* set mask -//* +/// set mask +/// if ( index >= 0 && index < 2*4 ) { Int_t i = index/4; @@ -1180,9 +1169,9 @@ void AliMUONLocalTriggerBoard::Mask(Int_t index, UShort_t mask) //___________________________________________ void AliMUONLocalTriggerBoard::Scan(Option_t *option) const { -//* full dump -//* - TString op = option; +/// full dump +/// + TString op = option; if (op.Contains("CONF")) Conf(); @@ -1201,11 +1190,32 @@ void AliMUONLocalTriggerBoard::Scan(Option_t *option) const } } +//___________________________________________ +void AliMUONLocalTriggerBoard::Conf() const +{ +/// board switches +/// + cout << "Switch(" << GetName() << ")" + << " x2d = " << GetSwitch(0) + << " x2m = " << GetSwitch(1) + << " x2u = " << GetSwitch(2) + << " OR[0] = " << GetSwitch(3) + << " OR[1] = " << GetSwitch(4) + << " EN-Y = " << GetSwitch(5) + << " ZERO-ALLY-LSB = " << GetSwitch(6) + << " ZERO-down = " << GetSwitch(7) + << " ZERO-middle = " << GetSwitch(8) + << " ZERO-up = " << GetSwitch(9) + << " trans. conn. " << GetTC() + << " Slot = " << fSlot + << endl; +} + //___________________________________________ void AliMUONLocalTriggerBoard::Resp(Option_t *option) const { -//* board I/O -//* +/// board I/O +/// TString op = option; if (op.Contains("I")) @@ -1222,39 +1232,13 @@ void AliMUONLocalTriggerBoard::Resp(Option_t *option) const printf(" \n"); } - if (op.Contains("F")) - { - Int_t icirc = GetI(); - Int_t idCircuit = fgkCircuitId[icirc]; - - Int_t deviation = 0, iStripY = 0; - - for (Int_t i=0; i<4; i++) iStripY += static_cast( fCoordY[i] << i ); - - for (Int_t i=0; i<4; i++) deviation += Int_t(fMinDev[i]<PtCal(fStripX11, fDev, fStripY11); - printf("-------------------------------------------\n"); - printf(" Local Trigger info for circuit Id %i (number %i ) \n", idCircuit, icirc); - printf(" istripX1 signDev deviation istripY = %i %i %i %i \n", fStripX11, fMinDev[4], deviation, iStripY); - printf(" pt = %f (GeV/c) \n", pt); - printf("-------------------------------------------\n"); - printf(" Local Trigger Lut Output = Lpt : "); - for (Int_t i=1; i>=0; i--) printf("%i", fLutLpt[i]); - printf(" Hpt : "); - for (Int_t i=1; i>=0; i--) printf("%i", fLutHpt[i]); - printf(" Apt : "); - for (Int_t i=1; i>=0; i--) printf("%i", fLutApt[i]); - printf("\n"); - printf("-------------------------------------------\n"); - } } //___________________________________________ void AliMUONLocalTriggerBoard::Response() { -//* algo -//* +/// algo +/// Int_t xX1[16], xX2[16], xXX3[32], xXX4[32]; TBits x1(16), x2(16), x3(16), x4(16); @@ -1292,9 +1276,9 @@ void AliMUONLocalTriggerBoard::Response() xXX4[i+24] = x4u[i]; } - Int_t coinc44 = 0; +// Int_t coinc44 = 0; - TrigX(xX1, xX2, xXX3, xXX4, coinc44); + TrigX(xX1, xX2, xXX3, xXX4); Int_t yY1[16], yY2[16], yY3[16], yY4[16]; @@ -1328,18 +1312,9 @@ void AliMUONLocalTriggerBoard::Response() yY4D[i] = y4d[i]; } - TrigY(yY1, yY2, yY3, yY4, yY3U, yY3D, yY4U, yY4D, coinc44); + TrigY(yY1, yY2, yY3, yY4, yY3U, yY3D, yY4U, yY4D); -// ASIGN fLutLpt, fLutHpt, fLutApt - LocalTrigger(); - - fResponse = fLutApt[0] + - static_cast(fLutApt[1]<<1) + - static_cast(fLutLpt[0]<<2) + - static_cast(fLutLpt[1]<<3) + - static_cast(fLutHpt[0]<<4) + - static_cast(fLutHpt[1]<<5); +// ASIGN fLutLpt, fLutHpt + LocalTrigger(); } -ClassImp(AliMUONLocalTriggerBoard) -