ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2003, 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$ */

// Author: Cvetan Cheshkov  10/10/2005

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// AliRawEventHeaderBase                                                //
// This a new versioning scheme for raw data root-ification and reading //
// For details look at offline weekly meeting 20/10/2005                //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include <unistd.h>

#include <Bytes.h>
#include <TClass.h>
#include <TDataMember.h>
#include <TList.h>
#include <TMethodCall.h>
#include <TDataType.h>

#include "AliLog.h"
#include "AliRawEventHeaderBase.h"

#include <Riostream.h>

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

//______________________________________________________________________________
AliRawEventHeaderBase::AliRawEventHeaderBase():
fSize(0),
fMagic(0),
fHeadSize(0),
fVersion(0),
fExtendedDataSize(0),
fExtendedAllocSize(0),
fExtendedData(NULL),
fIsSwapped(kFALSE),
fHeaderSize(0),
fHeaderBegin(NULL),
fFirstEqIndex(-1),
fLastEqIndex(-1)
{
  // Default constructor
}

//______________________________________________________________________________
void *AliRawEventHeaderBase::HeaderBegin() const
{
  // Returns the pointer to the first data member
  // beyond the base class data members

  if (fHeaderBegin) return fHeaderBegin;

  TList *datalist = IsA()->GetListOfDataMembers();
  TIter next(datalist);                           
  TDataMember *member = (TDataMember *)next();

  if(strstr(member->GetTypeName(),"TClass"))
    member = (TDataMember *)next();

  void *ptr = (void *)((char *)this+member->GetOffset());
  const_cast<AliRawEventHeaderBase*>(this)->fHeaderBegin = ptr;

  return ptr;
}

//______________________________________________________________________________
Int_t AliRawEventHeaderBase::HeaderSize() const
{
  // Returns the size of the data members list
  // beyond the base class data members

  if (fHeaderSize) return fHeaderSize;

  Int_t size = 0;

  TList *datalist = IsA()->GetListOfDataMembers();
  TIter next(datalist);                           
  TDataMember *member;
  while ((member=(TDataMember *)next()) != 0x0) {
    if (strstr(member->GetTypeName(),"TClass")) continue;
    UInt_t unitsize = member->GetUnitSize();
    UInt_t ndim = member->GetArrayDim();
    if (ndim == 0)
      size += unitsize;
    else
      for(UInt_t i=0;i<ndim;i++) size += member->GetMaxIndex(i)*unitsize;
  }

  const_cast<AliRawEventHeaderBase*>(this)->fHeaderSize = size;

  return size;
}

//______________________________________________________________________________
UInt_t AliRawEventHeaderBase::SwapWord(UInt_t x) const
{
   // Swap the endianess of the integer value 'x'

   return (((x & 0x000000ffU) << 24) | ((x & 0x0000ff00U) <<  8) |
           ((x & 0x00ff0000U) >>  8) | ((x & 0xff000000U) >> 24));
}

void AliRawEventHeaderBase::Swap()
{
   // Swap base header data.
   // Update the fIsSwapped flag which
   // is then use to copy in an appropriate way
   // the rest of the header data from the raw data stream

   if (IsSwapped()) {
      fIsSwapped    = kTRUE;
      fSize         = SwapWord(fSize);
      fMagic        = SwapWord(fMagic);
      fHeadSize     = SwapWord(fHeadSize);
      fVersion      = SwapWord(fVersion);
   }
}

//______________________________________________________________________________
const char *AliRawEventHeaderBase::GetTypeName() const
{
   // Get event type as a string.
   // Will fail in case data header
   // does not contain eventType field
   UInt_t eventType = Get("Type");

   return GetTypeName(eventType);
}

//______________________________________________________________________________
const char *AliRawEventHeaderBase::GetTypeName(UInt_t eventType)
{
  // Get event type as a string.
  // Static method that could be used
  // from everywhere inside aliroot

   switch (eventType) {
      case kStartOfRun:
         return "START_OF_RUN";
         break;
      case kEndOfRun:
         return "END_OF_RUN";
         break;
      case kStartOfRunFiles:
         return "START_OF_RUN_FILES";
         break;
      case kEndOfRunFiles:
         return "END_OF_RUN_FILES";
         break;
      case kStartOfBurst:
         return "START_OF_BURST";
         break;
      case kEndOfBurst:
         return "END_OF_BURST";
         break;
      case kPhysicsEvent:
         return "PHYSICS_EVENT";
         break;
      case kCalibrationEvent:
         return "CALIBRATION_EVENT";
         break;
      case kFormatError:
         return "EVENT_FORMAT_ERROR";
         break;
      case kStartOfData:
	 return "START_OF_DATA";
	 break;
      case kEndOfData:
	 return "END_OF_DATA";
	 break;
      case kSystemSoftwareTriggerEvent:
	 return "SYSTEM_SOFTWARE_TRIGGER_EVENT";
	 break;
      case kDetectorSoftwareTriggerEvent:
	 return "DETECTOR_SOFTWARE_TRIGGER_EVENT";
	 break;
      default:
	 return "UNKNOWN EVENT TYPE NUMBER";
         break;
   }
}

//______________________________________________________________________________
AliRawEventHeaderBase* AliRawEventHeaderBase::Create(char*& data)
{
  // Static method to create AliRawEventHeaderVX object
  // The actual header class version is taken from the
  // raw data

  // First create AlirawEVentHeaderBase class object
  AliRawEventHeaderBase header;

  // Copy the first common part of the raw data header
  memcpy(header.HeaderBaseBegin(), data, header.HeaderBaseSize());
 
    // Swap header data if needed
  if (header.IsSwapped())
    header.Swap();

  // Is header valid...
  if (!header.IsValid()) {
    AliFatalClass("Invalid header format!");
    // try recovery... how?
    return 0x0;
  }

  if (header.GetEventSize() < (UInt_t)header.HeaderBaseSize()) {
    AliFatalClass("Invalid header base size!");
    // try recovery... how?
    return 0x0;
  }

  // Now check the DATE version and create the corresponding header
  // class object
  UInt_t version = header.GetVersion();
  UInt_t majorversion = (version>>16)&0x0000ffff;
  UInt_t minorversion = version&0x0000ffff;
  TString classname;
  classname.Form("AliRawEventHeaderV%d_%d",majorversion,minorversion);
    
  TClass *tcl = TClass::GetClass(classname.Data());
  if (!tcl) {
    AliFatalClass(Form("Unknown header version (%s)!",classname.Data()));
    return 0x0;
  }

  //  header.Dump(); tcl->Dump();

  AliRawEventHeaderBase *hdr = (AliRawEventHeaderBase *)tcl->New();
  if (!hdr) {
    AliFatalClass(Form("Can not create object of class %s",classname.Data()));
    return 0x0;
  }

  // Copy the base header data members and initialize other data members
  memcpy(hdr->HeaderBaseBegin(),header.HeaderBaseBegin(), header.HeaderBaseSize());
  memset(hdr->HeaderBegin(),0, hdr->HeaderSize());
  hdr->fIsSwapped = header.fIsSwapped;

  // Consistency check
  if (hdr->GetEventSize() < ((UInt_t)hdr->HeaderBaseSize() + (UInt_t)hdr->HeaderSize())) {
    AliFatalClass(Form("Invalid header size (%d < %d +%d)!",
		       hdr->GetEventSize(),hdr->HeaderBaseSize(),hdr->HeaderSize()));
    // try recovery... how?
    return 0x0;
  }

  // Check for the presence of header extension and its size
  Int_t extsize = (Int_t)hdr->GetHeadSize() - (hdr->HeaderBaseSize() + hdr->HeaderSize());
  if (extsize < 0) {
    AliFatalClass(Form("Invalid header size (%d < %d +%d)!",
		       hdr->GetHeadSize(),hdr->HeaderBaseSize(),hdr->HeaderSize()));
    // try recovery... how?
    return 0x0;
  }
  else {
    if (extsize > 0) {
      hdr->AllocateExtendedData(extsize);
    }
  }

  return hdr;
}

void AliRawEventHeaderBase::SwapData(const void* inbuf, const void* outbuf, UInt_t size) {
  // The method swaps the contents of the
  // raw-data event header
  UInt_t  intCount = size/sizeof(UInt_t);

  UInt_t* buf = (UInt_t*) inbuf;    // temporary integers buffer
  for (UInt_t i=0; i<intCount; i++, buf++) {
      UInt_t value = SwapWord(*buf);
      memcpy((UInt_t*)outbuf+i, &value, sizeof(UInt_t)); 
  }
}

//______________________________________________________________________________
Int_t AliRawEventHeaderBase::ReadHeader(char*& data)
{
  // Read header info from DATE data stream.
  // Returns bytes read

  Long_t start = (Long_t)data;
  // Swap header data if needed
  if (DataIsSwapped()) {
    SwapData(data, HeaderBaseBegin(), HeaderBaseSize());
    data += HeaderBaseSize();
    SwapData(data, HeaderBegin(), HeaderSize());
    data += HeaderSize();
  }
  else {
    memcpy(HeaderBaseBegin(), data, HeaderBaseSize());
    data += HeaderBaseSize();
    memcpy(HeaderBegin(), data, HeaderSize());
    data += HeaderSize();
  }
  data += ReadExtendedData(data);

  return (Int_t)((Long_t)data - start);
}

//______________________________________________________________________________
void AliRawEventHeaderBase::AllocateExtendedData(Int_t extsize)
{
  // Allocate the space for the header
  // extended data
  if (fExtendedData) delete [] fExtendedData;
  
  fExtendedDataSize = fExtendedAllocSize = extsize;
  fExtendedData = new char[fExtendedAllocSize];
  memset(fExtendedData,0,fExtendedAllocSize);
}

//______________________________________________________________________________
Int_t AliRawEventHeaderBase::ReadExtendedData(char*& data)
{
  // Read extended header data
  // Reallocates memory if the present
  // buffer is insufficient
  Int_t extsize = (Int_t)GetHeadSize() - (HeaderBaseSize() + HeaderSize());

  if (extsize == 0) {
    fExtendedDataSize = 0;
    return 0;
  }

  if (extsize < 0) {
    AliFatal(Form("Invalid header size (%d < %d +%d)!",
		  GetHeadSize(),HeaderBaseSize(),HeaderSize()));
    // try recovery... how?
    return 0;
  }

  fExtendedDataSize = extsize;
  if (fExtendedDataSize > fExtendedAllocSize)
    AllocateExtendedData(fExtendedDataSize);

  if (DataIsSwapped())
    SwapData(data, fExtendedData, fExtendedDataSize);
  else
    memcpy(fExtendedData, data, fExtendedDataSize);

  return fExtendedDataSize;
}

//______________________________________________________________________________
UInt_t AliRawEventHeaderBase::Get(const char *datamember) const
{
  // The method to get a data member from the header object
  // Except for the data members of the base class, all the
  // other header data should be retrieved ONLY by this method
  // The name of the data member should be supplied without "f"
  // in front

  char buf[256] = "f";
  strncat(buf,datamember,sizeof(buf)-2);

  TDataMember *member = IsA()->GetDataMember(buf);
  if (!member) {
    AliFatal(Form("No data member %s is found! Check the raw data version!",buf));
    return 0;
  }

  if (member->GetArrayDim() != 0) {
    AliFatal(Form("Member %s is an array! Use the GetP() method!",buf));
    return 0;
  }

  TDataType * dataType = member->GetDataType();
  if (!dataType || dataType->GetType() != kUInt_t) {
    AliFatal(Form("Member %s is not of type UInt_t!",buf));
    return 0;
  }

  const void *pointer = (char *)this+member->GetOffset();

  return *((UInt_t *)pointer);
}

//______________________________________________________________________________
const UInt_t* AliRawEventHeaderBase::GetP(const char *datamember) const
{
  // The method to get a data member from the header object
  // Except for the data members of the base class, all the
  // other header data should be retrieved ONLY by this method
  // The name of the data member should be supplied without "f"
  // in front

  char buf[256] = "f";
  strncat(buf,datamember,sizeof(buf)-2);

  TDataMember *member = IsA()->GetDataMember(buf);
  if (!member) {
    AliFatal(Form("No data member %s is found! Check the raw data version!",buf));
    return 0;
  }

  //  if (member->GetArrayDim() == 0) {
  //    AliFatal(Form("Member %s is not an array! Use the Get() method!",buf));
  //    return 0;
  //  }

  TDataType * dataType = member->GetDataType();
  if (!dataType || dataType->GetType() != kUInt_t) {
    AliFatal(Form("Member %s is not of type UInt_t*!",buf));
    return 0;
  }

  const void *pointer = (char *)this+member->GetOffset();

  return (const UInt_t*)pointer;
}

//_____________________________________________________________________________
void AliRawEventHeaderBase::Print( const Option_t* opt ) const
{
  // Dumps the event or sub-event
  // header fields

  cout << opt << "  Event size: " << GetEventSize() << endl;
  cout << opt << "  Event header size: " << GetHeadSize() << endl;
  cout << opt << "  Event header version: " << GetMajorVersion() << "." << GetMinorVersion() << endl;
  cout << opt << "  Event type: " << Get("Type") << "( " << GetTypeName() << " )" << endl;
  cout << opt << "  Run Number: " << Get("RunNb") << endl;
  const UInt_t *id = GetP("Id");
  cout << opt << "  Period: " << (((id)[0]>>4)&0x0fffffff) << " Orbit: " << ((((id)[0]<<20)&0xf00000)|(((id)[1]>>12)&0xfffff)) << " Bunch-crossing: " << ((id)[1]&0x00000fff) << endl;
  cout << opt << "  Trigger pattern: " << GetP("TriggerPattern")[0] << "-" << GetP("TriggerPattern")[1] << endl;
  cout << opt << "  Detector pattern: " << Get("DetectorPattern") << endl;
  cout << opt << "  Type attribute: " << GetP("TypeAttribute")[0] << "-" << GetP("TypeAttribute")[1] << "-" << GetP("TypeAttribute")[2] << endl;
  cout << opt << "  GDC: " << Get("GdcId") << " LDC: " << Get("LdcId") << endl;
}

//_____________________________________________________________________________
void AliRawEventHeaderBase::AddEqIndex(Int_t index)
{
  // Adds an equipment by changing properly
  // the first and last equipment indexes
  if (fFirstEqIndex < 0) fFirstEqIndex = index; 
  if (index > fLastEqIndex) fLastEqIndex = index;
}

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