]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONRegionalTriggerConfig.cxx
Adding code to patch St1 HV mapping
[u/mrichter/AliRoot.git] / MUON / AliMUONRegionalTriggerConfig.cxx
index f745d72c8d9fa6c1eb446f8f7835803df92f4b82..f6175d927a7d2284735b3a650836eaa45dc4b5f1 100644 (file)
 #include "AliMUONRegionalTriggerConfig.h"
 #include "AliMUONTriggerCrateConfig.h"
 #include "AliMpConstants.h"
-#include "AliMpFiles.h"
 #include "AliMpHelper.h"
-
+#include "AliMpExMapIterator.h"
+#include "AliMpRegionalTrigger.h"
 #include "AliLog.h"
 
 #include <TArrayI.h>
 #include <Riostream.h>
 #include <TClass.h>
 #include <TSystem.h>
+#include <TList.h>
 
 
+using std::cout;
+using std::endl;
+using std::ifstream;
+using std::ios;
 /// \cond CLASSIMP
 ClassImp(AliMUONRegionalTriggerConfig)
 /// \endcond
@@ -45,7 +50,7 @@ ClassImp(AliMUONRegionalTriggerConfig)
 //______________________________________________________________________________
 AliMUONRegionalTriggerConfig::AliMUONRegionalTriggerConfig()
   : TObject(),
-    fTriggerCrates(true)
+    fTriggerCrates()
 {
 /// Standard constructor
   
@@ -91,85 +96,97 @@ AliMUONRegionalTriggerConfig::~AliMUONRegionalTriggerConfig()
 //______________________________________________________________________________
 Int_t AliMUONRegionalTriggerConfig::ReadData(const TString& fileName)
 {
-/// Load the Regional trigger from ASCII data files
-/// and return its instance
-    
-    TString inFileName(fileName);
-    if ( inFileName == "" )
-      inFileName = AliMpFiles::LocalTriggerBoardMapping();
-    
-    inFileName = gSystem->ExpandPathName(inFileName.Data());
-
-    ifstream in(inFileName.Data(), ios::in);
-
-    if (!in) {
-      AliErrorStream()
-         << "Local Trigger Board Mapping File " << fileName.Data() << " not found" << endl;
-      return kFALSE;
+    /// Load the Regional trigger from ASCII data file
+
+    // Read first data contained in mapping object
+    //
+    AliMpRegionalTrigger mpRegionalTrigger;
+    mpRegionalTrigger.SetTriggerCratesOwner(kFALSE); 
+    if ( ! mpRegionalTrigger.ReadData(fileName) ) {
+        AliErrorStream()
+           << "Reading mapping regional trigger from file " << fileName.Data() << " failed." 
+           << endl;
+        return 0;
     }
 
-    AliMUONTriggerCrateConfig* crate = 0x0;
+    // Fill calibration object from mapping object
+    //
+    TIterator* it = mpRegionalTrigger.CreateCrateIterator();
+    AliMpTriggerCrate* mpTriggerCrate;
+    while ( ( mpTriggerCrate = (AliMpTriggerCrate*)it->Next() ) ) {
+      fTriggerCrates.Add(
+        mpTriggerCrate->GetName(), new AliMUONTriggerCrateConfig(mpTriggerCrate));
+    }    
+    delete it;     
+        
+    // 
+
+    // Read remaining calibration data from file
+    //
+    ifstream in(fileName.Data(), ios::in);
+    if ( ! in.good() ) {
+        AliErrorStream()
+           << "Local Trigger Board Mapping File " << fileName.Data() << " not found" << endl;
+        return 0;
+    }
 
-    TArrayI list;
-    UShort_t crateId, mask;
+    UShort_t mask;
     Int_t mode, coincidence;
-    Int_t localBoardId = 0;
+    Int_t nofBoards;
     char line[80];
-   
+
+    // decode file and store in objects
     while (!in.eof())
     {
+      // Get name
       in.getline(line,80);
       if (!strlen(line)) break;
       TString crateName(AliMpHelper::Normalize(line));
-      
+
       in.getline(line,80);    
-      sscanf(line,"%hx",&crateId);
   
+      // read mode
       in.getline(line,80);
       sscanf(line,"%d",&mode);
-      
+
+      // read coincidence
       in.getline(line,80);
       sscanf(line,"%d",&coincidence);
-      
+
+      // read mask
       in.getline(line,80);
       sscanf(line,"%hx",&mask);
       
-      crate = (AliMUONTriggerCrateConfig*)(fTriggerCrates.GetValue(crateName.Data()));
-      if (!crate) 
-      {
-        // cout << "Creating crate: " << crateName.Data() << endl;
-        crate = new AliMUONTriggerCrateConfig(crateName.Data(), crateId, mask, mode, coincidence);
-        fTriggerCrates.Add(crateName.Data(), crate);
+      // read # local board
+      in.getline(line,80);
+      sscanf(line,"%d",&nofBoards);
+
+      AliMUONTriggerCrateConfig*  crateConfig 
+        = (AliMUONTriggerCrateConfig*)(fTriggerCrates.GetValue(crateName.Data()));
+        
+      // This should never happen, but let's test it anyway  
+      if ( ! crateConfig ) {
+        AliErrorStream()
+           << "Cannot find AliMUONTriggerCrateConfig " << crateName.Data() << endl;
+        return 0;
       }
+       
+      crateConfig->SetMode(mode);
+      crateConfig->SetCoinc(coincidence);
+      crateConfig->SetMask(mask);
       
-      Char_t localBoardName[20];
-      Int_t slot;
-      UInt_t switches;
-      
-      for ( Int_t i = 0; i < AliMpConstants::LocalBoardNofChannels(); ++i ) 
-      {
-        if ( (mask >> i ) & 0x1 )
-        {
-          // read local board
-          in.getline(line,80);
-          sscanf(line,"%02d %s %03d %03x",&slot,localBoardName,&localBoardId,&switches);
-          crate->AddLocalBoard(localBoardId);
-
-          // skip DEs for local board
-          in.getline(line,80);
-
-          // skip copy number and transverse connector
+      // Skipp local board data
+      for ( Int_t i = 0; i < 3*nofBoards; ++i ) 
           in.getline(line,80);
-         }
-      }
     }
+
     return fTriggerCrates.GetSize();
 }
 
-
 //______________________________________________________________________________
 AliMUONTriggerCrateConfig* AliMUONRegionalTriggerConfig::FindTriggerCrate(TString name, 
-                                                          Bool_t warn) const  {
+                                                          Bool_t warn) const  
+{
     /// Return trigger crate with given name
 
     AliMUONTriggerCrateConfig* crate
@@ -192,20 +209,11 @@ Int_t AliMUONRegionalTriggerConfig::GetNofTriggerCrates() const
 }
 
 //______________________________________________________________________________
-AliMUONTriggerCrateConfig* AliMUONRegionalTriggerConfig::GetTriggerCrate(Int_t index) const
+TIterator* 
+AliMUONRegionalTriggerConfig::CreateCrateIterator() const 
 { 
-    /// Return the trigger crates with given index;
-
-    return static_cast<AliMUONTriggerCrateConfig*>(fTriggerCrates.GetObject(index)); 
-}
-
-//______________________________________________________________________________
-AliMUONTriggerCrateConfig* AliMUONRegionalTriggerConfig::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.
-
-    return static_cast<AliMUONTriggerCrateConfig*>(fTriggerCrates.GetObjectFast(index)); 
+  /// Return trigger crates iterator
+  return fTriggerCrates.CreateIterator(); 
 }