X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONDigitMaker.cxx;h=0d78f303138698642c9e227a3a536b9fbd7d134a;hb=644edbedbfa94ec740954c2dfc6be4eb9b055d24;hp=b97c1240f0239a9b7c4a80cee6a17e368318dd7d;hpb=70d92702ce82b1d6e1e9b62ec50a0a811852bb7f;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONDigitMaker.cxx b/MUON/AliMUONDigitMaker.cxx index b97c1240f02..0d78f303138 100644 --- a/MUON/AliMUONDigitMaker.cxx +++ b/MUON/AliMUONDigitMaker.cxx @@ -55,8 +55,8 @@ #include "AliMUONRawStreamTrackerHP.h" #include "AliMUONRawStreamTriggerHP.h" #include "AliMUONRegHeader.h" -#include "AliMUONTriggerCircuit.h" #include "AliMUONVTriggerStore.h" +#include "AliMpCDB.h" #include "AliMpDetElement.h" #include "AliMpTriggerCrate.h" #include "AliMpLocalBoard.h" @@ -71,6 +71,8 @@ #include "AliRawReader.h" #include +using std::endl; +using std::cout; /// \cond CLASSIMP ClassImp(AliMUONDigitMaker) // Class implementation in ROOT context /// \endcond @@ -84,8 +86,7 @@ fRawStreamTracker(new AliMUONRawStreamTrackerHP), fRawStreamTrigger(new AliMUONRawStreamTriggerHP), fDigitStore(0x0), fTriggerStore(0x0), -fLogger(new AliMUONLogger(10000)) -{ +fLogger(new AliMUONLogger(10000)){ /// ctor if ( !a || !b ) AliFatal("no longer supported"); @@ -105,6 +106,10 @@ fLogger(new AliMUONLogger(10000)) SetMakeTriggerDigits(); + // Load mapping + if ( ! AliMpCDB::LoadDDLStore() ) { + AliFatal("Could not access mapping from OCDB !"); + } } //__________________________________________________________________________ @@ -135,6 +140,10 @@ TObject(), SetMakeTriggerDigits(); + // Load mapping + if ( ! AliMpCDB::LoadDDLStore() ) { + AliFatal("Could not access mapping from OCDB !"); + } } //__________________________________________________________________________ @@ -219,7 +228,7 @@ AliMUONDigitMaker::ReadTrackerDDL(AliRawReader* rawReader) AliDebug(1,""); - AliCodeTimerAuto("",); + AliCodeTimerAuto("",0); // elex info Int_t buspatchId; @@ -239,7 +248,7 @@ AliMUONDigitMaker::ReadTrackerDDL(AliRawReader* rawReader) if (!de) { - fLogger->Log(Form("DE %04d does not exist !")); + fLogger->Log(Form("DE %04d does not exist !", detElemId)); continue; } @@ -335,9 +344,10 @@ AliMUONDigitMaker::ReadTriggerDDL(AliRawReader* rawReader) AliMpTriggerCrate* crate = AliMpDDLStore::Instance()-> GetTriggerCrate(fRawStreamTrigger->GetDDL(), iReg); - if (!crate) + if (!crate) { fLogger->Log(Form("Missing crate number %d in DDL %d\n", iReg, fRawStreamTrigger->GetDDL())); - + continue; + } regHeader = fRawStreamTrigger->GetRegionalHeader(iReg); @@ -350,36 +360,16 @@ AliMUONDigitMaker::ReadTriggerDDL(AliRawReader* rawReader) // if card exist if (localStruct) { - loCircuit = crate->GetLocalBoardId(localStruct->GetId()); - - if ( !loCircuit ) continue; // empty slot - - AliMpLocalBoard* localBoard = AliMpDDLStore::Instance()->GetLocalBoard(loCircuit, kTRUE); - - // skip copy cards - if( !localBoard->IsNotified()) - continue; + loCircuit = crate->GetLocalBoardId(localStruct->GetId()); + + if ( !loCircuit ) continue; // empty slot + if (fTriggerStore) { // fill local trigger AliMUONLocalTrigger localTrigger; - localTrigger.SetLoCircuit(loCircuit); - localTrigger.SetLoStripX((Int_t)localStruct->GetXPos()); - localTrigger.SetLoStripY((Int_t)localStruct->GetYPos()); - localTrigger.SetLoDev((Int_t)localStruct->GetXDev()); - localTrigger.SetLoSdev((Int_t)localStruct->GetSXDev()); - localTrigger.SetLoTrigY((Int_t)localStruct->GetTrigY()); - localTrigger.SetLoLpt(localStruct->GetLpt()); - localTrigger.SetLoHpt(localStruct->GetHpt()); - localTrigger.SetX1Pattern(localStruct->GetX1()); - localTrigger.SetX2Pattern(localStruct->GetX2()); - localTrigger.SetX3Pattern(localStruct->GetX3()); - localTrigger.SetX4Pattern(localStruct->GetX4()); - localTrigger.SetY1Pattern(localStruct->GetY1()); - localTrigger.SetY2Pattern(localStruct->GetY2()); - localTrigger.SetY3Pattern(localStruct->GetY3()); - localTrigger.SetY4Pattern(localStruct->GetY4()); + localTrigger.SetLocalStruct(loCircuit, *localStruct); fTriggerStore->Add(localTrigger); } @@ -388,8 +378,8 @@ AliMUONDigitMaker::ReadTriggerDDL(AliRawReader* rawReader) //FIXEME should find something better than a TArray TArrayS xyPattern[2]; - localStruct->GetXPattern(xyPattern[0]); - localStruct->GetYPattern(xyPattern[1]); + localStruct->GetXPattern(xyPattern[0]); + localStruct->GetYPattern(xyPattern[1]); TriggerDigits(loCircuit, xyPattern, *fDigitStore); } @@ -403,16 +393,23 @@ AliMUONDigitMaker::ReadTriggerDDL(AliRawReader* rawReader) //____________________________________________________________________ Int_t AliMUONDigitMaker::TriggerDigits(Int_t nBoard, - TArrayS* xyPattern, - AliMUONVDigitStore& digitStore) const + const TArrayS* xyPattern, + AliMUONVDigitStore& digitStore, Bool_t warn) const { /// make digits for trigger from pattern, and add them to digitStore - AliCodeTimerAuto("",); + AliCodeTimerAuto("",0); Int_t detElemId; AliMpLocalBoard* localBoard = AliMpDDLStore::Instance()->GetLocalBoard(nBoard); + + if ( ! localBoard->IsNotified() ) { + // Copy board + // The mapping is not correct for copy boards + // Use the one of corresponding phyiscal board + nBoard = localBoard->GetInputXfrom(); + } Int_t n,b; @@ -438,9 +435,9 @@ Int_t AliMUONDigitMaker::TriggerDigits(Int_t nBoard, { // not quite sure about this Int_t offset = 0; - if (iCath && localBoard->GetSwitch(6)) offset = -8; + if (iCath && localBoard->GetSwitch(AliMpLocalBoard::kZeroAllYLSB)) offset = -8; - AliMpPad pad = seg->PadByLocation(nBoard,ibitxy+offset,kTRUE); + AliMpPad pad = seg->PadByLocation(nBoard,ibitxy+offset,warn); if (!pad.IsValid()) { @@ -505,3 +502,12 @@ AliMUONDigitMaker::TriggerToDigitsStore(const AliMUONVTriggerStore& triggerStore } return kTRUE; } + +//______________________________________________________________________________ +void +AliMUONDigitMaker::SetTryRecover(Bool_t flag) +{ + /// Instruct the decoder to try to recover corrupted raw data. + /// Only use for specific cases for which you know it will work... + fRawStreamTracker->TryRecover(flag); +}