ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2007, 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: AliUtilityMuonAncestor.cxx 47782 2011-02-24 18:37:31Z martinez $ */

//-----------------------------------------------------------------------------
/// \class AliUtilityMuonAncestor
/// Static utilities to get the muon ancestor in MC
///
/// \author Diego Stocco
//-----------------------------------------------------------------------------

#include "AliUtilityMuonAncestor.h"

// ROOT includes
#include "TDatabasePDG.h"
#include "TParticlePDG.h"
#include "TPDGCode.h"
#include "TMCProcess.h"
#include "TMath.h"

// STEER includes
#include "AliMCEvent.h"
#include "AliVParticle.h"
#include "AliMCParticle.h"
#include "AliAODMCParticle.h"
#include "AliLog.h"

// PWGmuon includes
#include "AliAnalysisMuonUtility.h"

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

//_________________________________________________________
AliUtilityMuonAncestor::AliUtilityMuonAncestor() :
TObject(),
fPx(0.),
fPy(0.),
fPz(0.),
fMask(0),
fAncestor(-999)
{
  /// Default constructor
}


//_________________________________________________________
AliUtilityMuonAncestor::~AliUtilityMuonAncestor()
{
  /// Default destructor
}

//_________________________________________________________
AliUtilityMuonAncestor::AliUtilityMuonAncestor(const AliUtilityMuonAncestor& obj) :
TObject(obj),
fPx(obj.fPx),
fPy(obj.fPy),
fPz(obj.fPz),
fMask(obj.fMask),
fAncestor(obj.fAncestor)
{
  /// Copy constructor
}

//_________________________________________________________
AliUtilityMuonAncestor& AliUtilityMuonAncestor::operator=(const AliUtilityMuonAncestor& obj)
{
  /// Copy operator
  if ( this != &obj ) {
    TObject::operator=(obj);
    fPx = obj.fPx;
    fPy = obj.fPy;
    fPz = obj.fPz;
    fMask = obj.fMask;
    fAncestor = obj.fAncestor;
  }
  return *this;
}

//_________________________________________________________
Bool_t AliUtilityMuonAncestor::BuildAncestor ( AliVParticle* track, const AliMCEvent* mcEvent )
{
  /// Build ancestor
  
  // If track is the same as the one in memory, do not re-build the track ancestor
  if ( track->Px() == fPx && track->Py() == fPy && track->Pz() == fPz ) return kTRUE;
  fPx = track->Px();
  fPy = track->Py();
  fPz = track->Pz();
  fMask = 0;
  fAncestor = -999;
  if ( ! mcEvent ) return kFALSE;
  
  AliVParticle* mcParticle = 0x0;
  
  if ( AliAnalysisMuonUtility::IsMCTrack(track) ) mcParticle = track;
  else {
    Int_t trackLabel = track->GetLabel();
    if ( trackLabel < 0 ) return kFALSE;
    mcParticle = mcEvent->GetTrack(trackLabel);
  }
  
  // Track is MC (or matches a MC track)
  SETBIT(fMask,kIsID);
  
  Int_t recoPdg = mcParticle->PdgCode();
  
  // Track is not a muon
  if ( TMath::Abs(recoPdg) == 13 ) SETBIT(fMask,kIsMuon);
  
  Int_t imother = AliAnalysisMuonUtility::GetMotherIndex(mcParticle);

  while ( imother >= 0 ) {
    AliVParticle* part = mcEvent->GetTrack(imother);
    
    Int_t absPdg = TMath::Abs(part->PdgCode());
    
    // This is a quark
    if ( absPdg < 10 ) return kTRUE;
    
    fAncestor = imother;
    Bool_t isPrimary = AliAnalysisMuonUtility::IsPrimary(part, mcEvent);
    
    if ( isPrimary ) {
      Int_t mpdg = absPdg%100000;
      if ( mpdg >= 100 && mpdg < 10000 ) {
        Int_t flv  = Int_t ( mpdg / TMath::Power(10, Int_t(TMath::Log10(mpdg) )));
        if ( flv < 4 ) SETBIT(fMask,kHasLightParent);
        else if ( flv >= 6 ) continue;
        else {
          TParticlePDG* partPdg = TDatabasePDG::Instance()->GetParticle(part->PdgCode());
          if ( partPdg && ! partPdg->AntiParticle() ) SETBIT(fMask,kHasQuarkoniumParent);
          else if ( flv == 4 ) SETBIT(fMask,kHasCharmParent);
          else SETBIT(fMask,kHasBeautyParent);
        }
      } // absPdg within 100 and 10000
    } // is primary
    else {
      UInt_t mcProcess = AliAnalysisMuonUtility::GetMCProcess(part);
      if ( mcProcess == kPHadronic ||
           ( mcProcess == 0 && part->Zv() < -90. ) ) {
        // The MC process is not well computed in the AODs of old MC productions
        // In this case, declare the particle as "secondary" if it is produced inside the front absorber
        SETBIT(fMask,kIsSecondary);
//        return kTRUE;
      }
    } // is secondary
    
    imother = AliAnalysisMuonUtility::GetMotherIndex(part);
    
  } // loop on mothers
  return kTRUE;
}

//_________________________________________________________
Bool_t AliUtilityMuonAncestor::CheckAncestor ( AliVParticle* track, const AliMCEvent* mcEvent, Int_t ancestorPdg, Bool_t matchAbsPdg )
{
  /// Check ancestor
  Int_t pdgCode = GetAncestorPdg(track, mcEvent);
  if ( matchAbsPdg ) {
    pdgCode = TMath::Abs(pdgCode);
    ancestorPdg = TMath::Abs(ancestorPdg);
  }
  return ( pdgCode == ancestorPdg );
}

//_________________________________________________________
Int_t AliUtilityMuonAncestor::GetAncestor ( AliVParticle* track, const AliMCEvent* mcEvent )
{
  /// Return ancestor (compute it if necessary)
  BuildAncestor(track,mcEvent);
  return fAncestor;
}

//_________________________________________________________
Int_t AliUtilityMuonAncestor::GetAncestorPdg ( AliVParticle* track, const AliMCEvent* mcEvent )
{
  /// Return ancestor Pdg
  if ( BuildAncestor(track,mcEvent) ) {
    if ( fAncestor >= 0 ) return mcEvent->GetTrack(fAncestor)->PdgCode();
  }
  return 0;
}

//_________________________________________________________
Long64_t AliUtilityMuonAncestor::GetMask ( AliVParticle* track, const AliMCEvent* mcEvent )
{
  /// Return mask
  BuildAncestor(track,mcEvent);
  return fMask;
}


//_________________________________________________________
Bool_t AliUtilityMuonAncestor::IsBeautyMu ( AliVParticle* track, const AliMCEvent* mcEvent )
{
  /// Muon from beauty decays
  Long64_t mask = GetMask(track,mcEvent);
  return ( TESTBIT(mask,kIsID) && TESTBIT(mask,kIsMuon) && TESTBIT(mask,kHasBeautyParent) & ! TESTBIT(mask,kHasLightParent) );
}

//_________________________________________________________
Bool_t AliUtilityMuonAncestor::IsBJpsiMu ( AliVParticle* track, const AliMCEvent* mcEvent )
{
  /// Muon B->J/psi decays
  if ( IsBeautyMu(track,mcEvent) ) {
    Int_t imother = AliAnalysisMuonUtility::GetMotherIndex(track);
    if ( imother >= 0 ) return ( mcEvent->GetTrack(imother)->PdgCode() == 443 );
  }
  return kFALSE;
}

//_________________________________________________________
Bool_t AliUtilityMuonAncestor::IsCharmMu ( AliVParticle* track, const AliMCEvent* mcEvent )
{
  /// Muon from charm decays
  Long64_t mask = GetMask(track,mcEvent);
  return ( TESTBIT(mask,kIsID) && TESTBIT(mask,kIsMuon) && TESTBIT(mask,kHasCharmParent) && ! TESTBIT(mask,kHasBeautyParent) && ! TESTBIT(mask,kHasLightParent) );
}

//_________________________________________________________
Bool_t AliUtilityMuonAncestor::IsDecayMu ( AliVParticle* track, const AliMCEvent* mcEvent )
{
  /// Muon from light hadron decays
  Long64_t mask = GetMask(track,mcEvent);
  return ( TESTBIT(mask,kIsID) && TESTBIT(mask,kIsMuon) && TESTBIT(mask,kHasLightParent) && ! TESTBIT(mask,kIsSecondary) );
}

//_________________________________________________________
Bool_t AliUtilityMuonAncestor::IsHadron ( AliVParticle* track, const AliMCEvent* mcEvent )
{
  /// Reconstructed hadron
  Long64_t mask = GetMask(track,mcEvent);
  return ( TESTBIT(mask,kIsID) && ! TESTBIT(mask,kIsMuon) );
}

//_________________________________________________________
Bool_t AliUtilityMuonAncestor::IsMuon ( AliVParticle* track, const AliMCEvent* mcEvent )
{
  /// Track is muon
  Long64_t mask = GetMask(track,mcEvent);
  return ( TESTBIT(mask,kIsID) && TESTBIT(mask,kIsMuon) );
}

//_________________________________________________________
Bool_t AliUtilityMuonAncestor::IsQuarkoniumMu ( AliVParticle* track, const AliMCEvent* mcEvent )
{
  /// Mu from quarkonium decay
  Long64_t mask = GetMask(track,mcEvent);
  return ( TESTBIT(mask,kIsID) && TESTBIT(mask,kIsMuon) && TESTBIT(mask,kHasQuarkoniumParent) );
}

//_________________________________________________________
Bool_t AliUtilityMuonAncestor::IsSecondaryMu ( AliVParticle* track, const AliMCEvent* mcEvent )
{
  /// Muon from secondary decays in absorber
  Long64_t mask = GetMask(track,mcEvent);
  return ( TESTBIT(mask,kIsID) && TESTBIT(mask,kIsMuon) && TESTBIT(mask,kIsSecondary) );
}

//_________________________________________________________
Bool_t AliUtilityMuonAncestor::IsUnidentified ( AliVParticle* track, const AliMCEvent* mcEvent )
{
  /// Unidentified muon
  Long64_t mask = GetMask(track,mcEvent);
  return ( ! TESTBIT(mask,kIsID) );
}

//_________________________________________________________
Bool_t AliUtilityMuonAncestor::IsWBosonMu ( AliVParticle* track, const AliMCEvent* mcEvent )
{
  /// Muon from W boson decays
  return ( IsMuon(track,mcEvent) && CheckAncestor(track,mcEvent,24) );
}
          
//_________________________________________________________
Bool_t AliUtilityMuonAncestor::IsZBosonMu ( AliVParticle* track, const AliMCEvent* mcEvent )
{
  /// Muon from Z boson decays
  return ( IsMuon(track,mcEvent) && CheckAncestor(track,mcEvent,kZ0) );
}
 AliUtilityMuonAncestor.cxx:1
 AliUtilityMuonAncestor.cxx:2
 AliUtilityMuonAncestor.cxx:3
 AliUtilityMuonAncestor.cxx:4
 AliUtilityMuonAncestor.cxx:5
 AliUtilityMuonAncestor.cxx:6
 AliUtilityMuonAncestor.cxx:7
 AliUtilityMuonAncestor.cxx:8
 AliUtilityMuonAncestor.cxx:9
 AliUtilityMuonAncestor.cxx:10
 AliUtilityMuonAncestor.cxx:11
 AliUtilityMuonAncestor.cxx:12
 AliUtilityMuonAncestor.cxx:13
 AliUtilityMuonAncestor.cxx:14
 AliUtilityMuonAncestor.cxx:15
 AliUtilityMuonAncestor.cxx:16
 AliUtilityMuonAncestor.cxx:17
 AliUtilityMuonAncestor.cxx:18
 AliUtilityMuonAncestor.cxx:19
 AliUtilityMuonAncestor.cxx:20
 AliUtilityMuonAncestor.cxx:21
 AliUtilityMuonAncestor.cxx:22
 AliUtilityMuonAncestor.cxx:23
 AliUtilityMuonAncestor.cxx:24
 AliUtilityMuonAncestor.cxx:25
 AliUtilityMuonAncestor.cxx:26
 AliUtilityMuonAncestor.cxx:27
 AliUtilityMuonAncestor.cxx:28
 AliUtilityMuonAncestor.cxx:29
 AliUtilityMuonAncestor.cxx:30
 AliUtilityMuonAncestor.cxx:31
 AliUtilityMuonAncestor.cxx:32
 AliUtilityMuonAncestor.cxx:33
 AliUtilityMuonAncestor.cxx:34
 AliUtilityMuonAncestor.cxx:35
 AliUtilityMuonAncestor.cxx:36
 AliUtilityMuonAncestor.cxx:37
 AliUtilityMuonAncestor.cxx:38
 AliUtilityMuonAncestor.cxx:39
 AliUtilityMuonAncestor.cxx:40
 AliUtilityMuonAncestor.cxx:41
 AliUtilityMuonAncestor.cxx:42
 AliUtilityMuonAncestor.cxx:43
 AliUtilityMuonAncestor.cxx:44
 AliUtilityMuonAncestor.cxx:45
 AliUtilityMuonAncestor.cxx:46
 AliUtilityMuonAncestor.cxx:47
 AliUtilityMuonAncestor.cxx:48
 AliUtilityMuonAncestor.cxx:49
 AliUtilityMuonAncestor.cxx:50
 AliUtilityMuonAncestor.cxx:51
 AliUtilityMuonAncestor.cxx:52
 AliUtilityMuonAncestor.cxx:53
 AliUtilityMuonAncestor.cxx:54
 AliUtilityMuonAncestor.cxx:55
 AliUtilityMuonAncestor.cxx:56
 AliUtilityMuonAncestor.cxx:57
 AliUtilityMuonAncestor.cxx:58
 AliUtilityMuonAncestor.cxx:59
 AliUtilityMuonAncestor.cxx:60
 AliUtilityMuonAncestor.cxx:61
 AliUtilityMuonAncestor.cxx:62
 AliUtilityMuonAncestor.cxx:63
 AliUtilityMuonAncestor.cxx:64
 AliUtilityMuonAncestor.cxx:65
 AliUtilityMuonAncestor.cxx:66
 AliUtilityMuonAncestor.cxx:67
 AliUtilityMuonAncestor.cxx:68
 AliUtilityMuonAncestor.cxx:69
 AliUtilityMuonAncestor.cxx:70
 AliUtilityMuonAncestor.cxx:71
 AliUtilityMuonAncestor.cxx:72
 AliUtilityMuonAncestor.cxx:73
 AliUtilityMuonAncestor.cxx:74
 AliUtilityMuonAncestor.cxx:75
 AliUtilityMuonAncestor.cxx:76
 AliUtilityMuonAncestor.cxx:77
 AliUtilityMuonAncestor.cxx:78
 AliUtilityMuonAncestor.cxx:79
 AliUtilityMuonAncestor.cxx:80
 AliUtilityMuonAncestor.cxx:81
 AliUtilityMuonAncestor.cxx:82
 AliUtilityMuonAncestor.cxx:83
 AliUtilityMuonAncestor.cxx:84
 AliUtilityMuonAncestor.cxx:85
 AliUtilityMuonAncestor.cxx:86
 AliUtilityMuonAncestor.cxx:87
 AliUtilityMuonAncestor.cxx:88
 AliUtilityMuonAncestor.cxx:89
 AliUtilityMuonAncestor.cxx:90
 AliUtilityMuonAncestor.cxx:91
 AliUtilityMuonAncestor.cxx:92
 AliUtilityMuonAncestor.cxx:93
 AliUtilityMuonAncestor.cxx:94
 AliUtilityMuonAncestor.cxx:95
 AliUtilityMuonAncestor.cxx:96
 AliUtilityMuonAncestor.cxx:97
 AliUtilityMuonAncestor.cxx:98
 AliUtilityMuonAncestor.cxx:99
 AliUtilityMuonAncestor.cxx:100
 AliUtilityMuonAncestor.cxx:101
 AliUtilityMuonAncestor.cxx:102
 AliUtilityMuonAncestor.cxx:103
 AliUtilityMuonAncestor.cxx:104
 AliUtilityMuonAncestor.cxx:105
 AliUtilityMuonAncestor.cxx:106
 AliUtilityMuonAncestor.cxx:107
 AliUtilityMuonAncestor.cxx:108
 AliUtilityMuonAncestor.cxx:109
 AliUtilityMuonAncestor.cxx:110
 AliUtilityMuonAncestor.cxx:111
 AliUtilityMuonAncestor.cxx:112
 AliUtilityMuonAncestor.cxx:113
 AliUtilityMuonAncestor.cxx:114
 AliUtilityMuonAncestor.cxx:115
 AliUtilityMuonAncestor.cxx:116
 AliUtilityMuonAncestor.cxx:117
 AliUtilityMuonAncestor.cxx:118
 AliUtilityMuonAncestor.cxx:119
 AliUtilityMuonAncestor.cxx:120
 AliUtilityMuonAncestor.cxx:121
 AliUtilityMuonAncestor.cxx:122
 AliUtilityMuonAncestor.cxx:123
 AliUtilityMuonAncestor.cxx:124
 AliUtilityMuonAncestor.cxx:125
 AliUtilityMuonAncestor.cxx:126
 AliUtilityMuonAncestor.cxx:127
 AliUtilityMuonAncestor.cxx:128
 AliUtilityMuonAncestor.cxx:129
 AliUtilityMuonAncestor.cxx:130
 AliUtilityMuonAncestor.cxx:131
 AliUtilityMuonAncestor.cxx:132
 AliUtilityMuonAncestor.cxx:133
 AliUtilityMuonAncestor.cxx:134
 AliUtilityMuonAncestor.cxx:135
 AliUtilityMuonAncestor.cxx:136
 AliUtilityMuonAncestor.cxx:137
 AliUtilityMuonAncestor.cxx:138
 AliUtilityMuonAncestor.cxx:139
 AliUtilityMuonAncestor.cxx:140
 AliUtilityMuonAncestor.cxx:141
 AliUtilityMuonAncestor.cxx:142
 AliUtilityMuonAncestor.cxx:143
 AliUtilityMuonAncestor.cxx:144
 AliUtilityMuonAncestor.cxx:145
 AliUtilityMuonAncestor.cxx:146
 AliUtilityMuonAncestor.cxx:147
 AliUtilityMuonAncestor.cxx:148
 AliUtilityMuonAncestor.cxx:149
 AliUtilityMuonAncestor.cxx:150
 AliUtilityMuonAncestor.cxx:151
 AliUtilityMuonAncestor.cxx:152
 AliUtilityMuonAncestor.cxx:153
 AliUtilityMuonAncestor.cxx:154
 AliUtilityMuonAncestor.cxx:155
 AliUtilityMuonAncestor.cxx:156
 AliUtilityMuonAncestor.cxx:157
 AliUtilityMuonAncestor.cxx:158
 AliUtilityMuonAncestor.cxx:159
 AliUtilityMuonAncestor.cxx:160
 AliUtilityMuonAncestor.cxx:161
 AliUtilityMuonAncestor.cxx:162
 AliUtilityMuonAncestor.cxx:163
 AliUtilityMuonAncestor.cxx:164
 AliUtilityMuonAncestor.cxx:165
 AliUtilityMuonAncestor.cxx:166
 AliUtilityMuonAncestor.cxx:167
 AliUtilityMuonAncestor.cxx:168
 AliUtilityMuonAncestor.cxx:169
 AliUtilityMuonAncestor.cxx:170
 AliUtilityMuonAncestor.cxx:171
 AliUtilityMuonAncestor.cxx:172
 AliUtilityMuonAncestor.cxx:173
 AliUtilityMuonAncestor.cxx:174
 AliUtilityMuonAncestor.cxx:175
 AliUtilityMuonAncestor.cxx:176
 AliUtilityMuonAncestor.cxx:177
 AliUtilityMuonAncestor.cxx:178
 AliUtilityMuonAncestor.cxx:179
 AliUtilityMuonAncestor.cxx:180
 AliUtilityMuonAncestor.cxx:181
 AliUtilityMuonAncestor.cxx:182
 AliUtilityMuonAncestor.cxx:183
 AliUtilityMuonAncestor.cxx:184
 AliUtilityMuonAncestor.cxx:185
 AliUtilityMuonAncestor.cxx:186
 AliUtilityMuonAncestor.cxx:187
 AliUtilityMuonAncestor.cxx:188
 AliUtilityMuonAncestor.cxx:189
 AliUtilityMuonAncestor.cxx:190
 AliUtilityMuonAncestor.cxx:191
 AliUtilityMuonAncestor.cxx:192
 AliUtilityMuonAncestor.cxx:193
 AliUtilityMuonAncestor.cxx:194
 AliUtilityMuonAncestor.cxx:195
 AliUtilityMuonAncestor.cxx:196
 AliUtilityMuonAncestor.cxx:197
 AliUtilityMuonAncestor.cxx:198
 AliUtilityMuonAncestor.cxx:199
 AliUtilityMuonAncestor.cxx:200
 AliUtilityMuonAncestor.cxx:201
 AliUtilityMuonAncestor.cxx:202
 AliUtilityMuonAncestor.cxx:203
 AliUtilityMuonAncestor.cxx:204
 AliUtilityMuonAncestor.cxx:205
 AliUtilityMuonAncestor.cxx:206
 AliUtilityMuonAncestor.cxx:207
 AliUtilityMuonAncestor.cxx:208
 AliUtilityMuonAncestor.cxx:209
 AliUtilityMuonAncestor.cxx:210
 AliUtilityMuonAncestor.cxx:211
 AliUtilityMuonAncestor.cxx:212
 AliUtilityMuonAncestor.cxx:213
 AliUtilityMuonAncestor.cxx:214
 AliUtilityMuonAncestor.cxx:215
 AliUtilityMuonAncestor.cxx:216
 AliUtilityMuonAncestor.cxx:217
 AliUtilityMuonAncestor.cxx:218
 AliUtilityMuonAncestor.cxx:219
 AliUtilityMuonAncestor.cxx:220
 AliUtilityMuonAncestor.cxx:221
 AliUtilityMuonAncestor.cxx:222
 AliUtilityMuonAncestor.cxx:223
 AliUtilityMuonAncestor.cxx:224
 AliUtilityMuonAncestor.cxx:225
 AliUtilityMuonAncestor.cxx:226
 AliUtilityMuonAncestor.cxx:227
 AliUtilityMuonAncestor.cxx:228
 AliUtilityMuonAncestor.cxx:229
 AliUtilityMuonAncestor.cxx:230
 AliUtilityMuonAncestor.cxx:231
 AliUtilityMuonAncestor.cxx:232
 AliUtilityMuonAncestor.cxx:233
 AliUtilityMuonAncestor.cxx:234
 AliUtilityMuonAncestor.cxx:235
 AliUtilityMuonAncestor.cxx:236
 AliUtilityMuonAncestor.cxx:237
 AliUtilityMuonAncestor.cxx:238
 AliUtilityMuonAncestor.cxx:239
 AliUtilityMuonAncestor.cxx:240
 AliUtilityMuonAncestor.cxx:241
 AliUtilityMuonAncestor.cxx:242
 AliUtilityMuonAncestor.cxx:243
 AliUtilityMuonAncestor.cxx:244
 AliUtilityMuonAncestor.cxx:245
 AliUtilityMuonAncestor.cxx:246
 AliUtilityMuonAncestor.cxx:247
 AliUtilityMuonAncestor.cxx:248
 AliUtilityMuonAncestor.cxx:249
 AliUtilityMuonAncestor.cxx:250
 AliUtilityMuonAncestor.cxx:251
 AliUtilityMuonAncestor.cxx:252
 AliUtilityMuonAncestor.cxx:253
 AliUtilityMuonAncestor.cxx:254
 AliUtilityMuonAncestor.cxx:255
 AliUtilityMuonAncestor.cxx:256
 AliUtilityMuonAncestor.cxx:257
 AliUtilityMuonAncestor.cxx:258
 AliUtilityMuonAncestor.cxx:259
 AliUtilityMuonAncestor.cxx:260
 AliUtilityMuonAncestor.cxx:261
 AliUtilityMuonAncestor.cxx:262
 AliUtilityMuonAncestor.cxx:263
 AliUtilityMuonAncestor.cxx:264
 AliUtilityMuonAncestor.cxx:265
 AliUtilityMuonAncestor.cxx:266
 AliUtilityMuonAncestor.cxx:267
 AliUtilityMuonAncestor.cxx:268
 AliUtilityMuonAncestor.cxx:269
 AliUtilityMuonAncestor.cxx:270
 AliUtilityMuonAncestor.cxx:271
 AliUtilityMuonAncestor.cxx:272
 AliUtilityMuonAncestor.cxx:273
 AliUtilityMuonAncestor.cxx:274
 AliUtilityMuonAncestor.cxx:275
 AliUtilityMuonAncestor.cxx:276
 AliUtilityMuonAncestor.cxx:277
 AliUtilityMuonAncestor.cxx:278
 AliUtilityMuonAncestor.cxx:279
 AliUtilityMuonAncestor.cxx:280
 AliUtilityMuonAncestor.cxx:281
 AliUtilityMuonAncestor.cxx:282
 AliUtilityMuonAncestor.cxx:283
 AliUtilityMuonAncestor.cxx:284
 AliUtilityMuonAncestor.cxx:285
 AliUtilityMuonAncestor.cxx:286
 AliUtilityMuonAncestor.cxx:287
 AliUtilityMuonAncestor.cxx:288
 AliUtilityMuonAncestor.cxx:289
 AliUtilityMuonAncestor.cxx:290
 AliUtilityMuonAncestor.cxx:291
 AliUtilityMuonAncestor.cxx:292
 AliUtilityMuonAncestor.cxx:293
 AliUtilityMuonAncestor.cxx:294
 AliUtilityMuonAncestor.cxx:295