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$ */

//-----------------------------------------------------------------------------
/// \class AliMUONReconstructor
///
/// Implementation of AliReconstructor for MUON subsystem.
///
/// The clustering mode and the associated parameters can be changed through the
/// AliMUONRecoParam object set in the reconstruction macro or read from the CDB
/// (see methods in AliMUONRecoParam.h file for details)
///
/// Valid modes are :
///
/// SIMPLEFIT : use the AliMUONClusterFinderSimpleFit clusterizer
///
/// SIMPLEFITV3 : SIMPLEFIT with preclustering=PRECLUSTERV3
///
/// MLEM : use AliMUONClusterFinderMLEM and AliMUONPreClusterFinder for preclustering (default)
/// MLEMV2 : MLEM with preclustering=PRECLUSTERV2
/// MLEMV3 : MLEM with preclustering=PRECLUSTERV3
///
/// PRECLUSTER : use only AliMUONPreClusterFinder. Only for debug as
/// the produced clusters do not have a position, hence the tracking will not
/// work
/// PRECLUSTERV2 : another version of the preclustering
/// PRECLUSTERV3 : yet another version of the preclustering
///
/// COG : use AliMUONClusterFinderCOG clusterizer. Not really a production
/// option either, as center-of-gravity is generally not a good estimate
/// of the cluster position...
///
/// PEAKCOG : COG cluster finder around local maxima
/// PEAKFIT : fit around local maxima with up to 3 peaks, COG otherwise
///
/// NOCLUSTERING : bypass completely the clustering stage
///
/// ------
///
/// The behavior of the MUON reconstruction can also be changed, besides
/// the usual methods found in AliReconstruction (e.g. to disable tracking)
/// by using AliReconstruction::SetOption("MUON",options)
/// where options should be a space separated string.
///
/// Valid options are :
///
/// SAVEDIGITS : if you want to save in the TreeD the *calibrated* digits
///     that are used for the clustering
///
/// DIGITSTOREV1 : use the V1 implementation of the digitstore 
/// DIGITSTOREV2R : use the V2R implementation of the digitstore 
///
/// NOLOCALRECONSTRUCTION : for debug, to disable local reconstruction (and hence
/// "recover" old behavior)
///
/// TRIGGERDISABLE : disable the treatment of MUON trigger
///
/// ENABLEERRORLOGGING : enable error logging (this activates also warnings in RawStreamTracker)
///
/// \author Laurent Aphecetche, Subatech
//-----------------------------------------------------------------------------

#include "AliMUONReconstructor.h"

#include "AliMUONCalibrationData.h"
#include "AliMUONClusterFinderCOG.h"
#include "AliMUONClusterFinderMLEM.h"
#include "AliMUONClusterFinderSimpleFit.h"
#include "AliMUONClusterFinderPeakCOG.h"
#include "AliMUONClusterFinderPeakFit.h"
#include "AliMUONClusterStoreV1.h"
#include "AliMUONClusterStoreV2.h"
#include "AliMUONConstants.h"
#include "AliMUONDigitCalibrator.h"
#include "AliMUONDigitMaker.h"
#include "AliMUONDigitStoreV1.h"
#include "AliMUONDigitStoreV2R.h"
#include "AliMUONGeometryTransformer.h"
#include "AliMUONPadStatusMaker.h"
#include "AliMUONPreClusterFinder.h"
#include "AliMUONPreClusterFinderV2.h"
#include "AliMUONPreClusterFinderV3.h"
#include "AliMUONSimpleClusterServer.h"
#include "AliMUONTracker.h"
#include "AliMUONTriggerCircuit.h"
#include "AliMUONTriggerStoreV1.h"
#include "AliMUONVClusterFinder.h"
#include "AliMUONVClusterServer.h"
#include "AliMUONVTrackStore.h"
#include "AliMUONTriggerElectronics.h"
#include "AliMUONTriggerUtilities.h"

#include "AliMpArea.h"
#include "AliMpCDB.h"
#include "AliMpConstants.h"
#include "AliMpDDLStore.h"
#include "AliMpSegmentation.h"

#include "AliRawReader.h"
#include "AliCDBManager.h"
#include "AliCodeTimer.h"
#include "AliLog.h"
#include "AliRunInfo.h"

#include <Riostream.h>
#include <TObjArray.h>
#include <TClonesArray.h>
#include <TString.h>
#include <TTree.h>

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

//_____________________________________________________________________________
AliMUONReconstructor::AliMUONReconstructor() : 
AliReconstructor(),
fDigitMaker(0x0),
fTransformer(new AliMUONGeometryTransformer()),
fDigitStore(0x0),
fTriggerCircuit(0x0),
fCalibrationData(0x0),
fDigitCalibrator(0x0),
fTriggerStore(0x0),
fTrackStore(0x0),
fClusterStore(0x0),
fTriggerProcessor(0x0),
fTriggerUtilities(0x0),
fClusterServers(),
fTrackers(),
fShouldCalibrate(kTRUE)
{
  /// normal ctor

  AliDebug(1,"");
  
  // Unload mapping objects
  // if they have been loaded from the obsolete OCDB mapping objects

  if ( AliMpDDLStore::Instance(false) ) {
    AliCDBManager::Instance()->UnloadFromCache("MUON/Calib/DDLStore");
    delete AliMpDDLStore::Instance();
  }  

  if ( AliMpSegmentation::Instance(false) ) { 
    AliCDBManager::Instance()->UnloadFromCache("MUON/Calib/Mapping");
    delete AliMpSegmentation::Instance();
  }  

  // Load mapping
  if ( ! AliMpCDB::LoadDDLStore() ) {
    AliFatal("Could not access mapping from OCDB !");
  }
  
  // Load geometry data
  fTransformer->LoadGeometryData();
 
  fClusterServers.SetOwner(kTRUE);
  fTrackers.SetOwner(kTRUE);
}

//_____________________________________________________________________________
AliMUONReconstructor::~AliMUONReconstructor()
{
  /// dtor

  AliDebug(1,"");

  delete fDigitCalibrator;

  delete fDigitMaker;
  delete fDigitStore;
  delete fTransformer;
  delete fTriggerCircuit;
  delete fTriggerStore;
  delete fTrackStore;
  delete fClusterStore;
  delete fTriggerProcessor;
  delete fTriggerUtilities;

  delete AliMpSegmentation::Instance(false);
  delete AliMpDDLStore::Instance(false);  

  delete fCalibrationData;  
}

//_____________________________________________________________________________
void
AliMUONReconstructor::Calibrate(AliMUONVDigitStore& digitStore) const
{
  /// Calibrate the digitStore
  if (!fDigitCalibrator)
  {
    CreateCalibrator();
  }
    
  if ( fShouldCalibrate )
  {
    AliCodeTimerAuto(Form("%s::Calibrate(AliMUONVDigitStore*)",fDigitCalibrator->ClassName()),0)
    fDigitCalibrator->Calibrate(digitStore);
  }
}

//_____________________________________________________________________________
void
AliMUONReconstructor::ConvertDigits(AliRawReader* rawReader, 
                                    AliMUONVDigitStore* digitStore,
                                    AliMUONVTriggerStore* triggerStore) const
{
  /// Convert raw data into digit and trigger stores
  CreateDigitMaker();

  // Skip reconstruction if event is Calibration
  if ( GetRecoParam()->GetEventSpecie() == AliRecoParam::kCalib ) {
    digitStore->Clear(); // Remove possible digits from previous event
    triggerStore->Clear(); // Remove possible triggers from previous event
    AliInfo("Calibration event: do not convert digits");
    return;
  }
  
  AliCodeTimerStart(Form("%s::Raw2Digits(AliRawReader*,AliMUONVDigitStore*,AliMUONVTriggerStore*)",
                    fDigitMaker->ClassName()))
  fDigitMaker->Raw2Digits(rawReader,digitStore,triggerStore);
  AliCodeTimerStop(Form("%s::Raw2Digits(AliRawReader*,AliMUONVDigitStore*,AliMUONVTriggerStore*)",
                         fDigitMaker->ClassName()))
  Calibrate(*digitStore);
}

//_____________________________________________________________________________
void 
AliMUONReconstructor::ConvertDigits(AliRawReader* rawReader, TTree* digitsTree) const
{
   /// convert raw data into a digit tree
  AliCodeTimerAuto("",0)

  Bool_t alone = ( TriggerStore() == 0 );
  
  Bool_t ok = DigitStore()->Connect(*digitsTree,alone);
  if ( TriggerStore() ) 
  {
    ok = ok && TriggerStore()->Connect(*digitsTree,kFALSE);
  }
  
  if (!ok)
  {
    AliError("Could not make branches on TreeD");
  }
  else
  {
    ConvertDigits(rawReader,DigitStore(),TriggerStore());
    AliCodeTimerStart("Fill digits")
    digitsTree->Fill();
    AliCodeTimerStop("Fill digits")
    DigitStore()->Clear();
  }
}

//_____________________________________________________________________________
void
AliMUONReconstructor::CreateDigitMaker() const
{
  /// Create (and create if necessary) the digit maker
  if (fDigitMaker) return;

  AliCodeTimerAuto("",0)

  TString option = GetOption();
  
  Bool_t enableErrorLogging = kFALSE;

  if (option.Contains("ENABLEERRORLOGGING"))
  {
    enableErrorLogging = kTRUE;
  }

  fDigitMaker = new AliMUONDigitMaker(enableErrorLogging);
  option.ToUpper();

  // Always make trigger digits
  // (needed when calculating trigger chamber efficiency)
  fDigitMaker->SetMakeTriggerDigits(kTRUE);

  if ( GetRecoParam()->TryRecover() )
  {
    fDigitMaker->SetTryRecover(kTRUE);
  }
  else
  {
    fDigitMaker->SetTryRecover(kFALSE);    
  }
}

//_____________________________________________________________________________
void 
AliMUONReconstructor::CreateTriggerCircuit() const
{
  /// Return (and create if necessary) the trigger circuit object
  if (fTriggerCircuit) return;

  AliCodeTimerAuto("",0)

  fTriggerCircuit = new AliMUONTriggerCircuit(fTransformer);

}

//_____________________________________________________________________________
void 
AliMUONReconstructor::CreateTriggerUtilities() const
{
  /// Return (and create if necessary) the trigger utilities object
  if ( fTriggerUtilities ) return;
  
  AliCodeTimerAuto("",0)
  
  if ( ! fCalibrationData ) CreateCalibrationData();
  
  fTriggerUtilities = new AliMUONTriggerUtilities(fCalibrationData);
}

//_____________________________________________________________________________
AliTracker* 
AliMUONReconstructor::CreateTracker() const
{
  /// Create the MUONTracker object
  
  CreateTriggerCircuit();
  CreateTriggerUtilities();
  
  const AliMUONRecoParam* rp = GetRecoParam();
  
  Int_t es = rp->GetEventSpecie();
  
  AliTracker* tracker = static_cast<AliTracker*>(fTrackers.At(es));
  
  if (!tracker ) 
  {
    if ( ! rp->CombineClusterTrackReco() )
    {
      tracker = new AliMUONTracker(rp,
                                   0x0,
                                   *DigitStore(),
                                   fTransformer,
                                   fTriggerCircuit,
                                   fTriggerUtilities);

      AliInfo(Form("Created tracker %p for recoparam of type %s es=%d",
                   tracker,
                   AliRecoParam::GetEventSpecieName(AliRecoParam::Convert(rp->GetEventSpecie())),es));
    }
    else
    {
      
      tracker = new AliMUONTracker(rp,
                                   CreateClusterServer(*rp),
                                   *DigitStore(),
                                   fTransformer,
                                   fTriggerCircuit,
                                   fTriggerUtilities);

      AliInfo(Form("Created (combined) tracker %p for recoparam of type %s es=%d",
                   tracker,
                   AliRecoParam::GetEventSpecieName(AliRecoParam::Convert(rp->GetEventSpecie())),es));      
    }
    
    fTrackers.AddAtAndExpand(tracker,es);
  }
  
  
  return tracker;
}

//_____________________________________________________________________________
AliMUONVClusterFinder*
AliMUONReconstructor::CreateClusterFinder(const char* clusterFinderType)
{
  /// Create a given cluster finder instance
  
  AliCodeTimerAutoGeneral("",0)

  AliMUONVClusterFinder* clusterFinder(0x0);
  
  TString opt(clusterFinderType);
  opt.ToUpper();
  
  if ( strstr(opt,"PRECLUSTERV2") )
  {
    clusterFinder = new AliMUONPreClusterFinderV2;
  }    
  else if ( strstr(opt,"PRECLUSTERV3") )
  {
    clusterFinder = new AliMUONPreClusterFinderV3;
  }  
  else if ( strstr(opt,"PRECLUSTER") )
  {
    clusterFinder = new AliMUONPreClusterFinder;
  }  
  else if ( strstr(opt,"PEAKCOG") )
  {
    clusterFinder = new AliMUONClusterFinderPeakCOG(kFALSE,new AliMUONPreClusterFinder);
  }
  else if ( strstr(opt,"PEAKFIT") )
  {
    clusterFinder = new AliMUONClusterFinderPeakFit(kFALSE,new AliMUONPreClusterFinder);
  }
  else if ( strstr(opt,"COG") )
  {
    clusterFinder = new AliMUONClusterFinderCOG(new AliMUONPreClusterFinder);
  }  
  else if ( strstr(opt,"SIMPLEFITV3") )
  {
    clusterFinder = new AliMUONClusterFinderSimpleFit(new AliMUONClusterFinderCOG(new AliMUONPreClusterFinderV3));
  }
  else if ( strstr(opt,"SIMPLEFIT") )
  {
    clusterFinder = new AliMUONClusterFinderSimpleFit(new AliMUONClusterFinderCOG(new AliMUONPreClusterFinder));
  }
  else if ( strstr(opt,"MLEM:DRAW") )
  {
    clusterFinder = new AliMUONClusterFinderMLEM(kTRUE,new AliMUONPreClusterFinder);
  }
  else if ( strstr(opt,"MLEMV3") )
  {
    clusterFinder = new AliMUONClusterFinderMLEM(kFALSE,new AliMUONPreClusterFinderV3);
  } 
  else if ( strstr(opt,"MLEMV2") )
  {
    clusterFinder = new AliMUONClusterFinderMLEM(kFALSE,new AliMUONPreClusterFinderV2);
  } 
  else if ( strstr(opt,"MLEM") )
  {
    clusterFinder = new AliMUONClusterFinderMLEM(kFALSE,new AliMUONPreClusterFinder);
  } 
  else
  {
    AliErrorClass(Form("clustering mode \"%s\" does not exist",opt.Data()));
    return 0x0;
  }
  
  return clusterFinder;
}

//_____________________________________________________________________________
AliMUONVClusterServer*
AliMUONReconstructor::CreateClusterServer(const AliMUONRecoParam& rp) const
{
  /// Create cluster server
  
  AliCodeTimerAuto("",0);
  
  AliMUONVClusterServer* clusterServer = static_cast<AliMUONVClusterServer*>(fClusterServers.At(rp.GetEventSpecie()));
  
  if (!clusterServer )
  {
    AliMUONVClusterFinder* clusterFinder = CreateClusterFinder(rp.GetClusteringMode());
    
    if ( !clusterFinder ) return 0x0;
    
    clusterServer = new AliMUONSimpleClusterServer(clusterFinder,*fTransformer);

    AliInfo(Form("Created AliMUONSimpleClusterServer (%p) for specie %d with clustering = %s (following requesting clustering mode %s)",
                 clusterServer,rp.GetEventSpecie(),clusterFinder->ClassName(),rp.GetClusteringMode()));
    
    fClusterServers.AddAtAndExpand(clusterServer,rp.GetEventSpecie());
  }
  
  return clusterServer;
}

//_____________________________________________________________________________
void
AliMUONReconstructor::CreateCalibrationData() const
{
  /// Create the calibrator
  
  AliCodeTimerAuto("",0);
  
  Int_t runNumber = AliCDBManager::Instance()->GetRun();

  fCalibrationData = new AliMUONCalibrationData(runNumber);
  if ( !fCalibrationData->IsValid() )
  {
    AliError("Could not retrieve calibrations !");
    delete fCalibrationData;
    fCalibrationData = 0x0;
    return;
  }    
  
  // It is now time to check whether we have everything to proceed.
  // What we need depends on whether both tracker and trigger
  // are in the readout chain, and what specific "bad channel policy"
  // we use
  
  Bool_t kTracker(kFALSE);
  Bool_t kTrigger(kFALSE);
  
  const AliRunInfo* runInfo = GetRunInfo();
  if (!runInfo)
  {
    AliError("Could not get runinfo ?");
  }
  else
  {
    TString detectors(runInfo->GetActiveDetectors());
    if (detectors.Contains("MUONTRK")) kTracker=kTRUE;
    if (detectors.Contains("MUONTRG")) kTrigger=kTRUE;
  }
   
  AliInfo(Form("Run with MUON TRIGGER : %s and MUON TRACKER : %s",
               kTrigger ? "YES":"NO" , 
               kTracker ? "YES":"NO"));
  
  if ( kTracker ) 
  {
    // Check that we get all the calibrations we'll need
    if ( !fCalibrationData->Pedestals() ||
        !fCalibrationData->Gains() )
    {
      AliFatal(Form("Could not access all required calibration data (PED %p GAIN %p)",
                    fCalibrationData->Pedestals(),fCalibrationData->Gains()));      
    }
    
    if ( !fCalibrationData->HV() ) 
    {
      // Special treatment of HV. We only break if the values
      // are not there *AND* we cut on them.
      UInt_t mask = GetRecoParam()->PadGoodnessMask();
      TString smask(AliMUONPadStatusMaker::AsCondition(mask));
      if ( smask.Contains("HV") )
      {
        AliFatal("Could not access all required calibration data (HV)");      
      }
    } 
  }
}

//_____________________________________________________________________________
void
AliMUONReconstructor::CreateCalibrator() const
{
  /// Create the calibrator

  AliCodeTimerAuto("",0);

  if ( ! fCalibrationData )
    CreateCalibrationData();

  AliInfo("Calibration will occur.");

  TString opt(GetOption());
  opt.ToUpper();
  
  if ( strstr(opt,"NOSTATUSMAP") )
  {
    AliWarning("NOSTATUSMAP is obsolete");
  }

  Bool_t kTracker(kFALSE);
    
  const AliRunInfo* runInfo = GetRunInfo();
  if (!runInfo)
  {
    AliError("Could not get runinfo ?");
  }
  else
  {
    TString detectors(runInfo->GetActiveDetectors());
    if (detectors.Contains("MUONTRK")) kTracker=kTRUE;
  }
    
  if ( kTracker )
  {
    fDigitCalibrator = new AliMUONDigitCalibrator(*fCalibrationData,GetRecoParam());
  }
  else
  {
    AliWarning("Apparently running without MCH so will not instantiante the DigitCalibrator nor read MCH OCDB objects...");
    fShouldCalibrate=kFALSE;
  }
}

//_____________________________________________________________________________
void
AliMUONReconstructor::ResponseRemovingChambers(AliMUONVTriggerStore* triggerStore) const
{
  /// Update trigger information with informatins obtained after
  /// re-calculation of trigger response
  AliCodeTimerAuto("",0);

  if ( ! fCalibrationData )
    CreateCalibrationData();

  if ( ! fTriggerProcessor )
    fTriggerProcessor = new AliMUONTriggerElectronics(fCalibrationData);

  fTriggerProcessor->ResponseRemovingChambers(*triggerStore);
}

//_____________________________________________________________________________
AliMUONVDigitStore*
AliMUONReconstructor::DigitStore() const
{
  /// Return (and create if necessary) the digit container
  if (!fDigitStore) 
  {
    TString sopt(GetOption());
    sopt.ToUpper();
    
    AliInfo(Form("Options=%s",sopt.Data()));
    
    if ( sopt.Contains("DIGITSTOREV1") )
    {
      fDigitStore = AliMUONVDigitStore::Create("AliMUONDigitStoreV1");
    }
    else if ( sopt.Contains("DIGITSTOREV2R") ) 
    {
      fDigitStore = AliMUONVDigitStore::Create("AliMUONDigitStoreV2R");
    }
    else if ( sopt.Contains("DIGITSTOREV2S") ) 
    {
      fDigitStore = AliMUONVDigitStore::Create("AliMUONDigitStoreV2S");
    }
    
    if (!fDigitStore) fDigitStore = AliMUONVDigitStore::Create("AliMUONDigitStoreV2R");
    
    AliInfo(Form("Will use %s to store digits during reconstruction",fDigitStore->ClassName()));
  }
  return fDigitStore;
}

//_____________________________________________________________________________
void
AliMUONReconstructor::FillTreeR(AliMUONVTriggerStore* triggerStore,
                                TTree& clustersTree) const
{
  /// Write the trigger and cluster information into TreeR

  AliCodeTimerAuto("",0)

  Bool_t ok(kFALSE);
  Bool_t alone(kTRUE); // is trigger the only info in TreeR ?
  
   const AliMUONRecoParam* rp = GetRecoParam();
  
  if ( ! rp->CombineClusterTrackReco() )
  {
    alone = kFALSE; // we'll get both tracker and trigger information in TreeR
  }
  
  if ( triggerStore ) 
  {
    ResponseRemovingChambers(triggerStore);
    ok = triggerStore->Connect(clustersTree,alone);
    if (!ok)
    {
      AliError("Could not create triggerStore branches in TreeR");
    }
  }

  if ( !alone )
  {
    if (!fClusterStore)
    {
      fClusterStore = new AliMUONClusterStoreV2;
    }
    
    AliMUONVClusterServer* clusterServer = CreateClusterServer(*rp);
    
    TIter next(DigitStore()->CreateIterator());
    clusterServer->UseDigits(next,DigitStore());

    AliMpArea area;
    
    AliDebug(1,Form("Doing full clusterization in local reconstruction using %s ",clusterServer->ClassName()));
    
    for ( Int_t i = 0; i < AliMpConstants::NofTrackingChambers(); ++i ) 
    {
      if (rp->UseChamber(i))
      {
        if ( ( i == 6 || i == 7 )  && rp->BypassSt4() ) continue;
        if ( ( i == 8 || i == 9 )  && rp->BypassSt5() ) continue;
        
        clusterServer->Clusterize(i,*fClusterStore,area,rp);
      }
    }
    
    Bool_t cok = fClusterStore->Connect(clustersTree,alone);
    
    if (!cok) AliError("Could not connect clusterStore to clusterTree");
    
    AliDebug(1,Form("Number of clusters found = %d",fClusterStore->GetSize()));
    
    StdoutToAliDebug(1,fClusterStore->Print());
  }
         
  if (ok) // at least one type of branches created successfully
  {
    clustersTree.Fill();
  }
  
  if (fClusterStore) fClusterStore->Clear();
}

//_____________________________________________________________________________
const AliMUONRecoParam* AliMUONReconstructor::GetRecoParam()
{ 
  /// Get the recoparam from reconstruction
  return dynamic_cast<const AliMUONRecoParam*>(AliReconstructor::GetRecoParam(AliReconstruction::GetDetIndex("MUON"))); 
}


//_____________________________________________________________________________
Bool_t 
AliMUONReconstructor::HasDigitConversion() const
{
  /// We *do* have digit conversion, but we might advertise it only 
  /// if we want to save the digits.
  
  TString opt(GetOption());
  opt.ToUpper();
  if ( opt.Contains("SAVEDIGITS" ) && !opt.Contains("NOLOCALRECONSTRUCTION") )
  {
    return kTRUE;
  }
  else
  {
    return kFALSE;
  }
}

//_____________________________________________________________________________
void 
AliMUONReconstructor::Reconstruct(AliRawReader* rawReader, TTree* clustersTree) const
{
  /// This method is called by AliReconstruction if HasLocalReconstruction()==kTRUE AND
  /// HasDigitConversion()==kFALSE
  
  if ( !clustersTree ) 
  {
    AliError("clustersTree is 0x0 !");
    return;
  }
  
  ConvertDigits(rawReader,DigitStore(),TriggerStore());

  FillTreeR(TriggerStore(),*clustersTree);
}

//_____________________________________________________________________________
void 
AliMUONReconstructor::Reconstruct(TTree* digitsTree, TTree* clustersTree) const
{
  /// This method is called by AliReconstruction if HasLocalReconstruction()==kTRUE
  /// AND HasDigitConversion()==kTRUE
  
  AliCodeTimerAuto("",0)
  
  AliDebug(1,"");
  
  if (!digitsTree || !clustersTree) 
  {
    AliError(Form("Tree is null : digitsTree=%p clustersTree=%p",
                  digitsTree,clustersTree));
    return;
  }

  if (!fDigitStore)
  {
    fDigitStore = AliMUONVDigitStore::Create(*digitsTree);
    if (!fDigitStore)
    {
      AliError(Form("Could not get DigitStore from %s",digitsTree->GetName()));
    }
    else
    {
      AliInfo(Form("Created %s from %s",fDigitStore->ClassName(),digitsTree->GetName()));
    }
  }
  if (!fTriggerStore)
  {
    fTriggerStore = AliMUONVTriggerStore::Create(*digitsTree);
    if (!fTriggerStore)
    {
      AliError(Form("Could not get TriggerStore from %s",digitsTree->GetName()));
    }
    else
    {
      AliInfo(Form("Created %s from %s",fTriggerStore->ClassName(),digitsTree->GetName()));
    }
  }
  
  if (!fTriggerStore && !fDigitStore)
  {
    AliError("No store at all. Nothing to do.");
    return;
  }
  
  // insure we start with empty stores
  if ( fDigitStore ) 
  {
    fDigitStore->Clear(); 
    Bool_t alone = ( fTriggerStore ? kFALSE : kTRUE );
    Bool_t ok = fDigitStore->Connect(*digitsTree,alone);
    if (!ok)
    {
      AliError("Could not connect digitStore to digitsTree");
      return;
    }
  }
  if ( fTriggerStore ) 
  {
    fTriggerStore->Clear();
    Bool_t alone = ( fDigitStore ? kFALSE : kTRUE );
    Bool_t ok = fTriggerStore->Connect(*digitsTree,alone);
    if (!ok)
    {
      AliError("Could not connect triggerStore to digitsTree");
      return;
    }
  }
  
  digitsTree->GetEvent(0);
  
  if ( fDigitStore ) 
  {
    // Insure we got calibrated digits (if we reconstruct from pure simulated,
    // i.e. w/o going through raw data, this will be the case)
    TIter next(fDigitStore->CreateIterator());
    AliMUONVDigit* digit = static_cast<AliMUONVDigit*>(next());
    if (digit && !digit->IsCalibrated())
    {
      Calibrate(*fDigitStore);
    }
  }
    
  FillTreeR(fTriggerStore,*clustersTree);
}

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