X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONPayloadTrigger.cxx;h=6a6b1a37ab91e7831f60701da0a03504c4232f96;hb=542e9a388e60e7b3a7ee53bc3ad4118c0463c8d1;hp=e40ec1e5711839822d849cb6edd6087ee8c52621;hpb=18d3ded7575ac097149249d9102481891a4a3506;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONPayloadTrigger.cxx b/MUON/AliMUONPayloadTrigger.cxx index e40ec1e5711..6a6b1a37ab9 100644 --- a/MUON/AliMUONPayloadTrigger.cxx +++ b/MUON/AliMUONPayloadTrigger.cxx @@ -13,84 +13,73 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ +// $Id$ -/////////////////////////////////////////////////////////////////////////////// -/// +//----------------------------------------------------------------------------- +/// \class AliMUONPayloadTrigger /// Class Payload /// /// Decodes rawdata from buffer and stores in TClonesArray. /// /// First version implement for Trigger /// -/////////////////////////////////////////////////////////////////////////////// +/// \author Christian Finck +//----------------------------------------------------------------------------- #include "AliMUONPayloadTrigger.h" -#include "AliRawReader.h" -#include "AliRawDataHeader.h" -#include "AliLog.h" - #include "AliMUONDarcHeader.h" #include "AliMUONRegHeader.h" #include "AliMUONLocalStruct.h" #include "AliMUONDDLTrigger.h" +#include "AliMUONLogger.h" + +#include "AliLog.h" +/// \cond CLASSIMP ClassImp(AliMUONPayloadTrigger) +/// \endcond AliMUONPayloadTrigger::AliMUONPayloadTrigger() : TObject(), fMaxReg(8), - fMaxLoc(16) -{ - // - // create an object to read MUON raw digits - // Default ctor for monitoring purposes - // - - fDDLTrigger = new AliMUONDDLTrigger(); - fRegHeader = new AliMUONRegHeader(); - fLocalStruct = new AliMUONLocalStruct(); - -} - -//_________________________________________________________________ -AliMUONPayloadTrigger::AliMUONPayloadTrigger(const AliMUONPayloadTrigger& stream) : - TObject(stream) + fMaxLoc(16), + fDDLTrigger(new AliMUONDDLTrigger()), + fRegHeader(new AliMUONRegHeader()), + fLocalStruct(new AliMUONLocalStruct()), + fLog(new AliMUONLogger(1000)), + fDarcEoWErrors(0), + fGlobalEoWErrors(0), + fRegEoWErrors(0), + fLocalEoWErrors(0), + fWarnings(kTRUE), + fNofRegSet(kFALSE) { - // - // copy ctor - // - AliFatal("copy constructor not implemented"); -} + /// + /// create an object to read MUON raw digits + /// Default ctor for monitoring purposes + /// -//______________________________________________________________________ -AliMUONPayloadTrigger& AliMUONPayloadTrigger::operator = (const AliMUONPayloadTrigger& - /* stream */) -{ - // - // assignment operator - // - AliFatal("assignment operator not implemented"); - return *this; } //___________________________________ AliMUONPayloadTrigger::~AliMUONPayloadTrigger() { - // - // clean up - // + /// + /// clean up + /// delete fDDLTrigger; delete fLocalStruct; delete fRegHeader; + delete fLog; } //______________________________________________________ Bool_t AliMUONPayloadTrigger::Decode(UInt_t *buffer) { - // decode trigger DDL - // store only non-empty structures (TrigY ==0) + /// decode trigger DDL + /// store only notified cards // reading DDL for trigger @@ -107,20 +96,36 @@ Bool_t AliMUONPayloadTrigger::Decode(UInt_t *buffer) memcpy(darcHeader->GetHeader(), &buffer[index], (kDarcHeaderSize)*4); index += kDarcHeaderSize; - if(darcHeader->GetEventType() == 2) { - scalerEvent = kTRUE; - } else - scalerEvent = kFALSE; - + if (!fNofRegSet) // if regional board number not set, set it with darc type + { + // darc type vardorh + if (darcHeader->GetDarcType() == 4) + fMaxReg = 1; + + // darc type def. + if (darcHeader->GetDarcType() == 6) + fMaxReg = 8; + + if(darcHeader->GetEventType() == 0) { + scalerEvent = kTRUE; + } else + scalerEvent = kFALSE; + } + if(scalerEvent) { // 6 DARC scaler words memcpy(darcHeader->GetDarcScalers(), &buffer[index], darcHeader->GetDarcScalerLength()*4); index += darcHeader->GetDarcScalerLength(); } - if (buffer[index++] != darcHeader->GetEndOfDarc()) - AliWarning(Form("Wrong end of Darc word %x instead of %x\n",buffer[index-1], darcHeader->GetEndOfDarc())); + if (buffer[index++] != darcHeader->GetEndOfDarc()) { + const Char_t* msg = Form("Wrong end of Darc word %x instead of %x\n", + buffer[index-1], darcHeader->GetEndOfDarc()); + if (fWarnings) AliWarning(msg); + AddErrorMessage(msg); + fDarcEoWErrors++; + } // 4 words of global board input + Global board output memcpy(darcHeader->GetGlobalInput(), &buffer[index], (kGlobalHeaderSize)*4); index += kGlobalHeaderSize; @@ -131,9 +136,14 @@ Bool_t AliMUONPayloadTrigger::Decode(UInt_t *buffer) index += darcHeader->GetGlobalScalerLength(); } - if (buffer[index++] != darcHeader->GetEndOfGlobal()) - AliWarning(Form("Wrong end of Global word %x instead of %x\n",buffer[index-1], darcHeader->GetEndOfGlobal())); - + if (buffer[index++] != darcHeader->GetEndOfGlobal()) { + + const Char_t* msg = Form("Wrong end of Global word %x instead of %x\n", + buffer[index-1], darcHeader->GetEndOfGlobal()); + if (fWarnings) AliWarning(msg); + AddErrorMessage(msg); + fGlobalEoWErrors++; + } // 8 regional boards for (Int_t iReg = 0; iReg < fMaxReg; iReg++) { //loop over regeonal card @@ -147,9 +157,14 @@ Bool_t AliMUONPayloadTrigger::Decode(UInt_t *buffer) index += fRegHeader->GetScalerLength(); } - if (buffer[index++] != fRegHeader->GetEndOfReg()) - AliWarning(Form("Wrong end of Reg word %x instead of %x\n",buffer[index-1], fRegHeader->GetEndOfReg())); + if (buffer[index++] != fRegHeader->GetEndOfReg()) { + const Char_t* msg = Form("Wrong end of Regional word %x instead of %x\n", + buffer[index-1], fRegHeader->GetEndOfReg()); + if (fWarnings) AliWarning(msg); + AddErrorMessage(msg); + fRegEoWErrors++; + } // 16 local cards per regional board for (Int_t iLoc = 0; iLoc < fMaxLoc; iLoc++) { //loop over local card @@ -165,9 +180,19 @@ Bool_t AliMUONPayloadTrigger::Decode(UInt_t *buffer) index += fLocalStruct->GetScalerLength(); } - if (buffer[index++] != fLocalStruct->GetEndOfLocal()) - AliWarning(Form("Wrong end of local word %x instead of %x\n",buffer[index-1], fLocalStruct->GetEndOfLocal())); - + if (buffer[index++] != fLocalStruct->GetEndOfLocal()) { + + const Char_t* msg = Form("Wrong end of Local word %x instead of %x\n", + buffer[index-1], fLocalStruct->GetEndOfLocal()); + + if (fWarnings) AliWarning(msg); + AddErrorMessage(msg); + fLocalEoWErrors++; + } + // fill only if card notified + if (fLocalStruct->GetData(0) == fLocalStruct->GetDisableWord()) + continue; + fDDLTrigger->AddLocStruct(*fLocalStruct, iReg); } // local card loop @@ -181,25 +206,45 @@ Bool_t AliMUONPayloadTrigger::Decode(UInt_t *buffer) //______________________________________________________ void AliMUONPayloadTrigger::ResetDDL() { - // reseting TClonesArray - // after each DDL - // + /// reseting TClonesArray + /// after each DDL + /// AliMUONDarcHeader* darcHeader = fDDLTrigger->GetDarcHeader(); darcHeader->GetRegHeaderArray()->Delete(); + fDarcEoWErrors = 0; + fGlobalEoWErrors = 0; + fRegEoWErrors = 0; + fLocalEoWErrors = 0; } //______________________________________________________ void AliMUONPayloadTrigger::SetMaxReg(Int_t reg) { - // set regional card number + /// set regional card number if (reg > 8) reg = 8; - fMaxReg = reg; + fMaxReg = reg; + + fNofRegSet = kTRUE; } //______________________________________________________ void AliMUONPayloadTrigger::SetMaxLoc(Int_t loc) { - // set local card number + /// set local card number if (loc > 16) loc = 16; fMaxLoc = loc; } + +//______________________________________________________ +void AliMUONPayloadTrigger::AddErrorMessage(const Char_t* msg) +{ +/// adding message to logger + + TString tmp(msg); + + Int_t pos = tmp.First("\n"); + tmp[pos] = 0; + + fLog->Log(tmp.Data()); +} +