ROOT logo
/**************************************************************************
* Copyright(c) 1998-2013, 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$

///
/// Implementation of an AliAODBranchReplicator to produce slim muon and dimuon aods.
///
/// This replicator is in charge of replicating the tracks,vertices,dimuons
/// (vzero, tzero, zdc, and, optionally, the SPD tracklets) branches
/// of the standard AOD into muon AODs (AliAOD.Muons.root and AliAOD.Dimuons.root)
///
/// The tracks are filtered so that only muon tracks (and only muon tracks
/// that pass the trackCut if present) make it to the output aods
///
/// The vertices are filtered so that only the primary (and pileup) vertices make it
/// to the output aods.
///
/// The dimuons are recreated here, according to the set of tracks
/// that pass the trackCut (that set may be the same as the input set,
/// but to be 100% safe, we always recreate the dimuons).
///
/// \author L. Aphecetche (Subatech)

#include "AliAODMuonReplicator.h"

#include "AliAODDimuon.h"
#include "AliAODEvent.h"
#include "AliAODMCHeader.h"
#include "AliAODMCParticle.h"
#include "AliAODTZERO.h"
#include "AliAODTrack.h"
#include "AliAODVZERO.h"
#include "AliAnalysisCuts.h"
#include <cassert>

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

//_____________________________________________________________________________
AliAODMuonReplicator::AliAODMuonReplicator(const char* name, const char* title,
                                           AliAnalysisCuts* trackCut,
                                           AliAnalysisCuts* vertexCut,
                                           Int_t mcMode,
                                           Bool_t replicateHeader,
                                           Bool_t replicateTracklets)
:AliAODBranchReplicator(name,title), 
fTrackCut(trackCut), fTracks(0x0), 
fVertexCut(vertexCut), fVertices(0x0), 
fDimuons(0x0),
fVZERO(0x0),
fTZERO(0x0),
fHeader(0x0),
fTracklets(0x0),
fZDC(0x0),
fList(0x0),
fMCParticles(0x0),
fMCHeader(0x0),
fMCMode(mcMode),
fLabelMap(),
fParticleSelected(),
fReplicateHeader(replicateHeader),
fReplicateTracklets(replicateTracklets)
{
  /// default ctor
  ///
  /// \param trackCut if present will filter out tracks
  /// \param vertexCut if present will filter out vertices
  /// \param mcMode what to do with MC information (0: skip it, 1: copy all,
  /// 2: copy only for events with at least one muon )
  /// \param replicateHeader whether or not to handle the replication of the
  /// AOD header branch
  /// \param replicateTracklets whether or not to include the SPD tracklets branch
  ///
}

//_____________________________________________________________________________
AliAODMuonReplicator::~AliAODMuonReplicator()
{
  /// dtor
  delete fTrackCut;
  delete fVertexCut;
  delete fList;
}

//_____________________________________________________________________________
void AliAODMuonReplicator::SelectParticle(Int_t i)
{
  /// taking the absolute values here, need to take care
  /// of negative daughter and mother
  /// IDs when setting!
  
  if (!IsParticleSelected(TMath::Abs(i)))
  {
    fParticleSelected.Add(TMath::Abs(i),1);    
  }
}

//_____________________________________________________________________________
Bool_t AliAODMuonReplicator::IsParticleSelected(Int_t i)  
{
  /// taking the absolute values here, need to take
  /// care with negative daughter and mother
  /// IDs when setting!
  return (fParticleSelected.GetValue(TMath::Abs(i))==1);
}


//_____________________________________________________________________________
void AliAODMuonReplicator::CreateLabelMap(const AliAODEvent& source)
{  
  //
  // this should be called once all selections are done 
  //
  
  fLabelMap.Delete();
  
  TClonesArray* mcParticles = static_cast<TClonesArray*>(source.FindListObject(AliAODMCParticle::StdBranchName()));
  
  Int_t i(0);
  Int_t j(0);
  
  TIter next(mcParticles);
  
  while ( next() ) 
  {
    if (IsParticleSelected(i))
    {
      fLabelMap.Add(i,j++);
    }
    ++i;
  }
}

//_____________________________________________________________________________
Int_t AliAODMuonReplicator::GetNewLabel(Int_t i) 
{
  /// Gets the label from the new created Map
  /// Call CreatLabelMap before
  /// otherwise only 0 returned
  return fLabelMap.GetValue(TMath::Abs(i));
}

//_____________________________________________________________________________
void AliAODMuonReplicator::FilterMC(const AliAODEvent& source)
{
  /// Filter MC information

  fMCHeader->Reset();
  fMCParticles->Clear("C");

  AliAODMCHeader* mcHeader(0x0);
  TClonesArray* mcParticles(0x0);
  
  fParticleSelected.Delete();
  
  if ( fMCMode==2 && !fTracks->GetEntries() ) return;
  // for fMCMode==2 we only copy MC information for events where there's at least one muon track
    
  mcHeader = static_cast<AliAODMCHeader*>(source.FindListObject(AliAODMCHeader::StdBranchName()));
  
  if ( mcHeader ) 
  {
    *fMCHeader = *mcHeader;
  }
  
  mcParticles = static_cast<TClonesArray*>(source.FindListObject(AliAODMCParticle::StdBranchName()));
  
  if ( mcParticles && fMCMode>=2 )
  {
    // loop on (kept) muon tracks to find their ancestors
    TIter nextMT(fTracks);
    AliAODTrack* mt;
    
    while ( ( mt = static_cast<AliAODTrack*>(nextMT()) ) )
    {
      Int_t label = mt->GetLabel();
      
      while ( label >= 0 ) 
      {
        SelectParticle(label);
        AliAODMCParticle* mother = static_cast<AliAODMCParticle*>(mcParticles->UncheckedAt(label));
        if (!mother)
        {
          AliError("Got a null mother ! Check that !");
          label = -1;
        }
        else
        {
          label = mother->GetMother();
        }
      }
    }
    
    if ( mcParticles && fMCMode==3 )
    {
      // loop on MC muon tracks to find their ancestors
      for ( Int_t ipart=0; ipart<mcParticles->GetEntries(); ipart++ )
      {
        AliAODMCParticle* mcp = static_cast<AliAODMCParticle*>(mcParticles->UncheckedAt(ipart));
        if ( TMath::Abs(mcp->PdgCode()) != 13 ) continue;
        Int_t label = ipart;

        while ( label >= 0 )
        {
          SelectParticle(label);
          AliAODMCParticle* mother = static_cast<AliAODMCParticle*>(mcParticles->UncheckedAt(label));
          if (!mother)
          {
            AliError("Got a null mother ! Check that !");
            label = -1;
          }
          else
          {
            label = mother->GetMother();
          }
        }
      }
    }
    
    CreateLabelMap(source);
    
    // Actual filtering and label remapping (shamelessly taken for the implementation of AliAODHandler::StoreMCParticles)
    TIter nextMC(mcParticles);
    AliAODMCParticle* p;
    Int_t nmc(0);
    Int_t nmcout(0);
    
    while ( ( p = static_cast<AliAODMCParticle*>(nextMC()) ) )
    {
      AliAODMCParticle c(*p);
      
      if ( IsParticleSelected(nmc) )
      {
        // 
        Int_t d0 =  p->GetDaughter(0);
        Int_t d1 =  p->GetDaughter(1);
        Int_t m =   p->GetMother();
        
        // other than for the track labels, negative values mean
        // no daughter/mother so preserve it
        
        if(d0<0 && d1<0)
        {
          // no first daughter -> no second daughter
          // nothing to be done
          // second condition not needed just for sanity check at the end
          c.SetDaughter(0,d0);
          c.SetDaughter(1,d1);
        } else if(d1 < 0 && d0 >= 0) 
        {
          // Only one daughter
          // second condition not needed just for sanity check at the end
          if(IsParticleSelected(d0))
          {
            c.SetDaughter(0,GetNewLabel(d0));
          } else 
          {
            c.SetDaughter(0,-1);
          }
          c.SetDaughter(1,d1);
        }
        else if (d0 > 0 && d1 > 0 )
        {
          // we have two or more daughters loop on the stack to see if they are
          // selected
          Int_t d0tmp = -1;
          Int_t d1tmp = -1;
          for (int id = d0; id<=d1;++id)
          {
            if (IsParticleSelected(id))
            {
              if(d0tmp==-1)
              {
                // first time
                d0tmp = GetNewLabel(id);
                d1tmp = d0tmp; // this is to have the same schema as on the stack i.e. with one daugther d0 and d1 are the same 
              }
              else d1tmp = GetNewLabel(id);
            }
          }
          c.SetDaughter(0,d0tmp);
          c.SetDaughter(1,d1tmp);
        } else 
        {
          AliError(Form("Unxpected indices %d %d",d0,d1));
        }
        
        if ( m < 0 )
        {
          c.SetMother(m);
        } else 
        {
          if (IsParticleSelected(m)) 
          {
            c.SetMother(GetNewLabel(m));              
          }
          else 
          {
            AliError(Form("PROBLEM Mother not selected %d", m));              
          }
        }
        
        new ((*fMCParticles)[nmcout++]) AliAODMCParticle(c);
      }
      
      ++nmc;        
    }      
    
    // now remap the tracks...
    
    TIter nextTrack(fTracks);
    AliAODTrack* t;
    
    while ( ( t = static_cast<AliAODTrack*>(nextTrack()) ) )
    {
      t->SetLabel(GetNewLabel(t->GetLabel()));
    }
    
  }
  else if ( mcParticles ) 
  {
    // simple copy of input MC particles to ouput MC particles
    TIter nextMC(mcParticles);
    AliAODMCParticle* p;
    Int_t nmcout(0);
    
    while ( ( p = static_cast<AliAODMCParticle*>(nextMC()) ) )
    {
      new ((*fMCParticles)[nmcout++]) AliAODMCParticle(*p);
    }
  }
  
  AliDebug(1,Form("input mc %d output mc %d",
                  mcParticles ? mcParticles->GetEntries() : 0,
                  fMCParticles ? fMCParticles->GetEntries() : 0));
  
}

//_____________________________________________________________________________
TList* AliAODMuonReplicator::GetList() const
{
  /// return (and build if not already done) our internal list of managed objects
  if (!fList)
  {
    if ( fReplicateHeader )
    {
      fHeader = new AliAODHeader;
    }
    
    if ( fReplicateTracklets )
    {
      fTracklets = new AliAODTracklets;
      fTracklets->SetName("tracklets");
    }

    fTracks = new TClonesArray("AliAODTrack",30);
    fTracks->SetName("tracks");    
    
    fVertices = new TClonesArray("AliAODVertex",2);
    fVertices->SetName("vertices");    
    
    fDimuons = new TClonesArray("AliAODDimuon",20);
    fDimuons->SetName("dimuons");
    
    fVZERO = new AliAODVZERO;
    
    fTZERO = new AliAODTZERO;
    
    fZDC = new AliAODZDC;
    
    fList = new TList;
    fList->SetOwner(kTRUE);
    
    fList->Add(fHeader);
    fList->Add(fTracks);
    fList->Add(fVertices);
    fList->Add(fTracklets);
    fList->Add(fDimuons);
    fList->Add(fVZERO);
    fList->Add(fTZERO);
    fList->Add(fZDC);
    
    if ( fMCMode > 0 )
    {
      fMCHeader = new AliAODMCHeader;    
      fMCParticles = new TClonesArray("AliAODMCParticle",1000);
      fMCParticles->SetName(AliAODMCParticle::StdBranchName());
      fList->Add(fMCHeader);
      fList->Add(fMCParticles);
    }
  }
  return fList;
}

//_____________________________________________________________________________
void AliAODMuonReplicator::ReplicateAndFilter(const AliAODEvent& source)
{
  /// Replicate (and filter if filters are there) the relevant
  /// parts we're interested in AODEvent
  
  assert(fTracks!=0x0);
  
  if (fReplicateHeader)
  {
    AliAODHeader * header = dynamic_cast<AliAODHeader*>(source.GetHeader());
    if(!header) AliFatal("Not a standard AOD");
    *fHeader = *(header);
  }

  if (fReplicateTracklets)
  {
    *fTracklets = *(source.GetTracklets());
  }
  
  *fVZERO = *(source.GetVZEROData());

  *fTZERO = *(source.GetTZEROData());

  *fZDC = *(source.GetZDCData());
  
  fTracks->Clear("C");
  TIter next(source.GetTracks());
  AliAODTrack* t;
  Int_t nMuons=0;
  Int_t inputMuons=0;
  
  while (( t = static_cast<AliAODTrack*>(next()) )) {

    if (t->IsMuonTrack() || t->IsMuonGlobalTrack()) ++inputMuons;    // just a counter: MUON and MUON+MFT tracks before track cuts are applied
     
    // MUON and MUON+MFT tracks selected                    // AU
    if (!fTrackCut || fTrackCut->IsSelected(t)) {
      new ((*fTracks)[nMuons++]) AliAODTrack(*t);
    }

  }
  
  assert(fVertices!=0x0);
  fVertices->Clear("C");
  TIter nextV(source.GetVertices());
  AliAODVertex* v;
  Int_t nvertices(0);
  
  while ( ( v = static_cast<AliAODVertex*>(nextV()) ) ) {
    if ( !fVertexCut || fVertexCut->IsSelected(v) ) {
      AliAODVertex* tmp = v->CloneWithoutRefs();
      AliAODVertex* copiedVertex = new((*fVertices)[nvertices++]) AliAODVertex(*tmp);
      // to insure the main vertex retains the ncontributors information
      // (which is otherwise computed dynamically from
      // references to tracks, which we do not keep in muon aods...)
      // we set it here
      copiedVertex->SetNContributors(v->GetNContributors()); 
      delete tmp;
    }
  }
  
  fDimuons->Clear("C");
  
  // as there might be a track cut (different from the one of the main filtering),
  // we must recreate the dimuon completely from scratch to be 100% safe...

  Int_t nDimuons=0;

  // Dimuons built of 2 MUON tracks or 2 MUON+MFT tracks                   // AU
  for (Int_t i=0; i<nMuons; ++i) {
    for (Int_t j=i+1; j<nMuons; ++j) {
      if ( (((AliAODTrack*) fTracks->At(i))->IsMuonTrack()       && ((AliAODTrack*) fTracks->At(j))->IsMuonTrack()) ||
	   (((AliAODTrack*) fTracks->At(i))->IsMuonGlobalTrack() && ((AliAODTrack*) fTracks->At(j))->IsMuonGlobalTrack()) ) {
	new((*fDimuons)[nDimuons++]) AliAODDimuon(fTracks->At(i), fTracks->At(j));
      }
    }
  }

  AliDebug(1,Form("input mu tracks=%d tracks=%d vertices=%d ndimuons=%d",
                  inputMuons,fTracks->GetEntries(),fVertices->GetEntries(),fDimuons->GetEntries()));

  // Finally, deal with MC information, if needed

  if (fMCMode>0) FilterMC(source);

}

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