/* $Id$ */
//*-- Author: Rachid Guernane (LPCCFd)
+//* Manager class for muon trigger electronics
+//* Client of trigger board classes
+//*
+//*
#include "AliMUONTriggerElectronics.h"
#include "AliMUONTriggerCrate.h"
#include "AliMUONGlobalTriggerBoard.h"
#include "AliMUONLocalTrigger.h"
#include "AliMUONGlobalTrigger.h"
-#include "AliLoader.h"
+#include "AliMUON.h"
#include "AliMUONData.h"
#include "AliMUONDigit.h"
+#include "AliMUONTriggerConstants.h"
+#include "AliMUONSegmentation.h"
+#include "AliMUONCalibrationData.h"
+#include "AliMUONVCalibParam.h"
+
+#include "AliMpVSegmentation.h"
+
#include "AliLog.h"
#include "AliLoader.h"
+#include "AliRun.h"
-#include "Riostream.h"
+//#include "Riostream.h"
+#include "TBits.h"
#include "TSystem.h"
ClassImp(AliMUONTriggerElectronics)
const Int_t AliMUONTriggerElectronics::fgkNCrates = 16;
//___________________________________________
-AliMUONTriggerElectronics::AliMUONTriggerElectronics(AliMUONData *Data)
+AliMUONTriggerElectronics::AliMUONTriggerElectronics(AliMUONData *Data, AliMUONCalibrationData* calibData)
: TTask("AliMUONTriggerElectronics",
"From trigger digits to Local and Global Trigger objects"),
fCrates(new TClonesArray("AliMUONTriggerCrate", fgkNCrates)),
fNCrates(0),
fMUONData(Data)
{
+//* CONSTRUCTOR
+//*
if (!fMUONData)
{
AliFatal("NO MUON TRIGGER DATA");
fGlobal = 0;
+ fCrateMap = new char*[234];
+ for (Int_t i=0;i<234;i++) fBoardMap[i] = 0;
+
SetDataSource();
- Factory();
-
+ Factory(calibData);
+ LoadMasks(calibData);
+
AliWarning("ZERO-ALLY-LSB TO BE CHECKED!!!");
AliWarning("AliMUONLocalTriggerBoard Y_pos DIVIDED BY 2 TO BE CONSISTENT W/ AliMUONTrackReconstructor!!!");
}
+//______________________________________________________________________________
+AliMUONTriggerElectronics::AliMUONTriggerElectronics(const AliMUONTriggerElectronics& right)
+ : TTask(right)
+{
+/// Protected copy constructor (not implemented)
+
+ AliFatal("Copy constructor not provided.");
+}
+
//___________________________________________
AliMUONTriggerElectronics::~AliMUONTriggerElectronics()
{
+//* DESTRUCTOR
+//*
delete fGlobalTriggerBoard;
delete fCrates;
+
+ for (Int_t i=0;i<234;i++) if (fCrateMap[i]) {delete [] fCrateMap[i]; fCrateMap[i] = NULL;}
}
+//______________________________________________________________________________
+AliMUONTriggerElectronics&
+AliMUONTriggerElectronics::operator=(const AliMUONTriggerElectronics& right)
+{
+/// Protected assignement operator (not implemented)
+
+ // check assignement to self
+ if (this == &right) return *this;
+
+ AliFatal("Assignement operator not provided.");
+
+ return *this;
+}
+
//___________________________________________
-void AliMUONTriggerElectronics::Factory()
+void AliMUONTriggerElectronics::Factory(AliMUONCalibrationData* calibData)
{
+//* BUILD ALL ELECTRONICS
+//*
ifstream myInputFile(gSystem->ExpandPathName(fSourceFileName.Data()), ios::in);
string sLine, sValue;
if (sLine.empty()) continue; // Ignore empty lines
else
{
- const Int_t maxfields = 15; char **fields = new char*[maxfields];
+ const Int_t kMaxfields = 15; char **fields = new char*[kMaxfields];
char s[100];
// CONVENTION: SLOT 0 HOLDS THE REGIONAL BOARD
Int_t sl = atoi(fields[10]);
- AliMUONLocalTriggerBoard *board = new AliMUONLocalTriggerBoard(fields[4], sl);
+ AliMUONTriggerLut* lut = calibData->TriggerLut();
+
+ AliMUONLocalTriggerBoard *board =
+ new AliMUONLocalTriggerBoard(fields[4], sl, lut);
+
+ if (strcmp(fields[1],"nn"))
+ {
+ Int_t sboard = atoi(fields[1]);
+
+ board->SetNumber(sboard);
+
+ fCrateMap[sboard-1] = new char[strlen(str)+1]; strcpy(fCrateMap[sboard-1], str);
+
+ fBoardMap[sboard-1] = sl;
+ }
+
+ board->SetCrate(str);
crate->AddBoard(board, sl);
//___________________________________________
void AliMUONTriggerElectronics::Feed()
{
+//* FILL INPUTS
+//*
for (Int_t ichamber=10; ichamber<14; ichamber++)
{
- TClonesArray *MuonDigits = fMUONData->Digits(ichamber);
- Int_t ndigits = MuonDigits->GetEntriesFast();
+ TClonesArray *muonDigits = fMUONData->Digits(ichamber);
+ Int_t ndigits = muonDigits->GetEntriesFast();
for (Int_t digit=0; digit<ndigits; digit++)
{
- AliMUONDigit *mdig = static_cast<AliMUONDigit*>(MuonDigits->UncheckedAt(digit));
+ AliMUONDigit *mdig = static_cast<AliMUONDigit*>(muonDigits->UncheckedAt(digit));
Int_t ix = mdig->PadX(), iy = mdig->PadY();
// GET THE SUM OF THE CODED CHARGE
// SEE CODING CONVENTION IN AliMUONChamberTrigger::DisIntegration
Int_t schg = 0;
-
- // CHECKME ! The TrackCharge is not ok with new digitizerV3 !
-// for (Int_t ichg=0; ichg<10; ichg++) schg += mdig->TrackCharge(ichg);
-// assert(schg==mdig->Signal());
- schg = mdig->Signal();
+ for (Int_t ichg=0; ichg<10; ichg++) schg += mdig->TrackCharge(ichg);
// APPLY CONDITION ON SOFT BACKGROUND
Int_t tchg = schg - (Int_t(schg/10))*10;
if (b)
{
Int_t digitindex = digit;
-// if (b->GetSwitch(6) && cathode)
-// b->Setbit(iy+8,cathode,ichamber-10);
-// else
+
+// Y STRIP IS FIRED ONCE BUT ALL BOARDS FROM THE SAME MODULE ARE FED
+ if (cathode)
+ {
+ if (b->GetSwitch(6)) iy += 8;
+
+ char mM1[20]; b->Module(mM1);
+
+ for (Int_t j=0;j<fgkNCrates;j++)
+ {
+ AliMUONTriggerCrate *ca = (AliMUONTriggerCrate*)fCrates->UncheckedAt(j);
+
+ TObjArray *bs = ca->Boards();
+
+ for (Int_t k=1; k<bs->GetEntries()-1; k++)
+ {
+ AliMUONLocalTriggerBoard *h = (AliMUONLocalTriggerBoard*)bs->At(k);
+
+ if (h)
+ {
+ char mM2[20]; h->Module(mM2);
+
+ if (!strcmp(mM1,mM2)) h->Setbit(iy,cathode,ichamber-10);
+ }
+ }
+ }
+ }
+ else
b->Setbit(iy,cathode,ichamber-10);
DigitFiredCircuit(b->GetI(), cathode, ichamber, digitindex);
// COPY X3-4 FROM BOARD 15 OF CRATE 3 TO BOARD 9 OF CRATE 2-3
fromcb->GetX34(cX); desycb->SetX34(cX);
- UShort_t cY[2];
+ UShort_t cY[4];
desybb->GetY(cY); frombb->SetY(cY);
}
-// TRANSVERSE CONNECTOR TO REPLICATE Y
- for (Int_t i=0; i<fgkNCrates; i++)
+// FILL UP/DOWN OF CURRENT BOARD (DONE VIA J3 BUS IN REAL LIFE)
+ for (Int_t i=0; i<fgkNCrates; i++)
{
- AliMUONTriggerCrate *cr = (AliMUONTriggerCrate*)fCrates->UncheckedAt(i);
-
- TObjArray *boards = cr->Boards();
-
+ AliMUONTriggerCrate *cr = (AliMUONTriggerCrate*)fCrates->UncheckedAt(i);
+
+ TObjArray *boards = cr->Boards();
+
for (Int_t j=1; j<boards->GetEntries()-1; j++)
{
TObject *o = boards->At(j);
-
+
if (!o) break;
-
+
AliMUONLocalTriggerBoard *currboard = (AliMUONLocalTriggerBoard*)o;
-
+
AliMUONLocalTriggerBoard *neighbour = (AliMUONLocalTriggerBoard*)boards->At(j+1);
+
+ UShort_t cXY[2][4];
+
+ if (j==1) {neighbour->GetXY(cXY); currboard->SetXYU(cXY);}
+
+// LAST BOARD IN THE CRATE HAS NO UP EXCEPT FOR CRATES 2 & 3
+ if (j<boards->GetEntries()-2)
+ {
+ AliMUONLocalTriggerBoard *nextboard = (AliMUONLocalTriggerBoard*)boards->At(j+2);
+
+ currboard->GetXY(cXY); neighbour->SetXYD(cXY);
+ nextboard->GetXY(cXY); neighbour->SetXYU(cXY);
+
+ if (j==boards->GetEntries()-3) {neighbour->GetXY(cXY); nextboard->SetXYD(cXY);}
+ }
+ }
+ }
+}
- char **names = new char*[2];
-
- names[0] = new char[20]; names[1] = new char[20];
+//___________________________________________
+void AliMUONTriggerElectronics::FeedM()
+{
+//* FILL INPUTS
+//*
+ for (Int_t ichamber=10; ichamber<14; ichamber++)
+ {
+ TClonesArray *muonDigits = fMUONData->Digits(ichamber);
+ Int_t ndigits = muonDigits->GetEntriesFast();
+
+ for (Int_t digit=0; digit<ndigits; digit++)
+ {
+ AliMUONDigit *mdig = static_cast<AliMUONDigit*>(muonDigits->UncheckedAt(digit));
+
+// CHECKME ! The TrackCharge is not ok with new digitizerV3 !
+// for (Int_t ichg=0; ichg<10; ichg++) schg += mdig->TrackCharge(ichg);
+// assert(schg==mdig->Signal());
+ Int_t schg = mdig->Signal();
- currboard->Module(names[0]); neighbour->Module(names[1]);
+// APPLY CONDITION ON SOFT BACKGROUND
+ Int_t tchg = schg - (Int_t(schg/10))*10;
-// CASCADE Y TO NEIGHBOUR (FROM 12 BOARD TO 34, 56...)
- if (currboard->GetTC() && !strcmp(names[0],names[1]))
+ if (schg<=10 || tchg>0)
{
- UShort_t cY[4];
+// mdig->Print();
- currboard->GetY(cY); neighbour->SetY(cY);
- }
+ Int_t digitindex = digit;
+ Int_t detElemId = mdig->DetElemId();
+ Int_t cathode = mdig->Cathode();
+
+ const AliMpVSegmentation *seg = ((AliMUON*)gAlice->GetDetector("MUON"))->GetSegmentation()->GetMpSegmentation(detElemId,cathode);
+
+ Int_t ix = mdig->PadX(), iy = mdig->PadY();
+
+ AliDebug(3,Form("cathode %d ix %d iy %d ",cathode,ix,iy));
+
+ AliMpPad pad = seg->PadByIndices(AliMpIntPair(ix,iy),kTRUE);
+
+ for (Int_t i=0; i<pad.GetNofLocations(); i++)
+ {
+ AliMpIntPair location = pad.GetLocation(i);
+
+ Int_t nboard = location.GetFirst();
+
+ Int_t ibitxy = location.GetSecond();
+
+
+ AliMUONTriggerCrate *cr = (AliMUONTriggerCrate*)fCrates->FindObject(fCrateMap[nboard-1]);
+
+ TObjArray *boards = cr->Boards();
+
+ AliMUONLocalTriggerBoard *b = (AliMUONLocalTriggerBoard*)boards->At(fBoardMap[nboard-1]);
+
+// if (b && nboard && b->GetNumber()==nboard)
+ if (b)
+ {
+ if (cathode && b->GetSwitch(6)) ibitxy += 8;
+
+ b->SetbitM(ibitxy,cathode,ichamber-10);
+
+ DigitFiredCircuit(b->GetI(), cathode, ichamber, digitindex);
+ }
+ }
+ }
}
}
-
+
+// Particular case of the columns with 22 local boards (2R(L) 3R(L))
+ AliMUONTriggerCrate *crate = 0x0; TObjArray *bs = 0x0;
+
+ char *scratess[4] = { "2R", "2L", "3L", "3R"};
+ char *scratesd[4] = {"2-3R", "2-3L", "2-3L", "2-3R"};
+ Int_t slotf[4] = { 2, 2, 10, 10};
+ Int_t slotd[4] = { 1, 1, 9, 9};
+
+ for (Int_t i=0; i<4; i++)
+ {
+ crate = (AliMUONTriggerCrate*)fCrates->FindObject(scratess[i]);
+ bs = crate->Boards();
+ AliMUONLocalTriggerBoard *desybb = (AliMUONLocalTriggerBoard*)bs->At(14);
+ AliMUONLocalTriggerBoard *fromcb = (AliMUONLocalTriggerBoard*)bs->At(15);
+ AliMUONLocalTriggerBoard *desxbb = (AliMUONLocalTriggerBoard*)bs->At(16);
+
+ crate = (AliMUONTriggerCrate*)fCrates->FindObject(scratesd[i]);
+ bs = crate->Boards();
+ AliMUONLocalTriggerBoard *frombb = (AliMUONLocalTriggerBoard*)bs->At(slotf[i]);
+ AliMUONLocalTriggerBoard *desycb = (AliMUONLocalTriggerBoard*)bs->At(slotd[i]);
+
+ UShort_t cX[2];
+
+// COPY X3-4 FROM BOARD 2 OF CRATE 2-3 TO BOARD 16 OF CRATE 2
+// COPY X3-4 FROM BOARD 10 OF CRATE 2-3 TO BOARD 16 OF CRATE 3
+ frombb->GetX34(cX); desxbb->SetX34(cX);
+
+// COPY X3-4 FROM BOARD 15 OF CRATE 2 TO BOARD 1 OF CRATE 2-3
+// COPY X3-4 FROM BOARD 15 OF CRATE 3 TO BOARD 9 OF CRATE 2-3
+ fromcb->GetX34(cX); desycb->SetX34(cX);
+
+ UShort_t cY[4];
+
+ desybb->GetY(cY); frombb->SetY(cY);
+
+ frombb->GetY(cY); desxbb->SetY(cY);
+ fromcb->GetY(cY); desycb->SetY(cY);
+ }
+
// FILL UP/DOWN OF CURRENT BOARD (DONE VIA J3 BUS IN REAL LIFE)
- for (Int_t i=0; i<fgkNCrates; i++)
+ for (Int_t i=0; i<fgkNCrates; i++)
{
- AliMUONTriggerCrate *cr = (AliMUONTriggerCrate*)fCrates->UncheckedAt(i);
-
- TObjArray *boards = cr->Boards();
-
+ AliMUONTriggerCrate *cr = (AliMUONTriggerCrate*)fCrates->UncheckedAt(i);
+
+ TObjArray *boards = cr->Boards();
+
for (Int_t j=1; j<boards->GetEntries()-1; j++)
{
TObject *o = boards->At(j);
-
+
if (!o) break;
-
+
AliMUONLocalTriggerBoard *currboard = (AliMUONLocalTriggerBoard*)o;
-
+
AliMUONLocalTriggerBoard *neighbour = (AliMUONLocalTriggerBoard*)boards->At(j+1);
-
+
UShort_t cXY[2][4];
-
+
if (j==1) {neighbour->GetXY(cXY); currboard->SetXYU(cXY);}
-
+
// LAST BOARD IN THE CRATE HAS NO UP EXCEPT FOR CRATES 2 & 3
if (j<boards->GetEntries()-2)
{
AliMUONLocalTriggerBoard *nextboard = (AliMUONLocalTriggerBoard*)boards->At(j+2);
-
+
currboard->GetXY(cXY); neighbour->SetXYD(cXY);
nextboard->GetXY(cXY); neighbour->SetXYU(cXY);
-
+
if (j==boards->GetEntries()-3) {neighbour->GetXY(cXY); nextboard->SetXYD(cXY);}
}
}
}
-/*
- for (Int_t i=0; i<fgkNCrates; i++)
- {
- AliMUONTriggerCrate *cr = (AliMUONTriggerCrate*)fCrates->UncheckedAt(i);
-
- cout << "+++ CRATE " << cr->GetName() << endl;
-
- TObjArray *boards = cr->Boards();
-
- for (Int_t j=1; j<boards->GetEntries()-1; j++)
- {
- TObject *o = boards->At(j);
-
- if (!o) break;
-
- AliMUONLocalTriggerBoard *currboard = (AliMUONLocalTriggerBoard*)o;
-
- AliMUONLocalTriggerBoard *neighbour = (AliMUONLocalTriggerBoard*)boards->At(j+1);
-
-// LAST BOARD IN THE CRATE HAS NO UP EXCEPT FOR CRATES 2 & 3
-if (j<boards->GetEntries()-2)
-{
-AliMUONLocalTriggerBoard *nextboard = (AliMUONLocalTriggerBoard*)boards->At(j+2);
-
-cout << "currb: " << currboard->GetName() << endl;
-cout << "board: " << neighbour->GetName() << endl;
-cout << "nextb: " << nextboard->GetName() << endl;
-currboard->Scan("CONF");
-currboard->Pattern("X");
-currboard->Pattern("Y");
-neighbour->Scan("CONF");
-neighbour->Pattern("X");
-neighbour->Pattern("Y");
-nextboard->Scan("CONF");
-nextboard->Pattern("X");
-nextboard->Pattern("Y");
}
-}
-}
-*/
- }
//___________________________________________
void AliMUONTriggerElectronics::Feed(UShort_t pattern[2][4])
{
+//* FILL INPUTS
+//*
for (Int_t i=0; i<fgkNCrates; i++)
{
AliMUONTriggerCrate *cr = (AliMUONTriggerCrate*)fCrates->UncheckedAt(i);
//___________________________________________
void AliMUONTriggerElectronics::DumpOS()
{
+//* DUMP IN THE OLD WAY
+//*
for (Int_t i=0;i<234;i++)
{
char name[20];
AliMUONLocalTriggerBoard *board = (AliMUONLocalTriggerBoard*)boards->FindObject(name);
- if (board) board->Scan("CONF RESPI BITP RESPF");
+ if (board) board->Scan("ALL");
}
}
}
//___________________________________________
void AliMUONTriggerElectronics::Scan(Option_t *option)
{
+//* SCAN
+//*
for (Int_t i=0; i<fgkNCrates; i++)
{
AliMUONTriggerCrate *cr = (AliMUONTriggerCrate*)fCrates->UncheckedAt(i);
//___________________________________________
void AliMUONTriggerElectronics::Reset()
{
+//* RESET
+//*
for (Int_t i=0; i<fgkNCrates; i++)
{
AliMUONTriggerCrate *cr = (AliMUONTriggerCrate*)fCrates->UncheckedAt(i);
if (b) b->Reset();
}
}
+
+ for (Int_t i=0;i<16;i++)
+ {
+ fRegional[i] = 0;
+ for (Int_t j=0;j<16;j++) fLocal[i][j] = 0;
+ }
+
+ fGlobal = 0;
+}
+
+//_______________________________________________________________________
+void AliMUONTriggerElectronics::LoadMasks(AliMUONCalibrationData* calibData)
+{
+ // LOAD MASKS FROM CDB
+
+
+ // SET MASKS
+ for (Int_t i=0; i<fgkNCrates; i++)
+ {
+ AliMUONTriggerCrate *cr = (AliMUONTriggerCrate*)fCrates->UncheckedAt(i);
+
+ TObjArray *boards = cr->Boards();
+
+ AliMUONRegionalTriggerBoard *regb =
+ (AliMUONRegionalTriggerBoard*)boards->At(0);
+
+ AliMUONVCalibParam* regionalBoardMasks = calibData->RegionalTriggerBoardMasks(i);
+
+ for ( Int_t i = 0; i < regionalBoardMasks->Size(); ++i )
+ {
+ UShort_t rmask = static_cast<UShort_t>(regionalBoardMasks->ValueAsInt(i) & 0x3F);
+ regb->Mask(i,rmask);
+ }
+
+ for (Int_t j=1; j<boards->GetEntries(); j++)
+ {
+ AliMUONLocalTriggerBoard *b = (AliMUONLocalTriggerBoard*)boards->At(j);
+
+ Int_t cardNumber = b->GetNumber();
+
+ if (cardNumber) // interface board are not interested
+ {
+ AliMUONVCalibParam* localBoardMasks = calibData->LocalTriggerBoardMasks(cardNumber);
+ for ( Int_t i = 0; i < localBoardMasks->Size(); ++i )
+ {
+ UShort_t lmask = static_cast<UShort_t>(localBoardMasks->ValueAsInt(i) & 0xFFFF);
+ b->Mask(i,lmask);
+ }
+ }
+ }
+ }
+
+ AliMUONVCalibParam* globalBoardMasks = calibData->GlobalTriggerBoardMasks();
+ for ( Int_t i = 0; i < globalBoardMasks->Size(); ++i )
+ {
+ UShort_t gmask = static_cast<UShort_t>(globalBoardMasks->ValueAsInt(i) & 0xFFF);
+ fGlobalTriggerBoard->Mask(i,gmask);
+ }
}
+
//___________________________________________
void AliMUONTriggerElectronics::LocalResponse()
{
AliMUONRegionalTriggerBoard *regb = (AliMUONRegionalTriggerBoard*)boards->At(0);
+ UShort_t thisl[16]; for (Int_t j=0; j<16; j++) thisl[j] = 0;
+
for (Int_t j=1; j<boards->GetEntries(); j++)
{
TObject *o = boards->At(j);
}
}
}
- }
-
- UShort_t thisl[16]; for (Int_t j=0; j<16; j++) thisl[j] = 0;
- for (Int_t j=1; j<boards->GetEntries(); j++) thisl[j] = fLocal[i][j-1];
-
- regb->SetLocalResponse(thisl);
+ thisl[j-1] = fLocal[i][j-1];
+ }
}
+
+ regb->SetLocalResponse(thisl);
}
}
//___________________________________________
void AliMUONTriggerElectronics::RegionalResponse()
{
+//*
+//*
for (Int_t i=0; i<fgkNCrates; i++)
{
AliMUONTriggerCrate *cr = (AliMUONTriggerCrate*)fCrates->UncheckedAt(i);
//___________________________________________
void AliMUONTriggerElectronics::GlobalResponse()
{
+//*
+//*
fGlobalTriggerBoard->SetRegionalResponse(fRegional);
fGlobalTriggerBoard->Response();
//___________________________________________
void AliMUONTriggerElectronics::BoardName(Int_t ix, Int_t iy, char *name)
{
+//* BOARD NAME FROM PAD INFO (OLD MAPPING)
+//*
TString s = (ix>0) ? "R" : "L";
Int_t board = iy / 16, bid[4] = {12,34,56,78};
//___________________________________________
void AliMUONTriggerElectronics::AddCrate(char *name)
{
+//*
+//*
TClonesArray &lcrates = *fCrates;
new(lcrates[fNCrates++]) AliMUONTriggerCrate(name,17);
}
//___________________________________________
AliMUONTriggerCrate* AliMUONTriggerElectronics::Crate(char *name)
{
+//*
+//*
return (AliMUONTriggerCrate*)fCrates->FindObject(name);
}
//___________________________________________
void AliMUONTriggerElectronics::BuildName(Int_t icirc, char name[20])
{
- const Int_t CircuitId[234] =
+//* GET BOARD NAME FROM OLD NUMBERING
+//*
+ const Int_t kCircuitId[234] =
{
111, 121, 131, 141, 151, 161, 171,
211, 212, 221, 222, 231, 232, 241, 242, 251, 252, 261, 262, 271,
Int_t b[4] = {12, 34, 56, 78};
- Int_t code = TMath::Abs(CircuitId[icirc]);
+ Int_t code = TMath::Abs(kCircuitId[icirc]);
- Int_t L = code / 100;
+ Int_t lL = code / 100;
- Int_t C = ( code - 100 * L ) / 10;
+ Int_t cC = ( code - 100 * lL ) / 10;
- Int_t B = code - 100 * L - 10 * C;
+ Int_t bB = code - 100 * lL - 10 * cC;
- const char *Side = (CircuitId[icirc]>0) ? "R" : "L";
+ const char *side = (kCircuitId[icirc]>0) ? "R" : "L";
-// L=1 AT TOP
- L -= 9; L = abs(L); L++;
+// lL=1 AT TOP
+ lL -= 9; lL = abs(lL); lL++;
- sprintf(name,"%sC%dL%dB%d",Side,C,L,b[B-1]);
+ sprintf(name,"%sC%dL%dB%d",side,cC,lL,b[bB-1]);
}
//_______________________________________________________________________
void
AliMUONTriggerElectronics::Exec(Option_t*)
{
+//*
+//*
Digits2Trigger();
}
//_______________________________________________________________________
void AliMUONTriggerElectronics::Trigger()
{
- Feed();
+//*
+//*
+ FeedM();
LocalResponse();
RegionalResponse();
GlobalResponse();
}
-/*
-//_______________________________________________________________________
-void AliMUONTriggerElectronics::DisableCrate(Int_t icrate)
-{
- fRegional[icrate] = 0;
-}
-//_______________________________________________________________________
-void AliMUONTriggerElectronics::DisableCrate(char *Name)
-{
- Int_t icrate;
-
- for (Int_t i=0; i<fgkNCrates; i++)
- {
- AliMUONTriggerCrate *cr = (AliMUONTriggerCrate*)fCrates->UncheckedAt(i);
- if (strcmp(cr->GetName(),Name) )
- continue;
- else
- {
- icrate = i;
- break;
- }
- }
-
- fRegional[icrate] = 0;
-}
-
-//_______________________________________________________________________
-void AliMUONTriggerElectronics::DisableBoardInCrate(Int_t icrate, Int_t islot)
-{
-// BEWARE, REGIONAL BOARD IS IN SLOT 0
- fLocal[icrate][islot] = 0;
-}
-*/
//_______________________________________________________________________
void AliMUONTriggerElectronics::Digits2Trigger()
{
+//*
+//*
ClearDigitNumbers();
fMUONData->ResetTrigger();
// RUN THE FULL BEE CHAIN
Trigger();
-
- // if ( AliDebugLevel() > 1 )
-// {
-// DumpOS();
-// }
-
+// DumpOS();
+
for (Int_t i=0; i<fgkNCrates; i++)
{
AliMUONTriggerCrate *cr = (AliMUONTriggerCrate*)fCrates->UncheckedAt(i);
localtr[5] = (fLocal[i][j-1] & 48) >> 4;
localtr[6] = (fLocal[i][j-1] & 3);
+ TBits rrr;
+ rrr.Set(6,&fLocal[i][j-1]);
+
// SAVE BIT PATTERN
localtr[7] = board->GetXY(0,0);
localtr[8] = board->GetXY(0,1);
// GLOBAL TRIGGER INFORMATION: [0] -> LOW PT
// [1] -> HIGH PT
// [2] -> ALL PT
- Int_t GlobalSinglePlus[3], GlobalSingleMinus[3], GlobalSingleUndef[3];
- Int_t GlobalPairUnlike[3], GlobalPairLike[3];
+ Int_t globalSinglePlus[3], globalSingleMinus[3], globalSingleUndef[3];
+ Int_t globalPairUnlike[3], globalPairLike[3];
- GlobalPairUnlike[0] = (fGlobal & 16) >> 4;
- GlobalPairUnlike[1] = (fGlobal & 256) >> 8;
- GlobalPairUnlike[2] = (fGlobal & 1);
+ globalPairUnlike[0] = (fGlobal & 16) >> 4;
+ globalPairUnlike[1] = (fGlobal & 256) >> 8;
+ globalPairUnlike[2] = (fGlobal & 1);
- GlobalPairLike[0] = (fGlobal & 32) >> 5;
- GlobalPairLike[1] = (fGlobal & 512) >> 9;
- GlobalPairLike[2] = (fGlobal & 2) >> 1;
+ globalPairLike[0] = (fGlobal & 32) >> 5;
+ globalPairLike[1] = (fGlobal & 512) >> 9;
+ globalPairLike[2] = (fGlobal & 2) >> 1;
- GlobalSinglePlus[0] = ((fGlobal & 192) >> 6) == 2;
- GlobalSinglePlus[1] = ((fGlobal & 3072) >> 10) == 2;
- GlobalSinglePlus[2] = ((fGlobal & 12) >> 2) == 2;
+ globalSinglePlus[0] = ((fGlobal & 192) >> 6) == 2;
+ globalSinglePlus[1] = ((fGlobal & 3072) >> 10) == 2;
+ globalSinglePlus[2] = ((fGlobal & 12) >> 2) == 2;
- GlobalSingleMinus[0] = ((fGlobal & 192) >> 6) == 1;
- GlobalSingleMinus[1] = ((fGlobal & 3072) >> 10) == 1;
- GlobalSingleMinus[2] = ((fGlobal & 12) >> 2) == 1;
+ globalSingleMinus[0] = ((fGlobal & 192) >> 6) == 1;
+ globalSingleMinus[1] = ((fGlobal & 3072) >> 10) == 1;
+ globalSingleMinus[2] = ((fGlobal & 12) >> 2) == 1;
- GlobalSingleUndef[0] = ((fGlobal & 192) >> 6) == 3;
- GlobalSingleUndef[1] = ((fGlobal & 3072) >> 10) == 3;
- GlobalSingleUndef[2] = ((fGlobal & 12) >> 2) == 3;
+ globalSingleUndef[0] = ((fGlobal & 192) >> 6) == 3;
+ globalSingleUndef[1] = ((fGlobal & 3072) >> 10) == 3;
+ globalSingleUndef[2] = ((fGlobal & 12) >> 2) == 3;
- AliMUONGlobalTrigger *pGloTrig = new AliMUONGlobalTrigger(GlobalSinglePlus, GlobalSingleMinus,
- GlobalSingleUndef, GlobalPairUnlike,
- GlobalPairLike);
+ AliMUONGlobalTrigger *pGloTrig = new AliMUONGlobalTrigger(globalSinglePlus, globalSingleMinus,
+ globalSingleUndef, globalPairUnlike,
+ globalPairLike);
// ADD A LOCAL TRIGGER IN THE LIST
fMUONData->AddGlobalTrigger(*pGloTrig);
-// Now reset electronics
+// NOW RESET ELECTRONICS
Reset();
}