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$
// $MpId: AliMpSectorReader.cxx,v 1.9 2006/05/24 13:58:46 ivana Exp $
// Category: sector

//-----------------------------------------------------------------------------
// Class AliMpSectorReader
// -----------------------
// Class that takes care of reading the sector data.
// Included in AliRoot: 2003/05/02
// Authors: David Guez, Ivana Hrivnacova; IPN Orsay
//-----------------------------------------------------------------------------

#include "AliMpSectorReader.h"
#include "AliMpSector.h"
#include "AliMpFiles.h"
#include "AliMpDataStreams.h"
#include "AliMpZone.h"
#include "AliMpSubZone.h"
#include "AliMpRow.h"
#include "AliMpVRowSegment.h"
#include "AliMpRowSegment.h"
#include "AliMpRowSegmentLSpecial.h"
#include "AliMpRowSegmentRSpecial.h"
#include "AliMpPadRow.h"
#include "AliMpMotifReader.h"
#include "AliMpMotifMap.h"
#include "AliMpMotif.h"
#include "AliMpMotifSpecial.h"
#include "AliMpMotifType.h"
#include "AliMpConnection.h"
#include "AliMpDirection.h"
#include "AliMpConstants.h"

#include "AliLog.h"

#include <Riostream.h>
#include <Rstrstream.h>
#include <TSystem.h>
#include <TMath.h>

#include <limits>

#if !defined(__HP_aCC) && !defined(__alpha)
  #include <sstream>
#endif

/// \cond CLASSIMP
ClassImp(AliMpSectorReader)
/// \endcond

//
// static private methods
//

//_____________________________________________________________________________
const TString& AliMpSectorReader::GetSectorKeyword()
{
  /// sector keyword
  static const TString kSectorKeyword  = "SECTOR_DATA";
  return kSectorKeyword;
}  

//_____________________________________________________________________________
const TString& AliMpSectorReader::GetZoneKeyword()
{
  /// zone keyword
  static const TString kZoneKeyword = "ZONE";
  return kZoneKeyword;
}  

//_____________________________________________________________________________
const TString& AliMpSectorReader::GetSubZoneKeyword() 
{
  /// subzone keyword
  static const TString kSubZoneKeyword = "SUBZONE";
  return kSubZoneKeyword;
}  

//_____________________________________________________________________________
const TString& AliMpSectorReader::GetRowKeyword()
{
  /// row keyword
  static const TString kRowKeyword = "ROW_SEGMENT";
  return kRowKeyword;
}  

//_____________________________________________________________________________
const TString& AliMpSectorReader::GetSectorSpecialKeyword()
{
  /// sector special keyword
  static const TString kSectorSpecialKeyword = "SECTOR_SPECIAL_DATA";
  return kSectorSpecialKeyword;
}  

//_____________________________________________________________________________
const TString& AliMpSectorReader::GetMotifKeyword()
{
  /// motif keyword
  static const TString kMotifKeyword = "MOTIF";
  return kMotifKeyword;
}  

//_____________________________________________________________________________
const TString& AliMpSectorReader::GetRowSpecialKeyword()
{
  /// row special keyword
  static const TString kRowSpecialKeyword = "ROW";
  return kRowSpecialKeyword;
}  

//_____________________________________________________________________________
const TString& AliMpSectorReader::GetPadRowsKeyword()
{
  /// pad rows keyword
  static const TString kPadRowsKeyword = "PAD_ROWS";
  return kPadRowsKeyword;
}  

//_____________________________________________________________________________
const TString& AliMpSectorReader::GetPadRowSegmentKeyword()
{
  /// pad row segment keyword
  static const TString kPadRowSegmentKeyword = "PAD_ROW_SEGMENT";
  return kPadRowSegmentKeyword;
}  

//
// ctors, dtor
//
  
//_____________________________________________________________________________
AliMpSectorReader::AliMpSectorReader(AliMq::Station12Type station,
                                     AliMp::PlaneType plane) 
  : TObject(),
    fStationType(station),
    fPlaneType(plane),
    fSector(0),
    fMotifReader(new AliMpMotifReader(AliMp::kStation12, station, plane))
 
{
/// Standard constructor
}

//_____________________________________________________________________________
AliMpSectorReader::~AliMpSectorReader() 
{
/// Destructor  

  delete fMotifReader;
}

//
// private methods
//

//_____________________________________________________________________________
void  AliMpSectorReader::ReadSectorData(const AliMpDataStreams& dataStreams,
                                        istream& in)
{
/// Read sector input data;
/// prepare zones and rows vectors to be filled in.

  TString keyword;
  in >> keyword;
  
  AliDebugStream(2) << keyword << endl;

  if (keyword != GetSectorKeyword()) {
     AliErrorStream() << "Wrong file format." << endl;
     return;
  }   
    
  Int_t nofZones, nofRows;
  TString directionStr;
  Double_t offsetX, offsetY;
  in >> nofZones;
  in >> nofRows;
  in >> directionStr;
  in >> offsetX;
  in >> offsetY;
  
  AliMp::Direction direction;
  direction = (directionStr == "Y") ? AliMp::kY  :  AliMp::kX;

  AliDebugStream(2) << nofZones << " " <<  nofRows << endl;
  
  if ( nofZones < 0 || nofZones >= std::numeric_limits<Int_t>::max() ||
       nofRows < 0  || nofRows >= std::numeric_limits<Int_t>::max() ) {
    AliErrorStream() << "Wrong nofZones/nofRows value." << endl;
    return;
  }         

  fSector = new AliMpSector("Not defined", nofZones, nofRows,direction,
                            offsetX, offsetY);
  
  TString nextKeyword;
  in >> nextKeyword;
    
  if (nextKeyword != GetZoneKeyword()) {
     AliErrorStream() << "Wrong file format." << endl;
     return;
  }      
  
  ReadZoneData(dataStreams, in);
}  

//_____________________________________________________________________________
void AliMpSectorReader::ReadZoneData(const AliMpDataStreams& dataStreams,
                                     istream& in)
{
/// Read zone input data;
/// create zone and adds it to zones vector.

  Int_t zoneID;
  Double_t  sizex, sizey; 
  in >> zoneID;    
  in >> sizex;
  in >> sizey;
  AliDebugStream(2)
     << GetZoneKeyword() << " " <<  zoneID << "  " 
     << sizex << " " << sizey << endl;
  
  AliMpZone* zone =  fSector->GetZone(zoneID);
  zone->SetPadDimensions(sizex/2.,sizey/2.); 
      
  TString nextKeyword;
  in >> nextKeyword;
    
  if (nextKeyword != GetSubZoneKeyword()) {
     AliErrorStream() << "Wrong file format." << endl;
     return;
  }  
    
  ReadSubZoneData(dataStreams, in, zone);
}

//_____________________________________________________________________________
void AliMpSectorReader::ReadSubZoneData(const AliMpDataStreams& dataStreams,
                                        istream& in, AliMpZone* zone)
{
/// Read subzone input data;
/// create subzone and its to the specified zone.

  AliDebugStream(2) << GetSubZoneKeyword() << endl;

  AliMpVMotif* motif = ReadMotifData(dataStreams, in, zone);
  AliMpSubZone* subZone = new AliMpSubZone(motif); 
  zone->AddSubZone(subZone); 

  TString nextKeyword;
  in >> nextKeyword;
    
  if (nextKeyword != GetRowKeyword()) {
     AliErrorStream() << "Wrong file format." << endl;
     return;
  }  
    
  ReadRowSegmentsData(dataStreams, in, zone, subZone);
}   

//_____________________________________________________________________________
AliMpVMotif*  AliMpSectorReader::ReadMotifData(
                                     const AliMpDataStreams& dataStreams,
                                     istream& in, AliMpZone* zone)
{
/// Read the motif input data.

  TString  motifID;
  TString  motifTypeID;
  in >> motifID;
  in >> motifTypeID;

  AliDebugStream(2) << motifID << " " << motifTypeID << endl;
  
  AliMpMotifMap* motifMap = fSector->GetMotifMap();

  AliMpMotifType* motifType = 0;
  AliMpVMotif* motif 
    = motifMap->FindMotif(motifID, motifTypeID, 
                          zone->GetPadDimensionX(), zone->GetPadDimensionY());
  if (!motif) {    
    motifType = motifMap->FindMotifType(motifTypeID);
    if (!motifType) {
      motifType = fMotifReader->BuildMotifType(dataStreams, motifTypeID);
      motifMap->AddMotifType(motifType);
    }
    
    if (zone->GetPadDimensionX() != 0. && zone->GetPadDimensionY() != 0.) 
      motif = new AliMpMotif(motifID, motifType, 
                     zone->GetPadDimensionX(), zone->GetPadDimensionY());
    else 
      motif = fMotifReader->BuildMotifSpecial(dataStreams, motifID, motifType);
      
    if (motif) 
      motifMap->AddMotif(motif);

  }  

  return motif;   
}  

//_____________________________________________________________________________
void AliMpSectorReader::ReadRowSegmentsData(const AliMpDataStreams& dataStreams,
                                      istream& in,
                                      AliMpZone* zone, AliMpSubZone* subZone)
{
/// Read row segments input data of a specified zone and subzone;
/// creates row segment and add it to the specified subzone
/// and a corresponding row in the rows vector.

  TString nextKeyword;
  do {
    // 
    // Read data from file
    //
    Int_t offX, offY, inRow, nofMotifs, firstMotifPositionId, firstMotifPositionDId;
    in >> offX;
    in >> offY;
    in >> inRow;
    in >> nofMotifs;
    in >> firstMotifPositionId;
    in >> firstMotifPositionDId;
    
    firstMotifPositionId |= AliMpConstants::ManuMask(fPlaneType);
    
    AliDebugStream(2)
      << GetRowKeyword() << " " 
      << offX << " " << offY << " " << inRow << " " << nofMotifs << " " 
      << firstMotifPositionId << " " << firstMotifPositionDId
      << endl;

    in >> nextKeyword;

    //
    // Process data
    //
    AliMpRow* row = fSector->GetRow(inRow);
    AliMpVMotif* motif = subZone->GetMotif();
    
    // Create row segment and add it to its zone, row   
    AliMpVRowSegment* rowSegment
      = new AliMpRowSegment(row, motif, offX, offY, nofMotifs, 
                        firstMotifPositionId, firstMotifPositionDId);
			
    subZone->AddRowSegment(rowSegment);
    row->AddRowSegment(rowSegment);
  }
  while (!in.eof() && (nextKeyword == GetRowKeyword()));

  if (in.eof()) return;

  if (nextKeyword == GetZoneKeyword()) {
    ReadZoneData(dataStreams, in);
  }
  else if (nextKeyword == GetSubZoneKeyword()) {
    ReadSubZoneData(dataStreams, in, zone);
  }   
  else {
    AliErrorStream() << "Wrong file format." << endl;
  } 
}   

//_____________________________________________________________________________
void AliMpSectorReader::ReadSectorSpecialData(
                            const AliMpDataStreams& dataStreams,
                            istream& in, AliMp::XDirection direction)
{
/// Read sector input data
/// with a special (irregular) motifs.

  TString keyword;
  in >> keyword;

  AliDebugStream(2) << keyword << endl;

  if (keyword != GetSectorSpecialKeyword()) {
     AliErrorStream() << "Wrong file format." << endl;
     return;
  }   

  TString nextKeyword;
  in >> nextKeyword;

  AliDebugStream(2) << keyword << endl;
    
  if (nextKeyword != GetMotifKeyword()) {
    AliErrorStream() << "Wrong file format." << endl;
    return;
  }  

  ReadMotifsSpecialData(dataStreams, in);
  ReadRowSpecialData(dataStreams, in, direction);
}  

//_____________________________________________________________________________
void AliMpSectorReader::ReadMotifsSpecialData(
                            const AliMpDataStreams& dataStreams,
                            istream& in)
{
/// Read the special (irregular) motifs input data.

  AliDebugStream(2) << GetMotifKeyword() << endl;

  TString nextKeyword;
  do {
    Int_t zone;
    in >> zone;
    AliMpVMotif* motif =  ReadMotifData(dataStreams, in, fSector->GetZone(zone));
    AliMpSubZone* subZone = new AliMpSubZone(motif); 
    fSector->GetZone(zone)->AddSubZone(subZone); 
  
    in >> nextKeyword;

    AliDebugStream(2) << nextKeyword << endl;      
  }
  while (nextKeyword == GetMotifKeyword());
    
  if (nextKeyword != GetRowSpecialKeyword()) {
     AliErrorStream() << "Wrong file format." << endl;
     return;
  }      
}  

//_____________________________________________________________________________
void AliMpSectorReader::ReadRowSpecialData(
                            const AliMpDataStreams& dataStreams,
                            istream& in, AliMp::XDirection direction)
{
/// Read row input data
/// with a special (irregular) motifs.

  Int_t id;
  in >> id;

  AliDebugStream(2) << id << endl;      
  
  // Get the row and its border
  AliMpRow* row = fSector->GetRow(id);

  AliMpVRowSegmentSpecial* segment = 0;
  if (direction == AliMp::kLeft) {
    AliMpVRowSegment* firstNormalSeg = row->GetRowSegment(0);
    Double_t offsetX = firstNormalSeg->LeftBorderX();
  
    // Create a special row segment
    segment = new AliMpRowSegmentLSpecial(row, offsetX);
    row->AddRowSegmentInFront(segment);
  }
  else { 
    AliMpVRowSegment* precedentNormalSeg 
      = row->GetRowSegment(row->GetNofRowSegments()-1);
    Double_t offsetX = precedentNormalSeg->RightBorderX();
  
    // Create a special row segment
    segment = new AliMpRowSegmentRSpecial(row, offsetX);
    row->AddRowSegment(segment);
  }  
      
  TString nextKeyword;
  in >> nextKeyword;
  
  AliDebugStream(2) << nextKeyword << endl;
    
  if (nextKeyword != GetPadRowsKeyword()) {
     AliErrorStream() << "Wrong file format." << endl;
     return;
  }  
    
  ReadRowSegmentSpecialData(dataStreams, in, segment, direction);
  
  // Update row segment and set it to all subzones associated with
  // contained motifs
  
  segment->UpdateMotifVector();
  segment->UpdatePadsOffset();
  
  for (Int_t i=0; i<segment->GetNofMotifs(); i++) {
    AliMpSubZone* subZone = 0;
    Int_t j = 0;
    while (!subZone && j<fSector->GetNofZones())
      subZone = fSector->GetZone(++j)->FindSubZone(segment->GetMotif(i));
    
    if (subZone) subZone->AddRowSegment(segment);
  }  
}  

//_____________________________________________________________________________
void AliMpSectorReader::ReadRowSegmentSpecialData(
                            const AliMpDataStreams& dataStreams,
                            istream& in,
                            AliMpVRowSegmentSpecial* segment,
			    AliMp::XDirection direction)
{
/// Read row segment input data
/// with a special (irregular) motifs.

  Int_t nofPadRows;
  in >> nofPadRows;
  
  AliDebugStream(2) << nofPadRows << endl;
  
  if ( nofPadRows < 0 || nofPadRows >= std::numeric_limits<Int_t>::max()) {
    AliErrorStream() << "Wrong nofPadRows value." << endl;
    return;
  }         

  TString keyword;
  in >> keyword;

  AliDebugStream(2) << keyword << endl;
    
  if (keyword != GetPadRowSegmentKeyword()) {
     AliErrorStream() << "Wrong file format." << endl;
     return;
  }  
  
  //
  // Process data
  //
    
  TObjArray newPadRows;
  for (Int_t i=0; i<nofPadRows; i++) {
    
     // Create pad row
     AliMpPadRow* padRow = new AliMpPadRow(direction);
     segment->AddPadRow(padRow);
     
     // Keep the new rows in a temporary vector
     newPadRows.Add(padRow);
  }   
      
  TString nextKeyword;
  do {
    // 
    // Read data from file
    //
    Int_t    nofPadsInRow, motifPositionId;
    TString   motifId, motifTypeId;
    in >> nofPadsInRow;
    in >> motifId;
    in >> motifPositionId; 
  
    motifPositionId |= AliMpConstants::ManuMask(fPlaneType);

    AliDebugStream(2)
      << nofPadsInRow << " " << motifId << " " << motifPositionId << endl;

    in >> nextKeyword;

    AliDebugStream(2) << nextKeyword << endl;

    //
    // Process data
    //
    
    for (Int_t i=0; i<nofPadRows; i++) {
    
      // Get pad row from the temporary vector
      AliMpPadRow* padRow = (AliMpPadRow*)newPadRows[i];
      
      // Find motif
      AliMpVMotif* motif = fSector->GetMotifMap()->FindMotif(motifId);
      
      if (!motif) {
        AliErrorStream() << "Unknown motif" << endl;
	return;
      }

      // Create pad row segment
      padRow->AddPadRowSegment(dynamic_cast<AliMpMotif *>(motif), 
                               motifPositionId, nofPadsInRow);
    }  
  }
  while (!in.eof() && (nextKeyword == GetPadRowSegmentKeyword()));
  
  if (in.eof()) return;

  if (nextKeyword == GetPadRowsKeyword()) {
    ReadRowSegmentSpecialData(dataStreams, in, segment, direction);
  }
  else if (nextKeyword == GetRowSpecialKeyword()) {
    ReadRowSpecialData(dataStreams, in, direction);
  }   
  else {
    AliErrorStream() << "Wrong file format." << endl;
  } 
}  

//
// public methods
//

//_____________________________________________________________________________
AliMpSector* AliMpSectorReader::BuildSector(const AliMpDataStreams& dataStreams)
{
/// Read the mapping data from stream and create the basic objects:         \n
/// zones, subzones, rows, row segments, motifs.

  // Open input stream
  //
  istream& in 
    = dataStreams.
        CreateDataStream(AliMpFiles::SectorFilePath(fStationType,fPlaneType));

  ReadSectorData(dataStreams, in);
  delete &in;
  
  fSector->SetRowSegmentOffsets();

  // Open input stream for special inner zone
  
  // add is data function
  
  TString sectorSpecialFileName 
    = AliMpFiles::SectorSpecialFilePath(fStationType, fPlaneType);
  if ( dataStreams.IsDataStream(sectorSpecialFileName) ) {
    istream& in2 
      = dataStreams.
          CreateDataStream(sectorSpecialFileName);
  
    ReadSectorSpecialData(dataStreams, in2, AliMp::kLeft);
    
    delete &in2;
  }  

  // Open input file for special outer zone
  TString sectorSpecialFileName2 
    = AliMpFiles::SectorSpecialFilePath2(fStationType, fPlaneType);
  if ( dataStreams.IsDataStream(sectorSpecialFileName2) ) {
    istream& in3
      = dataStreams.
          CreateDataStream(sectorSpecialFileName2);
    
    ReadSectorSpecialData(dataStreams, in3, AliMp::kRight);
    
    delete &in3;
  }   

  fSector->Initialize();
  
  return fSector;
}  

 AliMpSectorReader.cxx:1
 AliMpSectorReader.cxx:2
 AliMpSectorReader.cxx:3
 AliMpSectorReader.cxx:4
 AliMpSectorReader.cxx:5
 AliMpSectorReader.cxx:6
 AliMpSectorReader.cxx:7
 AliMpSectorReader.cxx:8
 AliMpSectorReader.cxx:9
 AliMpSectorReader.cxx:10
 AliMpSectorReader.cxx:11
 AliMpSectorReader.cxx:12
 AliMpSectorReader.cxx:13
 AliMpSectorReader.cxx:14
 AliMpSectorReader.cxx:15
 AliMpSectorReader.cxx:16
 AliMpSectorReader.cxx:17
 AliMpSectorReader.cxx:18
 AliMpSectorReader.cxx:19
 AliMpSectorReader.cxx:20
 AliMpSectorReader.cxx:21
 AliMpSectorReader.cxx:22
 AliMpSectorReader.cxx:23
 AliMpSectorReader.cxx:24
 AliMpSectorReader.cxx:25
 AliMpSectorReader.cxx:26
 AliMpSectorReader.cxx:27
 AliMpSectorReader.cxx:28
 AliMpSectorReader.cxx:29
 AliMpSectorReader.cxx:30
 AliMpSectorReader.cxx:31
 AliMpSectorReader.cxx:32
 AliMpSectorReader.cxx:33
 AliMpSectorReader.cxx:34
 AliMpSectorReader.cxx:35
 AliMpSectorReader.cxx:36
 AliMpSectorReader.cxx:37
 AliMpSectorReader.cxx:38
 AliMpSectorReader.cxx:39
 AliMpSectorReader.cxx:40
 AliMpSectorReader.cxx:41
 AliMpSectorReader.cxx:42
 AliMpSectorReader.cxx:43
 AliMpSectorReader.cxx:44
 AliMpSectorReader.cxx:45
 AliMpSectorReader.cxx:46
 AliMpSectorReader.cxx:47
 AliMpSectorReader.cxx:48
 AliMpSectorReader.cxx:49
 AliMpSectorReader.cxx:50
 AliMpSectorReader.cxx:51
 AliMpSectorReader.cxx:52
 AliMpSectorReader.cxx:53
 AliMpSectorReader.cxx:54
 AliMpSectorReader.cxx:55
 AliMpSectorReader.cxx:56
 AliMpSectorReader.cxx:57
 AliMpSectorReader.cxx:58
 AliMpSectorReader.cxx:59
 AliMpSectorReader.cxx:60
 AliMpSectorReader.cxx:61
 AliMpSectorReader.cxx:62
 AliMpSectorReader.cxx:63
 AliMpSectorReader.cxx:64
 AliMpSectorReader.cxx:65
 AliMpSectorReader.cxx:66
 AliMpSectorReader.cxx:67
 AliMpSectorReader.cxx:68
 AliMpSectorReader.cxx:69
 AliMpSectorReader.cxx:70
 AliMpSectorReader.cxx:71
 AliMpSectorReader.cxx:72
 AliMpSectorReader.cxx:73
 AliMpSectorReader.cxx:74
 AliMpSectorReader.cxx:75
 AliMpSectorReader.cxx:76
 AliMpSectorReader.cxx:77
 AliMpSectorReader.cxx:78
 AliMpSectorReader.cxx:79
 AliMpSectorReader.cxx:80
 AliMpSectorReader.cxx:81
 AliMpSectorReader.cxx:82
 AliMpSectorReader.cxx:83
 AliMpSectorReader.cxx:84
 AliMpSectorReader.cxx:85
 AliMpSectorReader.cxx:86
 AliMpSectorReader.cxx:87
 AliMpSectorReader.cxx:88
 AliMpSectorReader.cxx:89
 AliMpSectorReader.cxx:90
 AliMpSectorReader.cxx:91
 AliMpSectorReader.cxx:92
 AliMpSectorReader.cxx:93
 AliMpSectorReader.cxx:94
 AliMpSectorReader.cxx:95
 AliMpSectorReader.cxx:96
 AliMpSectorReader.cxx:97
 AliMpSectorReader.cxx:98
 AliMpSectorReader.cxx:99
 AliMpSectorReader.cxx:100
 AliMpSectorReader.cxx:101
 AliMpSectorReader.cxx:102
 AliMpSectorReader.cxx:103
 AliMpSectorReader.cxx:104
 AliMpSectorReader.cxx:105
 AliMpSectorReader.cxx:106
 AliMpSectorReader.cxx:107
 AliMpSectorReader.cxx:108
 AliMpSectorReader.cxx:109
 AliMpSectorReader.cxx:110
 AliMpSectorReader.cxx:111
 AliMpSectorReader.cxx:112
 AliMpSectorReader.cxx:113
 AliMpSectorReader.cxx:114
 AliMpSectorReader.cxx:115
 AliMpSectorReader.cxx:116
 AliMpSectorReader.cxx:117
 AliMpSectorReader.cxx:118
 AliMpSectorReader.cxx:119
 AliMpSectorReader.cxx:120
 AliMpSectorReader.cxx:121
 AliMpSectorReader.cxx:122
 AliMpSectorReader.cxx:123
 AliMpSectorReader.cxx:124
 AliMpSectorReader.cxx:125
 AliMpSectorReader.cxx:126
 AliMpSectorReader.cxx:127
 AliMpSectorReader.cxx:128
 AliMpSectorReader.cxx:129
 AliMpSectorReader.cxx:130
 AliMpSectorReader.cxx:131
 AliMpSectorReader.cxx:132
 AliMpSectorReader.cxx:133
 AliMpSectorReader.cxx:134
 AliMpSectorReader.cxx:135
 AliMpSectorReader.cxx:136
 AliMpSectorReader.cxx:137
 AliMpSectorReader.cxx:138
 AliMpSectorReader.cxx:139
 AliMpSectorReader.cxx:140
 AliMpSectorReader.cxx:141
 AliMpSectorReader.cxx:142
 AliMpSectorReader.cxx:143
 AliMpSectorReader.cxx:144
 AliMpSectorReader.cxx:145
 AliMpSectorReader.cxx:146
 AliMpSectorReader.cxx:147
 AliMpSectorReader.cxx:148
 AliMpSectorReader.cxx:149
 AliMpSectorReader.cxx:150
 AliMpSectorReader.cxx:151
 AliMpSectorReader.cxx:152
 AliMpSectorReader.cxx:153
 AliMpSectorReader.cxx:154
 AliMpSectorReader.cxx:155
 AliMpSectorReader.cxx:156
 AliMpSectorReader.cxx:157
 AliMpSectorReader.cxx:158
 AliMpSectorReader.cxx:159
 AliMpSectorReader.cxx:160
 AliMpSectorReader.cxx:161
 AliMpSectorReader.cxx:162
 AliMpSectorReader.cxx:163
 AliMpSectorReader.cxx:164
 AliMpSectorReader.cxx:165
 AliMpSectorReader.cxx:166
 AliMpSectorReader.cxx:167
 AliMpSectorReader.cxx:168
 AliMpSectorReader.cxx:169
 AliMpSectorReader.cxx:170
 AliMpSectorReader.cxx:171
 AliMpSectorReader.cxx:172
 AliMpSectorReader.cxx:173
 AliMpSectorReader.cxx:174
 AliMpSectorReader.cxx:175
 AliMpSectorReader.cxx:176
 AliMpSectorReader.cxx:177
 AliMpSectorReader.cxx:178
 AliMpSectorReader.cxx:179
 AliMpSectorReader.cxx:180
 AliMpSectorReader.cxx:181
 AliMpSectorReader.cxx:182
 AliMpSectorReader.cxx:183
 AliMpSectorReader.cxx:184
 AliMpSectorReader.cxx:185
 AliMpSectorReader.cxx:186
 AliMpSectorReader.cxx:187
 AliMpSectorReader.cxx:188
 AliMpSectorReader.cxx:189
 AliMpSectorReader.cxx:190
 AliMpSectorReader.cxx:191
 AliMpSectorReader.cxx:192
 AliMpSectorReader.cxx:193
 AliMpSectorReader.cxx:194
 AliMpSectorReader.cxx:195
 AliMpSectorReader.cxx:196
 AliMpSectorReader.cxx:197
 AliMpSectorReader.cxx:198
 AliMpSectorReader.cxx:199
 AliMpSectorReader.cxx:200
 AliMpSectorReader.cxx:201
 AliMpSectorReader.cxx:202
 AliMpSectorReader.cxx:203
 AliMpSectorReader.cxx:204
 AliMpSectorReader.cxx:205
 AliMpSectorReader.cxx:206
 AliMpSectorReader.cxx:207
 AliMpSectorReader.cxx:208
 AliMpSectorReader.cxx:209
 AliMpSectorReader.cxx:210
 AliMpSectorReader.cxx:211
 AliMpSectorReader.cxx:212
 AliMpSectorReader.cxx:213
 AliMpSectorReader.cxx:214
 AliMpSectorReader.cxx:215
 AliMpSectorReader.cxx:216
 AliMpSectorReader.cxx:217
 AliMpSectorReader.cxx:218
 AliMpSectorReader.cxx:219
 AliMpSectorReader.cxx:220
 AliMpSectorReader.cxx:221
 AliMpSectorReader.cxx:222
 AliMpSectorReader.cxx:223
 AliMpSectorReader.cxx:224
 AliMpSectorReader.cxx:225
 AliMpSectorReader.cxx:226
 AliMpSectorReader.cxx:227
 AliMpSectorReader.cxx:228
 AliMpSectorReader.cxx:229
 AliMpSectorReader.cxx:230
 AliMpSectorReader.cxx:231
 AliMpSectorReader.cxx:232
 AliMpSectorReader.cxx:233
 AliMpSectorReader.cxx:234
 AliMpSectorReader.cxx:235
 AliMpSectorReader.cxx:236
 AliMpSectorReader.cxx:237
 AliMpSectorReader.cxx:238
 AliMpSectorReader.cxx:239
 AliMpSectorReader.cxx:240
 AliMpSectorReader.cxx:241
 AliMpSectorReader.cxx:242
 AliMpSectorReader.cxx:243
 AliMpSectorReader.cxx:244
 AliMpSectorReader.cxx:245
 AliMpSectorReader.cxx:246
 AliMpSectorReader.cxx:247
 AliMpSectorReader.cxx:248
 AliMpSectorReader.cxx:249
 AliMpSectorReader.cxx:250
 AliMpSectorReader.cxx:251
 AliMpSectorReader.cxx:252
 AliMpSectorReader.cxx:253
 AliMpSectorReader.cxx:254
 AliMpSectorReader.cxx:255
 AliMpSectorReader.cxx:256
 AliMpSectorReader.cxx:257
 AliMpSectorReader.cxx:258
 AliMpSectorReader.cxx:259
 AliMpSectorReader.cxx:260
 AliMpSectorReader.cxx:261
 AliMpSectorReader.cxx:262
 AliMpSectorReader.cxx:263
 AliMpSectorReader.cxx:264
 AliMpSectorReader.cxx:265
 AliMpSectorReader.cxx:266
 AliMpSectorReader.cxx:267
 AliMpSectorReader.cxx:268
 AliMpSectorReader.cxx:269
 AliMpSectorReader.cxx:270
 AliMpSectorReader.cxx:271
 AliMpSectorReader.cxx:272
 AliMpSectorReader.cxx:273
 AliMpSectorReader.cxx:274
 AliMpSectorReader.cxx:275
 AliMpSectorReader.cxx:276
 AliMpSectorReader.cxx:277
 AliMpSectorReader.cxx:278
 AliMpSectorReader.cxx:279
 AliMpSectorReader.cxx:280
 AliMpSectorReader.cxx:281
 AliMpSectorReader.cxx:282
 AliMpSectorReader.cxx:283
 AliMpSectorReader.cxx:284
 AliMpSectorReader.cxx:285
 AliMpSectorReader.cxx:286
 AliMpSectorReader.cxx:287
 AliMpSectorReader.cxx:288
 AliMpSectorReader.cxx:289
 AliMpSectorReader.cxx:290
 AliMpSectorReader.cxx:291
 AliMpSectorReader.cxx:292
 AliMpSectorReader.cxx:293
 AliMpSectorReader.cxx:294
 AliMpSectorReader.cxx:295
 AliMpSectorReader.cxx:296
 AliMpSectorReader.cxx:297
 AliMpSectorReader.cxx:298
 AliMpSectorReader.cxx:299
 AliMpSectorReader.cxx:300
 AliMpSectorReader.cxx:301
 AliMpSectorReader.cxx:302
 AliMpSectorReader.cxx:303
 AliMpSectorReader.cxx:304
 AliMpSectorReader.cxx:305
 AliMpSectorReader.cxx:306
 AliMpSectorReader.cxx:307
 AliMpSectorReader.cxx:308
 AliMpSectorReader.cxx:309
 AliMpSectorReader.cxx:310
 AliMpSectorReader.cxx:311
 AliMpSectorReader.cxx:312
 AliMpSectorReader.cxx:313
 AliMpSectorReader.cxx:314
 AliMpSectorReader.cxx:315
 AliMpSectorReader.cxx:316
 AliMpSectorReader.cxx:317
 AliMpSectorReader.cxx:318
 AliMpSectorReader.cxx:319
 AliMpSectorReader.cxx:320
 AliMpSectorReader.cxx:321
 AliMpSectorReader.cxx:322
 AliMpSectorReader.cxx:323
 AliMpSectorReader.cxx:324
 AliMpSectorReader.cxx:325
 AliMpSectorReader.cxx:326
 AliMpSectorReader.cxx:327
 AliMpSectorReader.cxx:328
 AliMpSectorReader.cxx:329
 AliMpSectorReader.cxx:330
 AliMpSectorReader.cxx:331
 AliMpSectorReader.cxx:332
 AliMpSectorReader.cxx:333
 AliMpSectorReader.cxx:334
 AliMpSectorReader.cxx:335
 AliMpSectorReader.cxx:336
 AliMpSectorReader.cxx:337
 AliMpSectorReader.cxx:338
 AliMpSectorReader.cxx:339
 AliMpSectorReader.cxx:340
 AliMpSectorReader.cxx:341
 AliMpSectorReader.cxx:342
 AliMpSectorReader.cxx:343
 AliMpSectorReader.cxx:344
 AliMpSectorReader.cxx:345
 AliMpSectorReader.cxx:346
 AliMpSectorReader.cxx:347
 AliMpSectorReader.cxx:348
 AliMpSectorReader.cxx:349
 AliMpSectorReader.cxx:350
 AliMpSectorReader.cxx:351
 AliMpSectorReader.cxx:352
 AliMpSectorReader.cxx:353
 AliMpSectorReader.cxx:354
 AliMpSectorReader.cxx:355
 AliMpSectorReader.cxx:356
 AliMpSectorReader.cxx:357
 AliMpSectorReader.cxx:358
 AliMpSectorReader.cxx:359
 AliMpSectorReader.cxx:360
 AliMpSectorReader.cxx:361
 AliMpSectorReader.cxx:362
 AliMpSectorReader.cxx:363
 AliMpSectorReader.cxx:364
 AliMpSectorReader.cxx:365
 AliMpSectorReader.cxx:366
 AliMpSectorReader.cxx:367
 AliMpSectorReader.cxx:368
 AliMpSectorReader.cxx:369
 AliMpSectorReader.cxx:370
 AliMpSectorReader.cxx:371
 AliMpSectorReader.cxx:372
 AliMpSectorReader.cxx:373
 AliMpSectorReader.cxx:374
 AliMpSectorReader.cxx:375
 AliMpSectorReader.cxx:376
 AliMpSectorReader.cxx:377
 AliMpSectorReader.cxx:378
 AliMpSectorReader.cxx:379
 AliMpSectorReader.cxx:380
 AliMpSectorReader.cxx:381
 AliMpSectorReader.cxx:382
 AliMpSectorReader.cxx:383
 AliMpSectorReader.cxx:384
 AliMpSectorReader.cxx:385
 AliMpSectorReader.cxx:386
 AliMpSectorReader.cxx:387
 AliMpSectorReader.cxx:388
 AliMpSectorReader.cxx:389
 AliMpSectorReader.cxx:390
 AliMpSectorReader.cxx:391
 AliMpSectorReader.cxx:392
 AliMpSectorReader.cxx:393
 AliMpSectorReader.cxx:394
 AliMpSectorReader.cxx:395
 AliMpSectorReader.cxx:396
 AliMpSectorReader.cxx:397
 AliMpSectorReader.cxx:398
 AliMpSectorReader.cxx:399
 AliMpSectorReader.cxx:400
 AliMpSectorReader.cxx:401
 AliMpSectorReader.cxx:402
 AliMpSectorReader.cxx:403
 AliMpSectorReader.cxx:404
 AliMpSectorReader.cxx:405
 AliMpSectorReader.cxx:406
 AliMpSectorReader.cxx:407
 AliMpSectorReader.cxx:408
 AliMpSectorReader.cxx:409
 AliMpSectorReader.cxx:410
 AliMpSectorReader.cxx:411
 AliMpSectorReader.cxx:412
 AliMpSectorReader.cxx:413
 AliMpSectorReader.cxx:414
 AliMpSectorReader.cxx:415
 AliMpSectorReader.cxx:416
 AliMpSectorReader.cxx:417
 AliMpSectorReader.cxx:418
 AliMpSectorReader.cxx:419
 AliMpSectorReader.cxx:420
 AliMpSectorReader.cxx:421
 AliMpSectorReader.cxx:422
 AliMpSectorReader.cxx:423
 AliMpSectorReader.cxx:424
 AliMpSectorReader.cxx:425
 AliMpSectorReader.cxx:426
 AliMpSectorReader.cxx:427
 AliMpSectorReader.cxx:428
 AliMpSectorReader.cxx:429
 AliMpSectorReader.cxx:430
 AliMpSectorReader.cxx:431
 AliMpSectorReader.cxx:432
 AliMpSectorReader.cxx:433
 AliMpSectorReader.cxx:434
 AliMpSectorReader.cxx:435
 AliMpSectorReader.cxx:436
 AliMpSectorReader.cxx:437
 AliMpSectorReader.cxx:438
 AliMpSectorReader.cxx:439
 AliMpSectorReader.cxx:440
 AliMpSectorReader.cxx:441
 AliMpSectorReader.cxx:442
 AliMpSectorReader.cxx:443
 AliMpSectorReader.cxx:444
 AliMpSectorReader.cxx:445
 AliMpSectorReader.cxx:446
 AliMpSectorReader.cxx:447
 AliMpSectorReader.cxx:448
 AliMpSectorReader.cxx:449
 AliMpSectorReader.cxx:450
 AliMpSectorReader.cxx:451
 AliMpSectorReader.cxx:452
 AliMpSectorReader.cxx:453
 AliMpSectorReader.cxx:454
 AliMpSectorReader.cxx:455
 AliMpSectorReader.cxx:456
 AliMpSectorReader.cxx:457
 AliMpSectorReader.cxx:458
 AliMpSectorReader.cxx:459
 AliMpSectorReader.cxx:460
 AliMpSectorReader.cxx:461
 AliMpSectorReader.cxx:462
 AliMpSectorReader.cxx:463
 AliMpSectorReader.cxx:464
 AliMpSectorReader.cxx:465
 AliMpSectorReader.cxx:466
 AliMpSectorReader.cxx:467
 AliMpSectorReader.cxx:468
 AliMpSectorReader.cxx:469
 AliMpSectorReader.cxx:470
 AliMpSectorReader.cxx:471
 AliMpSectorReader.cxx:472
 AliMpSectorReader.cxx:473
 AliMpSectorReader.cxx:474
 AliMpSectorReader.cxx:475
 AliMpSectorReader.cxx:476
 AliMpSectorReader.cxx:477
 AliMpSectorReader.cxx:478
 AliMpSectorReader.cxx:479
 AliMpSectorReader.cxx:480
 AliMpSectorReader.cxx:481
 AliMpSectorReader.cxx:482
 AliMpSectorReader.cxx:483
 AliMpSectorReader.cxx:484
 AliMpSectorReader.cxx:485
 AliMpSectorReader.cxx:486
 AliMpSectorReader.cxx:487
 AliMpSectorReader.cxx:488
 AliMpSectorReader.cxx:489
 AliMpSectorReader.cxx:490
 AliMpSectorReader.cxx:491
 AliMpSectorReader.cxx:492
 AliMpSectorReader.cxx:493
 AliMpSectorReader.cxx:494
 AliMpSectorReader.cxx:495
 AliMpSectorReader.cxx:496
 AliMpSectorReader.cxx:497
 AliMpSectorReader.cxx:498
 AliMpSectorReader.cxx:499
 AliMpSectorReader.cxx:500
 AliMpSectorReader.cxx:501
 AliMpSectorReader.cxx:502
 AliMpSectorReader.cxx:503
 AliMpSectorReader.cxx:504
 AliMpSectorReader.cxx:505
 AliMpSectorReader.cxx:506
 AliMpSectorReader.cxx:507
 AliMpSectorReader.cxx:508
 AliMpSectorReader.cxx:509
 AliMpSectorReader.cxx:510
 AliMpSectorReader.cxx:511
 AliMpSectorReader.cxx:512
 AliMpSectorReader.cxx:513
 AliMpSectorReader.cxx:514
 AliMpSectorReader.cxx:515
 AliMpSectorReader.cxx:516
 AliMpSectorReader.cxx:517
 AliMpSectorReader.cxx:518
 AliMpSectorReader.cxx:519
 AliMpSectorReader.cxx:520
 AliMpSectorReader.cxx:521
 AliMpSectorReader.cxx:522
 AliMpSectorReader.cxx:523
 AliMpSectorReader.cxx:524
 AliMpSectorReader.cxx:525
 AliMpSectorReader.cxx:526
 AliMpSectorReader.cxx:527
 AliMpSectorReader.cxx:528
 AliMpSectorReader.cxx:529
 AliMpSectorReader.cxx:530
 AliMpSectorReader.cxx:531
 AliMpSectorReader.cxx:532
 AliMpSectorReader.cxx:533
 AliMpSectorReader.cxx:534
 AliMpSectorReader.cxx:535
 AliMpSectorReader.cxx:536
 AliMpSectorReader.cxx:537
 AliMpSectorReader.cxx:538
 AliMpSectorReader.cxx:539
 AliMpSectorReader.cxx:540
 AliMpSectorReader.cxx:541
 AliMpSectorReader.cxx:542
 AliMpSectorReader.cxx:543
 AliMpSectorReader.cxx:544
 AliMpSectorReader.cxx:545
 AliMpSectorReader.cxx:546
 AliMpSectorReader.cxx:547
 AliMpSectorReader.cxx:548
 AliMpSectorReader.cxx:549
 AliMpSectorReader.cxx:550
 AliMpSectorReader.cxx:551
 AliMpSectorReader.cxx:552
 AliMpSectorReader.cxx:553
 AliMpSectorReader.cxx:554
 AliMpSectorReader.cxx:555
 AliMpSectorReader.cxx:556
 AliMpSectorReader.cxx:557
 AliMpSectorReader.cxx:558
 AliMpSectorReader.cxx:559
 AliMpSectorReader.cxx:560
 AliMpSectorReader.cxx:561
 AliMpSectorReader.cxx:562
 AliMpSectorReader.cxx:563
 AliMpSectorReader.cxx:564
 AliMpSectorReader.cxx:565
 AliMpSectorReader.cxx:566
 AliMpSectorReader.cxx:567
 AliMpSectorReader.cxx:568
 AliMpSectorReader.cxx:569
 AliMpSectorReader.cxx:570
 AliMpSectorReader.cxx:571
 AliMpSectorReader.cxx:572
 AliMpSectorReader.cxx:573
 AliMpSectorReader.cxx:574
 AliMpSectorReader.cxx:575
 AliMpSectorReader.cxx:576
 AliMpSectorReader.cxx:577
 AliMpSectorReader.cxx:578
 AliMpSectorReader.cxx:579
 AliMpSectorReader.cxx:580
 AliMpSectorReader.cxx:581
 AliMpSectorReader.cxx:582
 AliMpSectorReader.cxx:583
 AliMpSectorReader.cxx:584
 AliMpSectorReader.cxx:585
 AliMpSectorReader.cxx:586
 AliMpSectorReader.cxx:587
 AliMpSectorReader.cxx:588
 AliMpSectorReader.cxx:589
 AliMpSectorReader.cxx:590
 AliMpSectorReader.cxx:591
 AliMpSectorReader.cxx:592
 AliMpSectorReader.cxx:593
 AliMpSectorReader.cxx:594
 AliMpSectorReader.cxx:595
 AliMpSectorReader.cxx:596
 AliMpSectorReader.cxx:597
 AliMpSectorReader.cxx:598
 AliMpSectorReader.cxx:599
 AliMpSectorReader.cxx:600
 AliMpSectorReader.cxx:601
 AliMpSectorReader.cxx:602
 AliMpSectorReader.cxx:603
 AliMpSectorReader.cxx:604
 AliMpSectorReader.cxx:605
 AliMpSectorReader.cxx:606
 AliMpSectorReader.cxx:607
 AliMpSectorReader.cxx:608
 AliMpSectorReader.cxx:609
 AliMpSectorReader.cxx:610
 AliMpSectorReader.cxx:611
 AliMpSectorReader.cxx:612
 AliMpSectorReader.cxx:613
 AliMpSectorReader.cxx:614
 AliMpSectorReader.cxx:615
 AliMpSectorReader.cxx:616
 AliMpSectorReader.cxx:617
 AliMpSectorReader.cxx:618
 AliMpSectorReader.cxx:619
 AliMpSectorReader.cxx:620
 AliMpSectorReader.cxx:621
 AliMpSectorReader.cxx:622
 AliMpSectorReader.cxx:623
 AliMpSectorReader.cxx:624
 AliMpSectorReader.cxx:625
 AliMpSectorReader.cxx:626
 AliMpSectorReader.cxx:627
 AliMpSectorReader.cxx:628
 AliMpSectorReader.cxx:629
 AliMpSectorReader.cxx:630
 AliMpSectorReader.cxx:631
 AliMpSectorReader.cxx:632
 AliMpSectorReader.cxx:633
 AliMpSectorReader.cxx:634
 AliMpSectorReader.cxx:635
 AliMpSectorReader.cxx:636
 AliMpSectorReader.cxx:637
 AliMpSectorReader.cxx:638
 AliMpSectorReader.cxx:639
 AliMpSectorReader.cxx:640
 AliMpSectorReader.cxx:641
 AliMpSectorReader.cxx:642
 AliMpSectorReader.cxx:643
 AliMpSectorReader.cxx:644
 AliMpSectorReader.cxx:645
 AliMpSectorReader.cxx:646
 AliMpSectorReader.cxx:647
 AliMpSectorReader.cxx:648
 AliMpSectorReader.cxx:649
 AliMpSectorReader.cxx:650
 AliMpSectorReader.cxx:651
 AliMpSectorReader.cxx:652
 AliMpSectorReader.cxx:653
 AliMpSectorReader.cxx:654
 AliMpSectorReader.cxx:655
 AliMpSectorReader.cxx:656
 AliMpSectorReader.cxx:657
 AliMpSectorReader.cxx:658