ROOT logo
/**************************************************************************
* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
*                                                                        *
* Author: The ALICE Off-line Project.                                    *
* Contributors are mentioned in the code where appropriate.              *
*                                                                        *
* Permission to use, copy, modify and distribute this software and its   *
* documentation strictly for non-commercial purposes is hereby granted   *
* without fee, provided that the above copyright notice appears in all   *
* copies and that both the copyright notice and this permission notice   *
* appear in the supporting documentation. The authors make no claims     *
* about the suitability of this software for any purpose. It is          *
* provided "as is" without express or implied warranty.                  *
**************************************************************************/

// $Id$

#include "AliMUONLogger.h"

#include "AliMUONStringIntMap.h"
#include "AliLog.h"
#include "Riostream.h"

//-----------------------------------------------------------------------------
/// \class AliMUONLogger
///
/// A logger that keeps track of the number of times a message appeared.
///
/// Typically used to print all messages to screen at once, e.g. in the
/// dtor of a worker class.
///
/// For instance, it is used in AliMUONDigitizerV3, to note which channels
/// are disabled, and this information is printed in a condensed form
/// only once when DigitizerV3 is destroyed.
///
/// \author Laurent Aphecetche
//-----------------------------------------------------------------------------

using std::cout;
using std::endl;
/// \cond CLASSIMP
ClassImp(AliMUONLogger)
/// \endcond

//_____________________________________________________________________________
AliMUONLogger::AliMUONLogger(Int_t maxNumberOfEntries) 
: TObject(), 
  fMaxNumberOfEntries(maxNumberOfEntries),
  fLog(new AliMUONStringIntMap)
{
    /// ctor. After maxNumberOfEntries, the log is printed and reset
}

//_____________________________________________________________________________
AliMUONLogger::~AliMUONLogger()
{
  /// dtor
  delete fLog;
}

//_____________________________________________________________________________
Int_t 
AliMUONLogger::Log(const char* message)
{
  /// Log a message

  if ( fMaxNumberOfEntries >0 && fLog->GetNofItems() >= fMaxNumberOfEntries ) 
  {
    AliWarning(Form("Reached max number of entries (%d over %d). Printing and resetting.",
                    fLog->GetNofItems(),fMaxNumberOfEntries));
    Print();
    fLog->Clear();
  }
  
  Int_t i = fLog->Get(message);
  
  fLog->Set(message,i+1);
  
  return i+1;
}

//_____________________________________________________________________________
void   
AliMUONLogger::Clear(Option_t* /*option*/) 
{  
  /// reset logger spool

  fLog->Clear();
}

//_____________________________________________________________________________
void 
AliMUONLogger::Print(Option_t* opt) const
{
  /// Print the entire log
  if ( fLog->GetNofItems() )
  {
    fLog->Print(opt);
  }
  else
  {
    cout << "No message" << endl;
  }
}
  
//_____________________________________________________________________________
void
AliMUONLogger::Print(TString& key, ofstream& out) const
{
  /// print out into a given streamer with a key word in front of the message
  fLog->Print(key, out); 

      
}
   
//_____________________________________________________________________________
void 
AliMUONLogger::ResetItr()
{
  /// call reset iterator method
  fLog->ResetItr();
     
}
 
//_____________________________________________________________________________
Bool_t 
AliMUONLogger::Next(TString& msg, Int_t& occurance)
{
  /// call next iterator method
  return fLog->Next(msg, occurance);
     
}
    
//_____________________________________________________________________________
Int_t
AliMUONLogger::NumberOfEntries() const
{
  /// Get the number of logs we have so far
  return fLog->GetNofItems();
}

 AliMUONLogger.cxx:1
 AliMUONLogger.cxx:2
 AliMUONLogger.cxx:3
 AliMUONLogger.cxx:4
 AliMUONLogger.cxx:5
 AliMUONLogger.cxx:6
 AliMUONLogger.cxx:7
 AliMUONLogger.cxx:8
 AliMUONLogger.cxx:9
 AliMUONLogger.cxx:10
 AliMUONLogger.cxx:11
 AliMUONLogger.cxx:12
 AliMUONLogger.cxx:13
 AliMUONLogger.cxx:14
 AliMUONLogger.cxx:15
 AliMUONLogger.cxx:16
 AliMUONLogger.cxx:17
 AliMUONLogger.cxx:18
 AliMUONLogger.cxx:19
 AliMUONLogger.cxx:20
 AliMUONLogger.cxx:21
 AliMUONLogger.cxx:22
 AliMUONLogger.cxx:23
 AliMUONLogger.cxx:24
 AliMUONLogger.cxx:25
 AliMUONLogger.cxx:26
 AliMUONLogger.cxx:27
 AliMUONLogger.cxx:28
 AliMUONLogger.cxx:29
 AliMUONLogger.cxx:30
 AliMUONLogger.cxx:31
 AliMUONLogger.cxx:32
 AliMUONLogger.cxx:33
 AliMUONLogger.cxx:34
 AliMUONLogger.cxx:35
 AliMUONLogger.cxx:36
 AliMUONLogger.cxx:37
 AliMUONLogger.cxx:38
 AliMUONLogger.cxx:39
 AliMUONLogger.cxx:40
 AliMUONLogger.cxx:41
 AliMUONLogger.cxx:42
 AliMUONLogger.cxx:43
 AliMUONLogger.cxx:44
 AliMUONLogger.cxx:45
 AliMUONLogger.cxx:46
 AliMUONLogger.cxx:47
 AliMUONLogger.cxx:48
 AliMUONLogger.cxx:49
 AliMUONLogger.cxx:50
 AliMUONLogger.cxx:51
 AliMUONLogger.cxx:52
 AliMUONLogger.cxx:53
 AliMUONLogger.cxx:54
 AliMUONLogger.cxx:55
 AliMUONLogger.cxx:56
 AliMUONLogger.cxx:57
 AliMUONLogger.cxx:58
 AliMUONLogger.cxx:59
 AliMUONLogger.cxx:60
 AliMUONLogger.cxx:61
 AliMUONLogger.cxx:62
 AliMUONLogger.cxx:63
 AliMUONLogger.cxx:64
 AliMUONLogger.cxx:65
 AliMUONLogger.cxx:66
 AliMUONLogger.cxx:67
 AliMUONLogger.cxx:68
 AliMUONLogger.cxx:69
 AliMUONLogger.cxx:70
 AliMUONLogger.cxx:71
 AliMUONLogger.cxx:72
 AliMUONLogger.cxx:73
 AliMUONLogger.cxx:74
 AliMUONLogger.cxx:75
 AliMUONLogger.cxx:76
 AliMUONLogger.cxx:77
 AliMUONLogger.cxx:78
 AliMUONLogger.cxx:79
 AliMUONLogger.cxx:80
 AliMUONLogger.cxx:81
 AliMUONLogger.cxx:82
 AliMUONLogger.cxx:83
 AliMUONLogger.cxx:84
 AliMUONLogger.cxx:85
 AliMUONLogger.cxx:86
 AliMUONLogger.cxx:87
 AliMUONLogger.cxx:88
 AliMUONLogger.cxx:89
 AliMUONLogger.cxx:90
 AliMUONLogger.cxx:91
 AliMUONLogger.cxx:92
 AliMUONLogger.cxx:93
 AliMUONLogger.cxx:94
 AliMUONLogger.cxx:95
 AliMUONLogger.cxx:96
 AliMUONLogger.cxx:97
 AliMUONLogger.cxx:98
 AliMUONLogger.cxx:99
 AliMUONLogger.cxx:100
 AliMUONLogger.cxx:101
 AliMUONLogger.cxx:102
 AliMUONLogger.cxx:103
 AliMUONLogger.cxx:104
 AliMUONLogger.cxx:105
 AliMUONLogger.cxx:106
 AliMUONLogger.cxx:107
 AliMUONLogger.cxx:108
 AliMUONLogger.cxx:109
 AliMUONLogger.cxx:110
 AliMUONLogger.cxx:111
 AliMUONLogger.cxx:112
 AliMUONLogger.cxx:113
 AliMUONLogger.cxx:114
 AliMUONLogger.cxx:115
 AliMUONLogger.cxx:116
 AliMUONLogger.cxx:117
 AliMUONLogger.cxx:118
 AliMUONLogger.cxx:119
 AliMUONLogger.cxx:120
 AliMUONLogger.cxx:121
 AliMUONLogger.cxx:122
 AliMUONLogger.cxx:123
 AliMUONLogger.cxx:124
 AliMUONLogger.cxx:125
 AliMUONLogger.cxx:126
 AliMUONLogger.cxx:127
 AliMUONLogger.cxx:128
 AliMUONLogger.cxx:129
 AliMUONLogger.cxx:130
 AliMUONLogger.cxx:131
 AliMUONLogger.cxx:132
 AliMUONLogger.cxx:133
 AliMUONLogger.cxx:134
 AliMUONLogger.cxx:135
 AliMUONLogger.cxx:136
 AliMUONLogger.cxx:137
 AliMUONLogger.cxx:138
 AliMUONLogger.cxx:139
 AliMUONLogger.cxx:140
 AliMUONLogger.cxx:141