//______________________________________________________
-Bool_t AliMUONPayloadTrigger::Decode(UInt_t *buffer)
+Bool_t AliMUONPayloadTrigger::Decode(UInt_t *buffer, Bool_t scalerEvent)
{
/// decode trigger DDL
/// store only notified cards
static Int_t kGlobalHeaderSize = darcHeader->GetGlobalHeaderLength();
static Int_t kDarcHeaderSize = darcHeader->GetDarcHeaderLength();
static Int_t kRegHeaderSize = fRegHeader->GetHeaderLength();
-
- Bool_t scalerEvent = kFALSE;
Int_t index = 0;
memcpy(darcHeader->GetHeader(), &buffer[index], (kDarcHeaderSize)*4);
index += kDarcHeaderSize;
-// if (!fNofRegSet) // if regional board number not set, set it with darc type
-// {
- // darc type vardorh
- if (darcHeader->GetDarcType() == 4)
+
+ // darc type vardorh
+ if (darcHeader->GetDarcType() == 4)
fMaxReg = 1;
- // darc type def.
- if (darcHeader->GetDarcType() == 6)
+ // darc type def.
+ if (darcHeader->GetDarcType() == 6)
fMaxReg = 8;
- if(darcHeader->GetEventType() == 0) {
- scalerEvent = kTRUE;
- } else
- scalerEvent = kFALSE;
-// }
-
-// overwrite the event type in case
-// the raw-data contents contradicts with the
-// the header
- if(scalerEvent &&
- (buffer[index] == darcHeader->GetEndOfDarc()) &&
- (buffer[index+darcHeader->GetDarcScalerLength()] != darcHeader->GetEndOfDarc())) {
- // obviously not a scaler event
- scalerEvent = kFALSE;
- AliWarning("Overriding the event type obtained from the Darc header to physics event!");
- }
- if(!scalerEvent &&
- (buffer[index] != darcHeader->GetEndOfDarc()) &&
- (buffer[index+darcHeader->GetDarcScalerLength()] == darcHeader->GetEndOfDarc())) {
- // obviously a scaler event
- scalerEvent = kTRUE;
- AliWarning("Overriding the event type obtained from the Darc header to software trigger event!");
- }
+ if(darcHeader->GetEventType() == scalerEvent)
+ if (fWarnings) AliWarning("Wrong event type obtained from the Darc header, take the one of CDH");
+
if(scalerEvent) {
// 6 DARC scaler words
/// Returns the next DDL present
assert( GetReader() != 0 );
+
Bool_t kFound(kFALSE);
Int_t totalDataWord = GetReader()->GetDataSize(); // in bytes
+ Bool_t scalerEvent = GetReader()->GetDataHeader()->GetL1TriggerMessage() & 0x1;
+
AliDebug(3, Form("DDL Number %d totalDataWord %d\n", fCurrentDDLIndex,
totalDataWord));
UInt_t *buffer = new UInt_t[totalDataWord/4];
-
+
if ( !GetReader()->ReadNext((UChar_t*)buffer, totalDataWord) )
{
// We have not actually been able to complete the loading of the new DDL so
fPayload->ResetDDL();
- Bool_t ok = fPayload->Decode(buffer);
+
+
+ Bool_t ok = fPayload->Decode(buffer, scalerEvent);
delete[] buffer;
Int_t totalDataWord = GetReader()->GetDataSize(); // in bytes
+ Bool_t scalerEvent = GetReader()->GetDataHeader()->GetL1TriggerMessage() & 0x1;
+
+
UInt_t *buffer = new UInt_t[totalDataWord/4];
// check not necessary yet, but for future developments
Swap(buffer, totalDataWord / sizeof(UInt_t)); // swap needed for mac power pc
#endif
- fPayload->Decode(buffer);
+ fPayload->Decode(buffer, scalerEvent);
fDDL++;
(kRegHeaderLength + kRegScalerLength +1))* 8 +
(kDarcHeaderLength + kDarcScalerLength +
kGlobalHeaderLength + kGlobalScalerLength + 2);
- if(fScalerEvent)
+ if(fScalerEvent) {
eventPhys = 0; //set to generate scaler events
-
+ fHeader->fWord2 |= 0x1; // set L1SwC bit on
+ }
if(fScalerEvent)
buffer = new Int_t [kScalerBufferSize];
else