]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONDigitMaker.cxx
Update From Debojit
[u/mrichter/AliRoot.git] / MUON / AliMUONDigitMaker.cxx
index b97c1240f0239a9b7c4a80cee6a17e368318dd7d..0d78f303138698642c9e227a3a536b9fbd7d134a 100644 (file)
@@ -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 <TArrayS.h>
 
+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);
+}