]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONTriggerIO.cxx
Fixes for #73467: Corrupted MUON hits when using AliRoot with Root v5.27/05 and v5...
[u/mrichter/AliRoot.git] / MUON / AliMUONTriggerIO.cxx
index 343b1c54e5f48e9aac74cc5e08b8d6433034fac6..ac6012c6dd17111ce4c6d5b2b434d60d728ad9d5 100644 (file)
@@ -55,8 +55,7 @@ const UInt_t AliMUONTriggerIO::fgkLocalLutSize = 1 << 14; // 16384
 //_____________________________________________________________________________
 AliMUONTriggerIO::AliMUONTriggerIO() 
     : TObject(), 
-      fRegionalTrigger(),
-      fGlobalCrate()
+      fRegionalTrigger()
 {
   /// ctor
 }
@@ -64,8 +63,7 @@ AliMUONTriggerIO::AliMUONTriggerIO()
 //_____________________________________________________________________________
 AliMUONTriggerIO::AliMUONTriggerIO(const char* regionalFileToRead) 
     :TObject(), 
-     fRegionalTrigger(),
-     fGlobalCrate()
+     fRegionalTrigger()
 {
   /// ctor
   ReadRegionalConfig(regionalFileToRead,0);
@@ -211,11 +209,11 @@ AliMUONTriggerIO::ReadLocalMasks(const char* localFile, AliMUONVStore& localMask
   
   UShort_t maskBuffer[8];
   
-  Int_t nLocalBoards(0);
-  
+  Int_t localBoardIndex(0);
+    
   while ( fread ( maskBuffer, 2, 8, fp ) )
   {
-    Int_t localBoardId = LocalBoardId(nLocalBoards);
+    Int_t localBoardId = fRegionalTrigger.LocalBoardId(localBoardIndex);
     AliDebug(1,Form("LB %03d X1 %4x X2 %4x X3 %4x X4 %4x "
                     "Y1 %4x Y2 %4x Y3 %4x Y4 %4x",
                     localBoardId,
@@ -228,28 +226,32 @@ AliMUONTriggerIO::ReadLocalMasks(const char* localFile, AliMUONVStore& localMask
                     maskBuffer[6],
                     maskBuffer[7]));
     
-    if ( localBoardId ) 
+    if ( localBoardId > 0 
     {
       AliMUONVCalibParam* localBoard = new AliMUONCalibParamNI(1,8,localBoardId,0,0);
       for ( Int_t index = 0; index < 8; ++index )
       {
-       localBoard->SetValueAsInt(index,0,maskBuffer[index]);
+        localBoard->SetValueAsInt(index,0,maskBuffer[index]);
       }
       localMasks.Add(localBoard);
     }
+    else
+    {
+      AliError(Form("Oups. Got localBoardId=%d for index=%d",localBoardId,localBoardIndex));
+    }
     
-    ++nLocalBoards;
+    ++localBoardIndex;
   }
   
-  if ( nLocalBoards != NofLocalBoards() ) 
+  if ( localBoardIndex != NofLocalBoards() ) 
   {
     AliError(Form("Read %d out of %d local boards",
-                  nLocalBoards, NofLocalBoards()));
+                  localBoardIndex, NofLocalBoards()));
   }
   
   fclose(fp);
   
-  return nLocalBoards;
+  return localBoardIndex+1;
 }
 
 //_____________________________________________________________________________
@@ -370,7 +372,7 @@ AliMUONTriggerIO::ReadLUT(const char* lutFileToRead, AliMUONTriggerLut& lut)
   
   for ( Int_t i = 0; i < NofLocalBoards(); ++i ) 
   {
-    ReadLocalLUT(lut,LocalBoardId(i),flut);
+    ReadLocalLUT(lut,fRegionalTrigger.LocalBoardId(i),flut);
   }
   
   fclose(flut);
@@ -382,32 +384,38 @@ AliMUONTriggerIO::ReadLUT(const char* lutFileToRead, AliMUONTriggerLut& lut)
 //_____________________________________________________________________________
 Bool_t 
 AliMUONTriggerIO::ReadConfig(const char* localFile,
-                            const char* regionalFile,
-                            const char* globalFile,
-                            AliMUONVStore* localMasks,
-                            AliMUONRegionalTriggerConfig* regionalConfig,
-                            AliMUONGlobalCrateConfig* globalConfig)
+                             const char* regionalFile,
+                             const char* globalFile,
+                             AliMUONVStore* localMasks,
+                             AliMUONRegionalTriggerConfig* regionalConfig,
+                             AliMUONGlobalCrateConfig* globalConfig)
 {
   /// Fill the various masks store from files
   
-  if ( !regionalFile ) 
+  if ( !regionalFile || strlen(regionalFile)==0 
   {
     AliError("Must have a regional file name to proceeed");
     return kFALSE;
   }
   
-  Int_t nCrates = ReadRegionalConfig(regionalFile, regionalConfig);
+  AliDebug(1,Form("regionalConfig=%p",regionalConfig));
   
-  if (!nCrates) return kFALSE;
+  Int_t nCrates = ReadRegionalConfig(regionalFile, regionalConfig);
+
+  if (!nCrates) 
+  {
+    AliError("nCrates=0 !");
+    return kFALSE;
+  }
   
-  if (localMasks && localFile)
+  if (localMasks && localFile && strlen(localFile) > 0 )
   {
     Int_t nLocal = ReadLocalMasks(localFile,*localMasks);
     AliDebug(1,Form("Read masks for %d local boards",nLocal));
   }
   
   Int_t nDarc = ReadGlobalConfig(globalFile, globalConfig);
-  AliDebug(1,Form("Read disable for %d DARC boards",nDarc));
+  AliDebug(1,Form("Read config for %d DARC boards",nDarc));
   
   if (!nDarc) return kFALSE;
   
@@ -418,7 +426,7 @@ AliMUONTriggerIO::ReadConfig(const char* localFile,
 
 //_____________________________________________________________________________
  Int_t 
- AliMUONTriggerIO::ReadGlobalConfig(const char* globalFile, AliMUONGlobalCrateConfig* globalConfig)
+ AliMUONTriggerIO::ReadGlobalConfig(const char* globalFile, AliMUONGlobalCrateConfig* globalConfig) const
 {
   /// read the global crate file
   /// the masks are disable bit for each crate, 8 per darc board
@@ -435,6 +443,9 @@ Int_t
 AliMUONTriggerIO::ReadRegionalConfig(const char* regionalFile, AliMUONRegionalTriggerConfig* regionalConfig)
 {
   /// Read regional file to fill  
+  
+  AliDebug(1,Form("regionalConfig=%p",regionalConfig));
+  
   Int_t nCrates = 0;
   if ( !(nCrates = regionalConfig->ReadData(regionalFile)) ) return 0;
 
@@ -467,7 +478,7 @@ AliMUONTriggerIO::WriteLUT(const AliMUONTriggerLut& lut,
   
   for ( Int_t i = 0; i < NofLocalBoards(); ++i ) 
   {
-    WriteLocalLUT(lut,LocalBoardId(i),flut);
+    WriteLocalLUT(lut,fRegionalTrigger.LocalBoardId(i),flut);
   }
   
   fclose(flut);
@@ -481,14 +492,14 @@ Bool_t
 AliMUONTriggerIO::WriteConfig(const char* localFile,
                             const char* regionalFile,
                             const char* globalFile,
-                            AliMUONVStore* localMasks,
+                            const AliMUONVStore* localMasks,
                     AliMUONRegionalTriggerConfig* regionalConfig,
                     AliMUONGlobalCrateConfig* globalConfig) const
 {
 /// write config files
 
     Bool_t ok;
-    ok  = WriteLocalMasks(localFile, *localMasks, regionalConfig);
+    ok  = WriteLocalMasks(localFile, *localMasks);
     ok &= WriteRegionalConfig(regionalFile, regionalConfig);
     ok &= WriteGlobalConfig(globalFile, globalConfig);
     
@@ -515,11 +526,11 @@ AliMUONTriggerIO::WriteGlobalConfig(const char* globalFile, AliMUONGlobalCrateCo
   }
    
   out << globalConfig->GetName() << endl;
-  out << globalConfig->GetGlobalCrateEnable() << endl;
+  out << Form("0x%x",globalConfig->GetGlobalCrateEnable()) << endl;
   
   // Jtag
   out << globalConfig->GetJtagName() << endl;
-  out << Form("0x%08x", globalConfig->GetJtagVmeAddr()) << endl;
+  out << Form("0x%08lx", globalConfig->GetJtagVmeAddr()) << endl;
   out << Form("%d %d %d", globalConfig->GetJtagClockDiv(), 
               globalConfig->GetJtagRxPhase(), globalConfig->GetJtagRdDelay()) << endl;
  
@@ -537,7 +548,7 @@ AliMUONTriggerIO::WriteGlobalConfig(const char* globalFile, AliMUONGlobalCrateCo
   
   // first darc board
   out << globalConfig->GetFirstDarcName() << endl;
-  out << Form("0x%08x", globalConfig->GetFirstDarcVmeAddr()) << endl;
+  out << Form("0x%08lx", globalConfig->GetFirstDarcVmeAddr()) << endl;
   out << globalConfig->GetFirstDarcType() << endl;
   disable = globalConfig->GetFirstDarcDisable();
   out << Form("0x%02x", disable) << endl;
@@ -548,7 +559,7 @@ AliMUONTriggerIO::WriteGlobalConfig(const char* globalFile, AliMUONGlobalCrateCo
   
   // second darc board
   out << globalConfig->GetSecondDarcName() << endl;
-  out << Form("0x%08x", globalConfig->GetSecondDarcVmeAddr()) << endl;
+  out << Form("0x%08lx", globalConfig->GetSecondDarcVmeAddr()) << endl;
   out << globalConfig->GetSecondDarcType() << endl;
   disable = globalConfig->GetSecondDarcDisable();
   out << Form("0x%02x", disable) << endl;
@@ -559,13 +570,13 @@ AliMUONTriggerIO::WriteGlobalConfig(const char* globalFile, AliMUONGlobalCrateCo
   
   // global board
   out << globalConfig->GetGlobalName() << endl;
-  out << Form("0x%08x", globalConfig->GetGlobalVmeAddr()) << endl;
+  out << Form("0x%08lx", globalConfig->GetGlobalVmeAddr()) << endl;
   for (Int_t i = 0; i < globalConfig->GetGlobalNofRegisters(); ++i)
     out << Form("0x%x", globalConfig->GetGlobalRegister(i)) << endl;
   
   // Fet board
   out << globalConfig->GetFetName() << endl;
-  out << Form("0x%08x", globalConfig->GetFetVmeAddr()) << endl;
+  out << Form("0x%08lx", globalConfig->GetFetVmeAddr()) << endl;
   for (Int_t i = 0; i < globalConfig->GetFetNofRegisters(); ++i)
     out << Form("0x%x", globalConfig->GetFetRegister(i)) << endl;
   
@@ -596,47 +607,62 @@ AliMUONTriggerIO::WriteRegionalConfig(const char* regionalFile, AliMUONRegionalT
       return kFALSE;
     }
 
-      
-   for (Int_t iCrate = 0; iCrate < nCrate; ++iCrate) 
-      {
-      AliMpTriggerCrate* crate = fRegionalTrigger.GetTriggerCrateFast(iCrate);
-      
-      AliMUONTriggerCrateConfig* crateConfig = regionalConfig->FindTriggerCrate(crate->GetName());
-      if (!crateConfig) 
+    Int_t nofDDLs = 0;
+    TString name;
+    AliMpTriggerCrate* crate;
+    for (Int_t ddlId = 0; ddlId < 2; ddlId++) // right & left side            
       {
-        AliError(Form("Cannot find crate %s in CDB", crate->GetName()));
-        return kFALSE;
+       for (Int_t crateId = 0; crateId < 8; crateId++) // 8 crates/regional boards for each side.
+         {
+           
+           name = AliMpTriggerCrate::GenerateName(crateId, ddlId, nofDDLs);
+           
+           crate = fRegionalTrigger.FindTriggerCrate(name, false);
+           
+           AliMUONTriggerCrateConfig* crateConfig = regionalConfig->FindTriggerCrate(crate->GetName());
+           if (!crateConfig) 
+             {
+               AliError(Form("Cannot find crate %s in CDB", crate->GetName()));
+               return kFALSE;
+             }
+           
+           out << crate->GetName()  << endl;
+           out << Form("%02x", crate->GetId())   << endl;
+           out << crateConfig->GetMode()  << endl;
+           out << crateConfig->GetCoinc() << endl;
+           out << Form("%04x", crateConfig->GetMask()) << endl;
+           out << Form("%02d",crate->GetNofLocalBoards()) << endl;
+           
+           for (Int_t iLocal = 0; iLocal < crate->GetNofLocalBoards(); ++iLocal) 
+             {
+               Int_t localBoardId = crate->GetLocalBoardId(iLocal);
+               
+               AliMpLocalBoard* board = fRegionalTrigger.FindLocalBoard(localBoardId);
+               
+               out << Form("%02d ", board->GetSlot())  
+                   << board->GetName() 
+                   << Form(" %03d ", localBoardId) 
+                   << Form("%03x", board->GetSwitch()) 
+                   << endl;
+               
+               out << " ";
+               
+               if (board->IsNotified()) {
+                 for (Int_t i = 0; i < board->GetNofDEs(); ++i)
+                   out << Form("%4d ", board->GetDEId(i));
+               } else {
+                 out << Form("%4d ", 0);
+               }
+               out << endl;
+               
+               // print copy card numbers & TC
+               out << Form(" %4d %4d", board->GetInputXfrom(), board->GetInputXto());
+               out << Form(" %4d %4d", board->GetInputYfrom(), board->GetInputYto());
+               out << Form(" %4d",     board->GetTC()) << endl;
+             }
+         }
       }
 
-      out << crate->GetName()  << endl;
-      out << Form("%02x", crate->GetId())   << endl;
-      out << crateConfig->GetMode()  << endl;
-      out << crateConfig->GetCoinc() << endl;
-      out << Form("%04x", crateConfig->GetMask()) << endl;
-
-      for (Int_t iLocal = 0; iLocal < crate->GetNofLocalBoards(); ++iLocal) 
-      {
-       Int_t localBoardId = crate->GetLocalBoardId(iLocal);
-        
-       AliMpLocalBoard* board = fRegionalTrigger.FindLocalBoard(localBoardId);
-        
-       out << Form("%02d ", board->GetSlot())  
-           << board->GetName() 
-           << Form(" %03d ", localBoardId) 
-           << Form("%03x", board->GetSwitch()) 
-           << endl;
-        out << " ";
-        for (Int_t i = 0; i < board->GetNofDEs(); ++i)
-          out << Form("%4d ", board->GetDEId(i));
-        out << endl;
-          
-        // print copy card numbers & TC
-        out << Form(" %4d %4d", board->GetInputXfrom(), board->GetInputXto());
-        out << Form(" %4d %4d", board->GetInputYfrom(), board->GetInputYto());
-        out << Form(" %4d",     board->GetTC()) << endl;
-      }
-    }
     out.close();
     
     return kTRUE;
@@ -645,7 +671,7 @@ AliMUONTriggerIO::WriteRegionalConfig(const char* regionalFile, AliMUONRegionalT
 
 //_____________________________________________________________________________
 Bool_t 
-AliMUONTriggerIO::WriteLocalMasks(const char* localFile, AliMUONVStore& localMasks, AliMUONRegionalTriggerConfig* regionalConfig) const
+AliMUONTriggerIO::WriteLocalMasks(const char* localFile, const AliMUONVStore& localMasks) const
 {
     /// write local mask
     /// removing/adding enable for a local board need a update of the configuration 
@@ -660,31 +686,23 @@ AliMUONTriggerIO::WriteLocalMasks(const char* localFile, AliMUONVStore& localMas
     }   
 
     UShort_t maskBuffer[8];
+    Int_t localBoardIndex(0);
+    while (localBoardIndex < NofLocalBoards()) {
 
-    for (Int_t iCrate = 0; iCrate < regionalConfig->GetNofTriggerCrates(); ++iCrate) 
-    {
-      AliMUONTriggerCrateConfig* crate = regionalConfig->GetTriggerCrateFast(iCrate);
-      
-      UShort_t mask = crate->GetMask(); // getting mask from current config
+      Int_t localBoardId = fRegionalTrigger.LocalBoardId(localBoardIndex);
 
-      for (Int_t iLocal = 0; iLocal < crate->GetNofLocalBoards(); ++iLocal) 
-      {
-       Int_t localBoardId = crate->GetLocalBoardId(iLocal);
+      AliMUONVCalibParam* localMask = 
+       static_cast<AliMUONVCalibParam*>(localMasks.FindObject(localBoardId));
 
-       if ( (mask >> iLocal ) & 0x1 
+      for (Int_t index = 0; index < 8; ++index
        {
-         AliMUONVCalibParam* localMask = 
-             static_cast<AliMUONVCalibParam*>(localMasks.FindObject(localBoardId));
-
-         for (Int_t index = 0; index < 8; ++index) 
-         {
-           maskBuffer[index] = localMask->ValueAsInt(index,0); 
-         }
-
-         fwrite ( maskBuffer, 2, 8, fp); 
+         maskBuffer[index] = localMask->ValueAsInt(index,0); 
        }
+      
+      fwrite ( maskBuffer, 2, 8, fp); 
+
+      ++localBoardIndex;
 
-      }
     }
 
     fclose(fp);
@@ -789,9 +807,19 @@ AliMUONTriggerIO::LocalBoardId(Int_t index) const
 {  
   /// Return the i-th localBoardId, or -1 if index is out of bounds
 
-  AliMpLocalBoard* board = fRegionalTrigger.GetLocalBoard(index);
-  if ( ! board ) return -1;
-  
-  return board->GetId(); 
+  return fRegionalTrigger.LocalBoardId(index);
 }
 
+
+//______________________________________________________________________________
+
+Int_t AliMUONTriggerIO::LocalBoardId(Int_t ddlId, Int_t crateId, Int_t localId) const
+{
+    /// Return local board id from crate and local indexes.
+    
+    Int_t nofDDLs = 0;
+    TString name = AliMpTriggerCrate::GenerateName(crateId, ddlId, nofDDLs);
+
+    AliMpTriggerCrate* crate = fRegionalTrigger.FindTriggerCrate(name, false);
+    return crate->GetLocalBoardId(localId);
+}