]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/mapping/AliMpTriggerReader.cxx
Corrected the list of bus patches with reverted manus
[u/mrichter/AliRoot.git] / MUON / mapping / AliMpTriggerReader.cxx
index 622709b12527ee7bd274eed95f16d724e91506f8..60e1b035d8e8ed49ca4983e93757d4f53625d9f1 100644 (file)
@@ -29,6 +29,7 @@
 #include "AliMpHelper.h"
 #include "AliMpSt345Reader.h"
 #include "AliMpTrigger.h"
+#include "AliMpConstants.h"
 
 #include "AliLog.h"
 
 #include "TObjString.h"
 #include "TList.h"
 #include "TString.h"
-
+#include <TArrayI.h>
 #include <sstream>
-#include <assert.h>
 
-//
+//-----------------------------------------------------------------------------
 /// \class AliMpTriggerReader
 /// Read trigger slat ASCII files
 /// Basically provides two methods:
@@ -49,6 +49,7 @@
 /// - AliMpPCB* ReadPCB()
 ///
 /// \author Laurent Aphecetche
+//-----------------------------------------------------------------------------
 
 /// \cond CLASSIMP
 ClassImp(AliMpTriggerReader)
@@ -61,23 +62,23 @@ const TString AliMpTriggerReader::fgkKeywordFlipX("FLIP_X");
 const TString AliMpTriggerReader::fgkKeywordFlipY("FLIP_Y");
 
 //_____________________________________________________________________________
-AliMpTriggerReader::AliMpTriggerReader(AliMpSlatMotifMap& motifMap
+AliMpTriggerReader::AliMpTriggerReader() 
 : TObject(),
-  fMotifMap(motifMap),
+  fMotifMap(AliMpSlatMotifMap::Instance()),
   fLocalBoardMap()
 {
-  //
-  // Default ctor.
-  //
+  ///
+  /// Default ctor.
+  ///
     fLocalBoardMap.SetOwner(kTRUE);
 } 
 
 //_____________________________________________________________________________
 AliMpTriggerReader::~AliMpTriggerReader()
 {
-  //
-  // Dtor.
-  //
+  ///
+  /// Dtor.
+  ///
   fLocalBoardMap.DeleteAll();
 }
 
@@ -99,7 +100,7 @@ AliMpTriggerReader::BuildSlat(const char* slatName,
     
   TIter it(&lines);
   
-  StdoutToAliDebug(3,lines.Print(););
+//  StdoutToAliDebug(3,lines.Print(););
   
   TObjString* osline;
   while ( ( osline = (TObjString*)it.Next() ) )
@@ -191,7 +192,7 @@ AliMpTriggerReader::BuildSlat(const char* slatName,
 TString
 AliMpTriggerReader::GetBoardNameFromPCBLine(const TString& s)
 {
-  // Decode the string to get the board name
+  /// Decode the string to get the board name
   TString boardName;
   
   TObjArray* tokens = s.Tokenize(' ');
@@ -546,6 +547,8 @@ AliMpTriggerReader::ReadLocalBoardMapping()
 
   fLocalBoardMap.DeleteAll();
   
+  UShort_t mask;
+  
   ifstream in(filename.Data());
   if (!in.good())
   {
@@ -554,25 +557,38 @@ AliMpTriggerReader::ReadLocalBoardMapping()
   else
   {
     char line[80];
+    Char_t localBoardName[20];
+    Int_t j,localBoardId;
+    UInt_t switches;
     
-    while ( in.getline(line,80) )
+    while (!in.eof())
     {
-      if ( line[0] == '#' ) continue;
+      for (Int_t i = 0; i < 4; ++i)
+        if (!in.getline(line,80)) continue; //skip 4 first lines
+      // read mask
+      if (!in.getline(line,80)) break;
+      sscanf(line,"%hx",&mask);
       
-      TString sline(line);
-      if ( sline.Contains("Board") )
-      {
-        TObjArray* tokens = sline.Tokenize(' ');
-        TString& number = ((TObjString*)(tokens->At(1)))->String();
-        Int_t n = atoi(number.Data());
-        if ( n == 0 ) continue;
-        TString& name = ((TObjString*)(tokens->At(4)))->String();
-        fLocalBoardMap.Add(new TObjString(name), new TObjString(number));
-        AliDebugClass(10,Form("Board %s has number %s\n",name.Data(),number.Data()));
-        delete tokens;
+      for ( Int_t i = 0; i < 16; ++i ) 
+      {      
+        if ( (mask >> i ) & 0x1 )
+        {
+          if (!in.getline(line,80)) break; 
+          sscanf(line,"%02d %s %03d %03x", &j, localBoardName, &localBoardId, &switches);
+          if (localBoardId <= AliMpConstants::NofLocalBoards()) 
+          {
+            fLocalBoardMap.Add(new TObjString(localBoardName), new TObjString(Form("%d",localBoardId)));
+            AliDebugClass(10,Form("Board %s has number %d\n", localBoardName, localBoardId));
+          }
+          // skip 2 following lines
+          if (!in.getline(line,80)) break; 
+          if (!in.getline(line,80)) break; 
+         }
       }
     }      
   }
+
   in.close();
 }
 
@@ -634,8 +650,11 @@ AliMpTriggerReader::ReadPCB(const char* pcbType)
       float pcbSizeX = 0.0;
       float pcbSizeY = 0.0;
       sin >> padSizeX >> padSizeY >> pcbSizeX >> pcbSizeY;
-      assert(pcb==0);
-      pcb = new AliMpPCB(&fMotifMap,pcbType,padSizeX*scale,padSizeY*scale,
+      if (pcb)
+      {
+        AliError("pcb not null as expected");
+      }
+      pcb = new AliMpPCB(fMotifMap,pcbType,padSizeX*scale,padSizeY*scale,
                          pcbSizeX*scale,pcbSizeY*scale);
     }
     
@@ -650,18 +669,18 @@ AliMpTriggerReader::ReadPCB(const char* pcbType)
       TString id = reader.MotifSpecialName(sMotifSpecial,scale);
       
       AliMpMotifSpecial* specialMotif =
-        dynamic_cast<AliMpMotifSpecial*>(fMotifMap.FindMotif(id));
+        dynamic_cast<AliMpMotifSpecial*>(fMotifMap->FindMotif(id));
       if (!specialMotif)
       {
         AliDebug(1,Form("Reading motifSpecial %s (%s) from file",
                         sMotifSpecial.Data(),id.Data()));
-        AliMpMotifType* motifType = fMotifMap.FindMotifType(sMotifType.Data());
+        AliMpMotifType* motifType = fMotifMap->FindMotifType(sMotifType.Data());
         if ( !motifType)
         {
           AliDebug(1,Form("Reading motifType %s (%s) from file",
                           sMotifType.Data(),id.Data()));
           motifType = reader.BuildMotifType(sMotifType.Data());
-          fMotifMap.AddMotifType(motifType);
+          fMotifMap->AddMotifType(motifType);
         }
         else
         {
@@ -669,14 +688,16 @@ AliMpTriggerReader::ReadPCB(const char* pcbType)
                           sMotifType.Data(),id.Data()));        
         }
         specialMotif = reader.BuildMotifSpecial(sMotifSpecial,motifType,scale);
-        fMotifMap.AddMotif(specialMotif);
+        fMotifMap->AddMotif(specialMotif);
       }
       else
       {
         AliDebug(1,Form("Got motifSpecial %s from motifMap",sMotifSpecial.Data()));
       }
-      
-      assert(pcb==0);      
+      if (pcb)
+      {
+        AliError("pcb not null as expected");
+      }
       pcb = new AliMpPCB(pcbType,specialMotif);
     }
     
@@ -689,19 +710,18 @@ AliMpTriggerReader::ReadPCB(const char* pcbType)
       int iy;
       sin >> sMotifType >> ix >> iy;
       
-      AliMpMotifType* motifType = fMotifMap.FindMotifType(sMotifType.Data());
+      AliMpMotifType* motifType = fMotifMap->FindMotifType(sMotifType.Data());
       if ( !motifType)
       {
         AliDebug(1,Form("Reading motifType %s from file",sMotifType.Data()));
         motifType = reader.BuildMotifType(sMotifType.Data());
-        fMotifMap.AddMotifType(motifType);
+        fMotifMap->AddMotifType(motifType);
       }
       else
       {
         AliDebug(1,Form("Got motifType %s from motifMap",sMotifType.Data()));        
       }
       
-      assert(pcb!=0);
       pcb->Add(motifType,ix,iy);
     }
   }
@@ -759,7 +779,7 @@ AliMpTriggerReader::ReadSlat(const char* slatType, AliMp::PlaneType planeType)
     TString& s = osline->String();
     if ( IsLayerLine(s) )
     {
-      TList* list(new TList);
+      TList* list = new TList;
       list->SetOwner(kTRUE);
       layers.Add(list);
       ++ilayer;
@@ -811,7 +831,7 @@ AliMpTriggerReader::ReadSlat(const char* slatType, AliMp::PlaneType planeType)
                           pcb->DX()*2/scale,pcb->DY()*2/scale));
           }
         } 
-        StdoutToAliError(fMotifMap.Print(););
+        StdoutToAliError(fMotifMap->Print(););
       }
     }
     else