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 AliMUONTracker
///
/// Steering class for use in global tracking framework;
/// reconstruct tracks from recpoints
///
/// Actual tracking is performed by some AliMUONVTrackReconstructor children
/// Tracking modes (ORIGINAL, KALMAN) and associated options and 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)
///
/// \author Christian Finck and Laurent Aphecetche, SUBATECH Nantes
//-----------------------------------------------------------------------------

#include "AliMUONTracker.h"

#include "AliCodeTimer.h"
#include "AliESDEvent.h"
#include "AliESDMuonTrack.h"
#include "AliESDVertex.h"
#include "AliLog.h"
#include "AliMUONClusterStoreV2.h"
#include "AliMUONESDInterface.h"
#include "AliMUONLegacyClusterServer.h"
#include "AliMUONRecoParam.h"
#include "AliMUONReconstructor.h"
#include "AliMUONTrack.h"
#include "AliMUONTrackExtrap.h"
#include "AliMUONTrackHitPattern.h"
#include "AliMUONTrackParam.h"
#include "AliMUONTrackReconstructor.h"
#include "AliMUONTrackReconstructorK.h"
#include "AliMUONTrackStoreV1.h"
#include "AliMUONTriggerTrackStoreV1.h"
#include "AliMUONTriggerTrack.h"
#include "AliMUONLocalTrigger.h"
#include "AliMUONVClusterServer.h"
#include "AliMUONVDigitStore.h"
#include "AliMUONVTriggerStore.h"
#include "AliMUONTriggerUtilities.h"
#include <Riostream.h>
#include <TRandom.h>
#include <TTree.h>
#include "AliLog.h"

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


//_____________________________________________________________________________
AliMUONTracker::AliMUONTracker(const AliMUONRecoParam* recoParam,
                               AliMUONVClusterServer* clusterServer,
                               AliMUONVDigitStore& digitStore,
                               const AliMUONGeometryTransformer* transformer,
                               const AliMUONTriggerCircuit* triggerCircuit,
                               const AliMUONTriggerUtilities* triggerUtilities)
: AliTracker(),
fkTransformer(transformer), // not owner
fkTriggerCircuit(triggerCircuit), // not owner
fTrackHitPatternMaker(0x0),
fTrackReco(0x0),
fClusterStore(0x0),
fTriggerStore(0x0),
fClusterServer(clusterServer), 
fIsOwnerOfClusterServer(kFALSE),
fkDigitStore(digitStore), // not owner
fInputClusterStore(0x0),
fTriggerTrackStore(0x0),
fkRecoParam(recoParam),
fInternalTrackStore(0x0)
{
  /// constructor
  
  if (fkTransformer)
    fTrackHitPatternMaker = new AliMUONTrackHitPattern(recoParam,*fkTransformer,fkDigitStore,triggerUtilities);
  
  if (!fClusterServer)
  {
    AliDebug(1,"No cluster server given. Will use AliMUONLegacyClusterServer");
    fIsOwnerOfClusterServer = kTRUE;
  }
  else
  {
    TIter next(fkDigitStore.CreateIterator());
    fClusterServer->UseDigits(next,&digitStore);
    
    SetupClusterServer(*fClusterServer);
  }
}

//_____________________________________________________________________________
AliMUONTracker::~AliMUONTracker()
{
  /// dtor
  
  delete fTrackReco;
  delete fTrackHitPatternMaker;
  delete fClusterStore;
  delete fTriggerStore;
  if ( fIsOwnerOfClusterServer ) delete fClusterServer;
  delete fInputClusterStore;
  delete fTriggerTrackStore;
  delete fInternalTrackStore;
}

//_____________________________________________________________________________
AliMUONVClusterStore*
AliMUONTracker::ClusterStore() const
{
  /// Return (and create if necessary) the cluster container
  if (!fClusterStore) 
  {
    fClusterStore = new AliMUONClusterStoreV2;
  }
  return fClusterStore;
}

//_____________________________________________________________________________
AliMUONVTriggerTrackStore*
AliMUONTracker::TriggerTrackStore() const
{
  /// Return (and create if necessary) the trigger track container
  if (!fTriggerTrackStore) 
  {
    fTriggerTrackStore = new AliMUONTriggerTrackStoreV1;
  }
  return fTriggerTrackStore;
}

//_____________________________________________________________________________
Int_t AliMUONTracker::LoadClusters(TTree* clustersTree)
{
  /// Load triggerStore from clustersTree

  if ( ! clustersTree ) {
    AliFatal("No clustersTree");
    return 1;
  }

  if ( !fTriggerStore ) 
  {
    fTriggerStore = AliMUONVTriggerStore::Create(*clustersTree);    
  }
  
  if (!fTriggerStore)
  {
    AliError("Could not get triggerStore");
    return 2;
  }
  
  if (!fInputClusterStore) 
  {
    fInputClusterStore = AliMUONVClusterStore::Create(*clustersTree);
    if (!fInputClusterStore)
    {
      AliError("Could not get clusterStore");
      return 3;
    }
    AliDebug(1,Form("Created %s from cluster tree",fInputClusterStore->ClassName()));
  }
    
  if ( !fClusterServer && fIsOwnerOfClusterServer )
  {
    if ( !fClusterServer ) 
    {
      fClusterServer = new AliMUONLegacyClusterServer(*fkTransformer,fInputClusterStore,
                                                      GetRecoParam()->BypassSt4(),
                                                      GetRecoParam()->BypassSt5());
      SetupClusterServer(*fClusterServer);
    }

  }
  
  fInputClusterStore->Clear();
  fInputClusterStore->Connect(*clustersTree,kFALSE);
  fTriggerStore->Clear();
  fTriggerStore->Connect(*clustersTree,kFALSE);
  
  clustersTree->GetEvent(0);

  return 0;
}

//_____________________________________________________________________________
Int_t AliMUONTracker::Clusters2Tracks(AliESDEvent* esd)
{
  /// Performs the tracking and store the resulting tracks in the ESD
  ///
  /// note that we're dealing with two cluster stores here : fInputClusterStore
  /// and ClusterStore().
  /// The first one is read from the TreeR and may be used by the cluster server 
  /// (that's the case for the legacy cluster server) to fill the other one.
  /// The second one is more dynamic and might be created on the fly by the cluster
  /// server (used by the combined tracking, in which case the first one is not used
  /// at all).
  
  AliCodeTimerAuto("",0)
  
  if (!fTrackReco) 
  {
    fTrackReco = CreateTrackReconstructor(GetRecoParam(),fClusterServer,fkTransformer);
    fInternalTrackStore = new AliMUONTrackStoreV1;
  }
  
  // if the required tracking mode does not exist
  if  (!fTrackReco) return 1;
  
  if ( ! ClusterStore() ) 
  {
    AliError("ClusterStore is NULL");
    return 2;
  }
  
  if (!fTriggerStore) {
    AliError("TriggerStore is NULL");
    return 3;
  }

  // Make trigger tracks
  if ( fkTriggerCircuit ) 
  {
    TriggerTrackStore()->Clear();
    fTrackReco->EventReconstructTrigger(*fkTriggerCircuit,*fTriggerStore,*(TriggerTrackStore()));
  }
  
  if ( TriggerTrackStore()->GetSize() > GetRecoParam()->GetMaxTriggerTracks() ) 
  {
    // cut to reject shower events
    
    AliCodeTimerAuto("MUON Shower events",1);

    AliWarning(Form("Probably got a shower event (%d trigger tracks). Will not reconstruct tracks.",
                    TriggerTrackStore()->GetSize()));
    
    return 0;
  }
       
  fTrackReco->EventReconstruct(*(ClusterStore()),*fInternalTrackStore);
  
  // Match tracker/trigger tracks
  if ( fTrackHitPatternMaker ) 
  {
    fTrackReco->ValidateTracksWithTrigger(*fInternalTrackStore,*(TriggerTrackStore()),*fTriggerStore,*fTrackHitPatternMaker);
  }
  
  // Fill ESD
  FillESD(*fInternalTrackStore,esd);
  
  fInternalTrackStore->Clear();
  ClusterStore()->Clear();
  
  return 0;
}

//_____________________________________________________________________________
void AliMUONTracker::FillESD(const AliMUONVTrackStore& trackStore, AliESDEvent* esd) const
{
  /// Fill the ESD from the trackStore
  AliDebug(1,"");
  AliCodeTimerAuto("",0)
  
  // get ITS vertex
  Double_t vertex[3] = {0., 0., 0.};
  const AliESDVertex* esdVert = esd->GetVertex(); 
  if (esdVert->GetNContributors() > 0 || !strcmp(esdVert->GetTitle(),"vertexer: smearMC")) {
    esdVert->GetXYZ(vertex);
    AliDebug(1,Form("found vertex (%e,%e,%e)",vertex[0],vertex[1],vertex[2]));
  }
  
  // fill ESD event including all info in ESD cluster if required and only for the given fraction of events
  AliMUONTrack* track;
  AliMUONLocalTrigger* locTrg;
  TIter next(trackStore.CreateIterator());
  if (GetRecoParam()->SaveFullClusterInESD() && 
      gRandom->Uniform(100.) <= GetRecoParam()->GetPercentOfFullClusterInESD()) {
    
    while ( ( track = static_cast<AliMUONTrack*>(next()) ) ) {
      
      if (track->GetMatchTrigger() > 0) {
	locTrg = static_cast<AliMUONLocalTrigger*>(fTriggerStore->FindLocal(track->LoCircuit()));
	AliMUONESDInterface::MUONToESD(*track, *esd, vertex, &fkDigitStore, locTrg);
      } else AliMUONESDInterface::MUONToESD(*track, *esd, vertex, &fkDigitStore);
      
    }
    
  } else {
    
    while ( ( track = static_cast<AliMUONTrack*>(next()) ) ) {
      
      if (track->GetMatchTrigger() > 0) {
	locTrg = static_cast<AliMUONLocalTrigger*>(fTriggerStore->FindLocal(track->LoCircuit()));
	AliMUONESDInterface::MUONToESD(*track, *esd, vertex, 0x0, locTrg);
      } else AliMUONESDInterface::MUONToESD(*track, *esd, vertex);
      
    }
    
  }
  
  // fill the local trigger decisions not matched with tracks (associate them to "ghost" tracks)
  UInt_t ghostId = 0xFFFFFFFF - 1;
  Bool_t matched = kFALSE;
  AliMUONTriggerTrack *triggerTrack;
  TIter itTriggerTrack(fTriggerTrackStore->CreateIterator());
  while ( ( triggerTrack = static_cast<AliMUONTriggerTrack*>(itTriggerTrack()) ) ) {
    
    locTrg = static_cast<AliMUONLocalTrigger*>(fTriggerStore->FindLocal(triggerTrack->GetLoTrgNum()));
    
    // check if this local trigger has already been matched
    TIter itTrack(trackStore.CreateIterator());
    while ( ( track = static_cast<AliMUONTrack*>(itTrack()) ) ) {
      matched = (track->LoCircuit() == locTrg->LoCircuit());
      if (matched) break;
    }
    if (matched) continue;

    AliMUONESDInterface::MUONToESD(*locTrg, *esd, ghostId, triggerTrack);
    
    ghostId -= 1;
  }
  
}

//_____________________________________________________________________________
AliMUONVTrackReconstructor* AliMUONTracker::CreateTrackReconstructor(const AliMUONRecoParam* recoParam,
								     AliMUONVClusterServer* clusterServer,
								     const AliMUONGeometryTransformer* transformer)
{
  /// Create track reconstructor, depending on tracking mode set in RecoParam
  
  AliMUONVTrackReconstructor* trackReco(0x0);
  
  TString opt(recoParam->GetTrackingMode());
  opt.ToUpper();
  
  if (strstr(opt,"ORIGINAL"))
  {
    trackReco = new AliMUONTrackReconstructor(recoParam,clusterServer,transformer);
  }
  else if (strstr(opt,"KALMAN"))
  {
    trackReco = new AliMUONTrackReconstructorK(recoParam,clusterServer,transformer);
  }
  else
  {
    AliErrorClass(Form("tracking mode \"%s\" does not exist",opt.Data()));
    return 0x0;
  }
  
  AliDebugClass(1,Form("Will use %s for tracking",trackReco->ClassName()));
  
  return trackReco;
}

//_____________________________________________________________________________
void AliMUONTracker::UnloadClusters()
{
  /// Clear internal clusterStore
  
  fInputClusterStore->Clear();
}


//_____________________________________________________________________________
void
AliMUONTracker::SetupClusterServer(AliMUONVClusterServer& clusterServer)
{
  /// Setup the cluster server
  
  if ( GetRecoParam()->BypassSt4() ||
			 GetRecoParam()->BypassSt5() )
  {
    Bool_t ok = clusterServer.UseTriggerTrackStore(TriggerTrackStore());
  
		TString msg1;
		TString msg2;
		
		if ( GetRecoParam()->BypassSt45() )
		{
			msg1 = "STATIONS 4 AND 5";
			msg2 = "THOSE TWO STATIONS";
		}
		else if ( GetRecoParam()->BypassSt4() )
		{
			msg1 = "STATION 4";
			msg2 = "THAT STATION";
		}
		else if ( GetRecoParam()->BypassSt5() )
		{
			msg1 = "STATION 5";
			msg2 = "THAT STATION";
		}
		
    if ( ok ) 
    {
      AliWarning(Form("WILL USE TRIGGER TRACKS TO GENERATE CLUSTERS IN %s, "
											"THUS BYPASSING REAL CLUSTERS IN %s!!!",msg1.Data(),msg2.Data()));    
    }
    else
    {
      AliWarning("BYPASSING OF ST4 AND/OR 5 REQUESTED, BUT CLUSTERSERVER DOES NOT SEEM TO SUPPORT IT !!!");    
    }
  }
}


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