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 // get coinc44 from AliMUON (added 12/09/06)
112 AliMUON *pMUON = (AliMUON*)gAlice->GetModule("MUON");
113 Int_t coinc44 = pMUON->GetTriggerCoinc44();
114 if (coinc44 != 0 && coinc44 != 1) {
115 AliFatal("Coinc 44 should be equal to 0 or 1");
119 fCrates->ReadFromFile(gSystem->ExpandPathName(fSourceFileName.Data()));
121 if ( !calibData ) return;
123 AliMUONTriggerLut* lut = calibData->TriggerLut();
127 AliMUONLocalTriggerBoard* localBoard;
129 fCrates->FirstLocalBoard();
131 while ( (localBoard=fCrates->NextLocalBoard()) )
133 localBoard->SetLUT(lut);
134 localBoard->SetCoinc44(coinc44);
138 //___________________________________________
139 void AliMUONTriggerElectronics::FeedM()
143 for (Int_t ichamber=10; ichamber<14; ichamber++)
145 TClonesArray *muonDigits = fMUONData->Digits(ichamber);
146 Int_t ndigits = muonDigits->GetEntriesFast();
148 for (Int_t digit=0; digit<ndigits; digit++)
150 AliMUONDigit *mdig = static_cast<AliMUONDigit*>(muonDigits->UncheckedAt(digit));
152 // CHECKME ! The TrackCharge is not ok with new digitizerV3 !
153 // for (Int_t ichg=0; ichg<10; ichg++) schg += mdig->TrackCharge(ichg);
154 // assert(schg==mdig->Signal());
155 Int_t schg = mdig->Signal();
157 // APPLY CONDITION ON SOFT BACKGROUND
158 Int_t tchg = schg - (Int_t(schg/10))*10;
160 if (schg<=10 || tchg>0)
164 Int_t digitindex = digit;
165 Int_t detElemId = mdig->DetElemId();
166 Int_t cathode = mdig->Cathode();
168 const AliMpVSegmentation *seg = ((AliMUON*)gAlice->GetDetector("MUON"))->GetSegmentation()->GetMpSegmentation(detElemId,cathode);
170 Int_t ix = mdig->PadX(), iy = mdig->PadY();
172 AliDebug(3,Form("cathode %d ix %d iy %d ",cathode,ix,iy));
174 AliMpPad pad = seg->PadByIndices(AliMpIntPair(ix,iy),kTRUE);
176 for (Int_t i=0; i<pad.GetNofLocations(); i++)
178 AliMpIntPair location = pad.GetLocation(i);
180 Int_t nboard = location.GetFirst();
182 Int_t ibitxy = location.GetSecond();
184 AliMUONLocalTriggerBoard *b = fCrates->LocalBoard(nboard);
188 if (cathode && b->GetSwitch(6)) ibitxy += 8;
190 b->SetbitM(ibitxy,cathode,ichamber-10);
192 DigitFiredCircuit(b->GetI(), cathode, ichamber, digitindex);
196 AliError(Form("Could not get local board number %d",b->GetNumber()));
203 // Particular case of the columns with 22 local boards (2R(L) 3R(L))
204 AliMUONTriggerCrate *crate = 0x0; TObjArray *bs = 0x0;
206 char *scratess[4] = { "2R", "2L", "3L", "3R"};
207 char *scratesd[4] = {"2-3R", "2-3L", "2-3L", "2-3R"};
208 Int_t slotf[4] = { 2, 2, 10, 10};
209 Int_t slotd[4] = { 1, 1, 9, 9};
211 for (Int_t i=0; i<4; i++)
213 crate = fCrates->Crate(scratess[i]);
214 bs = crate->Boards();
215 AliMUONLocalTriggerBoard *desybb = (AliMUONLocalTriggerBoard*)bs->At(14);
216 AliMUONLocalTriggerBoard *fromcb = (AliMUONLocalTriggerBoard*)bs->At(15);
217 AliMUONLocalTriggerBoard *desxbb = (AliMUONLocalTriggerBoard*)bs->At(16);
219 crate = fCrates->Crate(scratesd[i]);
220 bs = crate->Boards();
221 AliMUONLocalTriggerBoard *frombb = (AliMUONLocalTriggerBoard*)bs->At(slotf[i]);
222 AliMUONLocalTriggerBoard *desycb = (AliMUONLocalTriggerBoard*)bs->At(slotd[i]);
226 // COPY X3-4 FROM BOARD 2 OF CRATE 2-3 TO BOARD 16 OF CRATE 2
227 // COPY X3-4 FROM BOARD 10 OF CRATE 2-3 TO BOARD 16 OF CRATE 3
228 frombb->GetX34(cX); desxbb->SetX34(cX);
230 // COPY X3-4 FROM BOARD 15 OF CRATE 2 TO BOARD 1 OF CRATE 2-3
231 // COPY X3-4 FROM BOARD 15 OF CRATE 3 TO BOARD 9 OF CRATE 2-3
232 fromcb->GetX34(cX); desycb->SetX34(cX);
236 desybb->GetY(cY); frombb->SetY(cY);
238 frombb->GetY(cY); desxbb->SetY(cY);
239 fromcb->GetY(cY); desycb->SetY(cY);
242 // FILL UP/DOWN OF CURRENT BOARD (DONE VIA J3 BUS IN REAL LIFE)
243 AliMUONTriggerCrate* cr;
245 fCrates->FirstCrate();
247 while ( ( cr = fCrates->NextCrate() ) )
249 TObjArray *boards = cr->Boards();
251 for (Int_t j=1; j<boards->GetEntries()-1; j++)
253 TObject *o = boards->At(j);
257 AliMUONLocalTriggerBoard *currboard = (AliMUONLocalTriggerBoard*)o;
259 AliMUONLocalTriggerBoard *neighbour = (AliMUONLocalTriggerBoard*)boards->At(j+1);
263 if (j==1) {neighbour->GetXY(cXY); currboard->SetXYU(cXY);}
265 // LAST BOARD IN THE CRATE HAS NO UP EXCEPT FOR CRATES 2 & 3
266 if (j<boards->GetEntries()-2)
268 AliMUONLocalTriggerBoard *nextboard = (AliMUONLocalTriggerBoard*)boards->At(j+2);
270 currboard->GetXY(cXY); neighbour->SetXYD(cXY);
271 nextboard->GetXY(cXY); neighbour->SetXYU(cXY);
273 if (j==boards->GetEntries()-3) {neighbour->GetXY(cXY); nextboard->SetXYD(cXY);}
279 //___________________________________________
280 void AliMUONTriggerElectronics::Feed(UShort_t pattern[2][4])
284 AliMUONTriggerCrate* cr;
286 fCrates->FirstCrate();
288 while ( ( cr = fCrates->NextCrate() ) )
290 TObjArray *boards = cr->Boards();
292 for (Int_t j=1; j<boards->GetEntries(); j++)
294 TObject *o = boards->At(j);
298 AliMUONLocalTriggerBoard *board = (AliMUONLocalTriggerBoard*)o;
300 board->SetXY(pattern);
305 //___________________________________________
306 void AliMUONTriggerElectronics::DumpOS()
308 //* DUMP IN THE OLD WAY
310 for (Int_t i=0;i<234;i++)
312 AliMUONLocalTriggerBoard *board = fCrates->LocalBoard(i);
314 if (board) board->Scan("ALL");
318 //___________________________________________
319 void AliMUONTriggerElectronics::Scan(Option_t *option)
324 AliMUONTriggerCrate* cr;
326 fCrates->FirstCrate();
328 while ( ( cr = fCrates->NextCrate() ) )
330 TObjArray *boards = cr->Boards();
332 for (Int_t j=0; j<boards->GetEntries(); j++)
334 TObject *o = boards->At(j);
338 Bool_t cdtion = kFALSE;
340 if (op.Contains("LOCAL")) cdtion = o->IsA() == AliMUONLocalTriggerBoard::Class();
341 if (op.Contains("REGIONAL")) cdtion = o->IsA() == AliMUONRegionalTriggerBoard::Class();
342 if (op.Contains("GLOBAL")) cdtion = o->IsA() == AliMUONGlobalTriggerBoard::Class();
344 if (!o || !cdtion) continue;
346 AliMUONLocalTriggerBoard *board = (AliMUONLocalTriggerBoard*)o;
353 //___________________________________________
354 void AliMUONTriggerElectronics::Reset()
359 AliMUONTriggerCrate* cr;
361 fCrates->FirstCrate();
363 while ( ( cr = fCrates->NextCrate() ) )
365 TObjArray *boards = cr->Boards();
367 for (Int_t j=0; j<boards->GetEntries(); j++)
369 AliMUONTriggerBoard *b = (AliMUONTriggerBoard*)boards->At(j);
376 //_______________________________________________________________________
377 void AliMUONTriggerElectronics::LoadMasks(AliMUONCalibrationData* calibData)
379 // LOAD MASKS FROM CDB
384 AliMUONTriggerCrate* cr;
386 fCrates->FirstCrate();
390 while ( ( cr = fCrates->NextCrate() ) )
392 TObjArray *boards = cr->Boards();
394 AliMUONRegionalTriggerBoard *regb =
395 (AliMUONRegionalTriggerBoard*)boards->At(0);
397 AliMUONVCalibParam* regionalBoardMasks = calibData->RegionalTriggerBoardMasks(irb);
399 for ( Int_t i = 0; i < regionalBoardMasks->Size(); ++i )
401 UShort_t rmask = static_cast<UShort_t>(regionalBoardMasks->ValueAsInt(i) & 0x3F);
405 for (Int_t j=1; j<boards->GetEntries(); j++)
407 AliMUONLocalTriggerBoard *b = (AliMUONLocalTriggerBoard*)boards->At(j);
409 Int_t cardNumber = b->GetNumber();
411 if (cardNumber) // interface board are not interested
413 AliMUONVCalibParam* localBoardMasks = calibData->LocalTriggerBoardMasks(cardNumber);
414 for ( Int_t i = 0; i < localBoardMasks->Size(); ++i )
416 UShort_t lmask = static_cast<UShort_t>(localBoardMasks->ValueAsInt(i) & 0xFFFF);
424 AliMUONVCalibParam* globalBoardMasks = calibData->GlobalTriggerBoardMasks();
425 for ( Int_t i = 0; i < globalBoardMasks->Size(); ++i )
427 UShort_t gmask = static_cast<UShort_t>(globalBoardMasks->ValueAsInt(i) & 0xFFF);
428 fGlobalTriggerBoard->Mask(i,gmask);
433 //___________________________________________
434 void AliMUONTriggerElectronics::LocalResponse()
444 crate[0].name = "2R"; crate[0].ns = 1; crate[0].slots[0] = 16;
445 crate[1].name = "2L"; crate[1].ns = 1; crate[1].slots[0] = 16;
446 crate[2].name = "3L"; crate[2].ns = 1; crate[2].slots[0] = 16;
447 crate[3].name = "3R"; crate[3].ns = 1; crate[3].slots[0] = 16;
448 crate[4].name = "2-3R"; crate[4].ns = 2; crate[4].slots[0] = 1; crate[4].slots[1] = 9;
449 crate[5].name = "2-3L"; crate[5].ns = 2; crate[5].slots[0] = 1; crate[5].slots[1] = 9;
451 AliMUONTriggerCrate* cr;
453 fCrates->FirstCrate();
455 while ( ( cr = fCrates->NextCrate() ) )
459 for (Int_t icr=0; icr<6; icr++)
461 const char *n = (crate[icr].name).Data();
463 AliMUONTriggerCrate *dcr = fCrates->Crate(n);
465 // THIS CRATE CONTAINS AN INTERFACE BOARD
466 if ( dcr && !strcmp(cr->GetName(),dcr->GetName()) ) iib = icr;
469 TObjArray *boards = cr->Boards();
471 AliMUONRegionalTriggerBoard *regb = (AliMUONRegionalTriggerBoard*)boards->At(0);
473 UShort_t thisl[16]; for (Int_t j=0; j<16; j++) thisl[j] = 0;
475 for (Int_t j=1; j<boards->GetEntries(); j++)
477 TObject *o = boards->At(j);
481 AliMUONLocalTriggerBoard *board = (AliMUONLocalTriggerBoard*)o;
487 UShort_t tmp = board->GetResponse();
489 // CRATE CONTAINING INTERFACE BOARD
492 for (Int_t iid = 0; iid<crate[iib].ns; iid++)
494 if ( j == crate[iib].slots[iid] )
497 AliWarning(Form("Interface board %s in slot %d of crate %s has a non zero response",
498 board->GetName(),j,cr->GetName()));
507 regb->SetLocalResponse(thisl);
511 //___________________________________________
512 void AliMUONTriggerElectronics::RegionalResponse()
514 /// Compute the response for all regional cards.
515 AliMUONTriggerCrate* cr;
517 fCrates->FirstCrate();
519 while ( ( cr = fCrates->NextCrate() ) )
521 TObjArray *boards = cr->Boards();
523 AliMUONRegionalTriggerBoard *regb = (AliMUONRegionalTriggerBoard*)boards->At(0);
532 //___________________________________________
533 void AliMUONTriggerElectronics::GlobalResponse()
535 /// Compute the global response
537 UShort_t regional[16];
539 AliMUONTriggerCrate* cr;
541 fCrates->FirstCrate();
544 if ( !fCrates->NumberOfCrates() >= 16 )
546 AliFatal(Form("Something is wrong : too many crates %d",
547 fCrates->NumberOfCrates()));
550 while ( ( cr = fCrates->NextCrate() ) )
552 AliMUONTriggerBoard* rb =
553 static_cast<AliMUONTriggerBoard*>(cr->Boards()->At(0));
554 regional[irb] = rb->GetResponse();
558 fGlobalTriggerBoard->SetRegionalResponse(regional);
559 fGlobalTriggerBoard->Response();
562 //___________________________________________
563 void AliMUONTriggerElectronics::BoardName(Int_t ix, Int_t iy, char *name)
565 //* BOARD NAME FROM PAD INFO (OLD MAPPING)
567 TString s = (ix>0) ? "R" : "L";
569 Int_t board = iy / 16, bid[4] = {12,34,56,78};
573 Int_t line = ix / 10, column = ix - 10 * line;
575 // old scheme: line==1 is line==9
576 line -= 9; line = TMath::Abs(line); line++;
578 sprintf(name,"%sC%dL%dB%d", s.Data(), column, line, bid[board]);
580 AliDebug(3, Form("Strip ( %d , %d ) connected to board %s ", ix, iy, name));
583 //___________________________________________
584 void AliMUONTriggerElectronics::BuildName(Int_t icirc, char name[20])
586 //* GET BOARD NAME FROM OLD NUMBERING
588 const Int_t kCircuitId[234] =
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,
599 -111, -121, -131, -141, -151, -161, -171,
600 -211, -212, -221, -222, -231, -232, -241, -242, -251, -252, -261, -262, -271,
601 -311, -312, -321, -322, -331, -332, -341, -342, -351, -352, -361, -362, -371,
602 -411, -412, -413, -421, -422, -423, -424, -431, -432, -433, -434, -441, -442, -451, -452, -461, -462, -471,
603 -521, -522, -523, -524, -531, -532, -533, -534, -541, -542, -551, -552, -561, -562, -571,
604 -611, -612, -613, -621, -622, -623, -624, -631, -632, -633, -634, -641, -642, -651, -652, -661, -662, -671,
605 -711, -712, -721, -722, -731, -732, -741, -742, -751, -752, -761, -762, -771,
606 -811, -812, -821, -822, -831, -832, -841, -842, -851, -852, -861, -862, -871,
607 -911, -921, -931, -941, -951, -961, -971
610 Int_t b[4] = {12, 34, 56, 78};
612 Int_t code = TMath::Abs(kCircuitId[icirc]);
614 Int_t lL = code / 100;
616 Int_t cC = ( code - 100 * lL ) / 10;
618 Int_t bB = code - 100 * lL - 10 * cC;
620 const char *side = (kCircuitId[icirc]>0) ? "R" : "L";
623 lL -= 9; lL = abs(lL); lL++;
625 sprintf(name,"%sC%dL%dB%d",side,cC,lL,b[bB-1]);
628 //_______________________________________________________________________
630 AliMUONTriggerElectronics::Exec(Option_t*)
637 //_______________________________________________________________________
638 void AliMUONTriggerElectronics::Trigger()
648 //_______________________________________________________________________
649 void AliMUONTriggerElectronics::Digits2Trigger()
651 /// Main method to go from digits to trigger decision
653 AliMUONRegionalTrigger *pRegTrig = new AliMUONRegionalTrigger();
657 fMUONData->ResetTrigger();
659 // RUN THE FULL BEE CHAIN
663 AliMUONTriggerCrate* cr;
665 fCrates->FirstCrate();
667 while ( ( cr = fCrates->NextCrate() ) )
669 TObjArray *boards = cr->Boards();
671 UInt_t regInpLpt = 0;
672 UInt_t regInpHpt = 0;
673 UShort_t localMask = 0x0;
675 AliMUONRegionalTriggerBoard *regBoard = (AliMUONRegionalTriggerBoard*)boards->At(0);
677 for (Int_t j = 1; j < boards->GetEntries(); j++)
679 TObject *o = boards->At(j);
683 AliMUONLocalTriggerBoard *board = (AliMUONLocalTriggerBoard*)o;
688 if (board->Triggered())
690 Int_t localtr[15] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,0};
692 Int_t icirc = board->GetNumber();
695 localtr[1] = board->GetStripX11();
696 localtr[2] = board->GetDev();
697 localtr[3] = board->GetStripY11();
700 UShort_t response = board->GetResponse();
701 localtr[4] = (response & 12) >> 2;
702 localtr[5] = (response & 48) >> 4;
703 localtr[6] = (response & 3);
705 // calculates regional inputs from local for the moment
706 UInt_t hPt = (response >> 4) & 0x3;
707 UInt_t lPt = (response >> 2) & 0x3;
709 regInpHpt |= hPt << (30 - (j-1)*2);
710 regInpLpt |= lPt << (30 - (j-1)*2);
711 localMask |= (0x1 << (j-1)); // local mask
715 rrr.Set(6,&response);
718 localtr[7] = board->GetXY(0,0);
719 localtr[8] = board->GetXY(0,1);
720 localtr[9] = board->GetXY(0,2);
721 localtr[10] = board->GetXY(0,3);
723 localtr[11] = board->GetXY(1,0);
724 localtr[12] = board->GetXY(1,1);
725 localtr[13] = board->GetXY(1,2);
726 localtr[14] = board->GetXY(1,3);
728 // ADD A NEW LOCAL TRIGGER
729 AliMUONLocalTrigger *pLocTrig = new AliMUONLocalTrigger(localtr, fDigitNumbers[icirc]);
731 fMUONData->AddLocalTrigger(*pLocTrig);
736 pRegTrig->SetLocalOutput(regInpLpt, 0);
737 pRegTrig->SetLocalOutput(regInpHpt, 1);
738 pRegTrig->SetLocalMask(localMask);
739 pRegTrig->SetOutput((regBoard->GetResponse() >> 4) & 0xF); // to be uniformized (oct06 ?)
741 fMUONData->AddRegionalTrigger(*pRegTrig);
746 // GLOBAL TRIGGER INFORMATION: [0] -> LOW PT
749 Int_t globalSinglePlus[3], globalSingleMinus[3], globalSingleUndef[3];
750 Int_t globalPairUnlike[3], globalPairLike[3];
752 UShort_t global = fGlobalTriggerBoard->GetResponse();
754 globalPairUnlike[0] = (global & 16) >> 4;
755 globalPairUnlike[1] = (global & 256) >> 8;
756 globalPairUnlike[2] = (global & 1);
758 globalPairLike[0] = (global & 32) >> 5;
759 globalPairLike[1] = (global & 512) >> 9;
760 globalPairLike[2] = (global & 2) >> 1;
762 globalSinglePlus[0] = ((global & 192) >> 6) == 2;
763 globalSinglePlus[1] = ((global & 3072) >> 10) == 2;
764 globalSinglePlus[2] = ((global & 12) >> 2) == 2;
766 globalSingleMinus[0] = ((global & 192) >> 6) == 1;
767 globalSingleMinus[1] = ((global & 3072) >> 10) == 1;
768 globalSingleMinus[2] = ((global & 12) >> 2) == 1;
770 globalSingleUndef[0] = ((global & 192) >> 6) == 3;
771 globalSingleUndef[1] = ((global & 3072) >> 10) == 3;
772 globalSingleUndef[2] = ((global & 12) >> 2) == 3;
774 AliMUONGlobalTrigger *pGloTrig = new AliMUONGlobalTrigger(globalSinglePlus, globalSingleMinus,
775 globalSingleUndef, globalPairUnlike,
778 // ADD A LOCAL TRIGGER IN THE LIST
779 fMUONData->AddGlobalTrigger(*pGloTrig);
782 // NOW RESET ELECTRONICS
786 //_______________________________________________________________________
787 void AliMUONTriggerElectronics::ClearDigitNumbers()
789 // RESET fDigitNumbers
790 for (Int_t i=0; i<AliMUONConstants::NTriggerCircuit(); i++) fDigitNumbers[i].Set(0);
793 //_______________________________________________________________________
794 void AliMUONTriggerElectronics::DigitFiredCircuit(Int_t circuit, Int_t cathode,
795 Int_t chamber, Int_t digit)
797 // REGISTERS THAT THE SPECIFIED DIGIT FIRED THE SPECIFIED CIRCUIT
798 // THIS DIGIT GETS ADDED TO AN ARRAY WHICH WILL BE COPIED TO
799 // AliMUONLocalTrigger WHEN SUCH AN OBJECT IS CREATED FOR EACH CIRCUIT
800 Int_t digitnumber = AliMUONLocalTrigger::EncodeDigitNumber(chamber, cathode, digit);
801 Int_t last = fDigitNumbers[circuit].GetSize();
802 fDigitNumbers[circuit].Set(last + 1);
803 fDigitNumbers[circuit][last] = digitnumber;