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 AliMUONRecoCheck
/// Utility class to check reconstruction
/// Reconstructed tracks are compared to reference tracks. 
/// The reference tracks are built from AliTrackReference for the
/// hit in chamber (0..9) and from kinematics for the vertex parameters.     
//-----------------------------------------------------------------------------

// 13 Nov 2007:
// Added a method to create a list of reconstructed AliMUONTrack objects from
// ESD data. This is necessary since the track objects that are actually created
// during offline reconstruction are no longer stored to disk.
//  - Artur Szostak <artursz@iafrica.com>
// 25 Jan 2008:
// Use the new ESDInterface to create MUON objects from ESD data
// - Philippe Pillot
// 

#include "AliMUONRecoCheck.h"
#include "AliMUONTrack.h"
#include "AliMUONVTrackStore.h"
#include "AliMUONVCluster.h"
#include "AliMUONVClusterStore.h"
#include "AliMUONConstants.h"
#include "AliMUONESDInterface.h"
#include "AliMUONTrackParam.h"
#include "AliMUONTriggerTrack.h"
#include "AliMUONVTriggerTrackStore.h"
#include "AliMUONTriggerStoreV1.h"
#include "AliMUONLocalTrigger.h"
#include "AliMCEventHandler.h"
#include "AliMCEvent.h"
#include "AliStack.h"
#include "AliTrackReference.h"
#include "AliLog.h"
#include "AliESDEvent.h"
#include "AliESDMuonTrack.h"
#include "AliMUONDigitStoreV2S.h"
#include "AliMUONVDigit.h"
#include "AliMpVSegmentation.h"
#include "AliMpSegmentation.h"
#include "AliMpPad.h"

#include "AliGeomManager.h"
#include "AliCDBManager.h"
#include "AliMpCDB.h"
#include "AliMpDDLStore.h"
#include "AliMUONCDB.h"
#include "AliMUONGeometryTransformer.h"
#include "AliMUONTriggerCircuit.h"
#include "AliMUONVTrackReconstructor.h"
#include "AliMUONVTriggerStore.h"
#include "AliMUONCalibrationData.h"
#include "AliMUONTriggerElectronics.h"


#include "TGeoManager.h"

#include <TFile.h>
#include <TTree.h>
#include <TParticle.h>
#include <TParticlePDG.h>
#include <Riostream.h>

#include "AliMUONRecoCheck.h"

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

//_____________________________________________________________________________
AliMUONRecoCheck::AliMUONRecoCheck(const Char_t *esdFileName, const Char_t *pathSim)
: TObject(),
fMCEventHandler(new AliMCEventHandler()),
fESDEvent(new AliESDEvent()),
fESDTree (0x0),
fESDFile (0x0),
fCurrentEvent(0),
fTrackRefStore(0x0),
fRecoTrackRefStore(0x0),
fRecoTriggerRefStore(0x0),
fRecoTrackStore(0x0),
fRecoTriggerTrackStore(0x0),
fGeometryTransformer(0x0),
fTriggerCircuit(0x0),
fCalibrationData(0x0),
fTriggerElectronics(0x0),
fESDEventOwner(kTRUE)
{
  /// Normal ctor
  
  // TrackRefs and Particules
  fMCEventHandler->SetInputPath(pathSim);
  fMCEventHandler->InitIO("");
  
  // ESD MUON Tracks
  fESDFile = TFile::Open(esdFileName); // open the file
  if (!fESDFile || !fESDFile->IsOpen()) {
    AliError(Form("opening ESD file %s failed", esdFileName));
    fESDFile = 0x0;
    return;
  }
  fESDTree = (TTree*) fESDFile->Get("esdTree"); // get the tree
  if (!fESDTree) {
    AliError("no ESD tree found");
    fESDFile->Close();
    fESDFile = 0x0;
    return;
  }
  fESDEvent->ReadFromTree(fESDTree); // link fESDEvent to the tree
}

//_____________________________________________________________________________
AliMUONRecoCheck::AliMUONRecoCheck(AliESDEvent *esdEvent, AliMCEventHandler *mcEventHandler)
: TObject(),
fMCEventHandler(0),
fESDEvent(0),
fESDTree (0x0),
fESDFile (0x0),
fCurrentEvent(0),
fTrackRefStore(0x0),
fRecoTrackRefStore(0x0),
fRecoTriggerRefStore(0x0),
fRecoTrackStore(0x0),
fRecoTriggerTrackStore(0x0),
fGeometryTransformer(0x0),
fTriggerCircuit(0x0),
fCalibrationData(0x0),
fTriggerElectronics(0x0),
fESDEventOwner(kFALSE)
{
  /// Normal ctor
  
  // TrackRefs and Particules
  fMCEventHandler = mcEventHandler;
  
  // ESD MUON Tracks
  fESDEvent = esdEvent;
}

//_____________________________________________________________________________
AliMUONRecoCheck::~AliMUONRecoCheck()
{
  /// Destructor
  if (fESDEventOwner) {
    delete fMCEventHandler;
    delete fESDEvent;
    if (fESDFile) fESDFile->Close();
  }
  ResetStores();
  delete fGeometryTransformer;
  delete fTriggerCircuit;
  delete fTriggerElectronics;
  delete fCalibrationData;
}

//_____________________________________________________________________________
void AliMUONRecoCheck::ResetStores()
{
  /// Deletes all the store objects that have been created and resets the pointers to 0x0
  delete fTrackRefStore;      fTrackRefStore = 0x0;
  delete fRecoTrackRefStore;  fRecoTrackRefStore = 0x0;
  delete fRecoTriggerRefStore;  fRecoTriggerRefStore = 0x0;
  delete fRecoTrackStore;     fRecoTrackStore = 0x0;
  delete fRecoTriggerTrackStore; fRecoTriggerTrackStore = 0x0;
}

//_____________________________________________________________________________
Bool_t AliMUONRecoCheck::InitCircuit()
{
  
  if ( fTriggerCircuit ) return kTRUE;
  
  if ( ! InitGeometryTransformer() ) return kFALSE;
  
  // reset tracker for local trigger to trigger track conversion
  if ( ! AliMUONESDInterface::GetTracker() ) AliMUONESDInterface::ResetTracker();
  
  fTriggerCircuit = new AliMUONTriggerCircuit(fGeometryTransformer);
  
  return kTRUE;
}


//_____________________________________________________________________________
Int_t AliMUONRecoCheck::GetRunNumber()
{
  /// Return the run number of the current ESD event
  
  if (fESDEventOwner && fRecoTrackStore == 0x0 && fRecoTriggerTrackStore == 0x0) {
    if (!fESDTree || fESDTree->GetEvent(fCurrentEvent) <= 0) {
      AliError(Form("fails to read ESD object for event %d: cannot get the run number",fCurrentEvent));
      return -1;
    }
  }
  
  return fESDEvent->GetRunNumber();
}

//_____________________________________________________________________________
Int_t AliMUONRecoCheck::NumberOfEvents() const
{
  /// Return the number of events
  if (fESDEventOwner && fESDTree) return fESDTree->GetEntries();
  return 0;
}

//_____________________________________________________________________________
AliMUONVTrackStore* AliMUONRecoCheck::ReconstructedTracks(Int_t event, Bool_t refit)
{
  /// Return a track store containing the reconstructed tracks (converted into 
  /// MUONTrack objects) for a given event.
  /// Track parameters at each clusters are computed or not depending on the flag "refit".
  /// If not, only the track parameters at first cluster are valid.
  
  if (!fESDEventOwner) {
    if (fRecoTrackStore == 0x0) MakeReconstructedTracks(refit);
    return fRecoTrackStore;
  }

  if (event != fCurrentEvent) {
    ResetStores();
    fCurrentEvent = event;
  }
  
  if (fRecoTrackStore != 0x0) return fRecoTrackStore;
  else {
    if (!fESDTree) return 0x0;
    if (fESDTree->GetEvent(event) <= 0) {
      AliError(Form("fails to read ESD object for event %d", event));
      return 0x0;
    }
    MakeReconstructedTracks(refit);
    return fRecoTrackStore;
  }
}


//_____________________________________________________________________________
AliMUONVTriggerTrackStore* AliMUONRecoCheck::TriggeredTracks(Int_t event)
{
  /// Return a track store containing the reconstructed trigger tracks (converted into 
  /// MUONTriggerTrack objects) for a given event.
	
  if (!fESDEventOwner) {
    if (fRecoTriggerTrackStore == 0x0) MakeTriggeredTracks();
    return fRecoTriggerTrackStore;
  }
	
  if (event != fCurrentEvent) {
    ResetStores();
    fCurrentEvent = event;
  }
	
  if (fRecoTriggerTrackStore != 0x0) return fRecoTriggerTrackStore;
  else {
    if (!fESDTree) return 0x0;
    if (fESDTree->GetEvent(event) <= 0) {
      AliError(Form("fails to read ESD object for event %d", event));
      return 0x0;
    }
    MakeTriggeredTracks();
    return fRecoTriggerTrackStore;
  }
}


//_____________________________________________________________________________
AliMUONVTrackStore* AliMUONRecoCheck::TrackRefs(Int_t event)
{
  /// Return a track store containing the track references (converted into 
  /// MUONTrack objects) for a given event
  
  if (!fESDEventOwner) {
    if (fTrackRefStore == 0x0) MakeTrackRefs();
    return fTrackRefStore;
  }

  if (event != fCurrentEvent) {
    ResetStores();
    fCurrentEvent = event;
  }
  
  if (fTrackRefStore != 0x0) return fTrackRefStore;
  else {
    if (!fMCEventHandler->BeginEvent(event)) {
      AliError(Form("fails to read MC objects for event %d", event));
      return 0x0;
    }
    MakeTrackRefs();
    fMCEventHandler->FinishEvent();
    return fTrackRefStore;
  }
}

//_____________________________________________________________________________
AliMUONVTriggerTrackStore* AliMUONRecoCheck::TriggerableTracks(Int_t event)
{
  /// Return a trigger track store containing the triggerable track references (converted into 
  /// AliMUONTriggerTrack objects) for a given event
	
  if (!fESDEventOwner) {
    if (fRecoTriggerRefStore == 0x0) MakeTriggerableTracks();
    return fRecoTriggerRefStore;
  }
	
  if (event != fCurrentEvent) {
    ResetStores();
    fCurrentEvent = event;
  }
	
  if (fRecoTriggerRefStore != 0x0) return fRecoTriggerRefStore;
  else {
    if (!fMCEventHandler->BeginEvent(event)) {
      AliError(Form("fails to read MC objects for event %d", event));
      return 0x0;
    }
    MakeTriggerableTracks();
    fMCEventHandler->FinishEvent();
    return fRecoTriggerRefStore;
  }
}


//_____________________________________________________________________________
AliMUONVTrackStore* AliMUONRecoCheck::ReconstructibleTracks(Int_t event, UInt_t requestedStationMask,
							    Bool_t request2ChInSameSt45, Bool_t hitInFrontOfPad)
{
  /// Return a track store containing the reconstructible tracks for a given event,
  /// according to the mask of requested stations and the minimum number of chambers hit in stations 4 & 5.

  if (!fESDEventOwner) {
    if (fRecoTrackRefStore == 0x0) {
      if (TrackRefs(event) == 0x0) return 0x0;
      MakeReconstructibleTracks(requestedStationMask, request2ChInSameSt45, hitInFrontOfPad);
    }
    return fRecoTrackRefStore;
  }

  if (event != fCurrentEvent) {
    ResetStores();
    fCurrentEvent = event;
  }
  
  if (fRecoTrackRefStore != 0x0) return fRecoTrackRefStore;
  else {
    if (TrackRefs(event) == 0x0) return 0x0;
    MakeReconstructibleTracks(requestedStationMask, request2ChInSameSt45, hitInFrontOfPad);
    return fRecoTrackRefStore;
  }
}


//_____________________________________________________________________________
void AliMUONRecoCheck::MakeReconstructedTracks(Bool_t refit)
{
  /// Make reconstructed tracks
  if (!(fRecoTrackStore = AliMUONESDInterface::NewTrackStore())) return;
  
  // loop over all reconstructed tracks and add them to the store (skip ghosts)
  Int_t nTracks = (Int_t) fESDEvent->GetNumberOfMuonTracks();
  for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
    AliESDMuonTrack* esdTrack = fESDEvent->GetMuonTrack(iTrack);
    if (esdTrack->ContainTrackerData()) AliMUONESDInterface::Add(*esdTrack, *fRecoTrackStore, refit);
  }
  
}


//_____________________________________________________________________________
void AliMUONRecoCheck::MakeTriggeredTracks()
{
  /// Make reconstructed trigger tracks
  if (!(fRecoTriggerTrackStore = AliMUONESDInterface::NewTriggerTrackStore())) return;
	
  AliMUONVTriggerStore* tmpTriggerStore = AliMUONESDInterface::NewTriggerStore();
  if ( ! tmpTriggerStore ) return;
  
  // loop over all reconstructed tracks and add them to the store (include ghosts)
  Int_t nTracks = (Int_t) fESDEvent->GetNumberOfMuonTracks();
  for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
    AliESDMuonTrack* esdTrack = fESDEvent->GetMuonTrack(iTrack);
    if (esdTrack->ContainTriggerData()) AliMUONESDInterface::Add(*esdTrack, *tmpTriggerStore);
  }
	
  if ( InitCircuit() ) {
  
    AliMUONVTrackReconstructor* tracker = AliMUONESDInterface::GetTracker();
    tracker->EventReconstructTrigger(*fTriggerCircuit, *tmpTriggerStore, *fRecoTriggerTrackStore);
  }
  
  delete tmpTriggerStore;
}

//_____________________________________________________________________________
Bool_t AliMUONRecoCheck::TriggerToTrack(const AliMUONLocalTrigger& locTrg, AliMUONTriggerTrack& triggerTrack)
{
  /// Make trigger track from local trigger info
  if ( ! InitCircuit() ) return kFALSE;
  AliMUONVTrackReconstructor* tracker = AliMUONESDInterface::GetTracker();
  return tracker->TriggerToTrack(*fTriggerCircuit, locTrg, triggerTrack);
}


//_____________________________________________________________________________
void AliMUONRecoCheck::MakeTrackRefs()
{
  /// Make reconstructible tracks
  AliMUONVTrackStore *tmpTrackRefStore = AliMUONESDInterface::NewTrackStore();
  if (!tmpTrackRefStore) return;
  
  Double_t x, y, z, pX, pY, pZ, bendingSlope, nonBendingSlope, inverseBendingMomentum;
  TParticle* particle;
  TClonesArray* trackRefs;
  Int_t nTrackRef = fMCEventHandler->MCEvent()->GetNumberOfTracks();
  AliMUONVCluster* hit = AliMUONESDInterface::NewCluster();
  
  // loop over simulated tracks
  for (Int_t iTrackRef  = 0; iTrackRef < nTrackRef; ++iTrackRef) {
    Int_t nHits = fMCEventHandler->GetParticleAndTR(iTrackRef, particle, trackRefs);
    
    // skip empty trackRefs
    if (nHits < 1) continue;
    
    // get the particle charge for further calculation
    TParticlePDG* ppdg = particle->GetPDG();
    Int_t charge = ppdg != NULL ? (Int_t)(ppdg->Charge()/3.0) : 0;
    
    AliMUONTrack track;
    
    // loop over simulated track hits
    for (Int_t iHit = 0; iHit < nHits; ++iHit) {        
      AliTrackReference* trackReference = static_cast<AliTrackReference*>(trackRefs->UncheckedAt(iHit));
      
      // skip trackRefs not in MUON
      if (trackReference->DetectorId() != AliTrackReference::kMUON) continue;
    
      // Get track parameters of current hit
      x = trackReference->X();
      y = trackReference->Y();
      z = trackReference->Z();
      pX = trackReference->Px();
      pY = trackReference->Py();
      pZ = trackReference->Pz();
      
      // check chamberId of current trackReference
      Int_t detElemId = trackReference->UserId();
      Int_t chamberId = detElemId / 100 - 1;
      if (chamberId < 0 || chamberId >= AliMUONConstants::NTrackingCh()) continue;
      
      // set hit parameters
      hit->SetUniqueID(AliMUONVCluster::BuildUniqueID(chamberId, detElemId, iHit));
      hit->SetXYZ(x,y,z);
      hit->SetErrXY(0.,0.);
      
      // compute track parameters at hit
      bendingSlope = 0;
      nonBendingSlope = 0;
      inverseBendingMomentum = 0;
      if (TMath::Abs(pZ) > 0) {
	bendingSlope = pY/pZ;
	nonBendingSlope = pX/pZ;
      }
      Double_t pYZ = TMath::Sqrt(pY*pY+pZ*pZ);
      if (pYZ >0) inverseBendingMomentum = 1/pYZ; 
      inverseBendingMomentum *= charge;
      
      // set track parameters at hit
      AliMUONTrackParam trackParam;
      trackParam.SetNonBendingCoor(x);
      trackParam.SetBendingCoor(y);
      trackParam.SetZ(z);
      trackParam.SetBendingSlope(bendingSlope);
      trackParam.SetNonBendingSlope(nonBendingSlope);
      trackParam.SetInverseBendingMomentum(inverseBendingMomentum);
      
      // add track parameters at current hit to the track
      track.AddTrackParamAtCluster(trackParam, *hit, kTRUE);
    }
    
    // if none of the track hits was in MUON, goto the next track
    if (track.GetNClusters() < 1) continue;
    
    // get track parameters at particle's vertex
    x = particle->Vx();
    y = particle->Vy();
    z = particle->Vz();
    pX = particle->Px();
    pY = particle->Py();
    pZ = particle->Pz();
    
    // compute rest of track parameters at particle's vertex
    bendingSlope = 0;
    nonBendingSlope = 0;
    inverseBendingMomentum = 0;
    if (TMath::Abs(pZ) > 0) {
      bendingSlope = pY/pZ;
      nonBendingSlope = pX/pZ;
    }
    Double_t pYZ = TMath::Sqrt(pY*pY+pZ*pZ);
    if (pYZ >0) inverseBendingMomentum = 1/pYZ;
    inverseBendingMomentum *= charge;
    
    // set track parameters at particle's vertex
    AliMUONTrackParam trackParamAtVertex;
    trackParamAtVertex.SetNonBendingCoor(x);
    trackParamAtVertex.SetBendingCoor(y);
    trackParamAtVertex.SetZ(z);
    trackParamAtVertex.SetBendingSlope(bendingSlope);
    trackParamAtVertex.SetNonBendingSlope(nonBendingSlope);
    trackParamAtVertex.SetInverseBendingMomentum(inverseBendingMomentum);
    
    // add track parameters at vertex
    track.SetTrackParamAtVertex(&trackParamAtVertex);
    
    // store the track
    track.SetUniqueID(iTrackRef);
    tmpTrackRefStore->Add(track);
  }
  
  CleanMuonTrackRef(tmpTrackRefStore);
  
  delete hit;
  delete tmpTrackRefStore;
}

//_____________________________________________________________________________
void AliMUONRecoCheck::MakeTriggerableTracks()
{
  /// Make triggerable tracks
 if (!(fRecoTriggerRefStore = AliMUONESDInterface::NewTriggerTrackStore()))
   return;

  Double_t x, y, z, slopeX, slopeY, pZ, xLoc, yLoc, zLoc;
  TParticle* particle;
  TClonesArray* trackRefs;
  Int_t nTrackRef = fMCEventHandler->MCEvent()->GetNumberOfTracks();
	
  // loop over simulated tracks
  for (Int_t iTrackRef  = 0; iTrackRef < nTrackRef; ++iTrackRef) {
    Int_t nHits = fMCEventHandler->GetParticleAndTR(iTrackRef, particle, trackRefs);
		
    // skip empty trackRefs
    if (nHits < 1) continue;
				
    AliMUONTriggerTrack track;
    AliMUONDigitStoreV2S digitStore;
    Int_t hitsOnTrigger = 0;
    Int_t currCh = -1;
		
    // loop over simulated track hits
    for (Int_t iHit = 0; iHit < nHits; ++iHit) {        
      AliTrackReference* trackReference = static_cast<AliTrackReference*>(trackRefs->UncheckedAt(iHit));
			
      // skip trackRefs not in MUON
      if (trackReference->DetectorId() != AliTrackReference::kMUON) continue;

      // check chamberId of current trackReference
      Int_t detElemId = trackReference->UserId();
      Int_t chamberId = detElemId / 100 - 1;
      if (chamberId < AliMUONConstants::NTrackingCh() || chamberId >= AliMUONConstants::NCh() ) continue;

      // Get track parameters of current hit
      x = trackReference->X();
      y = trackReference->Y();
      z = trackReference->Z();
      
      if ( InitTriggerResponse() ) {
        fGeometryTransformer->Global2Local(detElemId, x, y, z, xLoc, yLoc, zLoc);
      
        Int_t nboard = 0;
        for ( Int_t cath = AliMp::kCath0; cath <= AliMp::kCath1; ++cath )
        {
          const AliMpVSegmentation* seg 
          = AliMpSegmentation::Instance()
          ->GetMpSegmentation(detElemId,AliMp::GetCathodType(cath));
        
          AliMpPad pad = seg->PadByPosition(xLoc,yLoc,kFALSE);
          Int_t ix = pad.GetIx();
          Int_t iy = pad.GetIy();
        
          if ( !pad.IsValid() ) continue;
        
          if ( cath == AliMp::kCath0 ) nboard = pad.GetLocalBoardId(0);
        
          AliMUONVDigit* digit = digitStore.Add(detElemId, nboard, pad.GetLocalBoardChannel(0),
						cath, AliMUONVDigitStore::kDeny);
          if (digit) {
	    digit->SetPadXY(ix,iy);
	    digit->SetCharge(1.);
	  }
        }
      }
    
      if ( hitsOnTrigger == 0 ) {
        pZ = trackReference->Pz();
        slopeX = ( pZ == 0. ) ? 99999. : trackReference->Px() / pZ;
        slopeY = ( pZ == 0. ) ? 99999. : trackReference->Py() / pZ;

        track.SetX11(x);
        track.SetY11(y);
        track.SetZ11(z);
        track.SetSlopeX(slopeX);
        track.SetSlopeY(slopeY);
      }

      if ( currCh != chamberId ) {
        hitsOnTrigger++;
        currCh = chamberId;
      }

    } // loop on hits
    
    if ( hitsOnTrigger < 3 ) continue;

    // Check if the track passes the trigger algorithm
    if ( InitTriggerResponse() ) {
      AliMUONTriggerStoreV1 triggerStore;
      fTriggerElectronics->Digits2Trigger(digitStore,triggerStore);
    
      TIter next(triggerStore.CreateIterator());
      AliMUONLocalTrigger* locTrg(0x0);
    
      Int_t ptCutLevel = 0;
    
      while ( ( locTrg = static_cast<AliMUONLocalTrigger*>(next()) ) )
      {
        if ( locTrg->IsTrigX() && locTrg->IsTrigY() ) 
        {
          ptCutLevel = TMath::Max(ptCutLevel, 1);
          if ( locTrg->LoHpt() ) ptCutLevel = TMath::Max(ptCutLevel, 3);
          else if ( locTrg->LoLpt() ) ptCutLevel = TMath::Max(ptCutLevel, 2);
        } // board is fired 
      } // end of loop on Local Trigger
      track.SetPtCutLevel(ptCutLevel);
    }
    track.SetUniqueID(iTrackRef);
    fRecoTriggerRefStore->Add(track);
  }
}


//_____________________________________________________________________________
void AliMUONRecoCheck::CleanMuonTrackRef(const AliMUONVTrackStore *tmpTrackRefStore)
{
  /// Re-calculate hits parameters because two AliTrackReferences are recorded for
  /// each chamber (one when particle is entering + one when particle is leaving 
  /// the sensitive volume) 
  if (!(fTrackRefStore = AliMUONESDInterface::NewTrackStore())) return;
  
  Double_t maxGasGap = 1.; // cm 
  Double_t x, y, z, pX, pY, pZ, x1, y1, z1, pX1, pY1, pZ1, z2;
  Double_t bendingSlope,nonBendingSlope,inverseBendingMomentum;
  AliMUONVCluster* hit = AliMUONESDInterface::NewCluster();
  
  // create iterator
  TIter next(tmpTrackRefStore->CreateIterator());
  
  // loop over tmpTrackRef
  AliMUONTrack* track;
  while ( ( track = static_cast<AliMUONTrack*>(next()) ) ) {
    
    AliMUONTrack newTrack;
    
    // loop over tmpTrackRef's hits
    Int_t iHit1 = 0;
    Int_t nTrackHits = track->GetNClusters();
    while (iHit1 < nTrackHits) {
      AliMUONTrackParam *trackParam1 = (AliMUONTrackParam*) track->GetTrackParamAtCluster()->UncheckedAt(iHit1);
      
      // get track parameters at hit1
      x1  = trackParam1->GetNonBendingCoor();
      y1  = trackParam1->GetBendingCoor();
      z1  = trackParam1->GetZ();
      pX1 = trackParam1->Px();
      pY1 = trackParam1->Py();
      pZ1 = trackParam1->Pz();
      
      // prepare new track parameters
      x  = x1;
      y  = y1;
      z  = z1;
      pX = pX1;
      pY = pY1;
      pZ = pZ1;
      
      // loop over next tmpTrackRef's hits
      Int_t nCombinedHits = 1;
      for (Int_t iHit2 = iHit1+1; iHit2 < nTrackHits; iHit2++) {
	AliMUONTrackParam *trackParam2 = (AliMUONTrackParam*) track->GetTrackParamAtCluster()->UncheckedAt(iHit2);
        
	// get z position of hit2
	z2 = trackParam2->GetZ();
	
	// complete new track parameters if hit2 is on the same detection element
        if ( TMath::Abs(z2-z1) < maxGasGap ) {
	  x  += trackParam2->GetNonBendingCoor();
	  y  += trackParam2->GetBendingCoor();
	  z  += z2;
	  pX += trackParam2->Px();
	  pY += trackParam2->Py();
	  pZ += trackParam2->Pz();
	  nCombinedHits++;
          iHit1 = iHit2;
        }
        
      }
      
      // finalize new track parameters
      x  /= (Double_t)nCombinedHits;
      y  /= (Double_t)nCombinedHits;
      z  /= (Double_t)nCombinedHits;
      pX /= (Double_t)nCombinedHits;
      pY /= (Double_t)nCombinedHits;
      pZ /= (Double_t)nCombinedHits;
      bendingSlope = 0;
      nonBendingSlope = 0;
      inverseBendingMomentum = 0;
      if (TMath::Abs(pZ) > 0) {
	bendingSlope = pY/pZ;
	nonBendingSlope = pX/pZ;
      }
      Double_t pYZ = TMath::Sqrt(pY*pY+pZ*pZ);
      if (pYZ >0) inverseBendingMomentum = 1/pYZ; 
      inverseBendingMomentum *= trackParam1->GetCharge();
      
      // set hit parameters
      hit->SetUniqueID(trackParam1->GetClusterPtr()->GetUniqueID());
      hit->SetXYZ(x,y,z);
      hit->SetErrXY(0.,0.);
      
      // set new track parameters at new hit
      AliMUONTrackParam trackParam;
      trackParam.SetNonBendingCoor(x);
      trackParam.SetBendingCoor(y);
      trackParam.SetZ(z);
      trackParam.SetBendingSlope(bendingSlope);
      trackParam.SetNonBendingSlope(nonBendingSlope);
      trackParam.SetInverseBendingMomentum(inverseBendingMomentum);
      
      // add track parameters at current hit to the track
      newTrack.AddTrackParamAtCluster(trackParam, *hit, kTRUE);
      
      iHit1++;
    }
    
    newTrack.SetUniqueID(track->GetUniqueID());
    newTrack.SetTrackParamAtVertex(track->GetTrackParamAtVertex());
    fTrackRefStore->Add(newTrack);
    
  }
  
  delete hit;
}

//_____________________________________________________________________________
void AliMUONRecoCheck::MakeReconstructibleTracks(UInt_t requestedStationMask, Bool_t request2ChInSameSt45,
						 Bool_t hitInFrontOfPad)
{
  /// Isolate the reconstructible tracks
  if (!(fRecoTrackRefStore = AliMUONESDInterface::NewTrackStore())) return;
  
  // need geometry transformer and segmentation to check if trackrefs are located in front of pad(s)
  if (hitInFrontOfPad) {
    if (!InitGeometryTransformer()) return;
    if (!AliMpSegmentation::Instance(kFALSE) && !AliMUONCDB::LoadMapping(kTRUE)) return;
  }
  
  // create iterator on trackRef
  TIter next(fTrackRefStore->CreateIterator());
  
  // loop over trackRef and add reconstructible tracks to fRecoTrackRefStore
  AliMUONTrack* track;
  while ( ( track = static_cast<AliMUONTrack*>(next()) ) ) {
    
    // check if the track is valid as it is
    if (track->IsValid(requestedStationMask, request2ChInSameSt45)) {
      
      if (hitInFrontOfPad) {
	
	AliMUONTrack trackTmp(*track);
	
	// loop over clusters and remove those which are not in front of pad(s)
	AliMUONTrackParam *param = static_cast<AliMUONTrackParam*>(trackTmp.GetTrackParamAtCluster()->First());
	while (param) {
	  AliMUONTrackParam *nextParam = static_cast<AliMUONTrackParam*>(trackTmp.GetTrackParamAtCluster()->After(param));
	  if (!IsHitInFrontOfPad(param)) trackTmp.RemoveTrackParamAtCluster(param);
	  param = nextParam;
	}
	
	// add the track if it is still valid
	if (trackTmp.IsValid(requestedStationMask, request2ChInSameSt45)) fRecoTrackRefStore->Add(trackTmp);
	
      } else {
	
	// add the track
	fRecoTrackRefStore->Add(*track);
	
      }
      
    }
      
  }

}

//_____________________________________________________________________________
AliMUONTrack* AliMUONRecoCheck::FindCompatibleTrack(AliMUONTrack &track, AliMUONVTrackStore &trackStore,
						    Int_t &nMatchClusters, Bool_t useLabel, Double_t sigmaCut)
{
  /// Return the track from the store matched with the given track (or 0x0) and the number of matched clusters.
  /// Matching is done by using the MC label of by comparing cluster/TrackRef positions according to the flag "useLabel".
  /// WARNING: Who match who matters since the matching algorithm uses the *fraction* of matched clusters of the given track
  
  AliMUONTrack *matchedTrack = 0x0;
  nMatchClusters = 0;
  
  if (useLabel) { // by using the MC label
    
    // get the corresponding simulated track if any
    Int_t label = track.GetMCLabel();
    matchedTrack = (AliMUONTrack*) trackStore.FindObject(label);
    
    // get the fraction of matched clusters
    if (matchedTrack) {
      Int_t nClusters = track.GetNClusters();
      for (Int_t iCl = 0; iCl < nClusters; iCl++)
	if (((AliMUONTrackParam*) track.GetTrackParamAtCluster()->UncheckedAt(iCl))->GetClusterPtr()->GetMCLabel() == label)
	  nMatchClusters++;
    }
    
  } else { // by comparing cluster/TrackRef positions
    
    // look for the corresponding simulated track if any
    TIter next(trackStore.CreateIterator());
    AliMUONTrack* track2;
    while ( ( track2 = static_cast<AliMUONTrack*>(next()) ) ) {
      
      // check compatibility
      Int_t n = 0;
      if (track.Match(*track2, sigmaCut, n)) {
	matchedTrack = track2;
	nMatchClusters = n;
	break;
      }
      
    }
    
  }
  
  return matchedTrack;
  
}


//_____________________________________________________________________________
AliMUONTriggerTrack* AliMUONRecoCheck::FindCompatibleTrack(AliMUONTriggerTrack &track, const AliMUONVTriggerTrackStore &triggerTrackStore,
                                                           Double_t sigmaCut)
{
  /// Return the trigger track from the store matched with the given track (or 0x0).
  /// Matching is done by comparing cluster/TrackRef positions.
  
  AliMUONTriggerTrack *matchedTrack = 0x0;
  
  // look for the corresponding simulated track if any
  TIter next(triggerTrackStore.CreateIterator());
  AliMUONTriggerTrack* track2;
  while ( ( track2 = static_cast<AliMUONTriggerTrack*>(next()) ) ) {
    // check compatibility
    if (track.Match(*track2, sigmaCut)) {
      matchedTrack = track2;
      break;
    }
  }
  
  return matchedTrack;
  
}


//____________________________________________________________________________ 
Bool_t AliMUONRecoCheck::InitTriggerResponse()
{
  /// Initialize trigger electronics
  /// for building of triggerable tracks from MC
  
  if ( fTriggerElectronics ) return kTRUE;
  
  if ( ! InitGeometryTransformer() ) return kFALSE;
  
  if ( ! AliMpDDLStore::Instance(false) && ! AliMpCDB::LoadDDLStore()) return kFALSE;
  
  if ( ! InitCalibrationData() ) return kFALSE;
  
  fTriggerElectronics = new AliMUONTriggerElectronics(fCalibrationData);
  
  return kTRUE;
}


//____________________________________________________________________________ 
Bool_t AliMUONRecoCheck::InitCalibrationData()
{
  /// Initialize calibration data
  if ( ! fCalibrationData ) {
    if ( !AliMUONCDB::CheckOCDB() ) return kFALSE;
    fCalibrationData = new AliMUONCalibrationData(AliCDBManager::Instance()->GetRun());
  }
  return kTRUE;
}


//____________________________________________________________________________ 
Bool_t AliMUONRecoCheck::InitGeometryTransformer()
{
  /// Return geometry transformer
  /// (create it if necessary)
  if ( ! fGeometryTransformer ) {
    
    if ( !AliMUONCDB::CheckOCDB() ) return kFALSE;
    
    if (!AliGeomManager::GetGeometry()) {
      AliGeomManager::LoadGeometry();
      if (!AliGeomManager::GetGeometry()) return kFALSE;  
      if (!AliGeomManager::ApplyAlignObjsFromCDB("MUON")) return kFALSE;
    }
    
    fGeometryTransformer = new AliMUONGeometryTransformer();
    fGeometryTransformer->LoadGeometryData();
  }
  
  return kTRUE;
}

//________________________________________________________________________
Bool_t AliMUONRecoCheck::IsHitInFrontOfPad(AliMUONTrackParam *param) const
{
  /// Return kTRUE if the hit is located in front of at least 1 pad
  
  Int_t deId = param->GetClusterPtr()->GetDetElemId();
  
  Double_t xL, yL, zL;
  fGeometryTransformer->Global2Local(deId, param->GetNonBendingCoor(), param->GetBendingCoor(), param->GetZ(), xL, yL, zL);
  
  const AliMpVSegmentation* seg1 = AliMpSegmentation::Instance()->GetMpSegmentation(deId, AliMp::kCath0);
  const AliMpVSegmentation* seg2 = AliMpSegmentation::Instance()->GetMpSegmentation(deId, AliMp::kCath1);
  if (!seg1 || !seg2) return kFALSE;
  
  AliMpPad pad1 = seg1->PadByPosition(xL, yL, kFALSE);
  AliMpPad pad2 = seg2->PadByPosition(xL, yL, kFALSE);
  
  return (pad1.IsValid() || pad2.IsValid());
}

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