#include "AliMUONLocalStruct.h"
#include "AliMUONLocalTrigger.h"
#include "AliMUONLogger.h"
-#include "AliMUONRawStreamTracker.h"
#include "AliMUONRawStreamTrackerHP.h"
-#include "AliMUONRawStreamTrigger.h"
+#include "AliMUONRawStreamTriggerHP.h"
#include "AliMUONRegHeader.h"
#include "AliMUONTriggerCircuit.h"
#include "AliMUONVTriggerStore.h"
/// \endcond
//__________________________________________________________________________
-AliMUONDigitMaker::AliMUONDigitMaker(Bool_t enableErrorLogger, Bool_t useFastDecoder)
- : TObject(),
+AliMUONDigitMaker::AliMUONDigitMaker(Bool_t enableErrorLogger, Bool_t a, Bool_t b) :
+TObject(),
+fScalerEvent(kFALSE),
+fMakeTriggerDigits(kFALSE),
+fRawStreamTracker(new AliMUONRawStreamTrackerHP),
+fRawStreamTrigger(new AliMUONRawStreamTriggerHP),
+fDigitStore(0x0),
+fTriggerStore(0x0),
+fLogger(new AliMUONLogger(10000))
+{
+ /// ctor
+
+ if ( !a || !b ) AliFatal("no longer supported");
+
+ AliDebug(1,"");
+
+ // Standard Constructor
+ if (enableErrorLogger)
+ {
+ fRawStreamTracker->EnabbleErrorLogger();
+ fRawStreamTrigger->EnabbleErrorLogger();
+ }
+ else
+ {
+ fRawStreamTracker->DisableWarnings();
+ }
+
+ SetMakeTriggerDigits();
+
+}
+
+//__________________________________________________________________________
+AliMUONDigitMaker::AliMUONDigitMaker(Bool_t enableErrorLogger) :
+TObject(),
fScalerEvent(kFALSE),
fMakeTriggerDigits(kFALSE),
- fRawStreamTracker(NULL),
- fRawStreamTrigger(new AliMUONRawStreamTrigger()),
+ fRawStreamTracker(new AliMUONRawStreamTrackerHP),
+ fRawStreamTrigger(new AliMUONRawStreamTriggerHP),
fDigitStore(0x0),
fTriggerStore(0x0),
fLogger(new AliMUONLogger(10000))
AliDebug(1,"");
- CreateRawStreamTracker(useFastDecoder);
-
// Standard Constructor
- if (enableErrorLogger) {
+ if (enableErrorLogger)
+ {
fRawStreamTracker->EnabbleErrorLogger();
fRawStreamTrigger->EnabbleErrorLogger();
}
+ else
+ {
+ fRawStreamTracker->DisableWarnings();
+ }
SetMakeTriggerDigits();
delete fLogger;
}
-//__________________________________________________________________________
-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();
-}
-
//____________________________________________________________________
void
AliMUONDigitMaker::Print(Option_t*) const
AliDebug(1,"");
- AliCodeTimerAuto("");
+ AliCodeTimerAuto("",0);
// elex info
Int_t buspatchId;
fRawStreamTracker->SetReader(rawReader);
fRawStreamTracker->First();
- while ( fRawStreamTracker->Next(buspatchId,manuId,channelId,charge) )
+ while ( fRawStreamTracker->Next(buspatchId,manuId,channelId,charge,kTRUE) )
{
// getting DE from buspatch
Int_t detElemId = AliMpDDLStore::Instance()->GetDEfromBus(buspatchId);
AliMp::CathodType cathodeType = de->GetCathodType(seg->PlaneType());
- AliMpPad pad = seg->PadByLocation(AliMpIntPair(manuId,channelId),kFALSE);
+ AliMpPad pad = seg->PadByLocation(manuId,channelId,kFALSE);
if (!pad.IsValid())
{
continue;
}
- digit->SetPadXY(pad.GetIndices().GetFirst(),
- pad.GetIndices().GetSecond());
+ digit->SetPadXY(pad.GetIx(),pad.GetIy());
- digit->SetADC(charge);
+ digit->SetADC(charge);
}
Int_t
AliMUONDigitMaker::ReadTriggerDDL(AliRawReader* rawReader)
{
- /// reading tracker DDL
+ /// reading tracker DDL like ReadTriggerDDL but with fast decoder interface.
/// filling the fTriggerStore container, which must not be null
- AliDebug(1,"");
-
- AliMUONDDLTrigger* ddlTrigger = 0x0;
- AliMUONDarcHeader* darcHeader = 0x0;
- AliMUONRegHeader* regHeader = 0x0;
- AliMUONLocalStruct* localStruct = 0x0;
+ const AliMUONRawStreamTriggerHP::AliHeader* darcHeader = 0x0;
+ const AliMUONRawStreamTriggerHP::AliRegionalHeader* regHeader = 0x0;
+ const AliMUONRawStreamTriggerHP::AliLocalStruct* localStruct = 0x0;
Int_t loCircuit;
- AliCodeTimerAuto("");
-
fRawStreamTrigger->SetReader(rawReader);
- while (fRawStreamTrigger->NextDDL())
+ while (fRawStreamTrigger->NextDDL())
{
- ddlTrigger = fRawStreamTrigger->GetDDLTrigger();
- darcHeader = ddlTrigger->GetDarcHeader();
+ darcHeader = fRawStreamTrigger->GetHeaders();
// fill global trigger information
if (fTriggerStore)
{
AliMUONGlobalTrigger globalTrigger;
globalTrigger.SetFromGlobalResponse(darcHeader->GetGlobalOutput());
+ globalTrigger.SetFromGlobalInput(darcHeader->GetGlobalHeader()->fInput);
fTriggerStore->SetGlobal(globalTrigger);
}
}
- Int_t nReg = darcHeader->GetRegHeaderEntries();
+ Int_t nReg = fRawStreamTrigger->GetRegionalHeaderCount();
for(Int_t iReg = 0; iReg < nReg ;iReg++)
{ //reg loop
fLogger->Log(Form("Missing crate number %d in DDL %d\n", iReg, fRawStreamTrigger->GetDDL()));
- regHeader = darcHeader->GetRegHeaderEntry(iReg);
+ regHeader = fRawStreamTrigger->GetRegionalHeader(iReg);
- Int_t nLocal = regHeader->GetLocalEntries();
+ Int_t nLocal = regHeader->GetLocalStructCount();
for(Int_t iLocal = 0; iLocal < nLocal; iLocal++)
- {
+ {
- localStruct = regHeader->GetLocalEntry(iLocal);
+ localStruct = regHeader->GetLocalStruct(iLocal);
// if card exist
if (localStruct) {
if ( !loCircuit ) continue; // empty slot
- AliMpLocalBoard* localBoard = AliMpDDLStore::Instance()->GetLocalBoard(loCircuit, false);
+ AliMpLocalBoard* localBoard = AliMpDDLStore::Instance()->GetLocalBoard(loCircuit, kTRUE);
// skip copy cards
if( !localBoard->IsNotified())
continue;
- if (fTriggerStore)
+ if (fTriggerStore)
{
// fill local trigger
AliMUONLocalTrigger localTrigger;
- localTrigger.SetLocalStruct(loCircuit, *localStruct);
+ localTrigger.SetLocalStruct(loCircuit, *localStruct);
fTriggerStore->Add(localTrigger);
- }
+ }
if ( fMakeTriggerDigits )
{
localStruct->GetYPattern(xyPattern[1]);
TriggerDigits(loCircuit, xyPattern, *fDigitStore);
- }
+ }
} // if triggerY
} // iLocal
} // iReg
{
/// make digits for trigger from pattern, and add them to digitStore
- AliCodeTimerAuto("");
+ AliCodeTimerAuto("",0);
Int_t detElemId;
Int_t offset = 0;
if (iCath && localBoard->GetSwitch(6)) offset = -8;
- AliMpPad pad = seg->PadByLocation(AliMpIntPair(nBoard,ibitxy+offset),kTRUE);
+ AliMpPad pad = seg->PadByLocation(nBoard,ibitxy+offset,kTRUE);
if (!pad.IsValid())
{
continue;
}
- n = pad.GetLocation(0).GetFirst(); // always take first location so that digits are not inserted several times
- b = pad.GetLocation(0).GetSecond();
+ n = pad.GetLocalBoardId(0); // always take first location so that digits are not inserted several times
+ b = pad.GetLocalBoardChannel(0);
AliDebug(1,Form("Using localBoard %d ixy %d instead of %d,%d",
n,b,nBoard,ibitxy));
continue;
}
- Int_t padX = pad.GetIndices().GetFirst();
- Int_t padY = pad.GetIndices().GetSecond();
+ Int_t padX = pad.GetIx();
+ Int_t padY = pad.GetIy();
// fill digit
digit->SetPadXY(padX,padY);
} // ichamber
return kTRUE;
-}
+}
-//____________________________________________________________________
-void AliMUONDigitMaker::SetFastDecoder(Bool_t useFastDecoder)
+//______________________________________________________________________________
+Bool_t
+AliMUONDigitMaker::TriggerToDigitsStore(const AliMUONVTriggerStore& triggerStore,
+ AliMUONVDigitStore& digitStore) const
{
-/// Set fast raw data decoder
-
- delete fRawStreamTracker;
- CreateRawStreamTracker(useFastDecoder);
-}
+ //
+ /// make (S)Digit for trigger
+ //
-
-
+ digitStore.Clear();
+
+ AliMUONLocalTrigger* locTrg;
+ TIter next(triggerStore.CreateLocalIterator());
+
+ while ( ( locTrg = static_cast<AliMUONLocalTrigger*>(next()) ) )
+ {
+ if (locTrg->IsNull()) continue;
+
+ TArrayS xyPattern[2];
+ locTrg->GetXPattern(xyPattern[0]);
+ locTrg->GetYPattern(xyPattern[1]);
+
+ Int_t nBoard = locTrg->LoCircuit();
+ TriggerDigits(nBoard, xyPattern, digitStore);
+ }
+ return kTRUE;
+}