]> 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 9ad5d7c3fa649df74df5dabfcbb52385ccd9edf2..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>
 
-//
+//-----------------------------------------------------------------------------
 /// \class AliMpTriggerReader
 /// Read trigger slat ASCII files
 /// Basically provides two methods:
@@ -48,6 +49,7 @@
 /// - AliMpPCB* ReadPCB()
 ///
 /// \author Laurent Aphecetche
+//-----------------------------------------------------------------------------
 
 /// \cond CLASSIMP
 ClassImp(AliMpTriggerReader)
@@ -60,9 +62,9 @@ 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()
 {
   ///
@@ -545,6 +547,8 @@ AliMpTriggerReader::ReadLocalBoardMapping()
 
   fLocalBoardMap.DeleteAll();
   
+  UShort_t mask;
+  
   ifstream in(filename.Data());
   if (!in.good())
   {
@@ -553,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();
 }
 
@@ -637,7 +654,7 @@ AliMpTriggerReader::ReadPCB(const char* pcbType)
       {
         AliError("pcb not null as expected");
       }
-      pcb = new AliMpPCB(&fMotifMap,pcbType,padSizeX*scale,padSizeY*scale,
+      pcb = new AliMpPCB(fMotifMap,pcbType,padSizeX*scale,padSizeY*scale,
                          pcbSizeX*scale,pcbSizeY*scale);
     }
     
@@ -652,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
         {
@@ -671,7 +688,7 @@ AliMpTriggerReader::ReadPCB(const char* pcbType)
                           sMotifType.Data(),id.Data()));        
         }
         specialMotif = reader.BuildMotifSpecial(sMotifSpecial,motifType,scale);
-        fMotifMap.AddMotif(specialMotif);
+        fMotifMap->AddMotif(specialMotif);
       }
       else
       {
@@ -693,12 +710,12 @@ 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
       {
@@ -762,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;
@@ -814,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