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

// -----------------------------------------------------------------------
//  Track class for the DiHadronPID analysis.
// -----------------------------------------------------------------------
//  Author: Misha Veldhoen (misha.veldhoen@cern.ch)

#include "AliTrackDiHadronPID.h"

#include "AliAODVertex.h"
#include "AliPID.h"
#include "AliTPCPIDResponse.h"

ClassImp(AliTrackDiHadronPID);

Double_t AliTrackDiHadronPID::fSigmaTOFStd = 80.;	// Should perhaps be replaced with a 
Double_t AliTrackDiHadronPID::fSigmaTPCStd = 3.5;   // function later.

// -----------------------------------------------------------------------
AliTrackDiHadronPID::AliTrackDiHadronPID():
	TObject(),
	fAODTrack(0x0),
	fAODGlobalTrack(0x0),
	fAODEvent(0x0),
	fAODMCParticle(0x0),
	fPIDResponse(0x0),
	fBasicInfoAvailable(kFALSE),
	fFlagsAvailable(kFALSE),
	fDCAInfoAvailable(kFALSE),
	fITSInfoAvailable(kFALSE),
	fTPCInfoAvailable(kFALSE),
	fTOFInfoAvailable(kFALSE),
	fMCInfoAvailable(kFALSE),
	fPt(-999.),
	fEta(-999.),
	fPhi(-999.),
	fFlags(0),
	fFilterMap(0),
	fID(0),
	fLabel(0),
	fCharge(0),
	fNclsTPC(-999),
	fDCAz(-999.),
	fDCAxy(-999.),
	fTOFsignal(-999.),
	fTOFMatchingStatus(-1),
	fTPCsignal(-999.),
	fTPCmomentum(-999.),
	fITSClusterMap(0),
	fMCPt(-999.),
	fMCEta(-999.),
	fMCPhi(-999.),
	fMCY(-999.),
	fPdgCode(0),
	fIsPhysicalPrimary(kFALSE),
	fIsSecondaryFromWeakDecay(kFALSE),
	fIsSecondaryFromMaterial(kFALSE),
	fDebug(0)

{

	//
	// Default Constructor.
	//

	if (fDebug > 2) {cout << Form("File: %s, Line: %i, Function: %s",__FILE__,__LINE__,__func__) << endl;}

	for (Int_t iSpecies = 0; iSpecies < 3; iSpecies++) {
		fTOFsignalMinusExpected[iSpecies] = -999.;
		fTOFNsigma[iSpecies] = -999.;
		fTPCsignalMinusExpected[iSpecies] = -999.;
		fTPCNsigma[iSpecies] = -999.;
		fY[iSpecies] = -999.;
	}

	for (Int_t iITSlayer = 0; iITSlayer < 6; iITSlayer++) {
		fITSHits[iITSlayer] = kFALSE;
	}

	for (Int_t iN = 0; iN < 3; ++iN) {
		fTOFLabel[iN] = -1;	// Same convention as in ESDs
	}

}

// -----------------------------------------------------------------------
AliTrackDiHadronPID::AliTrackDiHadronPID(AliAODTrack* track, AliAODTrack* globaltrack, AliAODMCParticle* mcparticle, AliPIDResponse* pidresponse):
	TObject(),
	fAODTrack(0x0),
	fAODGlobalTrack(0x0),
	fAODEvent(0x0),
	fAODMCParticle(0x0),
	fPIDResponse(0x0),
	fBasicInfoAvailable(kFALSE),
	fFlagsAvailable(kFALSE),
	fDCAInfoAvailable(kFALSE),
	fITSInfoAvailable(kFALSE),
	fTPCInfoAvailable(kFALSE),
	fTOFInfoAvailable(kFALSE),
	fMCInfoAvailable(kFALSE),
	fPt(-999.),
	fEta(-999.),
	fPhi(-999.),
	fFlags(0),
	fFilterMap(0),
	fID(0),
	fLabel(0),
	fCharge(0),
	fNclsTPC(-999),
	fDCAz(-999.),
	fDCAxy(-999.),
	fTOFsignal(-999.),
	fTOFMatchingStatus(-1),
	fTPCsignal(-999.),
	fTPCmomentum(-999.),
	fITSClusterMap(0),	
	fMCPt(-999.),
	fMCEta(-999.),
	fMCPhi(-999.),
	fMCY(-999.),	
	fPdgCode(0),
	fIsPhysicalPrimary(kFALSE),
	fIsSecondaryFromWeakDecay(kFALSE),
	fIsSecondaryFromMaterial(kFALSE),
	fDebug(0)
{

	//
	// Constructor.
	//

	if (fDebug > 2) {cout << Form("File: %s, Line: %i, Function: %s",__FILE__,__LINE__,__func__) << endl;}

	for (Int_t iSpecies = 0; iSpecies < 3; iSpecies++) {
		fTOFsignalMinusExpected[iSpecies] = -999.;
		fTOFNsigma[iSpecies] = -999.;
		fTPCsignalMinusExpected[iSpecies] = -999.;
		fTPCNsigma[iSpecies] = -999.;
		fY[iSpecies] = -999.;	
	}

	for (Int_t iITSlayer = 0; iITSlayer < 6; iITSlayer++) {
		fITSHits[iITSlayer] = kFALSE;
	}

	for (Int_t iN = 0; iN < 3; ++iN) {
		fTOFLabel[iN] = -1;	// Same convention as in ESDs
	}

	if (track) {
		fAODTrack = track;
		fAODEvent = const_cast<AliAODEvent*>(track->GetAODEvent());
	}
	if (globaltrack) fAODGlobalTrack = globaltrack;
	if (mcparticle) fAODMCParticle = mcparticle;
	if (pidresponse) fPIDResponse = pidresponse;

	// Copy AOD Track info.
	if (fAODTrack) {
		CopyBasicTrackInfo();
	} else {
		AliError("No Track Supplied.");
	}

	// Copy the rest of the track parameters if the filtermap is nonzero.
	// If fFiltermap == 0, then propagation to the DCA will result in a floating point error.
	if (fFilterMap) {

		// Find the Global Track.
		if (fID >= 0) fAODGlobalTrack = fAODTrack;

		// Copy DCA and PID info.
		if (fAODGlobalTrack) {
			CopyFlags();
			if (fAODEvent) CopyDCAInfo();
			else AliError("Couln't find AOD Event.");
			CopyITSInfo();
			if (fPIDResponse) CopyTPCInfo();
			CopyTOFInfo();
		} else {
			AliError("Couldn't find Global Track.");
		} 

		// Copy MC info.
		if (fAODMCParticle) {
			CopyMCInfo();
		} 

	}	

	// Test 
	/*	Double_t sigmaTOFProton = TMath::Abs(fPIDResponse->NumberOfSigmasTOF(fAODTrack, AliPID::kProton));
		if ( sigmaTOFProton < 1.0) {cout<<"tofsigmabelowone: "<<sigmaTOFProton<<endl;}
	
		Double_t sigmaTPCProton = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(fAODTrack, AliPID::kProton));
		if ( sigmaTPCProton < 1.0) {cout<<"tpcsigmabelowone: "<<sigmaTPCProton<<endl;}*/
}

// -----------------------------------------------------------------------
Bool_t AliTrackDiHadronPID::CopyBasicTrackInfo() {

	//
	// Copies everything available in every AOD track.
	//

	if (fDebug > 2) {cout << Form("File: %s, Line: %i, Function: %s",__FILE__,__LINE__,__func__) << endl;}

 	fPt = fAODTrack->Pt();
	fEta = fAODTrack->Eta();
	fPhi = fAODTrack->Phi();

	fY[0] = fAODTrack->Y(AliAODTrack::kPion);
	fY[1] = fAODTrack->Y(AliAODTrack::kKaon);
	fY[2] = fAODTrack->Y(AliAODTrack::kProton);

	//fFlags = fAODTrack->GetFlags(); // FLAGS MUST BE TAKEN FROM GLOBAL TRACKS.
	fFilterMap = fAODTrack->GetFilterMap();

	fID = fAODTrack->GetID();
	fLabel = fAODTrack->GetLabel();

	fCharge = fAODTrack->Charge();
	fNclsTPC = fAODTrack->GetTPCNcls();

	fBasicInfoAvailable = kTRUE;
	return fBasicInfoAvailable;

}

// -----------------------------------------------------------------------
Bool_t AliTrackDiHadronPID::CopyFlags() {

	//
	// Copies Flags (properly stored in global track)
	//

	if (fDebug > 2) {cout << Form("File: %s, Line: %i, Function: %s",__FILE__,__LINE__,__func__) << endl;}

	// Copy Flags
	fFlags = fAODGlobalTrack->GetFlags();
/*
	// Is TOF mismatch?
	if (AliAODTrack::kTOFmismatch&fFlags) {
		fTOFMatchingStatus = kTRUE;
		//cout<<"Found TOF mismatch!"<<endl;
	}
	else fTOFMatchingStatus = kFALSE; 
*/
	fFlagsAvailable = kTRUE;
	return fFlagsAvailable;

}

// -----------------------------------------------------------------------
Bool_t AliTrackDiHadronPID::CopyDCAInfo() {

	//
	// Copies DCA info. (only stored in a global track)
	//

	if (fDebug > 2) {cout << Form("File: %s, Line: %i, Function: %s",__FILE__,__LINE__,__func__) << endl;}

	if (fAODGlobalTrack->IsMuonTrack()) return kFALSE;

	// Propagate track to DCA.
	Double_t PosAtDCA[2] = {-999,-999};
    Double_t covar[3] = {-999,-999,-999};
    //cout<<fAODTrack<<" "<<fAODGlobalTrack<<endl;
    AliAODTrack* clone = (AliAODTrack*) fAODGlobalTrack->Clone("trk_clone"); //need clone, in order not to change track parameters
    Bool_t propagate = clone->PropagateToDCA(fAODEvent->GetPrimaryVertex(),fAODEvent->GetMagneticField(),100.,PosAtDCA,covar);
    delete clone;    	

    if (propagate) {
    	fDCAxy = PosAtDCA[0];
    	fDCAz = PosAtDCA[1];
    } else {
    	//AliError("Could not propagate track to DCA.");
    }

    if (propagate) fDCAInfoAvailable = kTRUE;
    return fDCAInfoAvailable;

}

// -----------------------------------------------------------------------
Bool_t AliTrackDiHadronPID::CopyITSInfo() {

	//
	// Copies ITS info.
	//

	if (fDebug > 2) {cout << Form("File: %s, Line: %i, Function: %s",__FILE__,__LINE__,__func__) << endl;}

    // Get the ITS clustermap
    fITSClusterMap = fAODGlobalTrack->GetITSClusterMap();

    // Copy the ITS hits.
    for (Int_t iITSlayer = 0; iITSlayer < 6; iITSlayer++) {
		fITSHits[iITSlayer] = fAODGlobalTrack->HasPointOnITSLayer(iITSlayer);
	}

    fITSInfoAvailable = kTRUE;
    return fITSInfoAvailable;

}

// -----------------------------------------------------------------------
Bool_t AliTrackDiHadronPID::CopyTPCInfo() {

	//
	// Copies TPC info. (needs global track and pid response).
	// See https://twiki.cern.ch/twiki/bin/viewauth/ALICE/PIDInAnalysis#Signal_Deltas
	// for more info!
	//

	if (fDebug > 2) {cout << Form("File: %s, Line: %i, Function: %s",__FILE__,__LINE__,__func__) << endl;}	

	// Get TPC signal and momentum.
	fTPCsignal = fAODGlobalTrack->GetTPCsignal();
	fTPCmomentum = fAODGlobalTrack->GetTPCmomentum();

	// Obtaining (signal - expected).
	fPIDResponse->GetSignalDelta(AliPIDResponse::kTPC, fAODGlobalTrack, AliPID::kPion, fTPCsignalMinusExpected[0], kFALSE);
	fPIDResponse->GetSignalDelta(AliPIDResponse::kTPC, fAODGlobalTrack, AliPID::kKaon, fTPCsignalMinusExpected[1], kFALSE);
	fPIDResponse->GetSignalDelta(AliPIDResponse::kTPC, fAODGlobalTrack, AliPID::kProton, fTPCsignalMinusExpected[2], kFALSE);

	// Obtaining nSigma.
	fTPCNsigma[0] = fPIDResponse->NumberOfSigmasTPC(fAODGlobalTrack, AliPID::kPion);
	fTPCNsigma[1] = fPIDResponse->NumberOfSigmasTPC(fAODGlobalTrack, AliPID::kKaon);
	fTPCNsigma[2] = fPIDResponse->NumberOfSigmasTPC(fAODGlobalTrack, AliPID::kProton);

    fTPCInfoAvailable = kTRUE;
    return fTPCInfoAvailable;

}

// -----------------------------------------------------------------------
Bool_t AliTrackDiHadronPID::CopyTOFInfo() {

	//
	// Copies TOF info. (needs global track)
	// See https://twiki.cern.ch/twiki/bin/viewauth/ALICE/PIDInAnalysis#Signal_Deltas
	// for more info!	
	//

	if (fDebug > 2) {cout << Form("File: %s, Line: %i, Function: %s",__FILE__,__LINE__,__func__) << endl;}

    // Get TOF signal minus the start time.
	fTOFsignal = fAODGlobalTrack->GetTOFsignal();

	// Get the expected times.
	Double_t expectedTimes[AliPID::kSPECIES];
	fAODGlobalTrack->GetIntegratedTimes(expectedTimes);
/*
	// Get the exptected TOF resolution.
	AliTOFHeader* tofH = (AliTOFHeader*)ev->GetTOFHeader();
	Double_t TOFpidRes[AliPID::kSPECIES];
	tr->GetDetPid()->GetTOFpidResolution(TOFpidRes);
*/
	// Obtaining (signal - expected).
	fPIDResponse->GetSignalDelta(AliPIDResponse::kTOF, fAODGlobalTrack, AliPID::kPion, fTOFsignalMinusExpected[0], kFALSE);
	fPIDResponse->GetSignalDelta(AliPIDResponse::kTOF, fAODGlobalTrack, AliPID::kKaon, fTOFsignalMinusExpected[1], kFALSE);
	fPIDResponse->GetSignalDelta(AliPIDResponse::kTOF, fAODGlobalTrack, AliPID::kProton, fTOFsignalMinusExpected[2], kFALSE);

	// Obtaining nSigma.
	fTOFNsigma[0] = fPIDResponse->NumberOfSigmasTOF(fAODGlobalTrack, AliPID::kPion);
	fTOFNsigma[1] = fPIDResponse->NumberOfSigmasTOF(fAODGlobalTrack, AliPID::kKaon);
	fTOFNsigma[2] = fPIDResponse->NumberOfSigmasTOF(fAODGlobalTrack, AliPID::kProton);	

	// Q: what do the different TOF labels mean?
	// It seems that in AOD090 the TOF labels aren't copied properly.
	//Int_t TOFlabeltmp[3] = {0};
	fAODGlobalTrack->GetTOFLabel(fTOFLabel);
	//for (Int_t iN = 0; iN < 3; ++iN) {fTOFLabel[iN] = TOFlabeltmp[iN];}
	/*
	if (fTOFLabel[1] == fLabel || fTOFLabel[2] == fLabel) {
		cout<<"fLabel = " << fLabel << " fTOFLabel =  {" << fTOFLabel[0] << "," << fTOFLabel[1] << "," << fTOFLabel[2] <<"}"<<endl; 
	}
	*/
	// The following will only work in an AOD production with the fTOFlabels set.
	// If it wasn't set, then every track will be labeled as no match.
	if (fTOFLabel[0] == -1) {fTOFMatchingStatus = 2;} 			// TPC Track was not matched to any TOF hit.
	else if (fLabel == fTOFLabel[0]) {fTOFMatchingStatus = 0;}	// TPC Track was correctly matched to a TOF hit.
	else {fTOFMatchingStatus = 1;}								// TPC Track was mismatched.

	fTOFInfoAvailable = kTRUE;
	return fTOFInfoAvailable;

}

// -----------------------------------------------------------------------
Bool_t AliTrackDiHadronPID::CopyMCInfo() {

	// Copies MC info (needs an MC track with the same label)

	// Check if the label of the current track matches the label of the
	// generated particle. Note that the label of the AOD track can be
	// negative. This means that the quality of this track is not awesome,
	// but that it does correspond to the MC particle.

	if (fDebug > 2) {cout << Form("File: %s, Line: %i, Function: %s",__FILE__,__LINE__,__func__) << endl;}
	
	/*
	if (fAODMCParticle->Label() != TMath::Abs(fAODTrack->GetLabel())) {
		cout<<"Label of supplied MC particle and reconstructed track do not match."<<endl;	
		return kFALSE;
	}
	*/
	// Note: It seems like the Label of the AOD track points to the INDEX of the
	// MCPArticle, not to the label (See AliAnalysisTaskCompareAODTrackCuts.cxx)

	fMCPt = fAODMCParticle->Pt();
	fMCEta = fAODMCParticle->Eta();
	fMCPhi = fAODMCParticle->Phi();
	fMCY = fAODMCParticle->Y();
	fPdgCode = fAODMCParticle->PdgCode();

	TClonesArray* mcArray = 0x0;
	mcArray = dynamic_cast<TClonesArray*>(fAODEvent->FindListObject(AliAODMCParticle::StdBranchName()));
   	if (!mcArray) {
        AliFatal("No MC array found in the AOD.");
    }

	// Primary particle
	if ( fAODMCParticle->IsPhysicalPrimary() ){
		fIsPhysicalPrimary = kTRUE;
	} else {
		// Safety check for mother existence.
		if (fAODMCParticle->GetMother() >= 0){

			Int_t mcMotherPDG = -999;
			Int_t firstInt = -999;

			AliAODMCParticle* mcMother = (AliAODMCParticle*) mcArray->At(TMath::Abs(fAODMCParticle->GetMother()));
			mcMotherPDG = TMath::Abs(mcMother->GetPdgCode());

			// Need a way to get the first intiger, for now Marek's method:
			firstInt = Int_t (mcMotherPDG/ TMath::Power(10, Int_t(TMath::Log10(mcMotherPDG))));
			// cout<<"Mother PDG: "<<mcMotherPDG<<"; Firt integer: "<<firstInt<<endl;

			// Weak decay
			if( firstInt == 3){
				fIsSecondaryFromWeakDecay = kTRUE;
			// Material decay
			} else {
				fIsSecondaryFromMaterial = kTRUE;
			}
		}
	}

	fMCInfoAvailable = kTRUE;
	return fMCInfoAvailable;

}

// -----------------------------------------------------------------------
Bool_t AliTrackDiHadronPID::UnknownSpecies(Int_t species) const {

	if (fDebug > 2) {cout << Form("File: %s, Line: %i, Function: %s",__FILE__,__LINE__,__func__) << endl;}
	if (species < 0 || species > 2) {
		cout<<"ERROR: Unknown species"<<endl;
		return kTRUE;
	} else {
		return kFALSE;
	}

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