ROOT logo
//-*- Mode: C++ -*-
// $Id$

#ifndef ALIHLTLOGGING_H
#define ALIHLTLOGGING_H
///* This file is property of and copyright by the                          * 
///* ALICE Experiment at CERN, All rights reserved.                         *
///* See cxx source for full Copyright notice                               */

/// @file   AliHLTLogging.h
/// @author Matthias Richter, Timm Steinbeck
/// @date   
/// @brief  HLT module logging primitives.
///

#include "AliHLTDataTypes.h"
#include "AliHLTStdIncludes.h"
#include "TString.h"
#include "TObject.h"
#include "TArrayC.h"

class AliHLTComponentHandler;
//#define LOG_PREFIX ""       // logging prefix, for later extensions

#define ALILOG_WRAPPER_LIBRARY "libHLTrec.so"

/* the logging macros can be used inside methods of classes which inherit from 
 * AliHLTLogging
 */
// function name
#if defined(__GNUC__) || defined(__ICC) || defined(__ECC) || defined(__APPLE__)
#define FUNCTIONNAME() __FUNCTION__
#else
#define FUNCTIONNAME() "???"
#endif

#ifndef ALIHLTLOGGINGVARIADICFREE_H
// HLTMessage is not filtered
#define HLTMessage( ... )   LoggingVarargs(kHLTLogNone,      NULL , NULL , __FILE__ , __LINE__ , __VA_ARGS__ )

// the following macros are filtered by the Global and Local Log Filter
#define HLTLog( level, ... ) if (CheckFilter(level))         LoggingVarargs(level, Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , __VA_ARGS__ )
#define HLTBenchmark( ... ) LoggingVarargs(kHLTLogBenchmark, Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , __VA_ARGS__ )
#ifdef __DEBUG
#define HLTDebug( ... )     if (CheckFilter(kHLTLogDebug) && CheckGroup(Class_Name())) LoggingVarargs(kHLTLogDebug,     Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , __VA_ARGS__ )
#else
#define HLTDebug( ... )
#endif
#define HLTInfo( ... )      if (CheckFilter(kHLTLogInfo))    LoggingVarargs(kHLTLogInfo,      Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , __VA_ARGS__ )
#define HLTWarning( ... )   if (CheckFilter(kHLTLogWarning)) LoggingVarargs(kHLTLogWarning,   Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , __VA_ARGS__ )
#define HLTError( ... )     if (CheckFilter(kHLTLogError))   LoggingVarargs(kHLTLogError,     Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , __VA_ARGS__ )
#define HLTFatal( ... )     if (CheckFilter(kHLTLogFatal))   LoggingVarargs(kHLTLogFatal,     Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , __VA_ARGS__ )
#define HLTImportant( ... ) if (CheckFilter(kHLTLogImportant))LoggingVarargs(kHLTLogImportant,Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , __VA_ARGS__ )

// the same macros are defined variadic free, in that case the message must be complete
// include AliHLTLoggingVariadicFree.h
#else //ALIHLTLOGGINGVARIADICFREE_H
#define HLTMessage( message )   LoggingVarargs(kHLTLogNone,      NULL , NULL , __FILE__ , __LINE__ , message )
#define HLTLog( level, message) if (CheckFilter(level))          LoggingVarargs(level, Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , message )
#define HLTBenchmark( message ) LoggingVarargs(kHLTLogBenchmark, Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , message )
#ifdef __DEBUG
#define HLTDebug( message )     if (CheckFilter(kHLTLogDebug) && CheckGroup(Class_Name())) LoggingVarargs(kHLTLogDebug,     Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , message )
#else
#define HLTDebug( message )
#endif
#define HLTInfo( message )      if (CheckFilter(kHLTLogInfo))    LoggingVarargs(kHLTLogInfo,      Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , message )
#define HLTWarning( message )   if (CheckFilter(kHLTLogWarning)) LoggingVarargs(kHLTLogWarning,   Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , message )
#define HLTError( message )     if (CheckFilter(kHLTLogError))   LoggingVarargs(kHLTLogError,     Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , message )
#define HLTFatal( message )     if (CheckFilter(kHLTLogFatal))   LoggingVarargs(kHLTLogFatal,     Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , message )
#define HLTImportant( message ) if (CheckFilter(kHLTLogImportant))LoggingVarargs(kHLTLogImportant,Class_Name() , FUNCTIONNAME() , __FILE__ , __LINE__ , message )
#endif //ALIHLTLOGGINGVARIADICFREE_H

// helper macro to set the keyword
#define HLTLogKeyword(a)    AliHLTKeyword hltlogTmpkey(this, a)

#define HLT_DEFAULT_LOG_KEYWORD "no key"

/**
 * @class AliHLTLogging
 * Basic logging class. All classes inherit the besic HLT logging functionality.
 * Logging levels are controlled by a global logging filter and a local logging
 * filter.
 * 
 * @section alihlt_logging_levels Logging Levels
 * Logging levels are switched by a bit pattern,  AliHLTComponentLogSeverity {
 * - ::kHLTLogNone no logging (0)
 * - ::kHLTLogBenchmark benchmark messages (0x1)
 * - ::kHLTLogDebug debug messages (0x2)
 * - ::kHLTLogInfo info messages (0x4)
 * - ::kHLTLogWarning warning messages (0x8)
 * - ::kHLTLogError error messages (0x10)
 * - ::kHLTLogFatal fatal error messages (0x20)
 * - ::kHLTLogImportant few important messages not to be filtered out (0x40)
 * - ::kHLTLogAll special value to enable all messages (0x7f)
 * - ::kHLTLogDefault the default logging level: Warning, Error, Fatal, Important (0x79)
 *
 * @section alihlt_logging_filter Logging Filters
 * The class provides a global and a local logging filter, the AND beween both
 * defines whether a message is printed or not.
 *
 * The global filter is by default set to ::kHLTLogAll. Please note that AliHLTSystem
 * changes the global logging level to ::kHLTLogDefault. The global filter can be
 * adjusted by means of SetGlobalLoggingLevel().
 *
 * The local filter is set to ::kHLTLogAll and can be adjusted by
 * SetLocalLoggingLevel(). The default can be changed for all objects by
 * SetLocalLoggingDefault(). Please note that a change of the default level only
 * applies to objects generated after the change of the default.
 *
 * @section alihlt_logging_external Redirection
 * - external logging function
 * - keyword
 *
 * @section alihlt_logging_aliroot AliRoot Redirection
 * - switching of redirection
 * - logging options in AliSimulation/AliReconstruction
 *
 * @ingroup alihlt_component
 */
class AliHLTLogging {
public:
  AliHLTLogging();
  AliHLTLogging(const AliHLTLogging&);
  AliHLTLogging& operator=(const AliHLTLogging&);
  virtual ~AliHLTLogging();

  /** set the default key word
   * the keyword is intended to simplify the use of logging macros
   */ 
  void SetDefaultKeyword(const char* keyword) { fpDefaultKeyword=keyword; }

  /**
   * Set a temporary keyword
   * Keywords need to be static const strings, the class handles only
   * pointers and assumes the strings to be persistent.
   * returns the old key value
   */
  const char* SetKeyword(const char* keyword) 
    { 
      const char* currentKeyword=fpCurrentKeyword;
      fpCurrentKeyword=keyword;
      return currentKeyword; 
    }

  /**
   * Get the current keyword
   */
  const char* GetKeyword() const
    {
      if (fpCurrentKeyword) return fpCurrentKeyword;
      else if (fpDefaultKeyword) return fpDefaultKeyword;
      return HLT_DEFAULT_LOG_KEYWORD;
    }
  
  /**
   * Init the AliLogging class for use from external package.
   * This initializes the logging callback. <br>
   * Only deployed by external users of the C wrapper interface, not used
   * when running in AliRoot
   */
  static int Init(AliHLTfctLogging pFun);

  /**
   * Init the message trap in AliLog.
   * This initializes the AliLog trap, the AliLog class is the logging
   * mechanism of AliRoot. The trap can fetch log messages written to
   * AliLog, components and detector algorithms can use the AliLog
   * mechanism to be as close as possible to Offline habits. <br>
   * Only used with external users of the C wrapper interface, not used
   * when running in AliRoot
   */
  static int InitAliLogTrap(AliHLTComponentHandler* pHandler);

  /**
   * Init the AliRoot logging function.
   * All log messages are redirected to AliLog when running in AliRoot.
   * Note: when running in PubSub, AliLog messages are redirected to PubSub,
   * see AliHLTLogging::InitAliLogTrap
   */
  static int InitAliLogFunc(AliHLTComponentHandler* pHandler);

  /**
   * Genaral logging function
   */
  int Logging( AliHLTComponentLogSeverity severity, const char* origin, const char* keyword, const char* message, ... );

  /**
   * Logging function with two origin parameters, used by the log macros
   */
  virtual int LoggingVarargs(AliHLTComponentLogSeverity severity, 
			     const char* originClass, const char* originFunc,
			     const char* file, int line, ... ) const;

  /**
   * Send formatted string to the different channels
   */
  int SendMessage(AliHLTComponentLogSeverity severity, 
		  const char* originClass, const char* originFunc,
		  const char* file, int line,
		  const char* message) const;

  /**
   * Evaluate the group of the debug message from the class name.
   * @return 1 if message should be printed
   */
  int CheckGroup(const char* originClass) const;

  /**
   * Set the black list of classes.
   * If the white list is set, debug messages are skipped for
   * all classes matching one of the regular expressions in the string.
   */
  static int SetBlackList(const char* classnames);

  /**
   * Set the white list of classes.
   * If the white list is set, debug messages are only printed for
   * classes matching one of the regular expressions in the string.
   */
  static int SetWhiteList(const char* classnames);

  /**
   * Apply filter
   * @return 1 if message should pass
   */
  int CheckFilter(AliHLTComponentLogSeverity severity) const;

  /**
   * Set global logging level
   * logging filter for all objects
   */
  static void SetGlobalLoggingLevel(AliHLTComponentLogSeverity level);

  /**
   * Get global logging level
   * logging filter for all objects
   */
  static AliHLTComponentLogSeverity GetGlobalLoggingLevel();

  /**
   * Set local logging level
   * logging filter for individual object
   */
  virtual void SetLocalLoggingLevel(AliHLTComponentLogSeverity level);

  /**
   * Set local logging default
   * Default logging filter for individual objects.
   */
  static void SetLocalLoggingDefault(AliHLTComponentLogSeverity level);

  /**
   * Get default setting for local logging filter for individual objects.
   */
  static AliHLTComponentLogSeverity GetLocalLoggingDefault() { return fgLocalLogDefault; }

  /**
   * Get local logging level
   * logging filter for individual object
   */
  AliHLTComponentLogSeverity GetLocalLoggingLevel();

  /**
   * Print message to stdout
   */
  static int Message(void * param, AliHLTComponentLogSeverity severity, const char* origin, const char* keyword, const char* message);

  /**
   * Build the log string from format specifier and variadac arguments
   * @param format     format string of printf style
   * @param ap         opened and initialized argument list
   * @param bAppend    append to current content
   * @return const char string with the formatted message 
   */
  static const char* BuildLogString(const char *format, va_list &ap, bool bAppend=false);

  /**
   * Set the log string from format specifier and from variable arguments.
   * @param format     format string of printf style
   * @return const char string with the formatted message 
   */
  static const char* SetLogString(const void* p, const char* pfmt, const char *format, ... );

  /**
   * Get parameter given by the external caller.
   * This functionality is not yet implemented. It is intended
   * to pass the parameter pointer given to the component at
   * initialization back to the caller.
   */
  virtual void* GetParameter() const {return NULL;}

  /**
   * Switch logging through AliLog on or off
   * @param sw          1 = logging through AliLog
   */
  void SwitchAliLog(int sw) {fgUseAliLog=(sw!=0);}

  /** target stream for AliRoot logging methods */
  static ostringstream fgLogstr;                                   //! transient

  /** 
   * The message function for dynamic use.
   * In order to avoid dependencies on AliRoot libraries, libHLTbase loads
   * the library dynamically and looks for the symbol.
   */
  typedef int (*AliHLTDynamicMessage)(AliHLTComponentLogSeverity severity, 
				      const char* originClass, 
				      const char* originFunc,
				      const char* file, int line, 
				      const char* message); 

  /**
   * The init function of the message callback for dynamic use.
   * In order to avoid dependencies on AliRoot libraries, libHLTbase loads
   * the library dynamically and looks for the symbol.
   */
  typedef int (*InitAliDynamicMessageCallback)();
  
protected:
  /** the AliRoot logging function */
  static AliHLTDynamicMessage fgAliLoggingFunc;                    //! transient

private:
  /** the global logging filter */
  static  AliHLTComponentLogSeverity fgGlobalLogFilter;            // see above
  /** the local logging filter for one class */
  AliHLTComponentLogSeverity fLocalLogFilter;                      // see above
  /** the global logging filter */
  static  AliHLTComponentLogSeverity fgLocalLogDefault;            // see above
  /** logging callback from the framework */
  static AliHLTfctLogging fgLoggingFunc;                           // see above
  /** default keyword */
  const char* fpDefaultKeyword;                                    //! transient
  /** current keyword */
  const char* fpCurrentKeyword;                                    //! transient
  /** switch for logging through AliLog, default on */
  static int fgUseAliLog;                                          // see above
  /**
   * The global logging buffer.
   * The buffer is created with an initial size and grown dynamically on
   * demand.
   */
  static TArrayC fgAliHLTLoggingTarget;                            //! transient
  
  /** the maximum size of the buffer */
  static const int fgkALIHLTLOGGINGMAXBUFFERSIZE;                  //! transient

  /** groups of classes not to print debug messages */
  static TString fgBlackList;                                      //! transient
  
  /** groups of classes not to print debug messages */
  static TString fgWhiteList;                                      //! transient
  
  ClassDef(AliHLTLogging, 0)
};

/* the class AliHLTKeyword is a simple helper class used by the HLTLogKeyword macro
 * HLTLogKeyword("a keyword") creates an object of AliHLTKeyword which sets the keyword for the logging class
 * the object is destroyed automatically when the current scope is left and so the keyword is set
 * to the original value. Please note that all keywords need to be static strings, only pointyers
 * are handled and the strings required to ber persistent.
 */
class AliHLTKeyword {
 public:
  AliHLTKeyword()
    :
    fpParent(NULL),
    fpOriginal(NULL)
    {
    }

  AliHLTKeyword(const AliHLTLogging* parent, const char* keyword)
    :
    fpParent(const_cast<AliHLTLogging*>(parent)),
    fpOriginal(NULL)
    {
      // the const cast is on purpose in order to be allowed to use
      // HLTLogKeyword from const member functions
      if (fpParent) {
	fpOriginal=fpParent->SetKeyword(keyword);
      }
    }

  ~AliHLTKeyword()
    {
      if (fpParent) {
	fpParent->SetKeyword(fpOriginal);
      }
    }

 private:
  /// copy constructor prohibited
  AliHLTKeyword(const AliHLTKeyword& kw);
  /// assignment operator prohibited
  AliHLTKeyword& operator=(const AliHLTKeyword& kw);

  AliHLTLogging* fpParent;                                         //! transient
  const char* fpOriginal;                                          //! transient
};
#endif

 AliHLTLogging.h:1
 AliHLTLogging.h:2
 AliHLTLogging.h:3
 AliHLTLogging.h:4
 AliHLTLogging.h:5
 AliHLTLogging.h:6
 AliHLTLogging.h:7
 AliHLTLogging.h:8
 AliHLTLogging.h:9
 AliHLTLogging.h:10
 AliHLTLogging.h:11
 AliHLTLogging.h:12
 AliHLTLogging.h:13
 AliHLTLogging.h:14
 AliHLTLogging.h:15
 AliHLTLogging.h:16
 AliHLTLogging.h:17
 AliHLTLogging.h:18
 AliHLTLogging.h:19
 AliHLTLogging.h:20
 AliHLTLogging.h:21
 AliHLTLogging.h:22
 AliHLTLogging.h:23
 AliHLTLogging.h:24
 AliHLTLogging.h:25
 AliHLTLogging.h:26
 AliHLTLogging.h:27
 AliHLTLogging.h:28
 AliHLTLogging.h:29
 AliHLTLogging.h:30
 AliHLTLogging.h:31
 AliHLTLogging.h:32
 AliHLTLogging.h:33
 AliHLTLogging.h:34
 AliHLTLogging.h:35
 AliHLTLogging.h:36
 AliHLTLogging.h:37
 AliHLTLogging.h:38
 AliHLTLogging.h:39
 AliHLTLogging.h:40
 AliHLTLogging.h:41
 AliHLTLogging.h:42
 AliHLTLogging.h:43
 AliHLTLogging.h:44
 AliHLTLogging.h:45
 AliHLTLogging.h:46
 AliHLTLogging.h:47
 AliHLTLogging.h:48
 AliHLTLogging.h:49
 AliHLTLogging.h:50
 AliHLTLogging.h:51
 AliHLTLogging.h:52
 AliHLTLogging.h:53
 AliHLTLogging.h:54
 AliHLTLogging.h:55
 AliHLTLogging.h:56
 AliHLTLogging.h:57
 AliHLTLogging.h:58
 AliHLTLogging.h:59
 AliHLTLogging.h:60
 AliHLTLogging.h:61
 AliHLTLogging.h:62
 AliHLTLogging.h:63
 AliHLTLogging.h:64
 AliHLTLogging.h:65
 AliHLTLogging.h:66
 AliHLTLogging.h:67
 AliHLTLogging.h:68
 AliHLTLogging.h:69
 AliHLTLogging.h:70
 AliHLTLogging.h:71
 AliHLTLogging.h:72
 AliHLTLogging.h:73
 AliHLTLogging.h:74
 AliHLTLogging.h:75
 AliHLTLogging.h:76
 AliHLTLogging.h:77
 AliHLTLogging.h:78
 AliHLTLogging.h:79
 AliHLTLogging.h:80
 AliHLTLogging.h:81
 AliHLTLogging.h:82
 AliHLTLogging.h:83
 AliHLTLogging.h:84
 AliHLTLogging.h:85
 AliHLTLogging.h:86
 AliHLTLogging.h:87
 AliHLTLogging.h:88
 AliHLTLogging.h:89
 AliHLTLogging.h:90
 AliHLTLogging.h:91
 AliHLTLogging.h:92
 AliHLTLogging.h:93
 AliHLTLogging.h:94
 AliHLTLogging.h:95
 AliHLTLogging.h:96
 AliHLTLogging.h:97
 AliHLTLogging.h:98
 AliHLTLogging.h:99
 AliHLTLogging.h:100
 AliHLTLogging.h:101
 AliHLTLogging.h:102
 AliHLTLogging.h:103
 AliHLTLogging.h:104
 AliHLTLogging.h:105
 AliHLTLogging.h:106
 AliHLTLogging.h:107
 AliHLTLogging.h:108
 AliHLTLogging.h:109
 AliHLTLogging.h:110
 AliHLTLogging.h:111
 AliHLTLogging.h:112
 AliHLTLogging.h:113
 AliHLTLogging.h:114
 AliHLTLogging.h:115
 AliHLTLogging.h:116
 AliHLTLogging.h:117
 AliHLTLogging.h:118
 AliHLTLogging.h:119
 AliHLTLogging.h:120
 AliHLTLogging.h:121
 AliHLTLogging.h:122
 AliHLTLogging.h:123
 AliHLTLogging.h:124
 AliHLTLogging.h:125
 AliHLTLogging.h:126
 AliHLTLogging.h:127
 AliHLTLogging.h:128
 AliHLTLogging.h:129
 AliHLTLogging.h:130
 AliHLTLogging.h:131
 AliHLTLogging.h:132
 AliHLTLogging.h:133
 AliHLTLogging.h:134
 AliHLTLogging.h:135
 AliHLTLogging.h:136
 AliHLTLogging.h:137
 AliHLTLogging.h:138
 AliHLTLogging.h:139
 AliHLTLogging.h:140
 AliHLTLogging.h:141
 AliHLTLogging.h:142
 AliHLTLogging.h:143
 AliHLTLogging.h:144
 AliHLTLogging.h:145
 AliHLTLogging.h:146
 AliHLTLogging.h:147
 AliHLTLogging.h:148
 AliHLTLogging.h:149
 AliHLTLogging.h:150
 AliHLTLogging.h:151
 AliHLTLogging.h:152
 AliHLTLogging.h:153
 AliHLTLogging.h:154
 AliHLTLogging.h:155
 AliHLTLogging.h:156
 AliHLTLogging.h:157
 AliHLTLogging.h:158
 AliHLTLogging.h:159
 AliHLTLogging.h:160
 AliHLTLogging.h:161
 AliHLTLogging.h:162
 AliHLTLogging.h:163
 AliHLTLogging.h:164
 AliHLTLogging.h:165
 AliHLTLogging.h:166
 AliHLTLogging.h:167
 AliHLTLogging.h:168
 AliHLTLogging.h:169
 AliHLTLogging.h:170
 AliHLTLogging.h:171
 AliHLTLogging.h:172
 AliHLTLogging.h:173
 AliHLTLogging.h:174
 AliHLTLogging.h:175
 AliHLTLogging.h:176
 AliHLTLogging.h:177
 AliHLTLogging.h:178
 AliHLTLogging.h:179
 AliHLTLogging.h:180
 AliHLTLogging.h:181
 AliHLTLogging.h:182
 AliHLTLogging.h:183
 AliHLTLogging.h:184
 AliHLTLogging.h:185
 AliHLTLogging.h:186
 AliHLTLogging.h:187
 AliHLTLogging.h:188
 AliHLTLogging.h:189
 AliHLTLogging.h:190
 AliHLTLogging.h:191
 AliHLTLogging.h:192
 AliHLTLogging.h:193
 AliHLTLogging.h:194
 AliHLTLogging.h:195
 AliHLTLogging.h:196
 AliHLTLogging.h:197
 AliHLTLogging.h:198
 AliHLTLogging.h:199
 AliHLTLogging.h:200
 AliHLTLogging.h:201
 AliHLTLogging.h:202
 AliHLTLogging.h:203
 AliHLTLogging.h:204
 AliHLTLogging.h:205
 AliHLTLogging.h:206
 AliHLTLogging.h:207
 AliHLTLogging.h:208
 AliHLTLogging.h:209
 AliHLTLogging.h:210
 AliHLTLogging.h:211
 AliHLTLogging.h:212
 AliHLTLogging.h:213
 AliHLTLogging.h:214
 AliHLTLogging.h:215
 AliHLTLogging.h:216
 AliHLTLogging.h:217
 AliHLTLogging.h:218
 AliHLTLogging.h:219
 AliHLTLogging.h:220
 AliHLTLogging.h:221
 AliHLTLogging.h:222
 AliHLTLogging.h:223
 AliHLTLogging.h:224
 AliHLTLogging.h:225
 AliHLTLogging.h:226
 AliHLTLogging.h:227
 AliHLTLogging.h:228
 AliHLTLogging.h:229
 AliHLTLogging.h:230
 AliHLTLogging.h:231
 AliHLTLogging.h:232
 AliHLTLogging.h:233
 AliHLTLogging.h:234
 AliHLTLogging.h:235
 AliHLTLogging.h:236
 AliHLTLogging.h:237
 AliHLTLogging.h:238
 AliHLTLogging.h:239
 AliHLTLogging.h:240
 AliHLTLogging.h:241
 AliHLTLogging.h:242
 AliHLTLogging.h:243
 AliHLTLogging.h:244
 AliHLTLogging.h:245
 AliHLTLogging.h:246
 AliHLTLogging.h:247
 AliHLTLogging.h:248
 AliHLTLogging.h:249
 AliHLTLogging.h:250
 AliHLTLogging.h:251
 AliHLTLogging.h:252
 AliHLTLogging.h:253
 AliHLTLogging.h:254
 AliHLTLogging.h:255
 AliHLTLogging.h:256
 AliHLTLogging.h:257
 AliHLTLogging.h:258
 AliHLTLogging.h:259
 AliHLTLogging.h:260
 AliHLTLogging.h:261
 AliHLTLogging.h:262
 AliHLTLogging.h:263
 AliHLTLogging.h:264
 AliHLTLogging.h:265
 AliHLTLogging.h:266
 AliHLTLogging.h:267
 AliHLTLogging.h:268
 AliHLTLogging.h:269
 AliHLTLogging.h:270
 AliHLTLogging.h:271
 AliHLTLogging.h:272
 AliHLTLogging.h:273
 AliHLTLogging.h:274
 AliHLTLogging.h:275
 AliHLTLogging.h:276
 AliHLTLogging.h:277
 AliHLTLogging.h:278
 AliHLTLogging.h:279
 AliHLTLogging.h:280
 AliHLTLogging.h:281
 AliHLTLogging.h:282
 AliHLTLogging.h:283
 AliHLTLogging.h:284
 AliHLTLogging.h:285
 AliHLTLogging.h:286
 AliHLTLogging.h:287
 AliHLTLogging.h:288
 AliHLTLogging.h:289
 AliHLTLogging.h:290
 AliHLTLogging.h:291
 AliHLTLogging.h:292
 AliHLTLogging.h:293
 AliHLTLogging.h:294
 AliHLTLogging.h:295
 AliHLTLogging.h:296
 AliHLTLogging.h:297
 AliHLTLogging.h:298
 AliHLTLogging.h:299
 AliHLTLogging.h:300
 AliHLTLogging.h:301
 AliHLTLogging.h:302
 AliHLTLogging.h:303
 AliHLTLogging.h:304
 AliHLTLogging.h:305
 AliHLTLogging.h:306
 AliHLTLogging.h:307
 AliHLTLogging.h:308
 AliHLTLogging.h:309
 AliHLTLogging.h:310
 AliHLTLogging.h:311
 AliHLTLogging.h:312
 AliHLTLogging.h:313
 AliHLTLogging.h:314
 AliHLTLogging.h:315
 AliHLTLogging.h:316
 AliHLTLogging.h:317
 AliHLTLogging.h:318
 AliHLTLogging.h:319
 AliHLTLogging.h:320
 AliHLTLogging.h:321
 AliHLTLogging.h:322
 AliHLTLogging.h:323
 AliHLTLogging.h:324
 AliHLTLogging.h:325
 AliHLTLogging.h:326
 AliHLTLogging.h:327
 AliHLTLogging.h:328
 AliHLTLogging.h:329
 AliHLTLogging.h:330
 AliHLTLogging.h:331
 AliHLTLogging.h:332
 AliHLTLogging.h:333
 AliHLTLogging.h:334
 AliHLTLogging.h:335
 AliHLTLogging.h:336
 AliHLTLogging.h:337
 AliHLTLogging.h:338
 AliHLTLogging.h:339
 AliHLTLogging.h:340
 AliHLTLogging.h:341
 AliHLTLogging.h:342
 AliHLTLogging.h:343
 AliHLTLogging.h:344
 AliHLTLogging.h:345
 AliHLTLogging.h:346
 AliHLTLogging.h:347
 AliHLTLogging.h:348
 AliHLTLogging.h:349
 AliHLTLogging.h:350
 AliHLTLogging.h:351
 AliHLTLogging.h:352
 AliHLTLogging.h:353
 AliHLTLogging.h:354
 AliHLTLogging.h:355
 AliHLTLogging.h:356
 AliHLTLogging.h:357
 AliHLTLogging.h:358
 AliHLTLogging.h:359
 AliHLTLogging.h:360
 AliHLTLogging.h:361
 AliHLTLogging.h:362
 AliHLTLogging.h:363
 AliHLTLogging.h:364
 AliHLTLogging.h:365
 AliHLTLogging.h:366
 AliHLTLogging.h:367
 AliHLTLogging.h:368
 AliHLTLogging.h:369
 AliHLTLogging.h:370
 AliHLTLogging.h:371
 AliHLTLogging.h:372
 AliHLTLogging.h:373
 AliHLTLogging.h:374
 AliHLTLogging.h:375
 AliHLTLogging.h:376
 AliHLTLogging.h:377
 AliHLTLogging.h:378
 AliHLTLogging.h:379
 AliHLTLogging.h:380
 AliHLTLogging.h:381
 AliHLTLogging.h:382
 AliHLTLogging.h:383
 AliHLTLogging.h:384
 AliHLTLogging.h:385
 AliHLTLogging.h:386
 AliHLTLogging.h:387
 AliHLTLogging.h:388
 AliHLTLogging.h:389
 AliHLTLogging.h:390
 AliHLTLogging.h:391
 AliHLTLogging.h:392
 AliHLTLogging.h:393
 AliHLTLogging.h:394
 AliHLTLogging.h:395
 AliHLTLogging.h:396
 AliHLTLogging.h:397
 AliHLTLogging.h:398
 AliHLTLogging.h:399
 AliHLTLogging.h:400
 AliHLTLogging.h:401