Store right local board numbers (Christian)
authorpcrochet <pcrochet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 13 Sep 2006 09:58:07 +0000 (09:58 +0000)
committerpcrochet <pcrochet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 13 Sep 2006 09:58:07 +0000 (09:58 +0000)
MUON/AliMUONDigitMaker.cxx
MUON/AliMUONDigitMaker.h

index 5b8d596..1fa1223 100644 (file)
@@ -64,6 +64,9 @@
 #include "AliMUONRegHeader.h"
 #include "AliMUONLocalStruct.h"
 
+#include "AliMUONTriggerCrateStore.h"
+#include "AliMUONTriggerCrate.h"
+#include "AliMUONLocalTriggerBoard.h"
 #include "AliMUONLocalTrigger.h"
 #include "AliMUONGlobalTrigger.h"
 
@@ -85,6 +88,7 @@ AliMUONDigitMaker::AliMUONDigitMaker(AliMUONData* data)
     fDigit(new AliMUONDigit()),
     fLocalTrigger(new AliMUONLocalTrigger()),
     fGlobalTrigger(new AliMUONGlobalTrigger()),
+    fCrateManager(new AliMUONTriggerCrateStore()),
     fTrackerTimer(),
     fTriggerTimer(),
     fMappingTimer()
@@ -101,6 +105,8 @@ AliMUONDigitMaker::AliMUONDigitMaker(AliMUONData* data)
   // bus patch 
   fBusPatchManager->ReadBusPatchFile();
 
+  // Crate manager
+  fCrateManager->ReadFromFile();
 
   fTrackerTimer.Start(kTRUE); fTrackerTimer.Stop();
   fTriggerTimer.Start(kTRUE); fTriggerTimer.Stop();
@@ -120,6 +126,7 @@ AliMUONDigitMaker::AliMUONDigitMaker()
     fDigit(0),
     fLocalTrigger(0),
     fGlobalTrigger(0),
+    fCrateManager(0),
     fTrackerTimer(),
     fTriggerTimer(),
     fMappingTimer()
@@ -150,6 +157,8 @@ AliMUONDigitMaker::~AliMUONDigitMaker()
   delete fLocalTrigger;
   delete fGlobalTrigger;
 
+  delete fCrateManager;
+
   delete fBusPatchManager;
 
   AliInfo(Form("Execution time for MUON tracker : R:%.2fs C:%.2fs",
@@ -354,6 +363,18 @@ Int_t AliMUONDigitMaker::ReadTriggerDDL(AliRawReader* rawReader)
 
     for(Int_t iReg = 0; iReg < nReg ;iReg++){   //reg loop
 
+     // crate info
+      Char_t crateName[10];
+      GetCrateName(crateName, fRawStreamTrigger->GetDDL(), iReg);
+
+      AliMUONTriggerCrate* crate = fCrateManager->Crate(crateName);
+  
+      if (!crate) 
+       AliWarning(Form("Missing crate number %d in DDL %d\n", iReg, fRawStreamTrigger->GetDDL()));
+
+      TObjArray *boards  = crate->Boards();
+
+
       regHeader =  darcHeader->GetRegHeaderEntry(iReg);
 
       Int_t nLocal = regHeader->GetLocalEntries();
@@ -362,9 +383,13 @@ Int_t AliMUONDigitMaker::ReadTriggerDDL(AliRawReader* rawReader)
 
        localStruct = regHeader->GetLocalEntry(iLocal);
 
+       // if card has triggered
        if (localStruct->GetTriggerY() == 0) {
-         loCircuit = localStruct->GetId()+ 16*regHeader->GetId() 
-                                              + 128*fRawStreamTrigger->GetDDL(); 
+
+         AliMUONLocalTriggerBoard* localBoard = 
+           (AliMUONLocalTriggerBoard*)boards->At(localStruct->GetId()+1);
+
+         loCircuit = localBoard->GetNumber();
            
          // fill local trigger
          fLocalTrigger->SetLocalStruct(loCircuit, *localStruct);
@@ -381,3 +406,33 @@ Int_t AliMUONDigitMaker::ReadTriggerDDL(AliRawReader* rawReader)
 
 }
 
+//____________________________________________________________________
+void  AliMUONDigitMaker::GetCrateName(Char_t* name, Int_t iDDL, Int_t iReg)
+{
+  // 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;
+      }
+
+      // crate Right for first DDL
+      if (iDDL == 0)
+       strcat(name, "R");
+      else 
+       strcat(name, "L"); 
+}
index f53c643..96c2d28 100644 (file)
@@ -19,6 +19,7 @@ class AliMUONData;
 class AliMUONDigit;
 class AliMUONGlobalTrigger;
 class AliMUONLocalTrigger;
+class AliMUONTriggerCrateStore;
 
 class AliMpSegFactory;
 class AliMUONRawStreamTracker;
@@ -65,6 +66,8 @@ class AliMUONDigitMaker : public TObject
   AliMUONLocalTrigger*  fLocalTrigger;         //!< pointer to local trigger
   AliMUONGlobalTrigger* fGlobalTrigger;        //!< pointer to local trigger
 
+  AliMUONTriggerCrateStore* fCrateManager;     //!< Crate array
+
   TStopwatch fTrackerTimer;                    //!< time watcher for tracker part
   TStopwatch fTriggerTimer;                    //!< time watcher for trigger part
   TStopwatch fMappingTimer;                    //!< time watcher for mapping-tracker part
@@ -72,6 +75,8 @@ class AliMUONDigitMaker : public TObject
   AliMUONDigitMaker (const AliMUONDigitMaker& rhs); // copy constructor
   AliMUONDigitMaker& operator=(const AliMUONDigitMaker& rhs); // assignment operator
 
+  void GetCrateName(Char_t* name, Int_t iDDL, Int_t iReg);
+
   ClassDef(AliMUONDigitMaker,1) // MUON digit maker from rawdata
 };