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 AliMUONTrackHitPattern
///
/// This class propagates tracks to trigger chambers 
/// searching for matching trigger tracks and fired strips.
///
/// To each track, a hit pattern for trigger chambers is set.
/// 
/// The main method is:
/// * ExecuteValidation
///
///  \author Diego Stocco
//-----------------------------------------------------------------------------


#include "AliMUONTrackHitPattern.h"

#include "AliMUONConstants.h"
#include "AliMUONVDigit.h"
#include "AliMUONVDigitStore.h"
#include "AliMUONGeometryTransformer.h"
#include "AliMUONLocalTrigger.h"
#include "AliMUONRecoParam.h"
#include "AliMUONTrack.h"
#include "AliMUONTrackExtrap.h"
#include "AliMUONTrackParam.h"
#include "AliMUONVTrackStore.h"
#include "AliMUONVTriggerStore.h"
#include "AliMUONTriggerTrack.h"
#include "AliMUONVTriggerTrackStore.h"
#include "AliMUONTriggerUtilities.h"

#include "AliMpPad.h"
#include "AliMpSegmentation.h"
#include "AliMpVSegmentation.h"
#include "AliMpDEManager.h"
#include "AliMpArea.h"
#include "AliMpConstants.h"

#include "AliLog.h"
#include "AliESDMuonTrack.h"
#include "AliCodeTimer.h"

#include <Riostream.h>
#include <TArrayI.h>
#include <TMath.h>
#include <TMatrixD.h>
#include <TVector3.h>
#include <TArrayF.h>
#include <TRandom.h>

/// \cond CLASSIMP
ClassImp(AliMUONTrackHitPattern) // Class implementation in ROOT context
/// \endcond


//______________________________________________________________________________
AliMUONTrackHitPattern::AliMUONTrackHitPattern(const AliMUONRecoParam* recoParam,
                                               const AliMUONGeometryTransformer& transformer,
                                               const AliMUONVDigitStore& digitStore,
                                               const AliMUONTriggerUtilities* triggerUtilities)
: TObject(),
fkRecoParam(recoParam),
fkTransformer(transformer),
fkDigitStore(digitStore),
fkTriggerUtilities(triggerUtilities),
fkMaxDistance(99999.) // obsolete
{
  /// Default constructor
  AliMUONTrackExtrap::SetField();
}


//______________________________________________________________________________
AliMUONTrackHitPattern::~AliMUONTrackHitPattern(void)
{
  /// Destructor
}


//______________________________________________________________________________
void 
AliMUONTrackHitPattern::ApplyMCSCorrections(AliMUONTrackParam& trackParam) const
{
  //
  /// Returns uncertainties on extrapolated position.
  /// Takes into account Branson plane corrections in the iron wall.
  //
  
  const Float_t kZFilterOut = AliMUONConstants::MuonFilterZEnd();
  const Float_t kFilterThickness = kZFilterOut-AliMUONConstants::MuonFilterZBeg(); // cm
  
  AliMUONTrackExtrap::ExtrapToZCov(&trackParam, kZFilterOut); // Extrap to muon filter end
  AliMUONTrackExtrap::AddMCSEffect(&trackParam, kFilterThickness, AliMUONConstants::MuonFilterX0()); // Add MCS effects
  return;
}


//______________________________________________________________________________
void AliMUONTrackHitPattern::ExecuteValidation(const AliMUONVTrackStore& trackStore,
					       const AliMUONVTriggerTrackStore& triggerTrackStore,
					       const AliMUONVTriggerStore& triggerStore) const
{
  //
  /// Main method:
  /// Loops on reco tracks, extrapolates them to trigger chambers
  /// and searches for matching trigger tracks and digits
  //

  // Get the hit pattern for all trigger tracks
  AliMUONTriggerTrack* triggerTrack;
  TIter itTriggerTrack(triggerTrackStore.CreateIterator());
  while ( ( triggerTrack = static_cast<AliMUONTriggerTrack*>(itTriggerTrack() ) ) ){
    AliMUONTrackParam trackParam;
    trackParam.SetNonBendingCoor(triggerTrack->GetX11());
    trackParam.SetBendingCoor(triggerTrack->GetY11());
    trackParam.SetZ(triggerTrack->GetZ11());
    trackParam.SetNonBendingSlope(triggerTrack->GetSlopeX());
    trackParam.SetBendingSlope(triggerTrack->GetSlopeY());
    trackParam.SetInverseBendingMomentum(1.);
    UInt_t pattern = GetHitPattern(trackParam, kTRUE);
    // The pattern is a UInt_t, including the information
    // on the matched local board,
    // but for backward compatibility we fill a UShort_t
    // which do not contain such info.
    // In the old pattern, we use 15 bits out of 16, so the last one should
    // be masked or it will be filled with 1 bit with the local board info.
    triggerTrack->SetHitsPatternInTrigCh((UShort_t)(pattern & 0x7FFF));
    AliDebug(1, Form("Hit pattern (MTR): hits 0x%x  slat %2i  board %3i  effFlag %i",
                     pattern & 0xFF, AliESDMuonTrack::GetSlatOrInfo(pattern),triggerTrack->GetLoTrgNum(), AliESDMuonTrack::GetEffFlag(pattern)));
  }

  // Match tracker tracks with trigger tracks.
  TIter itTrack(trackStore.CreateIterator());
  AliMUONTrack* track;

  const Int_t kFirstTrigCh = AliMUONConstants::NTrackingCh();

  while ( ( track = static_cast<AliMUONTrack*>(itTrack()) ) )
  { 
    AliMUONTrackParam trackParam(*((AliMUONTrackParam*) (track->GetTrackParamAtCluster()->Last())));

    ApplyMCSCorrections(trackParam);
    AliMUONTrackExtrap::ExtrapToZCov(&trackParam, AliMUONConstants::DefaultChamberZ(kFirstTrigCh)); // extrap to 1st trigger chamber

    AliMUONTriggerTrack *matchedTriggerTrack = MatchTriggerTrack(track, trackParam, triggerTrackStore, triggerStore);
    if ( matchedTriggerTrack ) track->SetHitsPatternInTrigCh(matchedTriggerTrack->GetHitsPatternInTrigCh());

    UInt_t pattern = GetHitPattern(trackParam, kFALSE);
    track->SetHitsPatternInTrigChTrk(pattern);
    AliDebug(1, Form("Hit pattern (MTK): hits 0x%x  slat %2i  board %3i  effFlag %i",
                     pattern & 0xFF, AliESDMuonTrack::GetSlatOrInfo(pattern), AliESDMuonTrack::GetCrossedBoard(pattern), AliESDMuonTrack::GetEffFlag(pattern)));
  }
}


//______________________________________________________________________________
Bool_t AliMUONTrackHitPattern::FindMatchingPads(const AliMUONTrackParam* trackParam,
                                                TArrayI& matchedDetElemId, TObjArray& pads,
                                                const AliMUONVDigitStore& digitStore,
                                                Bool_t isTriggerTrack) const
{
  //
  /// Search for matching digits in trigger chamber
  //
  enum {kBending, kNonBending};
  
  Double_t minMatchDist[2];
  Int_t padsInCheckArea[2];
  
  AliMUONTrackParam trackParamAtPadZ(*trackParam);
  
  Int_t inputDetElemId = matchedDetElemId[0];
  
  for(Int_t cath=0; cath<2; cath++){
    minMatchDist[cath] = 99999.;
    padsInCheckArea[cath] = 0;
  }
  
  Int_t iChamber = AliMpDEManager::GetChamberId(inputDetElemId);  
  Int_t iSlat = inputDetElemId%100;
  
  TIter next(digitStore.CreateTriggerIterator());
  AliMUONVDigit* mDigit;
  
  Double_t xPad = 0., yPad = 0., zPad = 0.;
  Double_t sigmaX = 0., sigmaY = 0.;
  
  Double_t nSigmas = ( isTriggerTrack ) ? GetRecoParam()->GetStripCutForTrigger() : GetRecoParam()->GetSigmaCutForTrigger();
  Bool_t goodForEff = kTRUE;
  
  while ( ( mDigit = static_cast<AliMUONVDigit*>(next()) ) )
  {
    Int_t currDetElemId = mDigit->DetElemId();
    Int_t currCh = AliMpDEManager::GetChamberId(currDetElemId);
    if ( currCh != iChamber ) continue;
    Int_t currSlat = currDetElemId%100;
    Int_t slatDiff = TMath::Abs(currSlat-iSlat);
    if ( slatDiff>1 && slatDiff<17 ) continue; // Check neighbour slats
    
    Int_t cathode = mDigit->Cathode();
    Int_t ix = mDigit->PadX();
    Int_t iy = mDigit->PadY();
    const AliMpVSegmentation* seg = AliMpSegmentation::Instance()
    ->GetMpSegmentation(currDetElemId,AliMp::GetCathodType(cathode));
    AliMpPad pad = seg->PadByIndices(ix,iy,kTRUE);
    
    // Get local pad coordinates
    Double_t xPadLocal = pad.GetPositionX();
    Double_t yPadLocal = pad.GetPositionY();
    Double_t dpx = pad.GetDimensionX();
    Double_t dpy = pad.GetDimensionY();
    Double_t xWidth = 2. * dpx;
    Double_t yWidth = 2. * dpy;
    
    // Get global pad coordinates
    fkTransformer.Local2Global(currDetElemId, xPadLocal, yPadLocal, 0., xPad, yPad, zPad);
    
    // Get track parameters at pad z
    if ( trackParamAtPadZ.CovariancesExist() ) AliMUONTrackExtrap::LinearExtrapToZCov(&trackParamAtPadZ, zPad);
    else AliMUONTrackExtrap::LinearExtrapToZ(&trackParamAtPadZ, zPad);
    
    Double_t deltaX = TMath::Abs(xPad-trackParamAtPadZ.GetNonBendingCoor()) - dpx;
    Double_t deltaY = TMath::Abs(yPad-trackParamAtPadZ.GetBendingCoor()) - dpy;
    
    
    // Get sigmas
    if ( isTriggerTrack ) {
      Double_t checkWidth = TMath::Min(xWidth, yWidth);
      Double_t maxCheckArea = GetRecoParam()->GetMaxStripAreaForTrigger() * checkWidth;
      Double_t sigma = TMath::Max(checkWidth, 2.);
      sigmaX = sigma; // in cm
      sigmaY = sigma; // in cm
      if ( deltaX <= maxCheckArea && deltaY <= maxCheckArea ) {
        padsInCheckArea[cathode]++;
        if ( padsInCheckArea[cathode] > 2 ) {
          goodForEff = kFALSE;
          AliDebug(2, Form("padsInCheckArea[%i] = %i\n",cathode,padsInCheckArea[cathode]));
        }
      }
    }
    else {
      const TMatrixD& kCovParam = trackParamAtPadZ.GetCovariances();
      sigmaX = TMath::Sqrt(kCovParam(0,0)); // in cm
      sigmaY = TMath::Sqrt(kCovParam(2,2)); // in cm
    }
    
    AliDebug(2, Form("\nDetElemId %i  Cath %i  Dim = (%.2f,%.2f)  Pad (%i,%i) = (%.2f,%.2f)  Track = (%.2f,%.2f)  Delta (%.2f,%.2f)  Sigma (%.2f,%.2f)  p %g\n",
                      currDetElemId,cathode,dpx,dpy,ix,iy,xPad,yPad,trackParamAtPadZ.GetNonBendingCoor(),trackParamAtPadZ.GetBendingCoor(),deltaX,deltaY,sigmaX,sigmaY,trackParamAtPadZ.P()));
    //if ( deltaX <= maxCheckArea && deltaY <= maxCheckArea ) padsInCheckArea[cathode]++;
    if ( deltaX > nSigmas * sigmaX || deltaY > nSigmas * sigmaY ) continue;
    Double_t matchDist = TMath::Max(deltaX, deltaY);
    if ( matchDist > minMatchDist[cathode] ) continue;
    if ( pads.At(cathode) ) delete pads.RemoveAt(cathode);
    pads.AddAt((AliMpPad*)pad.Clone(),cathode);
    minMatchDist[cathode] = matchDist;
    matchedDetElemId[cathode] = currDetElemId; // Set the input detection element id to the matched one
  } // loop on digits
  
//  // If track matches many pads, it is not good for effciency determination.
//  // However we still want to calculate the hit pattern.
//  for ( Int_t cath=0; cath<2; cath++ ){
//    if ( padsInCheckArea[cath] > 2 ) {
//      AliDebug(2, Form("padsInCheckArea[%i] = %i\n",cath,padsInCheckArea[cath]));
//      return kFALSE;
//    }
//  }
  
  return goodForEff;
}


//_____________________________________________________________________________
UInt_t AliMUONTrackHitPattern::GetHitPattern(const AliMUONTrackParam& trackParam, Bool_t isTriggerTrack) const
{
  //
  /// Searches for matching digits around the track.
  //
  
  AliCodeTimerAuto("",0);
  
  TArrayI digitPerTrack(2);
  digitPerTrack.Reset();
  
  UInt_t pattern = 0;
  
  TObjArray trackParamList, matchedPads(2), maskedPads(2), padsFromPos(4), validPads(2);
  trackParamList.SetOwner(); matchedPads.SetOwner(); maskedPads.SetOwner(); padsFromPos.SetOwner();
  
  Int_t firstSlat = -1, firstBoard = -1;
  AliESDMuonTrack::EAliTriggerChPatternFlag goodForEff = AliESDMuonTrack::kBoardEff;
  TArrayI matchedDetElemId(2), maskedDetElemId(2), detElemIdFromTrack(2), validDetElemId(2);
  
  for(Int_t ich=0; ich<AliMUONConstants::NTriggerCh(); ich++) { // chamber loop
    
    trackParamList.Delete(); matchedPads.Delete(); maskedPads.Delete(); padsFromPos.Delete(); validPads.Clear();
    
    Int_t nFound = GetTrackParamAtChamber(trackParam, 11+ich, trackParamList, detElemIdFromTrack, padsFromPos);
    if ( nFound == 0 ) {
      // track is rejected since the extrapolated track
      // does not match a slat (border effects)
      AliESDMuonTrack::AddEffInfo(pattern, AliESDMuonTrack::kTrackOutsideGeometry);
      goodForEff = AliESDMuonTrack::kNoEff;
      AliDebug(2, "Warning: trigger track outside trigger chamber\n");
      continue;
    }
    
    // Search for masked pads
    maskedDetElemId.Reset(detElemIdFromTrack[0]);
    FindMatchingPads((AliMUONTrackParam*)trackParamList.At(0), maskedDetElemId, maskedPads, *(fkTriggerUtilities->GetMaskedDigits()), isTriggerTrack);
    if ( maskedPads.GetEntries() > 0 ) {
      AliESDMuonTrack::AddEffInfo(pattern,AliESDMuonTrack::kTrackMatchesMasks); // pad is masked
      goodForEff = AliESDMuonTrack::kNoEff;
      for ( Int_t icath=0; icath<2; icath++ ) {
        AliMpPad* currPad = (AliMpPad*)maskedPads.UncheckedAt(icath);
        if ( ! currPad ) continue;
        AliDebug(2,Form("DetElemId %i  cath %i  board %i  strip %i is masked: effFlag 0", matchedDetElemId[icath], icath, currPad->GetLocalBoardId(0), currPad->GetLocalBoardChannel(0)));
      }
      //      continue;
      // We want to calculate the hit pattern in any case, so we do not "continue"
      // However we set the flag in such a way not to use the track for efficiency calculations
    }
    
    // If no masked pads matched, search for active pads
    matchedDetElemId.Reset(detElemIdFromTrack[0]);
    if ( ! FindMatchingPads((AliMUONTrackParam*)trackParamList.At(0), matchedDetElemId, matchedPads, fkDigitStore, isTriggerTrack) ) {
      // if ! FindPadMatchingTrig => too many digits matching pad =>
      //                          => Event not clear => Do not use for efficiency calculation
      AliESDMuonTrack::AddEffInfo(pattern, AliESDMuonTrack::kTrackMatchesManyPads);
      goodForEff = AliESDMuonTrack::kNoEff;
      AliDebug(2, Form("Warning: track in %i matches many pads. Rejected!\n", matchedDetElemId[0]));
    }
    
    Int_t nMatched = 0;
    
    Int_t mostProbDEmatched = detElemIdFromTrack[0];
    for ( Int_t icath=0; icath<2; icath++ ) {
      if ( matchedPads.UncheckedAt(icath) ) {
        nMatched++;
        // Fill pattern anyway
        AliESDMuonTrack::SetFiredChamber(pattern, icath, ich);
        digitPerTrack[icath]++;
        mostProbDEmatched = matchedDetElemId[icath];
      }
    }
    Int_t mostProbDEindex = 0;
    for ( Int_t ifound=0; ifound<nFound; ifound++ ) {
      if ( detElemIdFromTrack[ifound] == mostProbDEmatched ) {
        mostProbDEindex = ifound;
        break;
      }
    }
    
    if ( goodForEff == AliESDMuonTrack::kNoEff ) continue;
    
    for ( Int_t icath=0; icath<2; icath++ ) {
      if ( matchedPads.UncheckedAt(icath) ) {
        validPads.AddAt(matchedPads.UncheckedAt(icath),icath);
        validDetElemId[icath] = matchedDetElemId[icath];
      }
      else {
        validPads.AddAt(padsFromPos.UncheckedAt(2*mostProbDEindex + icath),icath);
        validDetElemId[icath] = detElemIdFromTrack[mostProbDEindex];
      }
    }
        
    Int_t currSlat = mostProbDEmatched%100;
    if ( firstSlat < 0 ) firstSlat = currSlat;
    
    if ( currSlat != firstSlat || validDetElemId[0] != validDetElemId[1] ) {
      goodForEff = AliESDMuonTrack::kChEff;
      firstSlat = AliESDMuonTrack::kCrossDifferentSlats;
    }
    
    if ( firstBoard < 0 ) firstBoard = ((AliMpPad*)validPads.UncheckedAt(0))->GetLocalBoardId(0);
    
    for ( Int_t icath=0; icath<2; icath++ ){      
      
      if ( goodForEff == AliESDMuonTrack::kBoardEff) {
        Bool_t atLeastOneLoc = kFALSE;
        AliMpPad* currPad = (AliMpPad*)validPads.UncheckedAt(icath);
        for ( Int_t iloc=0; iloc<currPad->GetNofLocations(); iloc++) {
          if ( currPad->GetLocalBoardId(iloc) == firstBoard ) {
            atLeastOneLoc = kTRUE;
            break;
          }
        } // loop on locations
        if ( ! atLeastOneLoc ) goodForEff = AliESDMuonTrack::kSlatEff;
      }
    } // loop on cathodes
    //    } // if track good for efficiency
  } // end chamber loop
  
  if ( goodForEff == AliESDMuonTrack::kNoEff ) return pattern;
  
  for(Int_t cath=0; cath<2; cath++){
    if(digitPerTrack[cath]<3) {
      // track is rejected since the number of associated
      // digits found is less than 3.
      AliESDMuonTrack::AddEffInfo(pattern, AliESDMuonTrack::kTrackMatchesFewPads);
      goodForEff = AliESDMuonTrack::kNoEff;
      AliDebug(2, Form("Warning: found %i digits for trigger track cathode %i.\nRejecting event\n", digitPerTrack[cath],cath));
    }
  } // loop on cathodes 
  
  if ( goodForEff == AliESDMuonTrack::kNoEff ) return pattern;
  
  AliESDMuonTrack::AddEffInfo(pattern, firstSlat, firstBoard, goodForEff);
  return pattern;
}



//_____________________________________________________________________________
Int_t AliMUONTrackHitPattern::GetTrackParamAtChamber(const AliMUONTrackParam& inputTrackParam, Int_t chamber,
                                                     TObjArray& trackParamList, TArrayI& foundDetElemId,
                                                     TObjArray& padsFromPos) const
{
  //
  /// Return the extrapolated the track parameter at the given chamber
  /// and returns the matching DetElemId
  /// CAVEAT: at the border the result is not univoque
  //
  
  Int_t nFound = 0;
  foundDetElemId[0] = foundDetElemId[1] = 0;
  AliMUONTrackParam trackParamCopy(inputTrackParam);
  TVector3 globalPoint1(trackParamCopy.GetNonBendingCoor(), trackParamCopy.GetBendingCoor(), trackParamCopy.GetZ());
  AliMUONTrackExtrap::LinearExtrapToZ(&trackParamCopy, trackParamCopy.GetZ() + 20.);
  TVector3 globalPoint2(trackParamCopy.GetNonBendingCoor(), trackParamCopy.GetBendingCoor(), trackParamCopy.GetZ());
  TVector3 localCoor;
  
  //  AliMpArea pointArea(x, y, 2.*AliMpConstants::LengthTolerance(), 2.*AliMpConstants::LengthTolerance());
  AliMpDEIterator it;
  Double_t xGlobal, yGlobal, zGlobal;
  for ( it.First(chamber-1); ! it.IsDone(); it.Next() ){
    Int_t detElemId = it.CurrentDEId();
    PosInDetElemIdLocal(localCoor, globalPoint1, globalPoint2, detElemId);
    fkTransformer.Local2Global(detElemId, localCoor.X(), localCoor.Y(), localCoor.Z(), xGlobal, yGlobal, zGlobal);
    AliMpArea pointArea(xGlobal, yGlobal, 2.*AliMpConstants::LengthTolerance(), 2.*AliMpConstants::LengthTolerance());
    AliMpArea* deArea = fkTransformer.GetDEArea(detElemId);
    if ( deArea->Contains(pointArea) ) {
      // Check if track matches valid pads
      // (this is not trivial for cut RPC)
      Int_t validPads = 0;
      for ( Int_t icath=0; icath<2; icath++ ) {
        const AliMpVSegmentation* seg = 
        AliMpSegmentation::Instance()
        ->GetMpSegmentation(detElemId,AliMp::GetCathodType(icath));
        AliMpPad pad = seg->PadByPosition(localCoor.X(),localCoor.Y(),kFALSE);
        if ( pad.IsValid() ) {
          padsFromPos.AddAt(pad.Clone(), 2*nFound + icath);
          validPads++;
        }
      }
      if ( validPads < 2 ) continue;
      AliMUONTrackParam* extrapTrackParam = new AliMUONTrackParam(inputTrackParam);
      if ( extrapTrackParam->CovariancesExist() ) AliMUONTrackExtrap::LinearExtrapToZCov(extrapTrackParam, zGlobal);
      else AliMUONTrackExtrap::LinearExtrapToZ(extrapTrackParam, zGlobal);
      trackParamList.AddAt(extrapTrackParam,nFound);
      foundDetElemId[nFound] = detElemId;
      nFound++;
      if ( nFound == 2 ) break;
    }
    else if ( nFound > 0 ) break;
  } // loop on detElemId
  
  return nFound;
}


//______________________________________________________________________________
AliMUONTriggerTrack * 
AliMUONTrackHitPattern::MatchTriggerTrack(AliMUONTrack* track,
					  AliMUONTrackParam& trackParam,
					  const AliMUONVTriggerTrackStore& triggerTrackStore,
					  const AliMUONVTriggerStore& triggerStore) const
{
  //
  /// Match track with trigger track
  //

  Int_t matchTrigger = 0;
  Int_t loTrgNum(-1);
  TMatrixD paramDiff(3,1);
  Double_t chi2;
  Double_t chi2MatchTrigger = 0., minChi2MatchTrigger = 999.;
  Int_t doubleMatch = -1; // Check if track matches 2 trigger tracks
  Double_t doubleChi2 = -1.;
  AliMUONTriggerTrack* doubleTriggerTrack = 0x0;
  AliMUONTriggerTrack* matchedTriggerTrack = 0x0;
    

  // Covariance matrix 3x3 (X,Y,slopeY) for trigger tracks
  TMatrixD trackCov(3,3);

  AliMUONTriggerTrack *triggerTrack;
  TIter itTriggerTrack(triggerTrackStore.CreateIterator());
  while ( ( triggerTrack = static_cast<AliMUONTriggerTrack*>(itTriggerTrack() ) ) )
  {
    AliMUONTrackExtrap::LinearExtrapToZCov(&trackParam, triggerTrack->GetZ11());
    const TMatrixD& kParamCov = trackParam.GetCovariances();
    
    Double_t xTrack = trackParam.GetNonBendingCoor();
    Double_t yTrack = trackParam.GetBendingCoor();
    Double_t ySlopeTrack = trackParam.GetBendingSlope();

    paramDiff(0,0) = triggerTrack->GetX11() - xTrack;
    paramDiff(1,0) = triggerTrack->GetY11() - yTrack;
    paramDiff(2,0) = triggerTrack->GetSlopeY() - ySlopeTrack;

    // Covariance matrix 3x3 (X,Y,slopeY) for tracker tracks
    trackCov.Zero();
    trackCov(0,0) = kParamCov(0,0);
    trackCov(1,1) = kParamCov(2,2);
    trackCov(2,2) = kParamCov(3,3);
    trackCov(1,2) = kParamCov(2,3);
    trackCov(2,1) = kParamCov(3,2);

    // Covariance matrix 3x3 (X,Y,slopeY) for trigger tracks
    TMatrixD trigCov(triggerTrack->GetCovariances());

    TMatrixD sumCov(trackCov,TMatrixD::kPlus,trigCov);
    if (sumCov.Determinant() != 0) {
      sumCov.Invert();
      
      TMatrixD tmp(sumCov,TMatrixD::kMult,paramDiff);
      TMatrixD chi2M(paramDiff,TMatrixD::kTransposeMult,tmp);
      chi2 = chi2M(0,0);      
    } else {
      AliWarning(" Determinant = 0");
      Double_t sigma2 = 0.;
      chi2 = 0.;
      for (Int_t iVar = 0; iVar < 3; iVar++) {
	sigma2 = trackCov(iVar,iVar) + trigCov(iVar,iVar);
	chi2 += paramDiff(iVar,0) * paramDiff(iVar,0) / sigma2;
      }
    }

    chi2 /= 3.; // Normalized Chi2: 3 degrees of freedom (X,Y,slopeY)
    if (chi2 < GetRecoParam()->GetMaxNormChi2MatchTrigger()) 
    {
      Bool_t isDoubleTrack = (TMath::Abs(chi2 - minChi2MatchTrigger)<1.);
      if (chi2 < minChi2MatchTrigger && chi2 < GetRecoParam()->GetMaxNormChi2MatchTrigger()) 
      {
	if(isDoubleTrack)
	{
	  doubleMatch = loTrgNum;
	  doubleChi2 = chi2MatchTrigger;
	  doubleTriggerTrack = matchedTriggerTrack;
	}
	minChi2MatchTrigger = chi2;
	chi2MatchTrigger = chi2;
	loTrgNum = triggerTrack->GetLoTrgNum();
	matchedTriggerTrack = triggerTrack;
	AliMUONLocalTrigger* locTrg = triggerStore.FindLocal(loTrgNum);
	matchTrigger = 1;
	if(locTrg->LoLpt()>0) matchTrigger = 2;
	if(locTrg->LoHpt()>0) matchTrigger = 3;
      }
      else if(isDoubleTrack) 
      {
	doubleMatch = triggerTrack->GetLoTrgNum();
	doubleChi2 = chi2;
      }
    }
  }
  if(doubleMatch>=0)
  { // If two trigger tracks match, select the one passing more trigger cuts
    AliDebug(1, Form("Two candidates found: %i and %i",loTrgNum,doubleMatch));
    AliMUONLocalTrigger* locTrg1 = triggerStore.FindLocal(doubleMatch);
    if((locTrg1->LoLpt()>0 && matchTrigger<2) || (locTrg1->LoHpt() && matchTrigger<3))
    {
      if(locTrg1->LoHpt()>0) matchTrigger=3;
      else matchTrigger = 2;
      loTrgNum = doubleMatch;
      chi2MatchTrigger = doubleChi2;
      matchedTriggerTrack = doubleTriggerTrack;
    }
  }
    
  track->SetMatchTrigger(matchTrigger);
  track->SetChi2MatchTrigger(chi2MatchTrigger);

  AliMUONLocalTrigger* locTrg = static_cast<AliMUONLocalTrigger*>(triggerStore.FindLocal(loTrgNum));

  if (locTrg)
  {    
    track->SetLocalTrigger(locTrg->LoCircuit(),
			   locTrg->LoStripX(),
			   locTrg->LoStripY(),
			   locTrg->GetDeviation(),
			   locTrg->LoLpt(),
			   locTrg->LoHpt(),
			   locTrg->GetTriggerWithoutChamber());
  }

  return matchedTriggerTrack;
}


//_____________________________________________________________________________
Bool_t AliMUONTrackHitPattern::PosInDetElemIdLocal(TVector3& localCoor, const TVector3& globalPoint1,
                                                   const TVector3& globalPoint2, Int_t detElemId) const
{
  /// Given two points belonging to a line (global coordinates)
  /// it returns the intersection point with the detElemId (local coordinates)
  
  Double_t xloc, yloc, zloc;
  fkTransformer.Global2Local(detElemId, globalPoint1.X(), globalPoint1.Y(), globalPoint1.Z(), xloc, yloc, zloc);
  TVector3 localPoint1(xloc, yloc, zloc);
  fkTransformer.Global2Local(detElemId, globalPoint2.X(), globalPoint2.Y(), globalPoint2.Z(), xloc, yloc, zloc);
  TVector3 localPoint2(xloc, yloc, zloc);
  localCoor = localPoint1 - ( localPoint1.Z() / ( localPoint2.Z() - localPoint1.Z() ) ) * ( localPoint2 - localPoint1 );
  
  return kTRUE;
}


// THE FOLLOWING METHODS ARE OBSOLETE

//______________________________________________________________________________
UInt_t AliMUONTrackHitPattern::GetHitPattern(const AliMUONTriggerTrack* matchedTriggerTrack) const
{
  //
  /// Get hit pattern on trigger chambers for the current trigger track
  //
  UInt_t pattern = 0;
  PerformTrigTrackMatch(pattern, matchedTriggerTrack);
  return pattern;
}


//______________________________________________________________________________
UInt_t AliMUONTrackHitPattern::GetHitPattern(AliMUONTrackParam* trackParam) const
{
  //
  /// Get hit pattern on trigger chambers for the current tracker track
  //
  UInt_t pattern = 0;
  Bool_t isMatch[2];
  const Int_t kNTrackingCh = AliMUONConstants::NTrackingCh();
  
  for(Int_t ch=0; ch<4; ++ch)
  {
    Int_t iChamber = kNTrackingCh+ch;
    AliMUONTrackExtrap::ExtrapToZCov(trackParam, AliMUONConstants::DefaultChamberZ(iChamber));
    FindPadMatchingTrack(*trackParam, isMatch, iChamber);
    for(Int_t cath=0; cath<2; ++cath)
    {
      if(isMatch[cath]) AliESDMuonTrack::SetFiredChamber(pattern, cath, ch);
    }
  }
  
  // pattern obtained by propagation of tracker track
  // when it does not match the trigger.
  AliESDMuonTrack::AddEffInfo(pattern, AliESDMuonTrack::kTrackerTrackPattern);
  
  return pattern;
}


//______________________________________________________________________________
void 
AliMUONTrackHitPattern::FindPadMatchingTrack(const AliMUONTrackParam& trackParam,
                                             Bool_t isMatch[2], Int_t iChamber) const
{
    //
    /// Given the tracker track position, searches for matching digits.
    //

    Float_t minMatchDist[2];

    for(Int_t cath=0; cath<2; ++cath)
    {
      isMatch[cath]=kFALSE;
      minMatchDist[cath]=fkMaxDistance/10.;
    }

    TIter next(fkDigitStore.CreateTriggerIterator());
    AliMUONVDigit* mDigit;

    while ( ( mDigit = static_cast<AliMUONVDigit*>(next()) ) )
    {
      Int_t currDetElemId = mDigit->DetElemId();
      Int_t currCh = AliMpDEManager::GetChamberId(currDetElemId);
      if(currCh!=iChamber) continue;
      Int_t cathode = mDigit->Cathode();
      Int_t ix = mDigit->PadX();
      Int_t iy = mDigit->PadY();
      Float_t xpad, ypad, zpad;
      const AliMpVSegmentation* seg = AliMpSegmentation::Instance()
        ->GetMpSegmentation(currDetElemId,AliMp::GetCathodType(cathode));
      
      AliMpPad pad = seg->PadByIndices(ix,iy,kTRUE);
      Float_t xlocal1 = pad.GetPositionX();
      Float_t ylocal1 = pad.GetPositionY();
      Float_t dpx = pad.GetDimensionX();
      Float_t dpy = pad.GetDimensionY();

      fkTransformer.Local2Global(currDetElemId, xlocal1, ylocal1, 0, xpad, ypad, zpad);
      Float_t matchDist = MinDistanceFromPad(xpad, ypad, zpad, dpx, dpy, trackParam);
      if(matchDist>minMatchDist[cathode])continue;
      isMatch[cathode] = kTRUE;
      if(isMatch[0] && isMatch[1]) break;
      minMatchDist[cathode] = matchDist;
    }
}


//______________________________________________________________________________
Float_t 
AliMUONTrackHitPattern::MinDistanceFromPad(Float_t xPad, Float_t yPad, Float_t zPad,
                                           Float_t dpx, Float_t dpy, 
                                           const AliMUONTrackParam& trackParam) const
{
    //
    /// Decides if the digit belongs to the tracker track.
    //

    AliMUONTrackParam trackParamAtPadZ(trackParam);
    AliMUONTrackExtrap::LinearExtrapToZCov(&trackParamAtPadZ, zPad);

    Float_t xTrackAtPad = trackParamAtPadZ.GetNonBendingCoor();
    Float_t yTrackAtPad = trackParamAtPadZ.GetBendingCoor();

    const Float_t kNSigma = GetRecoParam()->GetSigmaCutForTrigger();

    const TMatrixD& kCovParam = trackParamAtPadZ.GetCovariances();
    
    Float_t sigmaX = TMath::Sqrt(kCovParam(0,0));
    Float_t sigmaY = TMath::Sqrt(kCovParam(2,2));

    Float_t maxDistX = kNSigma * sigmaX; // in cm
    Float_t maxDistY = kNSigma * sigmaY; // in cm

    Float_t deltaX = TMath::Abs(xPad-xTrackAtPad)-dpx;
    Float_t deltaY = TMath::Abs(yPad-yTrackAtPad)-dpy;

    Float_t matchDist = fkMaxDistance;
    if(deltaX<=maxDistX && deltaY<=maxDistY) matchDist = TMath::Max(deltaX, deltaY);

    return matchDist;
}


//_____________________________________________________________________________
Bool_t AliMUONTrackHitPattern::FindPadMatchingTrig(const TVector3& vec11, const TVector3& vec21,
                                                  Int_t matchedDetElemId[2], TObjArray& pads) const
{
  //
  /// Check slat and board number of digit matching trigger track
  //
  
  enum {kBending, kNonBending};
  
  Float_t minMatchDist[2];
  Int_t padsInCheckArea[2];
  
  Int_t inputDetElemId = matchedDetElemId[0];
  
  for(Int_t cath=0; cath<2; cath++){
    minMatchDist[cath] = fkMaxDistance/10.;
    padsInCheckArea[cath] = 0;
  }
  
  Int_t iChamber = AliMpDEManager::GetChamberId(inputDetElemId);  
  Int_t iSlat = inputDetElemId%100;
  
  TIter next(fkDigitStore.CreateTriggerIterator());
  AliMUONVDigit* mDigit;
  TVector3 localExtrap;
  
  Int_t previousDetElemId = -1;
  
  while ( ( mDigit = static_cast<AliMUONVDigit*>(next()) ) )
  {
    Int_t currDetElemId = mDigit->DetElemId();
    Int_t currCh = AliMpDEManager::GetChamberId(currDetElemId);
    if ( currCh != iChamber ) continue;
    Int_t currSlat = currDetElemId%100;
    Int_t slatDiff = TMath::Abs(currSlat-iSlat);
    if ( slatDiff>1 && slatDiff<17 ) continue; // Check neighbour slats
    Int_t cathode = mDigit->Cathode();
    Int_t ix = mDigit->PadX();
    Int_t iy = mDigit->PadY();
    const AliMpVSegmentation* seg = AliMpSegmentation::Instance()
    ->GetMpSegmentation(currDetElemId,AliMp::GetCathodType(cathode));
    
    AliMpPad pad = seg->PadByIndices(ix,iy,kTRUE);
    
    if ( currDetElemId != previousDetElemId ) {
      PosInDetElemIdLocal(localExtrap, vec11, vec21, currDetElemId);
      previousDetElemId = currDetElemId;
    }
    
    AliDebug(11, Form("\nDetElemId = %i  Cathode = %i  Pad = (%i,%i) = (%.2f,%.2f)  Dim = (%.2f,%.2f)  Track = (%.2f,%.2f)\n",
                     currDetElemId,cathode,ix,iy,pad.GetPositionX(),pad.GetPositionY(),pad.GetDimensionX(),pad.GetDimensionY(),localExtrap.X(),localExtrap.Y()));
    Float_t matchDist = PadMatchTrack(pad, localExtrap);
    if ( matchDist < fkMaxDistance/2. ) padsInCheckArea[cathode]++;
    if ( matchDist > minMatchDist[cathode] ) continue;
    if ( pads.At(cathode) ) delete pads.RemoveAt(cathode);
    pads.AddAt((AliMpPad*)pad.Clone(),cathode);
    minMatchDist[cathode] = matchDist;
    matchedDetElemId[cathode] = currDetElemId; // Set the input detection element id to the matched one
  } // loop on digits
  
  // If track matches many pads, it is not good for effciency determination.
  // However we still want to calculate the hit pattern.
  for ( Int_t cath=0; cath<2; cath++ ){
    if ( padsInCheckArea[cath] > 2 ) {
      AliDebug(10, Form("padsInCheckArea[%i] = %i\n",cath,padsInCheckArea[cath]));
      return kFALSE;
    }
  }
  
  return kTRUE;
}

//_____________________________________________________________________________
Float_t AliMUONTrackHitPattern::PadMatchTrack(const AliMpPad& pad, const TVector3& trackPosAtPad) const
{
  //
  /// Decides if the digit belongs to the trigger track.
  //
  
  Float_t xPad = pad.GetPositionX();
  Float_t yPad = pad.GetPositionY();
  Float_t dpx = pad.GetDimensionX();
  Float_t dpy = pad.GetDimensionY();  
  

  Float_t maxDist = GetRecoParam()->GetStripCutForTrigger() * 2. * TMath::Min(dpx,dpy); // cm
  if ( maxDist<2. ) maxDist = 2.;
  Float_t maxDistCheckArea = GetRecoParam()->GetMaxStripAreaForTrigger() * 2. *  TMath::Min(dpx,dpy); // cm

  Float_t matchDist = fkMaxDistance;

  Float_t deltaX = TMath::Abs(xPad-trackPosAtPad.X())-dpx;
  Float_t deltaY = TMath::Abs(yPad-trackPosAtPad.Y())-dpy;
  Float_t maxDistX = maxDist;
  Float_t maxDistY = maxDist;

  if(deltaX<=maxDistX && deltaY<=maxDistY) matchDist = TMath::Max(deltaX, deltaY);
  else if(deltaX<=maxDistCheckArea && deltaY<=maxDistCheckArea) matchDist = fkMaxDistance/5.;
  return matchDist;
}


//_____________________________________________________________________________
Int_t AliMUONTrackHitPattern::DetElemIdFromPos(Float_t x, Float_t y, 
                                               Int_t chamber, Int_t foundDetElemId[2]) const
{
  //
  /// Given the (x,y) position in the chamber,
  /// it returns the corresponding slats
  /// Caveat: at the border the result is not univoque
  //
  
  Int_t nFound = 0;
  
  foundDetElemId[0] = foundDetElemId[1] = 0;
  AliMpArea pointArea(x, y, 2.*AliMpConstants::LengthTolerance(), 2.*AliMpConstants::LengthTolerance());
  AliMpDEIterator it;
  for ( it.First(chamber-1); ! it.IsDone(); it.Next() ){
    Int_t detElemId = it.CurrentDEId();
    AliMpArea* deArea = fkTransformer.GetDEArea(detElemId);
    
    if ( deArea->Contains(pointArea) ) {
      foundDetElemId[nFound++] = detElemId;
      if ( nFound == 2 ) break;
    }
    else if ( nFound > 0 ) break;
  } // loop on detElemId
  
  return nFound;
}



//_____________________________________________________________________________
Bool_t AliMUONTrackHitPattern::PadsFromPos(const TVector3& vec11, const TVector3& vec21,
                                           Int_t detElemId, TObjArray& pads) const
{
  //
  /// Given the (x,y) position in the chamber,
  /// it returns the corresponding local board
  //
  
  pads.Delete();
  
  TVector3 localCoor;
  PosInDetElemIdLocal(localCoor, vec11, vec21, detElemId);
  for ( Int_t icath=0; icath<2; icath++ ) {
    const AliMpVSegmentation* seg = 
    AliMpSegmentation::Instance()
    ->GetMpSegmentation(detElemId,AliMp::GetCathodType(icath));
    AliMpPad pad = seg->PadByPosition(localCoor.X(),localCoor.Y(),kFALSE);
    if ( pad.IsValid() ) {
      pads.AddAt(pad.Clone(), icath);
    }
  }
  
  return pads.GetEntries();
}


//_____________________________________________________________________________
Bool_t AliMUONTrackHitPattern::IsCloseToAccEdge(TObjArray& pads, Int_t detElemId, Float_t coor[2]) const
{
  AliMpArea* deArea = fkTransformer.GetDEArea(detElemId);
  Float_t dpx = ((AliMpPad*)pads.At(1))->GetDimensionX();
  Float_t dpy = ((AliMpPad*)pads.At(0))->GetDimensionY();
  Float_t resolution[2] = { static_cast<Float_t>(0.75*dpx), static_cast<Float_t>(0.75*dpy) };
  Float_t sign[3] = {0., 1., -1.};
  for ( Int_t ineighx=0; ineighx<3; ineighx++ ) {
    for ( Int_t ineighy=0; ineighy<3; ineighy++ ) {
      AliMpArea pointArea(coor[0]+sign[ineighx]*resolution[0],
                          coor[1]+sign[ineighy]*resolution[1],
                          2.*AliMpConstants::LengthTolerance(),
                          2.*AliMpConstants::LengthTolerance());
      if ( ! deArea->Contains(pointArea) ) return kTRUE;
    } // loop on y neighbours
  } // loop on x neighbours
  return kFALSE;
}


//_____________________________________________________________________________
Bool_t AliMUONTrackHitPattern::IsMasked(const AliMpPad& pad, Int_t detElemId, Int_t cathode, const TVector3& vec11, const TVector3& vec21) const
{
  //
  /// Check if pad or its neighbours are masked
  //
  
  Int_t nMasked = 0;
  
  if ( fkTriggerUtilities->IsMasked(pad, detElemId, cathode) ) ++nMasked;
  
  // Check closest neighbour
  
  TVector3 localCoor;
  PosInDetElemIdLocal(localCoor, vec11, vec21, detElemId);
  
  Float_t padPos[2] = { static_cast<Float_t>(pad.GetPositionX()), static_cast<Float_t>(pad.GetPositionY())};
  Float_t padDim[2] = { static_cast<Float_t>(pad.GetDimensionX()), static_cast<Float_t>(pad.GetDimensionY())};
  Float_t inpactPos[2] = { static_cast<Float_t>(localCoor.X()), static_cast<Float_t>(localCoor.Y())};
  Float_t sign[2] = {-1., 1.};
  Int_t icoor = 1-cathode;
  Int_t addSlatSign[3] = {0,1,-1};
  Int_t inputCh = AliMpDEManager::GetChamberId(detElemId)+1;
  Int_t inputSlat = detElemId%100;
  
  Float_t newPos[2];
  for ( Int_t ineigh=0; ineigh<2; ineigh++ ) {
    newPos[1-icoor] = inpactPos[1-icoor];
    newPos[icoor] = inpactPos[icoor] + 1.05 * sign[ineigh] * padDim[icoor];
    if ( TMath::Abs(newPos[icoor] - padPos[icoor]) < padDim[icoor] ) continue;
    const AliMpVSegmentation* seg = 
      AliMpSegmentation::Instance()->GetMpSegmentation(detElemId,AliMp::GetCathodType(cathode));
    AliMpPad neighPad = seg->PadByPosition(newPos[0],newPos[1],kFALSE);
    if ( neighPad.IsValid() ) {
      if ( fkTriggerUtilities->IsMasked(neighPad, detElemId, cathode) ) ++nMasked;
    }
    else {
      TVector3 deltaVec(newPos[0]-inpactPos[0],newPos[1]-inpactPos[1],0.);
      TVector3 transVec11 = vec11+deltaVec;
      TVector3 transVec21 = vec21+deltaVec;
      TObjArray padsFromPos;
      padsFromPos.SetOwner();
      for ( Int_t iAddSlat=0; iAddSlat<2; iAddSlat++ ) {
        Int_t currSlat = (inputSlat + addSlatSign[iAddSlat])%18;
        Int_t currDetElemId = 100 * inputCh + currSlat;
        PadsFromPos(transVec11,transVec21,currDetElemId,padsFromPos);
        AliMpPad* currPad = (AliMpPad*)padsFromPos.UncheckedAt(cathode);
        Bool_t isMasked = ( currPad ) ? fkTriggerUtilities->IsMasked(*currPad, currDetElemId, cathode) : kFALSE;
        padsFromPos.Delete();
        if ( isMasked ) ++nMasked;
      }
    } // loop on slats
  } // loop on neigbours
  
  Double_t maskedProb = ((Double_t)nMasked)/3.;
  if ( gRandom->Rndm() < maskedProb ) return kTRUE;
  
  return kFALSE;
}


//_____________________________________________________________________________
Bool_t AliMUONTrackHitPattern::PerformTrigTrackMatch(UInt_t &pattern,
						     const AliMUONTriggerTrack* matchedTrigTrack) const
{
  //
  /// It searches for matching digits around the trigger track.
  //
  
  AliCodeTimerAuto("",0);

  enum {kBending, kNonBending};

  TArrayF zMeanChamber(AliMUONConstants::NTriggerCh());
  zMeanChamber[0] = matchedTrigTrack->GetZ11();
  zMeanChamber[1] = matchedTrigTrack->GetZ11() + AliMUONConstants::DefaultChamberZ(11) - AliMUONConstants::DefaultChamberZ(10);
  zMeanChamber[2] = matchedTrigTrack->GetZ21();
  zMeanChamber[3] = matchedTrigTrack->GetZ21() + AliMUONConstants::DefaultChamberZ(13) - AliMUONConstants::DefaultChamberZ(12);

  TArrayI digitPerTrack(2);
  digitPerTrack.Reset();

  Float_t trackIntersectCh[2];

  Float_t slopeX = matchedTrigTrack->GetSlopeX();
  Float_t slopeY = matchedTrigTrack->GetSlopeY();
  
  Float_t z11 = matchedTrigTrack->GetZ11();
  Float_t x11 = slopeX * z11;
  Float_t y11 = matchedTrigTrack->GetY11();
  Float_t z21 =  matchedTrigTrack->GetZ21();
  Float_t x21 = slopeX * z21;
  Float_t y21 = y11 + slopeY * (z21-z11);
  TVector3 vec11(x11, y11, z11), vec21(x21, y21, z21);
  
  Int_t firstSlat = -1, firstBoard = -1;
  AliESDMuonTrack::EAliTriggerChPatternFlag goodForEff = AliESDMuonTrack::kBoardEff;
  TObjArray matchedPads(2), padsFromPos(2), validPads(2);
  matchedPads.SetOwner(); padsFromPos.SetOwner();
  Int_t matchedDetElemId[2], detElemIdFromTrack[2];
  
  for(Int_t ich=0; ich<AliMUONConstants::NTriggerCh(); ich++) { // chamber loop
    
    // searching track intersection with chambers (first approximation)
    Float_t deltaZ = zMeanChamber[ich] - zMeanChamber[0];
    trackIntersectCh[0] = zMeanChamber[ich] * slopeX;
    trackIntersectCh[1] = y11 + deltaZ * slopeY;
    Int_t nFound = DetElemIdFromPos(trackIntersectCh[0], trackIntersectCh[1], 11+ich, detElemIdFromTrack);
    if ( nFound == 0 ) {
      // track is rejected since the extrapolated track
      // does not match a slat (border effects)
      AliESDMuonTrack::AddEffInfo(pattern, AliESDMuonTrack::kTrackOutsideGeometry);
      goodForEff = AliESDMuonTrack::kNoEff;
      AliDebug(10, "Warning: trigger track outside trigger chamber\n");
      continue;
    }
    
    matchedDetElemId[0] = matchedDetElemId[1] = detElemIdFromTrack[0];
    
    if ( ! FindPadMatchingTrig(vec11, vec21, matchedDetElemId, matchedPads) ) {
      // if ! FindPadMatchingTrig => too many digits matching pad =>
      //                          => Event not clear => Do not use for efficiency calculation
      AliESDMuonTrack::AddEffInfo(pattern, AliESDMuonTrack::kTrackMatchesManyPads);
      goodForEff = AliESDMuonTrack::kNoEff;
      AliDebug(10, Form("Warning: track = %p (%i) matches many pads. Rejected!\n",(void *)matchedTrigTrack, matchedDetElemId[0]));
    }
    
    Int_t nMatched = 0;

    Int_t mostProbDEmatched = detElemIdFromTrack[0];
    for ( Int_t icath=0; icath<2; icath++ ) {
      if ( matchedPads.UncheckedAt(icath) ) {
        nMatched++;
        // Fill pattern anyway
        AliESDMuonTrack::SetFiredChamber(pattern, icath, ich);
        digitPerTrack[icath]++;
        mostProbDEmatched = matchedDetElemId[icath];
      }
    }
    Int_t mostProbDEfromTrack = detElemIdFromTrack[0];
    for ( Int_t ifound=0; ifound<nFound; ifound++ ) {
      if ( detElemIdFromTrack[ifound] == mostProbDEmatched ) {
        mostProbDEfromTrack = mostProbDEmatched;
        break;
      }
    }
    
    if ( goodForEff == AliESDMuonTrack::kNoEff ) continue;

    if ( nMatched < 2 ) PadsFromPos(vec11, vec21, mostProbDEfromTrack, padsFromPos);

    for ( Int_t cath=0; cath<2; cath++ ) {
      if ( matchedPads.UncheckedAt(cath) ) validPads.AddAt(matchedPads.UncheckedAt(cath),cath);
      else if ( padsFromPos.UncheckedAt(cath) ) {
        AliMpPad* currPad = (AliMpPad*)padsFromPos.UncheckedAt(cath);
        validPads.AddAt(currPad,cath);
        if ( IsMasked(*currPad, mostProbDEfromTrack, cath, vec11, vec21) ) {
          // Check if strip was masked (if inefficient strip is found)
          AliESDMuonTrack::AddEffInfo(pattern,AliESDMuonTrack::kTrackMatchesMasks); // pad is masked
          AliDebug(10,Form("DetElemId %i  cath %i  board %i  strip %i is masked: effFlag 0", mostProbDEfromTrack, cath, currPad->GetLocalBoardId(0), currPad->GetLocalBoardChannel(0)));
          goodForEff = AliESDMuonTrack::kNoEff;
        }
      }
      else goodForEff = AliESDMuonTrack::kNoEff;
    } // loop on cathodes
        
    if ( goodForEff != AliESDMuonTrack::kNoEff ) {
      
      if ( nMatched == 0 && IsCloseToAccEdge(padsFromPos, mostProbDEfromTrack, trackIntersectCh) ) {
        // Non of cathodes is fired.
        // If we are close to the edge of the RPC
        // it could be a problem of acceptance 
        AliESDMuonTrack::AddEffInfo(pattern, AliESDMuonTrack::kTrackOutsideGeometry);
        goodForEff = AliESDMuonTrack::kNoEff;
        AliDebug(10, "Warning: trigger track at the edge of the chamber\n");
      }
      
      Int_t currSlat = mostProbDEmatched%100;
      if ( firstSlat < 0 ) firstSlat = currSlat;
      else if ( currSlat != firstSlat ) {
        goodForEff = AliESDMuonTrack::kChEff;
        firstSlat = AliESDMuonTrack::kCrossDifferentSlats;
      }
    
      if ( firstBoard < 0 ) firstBoard = ((AliMpPad*)validPads[kBending])->GetLocalBoardId(0);
        
      for ( Int_t cath=0; cath<2; cath++ ){      
      
        if ( goodForEff == AliESDMuonTrack::kBoardEff) {
          Bool_t atLeastOneLoc = kFALSE;
          AliMpPad* currPad = (AliMpPad*)validPads.UncheckedAt(cath);
          for ( Int_t iloc=0; iloc<currPad->GetNofLocations(); iloc++) {
            if ( currPad->GetLocalBoardId(iloc) == firstBoard ) {
              atLeastOneLoc = kTRUE;
              break;
            }
          } // loop on locations
          if ( ! atLeastOneLoc ) goodForEff = AliESDMuonTrack::kSlatEff;
        }
      } // loop on cathodes
    } // if track good for efficiency
    matchedPads.Delete();
    padsFromPos.Delete();
  } // end chamber loop
  
  if ( goodForEff == AliESDMuonTrack::kNoEff ) return kFALSE;

  for(Int_t cath=0; cath<2; cath++){
    if(digitPerTrack[cath]<3) {
      // track is rejected since the number of associated
      // digits found is less than 3.
      AliESDMuonTrack::AddEffInfo(pattern, AliESDMuonTrack::kTrackMatchesFewPads);
      goodForEff = AliESDMuonTrack::kNoEff;
      AliDebug(10, Form("Warning: found %i digits for trigger track cathode %i.\nRejecting event\n", digitPerTrack[cath],cath));
    }
  } // loop on cathodes 

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