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$ */
/** @file    AliFMDRawReader.cxx
    @author  Christian Holm Christensen <cholm@nbi.dk>
    @date    Mon Mar 27 12:45:23 2006
    @brief   Class to read raw data 
    @ingroup FMD_rec
*/
//____________________________________________________________________
//
// Class to read ADC values from a AliRawReader object. 
//
// This class uses the AliFMDRawStreamer class to read the ALTRO
// formatted data. 
// 
//          +-------+
//          | TTask |
//          +-------+
//              ^
//              |
//      +-----------------+  <<references>>  +--------------+
//      | AliFMDRawReader |<>----------------| AliRawReader |
//      +-----------------+                  +--------------+
//              |                                  ^
//              | <<uses>>                         |
//              V                                  |
//      +-----------------+      <<uses>>          |
//      | AliFMDRawStream |------------------------+
//      +-----------------+
//              |
//              V
//      +----------------+
//      | AliAltroStream |
//      +----------------+
//
// #include <AliLog.h>		// ALILOG_H
#include "AliFMDDebug.h" // Better debug macros
#include "AliFMDParameters.h"	// ALIFMDPARAMETERS_H
#include "AliFMDDigit.h"	// ALIFMDDIGIT_H
#include "AliFMDSDigit.h"	// ALIFMDSDIGIT_H
// #include "AliFMDRawStream.h"	// ALIFMDRAWSTREAM_H 
#include "AliRawReader.h"	// ALIRAWREADER_H 
#include "AliFMDRawReader.h"	// ALIFMDRAWREADER_H 
#include "AliFMDDebug.h"
#include "AliFMDCalibSampleRate.h"
#include "AliFMDCalibStripRange.h"
#include "AliFMDAltroMapping.h"
#include "AliFMDUShortMap.h"
// #include "AliFMDAltroIO.h"	// ALIFMDALTROIO_H 
#include "AliAltroRawStreamV3.h"
#include <TArrayS.h>		// ROOT_TArrayS
#include <TTree.h>		// ROOT_TTree
#include <TClonesArray.h>	// ROOT_TClonesArray
#include <TString.h>
#include <iostream>
#include <climits>
// #include <iomanip>

//____________________________________________________________________
ClassImp(AliFMDRawReader)
#if 0
  ; // This is here to keep Emacs for indenting the next line
#endif

//____________________________________________________________________
AliFMDRawReader::AliFMDRawReader(AliRawReader* reader, TTree* tree) 
  : TTask("FMDRawReader", "Reader of Raw ADC values from the FMD"),
    fTree(tree),
    fReader(reader), 
    // fSampleRate(1),
    fData(0),
    fNbytes(0), 
    fMinStrip(0),
    fMaxStrip(127), 
    fPreSamp(14+5),
    fSeen(0), 
    fVerbose(false), 
    fErrors("TObject"),
    fNErrChanLen(0), 
    fNErrAddress(0)
{
  // Default CTOR
  for (Int_t i = 0; i < 3; i++) { 
    fSampleRate[i]   = 0;
    fZeroSuppress[i] = kFALSE;
    fNoiseFactor[i]  = 1;
    fL1Phase[i]      = 0;
    fNErrors[i]      = 0;
  }
}

//____________________________________________________________________
void
AliFMDRawReader::Exec(Option_t*) 
{
  // Read the data 
  TClonesArray* array = new TClonesArray("AliFMDDigit");
  if (!fTree) {
    AliError("No tree");
    return;
  }
  fTree->Branch("FMD", &array);
  
  
  ReadAdcs(array);
  Int_t nWrite = fTree->Fill();
  AliDebugF(1,"Got a grand total of %d digits, wrote %d bytes to tree", 
	    array->GetEntriesFast(), nWrite);
  delete array;
}

//____________________________________________________________________
void
AliFMDRawReader::AddError(Int_t ddl, Int_t hwaddr)
{
  Int_t nErr = fErrors.GetEntries();
  TObject* o = new (fErrors[nErr]) TObject;
  o->SetUniqueID((ddl & 0xFF) << 12 | (hwaddr & 0xFFF));
}
//____________________________________________________________________
void
AliFMDRawReader::ReadbackError(const AliAltroRawStreamV3& input,
			       const char* format, ...)
{
  static char buf[512];
  va_list ap;
  va_start(ap, format);
  vsnprintf(buf, 511, format, ap);
  buf[511] = '\0';
  va_end(ap);

  // { AliWarning(buf); }
  if (AliDebugLevel() > 10) {
    AliLog::Flush();
    AliWarning(buf);
    input.HexDumpChannel();
  }

  Int_t    ddl    = input.GetDDLNumber();
  Int_t    hwaddr = input.GetHWAddress();
  
  fReader->AddMinorErrorLog(AliAltroRawStreamV3::kAltroPayloadErr,buf);
  AddError(ddl, hwaddr); 
  fNErrors[ddl]++;
}

//____________________________________________________________________
Int_t
AliFMDRawReader::NewDDL(AliAltroRawStreamV3& input, UShort_t& det)
{
  // Process a new DDL.  Sets the internal data members fZeroSuppress, 
  // fSampleRate, and fNoiseFactor based on information in the RCU trailer. 
  // 
  // Parameters:
  //   input Input stream
  //   det   On return, the detector number
  // 
  // Return value:
  //   negative value in case of problems, the DDL number otherwise

  // Get the DDL number
  UInt_t ddl = input.GetDDLNumber();
  AliDebugF(2,"DDL number %d", ddl);

  // Note, previously, the ALTROCFG1 register was interpreted as 
  // 
  // Bits    Value    Description
  //   0- 3      0/1   1st Baseline filter, mode 
  //   4- 5   Over-1   2nd baseline filter, # of pre-samples
  //   6- 9   factor   2nd baseline filter, # of post-samples 
  //  10-          0   2nd baseline filter, enable
  //  11-12       00   Zero suppression, glitch filter mode
  //  13-15      001   Zero suppression, # of post samples
  //  16-17       01   Zero suppression, # of pre  samples
  //  18         0/1   Zero suppression, enable
  //
  // The interpretation used in AliAltroRawStreamerV3 - which
  // corresponds directly to ALTRO DPCFG register - is 
  //
  // Bits    Value  Description
  //   0- 3    0/1   1st Baseline filter, mode 
  //   4         0   Polarity (if '1', then "1's inverse")
  //   5- 6     01   Zero suppression, # of pre samples
  //   7-10   0001   Zero suppression, # of post samples
  //  11         0   2nd baseline filter, enable
  //  12-13     00   Zero suppression, glitch filter mode
  //  14-16 factor   2nd baseline filter, # of post-samples
  //  17-18     01   2nd baseline filter, # of pre-samples 
  //  19       0/1   Zero suppression, enable
  //
  // From ALTRO DPCF2 we get 
  // 
  //  20-23   rate   Pre-samples 
  // 
  //  Writing 'x' for variable values, that means we have the
  //  following patterns for the 2 cases 
  //
  //    bit #  20   16   12    8    4    0
  //     old    |0x01|0010|00xx|xxxx|xxxx|
  //     new    |x01x|xx00|0000|1010|xxxx|
  //
  //  That means that we can check if bits 10-13 are '1000' or
  //  '0000', which will tell us if the value was written with the
  //  new or the old interpretation.    That is, we can check that 
  //
  //    if (((altrocfg1 >> 10) & 0x8) == 0x8) { 
  //      // old interpretation 
  //    }
  //    else { 
  //      // New interpretation 
  //    }
  //
  // That means, that we should never 
  //
  //  - change the # of zero suppression post samples 
  //  - Turn on 2nd baseline correction 
  //  - Change the zero-suppression glitch filter mode
  //
  // This change as introduced in version 1.2 of Rcu++
  //
  UInt_t cfg1 = input.GetAltroCFG1();
  if (((cfg1 >> 10) & 0x8) == 0x8) {
    UInt_t cfg2 = input.GetAltroCFG2();
    AliDebugF(3,"We have data from older MiniConf 0x%x cfg2=0x%08x", 
	      ((cfg1 >> 10) & 0x8), cfg2);
    fZeroSuppress[ddl] = (cfg1 >>  0) & 0x1;
    fNoiseFactor[ddl]  = (cfg1 >>  6) & 0xF;
    fSampleRate[ddl]   = (cfg2 >> 20) & 0xF;
  }
  else {
    AliDebugF(3,"We have data from newer MiniConf 0x%x", 
	      ((cfg1 >> 10) & 0x8));
    fZeroSuppress[ddl] = input.GetZeroSupp();
    // WARNING: We store the noise factor in the 2nd baseline
    // filters excluded post samples, since we'll never use that
    // mode. 
    // fNoiseFactor[ddl]  = input.GetNPostsamples();
    fNoiseFactor[ddl]  = input.GetNNonZSPostsamples();
    // WARNING: We store the sample rate in the number of pre-trigger
    // samples, since we'll never use that mode.
    fSampleRate[ddl]     = input.GetNPretriggerSamples();
    // 
  }
  AliDebugF(10,"Phase of DDL=%d is %g (%d)", ddl, input.GetL1Phase(),
	    input.GetAltroCFG2() & 0x1F);
  fL1Phase[ddl] = input.GetAltroCFG2() & 0x1F; // input.GetL1Phase();
  AliDebugF(3,"RCU @ DDL %d zero suppression: %s", 
		   ddl, (fZeroSuppress[ddl] ? "yes" : "no"));
  AliDebugF(3,"RCU @ DDL %d noise factor: %d", ddl,fNoiseFactor[ddl]);    
  AliDebugF(3,"RCU @ DDL %d sample rate: %d", ddl,fSampleRate[ddl]);
  
  
  // Get Errors seen 
  Int_t nChAddrMismatch = input.GetNChAddrMismatch();
  Int_t nChLenMismatch  = input.GetNChLengthMismatch();
  if (nChAddrMismatch != 0) {
    ReadbackError(input, 
		  "Got %d channels with address mis-matches for 0x%03x",
		  nChAddrMismatch, ddl);
    fNErrAddress += nChAddrMismatch;
  }
  if (nChLenMismatch != 0) {
    ReadbackError(input, 
		  "Got %d channels with length mis-matches for 0x%03x",
		  nChLenMismatch, ddl);
    fNErrChanLen += nChLenMismatch;
  }

  // Map DDL number to the detector number 
  AliFMDParameters*    pars   = AliFMDParameters::Instance();
  AliFMDAltroMapping*  map    = pars->GetAltroMap();
  if (map->DDL2Detector(ddl) < 0) return -1;
  det = map->DDL2Detector(ddl);

  if (AliLog::GetDebugLevel("FMD", 0) > 5) 
    input.PrintRCUTrailer();
  return ddl;
}

//____________________________________________________________________
Int_t
AliFMDRawReader::NewChannel(const AliAltroRawStreamV3& input,  UShort_t det,
			    Char_t&  ring, UShort_t& sec, Short_t& strbase)
{
  // Processs a new channel.  Sets the internal data members
  // fMinStrip, fMaxStrip, and fPreSamp. 
  //
  // Parameter:
  //   input   Input stream
  //   ring    On return, the ring identifier 
  //   sec     On return, the sector number
  //   strbase On return, the strip base
  // 
  // Return value
  //   negative value in case of problems, hardware address otherwise

  // Get the hardware address, and map that to detector coordinates 
  UShort_t board, chip, channel;
  Int_t    ddl    = input.GetDDLNumber();
  Int_t    hwaddr = input.GetHWAddress();
  if (input.IsChannelBad()) { 
    ReadbackError(input, "Ignoring channel %03d/0x%03x with errors", 
		  ddl, hwaddr); 
    return 0xFFFF;
  }
  
  AliFMDParameters*    pars   = AliFMDParameters::Instance();
  AliFMDAltroMapping*  map    = pars->GetAltroMap();
  // Map to hardware stuff 
  map->ChannelAddress(hwaddr, board, chip, channel);
  // Then try to map to detector address
  if (!map->Channel2StripBase(board, chip, channel, ring, sec, strbase)) {
    AliErrorF("Failed to get detector id from DDL %d, "
	      "hardware address 0x%03x", ddl, hwaddr);
    return -1;
  }
  AliDebugF(7,"Board: 0x%02x, Altro: 0x%x, Channel: 0x%x", 
	    board, chip, channel);

  // Get the 'conditions'
  fMinStrip = pars->GetMinStrip(det, ring, sec, strbase);
  fMaxStrip = pars->GetMaxStrip(det, ring, sec, strbase);
  fPreSamp  = pars->GetPreSamples(det, ring, sec, strbase);
  if (fSampleRate[ddl] == 0) {
    AliDebugF(7,"Get sample rate for RCU @ DDL %d from OCDB", ddl);
    fSampleRate[ddl] = pars->GetSampleRate(det, ring, sec, strbase);
  }
  AliDebugF(7,"RCU @ DDL %d sample rate: %d", ddl,fSampleRate[ddl]);

  return hwaddr;
}

//____________________________________________________________________
Bool_t
AliFMDRawReader::NewBunch(const AliAltroRawStreamV3& input, 
			  UShort_t&  start, UShort_t& length)
{
  // 
  // Do some checks on the bunch data 
  // 
  Int_t    ddl      = input.GetDDLNumber();
  Int_t    hwaddr   = input.GetHWAddress();  
  UShort_t nSamples = input.GetNSamplesPerCh() + fPreSamp;
  UShort_t tstart   = input.GetStartTimeBin();
  length            = input.GetBunchLength();

  if (tstart >= nSamples) {
    ReadbackError(input, 
		  "Bunch in %03d/0x%03x has an start time greater "
		  "than number of samples: 0x%x >= 0x%x", 
		  ddl, hwaddr, tstart, nSamples);
    return false;
  }
  if ((int(tstart) - length + 1) < 0) { 
    ReadbackError(input, 
		  "Bunch in %03d/0x%03x has an invalid length and "
		  "start time: 0x%x,0x%x (%d-%d+1=%d<0)", 
		  ddl, hwaddr, length, tstart, tstart, length, 
		  int(tstart)-length+1);
    return false;
  }
  if (tstart >= start) { 
    ReadbackError(input, 
		  "Bunch in %03d/0x%03x has early start time: "
		  "0x%x >= 0x%x", ddl, hwaddr, tstart, start);
    return false;
  }
  start = tstart;
  return true;
}

//____________________________________________________________________
Int_t
AliFMDRawReader::NewSample(const AliAltroRawStreamV3& input, 
			   Int_t i, UShort_t t, UShort_t sec,
			   UShort_t  strbase, Short_t&  str, UShort_t& samp)
{
  // Process a new timebin
  // 
  // Parameters:
  //   input   Input stream
  //   i       Index into bunch data
  //   t       Time
  //   strbase Base of strip numbers for this channel
  //   str     On return, the strip number
  //   samp    On return, the sample number
  // 
  // Return value
  //   negative value in case of problems, ADC value otherwise
  if (t < fPreSamp) return -1;

  Int_t           ddl  = input.GetDDLNumber();
  Int_t           hwa  = input.GetHWAddress();
  const UShort_t* data = input.GetSignals();
  Short_t         adc  = data[i];
  AliDebugF(10,"0x%04x/0x%03x/%04d %4d", ddl, hwa, t, adc);

  AliFMDParameters*    pars   = AliFMDParameters::Instance();
  AliFMDAltroMapping*  map    = pars->GetAltroMap();

  samp            = 0;
  Short_t  stroff = 0;
  map->Timebin2Strip(sec, t, fPreSamp, fSampleRate[ddl], stroff, samp);
  str             = strbase + stroff;
      
  AliDebugF(20,"0x%04x/0x%03x/%04d=%4d maps to strip %3d sample %d " 
	    "(pre: %d, min: %d, max: %d, rate: %d)",
	    ddl, hwa, t, adc, str, samp, fPreSamp, 
	    fMinStrip, fMaxStrip, fSampleRate[ddl]);
  if (str < 0) { 
    AliDebugF(10,"Got presamples at timebin %d", i);
    return -1;
  }
	  
  // VA1 Local strip number 
  Short_t lstrip = (t - fPreSamp) / fSampleRate[ddl] + fMinStrip;
      
  AliDebugF(15,"Checking if strip %d (%d) in range [%d,%d]", 
	    lstrip, str, fMinStrip, fMaxStrip);
  if (lstrip < fMinStrip || lstrip > fMaxStrip) {
    AliDebugF(10,"Strip %03d-%d (%d,%d) from t=%d out of range (%3d->%3d)", 
	      str, samp, lstrip, stroff, t, fMinStrip, fMaxStrip);
    adc = -1;
  }
  // Possibly do pedestal subtraction of signal 
  if (adc > 1023) 
    AliWarningF("ADC value out of range: %4d", adc);
  return adc;
}

//____________________________________________________________________
Int_t
AliFMDRawReader::NextSample(UShort_t& det, Char_t&   rng, UShort_t& sec, 
			    UShort_t& str, UShort_t& sam, UShort_t& rat, 
			    Short_t&  adc, Bool_t&   zs,  UShort_t& fac)
{
  // Scan current event for next signal.   It returns kFALSE when
  // there's no more data in the event. 
  // 
  // Note, that this member function is in principle very fast, but
  // contains less error checking.  In particular, channels that have
  // bad bunches cannot be checked here.  Seeing a bad bunch will only
  // skip the remainder of the channel and not reset the already read
  // digits.   This is potentially dangerous. 
  //
  // Parameters: 
  //    det         On return, contain the detector number 
  //    rng         On return, contain the ring identifier 
  //    sec         On return, contain the sector number 
  //    str         On return, contain the strip number 
  //    sam         On return, contain the sample number 
  //    rat         On return, contain the sample rate 
  //    adc         On return, contain the ADC counts 
  //    zs          On return, contain the zero-supp. flag 
  //    fac         On return, contain the zero-supp. noise factor 
  // 
  // Return values: 
  //    0    No more data 
  //    -1   Read sample belongs to a bad bunch 
  //    >0   Good status - contains bit mask of values 
  //       Bit 1    New DDL
  //       Bit 2    New Channel
  //       Bit 3    New Bunch
  //       Bit 4    New Sample
  static AliAltroRawStreamV3 stream(fReader); //    = 0;
  static Int_t               ddl      = -1;
  static UShort_t            tdet     = 0;
  static Char_t              trng     = '\0';
  static UShort_t            tsec     = 0;
  static Short_t             tstr     = 0;   
  static Short_t             bstr     = -1;
  static UShort_t            tsam     = 0;   
  // static UInt_t           trate    = 0;
  static Int_t               hwaddr   = -1;
  static UShort_t            start    = 0;
  static UShort_t            length   = 0;
  static Short_t             t        = -1;
  static Int_t               i        = 0; 
  // First entry!
  if (stream.GetDDLNumber() < 0) { 
    fReader->Reset();
    fReader->Select("FMD");
    stream.Reset();
    stream.SelectRawData("FMD");
    stream.SetCheckAltroPayload(false);
    for (Int_t j = 0; j < kNDDL; j++) fNErrors[j] = 0;

    // Reset variables
    ddl    = -1;  
    // trate= 0;   
    tdet   = 0;   
    trng   = '\0';
    tsec   = 0;   
    tstr   = 0;  
    tsam   = -1;
    hwaddr = -1;
  }

  UShort_t ret = 0;
  do { 
    AliDebugF(15, "t=%4d, start=%4d, length=%4d", t, start, length);
    if (t < start - length + 1) { 
      AliDebugF(10,"Time t=%d < start-length+1=%d-%d+1 (%3d/0x%03x)", 
		t, start, length, ddl, hwaddr);
      if (hwaddr > 0xFFF || 
	  hwaddr < 0 || 
	  !stream.NextBunch()) { 
	if (AliDebugLevel() >= 10 && hwaddr > 0xFFF) {
	  AliDebug(10,"Last channel read was marked bad");
	}
	if (AliDebugLevel() >= 10 && hwaddr < 0) {
	  AliDebug(10,"No more channels");
	}
	AliDebug(10,"No next bunch, or first entry");
	if (ddl < 0 || !stream.NextChannel()) { 
	  if (AliDebugLevel() >= 10 && ddl < 0) { 
	    AliDebug(10,"No DDL");
	  }
	  AliDebug(10,"No next channel, or first entry");
	  if (!stream.NextDDL()) {
	    AliDebug(10,"No more DDLs");
	    stream.Reset();
	    return 0;
	  }
	  ddl = NewDDL(stream, tdet);
	  AliDebugF(5,"New DDL: %d (%d)", ddl, tdet);
	  ret |= 0x1;
	  continue;
	}
	hwaddr = NewChannel(stream, tdet, trng, tsec, bstr);
	if (hwaddr > 0xFFF) fNErrors[ddl] += 1;
	AliDebugF(5,"New Channel: %3d/0x%03x", ddl, hwaddr);
	start  = 1024;
	ret |= 0x2;
	continue;
      }
      if (!NewBunch(stream, start, length)) { 
	// AliWarning(Form("Bad bunch in %3d/0x%03x read - "
	//                 "should progress to next channel "
	//                 "(t=%4d,start=%4d,length=%4d)", 
	//                 ddl, hwaddr, t,start, length));
	hwaddr = 0xFFFF; // Bad channel
	return -1;
      }
      AliDebugF(5, "New bunch in  %3d/0x%03x: start=0x%03x, length=%4d", 
		ddl, hwaddr, start, length);
      ret |= 0x4;
      t      = start;
      i      = 0;
      AliDebugF(10,"Got new bunch FMD%d%c[%2d], bunch @ %d, length=%d", 
		tdet, trng, tsec, start, length);
    }
    Int_t tadc = NewSample(stream, i, t, tsec, bstr, tstr, tsam);
    AliDebugF(10,"New sample FMD%d%c[%2d,%3d]-%d = 0x%03x", 
	      tdet, trng, tsec, tstr, tsam, tadc);
    ret |= 0x8;
    if (tadc >= 0) { 
      det = tdet;
      rng = trng;
      sec = tsec;
      str = tstr;
      sam = tsam;
      adc = tadc;
      rat = fSampleRate[ddl];
      zs  = fZeroSuppress[ddl];
      fac = fNoiseFactor[ddl];
      t--;
      i++;
      AliDebugF(10,"Returning FMD%d%c[%2d,%3d]-%d = 0x%03x (%d,%d,%d)",
		det, rng, sec, str, sam, adc, rat, zs, fac);
      break;
    }
    t--;
    i++;
  } while (true);
  AliDebugF(5,"Returning 0x%02x", ret);
  return ret;
}


//____________________________________________________________________
Int_t
AliFMDRawReader::NextSignal(UShort_t& det, Char_t&   rng, 
			    UShort_t& sec, UShort_t& str, 
			    Short_t&  adc, Bool_t&   zs, 
			    UShort_t& fac)
{
  // 
  // Get the next signal
  // 
  // Parameters:
  //    det  On return, the detector
  //    rng  On return, the ring
  //    sec  On return, the sector
  //    str  On return, the strip
  //    adc  On return, the ADC value
  //    zs   On return, whether zero-supp. is enabled
  //    fac  On return, the usd noise factor
  // 
  // Return:
  //    true if valid data is returned
  //
  Int_t ret = 0;
  do { 
    UShort_t samp, rate;
    if ((ret = NextSample(det, rng, sec, str, samp, rate, adc, zs, fac)) <= 0)
      return ret;

    Bool_t take = SelectSample(samp, rate);
    if (!take) continue;
    break;
  } while (true);
  return ret;
}

//____________________________________________________________________
Bool_t
AliFMDRawReader::SelectSample(UShort_t samp, UShort_t rate) 
{
  // Check if the passed sample is the one we need
  Bool_t take = kFALSE;
  switch (rate) { 
  case 1:                      take = kTRUE; break;
  case 2:  if (samp == 1)      take = kTRUE; break;
  case 3:  if (samp == 1)      take = kTRUE; break; 
  case 4:  if (samp == 2)      take = kTRUE; break;
  default: if (samp == rate-2) take = kTRUE; break;
  }
  
  return take;
}
  
//____________________________________________________________________
Bool_t
AliFMDRawReader::ReadAdcs(TClonesArray* array) 
{
  // Read ADC values from raw input into passed TClonesArray of AliFMDDigit
  // objects. 
  AliDebug(3,"Reading ADC values into a TClonesArray");

  // Read raw data into the digits array, using AliFMDAltroReader. 
  if (!array) {
    AliError("No TClonesArray passed");
    return kFALSE;
  }
  // static ULong_t unique = 0;
  const UShort_t kUShortMax = (1 << 16) - 1;
  fSeen.Reset(kUShortMax);
  fErrors.Clear();
  fNErrChanLen = 0;
  fNErrAddress = 0;
  for (Int_t ddl = 0; ddl < kNDDL; ddl++) fNErrors[ddl] = 0;

  AliAltroRawStreamV3  input(fReader);
  input.Reset();
  input.SetCheckAltroPayload(false);
  input.SelectRawData("FMD");
  
  // Loop over input RORCs
  while (input.NextDDL()) { 
    UShort_t det = 0;
    Int_t    ddl = NewDDL(input, det);
    if (ddl < 0) break;
    fNErrors[ddl] = 0;

    while (input.NextChannel()) { 
      // Get the hardware address, and map that to detector coordinates 
      Char_t   ring;
      UShort_t sec;
      Short_t  strbase;
      Int_t    hwaddr   = NewChannel(input, det, ring, sec, strbase);
      if (hwaddr < 0) break;
      if (hwaddr > 0xFFF) continue;  

      UShort_t start    = 0x3FF;
      Bool_t   errors   = false;
      Int_t    first    = -1;
      Int_t    last     = -1;
      // Loop over bunches 
      while (input.NextBunch()) { 
	// Get Lenght of bunch, and pointer to the data 
	const UShort_t* data   = input.GetSignals();
	UShort_t        length;
	if (!NewBunch(input, start, length)) {
	  errors = true;
	  break;
	}

      
	// Loop over the data and store it. 
	for (Int_t i = 0; i < length; i++) { 
	  // Time 
	  Short_t  str;
	  UShort_t samp;
	  Int_t    t    = start - i;
	  Int_t    adc  = NewSample(input, i, t, sec, strbase, str, samp);
	  if (adc <= 0) continue;
	  UShort_t counts = adc;
      
	  AliDebugF(10,"FMD%d%c[%02d,%03d]-%d: %4d", 
		    det, ring, sec, str, samp, counts);
	  // Check the cache of indicies
	  Int_t idx = fSeen(det, ring, sec, str);
	  AliFMDDigit* digit = 0;
	  if (idx == kUShortMax) { 
	    // We haven't seen this strip yet. 
	    fSeen(det, ring, sec, str) = idx = array->GetEntriesFast();
	    AliDebugF(7, "making digit @ %5d for FMD%d%c[%2d,%3d]-%d "
		      "from %3d/0x%03x/%4d (def: %d)", 
		      idx, det, ring, sec, str, samp, ddl, hwaddr, t,
		      fSampleRate[ddl]);
	    digit = new ((*array)[idx]) AliFMDDigit(det, ring, sec, str);
	    digit->SetDefaultCounts(fSampleRate[ddl]);
	  }
	  else {
	    digit = static_cast<AliFMDDigit*>(array->At(idx));
	  }
	  if (first < 0) first = idx;
	  last = idx;
	  AliDebugF(5,"Setting FMD%d%c[%2d,%3d]-%d from timebin "
		    "%4d=%4d (%4d)", det, ring, sec, str, samp, t, 
		    counts, data[i]);
	  digit->SetCount(samp, counts);
	  if (AliLog::GetDebugLevel("FMD","") >= 5) digit->Print();
	} // for (i)
      } // while (bunch)
      if (errors) { 
	AliDebugF(2,"Channel %3d/0x%03x contain errors, "
		  "resetting index %d to %d", ddl, hwaddr, first, last);
	if (first >= 0) {
	  for (Int_t i = first; i <= last; i++) { 
	    AliFMDDigit* digit = static_cast<AliFMDDigit*>(array->At(i));
	    for (Int_t j = 0; j < fSampleRate[ddl]; j++) {
	      AliDebugF(10,"Resetting strip %s=%d",
			digit->GetName(),digit->Counts());
	      digit->SetCount(j, kBadSignal);
	    }
	  }
	}
      }
      // if (errors && (AliDebugLevel() > 0)) input.HexDumpChannel();
    } // while (channel)
  } // while (ddl)
  if (fNErrors[0] > 0 || fNErrors[1] > 0 || fNErrors[2] > 0 || 
      fNErrChanLen > 0 || fNErrAddress > 0) {
    // AliLog::Flush();
    AliLog::SetPrintRepetitions(false);
    AliWarningF("R/O errors: FMD1=%d, FMD2=%d, FMD3=%d, "
		"Channel Length=%d, address=%d", 
		fNErrors[0], fNErrors[1], fNErrors[2], 
		fNErrChanLen, fNErrAddress);
    AliLog::SetPrintRepetitions(true);
  }
  if (fVerbose && fErrors.GetEntries() > 0) {
    TString msg;
    Int_t   nErr = fErrors.GetEntries();
    for (Int_t i = 0; i < nErr; i++) {
      UInt_t where = fErrors.At(i)->GetUniqueID();
      if (i % 6 == 0) msg.Append("\n");
      msg.Append(Form("  %3d/0x%03x", (where >> 12) & 0xFF, (where & 0xFFF)));
    }
    // AliLog::Flush();
    AliLog::SetPrintRepetitions(false);
    AliWarningF("Got %d errors in channels %s", nErr, msg.Data());
    AliLog::SetPrintRepetitions(true);
  }
  return kTRUE;
}
//____________________________________________________________________
Bool_t
AliFMDRawReader::ReadAdcs(AliFMDUShortMap& map) 
{
  // Read ADC values from raw input into passed TClonesArray of AliFMDDigit
  // objects. 
  AliDebug(3,"Reading ADC values into a map");

  // const UShort_t kUShortMax = (1 << 16) - 1;
  for (Int_t ddl = 0; ddl < kNDDL; ddl++) fNErrors[ddl] = 0;

  AliAltroRawStreamV3  input(fReader);
  input.Reset();
  input.SetCheckAltroPayload(false);
  input.SelectRawData("FMD");
  
  // Loop over input RORCs
  while (input.NextDDL()) { 
    UShort_t det = 0;
    Int_t    ddl = NewDDL(input, det);
    if (ddl < 0) break;
    fNErrors[ddl] = 0;

    while (input.NextChannel()) { 
      // Get the hardware address, and map that to detector coordinates 
      Char_t   ring;
      UShort_t sec;
      Short_t  strbase;
      Int_t    hwaddr   = NewChannel(input, det, ring, sec, strbase);
      if (hwaddr < 0) break;
      if (hwaddr > 0xFFF) continue;  

      UShort_t start    = 0x3FF;
      Bool_t   errors   = false;
      Int_t    first    = -1;
      Int_t    last     = -1;
      // Loop over bunches 
      while (input.NextBunch()) { 
	// Get Lenght of bunch, and pointer to the data 
	// const UShort_t* data   = input.GetSignals();
	UShort_t        length;
	if (!NewBunch(input, start, length)) {
	  errors = true;
	  break;
	}

      
	// Loop over the data and store it. 
	for (Int_t i = 0; i < length; i++) { 
	  // Time 
	  Short_t  str;
	  UShort_t samp;
	  Int_t    t    = start - i;
	  Int_t    adc  = NewSample(input, i, t, sec, strbase, str, samp);
	  if (adc < 0) continue;
	  UShort_t counts = adc;
      
	  AliDebugF(10, "FMD%d%c[%02d,%03d]-%d: %4d", 
		    det, ring, sec, str, samp, counts);
	  if (SelectSample(samp, fSampleRate[ddl]))
	    map(det,ring,sec,str) = counts; 
	  if (first < 0) first = str;
	  last = str;
	} // for (i)
      } // while (bunch)
      if (errors) { 
	AliDebugF(2, "Channel %3d/0x%03x contain errors, "
		  "resetting strips %d to %d", ddl, hwaddr, first, last);
	if (first >= 0) {
	  Int_t ds = first <= last ? 1 : -1;
	  for (Int_t i = first; i != last+ds; i += ds) { 
	    AliDebugF(10, "Resetting strip FMD%d%c[%02d,%03d]=%d",
		      det,ring,sec,i,map(det,ring,sec,i));
	    map(det,ring,sec,i) = kBadSignal;
	  }
	}
      }
    } // while (channel)
  } // while (ddl)
  return kTRUE;
}

//____________________________________________________________________
Bool_t AliFMDRawReader::ReadSODevent(AliFMDCalibSampleRate* sampleRate, 
				     AliFMDCalibStripRange* stripRange, 
				     TArrayS &pulseSize, 
				     TArrayS &pulseLength, 
				     Bool_t* detectors) 
{
  // 
  // Read SOD event into passed objects.
  // 
  // Parameters:
  //    samplerate   The sample rate object to fill
  //    striprange   The strip range object to fill
  //    pulseSize    The pulse size object to fill
  //    pulseLength  The pulse length (in events) object to fill
  // 
  // Return:
  //    @c true on success
  //  
  AliDebug(0,"Start of SOD/EOD");
  
  UInt_t shift_clk[18];
  UInt_t sample_clk[18];
  UInt_t strip_low[18];
  UInt_t strip_high[18];
  UInt_t pulse_size[18];
  UInt_t pulse_length[18];  
  for (size_t i = 0; i < 18; i++) { 
    shift_clk[i]    = 0;
    sample_clk[i]   = 0;
    strip_low[i]    = 0;
    strip_high[i]   = 0;
    pulse_size[i]   = 0;
    pulse_length[i] = 0;
  }
  AliFMDParameters*   param = AliFMDParameters::Instance();
  AliFMDAltroMapping* map   = param->GetAltroMap();
  
  AliAltroRawStreamV3  streamer(fReader);
  streamer.Reset();
  streamer.SelectRawData("FMD");
  //fReader->GetDDLID();
  while (streamer.NextDDL()) {
    Int_t ddl   = streamer.GetDDLNumber();
    Int_t detID = fReader->GetDetectorID();
    if (detectors) detectors[map->DDL2Detector(ddl)-1] = kTRUE;
    AliDebugF(0," From reader: DDL number is %d , det ID is %d",ddl,detID);
    
    ULong_t  nPayloadWords = streamer.GetRCUPayloadSizeInSOD();
    UChar_t* payloadData   = streamer.GetRCUPayloadInSOD();
    UInt_t*  payloadWords  = reinterpret_cast<UInt_t*>(payloadData);
    //UInt_t*   payloadWords  = streamer.GetRCUPayloadInSOD();

    //std::cout<<nPayloadWords<<"    "<<ddl<<std::endl;
    for (ULong_t i = 1; i <= nPayloadWords ; i++, payloadWords++) {
      UInt_t payloadWord = *payloadWords; // Get32bitWord(i);
    
      //std::cout<<i<<Form("  word: 0x%x",payloadWord)<<std::endl;
      // address is only 24 bit
      UInt_t address       = (0xffffff & payloadWord);
      UInt_t type          = ((address >> 21) & 0xf);
      UInt_t error         = ((address >> 20) & 0x1);
      UInt_t bcast         = ((address >> 18) & 0x1);
      UInt_t bc_not_altro  = ((address >> 17) & 0x1);
      UInt_t board         = ((address >> 12) & 0x1f);
      UInt_t instruction   = 0;
      UInt_t chip          = 0;
      UInt_t channel       = 0;
      if(bc_not_altro)
	instruction        = address & 0xfff;
      else {
	chip               = ((address >> 9) & 0x7);
	channel            = ((address >> 5) & 0x5);
	instruction        = (address & 0x1f);
      }
	
      Bool_t readDataWord = kFALSE;
      switch(type) {
      case 0x0: // Fec read
	readDataWord = kTRUE;  
      case 0x1: // Fec cmd
      case 0x2: // Fec write
       	i++;  
	payloadWords++;
	break;
      case 0x4: // Loop
      case 0x5: // Wait
	break;
      case 0x6: // End sequence
      case 0x7: // End Mem
       	i = nPayloadWords + 1;
	break;
      default:    
	break;
      }
	
      //Don't read unless we have a FEC_RD
      if(!readDataWord)  continue;

      UInt_t dataWord      = *payloadWords;//Get32bitWord(i);
      UInt_t data          = (0xFFFFF & dataWord) ;
      //UInt_t data          = (0xFFFF & dataWord) ;
	
      if(error) {
	AliWarningF("error bit detected at Word 0x%06x; "
		    "error % d, type %d, bc_not_altro %d, "
		    "bcast %d, board 0x%02x, chip 0x%x, "
		    "channel 0x%02x, instruction 0x%03x",
		    address, error, type, bc_not_altro, 
		    bcast,board,chip,channel,instruction);
	//process error
	continue;
      }
	
	
      switch(instruction) {
	  
      case 0x01: break;  // First ADC T           
      case 0x02: break; // I  3.3 V              
      case 0x03: break; // I  2.5 V altro digital
      case 0x04: break; // I  2.5 V altro analog 
      case 0x05: break; // I  2.5 V VA           
      case 0x06: break; // First ADC T           
      case 0x07: break; // I  3.3 V              
      case 0x08: break; // I  2.5 V altro digital
      case 0x09: break; // I  2.5 V altro analog 
      case 0x0A: break; // I  2.5 V VA           
      case 0x2D: break; // Second ADC T           
      case 0x2E: break; // I  1.5 V VA            
      case 0x2F: break; // I -2.0 V               
      case 0x30: break; // I -2.0 V VA            
      case 0x31: break; //    2.5 V Digital driver
      case 0x32: break; // Second ADC T           
      case 0x33: break; // I  1.5 V VA            
      case 0x34: break; // I -2.0 V               
      case 0x35: break; // I -2.0 V VA            
      case 0x36: break; //    2.5 V Digital driver
      case 0x37: break; // Third ADC T             
      case 0x38: break; // Temperature sens. 1     
      case 0x39: break; // Temperature sens. 2     
      case 0x3A: break; // U  2.5 altro digital (m)
      case 0x3B: break; // U  2.5 altro analog (m) 
      case 0x3C: break; // Third ADC T             
      case 0x3D: break; // Temperature sens. 1     
      case 0x3E: break; // Temperature sens. 2     
      case 0x3F: break; // U  2.5 altro digital (m)
      case 0x40: break; // U  2.5 altro analog (m) 
      case 0x41: break; // Forth ADC T  
      case 0x42: break; // U  2.5 VA (m)
      case 0x43: break; // U  1.5 VA (m)
      case 0x44: break; // U -2.0 VA (m)
      case 0x45: break; // U -2.0 (m)   
      case 0x46: break; // Forth ADC T  
      case 0x47: break; // U  2.5 VA (m)
      case 0x48: break; // U  1.5 VA (m)
      case 0x49: break; // U -2.0 VA (m)
      case 0x4A: break;  // U -2.0 (m)   
	// Counters 
      case 0x0B: break; // L1 trigger CouNTer
      case 0x0C: break; // L2 trigger CouNTer
      case 0x0D: break; // Sampling CLK CouNTer
      case 0x0E: break; // DSTB CouNTer
	// Test mode 
      case 0x0F: break; // Test mode word
      case 0x10: break; // Undersampling ratio.
	// Configuration and status 
      case 0x11: break; // Config/Status Register 0
      case 0x12: break; // Config/Status Register 1
      case 0x13: break; // Config/Status Register 2
      case 0x14: break; // Config/Status Register 3
      case 0x15: break; // Free
	// Comands:
      case 0x16: break; // Latch L1, L2, SCLK Counters
      case 0x17: break; // Clear counters
      case 0x18: break; // Clear CSR1
      case 0x19: break; // rstb ALTROs
      case 0x1A: break; // rstb BC
      case 0x1B: break; // Start conversion
      case 0x1C: break; // Scan event length
      case 0x1D: break; // Read event length
      case 0x1E: break; // Start test mode
      case 0x1F: break; // Read acquisition memory
	// FMD
      case 0x20: break; // FMDD status
      case 0x21: break; // L0 counters
      case 0x22: break; // FMD: Wait to hold
      case 0x23: break; // FMD: L1 timeout
      case 0x24: break; // FMD: L2 timeout
      case 0x25: // FMD: Shift clk 
	shift_clk[board] = ((data >> 8 ) & 0xFF); 
	AliDebugF(30, "Read shift_clk=%d for board 0x%02x", 
		  shift_clk[board], board);
	break; 
      case 0x26: // FMD: Strips 
	strip_low[board]  = ((data >> 0 ) & 0xFF); 
	strip_high[board] = ((data >> 8 ) & 0xFF);  
	break; 
      case 0x27: // FMD: Cal pulse 
	pulse_size[board]  =  ((data >> 8 ) & 0xFF);
	break; 
      case 0x28: break; // FMD: Shape bias
      case 0x29: break; // FMD: Shape ref
      case 0x2A: break; // FMD: Preamp ref
      case 0x2B: // FMD: Sample clk 
	sample_clk[board] = ((data >> 8 ) & 0xFF); 
	AliDebugF(30,"Read sample_clk=%d for board 0x%02x", 
		  sample_clk[board], board);
	break; 
      case 0x2C: break; // FMD: Commands
      case 0x4B: // FMD: Cal events 
	pulse_length[board] = ((data >> 0 ) & 0xFF);
	break; 
      default: break;
	
      }
      AliDebugF(50,"instruction 0x%x, dataword 0x%x",
		instruction,dataWord);
    } // End of loop over Result memory event
    
    UShort_t det    = 0;
    UShort_t sector = 0;
    Short_t  strip  = -1;
    Char_t   ring   = '\0';
   
    const UInt_t boards[4] = {0,1,16,17};
    for(Int_t i=0;i<4;i++) {
      if(ddl==0 && (i==1 || i==3)) continue;

      UInt_t chip =0, channel=0;
      det = map->DDL2Detector(ddl);
      map->Channel2StripBase(boards[i], chip, channel, ring, sector, strip);
     
      UInt_t samplerate = 0;
#if USE_VOTE
      if(sample_clk[boards[i]] == 0) {
	if(ddl == 0) {
	  Int_t sample1 = sample_clk[boards[0]];
	  Int_t sample2 = sample_clk[boards[2]];	    
	  if(sample1) sample_clk[boards[i]] = sample1;
	  else sample_clk[boards[i]] = sample2;
	}
	else {
	  Int_t sample1 = sample_clk[boards[0]];
	  Int_t sample2 = sample_clk[boards[1]];
	  Int_t sample3 = sample_clk[boards[2]];
	  Int_t sample4 = sample_clk[boards[3]];
	  Int_t agreement = 0;
	  if(sample1 == sample2) agreement++;
	  if(sample1 == sample3) agreement++;
	  if(sample1 == sample4) agreement++;
	  if(sample2 == sample3) agreement++;
	  if(sample2 == sample4) agreement++;
	  if(sample3 == sample4) agreement++;
	    
	  Int_t idx = 0;
	  if(i<3) idx = i+1;
	  else  idx = i-1;
	  if(agreement == 3) {
	    sample_clk[boards[i]] = sample_clk[boards[idx]];
	    shift_clk[boards[i]] = shift_clk[boards[idx]];
	    strip_low[boards[i]] = strip_low[boards[idx]];
	    strip_high[boards[i]] = strip_high[boards[idx]];
	    pulse_length[boards[i]] = pulse_length[boards[idx]];
	    pulse_size[boards[i]] = pulse_size[boards[idx]];
	    AliDebugF(3,"Vote taken for ddl %d, board 0x%x",
		      ddl,boards[i]);
	  }
	}
      } 
#endif
      
      if(sample_clk[boards[i]])
	samplerate = shift_clk[boards[i]]/sample_clk[boards[i]];
      AliDebugF(10,"Sample rate for board 0x%02x is %d", 
		boards[i], samplerate);
      sampleRate->Set(det,ring,sector,0,samplerate);
      stripRange->Set(det,ring,sector,0,
		      strip_low[boards[i]],strip_high[boards[i]]);
      
      AliDebugF(20,"det %d, ring %c, ",det,ring);
      pulseLength.AddAt(pulse_length[boards[i]],
			GetHalfringIndex(det,ring,boards[i]/16));
      pulseSize.AddAt(pulse_size[boards[i]],
		      GetHalfringIndex(det,ring,boards[i]/16));
      
      
      
      AliDebugF(20,": Board: 0x%02x\n"
		"\tstrip_low  %3d, strip_high   %3d\n"
		"\tshift_clk  %3d, sample_clk   %3d\n"
		"\tpulse_size %3d, pulse_length %3d",
		boards[i], 
		strip_low[boards[i]], strip_high[boards[i]],
		shift_clk[boards[i]], sample_clk[boards[i]],
		pulse_size[boards[i]],pulse_length[boards[i]]);
    }
    
  }
  
  AliFMDParameters::Instance()->SetSampleRate(sampleRate);
  AliFMDParameters::Instance()->SetStripRange(stripRange);
  
  AliDebug(0,"End of SOD/EOD");
  
  return kTRUE;
}
//____________________________________________________________________

UInt_t AliFMDRawReader::Get32bitWord(Int_t idx)
{
  // This method returns the 32 bit word at a given
  // position inside the raw data payload.
  // The 'index' points to the beginning of the next word.
  // The method is supposed to be endian (platform)
  // independent.
  if (!fData) {
    AliFatal("Raw data paylod buffer is not yet initialized !");
  }

  Int_t index = 4*idx;
  
  if (index < 4) {
    //  fRawReader->AddFatalErrorLog(k32bitWordReadErr,Form("pos = %d",index));
    //    PrintDebug();
    AliWarningF("Invalid raw data payload position (%d) !",index);
  }

  UInt_t word = 0;
   
  word  = fData[--index] << 24;
  word |= fData[--index] << 16;
  word |= fData[--index] << 8;
  word |= fData[--index] << 0 ;

  return word;
}
//_____________________________________________________________________ 
Int_t AliFMDRawReader::GetHalfringIndex(UShort_t det, Char_t ring, 
					UShort_t board) const
{
  // 
  // Get short index for a given half-ring
  // 
  // Parameters:
  //    det   Detector number
  //    ring  Ring identifer
  //    board Board number
  // 
  // Return:
  //    
  //
  UShort_t iring  =  (ring == 'I' ? 1 : 0);
  
  Int_t index = (((det-1) << 2) | (iring << 1) | (board << 0));
  
  return index-2;
  
}

//____________________________________________________________________
// 
// EOF
//

 AliFMDRawReader.cxx:1
 AliFMDRawReader.cxx:2
 AliFMDRawReader.cxx:3
 AliFMDRawReader.cxx:4
 AliFMDRawReader.cxx:5
 AliFMDRawReader.cxx:6
 AliFMDRawReader.cxx:7
 AliFMDRawReader.cxx:8
 AliFMDRawReader.cxx:9
 AliFMDRawReader.cxx:10
 AliFMDRawReader.cxx:11
 AliFMDRawReader.cxx:12
 AliFMDRawReader.cxx:13
 AliFMDRawReader.cxx:14
 AliFMDRawReader.cxx:15
 AliFMDRawReader.cxx:16
 AliFMDRawReader.cxx:17
 AliFMDRawReader.cxx:18
 AliFMDRawReader.cxx:19
 AliFMDRawReader.cxx:20
 AliFMDRawReader.cxx:21
 AliFMDRawReader.cxx:22
 AliFMDRawReader.cxx:23
 AliFMDRawReader.cxx:24
 AliFMDRawReader.cxx:25
 AliFMDRawReader.cxx:26
 AliFMDRawReader.cxx:27
 AliFMDRawReader.cxx:28
 AliFMDRawReader.cxx:29
 AliFMDRawReader.cxx:30
 AliFMDRawReader.cxx:31
 AliFMDRawReader.cxx:32
 AliFMDRawReader.cxx:33
 AliFMDRawReader.cxx:34
 AliFMDRawReader.cxx:35
 AliFMDRawReader.cxx:36
 AliFMDRawReader.cxx:37
 AliFMDRawReader.cxx:38
 AliFMDRawReader.cxx:39
 AliFMDRawReader.cxx:40
 AliFMDRawReader.cxx:41
 AliFMDRawReader.cxx:42
 AliFMDRawReader.cxx:43
 AliFMDRawReader.cxx:44
 AliFMDRawReader.cxx:45
 AliFMDRawReader.cxx:46
 AliFMDRawReader.cxx:47
 AliFMDRawReader.cxx:48
 AliFMDRawReader.cxx:49
 AliFMDRawReader.cxx:50
 AliFMDRawReader.cxx:51
 AliFMDRawReader.cxx:52
 AliFMDRawReader.cxx:53
 AliFMDRawReader.cxx:54
 AliFMDRawReader.cxx:55
 AliFMDRawReader.cxx:56
 AliFMDRawReader.cxx:57
 AliFMDRawReader.cxx:58
 AliFMDRawReader.cxx:59
 AliFMDRawReader.cxx:60
 AliFMDRawReader.cxx:61
 AliFMDRawReader.cxx:62
 AliFMDRawReader.cxx:63
 AliFMDRawReader.cxx:64
 AliFMDRawReader.cxx:65
 AliFMDRawReader.cxx:66
 AliFMDRawReader.cxx:67
 AliFMDRawReader.cxx:68
 AliFMDRawReader.cxx:69
 AliFMDRawReader.cxx:70
 AliFMDRawReader.cxx:71
 AliFMDRawReader.cxx:72
 AliFMDRawReader.cxx:73
 AliFMDRawReader.cxx:74
 AliFMDRawReader.cxx:75
 AliFMDRawReader.cxx:76
 AliFMDRawReader.cxx:77
 AliFMDRawReader.cxx:78
 AliFMDRawReader.cxx:79
 AliFMDRawReader.cxx:80
 AliFMDRawReader.cxx:81
 AliFMDRawReader.cxx:82
 AliFMDRawReader.cxx:83
 AliFMDRawReader.cxx:84
 AliFMDRawReader.cxx:85
 AliFMDRawReader.cxx:86
 AliFMDRawReader.cxx:87
 AliFMDRawReader.cxx:88
 AliFMDRawReader.cxx:89
 AliFMDRawReader.cxx:90
 AliFMDRawReader.cxx:91
 AliFMDRawReader.cxx:92
 AliFMDRawReader.cxx:93
 AliFMDRawReader.cxx:94
 AliFMDRawReader.cxx:95
 AliFMDRawReader.cxx:96
 AliFMDRawReader.cxx:97
 AliFMDRawReader.cxx:98
 AliFMDRawReader.cxx:99
 AliFMDRawReader.cxx:100
 AliFMDRawReader.cxx:101
 AliFMDRawReader.cxx:102
 AliFMDRawReader.cxx:103
 AliFMDRawReader.cxx:104
 AliFMDRawReader.cxx:105
 AliFMDRawReader.cxx:106
 AliFMDRawReader.cxx:107
 AliFMDRawReader.cxx:108
 AliFMDRawReader.cxx:109
 AliFMDRawReader.cxx:110
 AliFMDRawReader.cxx:111
 AliFMDRawReader.cxx:112
 AliFMDRawReader.cxx:113
 AliFMDRawReader.cxx:114
 AliFMDRawReader.cxx:115
 AliFMDRawReader.cxx:116
 AliFMDRawReader.cxx:117
 AliFMDRawReader.cxx:118
 AliFMDRawReader.cxx:119
 AliFMDRawReader.cxx:120
 AliFMDRawReader.cxx:121
 AliFMDRawReader.cxx:122
 AliFMDRawReader.cxx:123
 AliFMDRawReader.cxx:124
 AliFMDRawReader.cxx:125
 AliFMDRawReader.cxx:126
 AliFMDRawReader.cxx:127
 AliFMDRawReader.cxx:128
 AliFMDRawReader.cxx:129
 AliFMDRawReader.cxx:130
 AliFMDRawReader.cxx:131
 AliFMDRawReader.cxx:132
 AliFMDRawReader.cxx:133
 AliFMDRawReader.cxx:134
 AliFMDRawReader.cxx:135
 AliFMDRawReader.cxx:136
 AliFMDRawReader.cxx:137
 AliFMDRawReader.cxx:138
 AliFMDRawReader.cxx:139
 AliFMDRawReader.cxx:140
 AliFMDRawReader.cxx:141
 AliFMDRawReader.cxx:142
 AliFMDRawReader.cxx:143
 AliFMDRawReader.cxx:144
 AliFMDRawReader.cxx:145
 AliFMDRawReader.cxx:146
 AliFMDRawReader.cxx:147
 AliFMDRawReader.cxx:148
 AliFMDRawReader.cxx:149
 AliFMDRawReader.cxx:150
 AliFMDRawReader.cxx:151
 AliFMDRawReader.cxx:152
 AliFMDRawReader.cxx:153
 AliFMDRawReader.cxx:154
 AliFMDRawReader.cxx:155
 AliFMDRawReader.cxx:156
 AliFMDRawReader.cxx:157
 AliFMDRawReader.cxx:158
 AliFMDRawReader.cxx:159
 AliFMDRawReader.cxx:160
 AliFMDRawReader.cxx:161
 AliFMDRawReader.cxx:162
 AliFMDRawReader.cxx:163
 AliFMDRawReader.cxx:164
 AliFMDRawReader.cxx:165
 AliFMDRawReader.cxx:166
 AliFMDRawReader.cxx:167
 AliFMDRawReader.cxx:168
 AliFMDRawReader.cxx:169
 AliFMDRawReader.cxx:170
 AliFMDRawReader.cxx:171
 AliFMDRawReader.cxx:172
 AliFMDRawReader.cxx:173
 AliFMDRawReader.cxx:174
 AliFMDRawReader.cxx:175
 AliFMDRawReader.cxx:176
 AliFMDRawReader.cxx:177
 AliFMDRawReader.cxx:178
 AliFMDRawReader.cxx:179
 AliFMDRawReader.cxx:180
 AliFMDRawReader.cxx:181
 AliFMDRawReader.cxx:182
 AliFMDRawReader.cxx:183
 AliFMDRawReader.cxx:184
 AliFMDRawReader.cxx:185
 AliFMDRawReader.cxx:186
 AliFMDRawReader.cxx:187
 AliFMDRawReader.cxx:188
 AliFMDRawReader.cxx:189
 AliFMDRawReader.cxx:190
 AliFMDRawReader.cxx:191
 AliFMDRawReader.cxx:192
 AliFMDRawReader.cxx:193
 AliFMDRawReader.cxx:194
 AliFMDRawReader.cxx:195
 AliFMDRawReader.cxx:196
 AliFMDRawReader.cxx:197
 AliFMDRawReader.cxx:198
 AliFMDRawReader.cxx:199
 AliFMDRawReader.cxx:200
 AliFMDRawReader.cxx:201
 AliFMDRawReader.cxx:202
 AliFMDRawReader.cxx:203
 AliFMDRawReader.cxx:204
 AliFMDRawReader.cxx:205
 AliFMDRawReader.cxx:206
 AliFMDRawReader.cxx:207
 AliFMDRawReader.cxx:208
 AliFMDRawReader.cxx:209
 AliFMDRawReader.cxx:210
 AliFMDRawReader.cxx:211
 AliFMDRawReader.cxx:212
 AliFMDRawReader.cxx:213
 AliFMDRawReader.cxx:214
 AliFMDRawReader.cxx:215
 AliFMDRawReader.cxx:216
 AliFMDRawReader.cxx:217
 AliFMDRawReader.cxx:218
 AliFMDRawReader.cxx:219
 AliFMDRawReader.cxx:220
 AliFMDRawReader.cxx:221
 AliFMDRawReader.cxx:222
 AliFMDRawReader.cxx:223
 AliFMDRawReader.cxx:224
 AliFMDRawReader.cxx:225
 AliFMDRawReader.cxx:226
 AliFMDRawReader.cxx:227
 AliFMDRawReader.cxx:228
 AliFMDRawReader.cxx:229
 AliFMDRawReader.cxx:230
 AliFMDRawReader.cxx:231
 AliFMDRawReader.cxx:232
 AliFMDRawReader.cxx:233
 AliFMDRawReader.cxx:234
 AliFMDRawReader.cxx:235
 AliFMDRawReader.cxx:236
 AliFMDRawReader.cxx:237
 AliFMDRawReader.cxx:238
 AliFMDRawReader.cxx:239
 AliFMDRawReader.cxx:240
 AliFMDRawReader.cxx:241
 AliFMDRawReader.cxx:242
 AliFMDRawReader.cxx:243
 AliFMDRawReader.cxx:244
 AliFMDRawReader.cxx:245
 AliFMDRawReader.cxx:246
 AliFMDRawReader.cxx:247
 AliFMDRawReader.cxx:248
 AliFMDRawReader.cxx:249
 AliFMDRawReader.cxx:250
 AliFMDRawReader.cxx:251
 AliFMDRawReader.cxx:252
 AliFMDRawReader.cxx:253
 AliFMDRawReader.cxx:254
 AliFMDRawReader.cxx:255
 AliFMDRawReader.cxx:256
 AliFMDRawReader.cxx:257
 AliFMDRawReader.cxx:258
 AliFMDRawReader.cxx:259
 AliFMDRawReader.cxx:260
 AliFMDRawReader.cxx:261
 AliFMDRawReader.cxx:262
 AliFMDRawReader.cxx:263
 AliFMDRawReader.cxx:264
 AliFMDRawReader.cxx:265
 AliFMDRawReader.cxx:266
 AliFMDRawReader.cxx:267
 AliFMDRawReader.cxx:268
 AliFMDRawReader.cxx:269
 AliFMDRawReader.cxx:270
 AliFMDRawReader.cxx:271
 AliFMDRawReader.cxx:272
 AliFMDRawReader.cxx:273
 AliFMDRawReader.cxx:274
 AliFMDRawReader.cxx:275
 AliFMDRawReader.cxx:276
 AliFMDRawReader.cxx:277
 AliFMDRawReader.cxx:278
 AliFMDRawReader.cxx:279
 AliFMDRawReader.cxx:280
 AliFMDRawReader.cxx:281
 AliFMDRawReader.cxx:282
 AliFMDRawReader.cxx:283
 AliFMDRawReader.cxx:284
 AliFMDRawReader.cxx:285
 AliFMDRawReader.cxx:286
 AliFMDRawReader.cxx:287
 AliFMDRawReader.cxx:288
 AliFMDRawReader.cxx:289
 AliFMDRawReader.cxx:290
 AliFMDRawReader.cxx:291
 AliFMDRawReader.cxx:292
 AliFMDRawReader.cxx:293
 AliFMDRawReader.cxx:294
 AliFMDRawReader.cxx:295
 AliFMDRawReader.cxx:296
 AliFMDRawReader.cxx:297
 AliFMDRawReader.cxx:298
 AliFMDRawReader.cxx:299
 AliFMDRawReader.cxx:300
 AliFMDRawReader.cxx:301
 AliFMDRawReader.cxx:302
 AliFMDRawReader.cxx:303
 AliFMDRawReader.cxx:304
 AliFMDRawReader.cxx:305
 AliFMDRawReader.cxx:306
 AliFMDRawReader.cxx:307
 AliFMDRawReader.cxx:308
 AliFMDRawReader.cxx:309
 AliFMDRawReader.cxx:310
 AliFMDRawReader.cxx:311
 AliFMDRawReader.cxx:312
 AliFMDRawReader.cxx:313
 AliFMDRawReader.cxx:314
 AliFMDRawReader.cxx:315
 AliFMDRawReader.cxx:316
 AliFMDRawReader.cxx:317
 AliFMDRawReader.cxx:318
 AliFMDRawReader.cxx:319
 AliFMDRawReader.cxx:320
 AliFMDRawReader.cxx:321
 AliFMDRawReader.cxx:322
 AliFMDRawReader.cxx:323
 AliFMDRawReader.cxx:324
 AliFMDRawReader.cxx:325
 AliFMDRawReader.cxx:326
 AliFMDRawReader.cxx:327
 AliFMDRawReader.cxx:328
 AliFMDRawReader.cxx:329
 AliFMDRawReader.cxx:330
 AliFMDRawReader.cxx:331
 AliFMDRawReader.cxx:332
 AliFMDRawReader.cxx:333
 AliFMDRawReader.cxx:334
 AliFMDRawReader.cxx:335
 AliFMDRawReader.cxx:336
 AliFMDRawReader.cxx:337
 AliFMDRawReader.cxx:338
 AliFMDRawReader.cxx:339
 AliFMDRawReader.cxx:340
 AliFMDRawReader.cxx:341
 AliFMDRawReader.cxx:342
 AliFMDRawReader.cxx:343
 AliFMDRawReader.cxx:344
 AliFMDRawReader.cxx:345
 AliFMDRawReader.cxx:346
 AliFMDRawReader.cxx:347
 AliFMDRawReader.cxx:348
 AliFMDRawReader.cxx:349
 AliFMDRawReader.cxx:350
 AliFMDRawReader.cxx:351
 AliFMDRawReader.cxx:352
 AliFMDRawReader.cxx:353
 AliFMDRawReader.cxx:354
 AliFMDRawReader.cxx:355
 AliFMDRawReader.cxx:356
 AliFMDRawReader.cxx:357
 AliFMDRawReader.cxx:358
 AliFMDRawReader.cxx:359
 AliFMDRawReader.cxx:360
 AliFMDRawReader.cxx:361
 AliFMDRawReader.cxx:362
 AliFMDRawReader.cxx:363
 AliFMDRawReader.cxx:364
 AliFMDRawReader.cxx:365
 AliFMDRawReader.cxx:366
 AliFMDRawReader.cxx:367
 AliFMDRawReader.cxx:368
 AliFMDRawReader.cxx:369
 AliFMDRawReader.cxx:370
 AliFMDRawReader.cxx:371
 AliFMDRawReader.cxx:372
 AliFMDRawReader.cxx:373
 AliFMDRawReader.cxx:374
 AliFMDRawReader.cxx:375
 AliFMDRawReader.cxx:376
 AliFMDRawReader.cxx:377
 AliFMDRawReader.cxx:378
 AliFMDRawReader.cxx:379
 AliFMDRawReader.cxx:380
 AliFMDRawReader.cxx:381
 AliFMDRawReader.cxx:382
 AliFMDRawReader.cxx:383
 AliFMDRawReader.cxx:384
 AliFMDRawReader.cxx:385
 AliFMDRawReader.cxx:386
 AliFMDRawReader.cxx:387
 AliFMDRawReader.cxx:388
 AliFMDRawReader.cxx:389
 AliFMDRawReader.cxx:390
 AliFMDRawReader.cxx:391
 AliFMDRawReader.cxx:392
 AliFMDRawReader.cxx:393
 AliFMDRawReader.cxx:394
 AliFMDRawReader.cxx:395
 AliFMDRawReader.cxx:396
 AliFMDRawReader.cxx:397
 AliFMDRawReader.cxx:398
 AliFMDRawReader.cxx:399
 AliFMDRawReader.cxx:400
 AliFMDRawReader.cxx:401
 AliFMDRawReader.cxx:402
 AliFMDRawReader.cxx:403
 AliFMDRawReader.cxx:404
 AliFMDRawReader.cxx:405
 AliFMDRawReader.cxx:406
 AliFMDRawReader.cxx:407
 AliFMDRawReader.cxx:408
 AliFMDRawReader.cxx:409
 AliFMDRawReader.cxx:410
 AliFMDRawReader.cxx:411
 AliFMDRawReader.cxx:412
 AliFMDRawReader.cxx:413
 AliFMDRawReader.cxx:414
 AliFMDRawReader.cxx:415
 AliFMDRawReader.cxx:416
 AliFMDRawReader.cxx:417
 AliFMDRawReader.cxx:418
 AliFMDRawReader.cxx:419
 AliFMDRawReader.cxx:420
 AliFMDRawReader.cxx:421
 AliFMDRawReader.cxx:422
 AliFMDRawReader.cxx:423
 AliFMDRawReader.cxx:424
 AliFMDRawReader.cxx:425
 AliFMDRawReader.cxx:426
 AliFMDRawReader.cxx:427
 AliFMDRawReader.cxx:428
 AliFMDRawReader.cxx:429
 AliFMDRawReader.cxx:430
 AliFMDRawReader.cxx:431
 AliFMDRawReader.cxx:432
 AliFMDRawReader.cxx:433
 AliFMDRawReader.cxx:434
 AliFMDRawReader.cxx:435
 AliFMDRawReader.cxx:436
 AliFMDRawReader.cxx:437
 AliFMDRawReader.cxx:438
 AliFMDRawReader.cxx:439
 AliFMDRawReader.cxx:440
 AliFMDRawReader.cxx:441
 AliFMDRawReader.cxx:442
 AliFMDRawReader.cxx:443
 AliFMDRawReader.cxx:444
 AliFMDRawReader.cxx:445
 AliFMDRawReader.cxx:446
 AliFMDRawReader.cxx:447
 AliFMDRawReader.cxx:448
 AliFMDRawReader.cxx:449
 AliFMDRawReader.cxx:450
 AliFMDRawReader.cxx:451
 AliFMDRawReader.cxx:452
 AliFMDRawReader.cxx:453
 AliFMDRawReader.cxx:454
 AliFMDRawReader.cxx:455
 AliFMDRawReader.cxx:456
 AliFMDRawReader.cxx:457
 AliFMDRawReader.cxx:458
 AliFMDRawReader.cxx:459
 AliFMDRawReader.cxx:460
 AliFMDRawReader.cxx:461
 AliFMDRawReader.cxx:462
 AliFMDRawReader.cxx:463
 AliFMDRawReader.cxx:464
 AliFMDRawReader.cxx:465
 AliFMDRawReader.cxx:466
 AliFMDRawReader.cxx:467
 AliFMDRawReader.cxx:468
 AliFMDRawReader.cxx:469
 AliFMDRawReader.cxx:470
 AliFMDRawReader.cxx:471
 AliFMDRawReader.cxx:472
 AliFMDRawReader.cxx:473
 AliFMDRawReader.cxx:474
 AliFMDRawReader.cxx:475
 AliFMDRawReader.cxx:476
 AliFMDRawReader.cxx:477
 AliFMDRawReader.cxx:478
 AliFMDRawReader.cxx:479
 AliFMDRawReader.cxx:480
 AliFMDRawReader.cxx:481
 AliFMDRawReader.cxx:482
 AliFMDRawReader.cxx:483
 AliFMDRawReader.cxx:484
 AliFMDRawReader.cxx:485
 AliFMDRawReader.cxx:486
 AliFMDRawReader.cxx:487
 AliFMDRawReader.cxx:488
 AliFMDRawReader.cxx:489
 AliFMDRawReader.cxx:490
 AliFMDRawReader.cxx:491
 AliFMDRawReader.cxx:492
 AliFMDRawReader.cxx:493
 AliFMDRawReader.cxx:494
 AliFMDRawReader.cxx:495
 AliFMDRawReader.cxx:496
 AliFMDRawReader.cxx:497
 AliFMDRawReader.cxx:498
 AliFMDRawReader.cxx:499
 AliFMDRawReader.cxx:500
 AliFMDRawReader.cxx:501
 AliFMDRawReader.cxx:502
 AliFMDRawReader.cxx:503
 AliFMDRawReader.cxx:504
 AliFMDRawReader.cxx:505
 AliFMDRawReader.cxx:506
 AliFMDRawReader.cxx:507
 AliFMDRawReader.cxx:508
 AliFMDRawReader.cxx:509
 AliFMDRawReader.cxx:510
 AliFMDRawReader.cxx:511
 AliFMDRawReader.cxx:512
 AliFMDRawReader.cxx:513
 AliFMDRawReader.cxx:514
 AliFMDRawReader.cxx:515
 AliFMDRawReader.cxx:516
 AliFMDRawReader.cxx:517
 AliFMDRawReader.cxx:518
 AliFMDRawReader.cxx:519
 AliFMDRawReader.cxx:520
 AliFMDRawReader.cxx:521
 AliFMDRawReader.cxx:522
 AliFMDRawReader.cxx:523
 AliFMDRawReader.cxx:524
 AliFMDRawReader.cxx:525
 AliFMDRawReader.cxx:526
 AliFMDRawReader.cxx:527
 AliFMDRawReader.cxx:528
 AliFMDRawReader.cxx:529
 AliFMDRawReader.cxx:530
 AliFMDRawReader.cxx:531
 AliFMDRawReader.cxx:532
 AliFMDRawReader.cxx:533
 AliFMDRawReader.cxx:534
 AliFMDRawReader.cxx:535
 AliFMDRawReader.cxx:536
 AliFMDRawReader.cxx:537
 AliFMDRawReader.cxx:538
 AliFMDRawReader.cxx:539
 AliFMDRawReader.cxx:540
 AliFMDRawReader.cxx:541
 AliFMDRawReader.cxx:542
 AliFMDRawReader.cxx:543
 AliFMDRawReader.cxx:544
 AliFMDRawReader.cxx:545
 AliFMDRawReader.cxx:546
 AliFMDRawReader.cxx:547
 AliFMDRawReader.cxx:548
 AliFMDRawReader.cxx:549
 AliFMDRawReader.cxx:550
 AliFMDRawReader.cxx:551
 AliFMDRawReader.cxx:552
 AliFMDRawReader.cxx:553
 AliFMDRawReader.cxx:554
 AliFMDRawReader.cxx:555
 AliFMDRawReader.cxx:556
 AliFMDRawReader.cxx:557
 AliFMDRawReader.cxx:558
 AliFMDRawReader.cxx:559
 AliFMDRawReader.cxx:560
 AliFMDRawReader.cxx:561
 AliFMDRawReader.cxx:562
 AliFMDRawReader.cxx:563
 AliFMDRawReader.cxx:564
 AliFMDRawReader.cxx:565
 AliFMDRawReader.cxx:566
 AliFMDRawReader.cxx:567
 AliFMDRawReader.cxx:568
 AliFMDRawReader.cxx:569
 AliFMDRawReader.cxx:570
 AliFMDRawReader.cxx:571
 AliFMDRawReader.cxx:572
 AliFMDRawReader.cxx:573
 AliFMDRawReader.cxx:574
 AliFMDRawReader.cxx:575
 AliFMDRawReader.cxx:576
 AliFMDRawReader.cxx:577
 AliFMDRawReader.cxx:578
 AliFMDRawReader.cxx:579
 AliFMDRawReader.cxx:580
 AliFMDRawReader.cxx:581
 AliFMDRawReader.cxx:582
 AliFMDRawReader.cxx:583
 AliFMDRawReader.cxx:584
 AliFMDRawReader.cxx:585
 AliFMDRawReader.cxx:586
 AliFMDRawReader.cxx:587
 AliFMDRawReader.cxx:588
 AliFMDRawReader.cxx:589
 AliFMDRawReader.cxx:590
 AliFMDRawReader.cxx:591
 AliFMDRawReader.cxx:592
 AliFMDRawReader.cxx:593
 AliFMDRawReader.cxx:594
 AliFMDRawReader.cxx:595
 AliFMDRawReader.cxx:596
 AliFMDRawReader.cxx:597
 AliFMDRawReader.cxx:598
 AliFMDRawReader.cxx:599
 AliFMDRawReader.cxx:600
 AliFMDRawReader.cxx:601
 AliFMDRawReader.cxx:602
 AliFMDRawReader.cxx:603
 AliFMDRawReader.cxx:604
 AliFMDRawReader.cxx:605
 AliFMDRawReader.cxx:606
 AliFMDRawReader.cxx:607
 AliFMDRawReader.cxx:608
 AliFMDRawReader.cxx:609
 AliFMDRawReader.cxx:610
 AliFMDRawReader.cxx:611
 AliFMDRawReader.cxx:612
 AliFMDRawReader.cxx:613
 AliFMDRawReader.cxx:614
 AliFMDRawReader.cxx:615
 AliFMDRawReader.cxx:616
 AliFMDRawReader.cxx:617
 AliFMDRawReader.cxx:618
 AliFMDRawReader.cxx:619
 AliFMDRawReader.cxx:620
 AliFMDRawReader.cxx:621
 AliFMDRawReader.cxx:622
 AliFMDRawReader.cxx:623
 AliFMDRawReader.cxx:624
 AliFMDRawReader.cxx:625
 AliFMDRawReader.cxx:626
 AliFMDRawReader.cxx:627
 AliFMDRawReader.cxx:628
 AliFMDRawReader.cxx:629
 AliFMDRawReader.cxx:630
 AliFMDRawReader.cxx:631
 AliFMDRawReader.cxx:632
 AliFMDRawReader.cxx:633
 AliFMDRawReader.cxx:634
 AliFMDRawReader.cxx:635
 AliFMDRawReader.cxx:636
 AliFMDRawReader.cxx:637
 AliFMDRawReader.cxx:638
 AliFMDRawReader.cxx:639
 AliFMDRawReader.cxx:640
 AliFMDRawReader.cxx:641
 AliFMDRawReader.cxx:642
 AliFMDRawReader.cxx:643
 AliFMDRawReader.cxx:644
 AliFMDRawReader.cxx:645
 AliFMDRawReader.cxx:646
 AliFMDRawReader.cxx:647
 AliFMDRawReader.cxx:648
 AliFMDRawReader.cxx:649
 AliFMDRawReader.cxx:650
 AliFMDRawReader.cxx:651
 AliFMDRawReader.cxx:652
 AliFMDRawReader.cxx:653
 AliFMDRawReader.cxx:654
 AliFMDRawReader.cxx:655
 AliFMDRawReader.cxx:656
 AliFMDRawReader.cxx:657
 AliFMDRawReader.cxx:658
 AliFMDRawReader.cxx:659
 AliFMDRawReader.cxx:660
 AliFMDRawReader.cxx:661
 AliFMDRawReader.cxx:662
 AliFMDRawReader.cxx:663
 AliFMDRawReader.cxx:664
 AliFMDRawReader.cxx:665
 AliFMDRawReader.cxx:666
 AliFMDRawReader.cxx:667
 AliFMDRawReader.cxx:668
 AliFMDRawReader.cxx:669
 AliFMDRawReader.cxx:670
 AliFMDRawReader.cxx:671
 AliFMDRawReader.cxx:672
 AliFMDRawReader.cxx:673
 AliFMDRawReader.cxx:674
 AliFMDRawReader.cxx:675
 AliFMDRawReader.cxx:676
 AliFMDRawReader.cxx:677
 AliFMDRawReader.cxx:678
 AliFMDRawReader.cxx:679
 AliFMDRawReader.cxx:680
 AliFMDRawReader.cxx:681
 AliFMDRawReader.cxx:682
 AliFMDRawReader.cxx:683
 AliFMDRawReader.cxx:684
 AliFMDRawReader.cxx:685
 AliFMDRawReader.cxx:686
 AliFMDRawReader.cxx:687
 AliFMDRawReader.cxx:688
 AliFMDRawReader.cxx:689
 AliFMDRawReader.cxx:690
 AliFMDRawReader.cxx:691
 AliFMDRawReader.cxx:692
 AliFMDRawReader.cxx:693
 AliFMDRawReader.cxx:694
 AliFMDRawReader.cxx:695
 AliFMDRawReader.cxx:696
 AliFMDRawReader.cxx:697
 AliFMDRawReader.cxx:698
 AliFMDRawReader.cxx:699
 AliFMDRawReader.cxx:700
 AliFMDRawReader.cxx:701
 AliFMDRawReader.cxx:702
 AliFMDRawReader.cxx:703
 AliFMDRawReader.cxx:704
 AliFMDRawReader.cxx:705
 AliFMDRawReader.cxx:706
 AliFMDRawReader.cxx:707
 AliFMDRawReader.cxx:708
 AliFMDRawReader.cxx:709
 AliFMDRawReader.cxx:710
 AliFMDRawReader.cxx:711
 AliFMDRawReader.cxx:712
 AliFMDRawReader.cxx:713
 AliFMDRawReader.cxx:714
 AliFMDRawReader.cxx:715
 AliFMDRawReader.cxx:716
 AliFMDRawReader.cxx:717
 AliFMDRawReader.cxx:718
 AliFMDRawReader.cxx:719
 AliFMDRawReader.cxx:720
 AliFMDRawReader.cxx:721
 AliFMDRawReader.cxx:722
 AliFMDRawReader.cxx:723
 AliFMDRawReader.cxx:724
 AliFMDRawReader.cxx:725
 AliFMDRawReader.cxx:726
 AliFMDRawReader.cxx:727
 AliFMDRawReader.cxx:728
 AliFMDRawReader.cxx:729
 AliFMDRawReader.cxx:730
 AliFMDRawReader.cxx:731
 AliFMDRawReader.cxx:732
 AliFMDRawReader.cxx:733
 AliFMDRawReader.cxx:734
 AliFMDRawReader.cxx:735
 AliFMDRawReader.cxx:736
 AliFMDRawReader.cxx:737
 AliFMDRawReader.cxx:738
 AliFMDRawReader.cxx:739
 AliFMDRawReader.cxx:740
 AliFMDRawReader.cxx:741
 AliFMDRawReader.cxx:742
 AliFMDRawReader.cxx:743
 AliFMDRawReader.cxx:744
 AliFMDRawReader.cxx:745
 AliFMDRawReader.cxx:746
 AliFMDRawReader.cxx:747
 AliFMDRawReader.cxx:748
 AliFMDRawReader.cxx:749
 AliFMDRawReader.cxx:750
 AliFMDRawReader.cxx:751
 AliFMDRawReader.cxx:752
 AliFMDRawReader.cxx:753
 AliFMDRawReader.cxx:754
 AliFMDRawReader.cxx:755
 AliFMDRawReader.cxx:756
 AliFMDRawReader.cxx:757
 AliFMDRawReader.cxx:758
 AliFMDRawReader.cxx:759
 AliFMDRawReader.cxx:760
 AliFMDRawReader.cxx:761
 AliFMDRawReader.cxx:762
 AliFMDRawReader.cxx:763
 AliFMDRawReader.cxx:764
 AliFMDRawReader.cxx:765
 AliFMDRawReader.cxx:766
 AliFMDRawReader.cxx:767
 AliFMDRawReader.cxx:768
 AliFMDRawReader.cxx:769
 AliFMDRawReader.cxx:770
 AliFMDRawReader.cxx:771
 AliFMDRawReader.cxx:772
 AliFMDRawReader.cxx:773
 AliFMDRawReader.cxx:774
 AliFMDRawReader.cxx:775
 AliFMDRawReader.cxx:776
 AliFMDRawReader.cxx:777
 AliFMDRawReader.cxx:778
 AliFMDRawReader.cxx:779
 AliFMDRawReader.cxx:780
 AliFMDRawReader.cxx:781
 AliFMDRawReader.cxx:782
 AliFMDRawReader.cxx:783
 AliFMDRawReader.cxx:784
 AliFMDRawReader.cxx:785
 AliFMDRawReader.cxx:786
 AliFMDRawReader.cxx:787
 AliFMDRawReader.cxx:788
 AliFMDRawReader.cxx:789
 AliFMDRawReader.cxx:790
 AliFMDRawReader.cxx:791
 AliFMDRawReader.cxx:792
 AliFMDRawReader.cxx:793
 AliFMDRawReader.cxx:794
 AliFMDRawReader.cxx:795
 AliFMDRawReader.cxx:796
 AliFMDRawReader.cxx:797
 AliFMDRawReader.cxx:798
 AliFMDRawReader.cxx:799
 AliFMDRawReader.cxx:800
 AliFMDRawReader.cxx:801
 AliFMDRawReader.cxx:802
 AliFMDRawReader.cxx:803
 AliFMDRawReader.cxx:804
 AliFMDRawReader.cxx:805
 AliFMDRawReader.cxx:806
 AliFMDRawReader.cxx:807
 AliFMDRawReader.cxx:808
 AliFMDRawReader.cxx:809
 AliFMDRawReader.cxx:810
 AliFMDRawReader.cxx:811
 AliFMDRawReader.cxx:812
 AliFMDRawReader.cxx:813
 AliFMDRawReader.cxx:814
 AliFMDRawReader.cxx:815
 AliFMDRawReader.cxx:816
 AliFMDRawReader.cxx:817
 AliFMDRawReader.cxx:818
 AliFMDRawReader.cxx:819
 AliFMDRawReader.cxx:820
 AliFMDRawReader.cxx:821
 AliFMDRawReader.cxx:822
 AliFMDRawReader.cxx:823
 AliFMDRawReader.cxx:824
 AliFMDRawReader.cxx:825
 AliFMDRawReader.cxx:826
 AliFMDRawReader.cxx:827
 AliFMDRawReader.cxx:828
 AliFMDRawReader.cxx:829
 AliFMDRawReader.cxx:830
 AliFMDRawReader.cxx:831
 AliFMDRawReader.cxx:832
 AliFMDRawReader.cxx:833
 AliFMDRawReader.cxx:834
 AliFMDRawReader.cxx:835
 AliFMDRawReader.cxx:836
 AliFMDRawReader.cxx:837
 AliFMDRawReader.cxx:838
 AliFMDRawReader.cxx:839
 AliFMDRawReader.cxx:840
 AliFMDRawReader.cxx:841
 AliFMDRawReader.cxx:842
 AliFMDRawReader.cxx:843
 AliFMDRawReader.cxx:844
 AliFMDRawReader.cxx:845
 AliFMDRawReader.cxx:846
 AliFMDRawReader.cxx:847
 AliFMDRawReader.cxx:848
 AliFMDRawReader.cxx:849
 AliFMDRawReader.cxx:850
 AliFMDRawReader.cxx:851
 AliFMDRawReader.cxx:852
 AliFMDRawReader.cxx:853
 AliFMDRawReader.cxx:854
 AliFMDRawReader.cxx:855
 AliFMDRawReader.cxx:856
 AliFMDRawReader.cxx:857
 AliFMDRawReader.cxx:858
 AliFMDRawReader.cxx:859
 AliFMDRawReader.cxx:860
 AliFMDRawReader.cxx:861
 AliFMDRawReader.cxx:862
 AliFMDRawReader.cxx:863
 AliFMDRawReader.cxx:864
 AliFMDRawReader.cxx:865
 AliFMDRawReader.cxx:866
 AliFMDRawReader.cxx:867
 AliFMDRawReader.cxx:868
 AliFMDRawReader.cxx:869
 AliFMDRawReader.cxx:870
 AliFMDRawReader.cxx:871
 AliFMDRawReader.cxx:872
 AliFMDRawReader.cxx:873
 AliFMDRawReader.cxx:874
 AliFMDRawReader.cxx:875
 AliFMDRawReader.cxx:876
 AliFMDRawReader.cxx:877
 AliFMDRawReader.cxx:878
 AliFMDRawReader.cxx:879
 AliFMDRawReader.cxx:880
 AliFMDRawReader.cxx:881
 AliFMDRawReader.cxx:882
 AliFMDRawReader.cxx:883
 AliFMDRawReader.cxx:884
 AliFMDRawReader.cxx:885
 AliFMDRawReader.cxx:886
 AliFMDRawReader.cxx:887
 AliFMDRawReader.cxx:888
 AliFMDRawReader.cxx:889
 AliFMDRawReader.cxx:890
 AliFMDRawReader.cxx:891
 AliFMDRawReader.cxx:892
 AliFMDRawReader.cxx:893
 AliFMDRawReader.cxx:894
 AliFMDRawReader.cxx:895
 AliFMDRawReader.cxx:896
 AliFMDRawReader.cxx:897
 AliFMDRawReader.cxx:898
 AliFMDRawReader.cxx:899
 AliFMDRawReader.cxx:900
 AliFMDRawReader.cxx:901
 AliFMDRawReader.cxx:902
 AliFMDRawReader.cxx:903
 AliFMDRawReader.cxx:904
 AliFMDRawReader.cxx:905
 AliFMDRawReader.cxx:906
 AliFMDRawReader.cxx:907
 AliFMDRawReader.cxx:908
 AliFMDRawReader.cxx:909
 AliFMDRawReader.cxx:910
 AliFMDRawReader.cxx:911
 AliFMDRawReader.cxx:912
 AliFMDRawReader.cxx:913
 AliFMDRawReader.cxx:914
 AliFMDRawReader.cxx:915
 AliFMDRawReader.cxx:916
 AliFMDRawReader.cxx:917
 AliFMDRawReader.cxx:918
 AliFMDRawReader.cxx:919
 AliFMDRawReader.cxx:920
 AliFMDRawReader.cxx:921
 AliFMDRawReader.cxx:922
 AliFMDRawReader.cxx:923
 AliFMDRawReader.cxx:924
 AliFMDRawReader.cxx:925
 AliFMDRawReader.cxx:926
 AliFMDRawReader.cxx:927
 AliFMDRawReader.cxx:928
 AliFMDRawReader.cxx:929
 AliFMDRawReader.cxx:930
 AliFMDRawReader.cxx:931
 AliFMDRawReader.cxx:932
 AliFMDRawReader.cxx:933
 AliFMDRawReader.cxx:934
 AliFMDRawReader.cxx:935
 AliFMDRawReader.cxx:936
 AliFMDRawReader.cxx:937
 AliFMDRawReader.cxx:938
 AliFMDRawReader.cxx:939
 AliFMDRawReader.cxx:940
 AliFMDRawReader.cxx:941
 AliFMDRawReader.cxx:942
 AliFMDRawReader.cxx:943
 AliFMDRawReader.cxx:944
 AliFMDRawReader.cxx:945
 AliFMDRawReader.cxx:946
 AliFMDRawReader.cxx:947
 AliFMDRawReader.cxx:948
 AliFMDRawReader.cxx:949
 AliFMDRawReader.cxx:950
 AliFMDRawReader.cxx:951
 AliFMDRawReader.cxx:952
 AliFMDRawReader.cxx:953
 AliFMDRawReader.cxx:954
 AliFMDRawReader.cxx:955
 AliFMDRawReader.cxx:956
 AliFMDRawReader.cxx:957
 AliFMDRawReader.cxx:958
 AliFMDRawReader.cxx:959
 AliFMDRawReader.cxx:960
 AliFMDRawReader.cxx:961
 AliFMDRawReader.cxx:962
 AliFMDRawReader.cxx:963
 AliFMDRawReader.cxx:964
 AliFMDRawReader.cxx:965
 AliFMDRawReader.cxx:966
 AliFMDRawReader.cxx:967
 AliFMDRawReader.cxx:968
 AliFMDRawReader.cxx:969
 AliFMDRawReader.cxx:970
 AliFMDRawReader.cxx:971
 AliFMDRawReader.cxx:972
 AliFMDRawReader.cxx:973
 AliFMDRawReader.cxx:974
 AliFMDRawReader.cxx:975
 AliFMDRawReader.cxx:976
 AliFMDRawReader.cxx:977
 AliFMDRawReader.cxx:978
 AliFMDRawReader.cxx:979
 AliFMDRawReader.cxx:980
 AliFMDRawReader.cxx:981
 AliFMDRawReader.cxx:982
 AliFMDRawReader.cxx:983
 AliFMDRawReader.cxx:984
 AliFMDRawReader.cxx:985
 AliFMDRawReader.cxx:986
 AliFMDRawReader.cxx:987
 AliFMDRawReader.cxx:988
 AliFMDRawReader.cxx:989
 AliFMDRawReader.cxx:990
 AliFMDRawReader.cxx:991
 AliFMDRawReader.cxx:992
 AliFMDRawReader.cxx:993
 AliFMDRawReader.cxx:994
 AliFMDRawReader.cxx:995
 AliFMDRawReader.cxx:996
 AliFMDRawReader.cxx:997
 AliFMDRawReader.cxx:998
 AliFMDRawReader.cxx:999
 AliFMDRawReader.cxx:1000
 AliFMDRawReader.cxx:1001
 AliFMDRawReader.cxx:1002
 AliFMDRawReader.cxx:1003
 AliFMDRawReader.cxx:1004
 AliFMDRawReader.cxx:1005
 AliFMDRawReader.cxx:1006
 AliFMDRawReader.cxx:1007
 AliFMDRawReader.cxx:1008
 AliFMDRawReader.cxx:1009
 AliFMDRawReader.cxx:1010
 AliFMDRawReader.cxx:1011
 AliFMDRawReader.cxx:1012
 AliFMDRawReader.cxx:1013
 AliFMDRawReader.cxx:1014
 AliFMDRawReader.cxx:1015
 AliFMDRawReader.cxx:1016
 AliFMDRawReader.cxx:1017
 AliFMDRawReader.cxx:1018
 AliFMDRawReader.cxx:1019
 AliFMDRawReader.cxx:1020
 AliFMDRawReader.cxx:1021
 AliFMDRawReader.cxx:1022
 AliFMDRawReader.cxx:1023
 AliFMDRawReader.cxx:1024
 AliFMDRawReader.cxx:1025
 AliFMDRawReader.cxx:1026
 AliFMDRawReader.cxx:1027
 AliFMDRawReader.cxx:1028
 AliFMDRawReader.cxx:1029
 AliFMDRawReader.cxx:1030
 AliFMDRawReader.cxx:1031
 AliFMDRawReader.cxx:1032
 AliFMDRawReader.cxx:1033
 AliFMDRawReader.cxx:1034
 AliFMDRawReader.cxx:1035
 AliFMDRawReader.cxx:1036
 AliFMDRawReader.cxx:1037
 AliFMDRawReader.cxx:1038
 AliFMDRawReader.cxx:1039
 AliFMDRawReader.cxx:1040
 AliFMDRawReader.cxx:1041
 AliFMDRawReader.cxx:1042
 AliFMDRawReader.cxx:1043
 AliFMDRawReader.cxx:1044
 AliFMDRawReader.cxx:1045
 AliFMDRawReader.cxx:1046
 AliFMDRawReader.cxx:1047
 AliFMDRawReader.cxx:1048
 AliFMDRawReader.cxx:1049
 AliFMDRawReader.cxx:1050
 AliFMDRawReader.cxx:1051
 AliFMDRawReader.cxx:1052
 AliFMDRawReader.cxx:1053
 AliFMDRawReader.cxx:1054
 AliFMDRawReader.cxx:1055
 AliFMDRawReader.cxx:1056
 AliFMDRawReader.cxx:1057
 AliFMDRawReader.cxx:1058
 AliFMDRawReader.cxx:1059
 AliFMDRawReader.cxx:1060
 AliFMDRawReader.cxx:1061
 AliFMDRawReader.cxx:1062
 AliFMDRawReader.cxx:1063
 AliFMDRawReader.cxx:1064
 AliFMDRawReader.cxx:1065
 AliFMDRawReader.cxx:1066
 AliFMDRawReader.cxx:1067
 AliFMDRawReader.cxx:1068
 AliFMDRawReader.cxx:1069
 AliFMDRawReader.cxx:1070
 AliFMDRawReader.cxx:1071
 AliFMDRawReader.cxx:1072
 AliFMDRawReader.cxx:1073
 AliFMDRawReader.cxx:1074
 AliFMDRawReader.cxx:1075
 AliFMDRawReader.cxx:1076
 AliFMDRawReader.cxx:1077
 AliFMDRawReader.cxx:1078
 AliFMDRawReader.cxx:1079
 AliFMDRawReader.cxx:1080
 AliFMDRawReader.cxx:1081
 AliFMDRawReader.cxx:1082
 AliFMDRawReader.cxx:1083
 AliFMDRawReader.cxx:1084
 AliFMDRawReader.cxx:1085
 AliFMDRawReader.cxx:1086
 AliFMDRawReader.cxx:1087
 AliFMDRawReader.cxx:1088
 AliFMDRawReader.cxx:1089
 AliFMDRawReader.cxx:1090
 AliFMDRawReader.cxx:1091
 AliFMDRawReader.cxx:1092
 AliFMDRawReader.cxx:1093
 AliFMDRawReader.cxx:1094
 AliFMDRawReader.cxx:1095
 AliFMDRawReader.cxx:1096
 AliFMDRawReader.cxx:1097
 AliFMDRawReader.cxx:1098
 AliFMDRawReader.cxx:1099
 AliFMDRawReader.cxx:1100
 AliFMDRawReader.cxx:1101
 AliFMDRawReader.cxx:1102
 AliFMDRawReader.cxx:1103
 AliFMDRawReader.cxx:1104
 AliFMDRawReader.cxx:1105
 AliFMDRawReader.cxx:1106
 AliFMDRawReader.cxx:1107
 AliFMDRawReader.cxx:1108
 AliFMDRawReader.cxx:1109
 AliFMDRawReader.cxx:1110
 AliFMDRawReader.cxx:1111
 AliFMDRawReader.cxx:1112
 AliFMDRawReader.cxx:1113
 AliFMDRawReader.cxx:1114
 AliFMDRawReader.cxx:1115
 AliFMDRawReader.cxx:1116
 AliFMDRawReader.cxx:1117
 AliFMDRawReader.cxx:1118
 AliFMDRawReader.cxx:1119
 AliFMDRawReader.cxx:1120
 AliFMDRawReader.cxx:1121
 AliFMDRawReader.cxx:1122
 AliFMDRawReader.cxx:1123
 AliFMDRawReader.cxx:1124
 AliFMDRawReader.cxx:1125
 AliFMDRawReader.cxx:1126
 AliFMDRawReader.cxx:1127
 AliFMDRawReader.cxx:1128
 AliFMDRawReader.cxx:1129
 AliFMDRawReader.cxx:1130
 AliFMDRawReader.cxx:1131
 AliFMDRawReader.cxx:1132
 AliFMDRawReader.cxx:1133
 AliFMDRawReader.cxx:1134
 AliFMDRawReader.cxx:1135
 AliFMDRawReader.cxx:1136
 AliFMDRawReader.cxx:1137
 AliFMDRawReader.cxx:1138
 AliFMDRawReader.cxx:1139
 AliFMDRawReader.cxx:1140
 AliFMDRawReader.cxx:1141
 AliFMDRawReader.cxx:1142
 AliFMDRawReader.cxx:1143
 AliFMDRawReader.cxx:1144
 AliFMDRawReader.cxx:1145
 AliFMDRawReader.cxx:1146
 AliFMDRawReader.cxx:1147
 AliFMDRawReader.cxx:1148
 AliFMDRawReader.cxx:1149
 AliFMDRawReader.cxx:1150
 AliFMDRawReader.cxx:1151
 AliFMDRawReader.cxx:1152
 AliFMDRawReader.cxx:1153
 AliFMDRawReader.cxx:1154
 AliFMDRawReader.cxx:1155
 AliFMDRawReader.cxx:1156
 AliFMDRawReader.cxx:1157
 AliFMDRawReader.cxx:1158
 AliFMDRawReader.cxx:1159
 AliFMDRawReader.cxx:1160
 AliFMDRawReader.cxx:1161
 AliFMDRawReader.cxx:1162
 AliFMDRawReader.cxx:1163
 AliFMDRawReader.cxx:1164
 AliFMDRawReader.cxx:1165
 AliFMDRawReader.cxx:1166
 AliFMDRawReader.cxx:1167
 AliFMDRawReader.cxx:1168
 AliFMDRawReader.cxx:1169
 AliFMDRawReader.cxx:1170
 AliFMDRawReader.cxx:1171
 AliFMDRawReader.cxx:1172
 AliFMDRawReader.cxx:1173
 AliFMDRawReader.cxx:1174
 AliFMDRawReader.cxx:1175
 AliFMDRawReader.cxx:1176
 AliFMDRawReader.cxx:1177
 AliFMDRawReader.cxx:1178
 AliFMDRawReader.cxx:1179
 AliFMDRawReader.cxx:1180
 AliFMDRawReader.cxx:1181
 AliFMDRawReader.cxx:1182
 AliFMDRawReader.cxx:1183
 AliFMDRawReader.cxx:1184
 AliFMDRawReader.cxx:1185
 AliFMDRawReader.cxx:1186
 AliFMDRawReader.cxx:1187
 AliFMDRawReader.cxx:1188
 AliFMDRawReader.cxx:1189
 AliFMDRawReader.cxx:1190
 AliFMDRawReader.cxx:1191
 AliFMDRawReader.cxx:1192
 AliFMDRawReader.cxx:1193
 AliFMDRawReader.cxx:1194
 AliFMDRawReader.cxx:1195
 AliFMDRawReader.cxx:1196
 AliFMDRawReader.cxx:1197
 AliFMDRawReader.cxx:1198
 AliFMDRawReader.cxx:1199
 AliFMDRawReader.cxx:1200
 AliFMDRawReader.cxx:1201
 AliFMDRawReader.cxx:1202
 AliFMDRawReader.cxx:1203
 AliFMDRawReader.cxx:1204
 AliFMDRawReader.cxx:1205
 AliFMDRawReader.cxx:1206
 AliFMDRawReader.cxx:1207
 AliFMDRawReader.cxx:1208
 AliFMDRawReader.cxx:1209
 AliFMDRawReader.cxx:1210
 AliFMDRawReader.cxx:1211
 AliFMDRawReader.cxx:1212
 AliFMDRawReader.cxx:1213
 AliFMDRawReader.cxx:1214
 AliFMDRawReader.cxx:1215
 AliFMDRawReader.cxx:1216
 AliFMDRawReader.cxx:1217
 AliFMDRawReader.cxx:1218
 AliFMDRawReader.cxx:1219
 AliFMDRawReader.cxx:1220
 AliFMDRawReader.cxx:1221
 AliFMDRawReader.cxx:1222
 AliFMDRawReader.cxx:1223
 AliFMDRawReader.cxx:1224
 AliFMDRawReader.cxx:1225
 AliFMDRawReader.cxx:1226
 AliFMDRawReader.cxx:1227