#include "AliMUONVTriggerStore.h"
#include "AliCodeTimer.h"
+#include "AliMpCDB.h"
#include "AliMpDDLStore.h"
#include "AliMpDDL.h"
#include "AliMpRegionalTrigger.h"
fBlockHeader->SetDataKey(fBlockHeader->GetDefaultDataKey());
fDspHeader->SetDataKey(fDspHeader->GetDefaultDataKey());
+ // Load mapping
+ if ( ! fDDLStore ) {
+ if ( ! AliMpCDB::LoadDDLStore() ) {
+ AliFatal("Could not access mapping from OCDB !");
+ }
+ fDDLStore = AliMpDDLStore::Instance();
+ }
}
//__________________________________________________________________________
}
//____________________________________________________________________
-Int_t AliMUONRawWriter::Digits2Raw(AliMUONVDigitStore* digitStore,
- AliMUONVTriggerStore* triggerStore)
+Int_t AliMUONRawWriter::Digits2Raw(const AliMUONVDigitStore* digitStore,
+ const AliMUONVTriggerStore* triggerStore)
{
/// convert digits of the current event to raw data
- AliCodeTimerAuto("")
+ AliCodeTimerAuto("",0)
Int_t idDDL;
Char_t name[255];
if ( digitStore )
{
- AliCodeTimerAuto("for Tracker")
+ AliCodeTimerAuto("for Tracker",1)
- AliMpExMap busPatchMap(true);
+ AliMpExMap busPatchMap;
Int_t nDDLs = AliDAQ::NumberOfDdls("MUONTRK");
if ( triggerStore )
{
- AliCodeTimerAuto("for Trigger")
+ AliCodeTimerAuto("for Trigger",1)
// trigger chambers
{
/// Create bus patch structures corresponding to digits in the store
- AliCodeTimerAuto("")
+ AliCodeTimerAuto("",0)
static const Int_t kMAXADC = (1<<12)-1; // We code the charge on a 12 bits ADC.
UChar_t channelId = 0;
UShort_t charge = 0;
Int_t busPatchId = 0;
+ Int_t currentBusPatchId = -1;
UInt_t word;
+ AliMUONBusStruct* busStruct(0x0);
+
TIter next(digitStore.CreateTrackerIterator());
AliMUONVDigit* digit;
parity ^= ((word >> i) & 0x1);
}
AliBitPacking::PackWord((UInt_t)parity,word,31,31);
-
- AliMUONBusStruct* busStruct =
- static_cast<AliMUONBusStruct*>(busPatchMap.GetValue(busPatchId));
+
+ if ( currentBusPatchId != busPatchId )
+ {
+ busStruct =
+ static_cast<AliMUONBusStruct*>(busPatchMap.GetValue(busPatchId));
+ currentBusPatchId = busPatchId;
+ }
if (!busStruct)
{
// (((43 manus max per bus patch *64 channels + 4 bus patch words) * 5 bus patch
// + 10 dsp words)*5 dsps + 8 block words)*2 blocks
- AliCodeTimerAuto("")
+ AliCodeTimerAuto("",0)
if (fHeader == 0x0) {
AliError("Raw data header must be set");
{
/// Write trigger DDL
- AliCodeTimerAuto("")
+ AliCodeTimerAuto("",0)
if (fHeader == 0x0) {
AliError("Raw data header must be set");
}
Int_t gloTrigResp = gloTrg->GetGlobalResponse();
+ UInt_t *gloTrigInput = gloTrg->GetGlobalInput();
UInt_t word;
Int_t* buffer = 0;
index += kDarcHeaderLength;
// no global input for the moment....
- if (iDDL == 0)
- fDarcHeader->SetGlobalOutput(gloTrigResp);
- else
- fDarcHeader->SetGlobalOutput(0);
+ if (iDDL == 0) {
+ fDarcHeader->SetGlobalOutput(gloTrigResp);
+ for (Int_t ii = 0; ii < 4; ii++) {
+ fDarcHeader->SetGlobalInput(gloTrigInput[ii],ii);
+ }
+ } else {
+ fDarcHeader->SetGlobalOutput(0);
+ }
if (fScalerEvent) {
// 6 DARC scaler words
if (fScalerEvent) {
// 10 Global scaler words
- memcpy(fDarcHeader->GetGlobalScalers(), &buffer[index], kGlobalScalerLength*4);
+ memcpy(&buffer[index], fDarcHeader->GetGlobalScalers(), kGlobalScalerLength*4);
index += kGlobalScalerLength;
}
fRegHeader->SetDarcWord(word);
regOut = regTrg->GetOutput();
- regInpHpt = regTrg->GetLocalOutput(0);
- regInpLpt = regTrg->GetLocalOutput(1);
+ regInpLpt = regTrg->GetLocalOutput(0);
+ regInpHpt = regTrg->GetLocalOutput(1);
// fill darc word, not darc status for the moment (empty)
//see AliMUONRegHeader.h for details
AliBitPacking::PackWord((UInt_t)eventPhys,word,31,31);
- AliBitPacking::PackWord((UInt_t)serialNb,word,19,24);
- AliBitPacking::PackWord((UInt_t)version,word,7,14);
- AliBitPacking::PackWord((UInt_t)iReg,word,15,18);
+ AliBitPacking::PackWord((UInt_t)serialNb,word,20,25);
+ AliBitPacking::PackWord((UInt_t)version,word,8,15);
+ AliBitPacking::PackWord((UInt_t)crate->GetId(),word,16,19);
AliBitPacking::PackWord((UInt_t)regOut,word,0,7);
fRegHeader->SetWord(word);
} // local card
// fill regional header with local output
- fRegHeader->SetInput(regInpHpt, 0);
+ fRegHeader->SetInput(regInpLpt, 0);
fRegHeader->SetInput(regInpHpt, 1);
memcpy(&buffer[indexReg],fRegHeader->GetHeader(),kRegHeaderLength*4);