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.                  *
 **************************************************************************/

/////////////////////////////////////////////////////////////////////
//   Implementation of AliRawDataErrorLog class                    //
//                                                                 //
// class AliRawDataErrorLog                                        //
// This is a class for logging raw-data related errors.            //
// It is used to record and retrieve of the errors                 //
// during the reading and reconstruction of raw-data and ESD       //
// analysis.                                                       //
// Further description of the methods and functionality are given  //
// inline.                                                         //
//                                                                 //
// cvetan.cheshkov@cern.ch                                         //
//                                                                 //
/////////////////////////////////////////////////////////////////////

#include "AliRawDataErrorLog.h"

#include <Riostream.h>

using std::endl;
using std::cout;
ClassImp(AliRawDataErrorLog)

//_____________________________________________________________________________
AliRawDataErrorLog::AliRawDataErrorLog() :
  TNamed(),
  fEventNumber(-1),
  fDdlID(-1),
  fErrorLevel(AliRawDataErrorLog::kMinor),
  fErrorCode(0),
  fCount(0)
{
  // Default constructor
}

//_____________________________________________________________________________
AliRawDataErrorLog::AliRawDataErrorLog(Int_t eventNumber, Int_t ddlId,
				       ERawDataErrorLevel errorLevel,
				       Int_t errorCode,
				       const char *message) :
  TNamed(message,""),
  fEventNumber(eventNumber),
  fDdlID(ddlId),
  fErrorLevel(errorLevel),
  fErrorCode(errorCode),
  fCount(1)
{
  // Constructor that specifies
  // the event number, ddl id, error type and
  // custom message related to the error
}

//___________________________________________________________________________
AliRawDataErrorLog::AliRawDataErrorLog(const AliRawDataErrorLog & source) :
  TNamed(source),
  fEventNumber(source.fEventNumber),
  fDdlID(source.fDdlID),
  fErrorLevel(source.fErrorLevel),
  fErrorCode(source.fErrorCode),
  fCount(source.fCount)
{
  // Copy constructor
}

//___________________________________________________________________________
AliRawDataErrorLog & AliRawDataErrorLog::operator=(const AliRawDataErrorLog &source)
{
  // assignment operator
  if (this != &source) {
    TNamed::operator=(source);

    fEventNumber = source.GetEventNumber();
    fDdlID       = source.GetDdlID();
    fErrorLevel  = source.GetErrorLevel();
    fErrorCode   = source.GetErrorCode();
    fCount       = source.GetCount();
  }
  return *this;
}

void AliRawDataErrorLog::Copy(TObject &obj) const {
  
  // this overwrites the virtual TOBject::Copy()
  // to allow run time copying without casting
  // in AliESDEvent

  if(this==&obj)return;
  AliRawDataErrorLog *robj = dynamic_cast<AliRawDataErrorLog*>(&obj);
  if(!robj)return; // not an AliRawDataErrorLog
  *robj = *this;

}

//_____________________________________________________________________________
Int_t AliRawDataErrorLog::Compare(const TObject *obj) const
{
  // Compare the event numbers and DDL IDs
  // of two error log objects.
  // Used in the sorting of raw data error logs
  // during the raw data reading and reconstruction
  Int_t eventNumber = ((AliRawDataErrorLog*)obj)->GetEventNumber();
  Int_t ddlID = ((AliRawDataErrorLog*)obj)->GetDdlID();

  if (fEventNumber == eventNumber) {
    if (fDdlID == ddlID)
      return 0;
    else
      return ((fDdlID > ddlID) ? 1 : -1);
  }
  else
    return ((fEventNumber > eventNumber) ? 1 : -1);
}

//_____________________________________________________________________________
const char*
AliRawDataErrorLog::GetErrorLevelAsString() const
{
  switch ( GetErrorLevel() )
  {
    case kMinor:
      return "MINOR";
      break;
    case kMajor:
      return "MAJOR";
      break;
    case kFatal:
      return "FATAL";
      break;
    default:
      return "INVALID";
      break;
  }
  
}

//_____________________________________________________________________________
void
AliRawDataErrorLog::Print(Option_t*) const
{
  cout << Form("EventNumber %10d DdlID %5d ErrorLevel %10s ErrorCode %4d Occurence %5d",
               GetEventNumber(),GetDdlID(),
               GetErrorLevelAsString(),
               GetErrorCode(),
               GetCount()) << endl;
  cout << "    " << GetMessage() << endl;
}
 AliRawDataErrorLog.cxx:1
 AliRawDataErrorLog.cxx:2
 AliRawDataErrorLog.cxx:3
 AliRawDataErrorLog.cxx:4
 AliRawDataErrorLog.cxx:5
 AliRawDataErrorLog.cxx:6
 AliRawDataErrorLog.cxx:7
 AliRawDataErrorLog.cxx:8
 AliRawDataErrorLog.cxx:9
 AliRawDataErrorLog.cxx:10
 AliRawDataErrorLog.cxx:11
 AliRawDataErrorLog.cxx:12
 AliRawDataErrorLog.cxx:13
 AliRawDataErrorLog.cxx:14
 AliRawDataErrorLog.cxx:15
 AliRawDataErrorLog.cxx:16
 AliRawDataErrorLog.cxx:17
 AliRawDataErrorLog.cxx:18
 AliRawDataErrorLog.cxx:19
 AliRawDataErrorLog.cxx:20
 AliRawDataErrorLog.cxx:21
 AliRawDataErrorLog.cxx:22
 AliRawDataErrorLog.cxx:23
 AliRawDataErrorLog.cxx:24
 AliRawDataErrorLog.cxx:25
 AliRawDataErrorLog.cxx:26
 AliRawDataErrorLog.cxx:27
 AliRawDataErrorLog.cxx:28
 AliRawDataErrorLog.cxx:29
 AliRawDataErrorLog.cxx:30
 AliRawDataErrorLog.cxx:31
 AliRawDataErrorLog.cxx:32
 AliRawDataErrorLog.cxx:33
 AliRawDataErrorLog.cxx:34
 AliRawDataErrorLog.cxx:35
 AliRawDataErrorLog.cxx:36
 AliRawDataErrorLog.cxx:37
 AliRawDataErrorLog.cxx:38
 AliRawDataErrorLog.cxx:39
 AliRawDataErrorLog.cxx:40
 AliRawDataErrorLog.cxx:41
 AliRawDataErrorLog.cxx:42
 AliRawDataErrorLog.cxx:43
 AliRawDataErrorLog.cxx:44
 AliRawDataErrorLog.cxx:45
 AliRawDataErrorLog.cxx:46
 AliRawDataErrorLog.cxx:47
 AliRawDataErrorLog.cxx:48
 AliRawDataErrorLog.cxx:49
 AliRawDataErrorLog.cxx:50
 AliRawDataErrorLog.cxx:51
 AliRawDataErrorLog.cxx:52
 AliRawDataErrorLog.cxx:53
 AliRawDataErrorLog.cxx:54
 AliRawDataErrorLog.cxx:55
 AliRawDataErrorLog.cxx:56
 AliRawDataErrorLog.cxx:57
 AliRawDataErrorLog.cxx:58
 AliRawDataErrorLog.cxx:59
 AliRawDataErrorLog.cxx:60
 AliRawDataErrorLog.cxx:61
 AliRawDataErrorLog.cxx:62
 AliRawDataErrorLog.cxx:63
 AliRawDataErrorLog.cxx:64
 AliRawDataErrorLog.cxx:65
 AliRawDataErrorLog.cxx:66
 AliRawDataErrorLog.cxx:67
 AliRawDataErrorLog.cxx:68
 AliRawDataErrorLog.cxx:69
 AliRawDataErrorLog.cxx:70
 AliRawDataErrorLog.cxx:71
 AliRawDataErrorLog.cxx:72
 AliRawDataErrorLog.cxx:73
 AliRawDataErrorLog.cxx:74
 AliRawDataErrorLog.cxx:75
 AliRawDataErrorLog.cxx:76
 AliRawDataErrorLog.cxx:77
 AliRawDataErrorLog.cxx:78
 AliRawDataErrorLog.cxx:79
 AliRawDataErrorLog.cxx:80
 AliRawDataErrorLog.cxx:81
 AliRawDataErrorLog.cxx:82
 AliRawDataErrorLog.cxx:83
 AliRawDataErrorLog.cxx:84
 AliRawDataErrorLog.cxx:85
 AliRawDataErrorLog.cxx:86
 AliRawDataErrorLog.cxx:87
 AliRawDataErrorLog.cxx:88
 AliRawDataErrorLog.cxx:89
 AliRawDataErrorLog.cxx:90
 AliRawDataErrorLog.cxx:91
 AliRawDataErrorLog.cxx:92
 AliRawDataErrorLog.cxx:93
 AliRawDataErrorLog.cxx:94
 AliRawDataErrorLog.cxx:95
 AliRawDataErrorLog.cxx:96
 AliRawDataErrorLog.cxx:97
 AliRawDataErrorLog.cxx:98
 AliRawDataErrorLog.cxx:99
 AliRawDataErrorLog.cxx:100
 AliRawDataErrorLog.cxx:101
 AliRawDataErrorLog.cxx:102
 AliRawDataErrorLog.cxx:103
 AliRawDataErrorLog.cxx:104
 AliRawDataErrorLog.cxx:105
 AliRawDataErrorLog.cxx:106
 AliRawDataErrorLog.cxx:107
 AliRawDataErrorLog.cxx:108
 AliRawDataErrorLog.cxx:109
 AliRawDataErrorLog.cxx:110
 AliRawDataErrorLog.cxx:111
 AliRawDataErrorLog.cxx:112
 AliRawDataErrorLog.cxx:113
 AliRawDataErrorLog.cxx:114
 AliRawDataErrorLog.cxx:115
 AliRawDataErrorLog.cxx:116
 AliRawDataErrorLog.cxx:117
 AliRawDataErrorLog.cxx:118
 AliRawDataErrorLog.cxx:119
 AliRawDataErrorLog.cxx:120
 AliRawDataErrorLog.cxx:121
 AliRawDataErrorLog.cxx:122
 AliRawDataErrorLog.cxx:123
 AliRawDataErrorLog.cxx:124
 AliRawDataErrorLog.cxx:125
 AliRawDataErrorLog.cxx:126
 AliRawDataErrorLog.cxx:127
 AliRawDataErrorLog.cxx:128
 AliRawDataErrorLog.cxx:129
 AliRawDataErrorLog.cxx:130
 AliRawDataErrorLog.cxx:131
 AliRawDataErrorLog.cxx:132
 AliRawDataErrorLog.cxx:133
 AliRawDataErrorLog.cxx:134
 AliRawDataErrorLog.cxx:135
 AliRawDataErrorLog.cxx:136
 AliRawDataErrorLog.cxx:137
 AliRawDataErrorLog.cxx:138
 AliRawDataErrorLog.cxx:139
 AliRawDataErrorLog.cxx:140
 AliRawDataErrorLog.cxx:141
 AliRawDataErrorLog.cxx:142
 AliRawDataErrorLog.cxx:143
 AliRawDataErrorLog.cxx:144
 AliRawDataErrorLog.cxx:145
 AliRawDataErrorLog.cxx:146
 AliRawDataErrorLog.cxx:147
 AliRawDataErrorLog.cxx:148
 AliRawDataErrorLog.cxx:149
 AliRawDataErrorLog.cxx:150
 AliRawDataErrorLog.cxx:151
 AliRawDataErrorLog.cxx:152
 AliRawDataErrorLog.cxx:153
 AliRawDataErrorLog.cxx:154
 AliRawDataErrorLog.cxx:155
 AliRawDataErrorLog.cxx:156
 AliRawDataErrorLog.cxx:157
 AliRawDataErrorLog.cxx:158
 AliRawDataErrorLog.cxx:159
 AliRawDataErrorLog.cxx:160
 AliRawDataErrorLog.cxx:161