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 "AliMUONDataInterface.h"
#include "AliMUONGeometryTransformer.h"
#include "AliMUONVDigit.h"
#include "AliMUONVCluster.h"
#include "AliMUONLocalTrigger.h"
#include "AliMUONRegionalTrigger.h"
#include "AliMUONGlobalTrigger.h"
#include "AliMUONTriggerCircuit.h"
#include "AliMUONVClusterStore.h"
#include "AliMUONVDigitStore.h"
#include "AliMUONVTriggerStore.h"
#include "AliMpCDB.h"

#include "AliMpEncodePair.h"
#include "AliMpDEManager.h"
#include "AliMpConstants.h"
#include "AliMpCDB.h"

#include "AliLoader.h"
#include "AliRunLoader.h"
#include "AliHeader.h"
#include "AliCDBManager.h"
#include "AliLog.h"

#include <Riostream.h>
#include <TFile.h>
#include <TList.h>
#include <TNtuple.h>
#include <TSystem.h>
#include <TIterator.h>
#include <cstdlib>
#include <cassert>

//-----------------------------------------------------------------------------
/// \class AliMUONDataInterface
///
/// An easy to use interface to the MUON data data stored in
/// TreeS, TreeD and TreeR.
///
/// For MC related information (i.e. TreeH, TreeK, TreeTR), see
/// AliMUONMCDataInterface.
///
///
/// This interface in not necessarily the fastest way to fetch the data but
/// it is the easiest.
///
/// \author Laurent Aphecetche, Subatech & Artur Szostak <artursz@iafrica.com> (University of Cape Town)
//-----------------------------------------------------------------------------

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


Int_t AliMUONDataInterface::fgInstanceCounter(0);

//______________________________________________________________________________
AliMUONDataInterface::AliMUONDataInterface(const char* filename)
: TObject(), 
fLoader(0x0),
fDigitStore(0x0),
fTriggerStore(0x0),
fClusterStore(0x0),
fCurrentEvent(-1),
fTreeLetter(""),
fIsValid(kFALSE),
fCurrentIteratorType(kNoIterator),
fCurrentIndex(-1),
fDataX(-1),
fDataY(-1),
fIterator(0x0)
{
  /// ctor
  /// @param filename should be the full path to a valid galice.root file
  
  ++fgInstanceCounter;
  
  if ( AliCDBManager::Instance() != NULL &&
       AliCDBManager::Instance()->GetDefaultStorage() == NULL ) {
      AliFatal("CDB default storage not defined.");
  }
  
  Open(filename);

  // Load mapping
  if ( ! AliMpCDB::LoadDDLStore() ) {
    AliFatal("Could not access mapping from OCDB !");
  }
}

//______________________________________________________________________________
AliMUONDataInterface::~AliMUONDataInterface()
{
  /// dtor
  ResetStores();
  --fgInstanceCounter;  
}

//______________________________________________________________________________
AliMUONVDigitStore*
AliMUONDataInterface::DigitStore(Int_t event)
{
  /// Return digitStore for a given event.
  /// Return 0x0 if event not found.
  /// Returned pointer should not be deleted
  ///
  /// \note If a previous store has been retrieved by one of the methods of
  /// this class, but for a different event number, then those stores will
  /// be deleted and no longer valid.
  /// If you require access to the data for the earlier retrieved store,
  /// but for different events, then you should deep copy / clone the object.
  
  if (not IsValid()) return 0x0;
  
  if (event == fCurrentEvent)
  {
    if (fDigitStore != 0x0)
      return fDigitStore;
  }
  else
  {
    ResetStores();
    if ( not LoadEvent(event) ) return 0x0;
  }
  
  fLoader->LoadDigits();
  
  TTree* treeD = fLoader->TreeD();
  if (treeD == 0x0)
  {
    AliError("Could not get treeD");
    return 0x0;
  }
  
  fDigitStore = AliMUONVDigitStore::Create(*treeD);
  if ( fDigitStore != 0x0 ) 
  {
    fDigitStore->Clear();
    fDigitStore->Connect(*treeD);
    treeD->GetEvent(0);
  }
  
  fLoader->UnloadDigits();
  
  return fDigitStore;
}

//______________________________________________________________________________
AliMUONVClusterStore*
AliMUONDataInterface::ClusterStore(Int_t event)
{
  /// Return clusterStore for a given event.
  /// Return 0x0 if event not found.
  /// Returned pointer should not be deleted
  ///
  /// \note If a previous store has been retrieved by one of the methods of
  /// this class, but for a different event number, then those stores will
  /// be deleted and no longer valid.
  /// If you require access to the data for the earlier retrieved store,
  /// but for different events, then you should deep copy / clone the object.
  
  if (not IsValid()) return 0x0;
  
  if (event == fCurrentEvent)
  {
    if (fClusterStore != 0x0)
      return fClusterStore;
  }
  else
  {
    ResetStores();
    if ( not LoadEvent(event) ) return 0x0;
  }
  
  fLoader->LoadRecPoints();
  
  TTree* treeR = fLoader->TreeR();
  if (treeR == 0x0)
  {
    AliError("Could not get treeR");
    return 0x0;
  }
  
  fClusterStore = AliMUONVClusterStore::Create(*treeR);
  if ( fClusterStore != 0x0 ) 
  {
    fClusterStore->Clear();
    fClusterStore->Connect(*treeR);
    treeR->GetEvent(0);
  }
  
  fLoader->UnloadRecPoints();
  
  return fClusterStore;
}

//_____________________________________________________________________________
AliMUONVTriggerStore*
AliMUONDataInterface::TriggerStore(Int_t event, const char* treeLetter)
{
  /// Return the triggerStore for a given event.
  /// Return 0x0 if event not found.
  /// Returned pointer should not be deleted
  /// treeLetter can be R or D to tell from which tree to read the information
  ///
  /// \note If a previous store has been retrieved by one of the methods of
  /// this class, but for a different event number, then those stores will
  /// be deleted and no longer valid.
  /// If you require access to the data for the earlier retrieved store,
  /// but for different events, then you should deep copy / clone the object.
  
  if (not IsValid()) return 0x0;
  
  if (event == fCurrentEvent)
  {
    if (fTreeLetter == treeLetter)
    {
      if (fTriggerStore != 0x0)
        return fTriggerStore;
    }
    else
    {
      // Reset only the fTriggerStore since the others might still be valid
      // for the same event.
      if (fTriggerStore != 0x0)
      {
        delete fTriggerStore;
        fTriggerStore = 0x0;
      }
    }
  }
  else
  {
    // Event has changed so reset all the stores.
    ResetStores();
    if ( not LoadEvent(event) ) return 0x0;
  }
  
  TTree* tree(0x0);
  
  TString stree(treeLetter);
  stree.ToUpper();
  
  if ( stree == "D" )
  {
    fLoader->LoadDigits();    
    tree = fLoader->TreeD();
  }
  else if ( stree == "R" )
  {
    fLoader->LoadRecPoints();
    tree = fLoader->TreeR();
  }
  
  if ( tree == 0x0 ) 
  {
    AliError(Form("Could not get tree%s",treeLetter));
    return 0x0;
  }
  
  fTriggerStore = AliMUONVTriggerStore::Create(*tree);
  if ( fTriggerStore != 0x0 ) 
  {
    fTriggerStore->Clear();
    fTriggerStore->Connect(*tree);
    tree->GetEvent(0);
  }
  
  if ( stree == "D" )
  {
    fLoader->UnloadDigits();    
  }
  else if ( stree == "R" )
  {
    fLoader->UnloadRecPoints();
  }
  fTreeLetter = stree;
  
  return fTriggerStore;
}

//______________________________________________________________________________
void
AliMUONDataInterface::DumpDigits(Int_t event, Bool_t sorted)
{
  /// Dump the digits for a given event, sorted if so required
  DigitStore(event);
  if ( fDigitStore != 0x0 ) 
  {
    if ( sorted ) 
    {
      DumpSorted(*fDigitStore);
    }
    else
    {
      fDigitStore->Print();
    }
  }
}

//______________________________________________________________________________
void
AliMUONDataInterface::DumpRecPoints(Int_t event, Bool_t sorted)
{
  /// Dump the recpoints for a given event, sorted if so required
  ClusterStore(event);
  if ( fClusterStore != 0x0 ) 
  {
    if ( sorted ) 
    {
      DumpSorted(*fClusterStore);
    }
    else
    {
      fClusterStore->Print();
    }
  }
}

//_____________________________________________________________________________
void
AliMUONDataInterface::DumpSorted(const AliMUONVStore& store) const
{
  /// Dump the given store, in sorted order
  
  TIter next(store.CreateIterator());
  TObject* object;
  TList list;
  list.SetOwner(kFALSE);
  
  while ( ( object = next() ) )
  {
    list.Add(object);
  }
  
  list.Sort();
  
  list.Print();
}

//_____________________________________________________________________________
void
AliMUONDataInterface::DumpTrigger(Int_t event, const char* treeLetter)
{
  /// Dump trigger for a given event from a given tree (if event>=0)
  /// or loop over all events and build a trigger ntuple if event<0
  /// treeLetter can be R or D to tell from which tree to read the information
  
  if ( event < 0 ) 
  {
    NtupleTrigger(treeLetter);
  }
  else
  {
    TriggerStore(event,treeLetter);
  
    if ( fTriggerStore != 0x0 ) 
    {
      fTriggerStore->Print();
    }
  }
}

//_____________________________________________________________________________
void
AliMUONDataInterface::NtupleTrigger(const char* treeLetter)
{
  //// Loop over events to build trigger ntuples
  ///
  
  TString sTreeLetter(treeLetter);
  sTreeLetter.ToUpper();
  
  if ( sTreeLetter != "R" && sTreeLetter != "D" ) 
  {
    AliError(Form("Cannot handle tree%s. Use D or R",treeLetter));
    return;
  }
  
  // book ntuples
  TNtuple tupleGlo("TgtupleGlo","Global Trigger Ntuple",
                   "ev:slpt:shpt:uplpt:uphpt:lplpt:lplpt");
  TNtuple tupleLoc("TgtupleLoc","Local Trigger Ntuple",
                   "ev:LoCircuit:LoStripX:LoDev:StripY:LoLpt:LoHpt:y11:y21:x11");
  
  // initialize counters
  Int_t sLowpt=0;
  Int_t sHighpt=0;
  Int_t uSLowpt=0;
  Int_t uSHighpt=0;
  Int_t lSLowpt=0;
  Int_t lSHighpt=0;
  
  AliMUONGeometryTransformer transformer;
  transformer.LoadGeometryData(Form("%s/geometry.root",
                                    gSystem->DirName(fLoader->GetRunLoader()->GetFileName())));
    AliMUONTriggerCircuit triggerCircuit(&transformer);

  // select output file name from selected Tree
  Char_t fileNameOut[30];
  if (sTreeLetter == "D") 
  {
    AliInfo(Form("reading from Digits\n"));
    sprintf(fileNameOut,"TriggerCheckFromDigits.root");
  } 
  else if (sTreeLetter == "R") 
  {
    AliInfo(Form("reading from RecPoints\n"));
    sprintf(fileNameOut,"TriggerCheckFromRP.root");
  }
  
  // loop on events
  Int_t nevents = NumberOfEvents();

  for (Int_t ievent=0; ievent<nevents; ++ievent) 
  {
    if (ievent%100==0) AliInfo(Form("Processing event %d\n",ievent));
    
    AliMUONVTriggerStore* triggerStore = TriggerStore(ievent,treeLetter);
    
    if (!triggerStore)
    {
      AliError(Form("Could not read %s from tree%s","Trigger",treeLetter));
      return;
    }
    
    // get global trigger info
    AliMUONGlobalTrigger* gloTrg = triggerStore->Global();	
    sLowpt+=gloTrg->SingleLpt();
    sHighpt+=gloTrg->SingleHpt();
    uSLowpt+=gloTrg->PairUnlikeLpt(); 
    uSHighpt+=gloTrg->PairUnlikeHpt();
    lSLowpt+=gloTrg->PairLikeLpt(); 
    lSHighpt+=gloTrg->PairLikeHpt();
    
    // loop on local triggers	
    TIter next(triggerStore->CreateIterator());
    AliMUONLocalTrigger* locTrg(0x0);
    while ( ( locTrg = static_cast<AliMUONLocalTrigger*>(next()) ) )
    {
      Bool_t xTrig=locTrg->IsTrigX();
      Bool_t yTrig=locTrg->IsTrigY();
      
      if (xTrig && yTrig) 
      { // fill ntuple if trigger in X and Y		        
        tupleLoc.Fill(ievent,locTrg->LoCircuit(),
                       locTrg->LoStripX(),
                       locTrg->LoDev(),
                       locTrg->LoStripY(),
                       locTrg->LoLpt(),
                       locTrg->LoHpt(),
                       triggerCircuit.GetY11Pos(locTrg->LoCircuit(),locTrg->LoStripX()),
                       triggerCircuit.GetY21Pos(locTrg->LoCircuit(),locTrg->LoStripX()+locTrg->LoDev()+1),
                       triggerCircuit.GetX11Pos(locTrg->LoCircuit(),locTrg->LoStripY()));
      }
      tupleGlo.Fill(ievent,gloTrg->SingleLpt(),gloTrg->SingleHpt(),
                     gloTrg->PairUnlikeLpt(),gloTrg->PairUnlikeHpt(),
                     gloTrg->PairLikeLpt(),gloTrg->PairLikeHpt());
    } // end of loop on local triggers
  } // end of loop on events
  
  // print info and store ntuples
  printf("\n");
  printf("=============================================\n");
  printf("================  SUMMARY  ==================\n");
  printf("\n");
  printf("Total number of events processed %d \n",nevents);
  printf("\n");
  printf(" Global Trigger output       Low pt  High pt\n");
  printf(" number of Single           :\t");
  printf("%i\t%i\t",sLowpt,sHighpt);
  printf("\n");
  printf(" number of UnlikeSign pair  :\t"); 
  printf("%i\t%i\t",uSLowpt,uSHighpt);
  printf("\n");
  printf(" number of LikeSign pair    :\t");  
  printf("%i\t%i\t",lSLowpt,lSHighpt);
  printf("\n");
  printf("=============================================\n");
  fflush(stdout);    
  
  TFile myFile(fileNameOut, "RECREATE");
  tupleGlo.Write();
  tupleLoc.Write();
  myFile.Close();
}

//_____________________________________________________________________________
Bool_t
AliMUONDataInterface::LoadEvent(Int_t event)
{
  /// Load event if different from the current one.
  /// Returns kFALSE on error and kTRUE if the event was loaded.
  
  assert( IsValid() );
  
  AliDebug(1,Form("Loading event %d using runLoader %p",event,fLoader->GetRunLoader()));
  if (fLoader->GetRunLoader()->GetEvent(event) == 0)
  {
    fCurrentEvent = event;
    return kTRUE;
  }
  else
    return kFALSE;
}

//______________________________________________________________________________
Int_t
AliMUONDataInterface::NumberOfEvents() const
{
  /// Number of events in the current galice.root file we're attached to 
  if (not IsValid()) return -1;
  return fLoader->GetRunLoader()->GetNumberOfEvents();
}

//_____________________________________________________________________________
void
AliMUONDataInterface::Open(const char* filename)
{
  /// Connect to a given galice.root file
  
  ResetStores();
  
  fCurrentEvent=-1;
  
  if ( fLoader != 0x0 ) 
  {
    delete fLoader->GetRunLoader();
  }
  
  fLoader = 0x0;
  
  fIsValid = kTRUE;
  
  TString foldername(Form("%s-%d",ClassName(),fgInstanceCounter));
  
  while (AliRunLoader::GetRunLoader(foldername) != 0x0) 
  {
    delete AliRunLoader::GetRunLoader(foldername);
  }
  
  AliRunLoader* runLoader = AliRunLoader::Open(filename,foldername);
  if (runLoader == 0x0) 
  {
    AliError(Form("Cannot open file %s",filename));    
    fIsValid = kFALSE;
    return;
  }

  runLoader->LoadHeader();
  if ( ! runLoader->GetHeader() ) {
    AliError("Cannot load header.");    
    fIsValid = kFALSE;
  }
  else {
    Int_t runNumber = runLoader->GetHeader()->GetRun();
    AliCDBManager::Instance()->SetRun(runNumber>=0 ? runNumber : 1);
  }  
  runLoader->UnloadHeader(); 

  fLoader = runLoader->GetDetectorLoader("MUON");
  if (fLoader == 0x0) 
  {
    AliError("Cannot get AliMUONLoader");
    fIsValid = kFALSE;
  }
  
  if (not IsValid())
  {
    AliError(Form("Could not access %s filename. Object is unuseable",filename));
  }
}

//_____________________________________________________________________________
Bool_t AliMUONDataInterface::GetEvent(Int_t event)
{
/// Loads all reconstructed data for the given event.

  if (DigitStore(event) == 0x0) return kFALSE;
  if (ClusterStore(event) == 0x0) return kFALSE;
  if (TriggerStore(event) == 0x0) return kFALSE;
  return kTRUE;
}

//_____________________________________________________________________________
Int_t AliMUONDataInterface::NumberOfDigits(Int_t detElemId)
{
/// Returns the number of digits to be found on a given detector element.
/// @param detElemId  The detector element ID number to search on.

  TIterator* iter = GetIterator(kDigitIteratorByDetectorElement, detElemId);
  return CountObjects(iter);
}

//_____________________________________________________________________________
AliMUONVDigit* AliMUONDataInterface::Digit(Int_t detElemId, Int_t index)
{
/// Returns the a pointer to the index'th digit on the specified detector element.
/// @param detElemId  The detector element ID number to search on.
/// @param index  The index number of the digit to fetch in the range [0 .. N-1],
///   where N = NumberOfDigits(detElemId)

  TIterator* iter = GetIterator(kDigitIteratorByDetectorElement, detElemId);
  return static_cast<AliMUONVDigit*>( FetchObject(iter, index) );
}

//_____________________________________________________________________________
Int_t AliMUONDataInterface::NumberOfDigits(Int_t chamber, Int_t cathode)
{
/// Returns the number of digits to be found on a specific chamber and cathode.
/// @param chamber  The chamber number in the range [0 .. 13].
/// @param cathode  The cathode in the range [0 .. 1], where 0 is the bending and
///   1 is the non-bending plane.

  TIterator* iter = GetIterator(kDigitIteratorByChamberAndCathode, chamber, cathode);
  return CountObjects(iter);
}

//_____________________________________________________________________________
AliMUONVDigit* AliMUONDataInterface::Digit(Int_t chamber, Int_t cathode, Int_t index)
{
/// Returns the a pointer to the index'th digit on the specified chamber and cathode.
/// @param chamber  The chamber number in the range [0 .. 13].
/// @param cathode  The cathode in the range [0 .. 1], where 0 is the bending and
///   1 is the non-bending plane.
/// @param index  The index number of the digit to fetch in the range [0 .. N-1],
///   where N = NumberOfDigits(chamber, cathode)

  TIterator* iter = GetIterator(kDigitIteratorByChamberAndCathode, chamber, cathode);
  return static_cast<AliMUONVDigit*>( FetchObject(iter, index) );
}

//_____________________________________________________________________________
Int_t AliMUONDataInterface::NumberOfRawClusters(Int_t chamber)
{
/// Returns the number of reconstructed raw clusters on the specified chamber.
/// @param chamber  The chamber number in the range [0 .. 13].

  TIterator* iter = GetIterator(kRawClusterIterator, chamber);
  return CountObjects(iter);
}

//_____________________________________________________________________________
AliMUONVCluster* AliMUONDataInterface::RawCluster(Int_t chamber, Int_t index)
{
/// Returns a pointer to the index'th raw cluster on the specified chamber.
/// @param chamber  The chamber number in the range [0 .. 13].
/// @param index  The index number of the raw cluster to fetch in the range [0 .. N-1],
///   where N = NumberOfRawClusters(chamber)

  TIterator* iter = GetIterator(kRawClusterIterator, chamber);
  return static_cast<AliMUONVCluster*>( FetchObject(iter, index) );
}

//_____________________________________________________________________________
Int_t AliMUONDataInterface::NumberOfLocalTriggers()
{
/// Returns the number of reconstructed local trigger objects.

  TIterator* iter = GetIterator(kLocalTriggerIterator);
  return CountObjects(iter);
}

//_____________________________________________________________________________
AliMUONLocalTrigger* AliMUONDataInterface::LocalTrigger(Int_t index)
{
/// Returns a pointer to the index'th local trigger object.
/// @param index  The index number of the local trigger object to fetch in the range [0 .. N-1],
///   where N = NumberOfLocalTriggers()

  TIterator* iter = GetIterator(kLocalTriggerIterator);
  return static_cast<AliMUONLocalTrigger*>( FetchObject(iter, index) );
}

//_____________________________________________________________________________
Int_t AliMUONDataInterface::NumberOfRegionalTriggers()
{
/// Returns the number of regional trigger objects reconstructed.

  TIterator* iter = GetIterator(kRegionalTriggerIterator);
  return CountObjects(iter);
}

//_____________________________________________________________________________
AliMUONRegionalTrigger* AliMUONDataInterface::RegionalTrigger(Int_t index)
{
/// Returns a pointer to the index'th regional trigger object.
/// @param index  The index number of the regional trigger object to fetch in the range [0 .. N-1],
///   where N = NumberOfRegionalTriggers()

  TIterator* iter = GetIterator(kRegionalTriggerIterator);
  return static_cast<AliMUONRegionalTrigger*>( FetchObject(iter, index) );
}

//_____________________________________________________________________________
AliMUONGlobalTrigger* AliMUONDataInterface::GlobalTrigger()
{
/// Returns a pointer to the reconstructed global trigger object for the event.

  AliMUONVTriggerStore* store = TriggerStore(fCurrentEvent);
  if (store == 0x0) return 0x0;
  return store->Global();
}

//_____________________________________________________________________________
void AliMUONDataInterface::ResetStores()
{
/// Deletes all the store objects that have been created and resets the pointers to 0x0.
/// The temporary iterator object is automatically reset. See ResetIterator for more details.

  ResetIterator();
  if (fDigitStore != 0x0)
  {
    delete fDigitStore;
    fDigitStore = 0x0;
  }
  if (fTriggerStore != 0x0)
  {
    delete fTriggerStore;
    fTriggerStore = 0x0;
  }
  if (fClusterStore != 0x0)
  {
    delete fClusterStore;
    fClusterStore = 0x0;
  }
}

//_____________________________________________________________________________
TIterator* AliMUONDataInterface::GetIterator(IteratorType type, Int_t x, Int_t y)
{
/// Creates an appropriate iterator object and returns it.
/// If the iterator has already been created then that one is returned otherwise
/// a new object is created.
/// Depending on the value of 'type' the semantics of parameters x and y can change.
/// @param type  The type of iterator to create.
/// @param x  This is the detector element ID if type == kDigitIteratorByDetectorElement
///           If type equals kDigitIteratorByChamberAndCathode or kRawClusterIterator
///           then this is the chamber number. In all other cases this parameter is
///           ignored.
/// @param y  If type == kDigitIteratorByChamberAndCathode then this parameter is the
///           cathode number. In all other cases this parameter is
///           ignored.

  if (type == fCurrentIteratorType and fDataX == x and fDataY == y)
  	return fIterator;
  
  if (fCurrentEvent == -1)
  {
    AliError("No event was selected. Try first using GetEvent().");
    return 0x0;
  }
  
  ResetIterator();
  
  switch (type)
  {
  case kDigitIteratorByDetectorElement:
    {
      Int_t detElem = x;
      AliMUONVDigitStore* store = DigitStore(fCurrentEvent);
      if (store == 0x0) return 0x0;
      fIterator = store->CreateIterator(detElem, detElem, 2);
      if (fIterator == 0x0) return 0x0;
      fCurrentIteratorType = kDigitIteratorByDetectorElement;
      fDataX = detElem;
      return fIterator;
    }
    
  case kDigitIteratorByChamberAndCathode:
    {
      Int_t chamber = x;
      Int_t cathode = y;
      if (chamber < 0 or AliMpConstants::NofChambers() <= chamber)
      {
        AliError(Form(
          "Must have give a chamber value in the range [0..%d], but got a value of: %d",
          AliMpConstants::NofChambers() - 1,
          chamber
        ));
        return 0x0;
      }
      if (cathode < 0 or 1 < cathode)
      {
        AliError(Form("Must have give a cathode value in the range [0..1], but got a value of: %d", cathode));
        return 0x0;
      }
      
      AliMUONVDigitStore* store = DigitStore(fCurrentEvent);
      if (store == 0x0) return 0x0;
      MpPair_t pair = AliMpDEManager::GetDetElemIdRange(chamber);
      fIterator = store->CreateIterator(AliMp::PairFirst(pair), AliMp::PairSecond(pair), cathode);
      if (fIterator == 0x0) return 0x0;
      fCurrentIteratorType = kDigitIteratorByChamberAndCathode;
      fDataX = chamber;
      fDataY = cathode;
      return fIterator;
    }
    
  case kRawClusterIterator:
    {
      Int_t chamber = x;
      AliMUONVClusterStore* store = ClusterStore(fCurrentEvent);
      if (store == 0x0) return 0x0;
      fIterator = store->CreateChamberIterator(chamber, chamber);
      if (fIterator == 0x0) return 0x0;
      fCurrentIteratorType = kRawClusterIterator;
      fDataX = chamber;
      return fIterator;
    }
    
  case kLocalTriggerIterator:
    {
      AliMUONVTriggerStore* store = TriggerStore(fCurrentEvent);
      if (store == 0x0) return 0x0;
      fIterator = store->CreateLocalIterator();
      if (fIterator == 0x0) return 0x0;
      fCurrentIteratorType = kLocalTriggerIterator;
      return fIterator;
    }
    
  case kRegionalTriggerIterator:
    {
      AliMUONVTriggerStore* store = TriggerStore(fCurrentEvent);
      if (store == 0x0) return 0x0;
      fIterator = store->CreateRegionalIterator();
      if (fIterator == 0x0) return 0x0;
      fCurrentIteratorType = kRegionalTriggerIterator;
      return fIterator;
    }
    
  default:
    return 0x0;
  }
}

//_____________________________________________________________________________
void AliMUONDataInterface::ResetIterator()
{
/// The temporary iterator object is deleted if it exists and the pointer reset to 0x0.
/// The iterator type and temporary data indicating the state of the iterator are
/// also reset.

  if (fIterator != 0x0) delete fIterator;
  fCurrentIteratorType = kNoIterator;
  fCurrentIndex = fDataX = fDataY = -1;
  fIterator = 0x0;
}

//_____________________________________________________________________________
Int_t AliMUONDataInterface::CountObjects(TIterator* iter)
{
/// Counts the number of objects in the iterator and resets it.
/// @return The number of objects in 'iter'.

  if (iter == 0x0) return -1;
  Int_t count = 0;
  iter->Reset();
  while ( iter->Next() != 0x0 ) count++;
  iter->Reset();
  fCurrentIndex = -1;
  return count;
}

//_____________________________________________________________________________
TObject* AliMUONDataInterface::FetchObject(TIterator* iter, Int_t index)
{
/// Fetches the index'th object from the iterator counting the first object
/// returned by iterator after it is reset as index == 0. The next object
/// has index == 1 and so on where the last object returned by the iterator
/// has index == N-1 where N = CountObjects(iter)
/// This method will only reset the iterator if index is smaller than
/// fCurrentIndex, which is used to track the iteration progress and is
/// updated when a new object if returned by this method.
/// @param iter  The iterator to fetch an object from.
/// @param index The index number of the object to fetch in the range [0 .. N-1]
///        where N = CountObjects(iter)

  if (index < 0)
  {
    AliError(Form("Index is out of bounds. Got a value of %d.", index));
    return 0x0;
  }

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