#include "AliMUONTriggerElectronics.h"
#include "AliMUONTriggerCrate.h"
#include "AliMUONTriggerCrateStore.h"
-#include "AliMUONConstants.h"
#include "AliMUONLocalTriggerBoard.h"
#include "AliMUONRegionalTriggerBoard.h"
#include "AliMUONGlobalTriggerBoard.h"
#include "AliMpSegmentation.h"
#include "AliMpVSegmentation.h"
+#include "AliMpCathodType.h"
#include "AliLog.h"
#include "AliLoader.h"
///
if (!fMUONData)
{
- AliFatal("NO MUON TRIGGER DATA");
+ AliWarning("NO MUON TRIGGER DATA");
}
SetDataSource();
// 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 = (Int_t)(mdig->Signal() + 0.5);
// APPLY CONDITION ON SOFT BACKGROUND
{
// mdig->Print();
- Int_t digitindex = digit;
Int_t detElemId = mdig->DetElemId();
Int_t cathode = mdig->Cathode();
const AliMpVSegmentation *seg =
- AliMpSegmentation::Instance()->GetMpSegmentation(detElemId,cathode);
+ AliMpSegmentation::Instance()
+ ->GetMpSegmentation(detElemId,AliMp::GetCathodType(cathode));
Int_t ix = mdig->PadX(), iy = mdig->PadY();
b->SetbitM(ibitxy,cathode,ichamber-10);
- DigitFiredCircuit(b->GetI(), cathode, ichamber, digitindex);
}
else
{
//_______________________________________________________________________
void AliMUONTriggerElectronics::LoadMasks(AliMUONCalibrationData* calibData)
{
- // LOAD MASKS FROM CDB
+ /// LOAD MASKS FROM CDB
// SET MASKS
{
/// Main method to go from digits to trigger decision
AliMUONRegionalTrigger *pRegTrig = new AliMUONRegionalTrigger();
- ClearDigitNumbers();
fMUONData->ResetTrigger();
// RUN THE FULL BEE CHAIN
Trigger();
// DumpOS();
AliMUONTriggerCrate* cr;
- fCrates->FirstCrate();
+
+ // stored in right order
+ // do not used iterator order
- while ( ( cr = fCrates->NextCrate() ) )
+ for (Int_t iSide = 0; iSide < 2; iSide++) // right & left side
{
- TObjArray *boards = cr->Boards();
+ for (Int_t iReg = 0; iReg < 8; iReg++) // 8 crates/regional boards for each side.
+ {
+ cr = fCrates->Crate(iSide, iReg);
+ TObjArray *boards = cr->Boards();
- UInt_t regInpLpt = 0;
- UInt_t regInpHpt = 0;
- UShort_t localMask = 0x0;
+ UInt_t regInpLpt = 0;
+ UInt_t regInpHpt = 0;
- AliMUONRegionalTriggerBoard *regBoard = (AliMUONRegionalTriggerBoard*)boards->At(0);
+ AliMUONRegionalTriggerBoard *regBoard = (AliMUONRegionalTriggerBoard*)boards->At(0);
- for (Int_t j = 1; j < boards->GetEntries(); j++)
- {
- TObject *o = boards->At(j);
+ for (Int_t j = 1; j < boards->GetEntries(); j++)
+ {
+ TObject *o = boards->At(j);
- if (!o) break;
+ if (!o) break;
- AliMUONLocalTriggerBoard *board = (AliMUONLocalTriggerBoard*)o;
+ AliMUONLocalTriggerBoard *board = (AliMUONLocalTriggerBoard*)o;
- if (board)
- {
- // L0 TRIGGER
- if (board->Triggered())
- {
+ if (board)
+ {
+ // L0 TRIGGER
+// pcrochet 181206: MOOD needs ALL boards
+// if (board->Triggered())
+// {
- Int_t icirc = board->GetNumber();
-
- fLocalTrigger->SetLoCircuit(icirc);
- fLocalTrigger->SetLoStripX(board->GetStripX11());
- fLocalTrigger->SetLoDev(board->GetDev());
- fLocalTrigger->SetLoStripY(board->GetStripY11());
+ Int_t icirc = board->GetNumber();
+ if (icirc != 0) { // pcrochet 181206: MOOD needs ALL boards
+
+ fLocalTrigger->SetLoCircuit(icirc);
+ fLocalTrigger->SetLoStripX(board->GetStripX11());
+ fLocalTrigger->SetLoDev(board->GetDev());
+ fLocalTrigger->SetLoSdev(board->GetSdev());
+ fLocalTrigger->SetLoTrigY(board->GetTrigY());
+ fLocalTrigger->SetLoStripY(board->GetStripY11());
- // SAVE LUT OUTPUT
- UShort_t response = board->GetResponse();
- fLocalTrigger->SetLoHpt((response & 12) >> 2);
- fLocalTrigger->SetLoLpt(response & 3);
-
- // calculates regional inputs from local for the moment
- UInt_t hPt = (response >> 4) & 0x3;
- UInt_t lPt = (response >> 2) & 0x3;
+ // SAVE LUT OUTPUT
+ UShort_t response = board->GetResponse();
+ fLocalTrigger->SetLoHpt((response & 12) >> 2);
+ fLocalTrigger->SetLoLpt(response & 3);
+
+ // calculates regional inputs from local for the moment
+ UInt_t hPt = (response >> 2) & 0x3;
+ UInt_t lPt = response & 0x3;
- regInpHpt |= hPt << (30 - (j-1)*2);
- regInpLpt |= lPt << (30 - (j-1)*2);
- localMask |= (0x1 << (j-1)); // local mask
+ regInpHpt |= hPt << (30 - (j-1)*2);
+ regInpLpt |= lPt << (30 - (j-1)*2);
- TBits rrr;
- rrr.Set(6,&response);
+ TBits rrr;
+ rrr.Set(6,&response);
- // SAVE BIT PATTERN
- fLocalTrigger->SetX1Pattern(board->GetXY(0,0));
- fLocalTrigger->SetX2Pattern(board->GetXY(0,1));
- fLocalTrigger->SetX3Pattern(board->GetXY(0,2));
- fLocalTrigger->SetX4Pattern(board->GetXY(0,3));
+ // SAVE BIT PATTERN
+ fLocalTrigger->SetX1Pattern(board->GetXY(0,0));
+ fLocalTrigger->SetX2Pattern(board->GetXY(0,1));
+ fLocalTrigger->SetX3Pattern(board->GetXY(0,2));
+ fLocalTrigger->SetX4Pattern(board->GetXY(0,3));
- fLocalTrigger->SetY1Pattern(board->GetXY(1,0));
- fLocalTrigger->SetY2Pattern(board->GetXY(1,1));
- fLocalTrigger->SetY3Pattern(board->GetXY(1,2));
- fLocalTrigger->SetY4Pattern(board->GetXY(1,3));
+ fLocalTrigger->SetY1Pattern(board->GetXY(1,0));
+ fLocalTrigger->SetY2Pattern(board->GetXY(1,1));
+ fLocalTrigger->SetY3Pattern(board->GetXY(1,2));
+ fLocalTrigger->SetY4Pattern(board->GetXY(1,3));
- fLocalTrigger->SetDigits(fDigitNumbers[icirc]);
-
- // ADD A NEW LOCAL TRIGGER
- fMUONData->AddLocalTrigger(*fLocalTrigger);
+ // ADD A NEW LOCAL TRIGGER
+ fMUONData->AddLocalTrigger(*fLocalTrigger);
- }
+ }
+ }
}
- }
- pRegTrig->SetLocalOutput(regInpLpt, 0);
- pRegTrig->SetLocalOutput(regInpHpt, 1);
- pRegTrig->SetLocalMask(localMask);
- pRegTrig->SetOutput((regBoard->GetResponse() >> 4) & 0xF); // to be uniformized (oct06 ?)
+ pRegTrig->SetId(iReg + 8*iSide);
+ pRegTrig->SetLocalOutput(regInpLpt, 0);
+ pRegTrig->SetLocalOutput(regInpHpt, 1);
+ pRegTrig->SetOutput(regBoard->GetResponse());
- fMUONData->AddRegionalTrigger(*pRegTrig);
-
+ fMUONData->AddRegionalTrigger(*pRegTrig);
+ }
}
delete pRegTrig;
Reset();
}
-//_______________________________________________________________________
-void AliMUONTriggerElectronics::ClearDigitNumbers()
-{
-// RESET fDigitNumbers
- for (Int_t i=0; i<AliMUONConstants::NTriggerCircuit(); i++) fDigitNumbers[i].Set(0);
-}
-
-//_______________________________________________________________________
-void AliMUONTriggerElectronics::DigitFiredCircuit(Int_t circuit, Int_t cathode,
- Int_t chamber, Int_t digit)
-{
-// REGISTERS THAT THE SPECIFIED DIGIT FIRED THE SPECIFIED CIRCUIT
-// THIS DIGIT GETS ADDED TO AN ARRAY WHICH WILL BE COPIED TO
-// AliMUONLocalTrigger WHEN SUCH AN OBJECT IS CREATED FOR EACH CIRCUIT
- Int_t digitnumber = AliMUONLocalTrigger::EncodeDigitNumber(chamber, cathode, digit);
- Int_t last = fDigitNumbers[circuit].GetSize();
- fDigitNumbers[circuit].Set(last + 1);
- fDigitNumbers[circuit][last] = digitnumber;
-}
-