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$ */

// ROOT includes
#include <TArrayI.h>
#include <TClonesArray.h>

// STEER includes
#include "AliESDEvent.h"
#include "AliESDMuonTrack.h"
#include "AliLog.h"
#include "AliMCEventHandler.h"
#include "AliCDBManager.h"
#include "AliMCParticle.h"
#include "AliMCEvent.h"

// ANALYSIS includes
#include "AliAnalysisManager.h"

// MUON includes
#include "AliMUONCDB.h"
#include "AliMUONRecoParam.h"
#include "AliMUONRecoCheck.h"
#include "AliMUONESDInterface.h"
#include "AliMUONVTrackReconstructor.h"
#include "AliMUONTrack.h"
#include "AliMUONTrackParam.h"
#include "AliMUONVTrackStore.h"
#include "AliMUONTriggerTrack.h"
#include "AliMUONVTriggerTrackStore.h"
#include "AliMUONLocalTrigger.h"
#include "AliMUONVCluster.h"

#include "AliAnalysisTaskESDMCLabelAddition.h"

ClassImp(AliAnalysisTaskESDMCLabelAddition)

//----------------------------------------------------------------------
AliAnalysisTaskESDMCLabelAddition::AliAnalysisTaskESDMCLabelAddition():
AliAnalysisTaskSE(),
fDefaultStorage(""),
fAlignOCDBpath(""),
fRecoParamOCDBpath(""),
fRequestedStationMask(0),
fRequest2ChInSameSt45(kFALSE),
fExternalTrkSigmaCut(-1.),
fSigmaCut(-1.),
fExternalTrgSigmaCut(-1.),
fSigmaCutTrig(-1.),
fDecayAsFake(kFALSE)
{
  /// Default constructor
}


//----------------------------------------------------------------------
AliAnalysisTaskESDMCLabelAddition::AliAnalysisTaskESDMCLabelAddition(const char* name):
AliAnalysisTaskSE(name),
fDefaultStorage("raw://"),
fAlignOCDBpath(""),
fRecoParamOCDBpath(""),
fRequestedStationMask(0),
fRequest2ChInSameSt45(kFALSE),
fExternalTrkSigmaCut(-1.),
fSigmaCut(-1.),
fExternalTrgSigmaCut(-1.),
fSigmaCutTrig(-1.),
fDecayAsFake(kFALSE)
{
  /// Constructor
}


//----------------------------------------------------------------------
void AliAnalysisTaskESDMCLabelAddition::UserCreateOutputObjects()
{
  /// Create output objects
}


//----------------------------------------------------------------------
void AliAnalysisTaskESDMCLabelAddition::NotifyRun()
{
  /// Load OCDB inputs
  
  // load OCDB objects only once
  if (fSigmaCut > 0) return;
  
  // set OCDB location
  AliCDBManager* cdbm = AliCDBManager::Instance();
  if (cdbm->IsDefaultStorageSet()) printf("MCLabelAddition: CDB default storage already set!\n");
  else {
    cdbm->SetDefaultStorage(fDefaultStorage.Data());
    if (!fAlignOCDBpath.IsNull()) cdbm->SetSpecificStorage("MUON/Align/Data",fAlignOCDBpath.Data());
    if (!fRecoParamOCDBpath.IsNull()) cdbm->SetSpecificStorage("MUON/Calib/RecoParam",fRecoParamOCDBpath.Data());
  }
  if (cdbm->GetRun() > -1) printf("MCLabelAddition: run number already set!\n");
  else cdbm->SetRun(fCurrentRunNumber);
  
  // load recoParam
  const AliMUONRecoParam* recoParam = (AliMUONESDInterface::GetTracker())
  ? AliMUONESDInterface::GetTracker()->GetRecoParam()
  : AliMUONCDB::LoadRecoParam();
  
  if (!recoParam) {
    fRequestedStationMask = 0;
    fRequest2ChInSameSt45 = kFALSE;
    fSigmaCut = -1.;
    fSigmaCutTrig = -1.;
    return;
  }
  
  // compute the mask of requested stations from recoParam
  fRequestedStationMask = 0;
  for (Int_t i = 0; i < 5; i++) if (recoParam->RequestStation(i)) fRequestedStationMask |= ( 1 << i );
  
  // get from recoParam whether a track need 2 chambers hit in the same station (4 or 5) or not to be reconstructible
  fRequest2ChInSameSt45 = !recoParam->MakeMoreTrackCandidates();
  
  // get sigma cut to associate clusters with TrackRefs from recoParam if not already set manually
  if (fExternalTrkSigmaCut > 0) fSigmaCut = fExternalTrkSigmaCut;
  else if (recoParam->ImproveTracks()) fSigmaCut = recoParam->GetSigmaCutForImprovement();
  else fSigmaCut = recoParam->GetSigmaCutForTracking();
  
  // get sigma cut to associate trigger to triggerable track from recoParam if not already set manually
  if (fExternalTrgSigmaCut > 0) fSigmaCutTrig = fExternalTrgSigmaCut;
  else fSigmaCutTrig = recoParam->GetSigmaCutForTrigger();
  
}


//----------------------------------------------------------------------
void AliAnalysisTaskESDMCLabelAddition::UserExec(Option_t */*option*/)
{
  /// Execute analysis for current event				
  
  AliDebug(1, Form("MCLabel Addition: Analysing event # %5d\n",(Int_t) Entry())); 
  
  // make sure necessary information from OCDB have been loaded
  if (fSigmaCut < 0) return;
  
  /// Load ESD event
  AliESDEvent* esd = dynamic_cast<AliESDEvent*>(InputEvent());
  if (!esd) {
    AliError("Cannot get input event");
    return;
  }      
  
  // Load MC event 
  AliMCEventHandler* mcH = static_cast<AliMCEventHandler*>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
  if ( ! mcH ) {
    AliError ("MCH event handler not found. Nothing done!");
    return;
  }
  
  
  // Get reference tracks
  AliMUONRecoCheck rc(esd,mcH);
  AliMUONVTrackStore* trackRefStore = rc.TrackRefs(-1);
  AliMUONVTriggerTrackStore* triggerTrackRefStore = rc.TriggerableTracks(-1);
  
  // Loop over reconstructed tracks
  AliESDMuonTrack *esdTrack = 0x0;
  Int_t nMuTracks = esd->GetNumberOfMuonTracks();
  for (Int_t nMuTrack = 0; nMuTrack < nMuTracks; ++nMuTrack) {
    
    esdTrack = esd->GetMuonTrack(nMuTrack);
    
    // tracker tracks
    if (esdTrack->ContainTrackerData()) {
      
      // convert ESD track to MUON track (without recomputing track parameters at each clusters)
      AliMUONTrack muonTrack;
      AliMUONESDInterface::ESDToMUON(*esdTrack, muonTrack, kFALSE);
      
      // try to match, by position, the reconstructed track with a simulated one
      Int_t nMatchClustersByPosition = 0;
      AliMUONTrack* matchedTrackRefByPosition = rc.FindCompatibleTrack(muonTrack, *trackRefStore, nMatchClustersByPosition, kFALSE, fSigmaCut);
      Bool_t isMatchedYetByPosition = kFALSE;
      Bool_t isRecoDecayByPosition = kFALSE;
      Int_t decayLabelByPosition = -1, lastChDecayByPosition = 0;
      if (!matchedTrackRefByPosition || !matchedTrackRefByPosition->IsValid(fRequestedStationMask, fRequest2ChInSameSt45)) {
	decayLabelByPosition = IsDecayByPosition(muonTrack, *trackRefStore, isRecoDecayByPosition, lastChDecayByPosition);
	if (decayLabelByPosition >= 0) matchedTrackRefByPosition = 0x0;
	else if (matchedTrackRefByPosition) isMatchedYetByPosition = kTRUE;
      }
      Bool_t isFakeByPosition = (!matchedTrackRefByPosition && decayLabelByPosition < 0);
      
      // try to match, by using MC labels, the reconstructed track with a simulated one
      Int_t nMatchClustersByLabel = 0;
      AliMUONTrack* matchedTrackRefByLabel = rc.FindCompatibleTrack(muonTrack, *trackRefStore, nMatchClustersByLabel, kTRUE, fSigmaCut);
      Bool_t isMatchedYetByLabel = kFALSE;
      Bool_t isRecoDecayByLabel = kFALSE;
      Int_t decayLabelByLabel = -1, lastChDecayByLabel = 0;
      if (!matchedTrackRefByLabel || !matchedTrackRefByLabel->IsValid(fRequestedStationMask, fRequest2ChInSameSt45)) {
	decayLabelByLabel = IsDecayByLabel(muonTrack, isRecoDecayByLabel, lastChDecayByLabel);
	if (decayLabelByLabel >= 0) matchedTrackRefByLabel = 0x0;
	else if (matchedTrackRefByLabel) isMatchedYetByLabel = kTRUE;
      }
      Bool_t isFakeByLabel = (!matchedTrackRefByLabel && decayLabelByLabel < 0);
      
      // choose the best, or the only available, matched track
      AliMUONTrack* matchedTrackRef = 0x0;
      Bool_t isMatchedYet = kFALSE, isRecoDecay = kFALSE;
      Int_t decayLabel = -1;
      if (matchedTrackRefByPosition && matchedTrackRefByLabel && ((!isMatchedYetByPosition && !isMatchedYetByLabel) ||
								  (isMatchedYetByPosition && isMatchedYetByLabel))) {
	
	Int_t nMatchClusters = TMath::Max(nMatchClustersByPosition, nMatchClustersByLabel);
	matchedTrackRef = (nMatchClusters == nMatchClustersByPosition) ? matchedTrackRefByPosition : matchedTrackRefByLabel;
	isMatchedYet = isMatchedYetByPosition;
	
      } else if (matchedTrackRefByPosition && (!isMatchedYetByPosition || isFakeByLabel)) {
	
	matchedTrackRef = matchedTrackRefByPosition;
	isMatchedYet = isMatchedYetByPosition;
	
      } else if (matchedTrackRefByLabel && (!isMatchedYetByLabel || isFakeByPosition)) {
	
	matchedTrackRef = matchedTrackRefByLabel;
	isMatchedYet = isMatchedYetByLabel;
	
	// choose the best, or the only available, decay chain
      } else if (decayLabelByPosition >= 0 && decayLabelByLabel >= 0 && ((isRecoDecayByPosition && isRecoDecayByLabel) ||
									 (!isRecoDecayByPosition && !isRecoDecayByLabel))) {
	
	decayLabel = (lastChDecayByLabel > lastChDecayByPosition) ? decayLabelByLabel : decayLabelByPosition;
	isRecoDecay = isRecoDecayByPosition;
	
      } else if (decayLabelByPosition >= 0 && (isRecoDecayByPosition || decayLabelByLabel < 0)) {
	
	decayLabel = decayLabelByPosition;
	isRecoDecay = isRecoDecayByPosition;
	
      } else if (decayLabelByLabel >= 0) {
	
	decayLabel = decayLabelByLabel;
	isRecoDecay = isRecoDecayByLabel;
	
      }
      
      // set the MC label, the decay flag (bit 22) and the not-reconstructible flag (bit 23)
      if (matchedTrackRef) {
	
	esdTrack->SetLabel(matchedTrackRef->GetUniqueID());
	esdTrack->SetBit(BIT(22), kFALSE);
	esdTrack->SetBit(BIT(23), isMatchedYet);
	
      } else if (decayLabel >= 0 && !fDecayAsFake) {
	
	esdTrack->SetLabel(decayLabel);
	esdTrack->SetBit(BIT(22), kTRUE);
	esdTrack->SetBit(BIT(23), !isRecoDecay);
	
      } else {
	
	esdTrack->SetLabel(-1);
	esdTrack->SetBit(BIT(22), kFALSE);
	esdTrack->SetBit(BIT(23), kFALSE);
	
      }
      
    } else { // ghosts
      
      // Convert ESD track to trigger track
      AliMUONLocalTrigger locTrg;
      AliMUONESDInterface::ESDToMUON(*esdTrack, locTrg);
      AliMUONTriggerTrack trigTrack;
      rc.TriggerToTrack(locTrg, trigTrack);
      
      // try to match the reconstructed track with a simulated one
      AliMUONTriggerTrack* matchedTrigTrackRef = rc.FindCompatibleTrack(trigTrack, *triggerTrackRefStore, fSigmaCutTrig);
      
      // set the MC label
      if (matchedTrigTrackRef) esdTrack->SetLabel(matchedTrigTrackRef->GetUniqueID());
      else esdTrack->SetLabel(-1);
      
    }
    
  }
  
}


//----------------------------------------------------------------------
void AliAnalysisTaskESDMCLabelAddition::Terminate(Option_t */*option*/)
{
  /// Terminate analysis
  AliDebug(2, "Terminate()");
}

//----------------------------------------------------------------------
Int_t AliAnalysisTaskESDMCLabelAddition::IsDecay(Int_t nClusters, Int_t *chId, Int_t *labels,
						 Bool_t &isReconstructible, Int_t &lastCh) const
{
  /// Check whether this combination of clusters correspond to a decaying particle or not:
  /// More than 50% of clusters, including 1 before and 1 after the dipole, must be connected.
  /// - Return the MC label of the most downstream decay product or -1 if not a decay.
  /// - "isReconstructible" tells if the combination of matched clusters fulfil the reconstruction criteria.
  /// - As soon as we realized the decay chain cannot be tagged as reconstructible, we reject any chain ending
  ///   on a chamber equal to or upstream "lastCh" (used to select the best chain in case of multiple choices).
  /// - "lastCh" is reset the most downstream chamber of the found decay chain if any.
  
  Int_t halfCluster = nClusters/2;
  
  // loop over last clusters (if nClusters left < halfCluster the conditions cannot be fulfilled)
  Int_t firstLabel = -1, decayLabel = -1;
  isReconstructible = kFALSE;
  for (Int_t iCluster1 = nClusters-1; iCluster1 >= halfCluster; iCluster1--) {
    
    // if the last cluster is not on station 4 or 5 the conditions cannot be fulfilled
    if (chId[iCluster1] < 6) break;
    
    // skip clusters with no label or same label as at the begining of the previous step (already tested)
    if (labels[iCluster1] < 0 || labels[iCluster1] == firstLabel) continue;
    
    // is there any chance the hypothetical decay chain can be tagged reconstructible?
    Int_t stationId = chId[iCluster1]/2;
    Int_t stationMask = 1 << stationId;
    Int_t requestedStations = fRequestedStationMask >> stationId;
    Bool_t isValid = ((1 & requestedStations) == requestedStations);
    
    // if not: check whether we can find a better chain than already found
    if (!isValid && chId[iCluster1] <= lastCh) break;
    
    // count the number of fired chambers on stations 4 & 5
    Int_t nChHitInSt45[2] = {0, 0};
    nChHitInSt45[stationId-3] = 1;
    Int_t currentCh = chId[iCluster1];
    
    // get the ancestors
    TArrayI chainLabels(100);
    Int_t nParticles = 0;
    Int_t currentLabel = labels[iCluster1];
    do {
      chainLabels[nParticles++] = currentLabel;
      if (nParticles >= chainLabels.GetSize()) chainLabels.Set(2*chainLabels.GetSize());
      AliMCParticle* currentParticle = static_cast<AliMCParticle*>(fMCEvent->GetTrack(currentLabel));
      currentLabel = (currentParticle) ? currentParticle->GetMother() : -1;
    } while (currentLabel >= 0);
    
    // Loop over prior clusters
    firstLabel = labels[iCluster1];
    Int_t nCompatibleLabel = 1;
    Int_t currentParticle = 0;
    for (Int_t iCluster2 = iCluster1-1; iCluster2 >= 0; iCluster2--) {
      
      // if the number of clusters left is not enough the conditions cannot be fulfilled
      if (iCluster2 < halfCluster-nCompatibleLabel) break;
      
      if (labels[iCluster2] < 0) continue;
      
      // check if the cluster belong to the same particle or one of its ancestors
      Bool_t matchFound = kFALSE;
      for (Int_t iParticle = currentParticle; iParticle < nParticles; iParticle++) {
	if (labels[iCluster2] == chainLabels[iParticle]) {
	  currentParticle = iParticle;
	  matchFound = kTRUE;
	  break;
	}
      }
      if (matchFound) nCompatibleLabel++;
      else continue;
      
      // add this station to the mask
      stationId = chId[iCluster2]/2;
      stationMask |= 1 << stationId;
      
      // count the number of fired chamber on stations 4 & 5
      if (stationId > 2 && chId[iCluster2] < currentCh) {
	nChHitInSt45[stationId-3]++;
	currentCh = chId[iCluster2];
      }
      
      // check if we matched enough clusters to tag the track as a decay
      if (nCompatibleLabel <= halfCluster || chId[iCluster2] > 3 || chainLabels[currentParticle] == firstLabel) continue;
      
      // check if this chain is better than already found
      if (chId[iCluster1] > lastCh) {
	decayLabel = firstLabel;
	lastCh = chId[iCluster1];
      }
      
      // is there enough matched clusters on station 4 & 5 to make the track reconstructible?
      Bool_t isEnoughClOnSt45 = fRequest2ChInSameSt45 ? (nChHitInSt45[0] == 2 || nChHitInSt45[1] == 2)
      : (nChHitInSt45[0]+nChHitInSt45[1] >= 2);
      
      // is there any chance the current decay chain can still be tagged reconstructible?
      requestedStations = fRequestedStationMask >> stationId;
      isValid = (((stationMask >> stationId) & requestedStations) == requestedStations &&
		 (chId[iCluster2] > 5 || isEnoughClOnSt45));
      
      // if not then we cannot do better with this trial
      if (!isValid) break;
      
      // take in priority the decay chain that can be tagged reconstructible
      if (((stationMask & fRequestedStationMask) == fRequestedStationMask) && isEnoughClOnSt45) {
	lastCh = chId[iCluster1];
	isReconstructible = kTRUE;
	return firstLabel;
      }
      
    }
    
  }
  
  return decayLabel;
}

//----------------------------------------------------------------------
void AliAnalysisTaskESDMCLabelAddition::AddCompatibleClusters(const AliMUONTrack &track, const AliMUONTrack &trackRef,
							      TArrayI *labels, Int_t *nLabels) const
{
  /// Try to match clusters between track and trackRef and add the corresponding MC labels to the arrays
  
  Double_t chi2Max = 2. * fSigmaCut * fSigmaCut; // 2 because 2 quantities in chi2
  
  // Loop over clusters of first track
  Int_t nCl1 = track.GetNClusters();
  for(Int_t iCl1 = 0; iCl1 < nCl1; iCl1++) {
    AliMUONVCluster *cluster1 = static_cast<AliMUONTrackParam*>(track.GetTrackParamAtCluster()->UncheckedAt(iCl1))->GetClusterPtr();
    
    // Loop over clusters of second track
    Int_t nCl2 = trackRef.GetNClusters();
    for(Int_t iCl2 = 0; iCl2 < nCl2; iCl2++) {
      AliMUONVCluster *cluster2 = static_cast<AliMUONTrackParam*>(trackRef.GetTrackParamAtCluster()->UncheckedAt(iCl2))->GetClusterPtr();
      
      // check DE Id
      if (cluster1->GetDetElemId() != cluster2->GetDetElemId()) continue;
      
      // check local chi2
      Double_t dX = cluster1->GetX() - cluster2->GetX();
      Double_t dY = cluster1->GetY() - cluster2->GetY();
      Double_t chi2 = dX * dX / (cluster1->GetErrX2() + cluster2->GetErrX2()) + dY * dY / (cluster1->GetErrY2() + cluster2->GetErrY2());
      if (chi2 > chi2Max) continue;
      
      // expand array if needed
      if (nLabels[iCl1] >= labels[iCl1].GetSize()) labels[iCl1].Set(2*labels[iCl1].GetSize());
      
      // save label
      labels[iCl1][nLabels[iCl1]] = static_cast<Int_t>(trackRef.GetUniqueID());
      nLabels[iCl1]++;
      break;
      
    }
    
  }
  
}

//----------------------------------------------------------------------
Int_t AliAnalysisTaskESDMCLabelAddition::IsDecayByLabel(const AliMUONTrack &track, Bool_t &isReconstructible,
							Int_t &lastCh) const
{
  /// Check whether this track correspond to a decaying particle by using cluster MC labels.
  /// "lastCh" contains the chamber Id of the most downstream chamber hit by the decay chain
  
  Int_t nClusters = track.GetNClusters();
  if (nClusters <= 0) return -1;
  Int_t *chId = new Int_t[nClusters];
  Int_t *labels = new Int_t[nClusters];
  
  // copy labels and chamber Ids
  for (Int_t iCluster = 0; iCluster < nClusters; iCluster++) {
    AliMUONVCluster* cluster = static_cast<AliMUONTrackParam*>(track.GetTrackParamAtCluster()->UncheckedAt(iCluster))->GetClusterPtr();
    chId[iCluster] = cluster->GetChamberId();
    labels[iCluster] = cluster->GetMCLabel();
  }
  
  // look for decay
  lastCh = 0;
  Int_t decayLabel = IsDecay(nClusters, chId, labels, isReconstructible, lastCh);
  
  delete[] chId;
  delete[] labels;
  
  return decayLabel;
}

//----------------------------------------------------------------------
Int_t AliAnalysisTaskESDMCLabelAddition::IsDecayByPosition(const AliMUONTrack &track, const AliMUONVTrackStore &trackRefStore,
							   Bool_t &isReconstructible, Int_t &lastCh) const
{
  /// Check whether this track correspond to a decaying particle by comparing clusters position
  /// All possible combinations of compatible clusters from every trackRefs are considered
  
  Int_t nClusters = track.GetNClusters();
  if (nClusters <= 0) return -1;
  Int_t *chId = new Int_t[nClusters];
  Int_t *nLabels = new Int_t[nClusters];
  TArrayI *labels = new TArrayI[nClusters];
  
  // copy chamber Ids
  for (Int_t iCluster = 0; iCluster < nClusters; iCluster++) {
    AliMUONVCluster* cluster = static_cast<AliMUONTrackParam*>(track.GetTrackParamAtCluster()->UncheckedAt(iCluster))->GetClusterPtr();
    chId[iCluster] = cluster->GetChamberId();
    nLabels[iCluster] = 0;
    labels[iCluster].Set(100);
  }
  
  // loop over trackRef store and add label of compatible clusters
  TIter next1(trackRefStore.CreateIterator());
  AliMUONTrack* trackRef;
  while ( ( trackRef = static_cast<AliMUONTrack*>(next1()) ) )
    AddCompatibleClusters(track, *trackRef, labels, nLabels);
  
  // complete the arrays of labels with "-1" if no label was found for a given cluster
  for (Int_t iCluster = 0; iCluster < nClusters; iCluster++) {
    if (nLabels[iCluster] == 0) {
      labels[iCluster][0] = -1;
      nLabels[iCluster]++;
    }
  }
  
  // loop over all possible combinations
  Int_t *iLabel = new Int_t[nClusters];
  memset(iLabel,0,nClusters*sizeof(Int_t));
  iLabel[nClusters-1] = -1;
  Int_t *currentLabels = new Int_t[nClusters];
  Int_t decayLabel = -1;
  lastCh = 0;
  isReconstructible = kFALSE;
  while (kTRUE) {
    
    // go to the next combination
    Int_t iCl = nClusters-1;
    while (++iLabel[iCl] >= nLabels[iCl] && iCl > 0) iLabel[iCl--] = 0;
    if (iLabel[iCl] >= nLabels[iCl]) break; // no more combination
    
    // copy labels
    for (Int_t iCluster = 0; iCluster < nClusters; iCluster++)
      currentLabels[iCluster] = labels[iCluster][iLabel[iCluster]];
    
    // look for decay
    Int_t currentDecayLabel = IsDecay(nClusters, chId, currentLabels, isReconstructible, lastCh);
    if (currentDecayLabel >= 0) {
      decayLabel = currentDecayLabel;
      if (isReconstructible) break;
    }
    
  }
  
  delete[] chId;
  delete[] nLabels;
  delete[] labels;
  delete[] iLabel;
  delete[] currentLabels;
  
  return decayLabel;  
}

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