ROOT logo
/**************************************************************************
* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
*                                                                        *
* Author: The ALICE Off-line Project.                                    *
* Contributors are mentioned in the code where appropriate.              *
*                                                                        *
* Permission to use, copy, modify and distribute this software and its   *
* documentation strictly for non-commercial purposes is hereby granted   *
* without fee, provided that the above copyright notice appears in all   *
* copies and that both the copyright notice and this permission notice   *
* appear in the supporting documentation. The authors make no claims     *
* about the suitability of this software for any purpose. It is          *
* provided "as is" without express or implied warranty.                  *
**************************************************************************/

// $Id$

#include <cstdlib>
#include "AliMUONRefitter.h"
#include "AliMUONGeometryTransformer.h"
#include "AliMUONClusterFinderCOG.h"
#include "AliMUONClusterFinderMLEM.h"
#include "AliMUONClusterFinderSimpleFit.h"
#include "AliMUONPreClusterFinder.h"
#include "AliMUONPreClusterFinderV2.h"
#include "AliMUONPreClusterFinderV3.h"
#include "AliMUONSimpleClusterServer.h"
#include "AliMUONReconstructor.h"
#include "AliMUONTrackReconstructor.h"
#include "AliMUONTrackReconstructorK.h"
#include "AliMUONRecoParam.h"
#include "AliMUONESDInterface.h"
#include "AliMUONVClusterStore.h"
#include "AliMUONVTrackStore.h"
#include "AliMUONTrack.h"
#include "AliMUONTracker.h"
#include "AliMUONTrackParam.h"
#include "AliLog.h"

//-----------------------------------------------------------------------------
/// \class AliMUONRefitter
///
/// This class has been developped to simplify the re-reconstruction of the MUON tracks
/// stored into ESD with different recoParams and/or after having re-calibrated the digits.
/// It creates new MUON object from ESD objects given as input (through the ESDInterface) then:
///
/// - re-clusterize the ESD clusters using the attached ESD pads
///   (several new clusters can be reconstructed per ESD cluster)
/// - re-fit the ESD tracks using the attached ESD clusters
/// - reconstruct the ESD tracks from ESD pads (i.e. re-clusterized the attached clusters)
///
/// note:
/// - connexion between an ESD cluster and corresponding MUON clusters from re-clustering
///   can be made through the detection element ID
/// - connexion between an ESD track and the corresponding refitted MUON track
///   can be made through their unique ID
///
/// \author Philippe Pillot
//-----------------------------------------------------------------------------

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

//_____________________________________________________________________________
AliMUONRefitter::AliMUONRefitter(const AliMUONRecoParam* recoParam)
: TObject(),
  fkRecoParam(recoParam),
  fkESDInterface(0x0),
  fGeometryTransformer(0x0),
  fClusterServer(0x0),
  fTracker(0x0),
  nextClusterIndex(0)
{
  /// Default constructor
  CreateGeometryTransformer();
  CreateClusterServer(*fGeometryTransformer);
  if (fClusterServer) fTracker = AliMUONTracker::CreateTrackReconstructor(recoParam,fClusterServer,fGeometryTransformer);
  if (!fClusterServer || !fTracker) {
    AliFatal("refitter initialization failed");
    exit(-1);
  }
}

//_____________________________________________________________________________
AliMUONRefitter::~AliMUONRefitter()
{
  /// Destructor
  delete fGeometryTransformer;
  delete fClusterServer;
  delete fTracker;
}

//_____________________________________________________________________________
AliMUONVTrackStore* AliMUONRefitter::ReconstructFromDigits()
{
  /// re-reconstruct all tracks and attached clusters from the digits
  /// it is the responsability of the user to delete the returned store
  
  if (!fkESDInterface) {
    AliError("the refitter must be connected to an ESDInterface containing the ESD event to reconstruct");
    return 0x0;
  }
  
  // prepare new track(s)
  AliMUONVTrackStore* newTrackStore = AliMUONESDInterface::NewTrackStore();
  if (!newTrackStore) return 0x0;
  
  // loop over tracks and refit them (create new tracks)
  AliMUONTrack *track;
  TIter next(fkESDInterface->CreateTrackIterator());
  while ((track = static_cast<AliMUONTrack*>(next()))) {
    AliMUONTrack *newTrack = RetrackFromDigits(*track);
    if (newTrack) newTrackStore->Add(newTrack);
    delete newTrack;
  }
  
  return newTrackStore;
}

//_____________________________________________________________________________
AliMUONVTrackStore* AliMUONRefitter::ReconstructFromClusters()
{
  /// refit all tracks from the attached clusters
  /// it is the responsability of the user to delete the returned store
  
  if (!fkESDInterface) {
    AliError("the refitter must be connected to an ESDInterface containing the ESD event to reconstruct");
    return 0x0;
  }
  
  // prepare new track(s)
  AliMUONVTrackStore* newTrackStore = AliMUONESDInterface::NewTrackStore();
  if (!newTrackStore) return 0x0;
  
  // loop over tracks and refit them (create new tracks)
  AliMUONTrack *track;
  TIter next(fkESDInterface->CreateTrackIterator());
  while ((track = static_cast<AliMUONTrack*>(next()))) {
    AliMUONTrack* newTrack = newTrackStore->Add(*track);
    if (!fTracker->RefitTrack(*newTrack)) newTrackStore->Remove(*newTrack);
  }
  
  return newTrackStore;
}

//_____________________________________________________________________________
AliMUONTrack* AliMUONRefitter::RetrackFromDigits(UInt_t trackId)
{
  /// refit track "trackId" from the digits (i.e. re-clusterized the attached clusters)
  /// it is the responsability of the user to delete the returned track
  
  if (!fkESDInterface) {
    AliError("the refitter must be connected to an ESDInterface containing the ESD event to reconstruct");
    return 0x0;
  }
  
  // get the track to refit
  AliMUONTrack* track = fkESDInterface->FindTrack(trackId);
  
  return track ? RetrackFromDigits(*track) : 0x0;
}

//_____________________________________________________________________________
AliMUONTrack* AliMUONRefitter::RetrackFromClusters(UInt_t trackId)
{
  /// refit track "trackId" from the clusters (i.e. do not re-clusterize)
  /// it is the responsability of the user to delete the returned track
  
  if (!fkESDInterface) {
    AliError("the refitter must be connected to an ESDInterface containing the ESD event to reconstruct");
    return 0x0;
  }
  
  // get the track to refit
  AliMUONTrack* track = fkESDInterface->FindTrack(trackId);
  if (!track) return 0x0;
  
  // refit the track (create a new one)
  AliMUONTrack* newTrack = new AliMUONTrack(*track);
  if (!fTracker->RefitTrack(*newTrack)) {
    delete newTrack;
    return 0x0;
  }
  
  return newTrack;
}

//_____________________________________________________________________________
AliMUONVClusterStore* AliMUONRefitter::ReClusterize(UInt_t trackId, UInt_t clusterId)
{
  /// re-clusterize cluster numbered "clusterId" in track "trackId"
  /// several new clusters may be reconstructed
  /// it is the responsability of the user to delete the returned store
  
  if (!fkESDInterface) {
    AliError("the refitter must be connected to an ESDInterface containing the ESD event to reconstruct");
    return 0x0;
  }
  
  // get the cluster to re-clusterize
  AliMUONVCluster* cluster = fkESDInterface->FindCluster(trackId,clusterId);
  if (!cluster) return 0x0;
  
  // check if digits exist
  if (cluster->GetNDigits() == 0) {
    AliError(Form("no digit attached to cluster #%d in track %d",clusterId,trackId));
    return 0x0;
  }
  
  // create the cluster store
  AliMUONVClusterStore* clusterStore = AliMUONESDInterface::NewClusterStore();
  if (!clusterStore) return 0x0;
  
  // re-clusterize
  TIter next(fkESDInterface->CreateDigitIterator(trackId, clusterId));
  fClusterServer->UseDigits(next,fkESDInterface->GetDigits());
  fClusterServer->Clusterize(cluster->GetChamberId(),*clusterStore,AliMpArea(),fkRecoParam);
  
  // set the uniqueID of the new clusters
  TIter nextCl(clusterStore->CreateIterator());
  AliMUONVCluster* newCluster = 0x0;
  while ((newCluster = static_cast<AliMUONVCluster*>(nextCl())))
    newCluster->SetUniqueID(AliMUONVCluster::BuildUniqueID(cluster->GetChamberId(), cluster->GetDetElemId(), nextClusterIndex++));
  
  return clusterStore;
}

//_____________________________________________________________________________
AliMUONVClusterStore* AliMUONRefitter::ReClusterize(UInt_t clusterId)
{
  /// re-clusterize cluster "clusterId"
  /// several new clusters may be reconstructed
  /// it is the responsability of the user to delete the returned store
  
  if (!fkESDInterface) {
    AliError("the refitter must be connected to an ESDInterface containing the ESD event to reconstruct");
    return 0x0;
  }
  
  // get the cluster to re-clusterize
  AliMUONVCluster* cluster = fkESDInterface->FindCluster(clusterId);
  if (!cluster) return 0x0;
  
  // check if digits exist
  if (cluster->GetNDigits() == 0) {
    AliError(Form("no digit attached to cluster %d",clusterId));
    return 0x0;
  }
  
  // create the cluster store
  AliMUONVClusterStore* clusterStore = AliMUONESDInterface::NewClusterStore();
  if (!clusterStore) return 0x0;
  
  // re-clusterize
  TIter next(fkESDInterface->CreateDigitIteratorInCluster(clusterId));
  fClusterServer->UseDigits(next,fkESDInterface->GetDigits());
  fClusterServer->Clusterize(cluster->GetChamberId(),*clusterStore,AliMpArea(),fkRecoParam);
  
  // set the uniqueID of the new clusters
  TIter nextCl(clusterStore->CreateIterator());
  AliMUONVCluster* newCluster = 0x0;
  while ((newCluster = static_cast<AliMUONVCluster*>(nextCl())))
    newCluster->SetUniqueID(AliMUONVCluster::BuildUniqueID(cluster->GetChamberId(), cluster->GetDetElemId(), nextClusterIndex++));
  
  return clusterStore;
}

//_____________________________________________________________________________
void AliMUONRefitter::CreateGeometryTransformer()
{
  /// Create geometry transformer (local<->global)
  /// and load geometry data
  fGeometryTransformer = new AliMUONGeometryTransformer();
  fGeometryTransformer->LoadGeometryData();
}

//_____________________________________________________________________________
void AliMUONRefitter::CreateClusterServer(AliMUONGeometryTransformer& transformer)
{
  /// Create cluster server
  AliMUONVClusterFinder* clusterFinder = AliMUONReconstructor::CreateClusterFinder(fkRecoParam->GetClusteringMode());
  fClusterServer = clusterFinder ? new AliMUONSimpleClusterServer(clusterFinder,transformer) : 0x0;
}

//_____________________________________________________________________________
AliMUONTrack* AliMUONRefitter::RetrackFromDigits(const AliMUONTrack& track)
{
  /// refit the given track from the digits (i.e. re-clusterized the attached clusters):
  /// several new clusters may be reconstructed per initial ESD cluster:
  /// -> all the combinations of clusters are considered to build the new tracks
  /// -> return the best track (largest number of clusters or best chi2 in case of equality)
  
  // check if digits exist
  UInt_t trackId = track.GetUniqueID();
  if (!fkESDInterface->DigitsStored(trackId)) {
    AliError(Form("no digit attached to track #%d",trackId));
    return 0x0;
  }
  
  // prepare new track(s)
  AliMUONVTrackStore* newTrackStore = AliMUONESDInterface::NewTrackStore();
  if (!newTrackStore) return 0x0;
  newTrackStore->Add(track)->Clear("C");
  
  // prepare new cluster store
  AliMUONVClusterStore* newClusterStore = AliMUONESDInterface::NewClusterStore();
  if (!newClusterStore) {
    delete newTrackStore;
    return 0x0;
  }
  
  // loop over clusters, re-clusterize and build new tracks
  AliMUONVCluster* cluster;
  TIter nextCluster(fkESDInterface->CreateClusterIterator(trackId));
  while ((cluster = static_cast<AliMUONVCluster*>(nextCluster()))) {
    
    // reset the new cluster store
    newClusterStore->Clear();
    
    // re-clusterize current cluster
    TIter nextDigit(fkESDInterface->CreateDigitIterator(trackId, cluster->GetUniqueID()));
    fClusterServer->UseDigits(nextDigit,fkESDInterface->GetDigits());
    Int_t nNewClusters = fClusterServer->Clusterize(cluster->GetChamberId(),*newClusterStore,AliMpArea(),fkRecoParam);
    
    // check that re-clusterizing succeeded
    if (nNewClusters == 0) {
      AliWarning(Form("refit gave no cluster (chamber %d)",cluster->GetChamberId()));
      AliInfo("initial ESD cluster:");
      cluster->Print("FULL");
      continue;
    }
    
    // set the uniqueID of the new clusters
    TIter nextCl(newClusterStore->CreateIterator());
    AliMUONVCluster* newCluster = 0x0;
    while ((newCluster = static_cast<AliMUONVCluster*>(nextCl())))
      newCluster->SetUniqueID(AliMUONVCluster::BuildUniqueID(cluster->GetChamberId(), cluster->GetDetElemId(), nextClusterIndex++));
    
    // add the new cluster(s) to the tracks
    if (!AddClusterToTracks(*newClusterStore, *newTrackStore)) {
      delete newClusterStore;
      delete newTrackStore;
      return 0x0;
    }
    
  }
  
  if (newTrackStore->GetSize() > 1000) AliInfo(Form("%d tracks to refit... be patient!!",newTrackStore->GetSize()));
					       
  // refit the tracks and pick up the best one
  AliMUONTrack *currentTrack, *bestTrack = 0x0;
  Double_t currentChi2, bestChi2 = AliMUONTrack::MaxChi2();
  Int_t currentNCluster, bestNClusters = 0;
  TIter next(newTrackStore->CreateIterator());
  while ((currentTrack = static_cast<AliMUONTrack*>(next()))) {
    
    // set the track parameters at first cluster if any (used as seed in original tracking)
    AliMUONTrackParam* param = (AliMUONTrackParam*) currentTrack->GetTrackParamAtCluster()->First();
    if (param) *param = *((AliMUONTrackParam*) track.GetTrackParamAtCluster()->First());
    
    // refit the track
    if (!fTracker->RefitTrack(*currentTrack)) continue;
    
    // check the status of the improvement if enabled
    if (fkRecoParam->ImproveTracks() && !currentTrack->IsImproved()) continue;
    
    // find best track (the one with the highest number of cluster or the best chi2 in case of equality)
    currentNCluster = currentTrack->GetNClusters();
    currentChi2 = currentTrack->GetGlobalChi2();
    if (currentNCluster > bestNClusters || (currentNCluster == bestNClusters && currentChi2 < bestChi2)) {
      bestTrack = currentTrack;
      bestNClusters = currentNCluster;
      bestChi2 = currentChi2;
    }
    
  }
  
  // copy best track and free memory
  AliMUONTrack* newTrack = bestTrack ? new AliMUONTrack(*bestTrack) : 0x0;
  delete newClusterStore;
  delete newTrackStore;
  
  return newTrack;
}

//_____________________________________________________________________________
Bool_t AliMUONRefitter::AddClusterToTracks(const AliMUONVClusterStore &clusterStore, AliMUONVTrackStore &trackStore)
{
  /// add clusters to each of the given tracks
  /// duplicate the tracks if there are several clusters and add one cluster per copy
  
  // create new track store if there are more than 1 cluster to add per track
  Int_t nClusters = clusterStore.GetSize();
  if (nClusters < 1) return kTRUE;
  
  // check if we will exceed the maximum allowed number of tracks
  if (nClusters * trackStore.GetSize() > fkRecoParam->GetMaxTrackCandidates()) {
    AliError(Form("Too many track candidates (%d tracks). Stop refitting.", nClusters * trackStore.GetSize()));
    return kFALSE;
  }
  
  AliMUONTrackParam dummyParam;
  AliMUONTrack *currentTrack, *track;
  AliMUONVCluster *newCluster;
  Int_t nTracks = trackStore.GetSize();
  Int_t iTrack = 0;
  Int_t iCluster = 0;
  
  // loop over existing tracks to add the cluster(s)
  TIter nextTrack(trackStore.CreateIterator());
  while ((currentTrack = static_cast<AliMUONTrack*>(nextTrack())) && (iTrack < nTracks)) {
    
    iTrack++;
    
    // add the new cluster(s) to the tracks
    // duplicate the tracks if there are several clusters
    // stop the loop after loading the last cluster which is added to the current track
    iCluster = 0;
    TIter nextCluster(clusterStore.CreateIterator());
    while ((newCluster = static_cast<AliMUONVCluster*>(nextCluster())) && (iCluster < nClusters - 1)) {
      
      iCluster++;
      
      // add a copy of the current track to the store
      track = trackStore.Add(AliMUONTrack(*currentTrack));
      
      // only set Z parameter to avoid error in AddTrackParamAtCluster()
      // the rest will be recomputed during refit
      dummyParam.SetZ(newCluster->GetZ());
      
      // add new cluster to the new track
      track->AddTrackParamAtCluster(dummyParam, *newCluster, kTRUE);
      
    }
    
    // only set Z parameter to avoid error in AddTrackParamAtCluster()
    // the rest will be recomputed during refit
    dummyParam.SetZ(newCluster->GetZ());
    
    // add new cluster to the current track
    currentTrack->AddTrackParamAtCluster(dummyParam, *newCluster, kTRUE);
    
  }
  
  return kTRUE;
  
}

 AliMUONRefitter.cxx:1
 AliMUONRefitter.cxx:2
 AliMUONRefitter.cxx:3
 AliMUONRefitter.cxx:4
 AliMUONRefitter.cxx:5
 AliMUONRefitter.cxx:6
 AliMUONRefitter.cxx:7
 AliMUONRefitter.cxx:8
 AliMUONRefitter.cxx:9
 AliMUONRefitter.cxx:10
 AliMUONRefitter.cxx:11
 AliMUONRefitter.cxx:12
 AliMUONRefitter.cxx:13
 AliMUONRefitter.cxx:14
 AliMUONRefitter.cxx:15
 AliMUONRefitter.cxx:16
 AliMUONRefitter.cxx:17
 AliMUONRefitter.cxx:18
 AliMUONRefitter.cxx:19
 AliMUONRefitter.cxx:20
 AliMUONRefitter.cxx:21
 AliMUONRefitter.cxx:22
 AliMUONRefitter.cxx:23
 AliMUONRefitter.cxx:24
 AliMUONRefitter.cxx:25
 AliMUONRefitter.cxx:26
 AliMUONRefitter.cxx:27
 AliMUONRefitter.cxx:28
 AliMUONRefitter.cxx:29
 AliMUONRefitter.cxx:30
 AliMUONRefitter.cxx:31
 AliMUONRefitter.cxx:32
 AliMUONRefitter.cxx:33
 AliMUONRefitter.cxx:34
 AliMUONRefitter.cxx:35
 AliMUONRefitter.cxx:36
 AliMUONRefitter.cxx:37
 AliMUONRefitter.cxx:38
 AliMUONRefitter.cxx:39
 AliMUONRefitter.cxx:40
 AliMUONRefitter.cxx:41
 AliMUONRefitter.cxx:42
 AliMUONRefitter.cxx:43
 AliMUONRefitter.cxx:44
 AliMUONRefitter.cxx:45
 AliMUONRefitter.cxx:46
 AliMUONRefitter.cxx:47
 AliMUONRefitter.cxx:48
 AliMUONRefitter.cxx:49
 AliMUONRefitter.cxx:50
 AliMUONRefitter.cxx:51
 AliMUONRefitter.cxx:52
 AliMUONRefitter.cxx:53
 AliMUONRefitter.cxx:54
 AliMUONRefitter.cxx:55
 AliMUONRefitter.cxx:56
 AliMUONRefitter.cxx:57
 AliMUONRefitter.cxx:58
 AliMUONRefitter.cxx:59
 AliMUONRefitter.cxx:60
 AliMUONRefitter.cxx:61
 AliMUONRefitter.cxx:62
 AliMUONRefitter.cxx:63
 AliMUONRefitter.cxx:64
 AliMUONRefitter.cxx:65
 AliMUONRefitter.cxx:66
 AliMUONRefitter.cxx:67
 AliMUONRefitter.cxx:68
 AliMUONRefitter.cxx:69
 AliMUONRefitter.cxx:70
 AliMUONRefitter.cxx:71
 AliMUONRefitter.cxx:72
 AliMUONRefitter.cxx:73
 AliMUONRefitter.cxx:74
 AliMUONRefitter.cxx:75
 AliMUONRefitter.cxx:76
 AliMUONRefitter.cxx:77
 AliMUONRefitter.cxx:78
 AliMUONRefitter.cxx:79
 AliMUONRefitter.cxx:80
 AliMUONRefitter.cxx:81
 AliMUONRefitter.cxx:82
 AliMUONRefitter.cxx:83
 AliMUONRefitter.cxx:84
 AliMUONRefitter.cxx:85
 AliMUONRefitter.cxx:86
 AliMUONRefitter.cxx:87
 AliMUONRefitter.cxx:88
 AliMUONRefitter.cxx:89
 AliMUONRefitter.cxx:90
 AliMUONRefitter.cxx:91
 AliMUONRefitter.cxx:92
 AliMUONRefitter.cxx:93
 AliMUONRefitter.cxx:94
 AliMUONRefitter.cxx:95
 AliMUONRefitter.cxx:96
 AliMUONRefitter.cxx:97
 AliMUONRefitter.cxx:98
 AliMUONRefitter.cxx:99
 AliMUONRefitter.cxx:100
 AliMUONRefitter.cxx:101
 AliMUONRefitter.cxx:102
 AliMUONRefitter.cxx:103
 AliMUONRefitter.cxx:104
 AliMUONRefitter.cxx:105
 AliMUONRefitter.cxx:106
 AliMUONRefitter.cxx:107
 AliMUONRefitter.cxx:108
 AliMUONRefitter.cxx:109
 AliMUONRefitter.cxx:110
 AliMUONRefitter.cxx:111
 AliMUONRefitter.cxx:112
 AliMUONRefitter.cxx:113
 AliMUONRefitter.cxx:114
 AliMUONRefitter.cxx:115
 AliMUONRefitter.cxx:116
 AliMUONRefitter.cxx:117
 AliMUONRefitter.cxx:118
 AliMUONRefitter.cxx:119
 AliMUONRefitter.cxx:120
 AliMUONRefitter.cxx:121
 AliMUONRefitter.cxx:122
 AliMUONRefitter.cxx:123
 AliMUONRefitter.cxx:124
 AliMUONRefitter.cxx:125
 AliMUONRefitter.cxx:126
 AliMUONRefitter.cxx:127
 AliMUONRefitter.cxx:128
 AliMUONRefitter.cxx:129
 AliMUONRefitter.cxx:130
 AliMUONRefitter.cxx:131
 AliMUONRefitter.cxx:132
 AliMUONRefitter.cxx:133
 AliMUONRefitter.cxx:134
 AliMUONRefitter.cxx:135
 AliMUONRefitter.cxx:136
 AliMUONRefitter.cxx:137
 AliMUONRefitter.cxx:138
 AliMUONRefitter.cxx:139
 AliMUONRefitter.cxx:140
 AliMUONRefitter.cxx:141
 AliMUONRefitter.cxx:142
 AliMUONRefitter.cxx:143
 AliMUONRefitter.cxx:144
 AliMUONRefitter.cxx:145
 AliMUONRefitter.cxx:146
 AliMUONRefitter.cxx:147
 AliMUONRefitter.cxx:148
 AliMUONRefitter.cxx:149
 AliMUONRefitter.cxx:150
 AliMUONRefitter.cxx:151
 AliMUONRefitter.cxx:152
 AliMUONRefitter.cxx:153
 AliMUONRefitter.cxx:154
 AliMUONRefitter.cxx:155
 AliMUONRefitter.cxx:156
 AliMUONRefitter.cxx:157
 AliMUONRefitter.cxx:158
 AliMUONRefitter.cxx:159
 AliMUONRefitter.cxx:160
 AliMUONRefitter.cxx:161
 AliMUONRefitter.cxx:162
 AliMUONRefitter.cxx:163
 AliMUONRefitter.cxx:164
 AliMUONRefitter.cxx:165
 AliMUONRefitter.cxx:166
 AliMUONRefitter.cxx:167
 AliMUONRefitter.cxx:168
 AliMUONRefitter.cxx:169
 AliMUONRefitter.cxx:170
 AliMUONRefitter.cxx:171
 AliMUONRefitter.cxx:172
 AliMUONRefitter.cxx:173
 AliMUONRefitter.cxx:174
 AliMUONRefitter.cxx:175
 AliMUONRefitter.cxx:176
 AliMUONRefitter.cxx:177
 AliMUONRefitter.cxx:178
 AliMUONRefitter.cxx:179
 AliMUONRefitter.cxx:180
 AliMUONRefitter.cxx:181
 AliMUONRefitter.cxx:182
 AliMUONRefitter.cxx:183
 AliMUONRefitter.cxx:184
 AliMUONRefitter.cxx:185
 AliMUONRefitter.cxx:186
 AliMUONRefitter.cxx:187
 AliMUONRefitter.cxx:188
 AliMUONRefitter.cxx:189
 AliMUONRefitter.cxx:190
 AliMUONRefitter.cxx:191
 AliMUONRefitter.cxx:192
 AliMUONRefitter.cxx:193
 AliMUONRefitter.cxx:194
 AliMUONRefitter.cxx:195
 AliMUONRefitter.cxx:196
 AliMUONRefitter.cxx:197
 AliMUONRefitter.cxx:198
 AliMUONRefitter.cxx:199
 AliMUONRefitter.cxx:200
 AliMUONRefitter.cxx:201
 AliMUONRefitter.cxx:202
 AliMUONRefitter.cxx:203
 AliMUONRefitter.cxx:204
 AliMUONRefitter.cxx:205
 AliMUONRefitter.cxx:206
 AliMUONRefitter.cxx:207
 AliMUONRefitter.cxx:208
 AliMUONRefitter.cxx:209
 AliMUONRefitter.cxx:210
 AliMUONRefitter.cxx:211
 AliMUONRefitter.cxx:212
 AliMUONRefitter.cxx:213
 AliMUONRefitter.cxx:214
 AliMUONRefitter.cxx:215
 AliMUONRefitter.cxx:216
 AliMUONRefitter.cxx:217
 AliMUONRefitter.cxx:218
 AliMUONRefitter.cxx:219
 AliMUONRefitter.cxx:220
 AliMUONRefitter.cxx:221
 AliMUONRefitter.cxx:222
 AliMUONRefitter.cxx:223
 AliMUONRefitter.cxx:224
 AliMUONRefitter.cxx:225
 AliMUONRefitter.cxx:226
 AliMUONRefitter.cxx:227
 AliMUONRefitter.cxx:228
 AliMUONRefitter.cxx:229
 AliMUONRefitter.cxx:230
 AliMUONRefitter.cxx:231
 AliMUONRefitter.cxx:232
 AliMUONRefitter.cxx:233
 AliMUONRefitter.cxx:234
 AliMUONRefitter.cxx:235
 AliMUONRefitter.cxx:236
 AliMUONRefitter.cxx:237
 AliMUONRefitter.cxx:238
 AliMUONRefitter.cxx:239
 AliMUONRefitter.cxx:240
 AliMUONRefitter.cxx:241
 AliMUONRefitter.cxx:242
 AliMUONRefitter.cxx:243
 AliMUONRefitter.cxx:244
 AliMUONRefitter.cxx:245
 AliMUONRefitter.cxx:246
 AliMUONRefitter.cxx:247
 AliMUONRefitter.cxx:248
 AliMUONRefitter.cxx:249
 AliMUONRefitter.cxx:250
 AliMUONRefitter.cxx:251
 AliMUONRefitter.cxx:252
 AliMUONRefitter.cxx:253
 AliMUONRefitter.cxx:254
 AliMUONRefitter.cxx:255
 AliMUONRefitter.cxx:256
 AliMUONRefitter.cxx:257
 AliMUONRefitter.cxx:258
 AliMUONRefitter.cxx:259
 AliMUONRefitter.cxx:260
 AliMUONRefitter.cxx:261
 AliMUONRefitter.cxx:262
 AliMUONRefitter.cxx:263
 AliMUONRefitter.cxx:264
 AliMUONRefitter.cxx:265
 AliMUONRefitter.cxx:266
 AliMUONRefitter.cxx:267
 AliMUONRefitter.cxx:268
 AliMUONRefitter.cxx:269
 AliMUONRefitter.cxx:270
 AliMUONRefitter.cxx:271
 AliMUONRefitter.cxx:272
 AliMUONRefitter.cxx:273
 AliMUONRefitter.cxx:274
 AliMUONRefitter.cxx:275
 AliMUONRefitter.cxx:276
 AliMUONRefitter.cxx:277
 AliMUONRefitter.cxx:278
 AliMUONRefitter.cxx:279
 AliMUONRefitter.cxx:280
 AliMUONRefitter.cxx:281
 AliMUONRefitter.cxx:282
 AliMUONRefitter.cxx:283
 AliMUONRefitter.cxx:284
 AliMUONRefitter.cxx:285
 AliMUONRefitter.cxx:286
 AliMUONRefitter.cxx:287
 AliMUONRefitter.cxx:288
 AliMUONRefitter.cxx:289
 AliMUONRefitter.cxx:290
 AliMUONRefitter.cxx:291
 AliMUONRefitter.cxx:292
 AliMUONRefitter.cxx:293
 AliMUONRefitter.cxx:294
 AliMUONRefitter.cxx:295
 AliMUONRefitter.cxx:296
 AliMUONRefitter.cxx:297
 AliMUONRefitter.cxx:298
 AliMUONRefitter.cxx:299
 AliMUONRefitter.cxx:300
 AliMUONRefitter.cxx:301
 AliMUONRefitter.cxx:302
 AliMUONRefitter.cxx:303
 AliMUONRefitter.cxx:304
 AliMUONRefitter.cxx:305
 AliMUONRefitter.cxx:306
 AliMUONRefitter.cxx:307
 AliMUONRefitter.cxx:308
 AliMUONRefitter.cxx:309
 AliMUONRefitter.cxx:310
 AliMUONRefitter.cxx:311
 AliMUONRefitter.cxx:312
 AliMUONRefitter.cxx:313
 AliMUONRefitter.cxx:314
 AliMUONRefitter.cxx:315
 AliMUONRefitter.cxx:316
 AliMUONRefitter.cxx:317
 AliMUONRefitter.cxx:318
 AliMUONRefitter.cxx:319
 AliMUONRefitter.cxx:320
 AliMUONRefitter.cxx:321
 AliMUONRefitter.cxx:322
 AliMUONRefitter.cxx:323
 AliMUONRefitter.cxx:324
 AliMUONRefitter.cxx:325
 AliMUONRefitter.cxx:326
 AliMUONRefitter.cxx:327
 AliMUONRefitter.cxx:328
 AliMUONRefitter.cxx:329
 AliMUONRefitter.cxx:330
 AliMUONRefitter.cxx:331
 AliMUONRefitter.cxx:332
 AliMUONRefitter.cxx:333
 AliMUONRefitter.cxx:334
 AliMUONRefitter.cxx:335
 AliMUONRefitter.cxx:336
 AliMUONRefitter.cxx:337
 AliMUONRefitter.cxx:338
 AliMUONRefitter.cxx:339
 AliMUONRefitter.cxx:340
 AliMUONRefitter.cxx:341
 AliMUONRefitter.cxx:342
 AliMUONRefitter.cxx:343
 AliMUONRefitter.cxx:344
 AliMUONRefitter.cxx:345
 AliMUONRefitter.cxx:346
 AliMUONRefitter.cxx:347
 AliMUONRefitter.cxx:348
 AliMUONRefitter.cxx:349
 AliMUONRefitter.cxx:350
 AliMUONRefitter.cxx:351
 AliMUONRefitter.cxx:352
 AliMUONRefitter.cxx:353
 AliMUONRefitter.cxx:354
 AliMUONRefitter.cxx:355
 AliMUONRefitter.cxx:356
 AliMUONRefitter.cxx:357
 AliMUONRefitter.cxx:358
 AliMUONRefitter.cxx:359
 AliMUONRefitter.cxx:360
 AliMUONRefitter.cxx:361
 AliMUONRefitter.cxx:362
 AliMUONRefitter.cxx:363
 AliMUONRefitter.cxx:364
 AliMUONRefitter.cxx:365
 AliMUONRefitter.cxx:366
 AliMUONRefitter.cxx:367
 AliMUONRefitter.cxx:368
 AliMUONRefitter.cxx:369
 AliMUONRefitter.cxx:370
 AliMUONRefitter.cxx:371
 AliMUONRefitter.cxx:372
 AliMUONRefitter.cxx:373
 AliMUONRefitter.cxx:374
 AliMUONRefitter.cxx:375
 AliMUONRefitter.cxx:376
 AliMUONRefitter.cxx:377
 AliMUONRefitter.cxx:378
 AliMUONRefitter.cxx:379
 AliMUONRefitter.cxx:380
 AliMUONRefitter.cxx:381
 AliMUONRefitter.cxx:382
 AliMUONRefitter.cxx:383
 AliMUONRefitter.cxx:384
 AliMUONRefitter.cxx:385
 AliMUONRefitter.cxx:386
 AliMUONRefitter.cxx:387
 AliMUONRefitter.cxx:388
 AliMUONRefitter.cxx:389
 AliMUONRefitter.cxx:390
 AliMUONRefitter.cxx:391
 AliMUONRefitter.cxx:392
 AliMUONRefitter.cxx:393
 AliMUONRefitter.cxx:394
 AliMUONRefitter.cxx:395
 AliMUONRefitter.cxx:396
 AliMUONRefitter.cxx:397
 AliMUONRefitter.cxx:398
 AliMUONRefitter.cxx:399
 AliMUONRefitter.cxx:400
 AliMUONRefitter.cxx:401
 AliMUONRefitter.cxx:402
 AliMUONRefitter.cxx:403
 AliMUONRefitter.cxx:404
 AliMUONRefitter.cxx:405
 AliMUONRefitter.cxx:406
 AliMUONRefitter.cxx:407
 AliMUONRefitter.cxx:408
 AliMUONRefitter.cxx:409
 AliMUONRefitter.cxx:410
 AliMUONRefitter.cxx:411
 AliMUONRefitter.cxx:412
 AliMUONRefitter.cxx:413
 AliMUONRefitter.cxx:414
 AliMUONRefitter.cxx:415
 AliMUONRefitter.cxx:416
 AliMUONRefitter.cxx:417
 AliMUONRefitter.cxx:418
 AliMUONRefitter.cxx:419
 AliMUONRefitter.cxx:420
 AliMUONRefitter.cxx:421
 AliMUONRefitter.cxx:422
 AliMUONRefitter.cxx:423
 AliMUONRefitter.cxx:424
 AliMUONRefitter.cxx:425
 AliMUONRefitter.cxx:426
 AliMUONRefitter.cxx:427
 AliMUONRefitter.cxx:428
 AliMUONRefitter.cxx:429
 AliMUONRefitter.cxx:430
 AliMUONRefitter.cxx:431
 AliMUONRefitter.cxx:432
 AliMUONRefitter.cxx:433
 AliMUONRefitter.cxx:434
 AliMUONRefitter.cxx:435
 AliMUONRefitter.cxx:436
 AliMUONRefitter.cxx:437
 AliMUONRefitter.cxx:438
 AliMUONRefitter.cxx:439
 AliMUONRefitter.cxx:440
 AliMUONRefitter.cxx:441
 AliMUONRefitter.cxx:442
 AliMUONRefitter.cxx:443
 AliMUONRefitter.cxx:444
 AliMUONRefitter.cxx:445
 AliMUONRefitter.cxx:446
 AliMUONRefitter.cxx:447
 AliMUONRefitter.cxx:448
 AliMUONRefitter.cxx:449