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 purpeateose. It is      *
* provided "as is" without express or implied warranty.                  *
**************************************************************************/

// $Id$
// $MpId: AliMpTriggerReader.cxx,v 1.4 2006/05/24 13:58:52 ivana Exp $

#include "AliMpTriggerReader.h"

#include "AliLog.h"
#include "AliMpConstants.h"
#include "AliMpDataStreams.h"
#include "AliMpFiles.h"
#include "AliMpHelper.h"
#include "AliMpMotif.h"
#include "AliMpMotifPosition.h"
#include "AliMpMotifReader.h"
#include "AliMpMotifSpecial.h"
#include "AliMpMotifType.h"
#include "AliMpPCB.h"
#include "AliMpSlat.h"
#include "AliMpSlatMotifMap.h"
#include "AliMpSlatMotifMap.h"
#include "AliMpSt345Reader.h"
#include "AliMpTrigger.h"
#include "Riostream.h"
#include "TClass.h"
#include "TList.h"
#include "TObjString.h"
#include "TString.h"
#include <TArrayI.h>
#include <cstdlib>
#include <sstream>

//-----------------------------------------------------------------------------
/// \class AliMpTriggerReader
/// Read trigger slat ASCII files
/// Basically provides two methods:
/// - AliMpTrigger* ReadSlat()
/// - AliMpPCB* ReadPCB()
///
/// \author Laurent Aphecetche
//-----------------------------------------------------------------------------

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

//
// static private methods
//

//_____________________________________________________________________________
const TString& AliMpTriggerReader::GetKeywordLayer()
{
  /// Keyword: LAYER
  static const TString kKeywordLayer("LAYER");
  return kKeywordLayer;
}  

//_____________________________________________________________________________
const TString& AliMpTriggerReader::GetKeywordScale()
{
  /// Keyword: SCALE
  static const TString kKeywordScale("SCALE");
  return kKeywordScale;
}

//_____________________________________________________________________________
const TString& AliMpTriggerReader::GetKeywordPcb()
{
  /// Keyword : PCB
  static const TString kKeywordPcb("PCB");  
  return kKeywordPcb;
}    
  
//_____________________________________________________________________________
const TString& AliMpTriggerReader::GetKeywordFlipX()
{
  /// Keyword : FLIPX
  static const TString kKeywordFlipX("FLIP_X");
  return kKeywordFlipX;
}  
  
//_____________________________________________________________________________
const TString& AliMpTriggerReader::GetKeywordFlipY()
{
  /// Keyword : FLIPY
  static const TString kKeywordFlipY("FLIP_Y");
  return kKeywordFlipY;
}  

//
// ctors, dtor
//

//_____________________________________________________________________________
AliMpTriggerReader::AliMpTriggerReader(AliMpSlatMotifMap* motifMap)
: TObject(),
  fMotifMap(motifMap),
  fLocalBoardMap()
{
  ///
  /// Default ctor.
  ///
    fLocalBoardMap.SetOwner(kTRUE);
} 

//_____________________________________________________________________________
AliMpTriggerReader::~AliMpTriggerReader()
{
  ///
  /// Dtor.
  ///
  fLocalBoardMap.DeleteAll();
}

//_____________________________________________________________________________
AliMpSlat*
AliMpTriggerReader::BuildSlat(const AliMpDataStreams&  dataStreams, 
                              const char* slatName,
                              AliMp::PlaneType planeType,
                              const TList& lines,
                              Double_t scale)
{
  /// Construct a slat from the list of lines, taking into account
  /// the scale factor. The returned pointer must be deleted by the client

  AliDebug(1,Form("slat %s %s scale %e",
                  slatName,PlaneTypeName(planeType).Data(),scale))
  ;
  
  AliMpSlat* slat = new AliMpSlat(slatName, planeType);
    
  TIter it(&lines);
  
//  StdoutToAliDebug(3,lines.Print(););
  
  TObjString* osline;
  while ( ( osline = (TObjString*)it.Next() ) )
  {
    // note that at this stage lines should not be empty.
    TString sline(osline->String());
    
    TObjArray* tokens = sline.Tokenize(' ');
    
    TString& keyword = ((TObjString*)tokens->At(0))->String();
    
    if ( keyword == GetKeywordPcb() )
    {
      if ( tokens->GetEntriesFast() != 3 )
      {
        AliErrorClass(Form("Syntax error : expecting PCB type localboard-list"
                           " in following line:\n%s",sline.Data()));
        delete slat;
        delete tokens;
        return 0;
      }
      TString pcbName = ((TObjString*)tokens->At(1))->String();
      
      TObjArray* localBoardList = ((TObjString*)tokens->At(2))->String().Tokenize(',');
      
      if ( scale != 1.0 )
      {
        std::ostringstream s;
        s << pcbName.Data() << "x" << scale;
        pcbName = s.str().c_str();
      }
      
      AliMpPCB* pcbType = ReadPCB(dataStreams, pcbName.Data());
      if (!pcbType)
      {
        AliErrorClass(Form("Cannot read pcbType=%s",pcbName.Data()));
        delete slat;
	delete tokens;
        return 0;
      }      

      TArrayI allLocalBoards;
      
      for ( Int_t ilb = 0; ilb < localBoardList->GetEntriesFast(); ++ilb)
      {
        TArrayI localBoardNumbers;
        TString& localBoards = ((TObjString*)localBoardList->At(ilb))->String();
        Ssiz_t pos = localBoards.First('-');
        if ( pos < 0 ) 
        {
          pos = localBoards.Length();
        }
        AliMpHelper::DecodeName(localBoards(pos-1,localBoards.Length()-pos+1).Data(),
                                ';',localBoardNumbers);      
        for ( int i = 0; i < localBoardNumbers.GetSize(); ++i )
        {
          std::ostringstream name;
          name << localBoards(0,pos-1) << localBoardNumbers[i];
          AliDebugClass(3,name.str().c_str());
          localBoardNumbers[i] = LocalBoardNumber(dataStreams,name.str().c_str());
          AliDebugClass(3,Form("LOCALBOARDNUMBER %d\n",localBoardNumbers[i]));
          allLocalBoards.Set(allLocalBoards.GetSize()+1);
          allLocalBoards[allLocalBoards.GetSize()-1] = localBoardNumbers[i];
          if (localBoardNumbers[i] < 0 )
          {
            AliErrorClass(Form("Got a negative local board number in %s ? Unlikely"
                               " to be correct... : %s\n",slatName,name.str().c_str()));
          }
        }
      }
      AliDebug(3,"Deleting tokens");
      delete tokens;
      AliDebug(3,"Deleting localBoardList");
      delete localBoardList;
      AliDebug(3,"Adding pcb to slat");
      slat->Add(*pcbType,allLocalBoards);
      AliDebug(3,Form("Deleting pcbType=%p %s",pcbType,pcbName.Data()));
      delete pcbType;
    }
  }
  
  if ( slat->DX()== 0 || slat->DY() == 0 )
  {
    AliFatalClass(Form("Slat %s has invalid null size\n",slat->GetID()));
  }
  return slat;
}

//_____________________________________________________________________________
TString
AliMpTriggerReader::GetBoardNameFromPCBLine(const TString& s)
{
  /// Decode the string to get the board name
  TString boardName;
  
  TObjArray* tokens = s.Tokenize(' ');
  
  TString& keyword = ((TObjString*)tokens->At(0))->String();

  if ( keyword == GetKeywordPcb() &&
       tokens->GetEntriesFast() == 3 )
  {
    boardName = ((TObjString*)tokens->At(2))->String();
  }
  
  delete tokens;
  
  return boardName;
}
  
//_____________________________________________________________________________
void
AliMpTriggerReader::FlipLines(const AliMpDataStreams&  dataStreams,
                              TList& lines, Bool_t flipX, Bool_t flipY,
                              Int_t srcLine, Int_t destLine)
{
  ///
  /// Change the local board names contained in lines, 
  /// to go from right to left, and/or
  /// from top to bottom
  ///
 

  if ( flipX )
  {
    // Simply swaps R(ight) and L(eft) in the first character of 
    // local board names

    TObjString* oline;
    TIter it(&lines);
    while ( ( oline = (TObjString*)it.Next() ) )
    {
      TString& s = oline->String();
      if ( s.Contains("RC") ) 
      {
        // Change right to left
        s.ReplaceAll("RC","LC");
      }
      else if ( s.Contains("LC") )
      {
        // Change left to right
        s.ReplaceAll("LC","RC");
      }
    }
  }
  
  if ( flipY )
  {
    // Change line number, according to parameters srcLine and destLine
    // Note that because of road opening (for planes 3 and 4 at least),
    // we loop for srcLine +-1
    //
    for ( Int_t line = -1; line <=1; ++line )
    {
      std::ostringstream src,dest;
      src << "L" << srcLine+line;
      dest << "L" << destLine-line;
      if ( src.str() == dest.str() ) continue;
      
      for ( Int_t i = 0; i < lines.GetSize(); ++i )
      {
        TObjString* oline = (TObjString*)lines.At(i);
        
        TString& s = oline->String();
        
        if ( !s.Contains(GetKeywordPcb()) )
        {
          // Only consider PCB lines.
          continue;
        }
        
        if ( s.Contains(src.str().c_str()) )
        {
          AliDebugClass(4,Form("Replacing %s by %s in %s\n",
                               src.str().c_str(),dest.str().c_str(),s.Data()));
          
          s.ReplaceAll(src.str().c_str(),dest.str().c_str());
          
          AliDebugClass(4,s.Data());
          
          TString boardName(GetBoardNameFromPCBLine(s));
          
          if ( line )
          {
            // We must also change board numbers, with the tricky
            // thing that up and down must be swapped...
            // Up can only be 1 card so it must be B1
            // Down must be the uppper card of the line before, so
            // the biggest possible board number for this Line,Column
            
            if (line>0)
            {
                // force to B1
              AliDebugClass(4,Form("Forcing B1 in %s\n",s.Data()));
              s.ReplaceAll(boardName(boardName.Length()-2,2),"B1");
              AliDebugClass(4,s.Data());
            }
            else
            {
              // find the largest valid board number
              for ( int b = 4; b>=1; --b )
              {
                std::ostringstream bs;
                bs << boardName(0,boardName.Length()-1) << b;
                if ( LocalBoardNumber(dataStreams,bs.str().c_str()) >= 0 )
                {
                  AliDebugClass(4,Form("Replacing %s by %s in %s\n",
                                  boardName(boardName.Length()-2,2).Data(),
                                  Form("B%d",b),
                                  s.Data()));
                  s.ReplaceAll(boardName(boardName.Length()-2,2),
                               Form("B%d",b));
                  AliDebugClass(4,s);
                  break;
                }
              }
            }  
            // Check that the replacement we did is ok. If not,
            // skip the line.
            Int_t lbn = LocalBoardNumber(dataStreams,GetBoardNameFromPCBLine(s));
            if ( lbn < 0 )
            {
              AliDebugClass(4,Form("Removing line %s\n",s.Data()));
              lines.Remove(oline);
            }
            
          } // if (line)          
        }
      }    
    }
  }
}

//___________________________________________________________________________
Int_t
AliMpTriggerReader::IsLayerLine(const TString& sline) const
{
  /// Whether sline contains LAYER keyword

  if ( sline.BeginsWith(GetKeywordLayer()) )
  {
    return 1;
  }
  else
  {
    return 0;
  }
}

//___________________________________________________________________________
Int_t
AliMpTriggerReader::DecodeFlipLine(const TString& sline,
                                   TString& slatType2,
                                   Bool_t& flipX, Bool_t& flipY)
{
  /// Decode a line containing FLIP_X and/or FLIP_Y keywords

  Ssiz_t blankPos = sline.First(' ');
  if ( blankPos < 0 ) return 0;
  
  TString keyword(sline(0,blankPos));
  
  if ( keyword == GetKeywordFlipX() )
  {
    flipX = kTRUE;
  } else if ( keyword == GetKeywordFlipY() )
  {
    flipY = kTRUE;
  }
  else
  {
    return 0;
  }
  
  slatType2 = sline(blankPos+1,sline.Length()-blankPos-1);
  return 1;
}

//___________________________________________________________________________
Int_t
AliMpTriggerReader::DecodeScaleLine(const TString& sline, 
                                    Double_t& scale, TString& slatType)
{
  /// Decode sline containing SCALE keyword

  if ( sline(0,GetKeywordScale().Length()) == GetKeywordScale() )
  {
    TString tmp(sline(GetKeywordScale().Length()+1,
                      sline.Length()-GetKeywordScale().Length()-1));
    Ssiz_t blankPos = tmp.First(' ');
    if ( blankPos < 0 )
    {
      AliErrorClass(Form("Syntax error in slat file, should get a slatType after "
                    " SCALE keyword : %s\n",tmp.Data()));
      return -1;
    }
    else
    {
      slatType = tmp(0,blankPos);
      scale = TString(tmp(blankPos+1,tmp.Length()-blankPos-1)).Atof();
      return 1;
    }
  }
  scale = 1.0;
  return 0;
}

//_____________________________________________________________________________
Int_t
AliMpTriggerReader::GetLine(const TString& slatType)
{
  ///
  /// Assuming slatType is a 4 character string of the form XSLN
  /// where X=1,2,3 or 4
  /// S = R or L
  /// N is the line number
  /// returns N
  
  if ( isdigit(slatType[0]) && 
       ( slatType[1] == 'R' || slatType[1] == 'L' ) &&
       slatType[2] == 'L' )
  {
    return atoi(slatType(3,1).Data());
  }
  return -1;
}

//_____________________________________________________________________________
int
AliMpTriggerReader::LocalBoardNumber(const AliMpDataStreams&  dataStreams,
                                     const char* localBoardName)
{
  /// From local board name to local board number

  if ( !fLocalBoardMap.GetSize() ) 
  {
    ReadLocalBoardMapping(dataStreams);
  }
  
  TPair* pair = (TPair*)fLocalBoardMap.FindObject(localBoardName);
  
  if (pair)
  {
    return atoi(((TObjString*)pair->Value())->String().Data());
  }
  return -1;
}

//_____________________________________________________________________________
void 
AliMpTriggerReader::ReadLines(const AliMpDataStreams&  dataStreams,
                              const char* slatType,
                              AliMp::PlaneType planeType,
                              TList& lines,
                              Double_t& scale,
                              Bool_t& flipX, Bool_t& flipY,
                              Int_t& srcLine, Int_t& destLine)
{
  ///
  /// Reads in lines from file for a given slat
  /// Returns the list of lines (lines), together with some global
  /// information as the scale, whether to flip the lines, etc...
  ///
  AliDebugClass(2,Form("SlatType %s Scale %e FlipX %d FlipY %d srcLine %d"
                       " destLine %d\n",slatType,scale,flipX,flipY,
                       srcLine,destLine));
  
  istream& in 
    = dataStreams.
        CreateDataStream(AliMpFiles::SlatFilePath(
                             AliMp::kStationTrigger,slatType, planeType));
  
  char line[80];
  
  while ( in.getline(line,80) )
  {
    TString sline(AliMpHelper::Normalize(line));

    if ( sline.Length() == 0 || sline[0] == '#' ) continue;
    
    Bool_t isKeywordThere = 
      sline.Contains(GetKeywordPcb()) || 
      sline.Contains(GetKeywordLayer()) ||
      sline.Contains(GetKeywordScale()) || 
      sline.Contains(GetKeywordFlipX()) || 
      sline.Contains(GetKeywordFlipY());
    
    if ( !isKeywordThere ) 
    {
      AliErrorClass(Form("Got a line with no keyword : %s."
                         "That's not valid\n",line));
      continue; 
    }
    
    Double_t scale2;
    TString slatType2;
    
    Int_t isScaleLine = DecodeScaleLine(sline,scale2,slatType2);
    
    scale *= scale2;

    if ( isScaleLine < 0 )
    {
      AliFatalClass(Form("Syntax error near %s keyword\n",GetKeywordScale().Data()));
    }
    else if ( isScaleLine > 0 && slatType2 != slatType )
    {
      ReadLines(dataStreams,
                slatType2.Data(),planeType,lines,scale,flipX,flipY,srcLine,destLine);
    }
    else    
    {
      Bool_t fx(kFALSE);
      Bool_t fy(kFALSE);
      Int_t isFlipLine = DecodeFlipLine(sline,slatType2,fx,fy);
      if ( isFlipLine )
      {
        if (fy)
        {
          srcLine = GetLine(slatType2);
          destLine = GetLine(slatType);
        }
        flipX |= fx;
        flipY |= fy;
        ReadLines(dataStreams,
                  slatType2.Data(),planeType,lines,scale,flipX,flipY,srcLine,destLine);
      }
      else
      {
        lines.Add(new TObjString(sline.Data()));
      }
    }
  }
  
  delete &in;
}
                                        
//_____________________________________________________________________________
void
AliMpTriggerReader::ReadLocalBoardMapping(const AliMpDataStreams&  dataStreams)
{
  /// Reads the file that contains the mapping local board name <-> number

  fLocalBoardMap.DeleteAll();
  
  UShort_t mask;
  
  istream& in 
    = dataStreams.
        CreateDataStream(AliMpFiles::LocalTriggerBoardMapping());

  char line[80];
  Char_t localBoardName[20];
  Int_t j,localBoardId;
  UInt_t switches;
  Int_t nofBoards;

  while (!in.eof())
  {
    for (Int_t i = 0; i < 4; ++i)
      if (!in.getline(line,80)) continue; //skip 4 first lines
 
    // read mask
    if (!in.getline(line,80)) break;
    sscanf(line,"%hx",&mask);
 
   // read # boards
    if (!in.getline(line,80)) break;
    sscanf(line,"%d",&nofBoards);
   
    for ( Int_t i = 0; i < nofBoards; ++i ) 
    {      
  
      if (!in.getline(line,80)) break; 
      sscanf(line,"%02d %19s %03d %03x", &j, localBoardName, &localBoardId, &switches);
      if (localBoardId <= AliMpConstants::NofLocalBoards()) 
      {
	fLocalBoardMap.Add(new TObjString(localBoardName), new TObjString(Form("%d",localBoardId)));
	AliDebugClass(10,Form("Board %s has number %d\n", localBoardName, localBoardId));
      }
      // skip 2 following lines
      if (!in.getline(line,80)) break; 
      if (!in.getline(line,80)) break; 
       
    }
  }
  
  delete &in;      
}

//_____________________________________________________________________________
AliMpPCB*
AliMpTriggerReader::ReadPCB(const AliMpDataStreams&  dataStreams,
                            const char* pcbType)
{ 
  ///
  /// Create a new AliMpPCB object, by reading it from file.
  /// Returned pointer must be deleted by client.
  
  AliDebugClass(2,Form("pcbType=%s\n",pcbType));
  
  TString pcbName(pcbType);
  
  Ssiz_t pos = pcbName.First('x');

  Double_t scale = 1.0;
  
  if ( pos > 0 )
  {
    scale = TString(pcbName(pos+1,pcbName.Length()-pos-1)).Atof();
    pcbName = pcbName(0,pos);
  }
  
  istream& in 
    = dataStreams.
        CreateDataStream(AliMpFiles::SlatPCBFilePath(
                             AliMp::kStationTrigger,pcbName));
 
  AliMpMotifReader reader(AliMp::kStationTrigger, AliMq::kNotSt12, AliMp::kNonBendingPlane); 
  // note that the nonbending
  // parameter is of no use for trigger, as far as reading motif is 
  // concerned, as all motifs are supposed to be in the same directory
  // (as they are shared by bending/non-bending planes).
     
  char line[80];
  
  const TString kSizeKeyword("SIZES");
  const TString kMotifKeyword("MOTIF");
  const TString kMotifSpecialKeyword("SPECIAL_MOTIF");
  
  AliMpPCB* pcb(0x0);
  
  while ( in.getline(line,80) )
  {
    if ( line[0] == '#' ) continue;
    
    TString sline(line);
    
    if ( sline(0,kSizeKeyword.Length()) == kSizeKeyword )
    {
      std::istringstream sin(sline(kSizeKeyword.Length(),
                                   sline.Length()-kSizeKeyword.Length()-1).Data());
      float padSizeX = 0.0;
      float padSizeY = 0.0;
      float pcbSizeX = 0.0;
      float pcbSizeY = 0.0;
      sin >> padSizeX >> padSizeY >> pcbSizeX >> pcbSizeY;
      if (pcb)
      {
        AliError("pcb not null as expected");
      }
      pcb = new AliMpPCB(fMotifMap,pcbType,padSizeX*scale,padSizeY*scale,
                         pcbSizeX*scale,pcbSizeY*scale);
    }
    
    if ( sline(0,kMotifSpecialKeyword.Length()) == kMotifSpecialKeyword )
    {
      std::istringstream sin(sline(kMotifSpecialKeyword.Length(),
                                   sline.Length()-kMotifSpecialKeyword.Length()).Data());
      TString sMotifSpecial;
      TString sMotifType;
      sin >> sMotifSpecial >> sMotifType;
      
      TString id = reader.MotifSpecialName(sMotifSpecial,scale);
      
      AliMpMotifSpecial* specialMotif =
        dynamic_cast<AliMpMotifSpecial*>(fMotifMap->FindMotif(id));
      if (!specialMotif)
      {
        AliDebug(1,Form("Reading motifSpecial %s (%s) from file",
                        sMotifSpecial.Data(),id.Data()));
        AliMpMotifType* motifType = fMotifMap->FindMotifType(sMotifType.Data());
        if ( !motifType)
        {
          AliDebug(1,Form("Reading motifType %s (%s) from file",
                          sMotifType.Data(),id.Data()));
          motifType = reader.BuildMotifType(dataStreams,sMotifType.Data());
          fMotifMap->AddMotifType(motifType);
        }
        else
        {
          AliDebug(1,Form("Got motifType %s (%s) from motifMap",
                          sMotifType.Data(),id.Data()));        
        }
        specialMotif = reader.BuildMotifSpecial(dataStreams,sMotifSpecial,motifType,scale);
        fMotifMap->AddMotif(specialMotif);
      }
      else
      {
        AliDebug(1,Form("Got motifSpecial %s from motifMap",sMotifSpecial.Data()));
      }
      if (pcb)
      {
        AliError("pcb not null as expected");
      }
      pcb = new AliMpPCB(pcbType,specialMotif);
    }
    
    if ( sline(0,kMotifKeyword.Length()) == kMotifKeyword )
    {
      std::istringstream sin(sline(kMotifKeyword.Length(),
                                   sline.Length()-kMotifKeyword.Length()).Data());
      TString sMotifType;
      int ix;
      int iy;
      sin >> sMotifType >> ix >> iy;
      
      AliMpMotifType* motifType = fMotifMap->FindMotifType(sMotifType.Data());
      if ( !motifType)
      {
        AliDebug(1,Form("Reading motifType %s from file",sMotifType.Data()));
        motifType = reader.BuildMotifType(dataStreams,sMotifType.Data());
        fMotifMap->AddMotifType(motifType);
      }
      else
      {
        AliDebug(1,Form("Got motifType %s from motifMap",sMotifType.Data()));        
      }
      
      if (! pcb)
      {
        AliError("pcb null");
        continue;
      }
      pcb->Add(motifType,ix,iy);
    }
  }
  
  delete &in;
  
  return pcb;
}

//_____________________________________________________________________________
AliMpTrigger*
AliMpTriggerReader::ReadSlat(const AliMpDataStreams&  dataStreams,
                             const char* slatType, AliMp::PlaneType planeType)
{
  ///
  /// Create a new AliMpTrigger object, by reading it from file.
  /// Returned object must be deleted by client.

  Double_t scale = 1.0;
  Bool_t flipX = kFALSE;
  Bool_t flipY = kFALSE;
  TList lines;
  lines.SetOwner(kTRUE);
  Int_t srcLine(-1);
  Int_t destLine(-1);
  
  // Read the file and its include (if any) and store the result
  // in a TObjArray of TObjStrings.
  ReadLines(dataStreams,
            slatType,planeType,lines,scale,flipX,flipY,srcLine,destLine);

  // Here some more sanity checks could be done.
  // For the moment we only insure that the first line contains 
  // a layer keyword.
  TString& firstLine = ((TObjString*)lines.First())->String();
  if ( !IsLayerLine(firstLine) ) 
  {
    std::ostringstream s;
    s << GetKeywordLayer();
    lines.AddFirst(new TObjString(s.str().c_str()));
  }
  
  AliDebugClass(2,Form("Scale=%g\n",scale));
  
  FlipLines(dataStreams,lines,flipX,flipY,srcLine,destLine);
  
  // Now splits the lines in packets corresponding to different layers 
  // (if any), and create sub-slats.
  TObjArray layers;
  layers.SetOwner(kTRUE);
  Int_t ilayer(-1);
  TIter it(&lines);
  TObjString* osline;
  
  while ( ( osline = (TObjString*)it.Next() ) )
  {
    TString& s = osline->String();
    if ( IsLayerLine(s) )
    {
      TList* list = new TList;
      list->SetOwner(kTRUE);
      layers.Add(list);
      ++ilayer;
    }
    else
    {
      ((TList*)layers.At(ilayer))->Add(new TObjString(s));
    }
  }

  AliDebugClass(2,Form("nlayers=%d\n",layers.GetEntriesFast()));

  AliMpTrigger* triggerSlat = new AliMpTrigger(slatType, planeType);
    
  for ( ilayer = 0; ilayer < layers.GetEntriesFast(); ++ilayer )
  {
    TList& lines1 = *((TList*)layers.At(ilayer));
    std::ostringstream slatName;
    slatName << slatType << "-LAYER" << ilayer;
    AliMpSlat* slat = BuildSlat(dataStreams,
                                slatName.str().c_str(),planeType,lines1,scale);
    if ( slat )
    {
      Bool_t ok = triggerSlat->AdoptLayer(slat);
      if (!ok)
      {
        StdoutToAliError(cout << "could not add slat=" << endl;
                         slat->Print();
                         cout << "to the triggerSlat=" << endl;
                         triggerSlat->Print();
                         );
        AliError("Slat is=");
        for ( Int_t i = 0; i < slat->GetSize(); ++i )
        {
          AliMpPCB* pcb = slat->GetPCB(i);
          AliError(Form("ERR pcb %d size %e,%e (unscaled is %e,%e)",
                                i,pcb->DX()*2,pcb->DY()*2,
                                pcb->DX()*2/scale,pcb->DY()*2/scale));
        }
        AliError("TriggerSlat is=");
        for ( Int_t j = 0; j < triggerSlat->GetSize(); ++j )
        {
          AliMpSlat* slat1 = triggerSlat->GetLayer(j);
          AliError(Form("Layer %d",j));
          for ( Int_t i = 0; i < slat1->GetSize(); ++i )
          {
            AliMpPCB* pcb = slat1->GetPCB(i);
            AliError(Form("ERR pcb %d size %e,%e (unscaled is %e,%e)",
                          i,pcb->DX()*2,pcb->DY()*2,
                          pcb->DX()*2/scale,pcb->DY()*2/scale));
          }
        } 
        StdoutToAliError(fMotifMap->Print(););
      }
    }
    else
    {
      AliErrorClass(Form("Could not read %s\n",slatName.str().c_str()));
      delete triggerSlat;
      return 0;
    }
  }
  
  return triggerSlat;
}
 AliMpTriggerReader.cxx:1
 AliMpTriggerReader.cxx:2
 AliMpTriggerReader.cxx:3
 AliMpTriggerReader.cxx:4
 AliMpTriggerReader.cxx:5
 AliMpTriggerReader.cxx:6
 AliMpTriggerReader.cxx:7
 AliMpTriggerReader.cxx:8
 AliMpTriggerReader.cxx:9
 AliMpTriggerReader.cxx:10
 AliMpTriggerReader.cxx:11
 AliMpTriggerReader.cxx:12
 AliMpTriggerReader.cxx:13
 AliMpTriggerReader.cxx:14
 AliMpTriggerReader.cxx:15
 AliMpTriggerReader.cxx:16
 AliMpTriggerReader.cxx:17
 AliMpTriggerReader.cxx:18
 AliMpTriggerReader.cxx:19
 AliMpTriggerReader.cxx:20
 AliMpTriggerReader.cxx:21
 AliMpTriggerReader.cxx:22
 AliMpTriggerReader.cxx:23
 AliMpTriggerReader.cxx:24
 AliMpTriggerReader.cxx:25
 AliMpTriggerReader.cxx:26
 AliMpTriggerReader.cxx:27
 AliMpTriggerReader.cxx:28
 AliMpTriggerReader.cxx:29
 AliMpTriggerReader.cxx:30
 AliMpTriggerReader.cxx:31
 AliMpTriggerReader.cxx:32
 AliMpTriggerReader.cxx:33
 AliMpTriggerReader.cxx:34
 AliMpTriggerReader.cxx:35
 AliMpTriggerReader.cxx:36
 AliMpTriggerReader.cxx:37
 AliMpTriggerReader.cxx:38
 AliMpTriggerReader.cxx:39
 AliMpTriggerReader.cxx:40
 AliMpTriggerReader.cxx:41
 AliMpTriggerReader.cxx:42
 AliMpTriggerReader.cxx:43
 AliMpTriggerReader.cxx:44
 AliMpTriggerReader.cxx:45
 AliMpTriggerReader.cxx:46
 AliMpTriggerReader.cxx:47
 AliMpTriggerReader.cxx:48
 AliMpTriggerReader.cxx:49
 AliMpTriggerReader.cxx:50
 AliMpTriggerReader.cxx:51
 AliMpTriggerReader.cxx:52
 AliMpTriggerReader.cxx:53
 AliMpTriggerReader.cxx:54
 AliMpTriggerReader.cxx:55
 AliMpTriggerReader.cxx:56
 AliMpTriggerReader.cxx:57
 AliMpTriggerReader.cxx:58
 AliMpTriggerReader.cxx:59
 AliMpTriggerReader.cxx:60
 AliMpTriggerReader.cxx:61
 AliMpTriggerReader.cxx:62
 AliMpTriggerReader.cxx:63
 AliMpTriggerReader.cxx:64
 AliMpTriggerReader.cxx:65
 AliMpTriggerReader.cxx:66
 AliMpTriggerReader.cxx:67
 AliMpTriggerReader.cxx:68
 AliMpTriggerReader.cxx:69
 AliMpTriggerReader.cxx:70
 AliMpTriggerReader.cxx:71
 AliMpTriggerReader.cxx:72
 AliMpTriggerReader.cxx:73
 AliMpTriggerReader.cxx:74
 AliMpTriggerReader.cxx:75
 AliMpTriggerReader.cxx:76
 AliMpTriggerReader.cxx:77
 AliMpTriggerReader.cxx:78
 AliMpTriggerReader.cxx:79
 AliMpTriggerReader.cxx:80
 AliMpTriggerReader.cxx:81
 AliMpTriggerReader.cxx:82
 AliMpTriggerReader.cxx:83
 AliMpTriggerReader.cxx:84
 AliMpTriggerReader.cxx:85
 AliMpTriggerReader.cxx:86
 AliMpTriggerReader.cxx:87
 AliMpTriggerReader.cxx:88
 AliMpTriggerReader.cxx:89
 AliMpTriggerReader.cxx:90
 AliMpTriggerReader.cxx:91
 AliMpTriggerReader.cxx:92
 AliMpTriggerReader.cxx:93
 AliMpTriggerReader.cxx:94
 AliMpTriggerReader.cxx:95
 AliMpTriggerReader.cxx:96
 AliMpTriggerReader.cxx:97
 AliMpTriggerReader.cxx:98
 AliMpTriggerReader.cxx:99
 AliMpTriggerReader.cxx:100
 AliMpTriggerReader.cxx:101
 AliMpTriggerReader.cxx:102
 AliMpTriggerReader.cxx:103
 AliMpTriggerReader.cxx:104
 AliMpTriggerReader.cxx:105
 AliMpTriggerReader.cxx:106
 AliMpTriggerReader.cxx:107
 AliMpTriggerReader.cxx:108
 AliMpTriggerReader.cxx:109
 AliMpTriggerReader.cxx:110
 AliMpTriggerReader.cxx:111
 AliMpTriggerReader.cxx:112
 AliMpTriggerReader.cxx:113
 AliMpTriggerReader.cxx:114
 AliMpTriggerReader.cxx:115
 AliMpTriggerReader.cxx:116
 AliMpTriggerReader.cxx:117
 AliMpTriggerReader.cxx:118
 AliMpTriggerReader.cxx:119
 AliMpTriggerReader.cxx:120
 AliMpTriggerReader.cxx:121
 AliMpTriggerReader.cxx:122
 AliMpTriggerReader.cxx:123
 AliMpTriggerReader.cxx:124
 AliMpTriggerReader.cxx:125
 AliMpTriggerReader.cxx:126
 AliMpTriggerReader.cxx:127
 AliMpTriggerReader.cxx:128
 AliMpTriggerReader.cxx:129
 AliMpTriggerReader.cxx:130
 AliMpTriggerReader.cxx:131
 AliMpTriggerReader.cxx:132
 AliMpTriggerReader.cxx:133
 AliMpTriggerReader.cxx:134
 AliMpTriggerReader.cxx:135
 AliMpTriggerReader.cxx:136
 AliMpTriggerReader.cxx:137
 AliMpTriggerReader.cxx:138
 AliMpTriggerReader.cxx:139
 AliMpTriggerReader.cxx:140
 AliMpTriggerReader.cxx:141
 AliMpTriggerReader.cxx:142
 AliMpTriggerReader.cxx:143
 AliMpTriggerReader.cxx:144
 AliMpTriggerReader.cxx:145
 AliMpTriggerReader.cxx:146
 AliMpTriggerReader.cxx:147
 AliMpTriggerReader.cxx:148
 AliMpTriggerReader.cxx:149
 AliMpTriggerReader.cxx:150
 AliMpTriggerReader.cxx:151
 AliMpTriggerReader.cxx:152
 AliMpTriggerReader.cxx:153
 AliMpTriggerReader.cxx:154
 AliMpTriggerReader.cxx:155
 AliMpTriggerReader.cxx:156
 AliMpTriggerReader.cxx:157
 AliMpTriggerReader.cxx:158
 AliMpTriggerReader.cxx:159
 AliMpTriggerReader.cxx:160
 AliMpTriggerReader.cxx:161
 AliMpTriggerReader.cxx:162
 AliMpTriggerReader.cxx:163
 AliMpTriggerReader.cxx:164
 AliMpTriggerReader.cxx:165
 AliMpTriggerReader.cxx:166
 AliMpTriggerReader.cxx:167
 AliMpTriggerReader.cxx:168
 AliMpTriggerReader.cxx:169
 AliMpTriggerReader.cxx:170
 AliMpTriggerReader.cxx:171
 AliMpTriggerReader.cxx:172
 AliMpTriggerReader.cxx:173
 AliMpTriggerReader.cxx:174
 AliMpTriggerReader.cxx:175
 AliMpTriggerReader.cxx:176
 AliMpTriggerReader.cxx:177
 AliMpTriggerReader.cxx:178
 AliMpTriggerReader.cxx:179
 AliMpTriggerReader.cxx:180
 AliMpTriggerReader.cxx:181
 AliMpTriggerReader.cxx:182
 AliMpTriggerReader.cxx:183
 AliMpTriggerReader.cxx:184
 AliMpTriggerReader.cxx:185
 AliMpTriggerReader.cxx:186
 AliMpTriggerReader.cxx:187
 AliMpTriggerReader.cxx:188
 AliMpTriggerReader.cxx:189
 AliMpTriggerReader.cxx:190
 AliMpTriggerReader.cxx:191
 AliMpTriggerReader.cxx:192
 AliMpTriggerReader.cxx:193
 AliMpTriggerReader.cxx:194
 AliMpTriggerReader.cxx:195
 AliMpTriggerReader.cxx:196
 AliMpTriggerReader.cxx:197
 AliMpTriggerReader.cxx:198
 AliMpTriggerReader.cxx:199
 AliMpTriggerReader.cxx:200
 AliMpTriggerReader.cxx:201
 AliMpTriggerReader.cxx:202
 AliMpTriggerReader.cxx:203
 AliMpTriggerReader.cxx:204
 AliMpTriggerReader.cxx:205
 AliMpTriggerReader.cxx:206
 AliMpTriggerReader.cxx:207
 AliMpTriggerReader.cxx:208
 AliMpTriggerReader.cxx:209
 AliMpTriggerReader.cxx:210
 AliMpTriggerReader.cxx:211
 AliMpTriggerReader.cxx:212
 AliMpTriggerReader.cxx:213
 AliMpTriggerReader.cxx:214
 AliMpTriggerReader.cxx:215
 AliMpTriggerReader.cxx:216
 AliMpTriggerReader.cxx:217
 AliMpTriggerReader.cxx:218
 AliMpTriggerReader.cxx:219
 AliMpTriggerReader.cxx:220
 AliMpTriggerReader.cxx:221
 AliMpTriggerReader.cxx:222
 AliMpTriggerReader.cxx:223
 AliMpTriggerReader.cxx:224
 AliMpTriggerReader.cxx:225
 AliMpTriggerReader.cxx:226
 AliMpTriggerReader.cxx:227
 AliMpTriggerReader.cxx:228
 AliMpTriggerReader.cxx:229
 AliMpTriggerReader.cxx:230
 AliMpTriggerReader.cxx:231
 AliMpTriggerReader.cxx:232
 AliMpTriggerReader.cxx:233
 AliMpTriggerReader.cxx:234
 AliMpTriggerReader.cxx:235
 AliMpTriggerReader.cxx:236
 AliMpTriggerReader.cxx:237
 AliMpTriggerReader.cxx:238
 AliMpTriggerReader.cxx:239
 AliMpTriggerReader.cxx:240
 AliMpTriggerReader.cxx:241
 AliMpTriggerReader.cxx:242
 AliMpTriggerReader.cxx:243
 AliMpTriggerReader.cxx:244
 AliMpTriggerReader.cxx:245
 AliMpTriggerReader.cxx:246
 AliMpTriggerReader.cxx:247
 AliMpTriggerReader.cxx:248
 AliMpTriggerReader.cxx:249
 AliMpTriggerReader.cxx:250
 AliMpTriggerReader.cxx:251
 AliMpTriggerReader.cxx:252
 AliMpTriggerReader.cxx:253
 AliMpTriggerReader.cxx:254
 AliMpTriggerReader.cxx:255
 AliMpTriggerReader.cxx:256
 AliMpTriggerReader.cxx:257
 AliMpTriggerReader.cxx:258
 AliMpTriggerReader.cxx:259
 AliMpTriggerReader.cxx:260
 AliMpTriggerReader.cxx:261
 AliMpTriggerReader.cxx:262
 AliMpTriggerReader.cxx:263
 AliMpTriggerReader.cxx:264
 AliMpTriggerReader.cxx:265
 AliMpTriggerReader.cxx:266
 AliMpTriggerReader.cxx:267
 AliMpTriggerReader.cxx:268
 AliMpTriggerReader.cxx:269
 AliMpTriggerReader.cxx:270
 AliMpTriggerReader.cxx:271
 AliMpTriggerReader.cxx:272
 AliMpTriggerReader.cxx:273
 AliMpTriggerReader.cxx:274
 AliMpTriggerReader.cxx:275
 AliMpTriggerReader.cxx:276
 AliMpTriggerReader.cxx:277
 AliMpTriggerReader.cxx:278
 AliMpTriggerReader.cxx:279
 AliMpTriggerReader.cxx:280
 AliMpTriggerReader.cxx:281
 AliMpTriggerReader.cxx:282
 AliMpTriggerReader.cxx:283
 AliMpTriggerReader.cxx:284
 AliMpTriggerReader.cxx:285
 AliMpTriggerReader.cxx:286
 AliMpTriggerReader.cxx:287
 AliMpTriggerReader.cxx:288
 AliMpTriggerReader.cxx:289
 AliMpTriggerReader.cxx:290
 AliMpTriggerReader.cxx:291
 AliMpTriggerReader.cxx:292
 AliMpTriggerReader.cxx:293
 AliMpTriggerReader.cxx:294
 AliMpTriggerReader.cxx:295
 AliMpTriggerReader.cxx:296
 AliMpTriggerReader.cxx:297
 AliMpTriggerReader.cxx:298
 AliMpTriggerReader.cxx:299
 AliMpTriggerReader.cxx:300
 AliMpTriggerReader.cxx:301
 AliMpTriggerReader.cxx:302
 AliMpTriggerReader.cxx:303
 AliMpTriggerReader.cxx:304
 AliMpTriggerReader.cxx:305
 AliMpTriggerReader.cxx:306
 AliMpTriggerReader.cxx:307
 AliMpTriggerReader.cxx:308
 AliMpTriggerReader.cxx:309
 AliMpTriggerReader.cxx:310
 AliMpTriggerReader.cxx:311
 AliMpTriggerReader.cxx:312
 AliMpTriggerReader.cxx:313
 AliMpTriggerReader.cxx:314
 AliMpTriggerReader.cxx:315
 AliMpTriggerReader.cxx:316
 AliMpTriggerReader.cxx:317
 AliMpTriggerReader.cxx:318
 AliMpTriggerReader.cxx:319
 AliMpTriggerReader.cxx:320
 AliMpTriggerReader.cxx:321
 AliMpTriggerReader.cxx:322
 AliMpTriggerReader.cxx:323
 AliMpTriggerReader.cxx:324
 AliMpTriggerReader.cxx:325
 AliMpTriggerReader.cxx:326
 AliMpTriggerReader.cxx:327
 AliMpTriggerReader.cxx:328
 AliMpTriggerReader.cxx:329
 AliMpTriggerReader.cxx:330
 AliMpTriggerReader.cxx:331
 AliMpTriggerReader.cxx:332
 AliMpTriggerReader.cxx:333
 AliMpTriggerReader.cxx:334
 AliMpTriggerReader.cxx:335
 AliMpTriggerReader.cxx:336
 AliMpTriggerReader.cxx:337
 AliMpTriggerReader.cxx:338
 AliMpTriggerReader.cxx:339
 AliMpTriggerReader.cxx:340
 AliMpTriggerReader.cxx:341
 AliMpTriggerReader.cxx:342
 AliMpTriggerReader.cxx:343
 AliMpTriggerReader.cxx:344
 AliMpTriggerReader.cxx:345
 AliMpTriggerReader.cxx:346
 AliMpTriggerReader.cxx:347
 AliMpTriggerReader.cxx:348
 AliMpTriggerReader.cxx:349
 AliMpTriggerReader.cxx:350
 AliMpTriggerReader.cxx:351
 AliMpTriggerReader.cxx:352
 AliMpTriggerReader.cxx:353
 AliMpTriggerReader.cxx:354
 AliMpTriggerReader.cxx:355
 AliMpTriggerReader.cxx:356
 AliMpTriggerReader.cxx:357
 AliMpTriggerReader.cxx:358
 AliMpTriggerReader.cxx:359
 AliMpTriggerReader.cxx:360
 AliMpTriggerReader.cxx:361
 AliMpTriggerReader.cxx:362
 AliMpTriggerReader.cxx:363
 AliMpTriggerReader.cxx:364
 AliMpTriggerReader.cxx:365
 AliMpTriggerReader.cxx:366
 AliMpTriggerReader.cxx:367
 AliMpTriggerReader.cxx:368
 AliMpTriggerReader.cxx:369
 AliMpTriggerReader.cxx:370
 AliMpTriggerReader.cxx:371
 AliMpTriggerReader.cxx:372
 AliMpTriggerReader.cxx:373
 AliMpTriggerReader.cxx:374
 AliMpTriggerReader.cxx:375
 AliMpTriggerReader.cxx:376
 AliMpTriggerReader.cxx:377
 AliMpTriggerReader.cxx:378
 AliMpTriggerReader.cxx:379
 AliMpTriggerReader.cxx:380
 AliMpTriggerReader.cxx:381
 AliMpTriggerReader.cxx:382
 AliMpTriggerReader.cxx:383
 AliMpTriggerReader.cxx:384
 AliMpTriggerReader.cxx:385
 AliMpTriggerReader.cxx:386
 AliMpTriggerReader.cxx:387
 AliMpTriggerReader.cxx:388
 AliMpTriggerReader.cxx:389
 AliMpTriggerReader.cxx:390
 AliMpTriggerReader.cxx:391
 AliMpTriggerReader.cxx:392
 AliMpTriggerReader.cxx:393
 AliMpTriggerReader.cxx:394
 AliMpTriggerReader.cxx:395
 AliMpTriggerReader.cxx:396
 AliMpTriggerReader.cxx:397
 AliMpTriggerReader.cxx:398
 AliMpTriggerReader.cxx:399
 AliMpTriggerReader.cxx:400
 AliMpTriggerReader.cxx:401
 AliMpTriggerReader.cxx:402
 AliMpTriggerReader.cxx:403
 AliMpTriggerReader.cxx:404
 AliMpTriggerReader.cxx:405
 AliMpTriggerReader.cxx:406
 AliMpTriggerReader.cxx:407
 AliMpTriggerReader.cxx:408
 AliMpTriggerReader.cxx:409
 AliMpTriggerReader.cxx:410
 AliMpTriggerReader.cxx:411
 AliMpTriggerReader.cxx:412
 AliMpTriggerReader.cxx:413
 AliMpTriggerReader.cxx:414
 AliMpTriggerReader.cxx:415
 AliMpTriggerReader.cxx:416
 AliMpTriggerReader.cxx:417
 AliMpTriggerReader.cxx:418
 AliMpTriggerReader.cxx:419
 AliMpTriggerReader.cxx:420
 AliMpTriggerReader.cxx:421
 AliMpTriggerReader.cxx:422
 AliMpTriggerReader.cxx:423
 AliMpTriggerReader.cxx:424
 AliMpTriggerReader.cxx:425
 AliMpTriggerReader.cxx:426
 AliMpTriggerReader.cxx:427
 AliMpTriggerReader.cxx:428
 AliMpTriggerReader.cxx:429
 AliMpTriggerReader.cxx:430
 AliMpTriggerReader.cxx:431
 AliMpTriggerReader.cxx:432
 AliMpTriggerReader.cxx:433
 AliMpTriggerReader.cxx:434
 AliMpTriggerReader.cxx:435
 AliMpTriggerReader.cxx:436
 AliMpTriggerReader.cxx:437
 AliMpTriggerReader.cxx:438
 AliMpTriggerReader.cxx:439
 AliMpTriggerReader.cxx:440
 AliMpTriggerReader.cxx:441
 AliMpTriggerReader.cxx:442
 AliMpTriggerReader.cxx:443
 AliMpTriggerReader.cxx:444
 AliMpTriggerReader.cxx:445
 AliMpTriggerReader.cxx:446
 AliMpTriggerReader.cxx:447
 AliMpTriggerReader.cxx:448
 AliMpTriggerReader.cxx:449
 AliMpTriggerReader.cxx:450
 AliMpTriggerReader.cxx:451
 AliMpTriggerReader.cxx:452
 AliMpTriggerReader.cxx:453
 AliMpTriggerReader.cxx:454
 AliMpTriggerReader.cxx:455
 AliMpTriggerReader.cxx:456
 AliMpTriggerReader.cxx:457
 AliMpTriggerReader.cxx:458
 AliMpTriggerReader.cxx:459
 AliMpTriggerReader.cxx:460
 AliMpTriggerReader.cxx:461
 AliMpTriggerReader.cxx:462
 AliMpTriggerReader.cxx:463
 AliMpTriggerReader.cxx:464
 AliMpTriggerReader.cxx:465
 AliMpTriggerReader.cxx:466
 AliMpTriggerReader.cxx:467
 AliMpTriggerReader.cxx:468
 AliMpTriggerReader.cxx:469
 AliMpTriggerReader.cxx:470
 AliMpTriggerReader.cxx:471
 AliMpTriggerReader.cxx:472
 AliMpTriggerReader.cxx:473
 AliMpTriggerReader.cxx:474
 AliMpTriggerReader.cxx:475
 AliMpTriggerReader.cxx:476
 AliMpTriggerReader.cxx:477
 AliMpTriggerReader.cxx:478
 AliMpTriggerReader.cxx:479
 AliMpTriggerReader.cxx:480
 AliMpTriggerReader.cxx:481
 AliMpTriggerReader.cxx:482
 AliMpTriggerReader.cxx:483
 AliMpTriggerReader.cxx:484
 AliMpTriggerReader.cxx:485
 AliMpTriggerReader.cxx:486
 AliMpTriggerReader.cxx:487
 AliMpTriggerReader.cxx:488
 AliMpTriggerReader.cxx:489
 AliMpTriggerReader.cxx:490
 AliMpTriggerReader.cxx:491
 AliMpTriggerReader.cxx:492
 AliMpTriggerReader.cxx:493
 AliMpTriggerReader.cxx:494
 AliMpTriggerReader.cxx:495
 AliMpTriggerReader.cxx:496
 AliMpTriggerReader.cxx:497
 AliMpTriggerReader.cxx:498
 AliMpTriggerReader.cxx:499
 AliMpTriggerReader.cxx:500
 AliMpTriggerReader.cxx:501
 AliMpTriggerReader.cxx:502
 AliMpTriggerReader.cxx:503
 AliMpTriggerReader.cxx:504
 AliMpTriggerReader.cxx:505
 AliMpTriggerReader.cxx:506
 AliMpTriggerReader.cxx:507
 AliMpTriggerReader.cxx:508
 AliMpTriggerReader.cxx:509
 AliMpTriggerReader.cxx:510
 AliMpTriggerReader.cxx:511
 AliMpTriggerReader.cxx:512
 AliMpTriggerReader.cxx:513
 AliMpTriggerReader.cxx:514
 AliMpTriggerReader.cxx:515
 AliMpTriggerReader.cxx:516
 AliMpTriggerReader.cxx:517
 AliMpTriggerReader.cxx:518
 AliMpTriggerReader.cxx:519
 AliMpTriggerReader.cxx:520
 AliMpTriggerReader.cxx:521
 AliMpTriggerReader.cxx:522
 AliMpTriggerReader.cxx:523
 AliMpTriggerReader.cxx:524
 AliMpTriggerReader.cxx:525
 AliMpTriggerReader.cxx:526
 AliMpTriggerReader.cxx:527
 AliMpTriggerReader.cxx:528
 AliMpTriggerReader.cxx:529
 AliMpTriggerReader.cxx:530
 AliMpTriggerReader.cxx:531
 AliMpTriggerReader.cxx:532
 AliMpTriggerReader.cxx:533
 AliMpTriggerReader.cxx:534
 AliMpTriggerReader.cxx:535
 AliMpTriggerReader.cxx:536
 AliMpTriggerReader.cxx:537
 AliMpTriggerReader.cxx:538
 AliMpTriggerReader.cxx:539
 AliMpTriggerReader.cxx:540
 AliMpTriggerReader.cxx:541
 AliMpTriggerReader.cxx:542
 AliMpTriggerReader.cxx:543
 AliMpTriggerReader.cxx:544
 AliMpTriggerReader.cxx:545
 AliMpTriggerReader.cxx:546
 AliMpTriggerReader.cxx:547
 AliMpTriggerReader.cxx:548
 AliMpTriggerReader.cxx:549
 AliMpTriggerReader.cxx:550
 AliMpTriggerReader.cxx:551
 AliMpTriggerReader.cxx:552
 AliMpTriggerReader.cxx:553
 AliMpTriggerReader.cxx:554
 AliMpTriggerReader.cxx:555
 AliMpTriggerReader.cxx:556
 AliMpTriggerReader.cxx:557
 AliMpTriggerReader.cxx:558
 AliMpTriggerReader.cxx:559
 AliMpTriggerReader.cxx:560
 AliMpTriggerReader.cxx:561
 AliMpTriggerReader.cxx:562
 AliMpTriggerReader.cxx:563
 AliMpTriggerReader.cxx:564
 AliMpTriggerReader.cxx:565
 AliMpTriggerReader.cxx:566
 AliMpTriggerReader.cxx:567
 AliMpTriggerReader.cxx:568
 AliMpTriggerReader.cxx:569
 AliMpTriggerReader.cxx:570
 AliMpTriggerReader.cxx:571
 AliMpTriggerReader.cxx:572
 AliMpTriggerReader.cxx:573
 AliMpTriggerReader.cxx:574
 AliMpTriggerReader.cxx:575
 AliMpTriggerReader.cxx:576
 AliMpTriggerReader.cxx:577
 AliMpTriggerReader.cxx:578
 AliMpTriggerReader.cxx:579
 AliMpTriggerReader.cxx:580
 AliMpTriggerReader.cxx:581
 AliMpTriggerReader.cxx:582
 AliMpTriggerReader.cxx:583
 AliMpTriggerReader.cxx:584
 AliMpTriggerReader.cxx:585
 AliMpTriggerReader.cxx:586
 AliMpTriggerReader.cxx:587
 AliMpTriggerReader.cxx:588
 AliMpTriggerReader.cxx:589
 AliMpTriggerReader.cxx:590
 AliMpTriggerReader.cxx:591
 AliMpTriggerReader.cxx:592
 AliMpTriggerReader.cxx:593
 AliMpTriggerReader.cxx:594
 AliMpTriggerReader.cxx:595
 AliMpTriggerReader.cxx:596
 AliMpTriggerReader.cxx:597
 AliMpTriggerReader.cxx:598
 AliMpTriggerReader.cxx:599
 AliMpTriggerReader.cxx:600
 AliMpTriggerReader.cxx:601
 AliMpTriggerReader.cxx:602
 AliMpTriggerReader.cxx:603
 AliMpTriggerReader.cxx:604
 AliMpTriggerReader.cxx:605
 AliMpTriggerReader.cxx:606
 AliMpTriggerReader.cxx:607
 AliMpTriggerReader.cxx:608
 AliMpTriggerReader.cxx:609
 AliMpTriggerReader.cxx:610
 AliMpTriggerReader.cxx:611
 AliMpTriggerReader.cxx:612
 AliMpTriggerReader.cxx:613
 AliMpTriggerReader.cxx:614
 AliMpTriggerReader.cxx:615
 AliMpTriggerReader.cxx:616
 AliMpTriggerReader.cxx:617
 AliMpTriggerReader.cxx:618
 AliMpTriggerReader.cxx:619
 AliMpTriggerReader.cxx:620
 AliMpTriggerReader.cxx:621
 AliMpTriggerReader.cxx:622
 AliMpTriggerReader.cxx:623
 AliMpTriggerReader.cxx:624
 AliMpTriggerReader.cxx:625
 AliMpTriggerReader.cxx:626
 AliMpTriggerReader.cxx:627
 AliMpTriggerReader.cxx:628
 AliMpTriggerReader.cxx:629
 AliMpTriggerReader.cxx:630
 AliMpTriggerReader.cxx:631
 AliMpTriggerReader.cxx:632
 AliMpTriggerReader.cxx:633
 AliMpTriggerReader.cxx:634
 AliMpTriggerReader.cxx:635
 AliMpTriggerReader.cxx:636
 AliMpTriggerReader.cxx:637
 AliMpTriggerReader.cxx:638
 AliMpTriggerReader.cxx:639
 AliMpTriggerReader.cxx:640
 AliMpTriggerReader.cxx:641
 AliMpTriggerReader.cxx:642
 AliMpTriggerReader.cxx:643
 AliMpTriggerReader.cxx:644
 AliMpTriggerReader.cxx:645
 AliMpTriggerReader.cxx:646
 AliMpTriggerReader.cxx:647
 AliMpTriggerReader.cxx:648
 AliMpTriggerReader.cxx:649
 AliMpTriggerReader.cxx:650
 AliMpTriggerReader.cxx:651
 AliMpTriggerReader.cxx:652
 AliMpTriggerReader.cxx:653
 AliMpTriggerReader.cxx:654
 AliMpTriggerReader.cxx:655
 AliMpTriggerReader.cxx:656
 AliMpTriggerReader.cxx:657
 AliMpTriggerReader.cxx:658
 AliMpTriggerReader.cxx:659
 AliMpTriggerReader.cxx:660
 AliMpTriggerReader.cxx:661
 AliMpTriggerReader.cxx:662
 AliMpTriggerReader.cxx:663
 AliMpTriggerReader.cxx:664
 AliMpTriggerReader.cxx:665
 AliMpTriggerReader.cxx:666
 AliMpTriggerReader.cxx:667
 AliMpTriggerReader.cxx:668
 AliMpTriggerReader.cxx:669
 AliMpTriggerReader.cxx:670
 AliMpTriggerReader.cxx:671
 AliMpTriggerReader.cxx:672
 AliMpTriggerReader.cxx:673
 AliMpTriggerReader.cxx:674
 AliMpTriggerReader.cxx:675
 AliMpTriggerReader.cxx:676
 AliMpTriggerReader.cxx:677
 AliMpTriggerReader.cxx:678
 AliMpTriggerReader.cxx:679
 AliMpTriggerReader.cxx:680
 AliMpTriggerReader.cxx:681
 AliMpTriggerReader.cxx:682
 AliMpTriggerReader.cxx:683
 AliMpTriggerReader.cxx:684
 AliMpTriggerReader.cxx:685
 AliMpTriggerReader.cxx:686
 AliMpTriggerReader.cxx:687
 AliMpTriggerReader.cxx:688
 AliMpTriggerReader.cxx:689
 AliMpTriggerReader.cxx:690
 AliMpTriggerReader.cxx:691
 AliMpTriggerReader.cxx:692
 AliMpTriggerReader.cxx:693
 AliMpTriggerReader.cxx:694
 AliMpTriggerReader.cxx:695
 AliMpTriggerReader.cxx:696
 AliMpTriggerReader.cxx:697
 AliMpTriggerReader.cxx:698
 AliMpTriggerReader.cxx:699
 AliMpTriggerReader.cxx:700
 AliMpTriggerReader.cxx:701
 AliMpTriggerReader.cxx:702
 AliMpTriggerReader.cxx:703
 AliMpTriggerReader.cxx:704
 AliMpTriggerReader.cxx:705
 AliMpTriggerReader.cxx:706
 AliMpTriggerReader.cxx:707
 AliMpTriggerReader.cxx:708
 AliMpTriggerReader.cxx:709
 AliMpTriggerReader.cxx:710
 AliMpTriggerReader.cxx:711
 AliMpTriggerReader.cxx:712
 AliMpTriggerReader.cxx:713
 AliMpTriggerReader.cxx:714
 AliMpTriggerReader.cxx:715
 AliMpTriggerReader.cxx:716
 AliMpTriggerReader.cxx:717
 AliMpTriggerReader.cxx:718
 AliMpTriggerReader.cxx:719
 AliMpTriggerReader.cxx:720
 AliMpTriggerReader.cxx:721
 AliMpTriggerReader.cxx:722
 AliMpTriggerReader.cxx:723
 AliMpTriggerReader.cxx:724
 AliMpTriggerReader.cxx:725
 AliMpTriggerReader.cxx:726
 AliMpTriggerReader.cxx:727
 AliMpTriggerReader.cxx:728
 AliMpTriggerReader.cxx:729
 AliMpTriggerReader.cxx:730
 AliMpTriggerReader.cxx:731
 AliMpTriggerReader.cxx:732
 AliMpTriggerReader.cxx:733
 AliMpTriggerReader.cxx:734
 AliMpTriggerReader.cxx:735
 AliMpTriggerReader.cxx:736
 AliMpTriggerReader.cxx:737
 AliMpTriggerReader.cxx:738
 AliMpTriggerReader.cxx:739
 AliMpTriggerReader.cxx:740
 AliMpTriggerReader.cxx:741
 AliMpTriggerReader.cxx:742
 AliMpTriggerReader.cxx:743
 AliMpTriggerReader.cxx:744
 AliMpTriggerReader.cxx:745
 AliMpTriggerReader.cxx:746
 AliMpTriggerReader.cxx:747
 AliMpTriggerReader.cxx:748
 AliMpTriggerReader.cxx:749
 AliMpTriggerReader.cxx:750
 AliMpTriggerReader.cxx:751
 AliMpTriggerReader.cxx:752
 AliMpTriggerReader.cxx:753
 AliMpTriggerReader.cxx:754
 AliMpTriggerReader.cxx:755
 AliMpTriggerReader.cxx:756
 AliMpTriggerReader.cxx:757
 AliMpTriggerReader.cxx:758
 AliMpTriggerReader.cxx:759
 AliMpTriggerReader.cxx:760
 AliMpTriggerReader.cxx:761
 AliMpTriggerReader.cxx:762
 AliMpTriggerReader.cxx:763
 AliMpTriggerReader.cxx:764
 AliMpTriggerReader.cxx:765
 AliMpTriggerReader.cxx:766
 AliMpTriggerReader.cxx:767
 AliMpTriggerReader.cxx:768
 AliMpTriggerReader.cxx:769
 AliMpTriggerReader.cxx:770
 AliMpTriggerReader.cxx:771
 AliMpTriggerReader.cxx:772
 AliMpTriggerReader.cxx:773
 AliMpTriggerReader.cxx:774
 AliMpTriggerReader.cxx:775
 AliMpTriggerReader.cxx:776
 AliMpTriggerReader.cxx:777
 AliMpTriggerReader.cxx:778
 AliMpTriggerReader.cxx:779
 AliMpTriggerReader.cxx:780
 AliMpTriggerReader.cxx:781
 AliMpTriggerReader.cxx:782
 AliMpTriggerReader.cxx:783
 AliMpTriggerReader.cxx:784
 AliMpTriggerReader.cxx:785
 AliMpTriggerReader.cxx:786
 AliMpTriggerReader.cxx:787
 AliMpTriggerReader.cxx:788
 AliMpTriggerReader.cxx:789
 AliMpTriggerReader.cxx:790
 AliMpTriggerReader.cxx:791
 AliMpTriggerReader.cxx:792
 AliMpTriggerReader.cxx:793
 AliMpTriggerReader.cxx:794
 AliMpTriggerReader.cxx:795
 AliMpTriggerReader.cxx:796
 AliMpTriggerReader.cxx:797
 AliMpTriggerReader.cxx:798
 AliMpTriggerReader.cxx:799
 AliMpTriggerReader.cxx:800
 AliMpTriggerReader.cxx:801
 AliMpTriggerReader.cxx:802
 AliMpTriggerReader.cxx:803
 AliMpTriggerReader.cxx:804
 AliMpTriggerReader.cxx:805
 AliMpTriggerReader.cxx:806
 AliMpTriggerReader.cxx:807
 AliMpTriggerReader.cxx:808
 AliMpTriggerReader.cxx:809
 AliMpTriggerReader.cxx:810
 AliMpTriggerReader.cxx:811
 AliMpTriggerReader.cxx:812
 AliMpTriggerReader.cxx:813
 AliMpTriggerReader.cxx:814
 AliMpTriggerReader.cxx:815
 AliMpTriggerReader.cxx:816
 AliMpTriggerReader.cxx:817
 AliMpTriggerReader.cxx:818
 AliMpTriggerReader.cxx:819
 AliMpTriggerReader.cxx:820
 AliMpTriggerReader.cxx:821
 AliMpTriggerReader.cxx:822
 AliMpTriggerReader.cxx:823
 AliMpTriggerReader.cxx:824
 AliMpTriggerReader.cxx:825
 AliMpTriggerReader.cxx:826
 AliMpTriggerReader.cxx:827
 AliMpTriggerReader.cxx:828
 AliMpTriggerReader.cxx:829
 AliMpTriggerReader.cxx:830
 AliMpTriggerReader.cxx:831
 AliMpTriggerReader.cxx:832
 AliMpTriggerReader.cxx:833
 AliMpTriggerReader.cxx:834
 AliMpTriggerReader.cxx:835
 AliMpTriggerReader.cxx:836
 AliMpTriggerReader.cxx:837
 AliMpTriggerReader.cxx:838
 AliMpTriggerReader.cxx:839
 AliMpTriggerReader.cxx:840
 AliMpTriggerReader.cxx:841
 AliMpTriggerReader.cxx:842
 AliMpTriggerReader.cxx:843
 AliMpTriggerReader.cxx:844
 AliMpTriggerReader.cxx:845
 AliMpTriggerReader.cxx:846
 AliMpTriggerReader.cxx:847
 AliMpTriggerReader.cxx:848
 AliMpTriggerReader.cxx:849
 AliMpTriggerReader.cxx:850
 AliMpTriggerReader.cxx:851
 AliMpTriggerReader.cxx:852
 AliMpTriggerReader.cxx:853
 AliMpTriggerReader.cxx:854
 AliMpTriggerReader.cxx:855
 AliMpTriggerReader.cxx:856
 AliMpTriggerReader.cxx:857
 AliMpTriggerReader.cxx:858
 AliMpTriggerReader.cxx:859
 AliMpTriggerReader.cxx:860
 AliMpTriggerReader.cxx:861
 AliMpTriggerReader.cxx:862
 AliMpTriggerReader.cxx:863
 AliMpTriggerReader.cxx:864
 AliMpTriggerReader.cxx:865
 AliMpTriggerReader.cxx:866
 AliMpTriggerReader.cxx:867
 AliMpTriggerReader.cxx:868
 AliMpTriggerReader.cxx:869
 AliMpTriggerReader.cxx:870
 AliMpTriggerReader.cxx:871
 AliMpTriggerReader.cxx:872
 AliMpTriggerReader.cxx:873
 AliMpTriggerReader.cxx:874
 AliMpTriggerReader.cxx:875
 AliMpTriggerReader.cxx:876
 AliMpTriggerReader.cxx:877
 AliMpTriggerReader.cxx:878
 AliMpTriggerReader.cxx:879
 AliMpTriggerReader.cxx:880
 AliMpTriggerReader.cxx:881
 AliMpTriggerReader.cxx:882
 AliMpTriggerReader.cxx:883
 AliMpTriggerReader.cxx:884
 AliMpTriggerReader.cxx:885
 AliMpTriggerReader.cxx:886
 AliMpTriggerReader.cxx:887
 AliMpTriggerReader.cxx:888
 AliMpTriggerReader.cxx:889
 AliMpTriggerReader.cxx:890
 AliMpTriggerReader.cxx:891
 AliMpTriggerReader.cxx:892
 AliMpTriggerReader.cxx:893
 AliMpTriggerReader.cxx:894
 AliMpTriggerReader.cxx:895
 AliMpTriggerReader.cxx:896
 AliMpTriggerReader.cxx:897