* provided "as is" without express or implied warranty. *
**************************************************************************/
+// $Id$
+
+//-----------------------------------------------------------------------------
/// \class AliMUONDigitMaker
/// MUON Digit maker from rawdata.
///
/// and for trigger. Create trigger inverse mapping.
///
/// \author Ch. Finck, oct 06
+//-----------------------------------------------------------------------------
#include "AliMUONDigitMaker.h"
#include "AliMUONGlobalTrigger.h"
#include "AliMUONLocalStruct.h"
#include "AliMUONLocalTrigger.h"
-#include "AliMUONLocalTriggerBoard.h"
#include "AliMUONRawStreamTracker.h"
+#include "AliMUONRawStreamTrackerHP.h"
#include "AliMUONRawStreamTrigger.h"
#include "AliMUONRegHeader.h"
#include "AliMUONTriggerCircuit.h"
-#include "AliMUONTriggerCrate.h"
-#include "AliMUONTriggerCrateStore.h"
+#include "AliMpTriggerCrate.h"
+#include "AliMpLocalBoard.h"
#include "AliMUONVTriggerStore.h"
#include "AliMpCathodType.h"
#include "AliMpDDLStore.h"
/// \endcond
//__________________________________________________________________________
-AliMUONDigitMaker::AliMUONDigitMaker()
+AliMUONDigitMaker::AliMUONDigitMaker(Bool_t enableErrorLogger, Bool_t useFastDecoder)
: TObject(),
fScalerEvent(kFALSE),
fMakeTriggerDigits(kFALSE),
- fRawStreamTracker(new AliMUONRawStreamTracker()),
+ fRawStreamTracker(NULL),
fRawStreamTrigger(new AliMUONRawStreamTrigger()),
- fCrateManager(0x0),
fTrackerTimer(),
fTriggerTimer(),
fMappingTimer(),
/// ctor
AliDebug(1,"");
+
+ CreateRawStreamTracker(useFastDecoder);
// Standard Constructor
+ if (enableErrorLogger) {
+ fRawStreamTracker->EnabbleErrorLogger();
+ fRawStreamTrigger->EnabbleErrorLogger();
+ }
fTrackerTimer.Start(kTRUE); fTrackerTimer.Stop();
fTriggerTimer.Start(kTRUE); fTriggerTimer.Stop();
}
+//__________________________________________________________________________
+void AliMUONDigitMaker::CreateRawStreamTracker(Bool_t useFastDecoder)
+{
+/// Create raw stream tracker according to the passed option
+
+ if (useFastDecoder)
+ {
+ AliInfo("Using fast decoder.");
+ fRawStreamTracker = new AliMUONRawStreamTrackerHP();
+ }
+ else
+ fRawStreamTracker = new AliMUONRawStreamTracker();
+}
+
//____________________________________________________________________
Int_t AliMUONDigitMaker::Raw2Digits(AliRawReader* rawReader,
AliMUONVDigitStore* digitStore,
for(Int_t iReg = 0; iReg < nReg ;iReg++)
{ //reg loop
- // crate info
- if (!fCrateManager) AliFatal("Crate Store not defined");
- AliMUONTriggerCrate* crate = fCrateManager->Crate(fRawStreamTrigger->GetDDL(), iReg);
+
+ // crate info
+ AliMpTriggerCrate* crate = AliMpDDLStore::Instance()->
+ GetTriggerCrate(fRawStreamTrigger->GetDDL(), iReg);
if (!crate)
AliWarning(Form("Missing crate number %d in DDL %d\n", iReg, fRawStreamTrigger->GetDDL()));
-
- TObjArray *boards = crate->Boards();
+
regHeader = darcHeader->GetRegHeaderEntry(iReg);
// if card exist
if (localStruct) {
- AliMUONLocalTriggerBoard* localBoard =
- (AliMUONLocalTriggerBoard*)boards->At(localStruct->GetId()+1);
-
- // skip copy cards
- if( !(loCircuit = localBoard->GetNumber()) )
- continue;
+ loCircuit = crate->GetLocalBoardId(localStruct->GetId());
+
+ if ( !loCircuit ) continue; // empty slot
+
+ AliMpLocalBoard* localBoard = AliMpDDLStore::Instance()->GetLocalBoard(loCircuit, false);
+
+ // skip copy cards
+ if( !localBoard->IsNotified())
+ continue;
if (fTriggerStore)
{
{
//FIXEME should find something better than a TArray
TArrayS xyPattern[2];
- xyPattern[0].Set(4);
- xyPattern[1].Set(4);
-
- xyPattern[0].AddAt(localStruct->GetX1(),0);
- xyPattern[0].AddAt(localStruct->GetX2(),1);
- xyPattern[0].AddAt(localStruct->GetX3(),2);
- xyPattern[0].AddAt(localStruct->GetX4(),3);
- xyPattern[1].AddAt(localStruct->GetY1(),0);
- xyPattern[1].AddAt(localStruct->GetY2(),1);
- xyPattern[1].AddAt(localStruct->GetY3(),2);
- xyPattern[1].AddAt(localStruct->GetY4(),3);
+ localStruct->GetXPattern(xyPattern[0]);
+ localStruct->GetYPattern(xyPattern[1]);
TriggerDigits(loCircuit, xyPattern, *fDigitStore);
}
{
/// make digits for trigger from pattern, and add them to digitStore
+ Int_t detElemId;
+
+ AliMpLocalBoard* localBoard = AliMpDDLStore::Instance()->GetLocalBoard(nBoard);
+
+ Int_t n,b;
+
// loop over x1-4 and y1-4
for (Int_t iChamber = 0; iChamber < 4; ++iChamber)
{
if (!pattern) continue;
// get detElemId
- AliMUONTriggerCircuit triggerCircuit;
- AliMUONLocalTriggerBoard* localBoard = fCrateManager->LocalBoard(nBoard);
- Int_t detElemId = triggerCircuit.DetElemId(iChamber+10, localBoard->GetName());//FIXME +/-10 (should be ok with new mapping)
+ detElemId = AliMpDDLStore::Instance()->GetDEfromLocalBoard(nBoard, iChamber);
const AliMpVSegmentation* seg
= AliMpSegmentation::Instance()
detElemId, nBoard, ibitxy));
continue;
}
-
- AliMUONVDigit* digit = digitStore.Add(detElemId,nBoard,ibitxy,iCath,AliMUONVDigitStore::kDeny);
+
+ n = pad.GetLocation(0).GetFirst(); // always take first location so that digits are not inserted several times
+ b = pad.GetLocation(0).GetSecond();
+
+ AliDebug(1,Form("Using localBoard %d ixy %d instead of %d,%d",
+ n,b,nBoard,ibitxy));
+
+ AliMUONVDigit* digit = digitStore.Add(detElemId,n,b,iCath,AliMUONVDigitStore::kDeny);
if (!digit)
{
- AliError(Form("Could not add digit DE %04d LocalBoard %03d ibitxy %02d cath %d",
- detElemId,nBoard,ibitxy,iCath));
- continue;
+ AliDebug(1, Form("Digit DE %04d LocalBoard %03d ibitxy %02d cath %d already in store",
+ detElemId,nBoard,ibitxy,iCath));
+ continue;
}
Int_t padX = pad.GetIndices().GetFirst();
return kTRUE;
}
+
//____________________________________________________________________
-void
-AliMUONDigitMaker::GetCrateName(Char_t* name, Int_t iDDL, Int_t iReg) const
+void AliMUONDigitMaker::SetFastDecoder(Bool_t useFastDecoder)
{
- /// set crate name from DDL & reg number
- /// method same as in RawWriter, not so nice
- /// should be put in AliMUONTriggerCrateStore
-
- switch(iReg) {
- case 0:
- case 1:
- sprintf(name,"%d", iReg+1);
- break;
- case 2:
- strcpy(name, "2-3");
- break;
- case 3:
- case 4:
- case 5:
- case 6:
- case 7:
- sprintf(name,"%d", iReg);
- break;
- }
+/// Set fast raw data decoder
+
+ delete fRawStreamTracker;
+ CreateRawStreamTracker(useFastDecoder);
+}
+
+
- // crate Right for first DDL
- if (iDDL == 0)
- strcat(name, "R");
- else
- strcat(name, "L");
-}