]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/mapping/AliMpRegionalTrigger.cxx
Fixing a backward compatibility issue
[u/mrichter/AliRoot.git] / MUON / mapping / AliMpRegionalTrigger.cxx
index 0dcab2a687abd3347c40e486ab3d6197a59f7043..ee1bf4d8b279c3afe8e4cbadf755ecd10aba2ba6 100644 (file)
 //-----------------------------------------------------------------------------
 
 #include "AliMpRegionalTrigger.h"
+#include "AliMpExMapIterator.h"
 #include "AliMpTriggerCrate.h"
 #include "AliMpLocalBoard.h"
 #include "AliMpConstants.h"
 #include "AliMpFiles.h"
+#include "AliMpDataStreams.h"
 #include "AliMpHelper.h"
 
 #include "AliLog.h"
@@ -46,32 +48,32 @@ ClassImp(AliMpRegionalTrigger)
 //______________________________________________________________________________
 AliMpRegionalTrigger::AliMpRegionalTrigger()
   : TObject(),
-    fTriggerCrates(true),
-    fLocalBoards(true)
+    fTriggerCrates(),
+    fLocalBoardMap(),
+    fLocalBoardArray(AliMpConstants::TotalNofLocalBoards()+1) // included non-notified boards
 {
-/// Standard constructor
+      /// Standard constructor
   
     fTriggerCrates.SetOwner(true);
     fTriggerCrates.SetSize(AliMpConstants::LocalBoardNofChannels());
-
-    fLocalBoards.SetOwner(true);
-    fLocalBoards.SetSize(AliMpConstants::TotalNofLocalBoards()); // included non-notified boards
 }
 
 //______________________________________________________________________________
 AliMpRegionalTrigger::AliMpRegionalTrigger(const AliMpRegionalTrigger& rhs)
   : TObject(rhs),
     fTriggerCrates(rhs.fTriggerCrates),
-    fLocalBoards(rhs.fLocalBoards)
+    fLocalBoardMap(rhs.fLocalBoardMap),
+    fLocalBoardArray(rhs.fLocalBoardArray)
 {
 /// Copy constructor
 }  
 
 //______________________________________________________________________________
-AliMpRegionalTrigger::AliMpRegionalTrigger(TRootIOCtor* /*ioCtor*/)
+AliMpRegionalTrigger::AliMpRegionalTrigger(TRootIOCtor* ioCtor)
   : TObject(),
-    fTriggerCrates(),
-    fLocalBoards()
+    fTriggerCrates(ioCtor),
+    fLocalBoardMap(ioCtor),
+    fLocalBoardArray()
 {
 /// Constructor for I0
 }
@@ -89,7 +91,7 @@ AliMpRegionalTrigger& AliMpRegionalTrigger::operator=(const AliMpRegionalTrigger
 
   // assignment operator
   fTriggerCrates = rhs.fTriggerCrates;
-  fLocalBoards = rhs.fLocalBoards;
+  fLocalBoardArray = rhs.fLocalBoardArray;
   
   return *this;
 }  
@@ -100,6 +102,107 @@ AliMpRegionalTrigger::~AliMpRegionalTrigger()
 /// Destructor
 }
 
+
+//
+// private methods
+//
+
+//______________________________________________________________________________
+Bool_t AliMpRegionalTrigger::ReadData(istream& in)
+{
+/// Load the Regional trigger from ASCII data files
+/// and fill objects. Return false if reading fails
+  
+  if ( !in.good() ) return kFALSE;
+   
+  Int_t localBoardId = 0;
+  TArrayI listInt;
+  UShort_t crateId;
+  Int_t nofBoards;
+  Int_t localBoardIndex(0);
+  char line[80];
+  // decode file and store in objects
+  while (!in.eof())
+  {
+    in.getline(line,80);
+    if (!strlen(line)) break;
+    TString crateName(AliMpHelper::Normalize(line));
+    
+    in.getline(line,80);    
+    sscanf(line,"%hx",&crateId);
+
+    // skip data which are not stored in mapping object
+    // (mode, coincidence, mask)
+    in.getline(line,80);
+    in.getline(line,80);
+    in.getline(line,80);
+    
+    // read # local board
+    in.getline(line,80);
+    sscanf(line,"%d",&nofBoards);
+    
+    AliMpTriggerCrate* crate 
+      = (AliMpTriggerCrate*)(fTriggerCrates.GetValue(crateName.Data()));
+    if (!crate)  {
+      crate = new AliMpTriggerCrate(crateName.Data(), crateId);
+      fTriggerCrates.Add(crateName.Data(), crate);
+    }
+
+    Char_t localBoardName[20];
+    Int_t slot;
+    UInt_t switches;
+    
+    for ( Int_t i = 0; i < nofBoards; ++i ) 
+    {
+        in.getline(line,80);
+        sscanf(line,"%02d %s %03d %03x",&slot,localBoardName,&localBoardId,&switches);
+        AliMpLocalBoard* board = new AliMpLocalBoard(localBoardId, localBoardName, slot); 
+        board->SetSwitch(switches);
+        board->SetCrate(crateName);
+        
+        if (localBoardId > AliMpConstants::NofLocalBoards())
+          board->SetNotified(false); // copy cards
+        
+        crate->AddLocalBoard(localBoardId);
+        
+        // add  list of DEs for local board
+        listInt.Reset();
+        in.getline(line,80);
+        TString tmp(AliMpHelper::Normalize(line));
+        AliMpHelper::DecodeName(tmp,' ',listInt);
+        for (Int_t ii = 0; ii < listInt.GetSize(); ++ii) { 
+          if ( listInt[ii] ) board->AddDE(listInt[ii]);
+        }  
+         
+        // set copy number and transverse connector
+        in.getline(line,80);
+        TString tmp1 = AliMpHelper::Normalize(line);
+        AliMpHelper::DecodeName(tmp1,' ',listInt);
+        
+        board->SetInputXfrom(listInt[0]);
+        board->SetInputXto(listInt[1]);
+        
+        board->SetInputYfrom(listInt[2]);
+        board->SetInputYto(listInt[3]);
+        
+        board->SetTC(listInt[4]);
+        
+        // add local board into array
+        fLocalBoardArray.AddAt(board,localBoardIndex);
+        fLocalBoardMap.Add(board->GetId(),board);
+      
+      ++localBoardIndex;
+    }
+  }
+
+  AliDebug(1,Form("%d trigger crate created",fTriggerCrates.GetSize()));
+  AliDebug(1,Form("%d local board added to the map",fLocalBoardMap.GetSize()));
+  AliDebug(1,Form("%d local board referenced from the array",fLocalBoardArray.GetLast()+1));
+  
+  return kTRUE;
+}  
+
 //
 // public methods
 //
@@ -110,119 +213,49 @@ Bool_t AliMpRegionalTrigger::ReadData(const TString& fileName)
 /// Load the Regional trigger from ASCII data files
 /// and return its instance
     
-    TString inFileName(fileName);
-    if ( inFileName == "" )
-      inFileName = AliMpFiles::LocalTriggerBoardMapping();
+    AliDebugStream(2) << "Read data from file " << fileName.Data() << endl;
     
+    TString inFileName(fileName);
     inFileName = gSystem->ExpandPathName(inFileName.Data());
-
-    ifstream in(inFileName.Data(), ios::in);
-
-    if (!in) {
+    ifstream inFile(inFileName.Data(), ios::in);
+    if ( ! inFile.good() ) {
       AliErrorStream()
          << "Local Trigger Board Mapping File " << fileName.Data() << " not found" << endl;
       return kFALSE;
     }
+    
+    return ReadData(inFile);  
+}
 
-    AliMpLocalBoard* board = 0x0;
-    AliMpTriggerCrate* crate = 0x0;
-
-
-    Int_t localBoardId = 0;
-    TArrayI list;
-    UShort_t crateId, mask;
-    Int_t mode, coincidence;
+//______________________________________________________________________________
+Bool_t AliMpRegionalTrigger::ReadData(const AliMpDataStreams& dataStreams)
+{
+/// Load the Regional trigger from ASCII data files
+/// and return its instance
     
-    char line[80];
-   
-    while (!in.eof())
-    {
-      in.getline(line,80);
-      if (!strlen(line)) break;
-      TString crateName(AliMpHelper::Normalize(line));
-      
-      in.getline(line,80);    
-      sscanf(line,"%hx",&crateId);
-  
-      in.getline(line,80);
-      sscanf(line,"%d",&mode);
-      
-      in.getline(line,80);
-      sscanf(line,"%d",&coincidence);
-      
-      in.getline(line,80);
-      sscanf(line,"%hx",&mask);
-      
-      crate = (AliMpTriggerCrate*)(fTriggerCrates.GetValue(crateName.Data()));
-      if (!crate) 
-      {
-        // cout << "Creating crate: " << crateName.Data() << endl;
-        crate = new AliMpTriggerCrate(crateName.Data(), crateId, mask, mode, coincidence);
-        fTriggerCrates.Add(crateName.Data(), crate);
-      }
-      
-      Char_t localBoardName[20];
-      Int_t slot;
-      UInt_t switches;
-      
-      for ( Int_t i = 0; i < AliMpConstants::LocalBoardNofChannels(); ++i ) 
-      {
-        if ( (mask >> i ) & 0x1 )
-        {
-          in.getline(line,80);
-          sscanf(line,"%02d %s %03d %03x",&slot,localBoardName,&localBoardId,&switches);
-          // cout << "  Creating local board: " << localBoardId << endl;
-          board = new AliMpLocalBoard(localBoardId, localBoardName, slot); 
-          board->SetSwitch(switches);
-          board->SetCrate(crateName);
-          
-          if (localBoardId > AliMpConstants::NofLocalBoards())
-            board->SetNotified(false); // copy cards
-          
-          crate->AddLocalBoard(localBoardId);
-
-          // add  list of DEs for local board
-          list.Reset();
-          in.getline(line,80);
-          TString tmp(AliMpHelper::Normalize(line));
-          AliMpHelper::DecodeName(tmp,' ',list);
-          for (Int_t i = 0; i < list.GetSize(); ++i) { 
-            if ( list[i] ) board->AddDE(list[i]);
-          }  
-
-          // set copy number and transverse connector
-          in.getline(line,80);
-          tmp = AliMpHelper::Normalize(line);
-          AliMpHelper::DecodeName(tmp,' ',list);
+    AliDebugStream(2) << "Read data from stream " << endl;
+    istream& in
+       = dataStreams.
+           CreateDataStream(AliMpFiles::LocalTriggerBoardMapping());
+           
+    Bool_t result = ReadData(in);
     
-          board->SetInputXfrom(list[0]);
-          board->SetInputXto(list[1]);
-          
-          board->SetInputYfrom(list[2]);
-          board->SetInputYto(list[3]);
-          
-          board->SetTC(list[4]);
-          
-          // add local board into map
-          fLocalBoards.Add(board->GetId(), board);
-        }
-      }
-    }
-    return kTRUE;
+    delete &in;
+    return result;        
 }
 
 //______________________________________________________________________________
 AliMpLocalBoard* AliMpRegionalTrigger::FindLocalBoard(Int_t localBoardId, 
                                                       Bool_t warn) const {
-    /// Return bus patch with given Id
+    /// Return local board with given Id
 
     AliMpLocalBoard* localBoard
-      = (AliMpLocalBoard*) fLocalBoards.GetValue(localBoardId);
-
+      = static_cast<AliMpLocalBoard*>(fLocalBoardMap.GetValue(localBoardId));
+    
     if ( ! localBoard && warn ) {
         AliErrorStream()
-        << "Local board with Id = " << localBoardId << " not defined." << endl;
-    }
+        << "Loacl board with localBoardId = " << localBoardId << " not found." << endl;
+    }      
 
     return localBoard;
 }
@@ -252,47 +285,50 @@ Int_t AliMpRegionalTrigger::GetNofTriggerCrates() const
 }
 
 //______________________________________________________________________________
-AliMpTriggerCrate* AliMpRegionalTrigger::GetTriggerCrate(Int_t index) const
+Int_t AliMpRegionalTrigger::GetNofLocalBoards() const
 { 
-    /// Return the trigger crates with given index;
-
-    return static_cast<AliMpTriggerCrate*>(fTriggerCrates.GetObject(index))
+    /// Return number of local boards
+    
+    return fLocalBoardArray.GetLast()+1
 }
 
 //______________________________________________________________________________
-AliMpTriggerCrate* AliMpRegionalTrigger::GetTriggerCrateFast(Int_t index) const
-{ 
-    /// Return the trigger crates with given index;
-    /// the index is not checked as we use the fast method in AliMpExMap.
+TIterator* 
+AliMpRegionalTrigger::CreateCrateIterator() const
+{
+  /// Create iterator over crates
 
-    return static_cast<AliMpTriggerCrate*>(fTriggerCrates.GetObjectFast(index)); 
+  return fTriggerCrates.CreateIterator();
 }
 
 //______________________________________________________________________________
-Int_t AliMpRegionalTrigger::GetNofLocalBoards() const
-{ 
-    /// Return number of local boards
-    
-    return fLocalBoards.GetSize(); 
-}
+TIterator* 
+AliMpRegionalTrigger::CreateLocalBoardIterator() const
+{
+  /// Create iterator over local boards
 
-//______________________________________________________________________________
-AliMpLocalBoard* AliMpRegionalTrigger::GetLocalBoard(Int_t index) const
-{ 
-    /// Return local board with given index;
-    
-    return static_cast<AliMpLocalBoard*>(fLocalBoards.GetObject(index)); 
+  return fLocalBoardArray.MakeIterator();
 }
 
 //______________________________________________________________________________
-AliMpLocalBoard* AliMpRegionalTrigger::GetLocalBoardFast(Int_t index) const
-{ 
-    /// Return local board with given index;
-    /// the index is not checked as we use the fast method in AliMpExMap.
-    
-    return static_cast<AliMpLocalBoard*>(fLocalBoards.GetObjectFast(index)); 
+Int_t 
+AliMpRegionalTrigger::LocalBoardId(Int_t index) const
+{
+  /// Return local board Id for the local boards with a given index
+
+  AliMpLocalBoard* lb = static_cast<AliMpLocalBoard*>(fLocalBoardArray.At(index));
+  if (lb)
+  {
+    return lb->GetId();
+  }
+  AliError(Form("Could not get local board at index %d",index));
+  return -1;
 }
 
+//______________________________________________________________________________
+void AliMpRegionalTrigger::SetTriggerCratesOwner(Bool_t owner)
+{
+  /// Set ownership to trigger crates
 
-
-
+  fTriggerCrates.SetOwner(owner);
+}