ROOT logo
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

//-----------------------------------
//
// decoding of TRD raw data stream
// and translation into digits
//
//----------------------------------

#ifndef ALITRDRAWSTREAM_H
#define ALITRDRAWSTREAM_H

#include "TTree.h"
#include "AliLog.h"
#include "TClonesArray.h"

class TObject;
class TObjArray;
class TString;
class TBranch;

class AliRawReader;
class AliTRDdigitsManager;
class AliTRDdigitsParam;
class AliTRDarrayADC;
class AliTRDSignalIndex;
class AliTRDtrackletContainer;
class AliESDTrdTrack;

class AliTRDrawStream : public TObject
{
 public:
  AliTRDrawStream(AliRawReader *rawReader = 0x0);
  ~AliTRDrawStream();

  enum { kDDLOffset = 0x400,                                  // Offset for DDL numbers
         kDDLMax    = 0x411 };                                // Max DDL number for TRD SM

  Bool_t SetReader(AliRawReader *rawReader) { fRawReader = rawReader; return kTRUE; }
  void SetDigitsManager(AliTRDdigitsManager *digMgr) { fDigitsManager = digMgr; }
  void SetTrackletArray(TClonesArray *ar) { fTracklets = ar; }
  void SetTrackArray(TClonesArray *ar) { fTracks = ar; }
  void SetMarkerArray(TClonesArray *ar) { fMarkers = ar; }

  TClonesArray* GetTrackletArray() const { return fTracklets; }
  TClonesArray* GetTrackArray() const { return fTracks; }
  TClonesArray* GetMarkerArray() const { return fMarkers; }

  AliTRDdigitsManager* GetDigitsManager() const { return fDigitsManager; }

  Bool_t ReadEvent();

  Bool_t NextDDL();
  Int_t NextChamber(AliTRDdigitsManager *digMgr);
  Int_t NextChamber(AliTRDdigitsManager *digMgr,
  		      UInt_t ** /* trackletContainer */, UShort_t ** /* errorContainer */) { AliError("Deprecated, use NextChamber(AliTRDdigitsManger*) instead!"); return NextChamber(digMgr); }

  void StoreErrorsInTree()   { fStoreError = &AliTRDrawStream::StoreErrorTree; }
  void StoreErrorsInArray()  { fStoreError = &AliTRDrawStream::StoreErrorArray; }
  void EnableErrorStorage()  { fStoreError = &AliTRDrawStream::StoreErrorTree; }
  void DisableErrorStorage() { fStoreError = &AliTRDrawStream::ForgetError; }

  // error handling
  enum ErrorCode_t {
    kUnknown = 0,
    kLinkMonitor,
    kEvCntMismatch,
    kNonTrdEq,
    kStackHeaderInvalid,
    kInvalidDetector,
    kInvalidPadRow,
    kNoDigits,
    kHCmismatch,
    kHCcheckFailed,
    kPosUnexp,
    kTPmodeInvalid,
    kTPmismatch,
    kNtimebinsChanged,
    kAdcMaskInconsistent,
    kAdcCheckInvalid,
    kAdcDataAbort,
    kAdcChannelsMiss,
    kMissMcmHeaders,
    kMissTpData,
    kCRCmismatch,
    kLastErrorCode
  };

  enum ErrorBehav_t {
    kTolerate = 0,
    kDiscardMCM = 1,
    kDiscardHC = 2,
    kDiscardDDL = 4,
    kAbort = 8
  };

  enum MarkerCode_t {
    kHCactive = 1,
    kSecactive = 2
  };

  TTree* GetErrorTree() const { return fErrors; }
  static const char* GetErrorMessage(ErrorCode_t errCode);
  static void SetErrorDebugLevel(ErrorCode_t error, Int_t level) { fgErrorDebugLevel[error] = level; }
  static void SetErrorBehaviour(ErrorCode_t error, ErrorBehav_t behav) { fgErrorBehav[error] = behav; }

  class AliTRDrawStreamError : public TObject {
  public:
    AliTRDrawStreamError(Int_t error = 0, Int_t sector = -1, Int_t stack = -1, Int_t link = -1, Int_t rob = -1, Int_t mcm = -1);
    virtual ~AliTRDrawStreamError() {}
    Int_t fError;                               // error code
    Int_t fSector;				// sector
    Int_t fStack;				// stack
    Int_t fLink;				// link
    Int_t fRob;					// ROB no
    Int_t fMcm;					// MCM no
    ClassDef(AliTRDrawStreamError, 1);
  };

  // event statistics
  class AliTRDrawStats : public TObject {
  public:
    AliTRDrawStats() : TObject(), fBytesRead(0) {}
    void ClearStats();

    class AliTRDrawStatsSector : public TObject {
    public:
      AliTRDrawStatsSector() : TObject(), fBytes(0), fBytesRead(0), fNTracklets(0), fNMCMs(0), fNChannels(0) {}
      void ClearStats();

      class AliTRDrawStatsHC : public TObject {
      public:
        AliTRDrawStatsHC() : TObject(), fBytes(0), fBytesRead(0), fNTracklets(0), fNMCMs(0), fNChannels(0) {}
	void ClearStats();

	Int_t fBytes;             // number of bytes (not necessarily read)
 	Int_t fBytesRead;	  // number of bytes read
	Int_t fNTracklets;	  // number of tracklets
	Int_t fNMCMs;		  // number of MCMs (from MCM headers)
	Int_t fNChannels;	  // number of channels
	ClassDef(AliTRDrawStatsHC, 1);
      };

      Int_t fBytes;		     // number of bytes (not necessarily read)
      Int_t fBytesRead;		     // number of bytes read
      Int_t fNTracklets;	     // number of tracklets
      Int_t fNMCMs;		     // number of MCMs (from MCM headers)
      Int_t fNChannels;		     // number of channels
      AliTRDrawStatsHC fStatsHC[60]; //[60] HC-wise statistics
      ClassDef(AliTRDrawStatsSector, 1);
    };

    AliTRDrawStatsSector fStatsSector[18]; //[18] sector-wise statistics
    Int_t fBytesRead;			   // number of bytes read
    ClassDef(AliTRDrawStats, 1);
  };

  AliTRDrawStats* GetStats() { return &fStats; }
  Int_t GetEventSize(Int_t sector)  const { return fStats.fStatsSector[sector].fBytes; }
  Int_t GetEventSize(Int_t sector, Int_t stack)  const {
    Int_t size = 0;
    for (Int_t iHC = 0; iHC < 12; iHC++) {
      size += fStats.fStatsSector[sector].fStatsHC[12*stack + iHC].fBytes;
    }
    return size;
  }
  Int_t GetEventSize(Int_t sector, Int_t stack, Int_t hc) const {
    return fStats.fStatsSector[sector].fStatsHC[12*stack + hc].fBytes;
  }
  Int_t GetNTracklets(Int_t sector) const { return fStats.fStatsSector[sector].fNTracklets; }
  Int_t GetNMCMs(Int_t sector)      const { return fStats.fStatsSector[sector].fNMCMs; }
  Int_t GetNChannels(Int_t sector)  const { return fStats.fStatsSector[sector].fNChannels; }

  ULong64_t GetTrkFlags(Int_t sector, Int_t stack) const { return (fCurrTrgFlags[sector] & (1 << (27 + stack))) ? fCurrTrkFlags[sector*fgkNstacks + stack] : 0; }
  UInt_t GetTriggerFlags(Int_t sector) const { return fCurrTrgFlags[sector]; }
  UInt_t GetLinkMonitorFlags(Int_t sector, Int_t stack) const {
    UInt_t temp = 0;
    for (Int_t iLink = 0; iLink < 12; iLink++)
      temp |= (fCurrLinkMonitorFlags[(sector * fgkNstacks + stack) * fgkNlinks + iLink] & 0x3) << (iLink * 2);
    temp |= ((GetMatchFlagsBP(sector)   >> stack) & 0x1) << 24;
    temp |= ((GetMatchFlagsSRAM(sector) >> stack) & 0x1) << 25;
    return temp;
  }
  UInt_t GetMatchFlagsSRAM(Int_t sector) const { return fCurrMatchFlagsSRAM[sector]; }
  UInt_t GetMatchFlagsBP(Int_t sector)   const { return fCurrMatchFlagsPostBP[sector]; }

#ifdef TRD_RAW_DEBUG
  UInt_t GetBC(Int_t hc)               const { return fCurrBC[hc]; }
  UInt_t GetEvCount(Int_t det)     const { return fCurrEvCount[det]; }
  UInt_t GetL0Count(Int_t sector)  const { return fCurrL0Count[sector]; }
  UInt_t GetL1aCount(Int_t sector) const { return fCurrL1aCount[sector]; }
  UInt_t GetL1rCount(Int_t sector) const { return fCurrL1rCount[sector]; }
  UInt_t GetL2aCount(Int_t sector) const { return fCurrL2aCount[sector]; }
  UInt_t GetL2rCount(Int_t sector) const { return fCurrL2rCount[sector]; }
  UInt_t GetChecksumStack(Int_t sector, Int_t stack) const { return fCurrChecksumStack[sector][stack]; }
#endif

  // raw data dumping
  void SetDumpMCM(Int_t det, Int_t rob, Int_t mcm, Bool_t dump = kTRUE);

  Bool_t IsDumping() const { return (fNDumpMCMs > 0); }
  Bool_t DumpingMCM(Int_t det, Int_t rob, Int_t mcm) const;

  TString DumpRaw(TString title, const UInt_t *start, Int_t length, UInt_t endmarker = 0xffffffff);
  TString DumpMcmHeader(TString title, UInt_t word);
  TString DumpAdcMask(TString title, UInt_t word);

  static void SortTracklets(TClonesArray *trklArray, TList &sortedTracklets, Int_t *indices);
  static void AssignTracklets(AliESDTrdTrack *trdTrack, Int_t *trackletIndex, Int_t refIndex[6]);

  // temporary: allow to change expected readout order
  static void SetMCMReadoutPos(Int_t mcm, Int_t pos) { if (mcm > -1 && mcm < 16) fgMcmOrder[mcm] = pos; }
  static void SetROBReadoutPos(Int_t robpair, Int_t pos) { if (robpair > -1 && robpair < 4) fgMcmOrder[robpair] = pos; }

 protected:
  Int_t ReadGTUHeaders(UInt_t *buffer);
  Int_t ReadSmHeader();
  Int_t ReadTrackingHeader(Int_t stack);
  Int_t ReadTriggerHeaders();
  Int_t ReadStackHeader(Int_t stack);
  Int_t DecodeGTUtracks();
  Int_t ReadGTUTrailer();

  Int_t ReadLinkData();
  Int_t ReadTracklets();
  Int_t ReadHcHeader();
  Int_t ReadTPData(Int_t mode = 1);
  Int_t ReadZSData();
  Int_t ReadNonZSData();

  UShort_t CalcLinkChecksum(UInt_t *data, Int_t size);

  Int_t SeekNextStack();
  Int_t SeekNextLink();

  // MCM header decoding
  Int_t ROB(UInt_t mcmhdr) const { return 0x7 & mcmhdr >> 28; }
  Int_t MCM(UInt_t mcmhdr) const { return 0xf & mcmhdr >> 24; }
  Int_t Row(UInt_t mcmhdr) const { return (ROB(mcmhdr) / 2) * 4 + MCM(mcmhdr) / 4; }
  Int_t AdcColOffset(UInt_t mcmhdr) const { return (MCM(mcmhdr) % 4 + 1) * 21 + (ROB(mcmhdr) % 2) * 84 - 1; }
  Int_t PadColOffset(UInt_t mcmhdr) const { return (MCM(mcmhdr) % 4 + 1) * 18 + (ROB(mcmhdr) % 2) * 72 + 1; }
  Int_t EvNo(UInt_t mcmhdr) const { return 0xfffff & mcmhdr >> 4; }
  Int_t Check(UInt_t mcmhdr) const { return 0xf & mcmhdr; }
  Int_t CouldBeMCMhdr(UInt_t mcmhdr) const { return ((0xf & mcmhdr) == 0xc); }

  Int_t GetMCMReadoutPos(Int_t mcm) const { return (mcm > -1 && mcm < 16) ? fgMcmOrder[mcm] : -1; }
  Int_t GetROBReadoutPos(Int_t rob) const { return (rob > -1 && rob < 4) ? fgRobOrder[rob] : -1; }

  // ADC mask decoding
  Int_t GetActiveChannels(UInt_t adcmask) const { return 0x1fffff & adcmask >> 4; }
  inline Int_t GetNActiveChannelsFromMask(UInt_t adcmask) const; // { Int_t nch = 0; for (Int_t i = 0; i < 21; i++) if ((GetActiveChannels(adcmask) & 1 << i)) nch++; return nch; }
  Int_t GetNActiveChannels(UInt_t adcmask) const { return (0x1f & ~(adcmask >> 25)); }
  Int_t CouldBeADCmask(UInt_t adcmask) const { return ((0xf & adcmask) == 0xc && (0x3 & adcmask >> 30) == 0x1); }

  // error message generation
  void EquipmentError(ErrorCode_t err = kUnknown, const char *const msg = " ", ...);
  void StackError    (ErrorCode_t err = kUnknown, const char *const msg = " ", ...);
  void LinkError     (ErrorCode_t err = kUnknown, const char *const msg = " ", ...);
  void ROBError      (ErrorCode_t err = kUnknown, const char *const msg = " ", ...);
  void MCMError      (ErrorCode_t err = kUnknown, const char *const msg = " ", ...);
  void StoreErrorTree() { fErrors->Fill(); }
  void StoreErrorArray() { new ((*fMarkers)[fMarkers->GetEntriesFast()]) AliTRDrawStreamError(fLastError); }
  void ForgetError() { return; }
  void (AliTRDrawStream::*fStoreError)();       //! function pointer to method used for storing the error

  static const char* fgkErrorMessages[kLastErrorCode];     // error messages corresponding to the error codes
  static       Int_t fgErrorDebugLevel[kLastErrorCode];   // error debug level
  static       ErrorBehav_t fgErrorBehav[kLastErrorCode]; // bevhaviour in case of error of given type

  // I/O
  AliRawReader *fRawReader;                     // pointer to the raw reader to take the data from
  AliTRDdigitsManager *fDigitsManager;          // pointer to the digitsManager to fill the data
  AliTRDdigitsParam   *fDigitsParam;            // pointer to the parameters belonging to the digits

  TTree *fErrors;                               // tree containing the occured error codes
  AliTRDrawStreamError fLastError;              // last error which occured
  UInt_t fErrorFlags;                           // error flags used to steer subsequent reading
  char   fErrorBuffer[100];                     // buffer for error message

  AliTRDrawStats fStats; 	     // event statistics, clearing must be done by the user

  UInt_t *fPayloadStart;                        // pointer to start of data payload
  UInt_t *fPayloadCurr;                         // pointer to current reading position in the payload
  Int_t   fPayloadSize;                         // size of the payload (in UInt_t words)

  static const Int_t fgkNlinks;                 // number of links to read
  static const Int_t fgkNsectors;               // number of sectors
  static const Int_t fgkNstacks;                // number of stacks to read
  static const Int_t fgkNtriggers;              // number of triggers in data stream
  static const UInt_t fgkDataEndmarker;         // data endmarker
  static const UInt_t fgkTrackletEndmarker;     // tracklet endmarker
  static const UInt_t fgkStackEndmarker[];      // stack endmarker (used from version 0xd on)
  static       Int_t fgMcmOrder [];             // expected readout order of the MCMs
  static       Int_t fgRobOrder [];             // expected readout order of the ROBs

  // persistent information
  Int_t  fNtimebins;                            // number of timebins
  Int_t  fLastEvId;                             // Event ID of last event

  // information valid at current reader position
  // all the variables fCurr... refer to the value at the current
  // reading position
  Int_t fCurrSlot;                              // current slot
  Int_t fCurrLink;				// current link
  Int_t fCurrRobPos; 				// current ROB number
  Int_t fCurrMcmPos;				// current MCM number

  // DDL header
  UInt_t fCurrEquipmentId;			// current Equipment ID

  // SM header
  UInt_t fCurrSmHeaderSize;                     // current size of the SM header
  UInt_t fCurrSmHeaderVersion;                  // current version of the SM header
  UInt_t fCurrTrailerReadout;			// current presence of trailer (after the payload)
  UInt_t fCurrTrgHeaderAvail;	        	// current trigger information availability
  UInt_t fCurrTrgHeaderReadout;                 // current readout mode for the trigger headers
  UInt_t fCurrTrkHeaderAvail;	        	// current tracking information availability
  UInt_t fCurrStackEndmarkerAvail;              // current stack endmarker availability
  UInt_t fCurrEvType;            		// current event type
  UInt_t fCurrTriggerEnable;                    // current trigger enable
  UInt_t fCurrTriggerFired;                     // current trigger fired
  UInt_t fCurrTrackEnable;			// current value of track enable
  UInt_t fCurrTrackletEnable; 			// current value of tracklet enable
  UInt_t fCurrStackMask;			// current mask of active stacks
#ifdef TRD_RAW_DEBUG
  UInt_t *fCurrL0Count;  	                // number of received L0 triggers
  UInt_t *fCurrL1aCount;	                // number of received L1a triggers
  UInt_t *fCurrL1rCount;	                // number of received L1r triggers
  UInt_t *fCurrL2aCount;	                // number of received L2a triggers
  UInt_t *fCurrL2rCount;	                // number of received L2r triggers
   Int_t fCurrL0offset[540];	                // current offset for L0 accepts from GTU and chambers
  UInt_t fCurrEvCount[540];	                // current event count from the MCMs
#endif

  // Tracking header
  UInt_t *fCurrTrkHeaderIndexWord;              // current tracking header index word
  UInt_t *fCurrTrkHeaderSize;                   // current tracking header index word
  ULong64_t *fCurrTrkFlags;                     // current tracking done flags

  // Trigger header
  UInt_t *fCurrTrgHeaderIndexWord;              // current tracking header index word
  UInt_t *fCurrTrgHeaderSize;                   // current tracking header index word
  UInt_t *fCurrTrgFlags;			// current trigger flags of all sectors

  // Stack header
  UInt_t *fCurrStackIndexWord;			// current stack index words
  UInt_t *fCurrStackHeaderSize;			// current stack index sizes
  UInt_t *fCurrStackHeaderVersion;		// current stack header versions
  UInt_t *fCurrLinkMask;			// current link masks
  UInt_t *fCurrCleanCheckout;			// current clean checkout flags
  UInt_t *fCurrBoardId;				// current board IDs
  UInt_t  fCurrHwRev;    			// current hardware revision
  UInt_t *fCurrHwRevTMU;			// current hardware revision
  UInt_t *fCurrLinkMonitorFlags;		// current link monitor flags
  UInt_t *fCurrLinkDataTypeFlags;		// current link data flags
  UInt_t *fCurrLinkDebugFlags;			// current link debug flags

  // CRC checks from trailer
  Char_t fCurrMatchFlagsSRAM[18];
  Char_t fCurrMatchFlagsPostBP[18];
  UInt_t fCurrChecksumStack[18][5];
  UInt_t fCurrChecksumSIU;

  // HC information
  Int_t fCurrSpecial;				// current value of the special flag
  Int_t fCurrMajor;				// current major version
  Int_t fCurrMinor;				// current minor version
  Int_t fCurrAddHcWords;			// current number of additional HC-header words
  Int_t fCurrSm;				// current sector
  Int_t fCurrStack;				// current stack
  Int_t fCurrLayer;				// current layer
  Int_t fCurrSide;				// current side
  Int_t fCurrHC;				// current HC
  Int_t fCurrCheck;				// current check bits
  Int_t fCurrNtimebins;				// current number of timebins
  Int_t fCurrPtrgCnt;				// current pretrigger count
  Int_t fCurrPtrgPhase;				// current pretrigger phase
#ifdef TRD_RAW_DEBUG
  Int_t fCurrBC[1080];				// current BC
#endif

  // settings for dumping
  Int_t fDumpMCM[100];		                // MCMs to dump
  Int_t fNDumpMCMs;                             // number of MCMs to dump

  // output data
  AliTRDarrayADC *fAdcArray;			// pointer to ADC array
  AliTRDSignalIndex *fSignalIndex;		// pointer to the signal index
  TClonesArray *fTracklets;			// pointer to array of tracklets
  TClonesArray *fTracks;			// pointer to array of GTU tracks
  TClonesArray *fMarkers;			// pointer to array of markers (data present, errors, ...)

  AliTRDrawStream(const AliTRDrawStream&);           // not implemented
  AliTRDrawStream& operator=(const AliTRDrawStream&); // not implemented

  ClassDef(AliTRDrawStream, 0);
};

Int_t AliTRDrawStream::GetNActiveChannelsFromMask(UInt_t adcmask) const
{
  // return number of active bits in the ADC mask

  adcmask = GetActiveChannels(adcmask);
  adcmask = adcmask - ((adcmask >> 1) & 0x55555555);
  adcmask = (adcmask & 0x33333333) + ((adcmask >> 2) & 0x33333333);
  return (((adcmask + (adcmask >> 4)) & 0xF0F0F0F) * 0x1010101) >> 24;
}

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