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$

#include <cstdlib>
#include <iostream>
#include "AliMUONTrackerIO.h"

/// \class AliMUONTrackerIO
///
/// Reader class for ASCII calibration files for MUON tracker : 
/// converts those ASCII files into AliMUONVStore (suitable to e.g. feed
/// the OCDB).
///
/// \author Laurent Aphecetche, Subatech

using std::ostringstream;
using std::istringstream;
using std::cout;
using std::endl;
/// \cond CLASSIMP
ClassImp(AliMUONTrackerIO)
/// \endcond

#include "AliDCSValue.h"
#include "AliLog.h"
#include "AliMUONCalibParamND.h"
#include "AliMUONCalibParamNF.h"
#include "AliMUONVStore.h"
#include "AliMpConstants.h"
#include "AliMpDDLStore.h"
#include "AliMpDEManager.h"
#include "AliMpDetElement.h"
#include <Riostream.h>
#include <TClass.h>
#include <TObjString.h>
#include <TSystem.h>
#include <sstream>

//_____________________________________________________________________________
AliMUONTrackerIO::AliMUONTrackerIO()
{
  /// ctor
}

//_____________________________________________________________________________
AliMUONTrackerIO::~AliMUONTrackerIO()
{
  /// dtor
}

//_____________________________________________________________________________
Int_t 
AliMUONTrackerIO::ReadOccupancy(const char* filename,AliMUONVStore& occupancyMap)
{
  /// Read occupancy file created by online DA
  /// and append values to the occupancyMap store.
  /// Expected format of the file is :
  /// busPatchId manuId sumofn nevt
  
  TString sFilename(gSystem->ExpandPathName(filename));
  
  std::ifstream in(sFilename.Data());
  if (!in.good()) 
  {
    return kCannotOpenFile;
  }
  
  TString datastring;
  ostringstream stream;
  char line[1024];
  while ( in.getline(line,1024) )
  	stream << line << "\n";
  
  in.close();
  
  return DecodeOccupancy(stream.str().c_str(),occupancyMap);
  
}

//_____________________________________________________________________________
Int_t 
AliMUONTrackerIO::DecodeOccupancy(const char* data, AliMUONVStore& occupancyMap)
{
  /// Decode occupancy string created append values to the occupancyMap store.
  /// Expected format of the file is :
  /// busPatchId manuId sumofn nevt
 
  if ( ! AliMpDDLStore::Instance(kFALSE) )
  {
    AliErrorClass("Mapping not loaded. Cannot work");
    return kNoMapping;
  }
  
  char line[1024];
  istringstream in(data);
  
  Int_t n(0);
  
  while ( in.getline(line,1024) )
  {
    AliDebugClass(3,Form("line=%s",line));
    if ( line[0] == '/' && line[1] == '/' ) continue;
    std::istringstream sin(line);
    
    Int_t busPatchId, manuId;
    Int_t numberOfEvents;
    Double_t sumn;

    sin >> busPatchId >> manuId >> sumn >> numberOfEvents;
    
    if ( busPatchId == -1 && manuId == -1 && sumn == 0 && numberOfEvents == 0 )
    {
      /// DA could not produce information (because run failed somehow). 
      /// That's OK, but let the world know about it
      return kNoInfoFile;
    }
    
    Int_t detElemId = AliMpDDLStore::Instance()->GetDEfromBus(busPatchId);

    AliMpDetElement* de = AliMpDDLStore::Instance()->GetDetElement(detElemId);

    Int_t numberOfChannelsInManu = -1;
    
    if (de) numberOfChannelsInManu = de->NofChannelsInManu(manuId);

    if ( numberOfChannelsInManu <= 0 ) 
    {
      AliErrorClass(Form("BP %5d DE %5d MANU %5d nchannels=%d",busPatchId,detElemId,manuId,numberOfChannelsInManu));
      continue;      
    }
    
    AliMUONVCalibParam* occupancy = 
    static_cast<AliMUONVCalibParam*>(occupancyMap.FindObject(detElemId,manuId));
    if (occupancy) 
    {
      AliErrorClass(Form("DE %5d MANU %5d is already there ?!",detElemId,manuId));
      continue;
    }
        
    occupancy = new AliMUONCalibParamND(5,1,detElemId,manuId,0);

    occupancyMap.Add(occupancy);
    
    occupancy->SetValueAsDouble(0,0,sumn);
    occupancy->SetValueAsDouble(0,1,sumn); // with only 0 and 1s, sumw = sumw2 = sumn
    occupancy->SetValueAsDouble(0,2,sumn);
    occupancy->SetValueAsInt(0,3,numberOfChannelsInManu);
    occupancy->SetValueAsInt(0,4,numberOfEvents);
    ++n;
  }
  
  return n;
}

//_____________________________________________________________________________
Int_t 
AliMUONTrackerIO::ReadPedestals(const char* filename, AliMUONVStore& pedStore)
{
  /// Read pedestal file (produced by the MUONTRKda.exe program for instance)
  /// and append the read values into the given VStore
  /// To be used when the input is a file (for instance when reading data 
  /// from the OCDB).
  
  TString sFilename(gSystem->ExpandPathName(filename));
  
  std::ifstream in(sFilename.Data());
  if (!in.good()) 
  {
    return kCannotOpenFile;
  }
  
  ostringstream stream;
  char line[1024];
  while ( in.getline(line,1024) )
  	stream << line << "\n";
  
  in.close();

  return DecodePedestals(stream.str().c_str(),pedStore);
  
}

//_____________________________________________________________________________
Int_t 
AliMUONTrackerIO::DecodePedestals(const char* data, AliMUONVStore& pedStore)
{
  /// Read pedestal Data (produced by the MUONTRKda.exe program for instance)
  /// and append the read values into the given VStore
  /// To be used when the input is a TString (for instance when getting data 
  /// from AMORE DB).
  
  char line[1024];
  Int_t busPatchID, manuID, manuChannel;
  Float_t pedMean, pedSigma;
  Int_t n(0);
  istringstream in(data);
  
  while ( in.getline(line,1024) )
  {
    AliDebugClass(3,Form("line=%s",line));
    if ( line[0] == '/' && line[1] == '/' ) continue;
    std::istringstream sin(line);
    sin >> busPatchID >> manuID >> manuChannel >> pedMean >> pedSigma;
    Int_t detElemID = AliMpDDLStore::Instance()->GetDEfromBus(busPatchID);
    
    if ( !AliMpDEManager::IsValidDetElemId(detElemID) )
    {
      AliErrorClass(Form("Got an invalid DE = %d from busPatchId=%d manuId=%d",
                         detElemID,busPatchID,manuID));
      continue;
    }
    
    AliDebugClass(3,Form("BUSPATCH %3d DETELEMID %4d MANU %3d CH %3d MEAN %7.2f SIGMA %7.2f",
                    busPatchID,detElemID,manuID,manuChannel,pedMean,pedSigma));
		    
    AliMUONVCalibParam* ped = 
      static_cast<AliMUONVCalibParam*>(pedStore.FindObject(detElemID,manuID));
    if (!ped) 
    {
      ped = new AliMUONCalibParamNF(2,AliMpConstants::ManuNofChannels(),
                                    detElemID,manuID,
                                    AliMUONVCalibParam::InvalidFloatValue());  
      pedStore.Add(ped);
    }
    ped->SetValueAsFloat(manuChannel,0,pedMean);
    ped->SetValueAsFloat(manuChannel,1,pedSigma);
    ++n;
  }

  return n;
}

//_____________________________________________________________________________
Int_t 
AliMUONTrackerIO::ReadGains(const char* filename, AliMUONVStore& gainStore,
                            TString& comment)
{
  /// Read gain file (produced by the MUONTRKda.exe program for instance)
  /// and append the read values into the given VStore
  /// To be used when the input is a file (for instance when reading data 
  /// from the OCDB).
  
  comment = "";
  
  TString sFilename(gSystem->ExpandPathName(filename));
  
  std::ifstream in(sFilename.Data());
  if (!in.good()) 
  {
    return kCannotOpenFile;
  }
  
  ostringstream stream;
  char line[1024];
  while ( in.getline(line,1024) )
  	stream << line << "\n";
  
  in.close();
  
  return DecodeGains(stream.str().c_str(),gainStore,comment);

}

//_____________________________________________________________________________
Int_t 
AliMUONTrackerIO::DecodeGains(const char* data, AliMUONVStore& gainStore,
                              TString& comment)
{
  /// Read gain file (produced by the MUONTRKda.exe program for instance)
  /// and append the read values into the given VStore
  /// To be used when the input is a string (for instance when getting data 
  /// from AMORE DB).
  
  char line[1024];
  istringstream in(data);
  Int_t busPatchID, manuID, manuChannel;
  Float_t a0, a1;
  Int_t thres;
  UInt_t qual;
  const Int_t kSaturation(3000); // FIXME: how to get this number ?
  Int_t n(0);
  Int_t runNumber(-1);
  Int_t* runs(0x0);
  Int_t* dac(0x0);
  Int_t nDAC(0);
  Int_t nInit(0),f1nbp(0),f2nbp(0);
  
  while ( in.getline(line,1024) )
  {
    if ( strlen(line) < 10 ) continue;
    if ( line[0] == '/' && line[1] == '/' ) 
    {
      TString sline(line);
      if ( sline.Contains("DUMMY") )
      {
        AliDebugClass(1,"Got a dummy file here");
        delete [] runs;
        delete [] dac;
        return kDummyFile;
      }
      if ( sline.Contains("* Run") )
      {
        TObjArray* a = sline.Tokenize(":");
        if ( a->GetLast() >= 1 ) 
        {
          TString s = static_cast<TObjString*>(a->At(1))->String();
          runNumber = s.Atoi();
          AliDebugClass(1,Form("runNumber is %d",runNumber));
        }            
	delete a;
      }
      if ( sline.Contains("DAC values") )
      {
        nDAC = TString(sline(2,sline.Length()-2)).Atoi();
        AliDebugClass(1,Form("# of DAC values = %d",nDAC));
        if ( nDAC > 0 )
        {
          if ( nDAC < 100 ) 
          {
            delete[] runs;
            delete[] dac;
            runs = new Int_t[nDAC];
            dac = new Int_t[nDAC];
            // skip two lines
            in.getline(line,1024);
            sline = line;
            if (!sline.Contains("*  nInit ="))
            {
              AliErrorClass("Improper format : was expecting nInit= line...");              
            }
            else
            {
              sscanf(line,"//   *  nInit = %d  *  f1nbp = %d  *  f2nbp = %d",&nInit,&f1nbp,&f2nbp);
              AliDebugClass(1,Form("nInit = %d",nInit));
              AliDebugClass(1,Form("f1nbp = %d",f1nbp));
              AliDebugClass(1,Form("f2nbp = %d",f2nbp));
            }
            in.getline(line,1024);
            in.getline(line,1024);
            // then get run and dac values
            Int_t iDAC(0);
            for ( Int_t i = 0; i < nDAC; ++i ) 
            {
              in.getline(line,1024);
              Int_t a,b;
              sscanf(line,"// %d %d",&a,&b);
              runs[iDAC] = a;
              dac[iDAC] = b;
              AliDebugClass(1,Form("RUN %d is DAC %d",runs[iDAC],dac[iDAC]));
              ++iDAC;
            }
          }
          else
          {
            AliErrorClass(Form("Something went wrong, as I get too big nDAC = %d",nDAC));
            nDAC = 0;
            delete [] runs;
            delete [] dac;
            return kFormatError;
          }
        }
      }
      continue;
    }
    
    sscanf(line,"%d %d %d %f %f %d %x",&busPatchID,&manuID,&manuChannel,
           &a0,&a1,&thres,&qual); 
    AliDebugClass(3,Form("line=%s",line));
    Int_t detElemID = AliMpDDLStore::Instance()->GetDEfromBus(busPatchID);
    
    if ( !AliMpDEManager::IsValidDetElemId(detElemID) )
    {
      AliErrorClass(Form("Got an invalid DE = %d from busPatchId=%d manuId=%d",
                         detElemID,busPatchID,manuID));
      continue;
    }
    
    AliDebugClass(3,Form("BUSPATCH %3d DETELEMID %4d MANU %3d CH %3d A0 %7.2f "
                    "A1 %e THRES %5d QUAL %x",
                    busPatchID,detElemID,manuID,manuChannel,a0,a1,thres,qual));
    if ( qual == 0 ) continue;
    
    AliMUONVCalibParam* gain = 
      static_cast<AliMUONVCalibParam*>(gainStore.FindObject(detElemID,manuID));
    
   if (!gain) 
    {
      gain = new AliMUONCalibParamNF(5,AliMpConstants::ManuNofChannels(),detElemID,manuID,0);
      gainStore.Add(gain);
    }
    gain->SetValueAsFloat(manuChannel,0,a0);
    gain->SetValueAsFloat(manuChannel,1,a1);
    gain->SetValueAsInt(manuChannel,2,thres);
    gain->SetValueAsInt(manuChannel,3,qual);
    gain->SetValueAsInt(manuChannel,4,kSaturation);
    ++n;
  }

  comment = "";
  
  if ( runNumber > 0 )
  {
    comment = Form("RUN %d",runNumber);
  }
  
  for ( Int_t i = 0; i < nDAC; ++i )
  {
    comment += Form(";(RUN %d = DAC %d)",runs[i],dac[i]);
  }
  comment += Form(";(nDAC = %d)",nDAC);
  comment += Form(";(nInit = %d)",nInit);
  comment += Form(";(f1nbp = %d)",f1nbp);
  comment += Form(";(f2nbp = %d)",f2nbp);
  
  delete[] runs;
  delete[] dac;
  
  return n;
}

//_____________________________________________________________________________
Int_t
AliMUONTrackerIO::ReadCapacitances(const char* filename, AliMUONVStore& capaStore)
{
  /// Read capacitance file
  /// and append the read values into the given VStore
  
  TString sFilename(gSystem->ExpandPathName(filename));
  
  std::ifstream in(sFilename.Data());
  if (!in.good()) 
  {
    return kCannotOpenFile;
  }
  
  ostringstream stream;
  char line[1024];
  while ( in.getline(line,1024) )
  	stream << line << "\n";
  
  in.close();
  
  return DecodeCapacitances(stream.str().c_str(),capaStore);
}

//_____________________________________________________________________________
Int_t
AliMUONTrackerIO::DecodeCapacitances(const char* data, AliMUONVStore& capaStore)
{
  /// Read capacitances and append the read values into the given VStore
  /// To be used when the input is a string (for instance when getting data 
  /// from AMORE DB).
  
  Int_t ngenerated(0);
  
  char line[1024];
  Int_t serialNumber(-1);
  AliMUONVCalibParam* param(0x0);
  istringstream in(data);

  while ( in.getline(line,1024,'\n') )
  {
    if ( isdigit(line[0]) ) 
    {
      serialNumber = atoi(line);
      param = static_cast<AliMUONVCalibParam*>(capaStore.FindObject(serialNumber));
      if (param)
      {
        AliErrorClass(Form("serialNumber %d appears several times !",serialNumber));
        continue;
      }
      param = new AliMUONCalibParamNF(2,AliMpConstants::ManuNofChannels(),serialNumber,0,1.0);
      Bool_t ok = capaStore.Add(param);
      if (!ok)
      {
        AliErrorClass(Form("Could not set serialNumber=%d",serialNumber));
        continue;
      }      
      continue;
    }
    
    if (!param) continue;
    
    Int_t channel;
    Float_t capaValue;
    Float_t injectionGain;
    sscanf(line,"%d %f %f",&channel,&capaValue,&injectionGain);
    AliDebugClass(1,Form("SerialNumber %10d Channel %3d Capa %f injectionGain %f",
                    serialNumber,channel,capaValue,injectionGain));
    param->SetValueAsFloat(channel,0,capaValue);
    param->SetValueAsFloat(channel,1,injectionGain);
    ++ngenerated;
  }
  
  return ngenerated;
}

//_____________________________________________________________________________
Int_t 
AliMUONTrackerIO::ReadConfig(const char* filename, AliMUONVStore& confStore)
{
  /// Read config file (produced by the MUONTRKda.exe program for instance)
  /// and append the read values into the given VStore
  /// To be used when the input is a file (for instance when reading data 
  /// from the OCDB).
  
  TString sFilename(gSystem->ExpandPathName(filename));
  
  std::ifstream in(sFilename.Data());
  if (!in.good()) 
  {
    return kCannotOpenFile;
  }
  
  ostringstream stream;
  char line[1024];
  while ( in.getline(line,1024) )
  	stream << line << "\n";
  
  in.close();
  
  return DecodeConfig(stream.str().c_str(),confStore);
}

//_____________________________________________________________________________
Int_t 
AliMUONTrackerIO::DecodeConfig(const char* data, AliMUONVStore& confStore)
{
  /// Read config data (produced by the MUONTRKda.exe program for instance)
  /// and append the read values into the given VStore
  /// To be used when the input is a TString (for instance when getting data 
  /// from AMORE DB).

  char line[1024];
  Int_t busPatchID, manuID;
  Int_t n(0);
  istringstream in(data);
  
  while ( in.getline(line,1024) )
  {
    AliDebugClass(3,Form("line=%s",line));
    if ( line[0] == '#' ) 
    {
      continue;
    }
    std::istringstream sin(line);
    sin >> busPatchID >> manuID;

    Int_t detElemID = AliMpDDLStore::Instance()->GetDEfromBus(busPatchID);

    if ( !AliMpDEManager::IsValidDetElemId(detElemID) )
    {
      AliErrorClass(Form("Got an invalid DE = %d from busPatchId=%d manuId=%d",
                         detElemID,busPatchID,manuID));
      continue;
    }
    
    AliMUONVCalibParam* conf = 
    static_cast<AliMUONVCalibParam*>(confStore.FindObject(detElemID,manuID));
    if (!conf) 
    {
      conf = new AliMUONCalibParamNF(1,1,detElemID,manuID,1);
      confStore.Add(conf);
    }
    ++n;
  }
  
  return n;
}

//_____________________________________________________________________________
Int_t 
AliMUONTrackerIO::WriteConfig(ofstream& out, const AliMUONVStore& confStore)
{
  /// Write the conf store as an ASCII file
  /// Note that we are converting (back) the detElemId into a busPatchId
  /// Return the number of lines written
  
  if ( !AliMpDDLStore::Instance() ) 
  {
    cout << "ERROR: mapping not loaded. Cannot work" << endl;
    return 0;
  }
  
  TIter next(confStore.CreateIterator());
  AliMUONVCalibParam* param;
  Int_t n(0);
  
  while ( (param=static_cast<AliMUONVCalibParam*>(next())) )
  {
    Int_t detElemId = param->ID0();
    Int_t manuId = param->ID1();
    
    Int_t busPatchId = AliMpDDLStore::Instance()->GetBusPatchId(detElemId,manuId);
    ++n;
    
    out << busPatchId << " " << manuId << endl;
  }
  return n;
}

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