Make the logger compatible with AliMergeableCollection
authorlaphecet <laurent.aphecetche@subatech.in2p3.fr>
Thu, 15 Jan 2015 16:13:04 +0000 (17:13 +0100)
committerlaphecet <laurent.aphecetche@subatech.in2p3.fr>
Fri, 16 Jan 2015 12:47:08 +0000 (13:47 +0100)
MUON/MUONcore/AliMUONLogger.cxx
MUON/MUONcore/AliMUONLogger.h

index 7a1a7ad..bd902a4 100644 (file)
@@ -43,10 +43,11 @@ ClassImp(AliMUONLogger)
 /// \endcond
 
 //_____________________________________________________________________________
-AliMUONLogger::AliMUONLogger(Int_t maxNumberOfEntries) 
+AliMUONLogger::AliMUONLogger(Int_t maxNumberOfEntries, const char* name)
 : TObject(), 
   fMaxNumberOfEntries(maxNumberOfEntries),
-  fLog(new AliMUONStringIntMap)
+  fLog(new AliMUONStringIntMap),
+  fName(name)
 {
     /// ctor. After maxNumberOfEntries, the log is printed and reset
 }
@@ -139,3 +140,45 @@ AliMUONLogger::NumberOfEntries() const
   return fLog->GetNofItems();
 }
 
+//______________________________________________________________________________
+Long64_t AliMUONLogger::Merge(TCollection* list)
+{
+  /// Merge method
+  
+  // Merge a list of AliMUONLogger objects with this
+  // Returns the number of merged objects (including this).
+  //
+  // Not the most clever implementation, but it works...
+  //
+  
+  if (!list) return 0;
+  
+  if (list->IsEmpty()) return 1;
+  
+  TIter next(list);
+  TObject* currObj;
+  Int_t count(0);
+  
+  while ( ( currObj = next() ) )
+  {
+    AliMUONLogger* logger = dynamic_cast<AliMUONLogger*>(currObj);
+    if (!logger)
+    {
+        AliFatal(Form("object named \"%s\" is a %s instead of an logger!", currObj->GetName(), currObj->ClassName()));
+        continue;
+    }
+    logger->ResetItr();
+    TString msg;
+    Int_t occurance;
+    while ( logger->Next(msg,occurance) )
+    {
+      for ( Int_t i = 0; i < occurance; ++i )
+      {
+        Log(msg);
+      }
+    }
+    ++count;
+  }
+  
+  return count+1;
+}
index f1af4a8..3ba418e 100644 (file)
@@ -29,7 +29,7 @@ using std::ofstream;
 class AliMUONLogger : public TObject
 {
 public:
-  AliMUONLogger(Int_t maxNumberOfEntries=-1);
+  AliMUONLogger(Int_t maxNumberOfEntries=-1, const char* name="AliMUONLogger");
   virtual ~AliMUONLogger();
   
   Int_t  Log(const char* message);
@@ -46,6 +46,12 @@ public:
   
   Int_t NumberOfEntries() const;
   
+  Long64_t Merge(TCollection* list);
+
+  const char* GetName() const { return fName.Data(); }
+
+  ULong_t Hash() const { return fName.Hash(); }
+
 private:
   /// Not implemented
   AliMUONLogger(const AliMUONLogger& rhs); // not implemented
@@ -56,8 +62,9 @@ private:
   
   Int_t fMaxNumberOfEntries; //!< after this number, print and reset
   AliMUONStringIntMap* fLog; //!< map from message to number of times the message was issued
+  TString fName; //!< object name
   
-  ClassDef(AliMUONLogger,1) // A logger that keeps track of the number of times a message appeared
+  ClassDef(AliMUONLogger,2) // A logger that keeps track of the number of times a message appeared
 };
 
 #endif