]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONDigitMaker.cxx
Coding conventions: adding copy constructor and assignment operator
[u/mrichter/AliRoot.git] / MUON / AliMUONDigitMaker.cxx
index 2779db98cbf7ff301c07b7fe4077dbab1b9e2740..11fc98cae2bbba29139210f7f84c8fe99e481b0e 100644 (file)
@@ -13,6 +13,9 @@
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
+// $Id$
+
+//-----------------------------------------------------------------------------
 /// \class AliMUONDigitMaker
 /// MUON Digit maker from rawdata.
 ///
@@ -37,6 +40,7 @@
 /// and for trigger. Create trigger inverse mapping.
 ///
 /// \author Ch. Finck, oct 06 
+//-----------------------------------------------------------------------------
 
 #include "AliMUONDigitMaker.h"
 
 #include "AliMUONGlobalTrigger.h"
 #include "AliMUONLocalStruct.h"
 #include "AliMUONLocalTrigger.h"
-#include "AliMUONLocalTriggerBoard.h"
 #include "AliMUONRawStreamTracker.h"
+#include "AliMUONRawStreamTrackerHP.h"
 #include "AliMUONRawStreamTrigger.h"
 #include "AliMUONRegHeader.h"
 #include "AliMUONTriggerCircuit.h"
-#include "AliMUONTriggerCrate.h"
-#include "AliMUONTriggerCrateStore.h"
+#include "AliMpTriggerCrate.h"
+#include "AliMpLocalBoard.h"
 #include "AliMUONVTriggerStore.h"
 #include "AliMpCathodType.h"
 #include "AliMpDDLStore.h"
@@ -70,13 +74,12 @@ ClassImp(AliMUONDigitMaker) // Class implementation in ROOT context
 /// \endcond
 
 //__________________________________________________________________________
-AliMUONDigitMaker::AliMUONDigitMaker()
+AliMUONDigitMaker::AliMUONDigitMaker(Bool_t enableErrorLogger, Bool_t useFastDecoder)
   : TObject(),
     fScalerEvent(kFALSE),
     fMakeTriggerDigits(kFALSE),
-    fRawStreamTracker(new AliMUONRawStreamTracker()),    
+    fRawStreamTracker(NULL),
     fRawStreamTrigger(new AliMUONRawStreamTrigger()),    
-    fCrateManager(0x0),
     fTrackerTimer(),
     fTriggerTimer(),
     fMappingTimer(),
@@ -86,8 +89,14 @@ AliMUONDigitMaker::AliMUONDigitMaker()
   /// ctor 
 
   AliDebug(1,"");
+  
+  CreateRawStreamTracker(useFastDecoder);
 
   // Standard Constructor
+  if (enableErrorLogger) {
+    fRawStreamTracker->EnabbleErrorLogger();
+    fRawStreamTrigger->EnabbleErrorLogger();
+  }
 
   fTrackerTimer.Start(kTRUE); fTrackerTimer.Stop();
   fTriggerTimer.Start(kTRUE); fTriggerTimer.Stop();
@@ -116,6 +125,20 @@ AliMUONDigitMaker::~AliMUONDigitMaker()
 
 }
 
+//__________________________________________________________________________
+void AliMUONDigitMaker::CreateRawStreamTracker(Bool_t useFastDecoder)
+{
+/// Create raw stream tracker according to the passed option
+
+  if (useFastDecoder)
+  {
+    AliInfo("Using fast decoder.");
+    fRawStreamTracker = new AliMUONRawStreamTrackerHP();
+  }
+  else
+    fRawStreamTracker = new AliMUONRawStreamTracker();
+}    
+
 //____________________________________________________________________
 Int_t AliMUONDigitMaker::Raw2Digits(AliRawReader* rawReader, 
                                     AliMUONVDigitStore* digitStore,
@@ -260,14 +283,14 @@ Int_t AliMUONDigitMaker::ReadTriggerDDL(AliRawReader* rawReader)
     for(Int_t iReg = 0; iReg < nReg ;iReg++)
     {   //reg loop
       
-      // crate info
-      if (!fCrateManager) AliFatal("Crate Store not defined");
-      AliMUONTriggerCrate* crate = fCrateManager->Crate(fRawStreamTrigger->GetDDL(), iReg);
+
+      // crate info  
+      AliMpTriggerCrate* crate = AliMpDDLStore::Instance()->
+                                GetTriggerCrate(fRawStreamTrigger->GetDDL(), iReg);
       
       if (!crate) 
         AliWarning(Form("Missing crate number %d in DDL %d\n", iReg, fRawStreamTrigger->GetDDL()));
-      
-      TObjArray *boards  = crate->Boards();
+     
       
       regHeader =  darcHeader->GetRegHeaderEntry(iReg);
       
@@ -280,12 +303,15 @@ Int_t AliMUONDigitMaker::ReadTriggerDDL(AliRawReader* rawReader)
         // if card exist
         if (localStruct) {
           
-          AliMUONLocalTriggerBoard* localBoard = 
-          (AliMUONLocalTriggerBoard*)boards->At(localStruct->GetId()+1);
-          
-          // skip copy cards
-          if( !(loCircuit = localBoard->GetNumber()) )
-            continue;
+         loCircuit = crate->GetLocalBoardId(localStruct->GetId());
+
+         if ( !loCircuit ) continue; // empty slot
+
+         AliMpLocalBoard* localBoard = AliMpDDLStore::Instance()->GetLocalBoard(loCircuit, false);
+
+         // skip copy cards
+         if( !localBoard->IsNotified()) 
+            continue;
           
           if (fTriggerStore) 
           {
@@ -299,18 +325,9 @@ Int_t AliMUONDigitMaker::ReadTriggerDDL(AliRawReader* rawReader)
           {
             //FIXEME should find something better than a TArray
             TArrayS xyPattern[2];
-            xyPattern[0].Set(4);
-            xyPattern[1].Set(4);
-            
-            xyPattern[0].AddAt(localStruct->GetX1(),0);
-            xyPattern[0].AddAt(localStruct->GetX2(),1);
-            xyPattern[0].AddAt(localStruct->GetX3(),2);
-            xyPattern[0].AddAt(localStruct->GetX4(),3);
             
-            xyPattern[1].AddAt(localStruct->GetY1(),0);
-            xyPattern[1].AddAt(localStruct->GetY2(),1);
-            xyPattern[1].AddAt(localStruct->GetY3(),2);
-            xyPattern[1].AddAt(localStruct->GetY4(),3);
+           localStruct->GetXPattern(xyPattern[0]);
+           localStruct->GetYPattern(xyPattern[1]);
             
             TriggerDigits(loCircuit, xyPattern, *fDigitStore);
           }          
@@ -332,6 +349,12 @@ Int_t AliMUONDigitMaker::TriggerDigits(Int_t nBoard,
 {
   /// make digits for trigger from pattern, and add them to digitStore
 
+  Int_t detElemId;
+
+  AliMpLocalBoard* localBoard = AliMpDDLStore::Instance()->GetLocalBoard(nBoard);
+
+  Int_t n,b;
+
   // loop over x1-4 and y1-4
   for (Int_t iChamber = 0; iChamber < 4; ++iChamber)
   {
@@ -341,9 +364,7 @@ Int_t AliMUONDigitMaker::TriggerDigits(Int_t nBoard,
       if (!pattern) continue;
       
       // get detElemId
-      AliMUONTriggerCircuit triggerCircuit;
-      AliMUONLocalTriggerBoard* localBoard = fCrateManager->LocalBoard(nBoard);
-      Int_t detElemId = triggerCircuit.DetElemId(iChamber+10, localBoard->GetName());//FIXME +/-10 (should be ok with new mapping)
+      detElemId = AliMpDDLStore::Instance()->GetDEfromLocalBoard(nBoard, iChamber);
         
         const AliMpVSegmentation* seg 
           = AliMpSegmentation::Instance()
@@ -366,14 +387,20 @@ Int_t AliMUONDigitMaker::TriggerDigits(Int_t nBoard,
                               detElemId, nBoard, ibitxy));
               continue;
             }
-            
-            AliMUONVDigit* digit = digitStore.Add(detElemId,nBoard,ibitxy,iCath,AliMUONVDigitStore::kDeny);
+
+            n = pad.GetLocation(0).GetFirst(); // always take first location so that digits are not inserted several times
+           b = pad.GetLocation(0).GetSecond();
+
+           AliDebug(1,Form("Using localBoard %d ixy %d instead of %d,%d",
+                           n,b,nBoard,ibitxy));
+
+           AliMUONVDigit* digit = digitStore.Add(detElemId,n,b,iCath,AliMUONVDigitStore::kDeny);
             
             if (!digit)
             {
-              AliError(Form("Could not add digit DE %04d LocalBoard %03d ibitxy %02d cath %d",
-                            detElemId,nBoard,ibitxy,iCath));
-              continue;
+               AliDebug(1, Form("Digit DE %04d LocalBoard %03d ibitxy %02d cath %d already in store",
+                                detElemId,nBoard,ibitxy,iCath));
+               continue;
             }
             
             Int_t padX = pad.GetIndices().GetFirst();
@@ -389,34 +416,15 @@ Int_t AliMUONDigitMaker::TriggerDigits(Int_t nBoard,
   
   return kTRUE;
 } 
+
 //____________________________________________________________________
-void  
-AliMUONDigitMaker::GetCrateName(Char_t* name, Int_t iDDL, Int_t iReg) const
+void  AliMUONDigitMaker::SetFastDecoder(Bool_t useFastDecoder)
 {
-  /// set crate name from DDL & reg number
-  /// method same as in RawWriter, not so nice
-  /// should be put in AliMUONTriggerCrateStore
-
-      switch(iReg) {
-      case 0:
-      case 1:
-       sprintf(name,"%d", iReg+1);
-       break;
-      case 2:
-       strcpy(name, "2-3");
-       break;
-      case 3:
-      case 4:
-      case 5:
-      case 6:
-      case 7:
-       sprintf(name,"%d", iReg);
-       break;
-      }
+/// Set fast raw data decoder
+
+  delete fRawStreamTracker;
+  CreateRawStreamTracker(useFastDecoder);
+}  
+  
+    
 
-      // crate Right for first DDL
-      if (iDDL == 0)
-       strcat(name, "R");
-      else 
-       strcat(name, "L"); 
-}