1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 //*-- Author: Rachid Guernane (LPCCFd)
19 //* Manager class for muon trigger electronics
20 //* Client of trigger board classes
24 #include "AliMUONTriggerElectronics.h"
25 #include "AliMUONTriggerCrate.h"
26 #include "AliMUONTriggerCrateStore.h"
27 #include "AliMUONConstants.h"
28 #include "AliMUONLocalTriggerBoard.h"
29 #include "AliMUONRegionalTriggerBoard.h"
30 #include "AliMUONGlobalTriggerBoard.h"
31 #include "AliMUONLocalTrigger.h"
32 #include "AliMUONRegionalTrigger.h"
33 #include "AliMUONGlobalTrigger.h"
35 #include "AliMUONData.h"
36 #include "AliMUONDigit.h"
37 #include "AliMUONSegmentation.h"
38 #include "AliMUONCalibrationData.h"
39 #include "AliMUONVCalibParam.h"
41 #include "AliMpVSegmentation.h"
44 #include "AliLoader.h"
47 //#include "Riostream.h"
51 ClassImp(AliMUONTriggerElectronics)
53 //___________________________________________
54 AliMUONTriggerElectronics::AliMUONTriggerElectronics(AliMUONData *Data, AliMUONCalibrationData* calibData)
55 : TTask("AliMUONTriggerElectronics",
56 "From trigger digits to Local and Global Trigger objects"),
57 fCrates(new AliMUONTriggerCrateStore),
58 fGlobalTriggerBoard(new AliMUONGlobalTriggerBoard),
65 AliFatal("NO MUON TRIGGER DATA");
73 //______________________________________________________________________________
74 AliMUONTriggerElectronics::AliMUONTriggerElectronics(const AliMUONTriggerElectronics& right)
77 /// Protected copy constructor (not implemented)
79 AliFatal("Copy constructor not provided.");
82 //___________________________________________
83 AliMUONTriggerElectronics::~AliMUONTriggerElectronics()
87 delete fGlobalTriggerBoard;
91 //______________________________________________________________________________
92 AliMUONTriggerElectronics&
93 AliMUONTriggerElectronics::operator=(const AliMUONTriggerElectronics& right)
95 /// Protected assignement operator (not implemented)
97 // check assignement to self
98 if (this == &right) return *this;
100 AliFatal("Assignement operator not provided.");
105 //___________________________________________
106 void AliMUONTriggerElectronics::Factory(AliMUONCalibrationData* calibData)
108 //* BUILD ALL ELECTRONICS
111 fCrates->ReadFromFile(gSystem->ExpandPathName(fSourceFileName.Data()));
113 if ( !calibData ) return;
115 AliMUONTriggerLut* lut = calibData->TriggerLut();
119 AliMUONLocalTriggerBoard* localBoard;
121 fCrates->FirstLocalBoard();
123 while ( (localBoard=fCrates->NextLocalBoard()) )
125 localBoard->SetLUT(lut);
129 //___________________________________________
130 void AliMUONTriggerElectronics::FeedM()
134 for (Int_t ichamber=10; ichamber<14; ichamber++)
136 TClonesArray *muonDigits = fMUONData->Digits(ichamber);
137 Int_t ndigits = muonDigits->GetEntriesFast();
139 for (Int_t digit=0; digit<ndigits; digit++)
141 AliMUONDigit *mdig = static_cast<AliMUONDigit*>(muonDigits->UncheckedAt(digit));
143 // CHECKME ! The TrackCharge is not ok with new digitizerV3 !
144 // for (Int_t ichg=0; ichg<10; ichg++) schg += mdig->TrackCharge(ichg);
145 // assert(schg==mdig->Signal());
146 Int_t schg = mdig->Signal();
148 // APPLY CONDITION ON SOFT BACKGROUND
149 Int_t tchg = schg - (Int_t(schg/10))*10;
151 if (schg<=10 || tchg>0)
155 Int_t digitindex = digit;
156 Int_t detElemId = mdig->DetElemId();
157 Int_t cathode = mdig->Cathode();
159 const AliMpVSegmentation *seg = ((AliMUON*)gAlice->GetDetector("MUON"))->GetSegmentation()->GetMpSegmentation(detElemId,cathode);
161 Int_t ix = mdig->PadX(), iy = mdig->PadY();
163 AliDebug(3,Form("cathode %d ix %d iy %d ",cathode,ix,iy));
165 AliMpPad pad = seg->PadByIndices(AliMpIntPair(ix,iy),kTRUE);
167 for (Int_t i=0; i<pad.GetNofLocations(); i++)
169 AliMpIntPair location = pad.GetLocation(i);
171 Int_t nboard = location.GetFirst();
173 Int_t ibitxy = location.GetSecond();
175 AliMUONLocalTriggerBoard *b = fCrates->LocalBoard(nboard);
179 if (cathode && b->GetSwitch(6)) ibitxy += 8;
181 b->SetbitM(ibitxy,cathode,ichamber-10);
183 DigitFiredCircuit(b->GetI(), cathode, ichamber, digitindex);
187 AliError(Form("Could not get local board number %d",b->GetNumber()));
194 // Particular case of the columns with 22 local boards (2R(L) 3R(L))
195 AliMUONTriggerCrate *crate = 0x0; TObjArray *bs = 0x0;
197 char *scratess[4] = { "2R", "2L", "3L", "3R"};
198 char *scratesd[4] = {"2-3R", "2-3L", "2-3L", "2-3R"};
199 Int_t slotf[4] = { 2, 2, 10, 10};
200 Int_t slotd[4] = { 1, 1, 9, 9};
202 for (Int_t i=0; i<4; i++)
204 crate = fCrates->Crate(scratess[i]);
205 bs = crate->Boards();
206 AliMUONLocalTriggerBoard *desybb = (AliMUONLocalTriggerBoard*)bs->At(14);
207 AliMUONLocalTriggerBoard *fromcb = (AliMUONLocalTriggerBoard*)bs->At(15);
208 AliMUONLocalTriggerBoard *desxbb = (AliMUONLocalTriggerBoard*)bs->At(16);
210 crate = fCrates->Crate(scratesd[i]);
211 bs = crate->Boards();
212 AliMUONLocalTriggerBoard *frombb = (AliMUONLocalTriggerBoard*)bs->At(slotf[i]);
213 AliMUONLocalTriggerBoard *desycb = (AliMUONLocalTriggerBoard*)bs->At(slotd[i]);
217 // COPY X3-4 FROM BOARD 2 OF CRATE 2-3 TO BOARD 16 OF CRATE 2
218 // COPY X3-4 FROM BOARD 10 OF CRATE 2-3 TO BOARD 16 OF CRATE 3
219 frombb->GetX34(cX); desxbb->SetX34(cX);
221 // COPY X3-4 FROM BOARD 15 OF CRATE 2 TO BOARD 1 OF CRATE 2-3
222 // COPY X3-4 FROM BOARD 15 OF CRATE 3 TO BOARD 9 OF CRATE 2-3
223 fromcb->GetX34(cX); desycb->SetX34(cX);
227 desybb->GetY(cY); frombb->SetY(cY);
229 frombb->GetY(cY); desxbb->SetY(cY);
230 fromcb->GetY(cY); desycb->SetY(cY);
233 // FILL UP/DOWN OF CURRENT BOARD (DONE VIA J3 BUS IN REAL LIFE)
234 AliMUONTriggerCrate* cr;
236 fCrates->FirstCrate();
238 while ( ( cr = fCrates->NextCrate() ) )
240 TObjArray *boards = cr->Boards();
242 for (Int_t j=1; j<boards->GetEntries()-1; j++)
244 TObject *o = boards->At(j);
248 AliMUONLocalTriggerBoard *currboard = (AliMUONLocalTriggerBoard*)o;
250 AliMUONLocalTriggerBoard *neighbour = (AliMUONLocalTriggerBoard*)boards->At(j+1);
254 if (j==1) {neighbour->GetXY(cXY); currboard->SetXYU(cXY);}
256 // LAST BOARD IN THE CRATE HAS NO UP EXCEPT FOR CRATES 2 & 3
257 if (j<boards->GetEntries()-2)
259 AliMUONLocalTriggerBoard *nextboard = (AliMUONLocalTriggerBoard*)boards->At(j+2);
261 currboard->GetXY(cXY); neighbour->SetXYD(cXY);
262 nextboard->GetXY(cXY); neighbour->SetXYU(cXY);
264 if (j==boards->GetEntries()-3) {neighbour->GetXY(cXY); nextboard->SetXYD(cXY);}
270 //___________________________________________
271 void AliMUONTriggerElectronics::Feed(UShort_t pattern[2][4])
275 AliMUONTriggerCrate* cr;
277 fCrates->FirstCrate();
279 while ( ( cr = fCrates->NextCrate() ) )
281 TObjArray *boards = cr->Boards();
283 for (Int_t j=1; j<boards->GetEntries(); j++)
285 TObject *o = boards->At(j);
289 AliMUONLocalTriggerBoard *board = (AliMUONLocalTriggerBoard*)o;
291 board->SetXY(pattern);
296 //___________________________________________
297 void AliMUONTriggerElectronics::DumpOS()
299 //* DUMP IN THE OLD WAY
301 for (Int_t i=0;i<234;i++)
303 AliMUONLocalTriggerBoard *board = fCrates->LocalBoard(i);
305 if (board) board->Scan("ALL");
309 //___________________________________________
310 void AliMUONTriggerElectronics::Scan(Option_t *option)
315 AliMUONTriggerCrate* cr;
317 fCrates->FirstCrate();
319 while ( ( cr = fCrates->NextCrate() ) )
321 TObjArray *boards = cr->Boards();
323 for (Int_t j=0; j<boards->GetEntries(); j++)
325 TObject *o = boards->At(j);
329 Bool_t cdtion = kFALSE;
331 if (op.Contains("LOCAL")) cdtion = o->IsA() == AliMUONLocalTriggerBoard::Class();
332 if (op.Contains("REGIONAL")) cdtion = o->IsA() == AliMUONRegionalTriggerBoard::Class();
333 if (op.Contains("GLOBAL")) cdtion = o->IsA() == AliMUONGlobalTriggerBoard::Class();
335 if (!o || !cdtion) continue;
337 AliMUONLocalTriggerBoard *board = (AliMUONLocalTriggerBoard*)o;
344 //___________________________________________
345 void AliMUONTriggerElectronics::Reset()
350 AliMUONTriggerCrate* cr;
352 fCrates->FirstCrate();
354 while ( ( cr = fCrates->NextCrate() ) )
356 TObjArray *boards = cr->Boards();
358 for (Int_t j=0; j<boards->GetEntries(); j++)
360 AliMUONTriggerBoard *b = (AliMUONTriggerBoard*)boards->At(j);
367 //_______________________________________________________________________
368 void AliMUONTriggerElectronics::LoadMasks(AliMUONCalibrationData* calibData)
370 // LOAD MASKS FROM CDB
375 AliMUONTriggerCrate* cr;
377 fCrates->FirstCrate();
381 while ( ( cr = fCrates->NextCrate() ) )
383 TObjArray *boards = cr->Boards();
385 AliMUONRegionalTriggerBoard *regb =
386 (AliMUONRegionalTriggerBoard*)boards->At(0);
388 AliMUONVCalibParam* regionalBoardMasks = calibData->RegionalTriggerBoardMasks(irb);
390 for ( Int_t i = 0; i < regionalBoardMasks->Size(); ++i )
392 UShort_t rmask = static_cast<UShort_t>(regionalBoardMasks->ValueAsInt(i) & 0x3F);
396 for (Int_t j=1; j<boards->GetEntries(); j++)
398 AliMUONLocalTriggerBoard *b = (AliMUONLocalTriggerBoard*)boards->At(j);
400 Int_t cardNumber = b->GetNumber();
402 if (cardNumber) // interface board are not interested
404 AliMUONVCalibParam* localBoardMasks = calibData->LocalTriggerBoardMasks(cardNumber);
405 for ( Int_t i = 0; i < localBoardMasks->Size(); ++i )
407 UShort_t lmask = static_cast<UShort_t>(localBoardMasks->ValueAsInt(i) & 0xFFFF);
415 AliMUONVCalibParam* globalBoardMasks = calibData->GlobalTriggerBoardMasks();
416 for ( Int_t i = 0; i < globalBoardMasks->Size(); ++i )
418 UShort_t gmask = static_cast<UShort_t>(globalBoardMasks->ValueAsInt(i) & 0xFFF);
419 fGlobalTriggerBoard->Mask(i,gmask);
424 //___________________________________________
425 void AliMUONTriggerElectronics::LocalResponse()
435 crate[0].name = "2R"; crate[0].ns = 1; crate[0].slots[0] = 16;
436 crate[1].name = "2L"; crate[1].ns = 1; crate[1].slots[0] = 16;
437 crate[2].name = "3L"; crate[2].ns = 1; crate[2].slots[0] = 16;
438 crate[3].name = "3R"; crate[3].ns = 1; crate[3].slots[0] = 16;
439 crate[4].name = "2-3R"; crate[4].ns = 2; crate[4].slots[0] = 1; crate[4].slots[1] = 9;
440 crate[5].name = "2-3L"; crate[5].ns = 2; crate[5].slots[0] = 1; crate[5].slots[1] = 9;
442 AliMUONTriggerCrate* cr;
444 fCrates->FirstCrate();
446 while ( ( cr = fCrates->NextCrate() ) )
450 for (Int_t icr=0; icr<6; icr++)
452 const char *n = (crate[icr].name).Data();
454 AliMUONTriggerCrate *dcr = fCrates->Crate(n);
456 // THIS CRATE CONTAINS AN INTERFACE BOARD
457 if ( dcr && !strcmp(cr->GetName(),dcr->GetName()) ) iib = icr;
460 TObjArray *boards = cr->Boards();
462 AliMUONRegionalTriggerBoard *regb = (AliMUONRegionalTriggerBoard*)boards->At(0);
464 UShort_t thisl[16]; for (Int_t j=0; j<16; j++) thisl[j] = 0;
466 for (Int_t j=1; j<boards->GetEntries(); j++)
468 TObject *o = boards->At(j);
472 AliMUONLocalTriggerBoard *board = (AliMUONLocalTriggerBoard*)o;
478 UShort_t tmp = board->GetResponse();
480 // CRATE CONTAINING INTERFACE BOARD
483 for (Int_t iid = 0; iid<crate[iib].ns; iid++)
485 if ( j == crate[iib].slots[iid] )
488 AliWarning(Form("Interface board %s in slot %d of crate %s has a non zero response",
489 board->GetName(),j,cr->GetName()));
498 regb->SetLocalResponse(thisl);
502 //___________________________________________
503 void AliMUONTriggerElectronics::RegionalResponse()
505 /// Compute the response for all regional cards.
506 AliMUONTriggerCrate* cr;
508 fCrates->FirstCrate();
510 while ( ( cr = fCrates->NextCrate() ) )
512 TObjArray *boards = cr->Boards();
514 AliMUONRegionalTriggerBoard *regb = (AliMUONRegionalTriggerBoard*)boards->At(0);
523 //___________________________________________
524 void AliMUONTriggerElectronics::GlobalResponse()
526 /// Compute the global response
528 UShort_t regional[16];
530 AliMUONTriggerCrate* cr;
532 fCrates->FirstCrate();
535 if ( !fCrates->NumberOfCrates() >= 16 )
537 AliFatal(Form("Something is wrong : too many crates %d",
538 fCrates->NumberOfCrates()));
541 while ( ( cr = fCrates->NextCrate() ) )
543 AliMUONTriggerBoard* rb =
544 static_cast<AliMUONTriggerBoard*>(cr->Boards()->At(0));
545 regional[irb] = rb->GetResponse();
549 fGlobalTriggerBoard->SetRegionalResponse(regional);
550 fGlobalTriggerBoard->Response();
553 //___________________________________________
554 void AliMUONTriggerElectronics::BoardName(Int_t ix, Int_t iy, char *name)
556 //* BOARD NAME FROM PAD INFO (OLD MAPPING)
558 TString s = (ix>0) ? "R" : "L";
560 Int_t board = iy / 16, bid[4] = {12,34,56,78};
564 Int_t line = ix / 10, column = ix - 10 * line;
566 // old scheme: line==1 is line==9
567 line -= 9; line = TMath::Abs(line); line++;
569 sprintf(name,"%sC%dL%dB%d", s.Data(), column, line, bid[board]);
571 AliDebug(3, Form("Strip ( %d , %d ) connected to board %s ", ix, iy, name));
574 //___________________________________________
575 void AliMUONTriggerElectronics::BuildName(Int_t icirc, char name[20])
577 //* GET BOARD NAME FROM OLD NUMBERING
579 const Int_t kCircuitId[234] =
581 111, 121, 131, 141, 151, 161, 171,
582 211, 212, 221, 222, 231, 232, 241, 242, 251, 252, 261, 262, 271,
583 311, 312, 321, 322, 331, 332, 341, 342, 351, 352, 361, 362, 371,
584 411, 412, 413, 421, 422, 423, 424, 431, 432, 433, 434, 441, 442, 451, 452, 461, 462, 471,
585 521, 522, 523, 524, 531, 532, 533, 534, 541, 542, 551, 552, 561, 562, 571,
586 611, 612, 613, 621, 622, 623, 624, 631, 632, 633, 634, 641, 642, 651, 652, 661, 662, 671,
587 711, 712, 721, 722, 731, 732, 741, 742, 751, 752, 761, 762, 771,
588 811, 812, 821, 822, 831, 832, 841, 842, 851, 852, 861, 862, 871,
589 911, 921, 931, 941, 951, 961, 971,
590 -111, -121, -131, -141, -151, -161, -171,
591 -211, -212, -221, -222, -231, -232, -241, -242, -251, -252, -261, -262, -271,
592 -311, -312, -321, -322, -331, -332, -341, -342, -351, -352, -361, -362, -371,
593 -411, -412, -413, -421, -422, -423, -424, -431, -432, -433, -434, -441, -442, -451, -452, -461, -462, -471,
594 -521, -522, -523, -524, -531, -532, -533, -534, -541, -542, -551, -552, -561, -562, -571,
595 -611, -612, -613, -621, -622, -623, -624, -631, -632, -633, -634, -641, -642, -651, -652, -661, -662, -671,
596 -711, -712, -721, -722, -731, -732, -741, -742, -751, -752, -761, -762, -771,
597 -811, -812, -821, -822, -831, -832, -841, -842, -851, -852, -861, -862, -871,
598 -911, -921, -931, -941, -951, -961, -971
601 Int_t b[4] = {12, 34, 56, 78};
603 Int_t code = TMath::Abs(kCircuitId[icirc]);
605 Int_t lL = code / 100;
607 Int_t cC = ( code - 100 * lL ) / 10;
609 Int_t bB = code - 100 * lL - 10 * cC;
611 const char *side = (kCircuitId[icirc]>0) ? "R" : "L";
614 lL -= 9; lL = abs(lL); lL++;
616 sprintf(name,"%sC%dL%dB%d",side,cC,lL,b[bB-1]);
619 //_______________________________________________________________________
621 AliMUONTriggerElectronics::Exec(Option_t*)
628 //_______________________________________________________________________
629 void AliMUONTriggerElectronics::Trigger()
639 //_______________________________________________________________________
640 void AliMUONTriggerElectronics::Digits2Trigger()
642 /// Main method to go from digits to trigger decision
644 AliMUONRegionalTrigger *pRegTrig = new AliMUONRegionalTrigger();
648 fMUONData->ResetTrigger();
650 // RUN THE FULL BEE CHAIN
654 AliMUONTriggerCrate* cr;
656 fCrates->FirstCrate();
658 while ( ( cr = fCrates->NextCrate() ) )
660 TObjArray *boards = cr->Boards();
662 UInt_t regInpLpt = 0;
663 UInt_t regInpHpt = 0;
664 UShort_t localMask = 0x0;
666 AliMUONRegionalTriggerBoard *regBoard = (AliMUONRegionalTriggerBoard*)boards->At(0);
668 for (Int_t j = 1; j < boards->GetEntries(); j++)
670 TObject *o = boards->At(j);
674 AliMUONLocalTriggerBoard *board = (AliMUONLocalTriggerBoard*)o;
679 if (board->Triggered())
681 Int_t localtr[15] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,0};
683 Int_t icirc = board->GetNumber();
686 localtr[1] = board->GetStripX11();
687 localtr[2] = board->GetDev();
688 localtr[3] = board->GetStripY11();
691 UShort_t response = board->GetResponse();
692 localtr[4] = (response & 12) >> 2;
693 localtr[5] = (response & 48) >> 4;
694 localtr[6] = (response & 3);
696 // calculates regional inputs from local for the moment
697 UInt_t hPt = (response >> 4) & 0x3;
698 UInt_t lPt = (response >> 2) & 0x3;
700 regInpHpt |= hPt << (30 - (j-1)*2);
701 regInpLpt |= lPt << (30 - (j-1)*2);
702 localMask |= (0x1 << (j-1)); // local mask
706 rrr.Set(6,&response);
709 localtr[7] = board->GetXY(0,0);
710 localtr[8] = board->GetXY(0,1);
711 localtr[9] = board->GetXY(0,2);
712 localtr[10] = board->GetXY(0,3);
714 localtr[11] = board->GetXY(1,0);
715 localtr[12] = board->GetXY(1,1);
716 localtr[13] = board->GetXY(1,2);
717 localtr[14] = board->GetXY(1,3);
719 // ADD A NEW LOCAL TRIGGER
720 AliMUONLocalTrigger *pLocTrig = new AliMUONLocalTrigger(localtr, fDigitNumbers[icirc]);
722 fMUONData->AddLocalTrigger(*pLocTrig);
727 pRegTrig->SetLocalOutput(regInpLpt, 0);
728 pRegTrig->SetLocalOutput(regInpHpt, 1);
729 pRegTrig->SetLocalMask(localMask);
730 pRegTrig->SetOutput((regBoard->GetResponse() >> 4) & 0xF); // to be uniformized (oct06 ?)
732 fMUONData->AddRegionalTrigger(*pRegTrig);
737 // GLOBAL TRIGGER INFORMATION: [0] -> LOW PT
740 Int_t globalSinglePlus[3], globalSingleMinus[3], globalSingleUndef[3];
741 Int_t globalPairUnlike[3], globalPairLike[3];
743 UShort_t global = fGlobalTriggerBoard->GetResponse();
745 globalPairUnlike[0] = (global & 16) >> 4;
746 globalPairUnlike[1] = (global & 256) >> 8;
747 globalPairUnlike[2] = (global & 1);
749 globalPairLike[0] = (global & 32) >> 5;
750 globalPairLike[1] = (global & 512) >> 9;
751 globalPairLike[2] = (global & 2) >> 1;
753 globalSinglePlus[0] = ((global & 192) >> 6) == 2;
754 globalSinglePlus[1] = ((global & 3072) >> 10) == 2;
755 globalSinglePlus[2] = ((global & 12) >> 2) == 2;
757 globalSingleMinus[0] = ((global & 192) >> 6) == 1;
758 globalSingleMinus[1] = ((global & 3072) >> 10) == 1;
759 globalSingleMinus[2] = ((global & 12) >> 2) == 1;
761 globalSingleUndef[0] = ((global & 192) >> 6) == 3;
762 globalSingleUndef[1] = ((global & 3072) >> 10) == 3;
763 globalSingleUndef[2] = ((global & 12) >> 2) == 3;
765 AliMUONGlobalTrigger *pGloTrig = new AliMUONGlobalTrigger(globalSinglePlus, globalSingleMinus,
766 globalSingleUndef, globalPairUnlike,
769 // ADD A LOCAL TRIGGER IN THE LIST
770 fMUONData->AddGlobalTrigger(*pGloTrig);
773 // NOW RESET ELECTRONICS
777 //_______________________________________________________________________
778 void AliMUONTriggerElectronics::ClearDigitNumbers()
780 // RESET fDigitNumbers
781 for (Int_t i=0; i<AliMUONConstants::NTriggerCircuit(); i++) fDigitNumbers[i].Set(0);
784 //_______________________________________________________________________
785 void AliMUONTriggerElectronics::DigitFiredCircuit(Int_t circuit, Int_t cathode,
786 Int_t chamber, Int_t digit)
788 // REGISTERS THAT THE SPECIFIED DIGIT FIRED THE SPECIFIED CIRCUIT
789 // THIS DIGIT GETS ADDED TO AN ARRAY WHICH WILL BE COPIED TO
790 // AliMUONLocalTrigger WHEN SUCH AN OBJECT IS CREATED FOR EACH CIRCUIT
791 Int_t digitnumber = AliMUONLocalTrigger::EncodeDigitNumber(chamber, cathode, digit);
792 Int_t last = fDigitNumbers[circuit].GetSize();
793 fDigitNumbers[circuit].Set(last + 1);
794 fDigitNumbers[circuit][last] = digitnumber;