]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONTriggerElectronics.cxx
New check for bad SDD modules (F. Prino)
[u/mrichter/AliRoot.git] / MUON / AliMUONTriggerElectronics.cxx
index a400f5fff3c0d4c0b59e89bdcfa733ca88ec8ed1..b2e8b9b3bebd25756f18acf2fdd34b13835fd85d 100644 (file)
 
 /* $Id$ */
 
-//*-- Author: Rachid Guernane (LPCCFd)
-//*   Manager class for muon trigger electronics
-//*   Client of trigger board classes
-//*   Debugged by Ph. Crochet & Ch. Finck
-//*   Interfaced with new mapping Ch. Finck
-//*
+//-----------------------------------------------------------------------------
+// Class AliMUONTriggerElectronics
+//--------------------------------
+// Manager class for muon trigger electronics
+// Client of trigger board classes
+// Debugged by Ph. Crochet & Ch. Finck
+// Interfaced with new mapping Ch. Finck
+//
+// Author: Rachid Guernane (LPCCFd)
+//-----------------------------------------------------------------------------
 
 #include "AliLoader.h"
 #include "AliLog.h"
@@ -37,6 +41,9 @@
 #include "AliMUONTriggerCrate.h"
 #include "AliMUONTriggerCrateStore.h"
 #include "AliMUONTriggerElectronics.h"
+#include "AliMUONTriggerCrateConfig.h"
+#include "AliMUONRegionalTriggerConfig.h"
+#include "AliMUONGlobalCrateConfig.h"
 #include "AliMUONVTriggerStore.h"
 #include "AliMUONVCalibParam.h"
 #include "AliMpCathodType.h"
@@ -78,8 +85,9 @@ AliMUONTriggerElectronics::AliMUONTriggerElectronics(AliMUONCalibrationData* cal
   }
 
   SetCopyInput();
+  
   Factory(calibData);
-  LoadMasks(calibData);
+  LoadMasks(calibData); 
 }
 
 //___________________________________________
@@ -95,22 +103,23 @@ AliMUONTriggerElectronics::~AliMUONTriggerElectronics()
   }
 
 }
+
 //___________________________________________
 void AliMUONTriggerElectronics::SetCopyInput()
 {  
-/// set list of copy input
-
+  /// set list of copy input
+  
     for (Int_t iDDL = 0; iDDL < 2; ++iDDL) { 
-
+    
       for(Int_t iReg = 0; iReg < 8; ++iReg){   //reg loop
-
+      
        AliMpTriggerCrate* crateMapping = AliMpDDLStore::Instance()->GetTriggerCrate(iDDL, iReg);
-
+      
        for(Int_t iLocal = 0; iLocal < crateMapping->GetNofLocalBoards(); ++iLocal) { 
-
+        
          Int_t localBoardFromId = crateMapping->GetLocalBoardId(iLocal);
          if (!localBoardFromId) continue; //empty slot, should not happen
-
+        
           AliMpLocalBoard* localBoardFrom = AliMpDDLStore::Instance()->GetLocalBoard(localBoardFromId);
          Int_t localBoardToId;
          if ((localBoardToId = localBoardFrom->GetInputXto())) {
@@ -119,25 +128,25 @@ void AliMUONTriggerElectronics::SetCopyInput()
              Int_t   slotFrom  = localBoardFrom->GetSlot();
              TString crateTo   = localBoardTo->GetCrate();
              Int_t   slotTo    = localBoardTo->GetSlot();
-
+          
              fCopyXInput[0]->Add(new AliMpIntPair(AliMpExMap::GetIndex(crateFrom), slotFrom));
              fCopyXInput[1]->Add(new AliMpIntPair(AliMpExMap::GetIndex(crateTo), slotTo));
              AliDebug(3, Form("copy xInputs from local  %s_%d to %s_%d\n", crateFrom.Data(), slotFrom, 
                               crateTo.Data(), slotTo));
          }
-
+        
          if ((localBoardToId = localBoardFrom->GetInputYto())) {
              AliMpLocalBoard* localBoardTo = AliMpDDLStore::Instance()->GetLocalBoard(localBoardToId);
              TString crateFrom = localBoardFrom->GetCrate();
              Int_t   slotFrom  = localBoardFrom->GetSlot();
              TString crateTo   = localBoardTo->GetCrate();
              Int_t   slotTo    = localBoardTo->GetSlot();
-
+          
              fCopyYInput[0]->Add(new AliMpIntPair(AliMpExMap::GetIndex(crateFrom), slotFrom));
              fCopyYInput[1]->Add(new AliMpIntPair(AliMpExMap::GetIndex(crateTo), slotTo));
              AliDebug(3, Form("copy yInputs from local  %s_%d to %s_%d\n", crateFrom.Data(), slotFrom, 
                               crateTo.Data(), slotTo));
-
+          
          }
  
        }
@@ -151,31 +160,7 @@ void AliMUONTriggerElectronics::Factory(AliMUONCalibrationData* calibData)
  /// BUILD ALL ELECTRONICS
  ///
 
-// get coinc44 from AliMUON (added 12/09/06)
-  AliMUON *pMUON  = (AliMUON*)gAlice->GetModule("MUON");
-  Int_t coinc44 = pMUON->GetTriggerCoinc44();
-  if (coinc44 != 0 && coinc44 != 1) {
-      AliFatal("Coinc 44 should be equal to 0 or 1");
-      return;
-  }
-
-  fCrates->ReadFromFile();
-  
-  if ( !calibData ) return;
-  
-  AliMUONTriggerLut* lut = calibData->TriggerLut();
-  
-  if (!lut) return;
-  
-  AliMUONLocalTriggerBoard* localBoard;
-  
-  fCrates->FirstLocalBoard();
-  
-  while ( (localBoard=fCrates->NextLocalBoard()) )
-  {
-    localBoard->SetLUT(lut);
-    localBoard->SetCoinc44(coinc44);
-  }
+    fCrates->ReadFromFile(calibData);
 }
 
 //___________________________________________
@@ -290,10 +275,9 @@ void AliMUONTriggerElectronics::Feed(const AliMUONVDigitStore& digitStore)
   
   // FILL UP/DOWN OF CURRENT BOARD (DONE VIA J3 BUS IN REAL LIFE)
   AliMUONTriggerCrate* cr;
+  TIter next2(fCrates->CreateCrateIterator());
   
-  fCrates->FirstCrate();
-  
-  while ( ( cr = fCrates->NextCrate() ) )
+  while ( ( cr = static_cast<AliMUONTriggerCrate*>(next2()) ) )
   {            
     TObjArray *boards = cr->Boards();
     
@@ -333,10 +317,9 @@ void AliMUONTriggerElectronics::Feed(UShort_t pattern[2][4])
   /// FILL INPUTS
   ///
   AliMUONTriggerCrate* cr;
+  TIter next(fCrates->CreateCrateIterator());
    
-   fCrates->FirstCrate();
-   
-   while ( ( cr = fCrates->NextCrate() ) )
+   while ( ( cr = static_cast<AliMUONTriggerCrate*>(next()) ) )
    {                 
      TObjArray *boards = cr->Boards();
      
@@ -373,10 +356,9 @@ void AliMUONTriggerElectronics::Scan(Option_t *option)
   ///
 
   AliMUONTriggerCrate* cr;
+  TIter next(fCrates->CreateCrateIterator());  
   
-  fCrates->FirstCrate();
-  
-  while ( ( cr = fCrates->NextCrate() ) )
+  while ( ( cr = static_cast<AliMUONTriggerCrate*>(next()) ) )
   {                
     TObjArray *boards = cr->Boards();
     
@@ -408,10 +390,8 @@ void AliMUONTriggerElectronics::Reset()
   ///
   
    AliMUONTriggerCrate* cr;
-   
-   fCrates->FirstCrate();
-   
-   while ( ( cr = fCrates->NextCrate() ) )
+  TIter next(fCrates->CreateCrateIterator());
+   while ( ( cr = static_cast<AliMUONTriggerCrate*>(next()) ) )
    {            
       TObjArray *boards = cr->Boards();
             
@@ -424,35 +404,42 @@ void AliMUONTriggerElectronics::Reset()
    }
 }
 
+
 //_______________________________________________________________________
 void AliMUONTriggerElectronics::LoadMasks(AliMUONCalibrationData* calibData)
 {
-  /// LOAD MASKS FROM CDB
+  /// Load mask from config in CDB 
   
+  // Set mask
+  
+  AliMUONRegionalTriggerConfig* regionalConfig = calibData->RegionalTriggerConfig();
+  if (!regionalConfig)
+     AliWarning("No valid regional trigger configuration in CDB");
 
-  // SET MASKS
   
   AliMUONTriggerCrate* cr;
-  
-  fCrates->FirstCrate();
+  TIter next(fCrates->CreateCrateIterator());
   
   Int_t irb(0);
   
-  while ( ( cr = fCrates->NextCrate() ) )
+  while ( ( cr = static_cast<AliMUONTriggerCrate*>(next()) ) )
   {            
     TObjArray *boards = cr->Boards();
     
-    AliMUONRegionalTriggerBoard *regb =
-      (AliMUONRegionalTriggerBoard*)boards->At(0);
+    AliMUONRegionalTriggerBoard *regb = (AliMUONRegionalTriggerBoard*)boards->At(0);
 
-    AliMUONVCalibParam* regionalBoardMasks = calibData->RegionalTriggerBoardMasks(irb);
+    AliMUONTriggerCrateConfig* crateConfig = regionalConfig->FindTriggerCrate(cr->GetName());
     
-    for ( Int_t i = 0; i < regionalBoardMasks->Size(); ++i )
+    if (!crateConfig)
     {
-      UShort_t rmask = static_cast<UShort_t>(regionalBoardMasks->ValueAsInt(i) & 0x3F);
-      regb->Mask(i,rmask);
+      AliError(Form("Crate %s not present in configuration !!!", cr->GetName()));
+      return;
     }
     
+    UShort_t rmask= crateConfig->GetMask();
+
+    regb->Mask(rmask);
+    
     for (Int_t j = 1; j < boards->GetEntries(); j++)
     {
       AliMUONLocalTriggerBoard *b = (AliMUONLocalTriggerBoard*)boards->At(j);
@@ -472,25 +459,27 @@ void AliMUONTriggerElectronics::LoadMasks(AliMUONCalibrationData* calibData)
     ++irb;
   }
   
-  AliMUONVCalibParam* globalBoardMasks = calibData->GlobalTriggerBoardMasks();
-  for ( Int_t i = 0; i < globalBoardMasks->Size(); ++i )
-  {
-    UShort_t gmask = static_cast<UShort_t>(globalBoardMasks->ValueAsInt(i) & 0xFFF);
-    fGlobalTriggerBoard->Mask(i,gmask);
-  }
-}
+   AliMUONGlobalCrateConfig * globalConfig = calibData->GlobalTriggerCrateConfig();
+  if (!globalConfig)
+     AliWarning("No valid trigger crate configuration in CDB");
+
+    UShort_t gmask = 0;
+    gmask = globalConfig->GetFirstDarcDisable();
+    fGlobalTriggerBoard->Mask(0,gmask);
 
+    gmask = globalConfig->GetSecondDarcDisable();
+    fGlobalTriggerBoard->Mask(1,gmask);
+}
 
 //___________________________________________
 void AliMUONTriggerElectronics::LocalResponse()
 {
-/// \todo add comment
+/// Compute the response for local cards
        
   AliMUONTriggerCrate* cr;
+  TIter next(fCrates->CreateCrateIterator());
   
-  fCrates->FirstCrate();
-  
-  while ( ( cr = fCrates->NextCrate() ) )
+  while ( ( cr = static_cast<AliMUONTriggerCrate*>(next()) ) )
   {            
     
     TObjArray *boards = cr->Boards();
@@ -536,10 +525,9 @@ void AliMUONTriggerElectronics::RegionalResponse()
 {
   /// Compute the response for all regional cards.
   AliMUONTriggerCrate* cr;
+  TIter next(fCrates->CreateCrateIterator());
   
-  fCrates->FirstCrate();
-  
-  while ( ( cr = fCrates->NextCrate() ) )
+  while ( ( cr = static_cast<AliMUONTriggerCrate*>(next()) ) )
   {            
       TObjArray *boards = cr->Boards();
 
@@ -560,8 +548,6 @@ void AliMUONTriggerElectronics::GlobalResponse()
   UShort_t regional[16];
   
   AliMUONTriggerCrate* cr;
-  
-  fCrates->FirstCrate();
   Int_t irb(0);
   
   if ( !fCrates->NumberOfCrates() >= 16 ) 
@@ -569,8 +555,10 @@ void AliMUONTriggerElectronics::GlobalResponse()
     AliFatal(Form("Something is wrong : too many crates %d",
                   fCrates->NumberOfCrates()));
   }
-  
-  while ( ( cr = fCrates->NextCrate() ) )
+
+  TIter next(fCrates->CreateCrateIterator());
+
+  while ( ( cr = static_cast<AliMUONTriggerCrate*>(next())))
   {            
     AliMUONTriggerBoard* rb = 
       static_cast<AliMUONTriggerBoard*>(cr->Boards()->At(0));