]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONTriggerCrateStore.cxx
DQM configure file
[u/mrichter/AliRoot.git] / MUON / AliMUONTriggerCrateStore.cxx
index de30d1d1393b00fd97b5c6b28755c755ae6a3a50..28ec0bc0049edc78bcc96cff37505e2ae340fa5d 100644 (file)
 // $Id$
 
 #include "AliMUONTriggerCrateStore.h"
-
+#include "AliMpExMapIterator.h"
 #include "AliMUONTriggerCrate.h"
 #include "AliMUONLocalTriggerBoard.h"
 #include "AliMUONRegionalTriggerBoard.h"
+#include "AliMUONRegionalTriggerConfig.h"
+#include "AliMUONGlobalCrateConfig.h"
+#include "AliMUONTriggerCrateConfig.h"
+#include "AliMUONCalibrationData.h"
+#include "AliMUONTriggerLut.h"
+
+#include "AliMpTriggerCrate.h"
+#include "AliMpLocalBoard.h"
+#include "AliMpDDLStore.h"
 #include "AliMpExMap.h"
-#include "TString.h"
-#include "TSystem.h"
 #include "AliLog.h"
-#include "Riostream.h"
 
-/// 
+#include <TString.h>
+#include <TSystem.h>
+#include <Riostream.h>
+
+#include <cstdio>
+
+//-----------------------------------------------------------------------------
 /// \class AliMUONTriggerCrateStore
 /// 
 /// A container of trigger crate objects that offers iteration
 /// over both the crates themselves and the local boards they contain
 ///
 /// \author Laurent Aphecetche
+//-----------------------------------------------------------------------------
 
 /// \cond CLASSIMP
 ClassImp(AliMUONTriggerCrateStore)
@@ -42,11 +55,7 @@ ClassImp(AliMUONTriggerCrateStore)
 AliMUONTriggerCrateStore::AliMUONTriggerCrateStore()
 : TObject(),
 fCrates(0x0),
-fLocalBoards(0x0),
-fCrateIterator(0x0),
-fLBIterator(0x0),
-fCurrentCrate(0x0),
-fCurrentLocalBoard(-1)
+fLocalBoards(0x0)
 {
 /// Default constructor
 }
@@ -55,8 +64,6 @@ fCurrentLocalBoard(-1)
 AliMUONTriggerCrateStore::~AliMUONTriggerCrateStore()
 {
 /// Destructor
-  delete fCrateIterator;
-  delete fLBIterator;
   delete fCrates;
   delete fLocalBoards;
 }
@@ -99,6 +106,24 @@ AliMUONTriggerCrateStore::LocalBoard(Int_t boardNumber) const
   return static_cast<AliMUONLocalTriggerBoard*>(fLocalBoards->GetValue(boardNumber));
 }
 
+//_____________________________________________________________________________
+TIterator*
+AliMUONTriggerCrateStore::CreateCrateIterator() const
+{
+  /// Create iterator over crates
+
+  return fCrates ? fCrates->CreateIterator() : 0x0;
+}
+
+//_____________________________________________________________________________
+TIterator*
+AliMUONTriggerCrateStore::CreateLocalBoardIterator() const
+{
+  /// Create iterator over local boards
+
+  return fLocalBoards ? fLocalBoards->CreateIterator() : 0x0;
+}
+
 //_____________________________________________________________________________
 AliMUONTriggerCrate* 
 AliMUONTriggerCrateStore::Crate(const char *name) const
@@ -112,6 +137,7 @@ AliMUONTriggerCrateStore::Crate(const char *name) const
   return static_cast<AliMUONTriggerCrate*>(fCrates->GetValue(name));
 }
 
+// to be removed once AliMUONDigitMaker is linked with new mapping
 //_____________________________________________________________________________
 AliMUONTriggerCrate* 
 AliMUONTriggerCrateStore::Crate(Int_t ddl, Int_t reg) const
@@ -125,16 +151,16 @@ AliMUONTriggerCrateStore::Crate(Int_t ddl, Int_t reg) const
   TString name = GetCrateName(ddl, reg);
   return static_cast<AliMUONTriggerCrate*>(fCrates->GetValue(name.Data()));
 }
-// //____________________________________________________________________
+//____________________________________________________________________
 TString AliMUONTriggerCrateStore::GetCrateName(Int_t ddl, Int_t reg) const
 {
-  // set crate name from DDL & reg number
+  /// set crate name from DDL & reg number
 
   Char_t name[10];
   switch(reg) {
       case 0:
       case 1:
-       sprintf(name,"%d", reg+1);
+       snprintf(name,10,"%d", reg+1);
        break;
       case 2:
        strcpy(name, "2-3");
@@ -144,112 +170,18 @@ TString AliMUONTriggerCrateStore::GetCrateName(Int_t ddl, Int_t reg) const
       case 5:
       case 6:
       case 7:
-       sprintf(name,"%d", reg);
+       snprintf(name,10,"%d", reg);
        break;
   }
 
   // crate Right for first DDL
   if (ddl == 0)
-    strcat(name, "R");
+    strncat(name, "R", 1);
   else 
-    strcat(name, "L"); 
+    strncat(name, "L", 1); 
 
   return TString(name);
 }
-//_____________________________________________________________________________
-void
-AliMUONTriggerCrateStore::FirstCrate()
-{
-  /// initialize iteration
-  if ( !fCrates )
-  {
-    AliError("Object not properly initialized");
-    return;
-  }
-  if (!fCrateIterator)
-  {
-    fCrateIterator = new TExMapIter(fCrates->GetIterator());
-  }
-  fCrateIterator->Reset();
-}
-
-//_____________________________________________________________________________
-void
-AliMUONTriggerCrateStore::FirstLocalBoard()
-{
-  /// Initialize iterator on local boards.
-  /// Please note that we're not using directly the FirstCrate() and
-  /// NextCrate() methods here to avoid mix and match between crate iterator
-  /// and local board iterator
-  fCurrentCrate = 0x0;
-  fCurrentLocalBoard = 0;
-
-  if ( !fLBIterator ) 
-  {
-    fLBIterator = new TExMapIter(fCrates->GetIterator());
-  }
-  fLBIterator->Reset();
-  Long_t key, value;
-  Bool_t ok = fLBIterator->Next(key,value);
-  if ( ok )
-  {
-    fCurrentCrate = reinterpret_cast<AliMUONTriggerCrate*>(value);
-    fCurrentLocalBoard = 1;
-  }
-}
-
-//_____________________________________________________________________________
-AliMUONTriggerCrate*
-AliMUONTriggerCrateStore::NextCrate()
-{
-  /// Return the next crate in iteration, or 0 if iteration is ended.
-  if (!fCrateIterator) return 0x0;
-  
-  Long_t key, value;
-  Bool_t ok = fCrateIterator->Next(key,value);
-  if (ok)
-  {
-    return reinterpret_cast<AliMUONTriggerCrate*>(value);
-  }
-  else
-  {
-    return 0x0;
-  }
-}
-
-//_____________________________________________________________________________
-AliMUONLocalTriggerBoard*
-AliMUONTriggerCrateStore::NextLocalBoard()
-{  
-  /// Return the next local board in iteration, or 0 if iteration is ended.
-  if ( !fLBIterator ) return 0x0;
-
-  if ( fCurrentLocalBoard >= fCurrentCrate->Boards()->GetLast() +1)
-//  if ( fCurrentLocalBoard >= fCurrentCrate->Boards()->GetLast() )
-  {
-    // try to go to next crate, if some are left
-    Long_t key, value;
-    Bool_t ok = fLBIterator->Next(key,value);
-    if ( ok )
-    {
-      fCurrentCrate = reinterpret_cast<AliMUONTriggerCrate*>(value);
-      fCurrentLocalBoard = 1;
-    }
-    else
-    {
-      fCurrentLocalBoard = 0;
-      return 0x0;
-    }
-  }
-
-  AliMUONLocalTriggerBoard* lb = static_cast<AliMUONLocalTriggerBoard*>
-    (fCurrentCrate->Boards()->At(fCurrentLocalBoard));
-  
-  ++fCurrentLocalBoard;
-  
-  return lb;
-}
-
 //_____________________________________________________________________________
 Int_t
 AliMUONTriggerCrateStore::NumberOfCrates() const
@@ -270,106 +202,67 @@ AliMUONTriggerCrateStore::NumberOfLocalBoards() const
 
 //_____________________________________________________________________________
 void
-AliMUONTriggerCrateStore::ReadFromFile(const char* file)
+AliMUONTriggerCrateStore::ReadFromFile(AliMUONCalibrationData* calibData) 
 {
-  /// Read crate and local board information from file.
-  fCrates = new AliMpExMap(kTRUE);
-  fLocalBoards = new AliMpExMap(kFALSE);
+  /// create crate and local board objects from mapping & calib (Ch.F)
+    fCrates = new AliMpExMap;
+    fCrates->SetOwner(kTRUE);
+    fLocalBoards = new AliMpExMap;
+    fLocalBoards->SetOwner(kFALSE);
   
-  ifstream myInputFile(gSystem->ExpandPathName(file), ios::in);
   
-  string sLine, sValue;
+   AliMUONTriggerLut* lut = calibData->TriggerLut();
+
+  if (!lut)
+   AliWarning("No valid trigger LUT in CDB");
   
-  if ( !myInputFile ) 
-  {
-    AliError("TRIGGER ELECTRONICS CONFIGURATION FILE COULD NOT BE OPENED");
-  }
-  else
-  {
-    while (getline(myInputFile,sLine))
+  AliMUONRegionalTriggerConfig* regionalConfig = calibData->RegionalTriggerConfig();
+  if (!regionalConfig) {
+     AliError("No valid regional trigger configuration in CDB");
+     return;
+  }   
+  
+  TIter next(AliMpDDLStore::Instance()->GetRegionalTrigger()->CreateCrateIterator());
+  AliMpTriggerCrate* crateMapping;
+  
+  while ( ( crateMapping = static_cast<AliMpTriggerCrate*>(next()) ) )
     {
-      if (sLine.empty()) continue; // Ignore empty lines
-      else
+    
+      TString crateName = crateMapping->GetName();
+      AliMUONTriggerCrate *crate = Crate(crateName.Data());
+    
+    AliMUONTriggerCrateConfig* crateConfig =  regionalConfig->FindTriggerCrate(crateName);
+
+      if (!crate) 
       {
-        const Int_t kMaxfields = 15; char **fields = new char*[kMaxfields];
-        
-        char s[100]; 
-        
-        if (sLine.find("Board",0) != string::npos) 
-        {   
-          strcpy(s,sLine.c_str());
-          
-          Int_t numlines = 0;
-          
-          for (char *token = strtok(s, " ");
-               token != NULL;
-               token = strtok(NULL, " "))
-          {
-            fields[numlines] = new char[strlen(token)+1];
-            strcpy(fields[numlines++],token);
-          }
-          
-          char str[10]; strcpy(str, fields[6]); strcat(str, fields[7]);
-          
-          AliMUONTriggerCrate *crate = Crate(str); 
-          
-          if (!crate) 
-          {
-            AddCrate(str); crate = Crate(str);
-            
-            AliMUONRegionalTriggerBoard *rboard = new AliMUONRegionalTriggerBoard();
-            crate->AddBoard(rboard, 0);
-          }               
-          
-          //             CONVENTION: SLOT 0 HOLDS THE REGIONAL BOARD
-          Int_t sl = atoi(fields[10]);
-          
-//          AliMUONTriggerLut* lut = calibData->TriggerLut();
-          
-          AliMUONLocalTriggerBoard *board = 
-            new AliMUONLocalTriggerBoard(fields[4], sl, 0x0);
-          
-                                       if (strcmp(fields[1],"nn")) 
-                                       {
-                                               Int_t sboard = atoi(fields[1]);
-            
-                                               board->SetNumber(sboard);
-            fLocalBoards->Add(sboard,board);
-            
-//                                             fCrateMap[sboard-1] = new char[strlen(str)+1]; strcpy(fCrateMap[sboard-1], str);
-//                                             fBoardMap[sboard-1] = sl;
-                                       }
-          
-                                       board->SetCrate(str);
-          
-          crate->AddBoard(board, sl);
-          
-          while (getline(myInputFile,sLine)) if (sLine.find("transv",0) != string::npos) break;
-          
-          strcpy(s,sLine.c_str());
-          
-          for (char *token = strtok(s, " ");
-               token != NULL;
-               token = strtok(NULL, " ")) if (!strcmp(token,"NONE")) board->SetTC(kFALSE);
-          
-          while (getline(myInputFile,sLine)) if (sLine.find("Switch",0) != string::npos) break;
-          
-          while (getline(myInputFile,sLine)) if (!sLine.empty()) break;   
-          
-          strcpy(s,sLine.c_str());
-          
-          Int_t lines = 0;
-          
-          for (char *token = strtok(s, " ");
-               token != NULL;
-               token = strtok(NULL, " ")) board->SetSwitch(lines++, atoi(token));
-          
-          for (Int_t i = 0; i<numlines; i++) 
-            if (fields[i]) {delete [] fields[i]; fields[i] = 0;}
-              
-              delete [] fields; fields = 0;
-        }
-      }
-    }
-  }
+       AddCrate(crateName.Data()); 
+       crate = Crate(crateName.Data());
+       AliDebug(3, Form("crate name %s\n", crateName.Data()));
+       AliMUONRegionalTriggerBoard *rboard = new AliMUONRegionalTriggerBoard();
+       crate->AddBoard(rboard, 0);
+      }   
+       
+      for(Int_t iLocal = 0; iLocal < crateMapping->GetNofLocalBoards(); ++iLocal) { 
+      
+       Int_t localBoardId = crateMapping->GetLocalBoardId(iLocal);
+       if (!localBoardId) continue; //empty slot, should not happen
+
+       AliMpLocalBoard* localBoardMapping = AliMpDDLStore::Instance()->GetLocalBoard(localBoardId);
+       AliDebug(3, Form("local name %s id %d\n", localBoardMapping->GetName(), localBoardId));
+      
+       Int_t slot = localBoardMapping->GetSlot();
+      AliMUONLocalTriggerBoard *board = new AliMUONLocalTriggerBoard(localBoardMapping);
+      board->SetCoinc44(crateConfig->GetCoinc());
+      board->SetLUT(lut);
+
+      
+       if (localBoardMapping->IsNotified()) {
+         fLocalBoards->Add(localBoardId, board);
+       }
+      
+       crate->AddBoard(board, slot);
+      
+      } // iLocal
+    } // while
 }
+