Changing once more (hopefully we get it correct this time...) the logic to trig the...
authorlaphecet <laphecet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 16 Feb 2010 10:07:13 +0000 (10:07 +0000)
committerlaphecet <laphecet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 16 Feb 2010 10:07:13 +0000 (10:07 +0000)
MUON/AliMUONCDB.cxx
MUON/AliMUONPedestalSubprocessor.cxx
MUON/AliMUONPedestalSubprocessor.h
MUON/AliMUONTrackerConditionDataMaker.cxx
MUON/AliMUONTrackerIO.cxx
MUON/AliMUONTrackerIO.h
MUON/TestMUONPreprocessor.C

index 25feec7..54e97ca 100644 (file)
@@ -1402,9 +1402,8 @@ AliMUONCDB::WriteConfig(Int_t startRun, Int_t endRun)
   }
   
   AliMUON2DMap config(kTRUE);
-  Bool_t dummy(kTRUE);
   
-  AliMUONTrackerIO::DecodeConfig(lines.str().c_str(),config,dummy);
+  AliMUONTrackerIO::DecodeConfig(lines.str().c_str(),config);
   
   WriteToCDB("MUON/Calib/Config",&config,startRun,endRun,kTRUE);
 }
index 8dba620..a6f7de1 100644 (file)
@@ -18,6 +18,7 @@
 #include "AliMUONPedestalSubprocessor.h"
 
 #include "AliCDBMetaData.h"
+#include "AliCDBEntry.h"
 #include "AliDAQ.h"
 #include "AliLog.h"
 #include "AliMUON2DMap.h"
@@ -72,6 +73,51 @@ AliMUONPedestalSubprocessor::~AliMUONPedestalSubprocessor()
 }
 
 //_____________________________________________________________________________
+Bool_t
+AliMUONPedestalSubprocessor::HasConfigChanged(const AliMUONVStore& newConfig) const
+{
+  /// Check whether the config changed. 
+  /// Any error will return kTRUE to trig a config upload (safer way).
+  
+  AliCDBEntry* entry = Master()->GetFromOCDB("Calib","Config");
+  if (!entry)
+  {
+    AliError("Could not get MUON/Calib/Config entry for current run ! That's not OK !");
+    return kTRUE;
+  }
+  AliMUONVStore* oldConfig = dynamic_cast<AliMUONVStore*>(entry->GetObject());
+  if (!oldConfig)
+  {
+    AliError("Could not get MUON/Calib/Config object for current run (wrong type ?) ! That's not OK !");
+    return kTRUE;
+  }
+  
+  if ( oldConfig->GetSize() != newConfig.GetSize() ) 
+  {
+    return kTRUE;
+  }
+  
+  TIter next(oldConfig->CreateIterator());
+  AliMUONVCalibParam* old;
+  
+  while ( ( old = static_cast<AliMUONVCalibParam*>(next()) ) )
+  {
+    Int_t detElemId = old->ID0();
+    Int_t manuId = old->ID1();
+    
+    if ( ! newConfig.FindObject(detElemId,manuId) )
+    {
+      // not found in new. Configurations are different. Return right now.
+      return kTRUE;
+    }
+  }
+  
+  // all tests OK. Configuration has not changed.
+  return kFALSE;
+}
+
+
+//_____________________________________________________________________________
 Bool_t 
 AliMUONPedestalSubprocessor::Initialize(Int_t run, UInt_t startTime, UInt_t endTime)
 {
@@ -125,8 +171,6 @@ AliMUONPedestalSubprocessor::Initialize(Int_t run, UInt_t startTime, UInt_t endT
   Int_t nconf(0);
   Int_t nconfFiles(0);
   
-  fConfigChanged = kFALSE;
-  
   while ( ( o = static_cast<TObjString*>(nextConf()) ) )
   {
     TString fileName(Master()->GetFile(kSystem,kIdConf,o->GetName()));
@@ -150,11 +194,7 @@ AliMUONPedestalSubprocessor::Initialize(Int_t run, UInt_t startTime, UInt_t endT
     return kFALSE;
   }
   
-  if ( nconfFiles > 0 && nconfFiles < AliDAQ::NumberOfLdcs("MUONTRK") )
-  {
-    // force a writing of the configuration for any incomplete configuration
-    fConfigChanged = kTRUE;
-  }
+  fConfigChanged = HasConfigChanged(*fConfig);
   
   return kTRUE;
 }
@@ -254,8 +294,6 @@ AliMUONPedestalSubprocessor::ReadConfigFile(const char* filename)
   /// Read the configuration from an ASCII file.                              
   /// Format of that file is one line per manu :                              
   /// BUS_PATCH MANU_ADDR
-  /// And the first line contains "unchanged" if the configuration is the same
-  /// as before.
   /// Return kFALSE if reading was not successfull.                           
   ///
   
@@ -263,7 +301,7 @@ AliMUONPedestalSubprocessor::ReadConfigFile(const char* filename)
   
   Master()->Log(Form("Reading %s",sFilename.Data()));
   
-  Int_t n = AliMUONTrackerIO::ReadConfig(sFilename.Data(),*fConfig,fConfigChanged);
+  Int_t n = AliMUONTrackerIO::ReadConfig(sFilename.Data(),*fConfig);
   
   switch (n)
   {
index cc231eb..2930fea 100644 (file)
@@ -38,6 +38,8 @@ private:
   Int_t ReadPedestalFile(const char* filename);
   Int_t ReadConfigFile(const char* filename);
 
+  Bool_t HasConfigChanged(const AliMUONVStore& newConfig) const;
+
 private:
   AliMUONVStore* fPedestals; //!< Pedestals for the MUON TRK
   AliMUONVStore* fConfig; //!< Configuration (i.e. list of (buspatch,manu)) for the MUON TRK
index eed8752..cf2e056 100644 (file)
@@ -409,8 +409,7 @@ AliMUONTrackerConditionDataMaker::CreateStore(Int_t runNumber,
     else
     {
       tmp = new AliMUON2DMap(kTRUE);
-      Bool_t changed(kFALSE);
-      AliMUONTrackerIO::DecodeConfig(source,*tmp,changed);
+      AliMUONTrackerIO::DecodeConfig(source,*tmp);
     }
     if ( tmp ) 
     {
index a99ba61..b83e688 100644 (file)
@@ -489,15 +489,12 @@ AliMUONTrackerIO::DecodeCapacitances(const char* data, AliMUONVStore& capaStore)
 
 //_____________________________________________________________________________
 Int_t 
-AliMUONTrackerIO::ReadConfig(const char* filename, AliMUONVStore& confStore, Bool_t& changed)
+AliMUONTrackerIO::ReadConfig(const char* filename, AliMUONVStore& confStore)
 {
   /// Read config file (produced by the MUONTRKda.exe program for instance)
   /// and append the read values into the given VStore
   /// To be used when the input is a file (for instance when reading data 
   /// from the OCDB).
-  /// changed must be set to kFALSE before calling this method for the first time
-  /// (then the subsequent calls must not set it !)
-  ///
   
   TString sFilename(gSystem->ExpandPathName(filename));
   
@@ -514,19 +511,17 @@ AliMUONTrackerIO::ReadConfig(const char* filename, AliMUONVStore& confStore, Boo
   
   in.close();
   
-  return DecodeConfig(stream.str().c_str(),confStore,changed);
+  return DecodeConfig(stream.str().c_str(),confStore);
 }
 
 //_____________________________________________________________________________
 Int_t 
-AliMUONTrackerIO::DecodeConfig(const char* data, AliMUONVStore& confStore, Bool_t& changed)
+AliMUONTrackerIO::DecodeConfig(const char* data, AliMUONVStore& confStore)
 {
   /// Read config data (produced by the MUONTRKda.exe program for instance)
   /// and append the read values into the given VStore
   /// To be used when the input is a TString (for instance when getting data 
   /// from AMORE DB).
-  /// changed must be set to kFALSE before calling this method for the first time
-  /// (then the subsequent calls must not set it !)
 
   char line[1024];
   Int_t busPatchID, manuID;
@@ -538,9 +533,6 @@ AliMUONTrackerIO::DecodeConfig(const char* data, AliMUONVStore& confStore, Bool_
     AliDebugClass(3,Form("line=%s",line));
     if ( line[0] == '#' ) 
     {
-      TString sline(line);
-      sline.ToUpper();
-      if (sline.Contains("CHANGED") && !sline.Contains("UNCHANGED")) changed = kTRUE;
       continue;
     }
     std::istringstream sin(line);
index 77eb37b..c09b521 100644 (file)
@@ -25,8 +25,8 @@ public:
   AliMUONTrackerIO();
   virtual ~AliMUONTrackerIO();
 
-  static Int_t ReadConfig(const char* filename, AliMUONVStore& confStore, Bool_t& changed);
-  static Int_t DecodeConfig(const char* data, AliMUONVStore& confStore, Bool_t& changed);
+  static Int_t ReadConfig(const char* filename, AliMUONVStore& confStore);
+  static Int_t DecodeConfig(const char* data, AliMUONVStore& confStore);
   static Int_t WriteConfig(ofstream& out, const AliMUONVStore& confStore);
   
   static Int_t ReadPedestals(const char* filename, AliMUONVStore& pedStore);
index ea12914..1909348 100644 (file)
 /// The sourceDirectory is there to "emulate" what the real preprocessor will
 /// find on the FXS, and is assumed to have the following structure :
 /// <pre>
+/// CONFIG/
+///    LDC0.config
+///    LDC1.config
+///    LDC2.config
+///    LDC3.config
 /// GAINS/
 ///    LDC0.gain
 ///    LDC1.gain