for (Int_t i=0;i<16;i++) fRegionalResponse[i] = 0;
for (Int_t i=0;i< 4;i++) fGlobalInput[i] = 0;
+ for (Int_t i=0;i< 4;i++) fMask[i] = 0xffffffff;
}
//___________________________________________
for (Int_t i=0;i<16;i++) fRegionalResponse[i] = 0;
for (Int_t i=0;i< 4;i++) fGlobalInput[i] = 0;
+ for (Int_t i=0;i< 4;i++) fMask[i] = 0xffffffff;
}
//___________________________________________
Int_t t[16];
BuildGlobalInput();
- MaskRegionalInput();
+ MaskGlobalInput();
for (Int_t i = 0; i < 16; ++i)
{
usLpt = ((t[0] & 0x2 ) != 0);
usHpt = ((t[0] & 0x20) != 0);
- sHpt <<= 1;
- lsLpt <<= 2;
- lsHpt <<= 3;
- usLpt <<= 4;
- usHpt <<= 5;
+ // LSB is zero (trigger choice to send to CTP: sLpt or sHpt)
+
+ sLpt <<= 1;
+ sHpt <<= 2;
+ lsLpt <<= 3;
+ lsHpt <<= 4;
+ usLpt <<= 5;
+ usHpt <<= 6;
fResponse = sLpt | sHpt | lsLpt | lsHpt | usLpt |usHpt;
}
//___________________________________________
-UShort_t AliMUONGlobalTriggerBoard::Algo(UShort_t i, UShort_t j, char *thres)
+UShort_t AliMUONGlobalTriggerBoard::Algo(UShort_t i, UShort_t j, const char *thres)
{
/// global trigger algorithm
/// a ,b = reg response = Hpt (+|-|us|ls) | Lpt (+|-|us|ls)
if (!strcmp(thres,"LPT"))
{
- //trgLS1[0] = a[1]; trgUS1[0] = a[0];
- //trgLS2[0] = b[1]; trgUS2[0] = b[0];
trgLS1[0] = a[0]; trgUS1[0] = a[1];
trgLS2[0] = b[0]; trgUS2[0] = b[1];
}
else
{
- //trgLS1[0] = a[5]; trgUS1[0] = a[4];
- //trgLS2[0] = b[5]; trgUS2[0] = b[4];
trgLS1[0] = a[4]; trgUS1[0] = a[5];
trgLS2[0] = b[4]; trgUS2[0] = b[5];
}
TBits v(4);
- //v[0] = trgUS[0];
- //v[1] = trgLS[0];
v[0] = trgLS[0];
v[1] = trgUS[0];
v[2] = trg[0];
for (Int_t i=0;i< 4;i++) fGlobalInput[i] = 0;
+ UShort_t regRespInv;
+ TBits rs(8), rsi(8);
for (Int_t iReg = 0; iReg < 16; iReg++) {
+
+ // invert bits in regional response ?
+ rs.Set(8,&fRegionalResponse[iReg]);
+ for (Int_t i = 0; i < 4; i++) {
+ // ... YES
+ //rsi[2*i] = rs[2*i+1];
+ //rsi[2*i+1] = rs[2*i];
+ // ... NO
+ rsi[2*i] = rs[2*i];
+ rsi[2*i+1] = rs[2*i+1];
+ }
+ regRespInv = 0;
+ rsi.Get(®RespInv);
+
if (iReg < 8) { // right
// Lpt word
- fGlobalInput[0] |= (fRegionalResponse[iReg] & 0x0F) << (4*iReg);
+ fGlobalInput[0] |= (regRespInv & 0x0F) << (4*iReg);
// Hpt word
- fGlobalInput[2] |= ((fRegionalResponse[iReg] & 0xF0) >> 4) << (4*iReg);
+ fGlobalInput[2] |= ((regRespInv & 0xF0) >> 4) << (4*iReg);
} else { // left
// Lpt word
- fGlobalInput[1] |= (fRegionalResponse[iReg] & 0x0F) << (4*(iReg-8));
+ fGlobalInput[1] |= (regRespInv & 0x0F) << (4*(iReg-8));
// Hpt word
- fGlobalInput[3] |= ((fRegionalResponse[iReg] & 0xF0) >> 4) << (4*(iReg-8));
+ fGlobalInput[3] |= ((regRespInv & 0xF0) >> 4) << (4*(iReg-8));
}
}
}
//___________________________________________
-void AliMUONGlobalTriggerBoard::MaskRegionalInput()
+void AliMUONGlobalTriggerBoard::MaskGlobalInput()
{
/// Apply masks to global input and recalculate regional inputs before
/// applying the global response
- // temporary global inputs with masks applied
+ UShort_t regRespInv;
+ TBits rs(8), rsi(8);
+
+ // global input with masks applied
UInt_t gitmp[4];
for (Int_t i = 0; i < 4; i++) {
// Hpt
fRegionalResponse[iReg] |= ((gitmp[3] >> (4*(iReg-8))) & 0xF) << 4;
}
+ // invert bits in regional response ?
+ rs.Set(8,&fRegionalResponse[iReg]);
+ for (Int_t i = 0; i < 4; i++) {
+ rsi[2*i] = rs[2*i+1];
+ rsi[2*i+1] = rs[2*i];
+ }
+ regRespInv = 0;
+ rsi.Get(®RespInv);
+ // uncomment if ... YES
+ //fRegionalResponse[iReg] = regRespInv;
}
}
void AliMUONGlobalTriggerBoard::Scan(Option_t*) const
{
/// print global trigger output
- TBits w(6); w.Set(6,&fResponse);
+ TBits w(7); w.Set(7,&fResponse);
// TRG[1:0]
// 00 noth
Int_t iS[2] = {0,0};
- iS[0] = (Int_t)w.TestBitNumber(0);
- iS[1] = (Int_t)w.TestBitNumber(1);
+ iS[0] = (Int_t)w.TestBitNumber(1);
+ iS[1] = (Int_t)w.TestBitNumber(2);
- Int_t iPU[2] = {w[4],w[5]};
- Int_t iPL[2] = {w[2],w[3]};
+ Int_t iPU[2] = {w[5],w[6]};
+ Int_t iPL[2] = {w[3],w[4]};
printf("============================================\n");
printf(" Global Trigger output Low pt High pt\n");