ROOT logo
/**************************************************************************
 * This file is property of and copyright by the ALICE HLT Project        *
 * All rights reserved.                                                   *
 *                                                                        *
 * Primary Authors:                                                       *
 *   Artur Szostak <artursz@iafrica.com>                                  *
 *                                                                        *
 * 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$ */

///
/// @file   AliAnalysisTaskLinkToMC.cxx
/// @author Artur Szostak <artursz@iafrica.com>
/// @date   27 Oct 2008
/// @brief  Implementation of the AliAnalysisTaskLinkToMC task.
///
/// The AliAnalysisTaskLinkToMC connects reconstructed tracks found in the ESD
/// to their corresponding Monte Carlo (MC) tracks via the proximity of their
/// hit coordinates. Each ESD track is copied over to an AOD track and put into
/// the AOD event container, but the AOD track label is filled such that the
/// AOD track label is the same as the MC track label.
/// If a MC track could not be found for a given ESD track then -1 is filled
/// into the AOD track label.
/// The corresponding MC track is found by correlating the reconstructed track
/// clusters with the MC track references. For each cluster the closest track
/// reference coordinate is found and a chi-squared value is computed for each
/// X and Y dimension independently. The chi-square's are summed up and the MC
/// track with the smallest total chi-squared is chosen as the best match to
/// the ESD track.
///
/// The following cuts control the conditions under which we consider a MC track
/// to match a given ESD track:
/// 1) SigmaCut(Double_t value) - This is maximum distance expressed in standard
///      deviations that is allowed between a reconstructed cluster coordinate
///      and the MC track reference coordinate. The condition is expressed as:
///        (x_{cluster} - x_{trackref})^2 / (sigma_{x})^2 < #sigma_{cut}
///      This conditions is applied to each X and Y dimension respectively and
///      cluster / track reference pairs that do not pass this cut are considered
///      not to match.
/// 2) MinClusters(Int_t value) - Indicates the minimum number of clusters that
///      must be matched to a track reference from a MC track for the ESD and
///      MC track to be considered to match.
/// The following are absolute cuts which are used mainly as a speed optimisation
/// so as to skip over cluster / track reference pairs that are far away from
/// each other early.
/// 3) HardCutLimitX(Double_t value) - The absolute maximum distance in centimetres
///      allowed between a cluster's X coordinate and a track reference's X coordinate.
///      If a cluster / track reference pair does not pass this condition then the
///      pair is considered not to match.
/// 4) HardCutLimitY(Double_t value) - Similar to HardCutLimitX but applied to the
///      Y dimension of the cluster and track reference coordinate.
/// 5) HardCutLimitZ(Double_t value) - Similar to HardCutLimitX but applied to the
///      Z dimension.
///
/// The analysis task also optionally generates histograms which show can be used
/// to check the quality of the correlation between ESD and MC tracks.
/// The histograms are generated in 2D for the pT and rapidity variable,
/// and are called:
/// 1) findableTracksHist - Filled with the MC tracks which should in principle
///      be findable by the reconstruction software. A findable track is defined
///      by the IsFindable method.
/// 2) foundTracksHistMC - Filled with the MC information for each muon track that
///      was found in the ESD and for which we could match its corresponding MC track.
/// 3) foundTracksHist - Filled just like the foundTracksHistMC histogram, but with
///      the momentum information taken from the ESD track and not the corresponding
///      MC track.
/// 4) fakeTracksHist - Filled with all the ESD tracks for which we could not find
///      its matching MC track and assume it is a fake track.
/// These histograms are filled by default, but can be disabled by using the
/// GenerateHistograms(false) method call.
///

#include "AliAnalysisTaskLinkToMC.h"
#include "AliESDEvent.h"
#include "AliESDMuonTrack.h"
#include "AliESDMuonCluster.h"
#include "AliMCEvent.h"
#include "AliMCParticle.h"
#include "AliAODVertex.h"
#include "AliAODEvent.h"
#include "AliAODTrack.h"
#include "AliTrackReference.h"
#include "AliStack.h"
#include "AliLog.h"
#include "TObjArray.h"
#include "TCanvas.h"
#include "TMath.h"
#include "TMap.h"
#include "TList.h"
#include "TH2D.h"
#include "TStyle.h"

ClassImp(AliAnalysisTaskLinkToMC)


void AliAnalysisTaskLinkToMC::HardCutLimitX(Double_t value)
{
	/// Sets the absolute maximum distance in centimetres between the cluster
	/// and track reference that is allowed in the X direction.
	
	if (value >= 0)
	{
		fHardCutLimitX = value;
	}
	else
	{
		AliWarning("Setting value for fHardCutLimitX which is negative."
			" Will set it to a positive value."
			);
		fHardCutLimitX = TMath::Abs(value);
	}
}


void AliAnalysisTaskLinkToMC::HardCutLimitY(Double_t value)
{
	/// Sets the absolute maximum distance in centimetres between the cluster
	/// and track reference that is allowed in the Y direction.
	
	if (value >= 0)
	{
		fHardCutLimitY = value;
	}
	else
	{
		AliWarning("Setting value for fHardCutLimitY which is negative."
			" Will set it to a positive value."
			);
		fHardCutLimitY = TMath::Abs(value);
	}
}


void AliAnalysisTaskLinkToMC::HardCutLimitZ(Double_t value)
{
	/// Sets the absolute maximum distance in centimetres between the cluster
	/// and track reference that is allowed in the Z direction.
	
	if (value >= 0)
	{
		fHardCutLimitZ = value;
	}
	else
	{
		AliWarning("Setting value for fHardCutLimitZ which is negative."
			" Will set it to a positive value."
			);
		fHardCutLimitZ = TMath::Abs(value);
	}
}


Double_t AliAnalysisTaskLinkToMC::SigmaCut() const
{
	/// Returns the maximum sigma value to allow for each X and Y dimension
	/// between clusters and track references.
	
	return TMath::Sqrt(fSigmaCut2);
}


Bool_t AliAnalysisTaskLinkToMC::ChamberMustMatch(Int_t chamber) const
{
	/// Returns the flag indicating if the ESD track cluster on the given
	/// chamber must match a corresponding track reference to be valid.
	/// \param chamber The chamber number must be in the range 1 to 14.
	
	if (chamber >= 1 and chamber <= 14)
	{
		return fChamberMustMatch[chamber-1];
	}
	else
	{
		AliError(Form("The chamber number %d is invalid. Expected a value"
			" in the range [1..14]. Will return a value of 'false'.",
			chamber
			));
		return false;
	}
}


void AliAnalysisTaskLinkToMC::ChamberMustMatch(Int_t chamber, Bool_t value)
{
	/// Set the flag indicating if the ESD track cluster on the given chamber
	/// must match a corresponding track reference to be valid.
	/// \param chamber The chamber number must be in the range 1 to 14.
	/// \param value  The new value to set to.
	
	if (chamber >= 1 and chamber <= 14)
	{
		fChamberMustMatch[chamber-1] = value;
	}
	else
	{
		AliError(Form("The chamber number %d is invalid. Expected a value"
			" in the range [1..14]. Will not set any fChamberMustMatch flag.",
			chamber
			));
	}
}


Bool_t AliAnalysisTaskLinkToMC::StationMustMatch(Int_t station) const
{
	/// Returns the flag indicating if at least one ESD track cluster on the
	/// given station must match a corresponding track reference to be valid.
	/// \param station The station number must be in the range 1..7. Station
	///     1 to 5 are the tracking stations while 6 is MT1 and 7 is MT2.
	
	if (station >= 1 and station <= 7)
	{
		return fStationMustMatch[station-1];
	}
	else
	{
		AliError(Form("The station number %d is invalid. Expected a value"
			" in the range [1..7]. Will return a value of 'false'.",
			station
			));
		return false;
	}
}


void AliAnalysisTaskLinkToMC::StationMustMatch(Int_t station, Bool_t value)
{
	/// Sets the flag indicating if at least one ESD track cluster on the
	/// given station must match a corresponding track reference to be valid.
	/// \param station The station number must be in the range 1..7. Station
	///     1 to 5 are the tracking stations while 6 is MT1 and 7 is MT2.
	/// \param value  The new value to set to.
	
	if (station >= 1 and station <= 7)
	{
		fStationMustMatch[station-1] = value;
	}
	else
	{
		AliError(Form("The station number %d is invalid. Expected a value"
			" in the range [1..7]. Will not set any fStationMustMatch flag.",
			station
			));
	}
}


AliAnalysisTaskLinkToMC::AliAnalysisTaskLinkToMC() :
	AliAnalysisTaskSE(),
	fHistos(NULL),
	fFindableHist(NULL),
	fFoundHistMC(NULL),
	fFoundHist(NULL),
	fFakeHist(NULL),
	fHardCutLimitX(4.), // cm
	fHardCutLimitY(4.), // cm
	fHardCutLimitZ(4.), // cm
	fVarX(0.144*0.144), // cm^2
	fVarY(0.01*0.01), // cm^2
	fSigmaCut2(5*5),  // sigma^2
	fMinClusters(6),
	fMinClustersInSt12(0),  // no minimum requirement for stations 1 and 2.
	fMinClustersInSt45(3),  // 3 hits required on station 4 and 5 by default.
	fMakeHists(true),  // Generate histograms for monitoring by default
	fUseZCoordinate(false)  // Just use detElemId to match in the Z direction.
{
	/// Default constructor.
	/// Sets input slot 0 to TChain input for ESDs, output slot 0 to TTree
	/// for AODs and output slot 1 to TList for the list of output histograms.
	/// The output histograms generated are to cross check the quality of the
	/// correlation and their generation can be turned off with
	/// AliAnalysisTaskLinkToMC::GenerateHistograms(false).
	
	// Do not force any matching for particular chambers by default.
	for (Int_t i = 0; i < 14; i++)
	{
		fChamberMustMatch[i] = false;
	}
	// Only force a minimum of 1 hit to be matched on stations 1, 2 and 3 by default.
	for (Int_t i = 0; i < 3; i++)
	{
		fStationMustMatch[i] = true;
	}
	for (Int_t i = 3; i < 7; i++)
	{
		fStationMustMatch[i] = false;
	}
	
	DefineOutput(1, TList::Class());
}


AliAnalysisTaskLinkToMC::AliAnalysisTaskLinkToMC(const char* name) :
	AliAnalysisTaskSE(name),
	fHistos(NULL),
	fFindableHist(NULL),
	fFoundHistMC(NULL),
	fFoundHist(NULL),
	fFakeHist(NULL),
	fHardCutLimitX(4.), // cm
	fHardCutLimitY(4.), // cm
	fHardCutLimitZ(4.), // cm
	fVarX(0.144*0.144), // cm^2
	fVarY(0.01*0.01), // cm^2
	fSigmaCut2(5*5),  // sigma^2
	fMinClusters(6),
	fMinClustersInSt12(0),  // no minimum requirement for stations 1 and 2.
	fMinClustersInSt45(3),  // 3 hits required on station 4 and 5 by default.
	fMakeHists(true),  // Generate histograms for monitoring by default
	fUseZCoordinate(false)  // Just use detElemId to match in the Z direction.
{
	/// Constructor with a task name.
	/// Sets input slot 0 to TChain input for ESDs, output slot 0 to TTree
	/// for AODs and output slot 1 to TList for the list of output histograms
	/// storing histograms generated to cross check the quility of the
	/// correlation.
	/// \param name  The name of the task.
	
	// Do not force any matching for particular chambers by default.
	for (Int_t i = 0; i < 14; i++)
	{
		fChamberMustMatch[i] = false;
	}
	// Only force a minimum of 1 hit to be matched on stations 1, 2 and 3 by default.
	for (Int_t i = 0; i < 3; i++)
	{
		fStationMustMatch[i] = true;
	}
	for (Int_t i = 3; i < 7; i++)
	{
		fStationMustMatch[i] = false;
	}
	
	DefineOutput(1, TList::Class());
}


void AliAnalysisTaskLinkToMC::UserCreateOutputObjects()
{
	/// Creates the output histograms containing findable tracks, found tracks
	/// and fake tracks. The binning range for all histograms is 30 bins along
	/// the pT dimension (X direction) from 0 to 20 GeV/c and 30 bins in the
	/// rapidity dimension (Y direction) form -4 to -2.4 units.
	
	fHistos = new TList;
	
	char name[1024];
	char title[1024];
	
	Int_t nBinsX = 30;
	Double_t minX = 0.;
	Double_t maxX = 20.;
	Int_t nBinsY = 30;
	Double_t minY = -4.;
	Double_t maxY = -2.4;
	
	snprintf(name, 1024, "findableTracksHist");
	snprintf(title, 1024, "Findable tracks");
	fFindableHist = new TH2D(name, title, nBinsX, minX, maxX, nBinsY, minY, maxY);
	fFindableHist->SetXTitle("p_{T} [GeV/c]");
	fFindableHist->SetYTitle("Rapidity (Y)");
	fHistos->Add(fFindableHist);
	
	snprintf(name, 1024, "foundTracksHistMC");
	snprintf(title, 1024, "Found tracks (filled with Monte Carlo kinematic information)");
	fFoundHistMC = new TH2D(name, title, nBinsX, minX, maxX, nBinsY, minY, maxY);
	fFoundHistMC->SetXTitle("p_{T} [GeV/c]");
	fFoundHistMC->SetYTitle("Rapidity (Y)");
	fHistos->Add(fFoundHistMC);
	
	snprintf(name, 1024, "foundTracksHist");
	snprintf(title, 1024, "Found tracks (filled with reconstructed kinematic information)");
	fFoundHist = new TH2D(name, title, nBinsX, minX, maxX, nBinsY, minY, maxY);
	fFoundHist->SetXTitle("p_{T} [GeV/c]");
	fFoundHist->SetYTitle("Rapidity (Y)");
	fHistos->Add(fFoundHist);
	
	snprintf(name, 1024, "fakeTracksHist");
	snprintf(title, 1024, "Fake tracks");
	fFakeHist = new TH2D(name, title, nBinsX, minX, maxX, nBinsY, minY, maxY);
	fFakeHist->SetXTitle("p_{T} [GeV/c]");
	fFakeHist->SetYTitle("Rapidity (Y)");
	fHistos->Add(fFakeHist);
}


void AliAnalysisTaskLinkToMC::UserExec(Option_t* /*option*/)
{
	/// This is the top level method that performs the work of the task.
	/// It will fill the histograms for quality checking with the Monte
	/// Carlo (MC) information if they are to be generated.
	/// The input event is then processed which must be of type AliESDEvent.
	/// For all the ESD muon tracks we try to find the corresponding MC
	/// track and build a TMap for the mapping.
	/// If the AOD output event is available then it is filled with AOD
	/// tracks which copy the information form the ESD track and the AOD
	/// track label is filled with the corresponding MC track label.
	/// If a corresponding MC track could not be found then the AOD track
	/// label is filled with -1.
	/// Finally the checking histograms are further filled with the ESD
	/// information based on the ESD to MC track map.
	
	if (fMakeHists and
	    (fFindableHist == NULL or fFoundHistMC == NULL or fFoundHist == NULL or fFakeHist == NULL)
	   )
	{
		AliError("Histograms have not been created.");
		return;
	}
	
	if (fMakeHists and MCEvent() != NULL) FillHistsFromMC();
	
	if (InputEvent() != NULL)
	{
		if (InputEvent()->IsA() == AliESDEvent::Class())
		{
			if (MCEvent() != NULL)
			{
				TMap links;
				FindLinksToMC(links);
				if (AODEvent() != NULL) CreateAODTracks(links);
				if (fMakeHists) FillHistsFromLinks(links);
			}
			else
			{
				AliError("To process the ESD event we must have the Monte Carlo data also.");
			}
		}
		else
		{
			AliError(Form("The input event is of type \"%s\". Do not know how to handle it so it will be skipped.",
					InputEvent()->ClassName()
				));
		}
	}
	
	if (fMakeHists) PostData(1, fHistos);
}


void AliAnalysisTaskLinkToMC::Terminate(Option_t* /*option*/)
{
	/// The terminate method will draw the histograms filled by this task if
	/// they were filled by setting appropriate flag with the
	/// GenerateHistograms(true) method, which is the default.
	
	if (fMakeHists)
	{
		gStyle->SetPalette(1);
		new TCanvas;
		fFindableHist->DrawCopy("colz");
		new TCanvas;
		fFoundHistMC->DrawCopy("colz");
		new TCanvas;
		fFoundHist->DrawCopy("colz");
		new TCanvas;
		fFakeHist->DrawCopy("colz");
		
		AliInfo(Form("Findable tracks = %d", Int_t(fFindableHist->GetEntries()) ));
		AliInfo(Form("Found tracks    = %d", Int_t(fFoundHistMC->GetEntries()) ));
		AliInfo(Form("Fake tracks     = %d", Int_t(fFakeHist->GetEntries()) ));
	}
}


bool AliAnalysisTaskLinkToMC::IsFindable(AliMCParticle* track) const
{
	/// This method is used to identify if a Monte Carlo (MC) track is in principle
	/// findable in the muon spectrometer.
	/// This means the MC track must be a muon particle and leave at least one track
	/// reference point on either chamber in each tracking station.
	/// \param track  The MC track to check.
	/// \returns  true if the track is findable by the muon spectrometer
	///    and false otherwise.
	/// \note  The definition of track find-ability does not affect the correlation
	///    between ESD and MC tracks nor the generation of the AOD output tracks,
	///    only the histogram of findable tracks is effected if it is generated at all.

	// Select only muons.
	if (TMath::Abs(track->Particle()->GetPdgCode()) != 13) return false;
	
	// Build hit mask for chambers.
	bool hitOnCh[14];
	for (Int_t i = 0; i < 14; i++)
	{
		hitOnCh[i] = false;
	}
	for (Int_t i = 0; i < track->GetNumberOfTrackReferences(); i++)
	{
		AliTrackReference* ref = track->GetTrackReference(i);
		if (ref->DetectorId() != AliTrackReference::kMUON) continue;
		Int_t chamberId = ref->UserId() / 100 - 1;
		if (0 <= chamberId and chamberId < 14)
		{
			hitOnCh[chamberId] = true;
		}
	}
	
	// Check that enough hits are available on all tracking chambers.
	bool hitOnSt1 = hitOnCh[0] or hitOnCh[1];
	bool hitOnSt2 = hitOnCh[2] or hitOnCh[3];
	bool hitOnSt3 = hitOnCh[4] or hitOnCh[5];
	bool hitOnSt4 = hitOnCh[6] or hitOnCh[7];
	bool hitOnSt5 = hitOnCh[8] or hitOnCh[9];
	
	return (hitOnSt1 and hitOnSt2 and hitOnSt3 and hitOnSt4 and hitOnSt5);
}


void AliAnalysisTaskLinkToMC::FillHistsFromMC()
{
	/// Fills the histogram containing findable tracks from the MC event information.
	/// Only MC tracks for which the IsFindable method returns true are added
	/// to the histogram.
	
	for (Int_t i = 0; i < MCEvent()->GetNumberOfTracks(); i++)
	{
		AliMCParticle* mcTrack = (AliMCParticle*) MCEvent()->GetTrack(i);
		
		// Select only reconstructible tracks to fill into findable hist.
		if (IsFindable(mcTrack))
		{
			fFindableHist->Fill(mcTrack->Pt(), mcTrack->Y());
		}
	}
}


void AliAnalysisTaskLinkToMC::FillHistsFromLinks(TMap& links)
{
	/// Fills the histograms containing found tracks and fake tracks.
	/// Found tracks are all those that have a ESD muon track in the ESD event
	/// and for which a corresponding MC track could be found.
	/// Fake tracks are ESD muon tracks for which no corresponding MC track
	/// could be matched so it is considered a fake track.
	/// \param links  This contains the mapping between ESD muon tracks and
	///    MC tracks. ESD tracks for which no MC track could be matched should
	///    have the "value" of the key/value pair in the mapping set to NULL.
	
	TIter itmap(links.GetTable());
	TPair* pair = NULL;
	while ( (pair = static_cast<TPair*>(itmap())) != NULL )
	{
		if (pair->Value() != NULL)
		{
			AliESDMuonTrack* esdTrack = static_cast<AliESDMuonTrack*>(pair->Key());
			fFoundHist->Fill(esdTrack->Pt(), esdTrack->Y());
			
			AliMCParticle* mcTrack = static_cast<AliMCParticle*>(pair->Value());
			fFoundHistMC->Fill(mcTrack->Pt(), mcTrack->Y());
		}
		else
		{
			AliESDMuonTrack* esdTrack = static_cast<AliESDMuonTrack*>(pair->Key());
			fFakeHist->Fill(esdTrack->Pt(), esdTrack->Y());
		}
	}
}


void AliAnalysisTaskLinkToMC::CreateAODTracks(TMap& links)
{
	/// This code is copied from AliAnalysisTaskESDMuonFilter::ConvertESDtoAOD with
	/// modifications to fill the MC track label using the ESD to MC track mapping.
	/// \param links  This is the mapping between ESD tracks and MC tracks.
	
	// ESD Muon Filter analysis task executed for each event
	AliESDEvent* esd = dynamic_cast<AliESDEvent*>(InputEvent());
        // CHECK
        if ( ! esd ) {
          AliError("Cannot get input event");
          return;
        }  
	
	// Define arrays for muons
	Double_t pos[3];
	Double_t p[3];
	//	Double_t pid[10];
	
	// has to be changed once the muon pid is provided by the ESD
	// for (Int_t i = 0; i < 10; pid[i++] = 0.) {}
	// pid[AliAODTrack::kMuon]=1.;
	
	AliAODHeader* header = dynamic_cast<AliAODHeader*>(AODEvent()->GetHeader());
	if(!header) AliFatal("Not a standard AOD");
	AliAODTrack *aodTrack = 0x0;
	AliESDMuonTrack *esdMuTrack = 0x0;
	
	// Access to the AOD container of tracks
	TClonesArray &tracks = *(AODEvent()->GetTracks());
	Int_t jTracks = tracks.GetEntriesFast();
	
	// Read primary vertex from AOD event 
	AliAODVertex *primary = AODEvent()->GetPrimaryVertex();
	if (primary != NULL) primary->Print();
	
	// Loop on muon tracks to fill the AOD track branch
	Int_t nMuTracks = esd->GetNumberOfMuonTracks();
	printf("Number of Muon Tracks=%d\n",nMuTracks);
	
	// Update number of positive and negative tracks from AOD event (M.G.)
	Int_t nPosTracks = header->GetRefMultiplicityPos();
	Int_t nNegTracks = header->GetRefMultiplicityNeg();
	
	for (Int_t nMuTrack = 0; nMuTrack < nMuTracks; ++nMuTrack)
	{
		esdMuTrack = esd->GetMuonTrack(nMuTrack);
		
		//if (!esdMuTrack->ContainTrackerData()) continue;
		
		UInt_t selectInfo = 0;
		
		p[0] = esdMuTrack->Px(); 
		p[1] = esdMuTrack->Py(); 
		p[2] = esdMuTrack->Pz();
		
		pos[0] = esdMuTrack->GetNonBendingCoor(); 
		pos[1] = esdMuTrack->GetBendingCoor(); 
		pos[2] = esdMuTrack->GetZ();

		Int_t label = -1;
		TPair* pair = static_cast<TPair*>( links.FindObject(esdMuTrack) );
		if (pair != NULL and pair->Value() != NULL)
		{
			AliMCParticle* mcTrack = static_cast<AliMCParticle*>(pair->Value());
			label = mcTrack->GetLabel();
			if (label == -1)
			{
				AliWarning("The MC track was set to -1.");
			}
		}
		
		aodTrack = new(tracks[jTracks++]) AliAODTrack(
				esdMuTrack->GetUniqueID(), // ID
				label, // label
				p, // momentum
				kTRUE, // cartesian coordinate system
				pos, // position
				kFALSE, // isDCA
				0x0, // covariance matrix
				esdMuTrack->Charge(), // charge
				0, // ITSClusterMap
				// pid, // pid
				primary, // primary vertex
				kFALSE, // used for vertex fit?
				kFALSE, // used for primary vertex fit?
				AliAODTrack::kPrimary,// track type
				selectInfo
			);
		
		aodTrack->SetPIDForTracking(AliPID::kMuon);
		aodTrack->SetXYAtDCA(esdMuTrack->GetNonBendingCoorAtDCA(), esdMuTrack->GetBendingCoorAtDCA());
		aodTrack->SetPxPyPzAtDCA(esdMuTrack->PxAtDCA(), esdMuTrack->PyAtDCA(), esdMuTrack->PzAtDCA());
		aodTrack->ConvertAliPIDtoAODPID();
		aodTrack->SetChi2perNDF(esdMuTrack->GetChi2() / (2.*esdMuTrack->GetNHit() - 5.));
		aodTrack->SetChi2MatchTrigger(esdMuTrack->GetChi2MatchTrigger());
		aodTrack->SetHitsPatternInTrigCh(esdMuTrack->GetHitsPatternInTrigCh());
		aodTrack->SetMuonClusterMap(esdMuTrack->GetMuonClusterMap());
		aodTrack->SetMatchTrigger(esdMuTrack->GetMatchTrigger());
		
		if (primary != NULL) primary->AddDaughter(aodTrack);
		
		if (esdMuTrack->Charge() > 0) nPosTracks++;
		else nNegTracks++;
	}
	
	header->SetRefMultiplicity(jTracks); 
	header->SetRefMultiplicityPos(nPosTracks);
	header->SetRefMultiplicityNeg(nNegTracks);
	
	// Note: we do not have to call PostData for the AOD because the AliAnalysisTaskSE
	// base class already does so just after the UserExec.
}


void AliAnalysisTaskLinkToMC::FindLinksToMC(TMap& links)
{
	/// Finds all MC tracks that correspond to their ESD tracks and creates a
	/// mapping between the ESD tracks and MC tracks which is filled into the
	/// 'links' TMap object.
	/// \param links  This will be filled with the ESD and MC track pairs which
	///    have been matched. Thus, for each ESD track which is set as the TMap key,
	///    the corresponding MC track is identified by the TMap value. If no
	///    MC track could be matched then the MC track value is set to NULL.

	// Algorithm description for connecting reconstructed ESD muon tracks to MC:
	//
	// Build ESD track list
	// Build MC track list
	// while ESD track list not empty and MC track list not empty:
	//   Find ESD/MC track pair with best compatibility.
	//   if no pair is compatible then break loop.
	//   Store found pair in return list.
	//   Remove pair from ESD and MC track list.
	// Mark remaining tracks in ESD track list as fakes.
	//
	// To find ESD/MC track pair with best compatibility:
	//   bestQuality := 1e100
	//   bestESDTrack := nil
	//   bestMCTrack := nil
	//   for each ESD track:
	//     for each MC track:
	//       chi^2 / numOfClustersMatched := calculate compatibility
	//       if tracks are compatible and chi^2 / numOfClustersMatched < bestQuality then:
	//         bestQuality := chi^2 / noOfClustersMatched
	//         bestESDTrack := current ESD track
	//         bestMCTrack := current MC track
	//
	// To calculate compatibility (ESD track, MC track):
	//   chi^2 := 1e100
	//   numberOfClustersAssociated := 0
	//   for each cluster in ESD track:
	//     find nearest 2 track refs from MC track
	//     if 2 track refs found then find average of them into MChit
	//     else MChit := nearest ref track.
	//     k := calculate chi^2 distance between ESD cluster and MChit
	//     if k <= maxValue then:
	//       chi^2 := chi^2 + k
	//       numberOfClustersAssociated := numberOfClustersAssociated + 1
	//     else:
	//       chi^2 := chi^2 + maxAllowedChi2
	//   if numberOfClustersAssociated >= minGoodClusters then:
	//     return (compatible, chi^2)
	//   else:
	//     return (not compatible, 1e100)
	
	AliESDEvent* esd = static_cast<AliESDEvent*>(InputEvent());

	TObjArray esdTracks;
	TObjArray mcTracks;
	for (Int_t i = 0; i < esd->GetNumberOfMuonTracks(); i++)
	{
		esdTracks.Add(esd->GetMuonTrack(i));
	}
	for (Int_t i = 0; i < MCEvent()->GetNumberOfTracks(); i++)
	{
		mcTracks.Add(MCEvent()->GetTrack(i));
	}
	
	while (not esdTracks.IsEmpty() and not mcTracks.IsEmpty())
	{
		Double_t bestQuality = 1e100;
		Int_t bestNoOfClusters = 0;
		AliESDMuonTrack* bestEsdTrack = NULL;
		AliMCParticle* bestMcTrack = NULL;
		TIter itesd(&esdTracks);
		TIter itmc(&mcTracks);
		AliESDMuonTrack* esdTrack = NULL;
		AliMCParticle* mcTrack = NULL;
		
		// Find the ESD and MC track pair that matches the best.
		while ( (esdTrack = static_cast<AliESDMuonTrack*>(itesd())) != NULL )
		{
			while ( (mcTrack = static_cast<AliMCParticle*>(itmc())) != NULL )
			{
				Double_t chi2 = 1e100;
				bool tracksCompatible = false;
				Int_t noOfClusters = 0;
				CalculateTrackCompatibility(esdTrack, mcTrack, tracksCompatible, chi2, noOfClusters);
				Double_t quality = noOfClusters > 0 ? chi2 / Double_t(noOfClusters) : 1e100;
				if (tracksCompatible and quality < bestQuality and noOfClusters >= bestNoOfClusters)
				{
					bestQuality = quality;
					bestNoOfClusters = noOfClusters;
					bestEsdTrack = esdTrack;
					bestMcTrack = mcTrack;
				}
			}
			itmc.Reset();
		}
		
		// If no track pair could be matched then we are done because we
		// will not be able to match anything more next time.
		if (bestMcTrack == NULL) break;
		
		links.Add(bestEsdTrack, bestMcTrack);
		
		esdTracks.Remove(bestEsdTrack);
		mcTracks.Remove(bestMcTrack);
	}
	
	// Add all remaining ESD tracks which could not be matched to any MC track
	// to the mapping but with NULL for the MC track.
	TIter itesd(&esdTracks);
	AliESDMuonTrack* esdTrack = NULL;
	while ( (esdTrack = static_cast<AliESDMuonTrack*>(itesd())) != NULL )
	{
		links.Add(esdTrack, NULL);
	}
}


void AliAnalysisTaskLinkToMC::CalculateTrackCompatibility(
		AliESDMuonTrack* esdTrack, AliMCParticle* mcTrack,
		bool& tracksCompatible, Double_t& chi2, Int_t& noOfClusters
	)
{
	/// Calculates the compatibility between a ESD and MC track pair.
	/// For each cluster of the ESD track, two track references are found
	/// which are spatially closest to it. If the distance between the cluster
	/// and track reference is larger than the HardCutLimit*() parameters then
	/// the track reference is not used. The average coordinate is calculated
	/// from the two track references found and the chi-square between the cluster
	/// and average coordinate is calculated. If only one track reference is
	/// found then it is used for the calculation without taking an average.
	/// If no track references are found then the cluster is not matched and
	/// we continue to the next cluster.
	/// If the chi-squared value for the cluster / track reference pair is
	/// larger than that allowed by the SigmaCut() parameter then the cluster
	/// is also considered not to be matched.
	/// The tracks are compatible if the ESD track has a minimum number of
	/// clusters matched with MC track references from the MC track.
	/// [in] \param esdTrack  The ESD track we are trying to match.
	/// [in] \param mcTrack  The MC track we are trying to match the ESD track to.
	/// [out] \param tracksCompatible  Filled with true if the given esdTrack
	///     and mcTrack are compatible. 
	/// [out] \param chi2  Filled with the total chi-squared calculated for all
	///     matched clusters.
	/// [out] \param noOfClusters  Filled with the number of clusters that were
	///     matched to at least one track reference.
	
	chi2 = 0;
	noOfClusters = 0;
	tracksCompatible = false;
	Int_t noOfClustersSt12 = 0;
	Int_t noOfClustersSt45 = 0;
	bool chamberMatched[14] = {
			false, false, false, false, false, false, false,
			false, false, false, false, false, false, false
		};
	bool stationMatched[7] = {
			false, false, false, false, false, false, false
		};
	
	for (Int_t i = 0; i < esdTrack->GetNClusters(); i++)
	{
		AliESDMuonCluster* cluster = esdTrack->GetESDEvent()->FindMuonCluster(esdTrack->GetClusterId(i));
		Double_t varX = cluster->GetErrX2();
		Double_t varY = cluster->GetErrY2();
		// If the variance is zero then use the default one or just 1
		// if the default is also not set.
		if (varX == 0) varX = fVarX != 0 ? fVarX : 1.;
		if (varY == 0) varY = fVarY != 0 ? fVarY : 1.;
		
		Double_t chi2A = 1e100;
		AliTrackReference* refA = NULL;
		Double_t chi2B = 1e100;
		AliTrackReference* refB = NULL;
		
		for (Int_t j = 0; j < mcTrack->GetNumberOfTrackReferences(); j++)
		{
			AliTrackReference* ref = mcTrack->GetTrackReference(j);
			
			if (ref->DetectorId() != AliTrackReference::kMUON) continue;
			if (ref->UserId() != cluster->GetDetElemId()) continue;
			
			Double_t dx = ref->X() - cluster->GetX();
			if (TMath::Abs(dx) > fHardCutLimitX) continue;
			Double_t dy = ref->Y() - cluster->GetY();
			if (TMath::Abs(dy) > fHardCutLimitY) continue;
			if (fUseZCoordinate)
			{
				Double_t dz = ref->Z() - cluster->GetZ();
				if (TMath::Abs(dz) > fHardCutLimitZ) continue;
			}
			
			Double_t chi2sum = dx*dx / varX + dy*dy / varY;
			if (chi2sum < chi2A)
			{
				// Copy track reference A to B and set new value for A
				chi2B = chi2A;
				refB = refA;
				chi2A = chi2sum;
				refA = ref;
			}
			else if (chi2sum < chi2B)
			{
				// Track reference A still has smaller chi2 so just replace B.
				chi2B = chi2sum;
				refB = ref;
			}
		}
		
		Double_t x = 0, y = 0;
		if (refA != NULL and refB != NULL)
		{
			// Average the track references if 2 were found.
			x = (refA->X() + refB->X()) * 0.5;
			y = (refA->Y() + refB->Y()) * 0.5;
		}
		else if (refA != NULL)
		{
			x = refA->X();
			y = refA->Y();
		}
		else
		{
			continue;  // no track reference hit found.
		}
		
		Double_t dx = x - cluster->GetX();
		Double_t dy = y - cluster->GetY();
		
		Double_t chi2x = dx*dx / varX;
		if (chi2x > fSigmaCut2) continue;
		Double_t chi2y = dy*dy / varY;
		if (chi2y > fSigmaCut2) continue;
		
		chi2 += chi2x + chi2y;
		noOfClusters++;
		if (cluster->GetChamberId() >= 0 and cluster->GetChamberId() < 4)
		{
			noOfClustersSt12++;
		}
		if (cluster->GetChamberId() >= 6 and cluster->GetChamberId() < 10)
		{
			noOfClustersSt45++;
		}
		
		if (0 <= cluster->GetChamberId() and cluster->GetChamberId() < 14)
		{
			chamberMatched[cluster->GetChamberId()] = true;
			stationMatched[cluster->GetChamberId()/2] = true;
		}
	}
	
	// Need to check that all the chambers and stations that had to match we
	// actually found matching track references.
	
	bool forcedChambersMatched = true;
	for (Int_t i = 0; i < 14; i++)
	{
		if (fChamberMustMatch[i] and not chamberMatched[i])
		{
			forcedChambersMatched = false;
		}
	}
	bool forcedStationsMatched = true;
	for (Int_t i = 0; i < 7; i++)
	{
		if (fStationMustMatch[i] and not stationMatched[i])
		{
			forcedStationsMatched = false;
		}
	}
	
	if (noOfClusters >= fMinClusters and
	    noOfClustersSt12 >= fMinClustersInSt12 and
	    noOfClustersSt45 >= fMinClustersInSt45 and
	    forcedChambersMatched and forcedStationsMatched
	   )
	{
		tracksCompatible = true;
	}
}

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