ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/
//
// AliDDMesonBase
// for
// AliAnalysisTaskDDMeson
//
//  Author:
//  Xianguo Lu <lu@physi.uni-heidelberg.de>
//  continued by
//  Felix Reidt <Felix.Reidt@cern.ch>

#include "TH2.h"
#include "TH2D.h"
#include "TH1I.h"
#include "TAxis.h"
#include "THnSparse.h"
#include "TString.h"
#include "TList.h"

#include "AliCDMesonBase.h"


//------------------------------------------------------------------------------
//== INVARIANT MASS DISTRIBUTIONS (ThnMother) ================================
//-- event characteristics
// number of charged primary particles - combined => can be w/ soft tracks
const Int_t AliCDMesonBase::fgkNNcombined      = 2; // number of bins
const Double_t AliCDMesonBase::fgkMinNcombined = 2; // lower border
const Double_t AliCDMesonBase::fgkMaxNcombined = 4; // upper border (#bins + lower border)

// unlike sign or like sign charged?
const Int_t AliCDMesonBase::fgkNCombCh      = 2; // kBinPPMM = number of bins
const Double_t AliCDMesonBase::fgkMinCombCh = 1.; // kBinPM = lower border
const Double_t AliCDMesonBase::fgkMaxCombCh = 3.; // kBinPPMM + kBinPM = upper border

// two track PID, take care the enum changed from time to time
const Int_t AliCDMesonBase::fgkNCombPID      = 13; // kBinPIDUnknown = number of bins
const Double_t AliCDMesonBase::fgkMinCombPID = 1.; // kBinPionE = lower border
const Double_t AliCDMesonBase::fgkMaxCombPID = 14.;// ...  = upper border

// gap configuration, used for different detectors
const Int_t AliCDMesonBase::fgkNGapConfig      = 4; // kBinNG = number of bins
const Double_t AliCDMesonBase::fgkMinGapConfig = 1.; // kBinDG = lower border
const Double_t AliCDMesonBase::fgkMaxGapConfig = 5.; // kBinNG + kBinDG = upper border

//-- mother kinematics
// invariant mass of the two-track system
const Int_t AliCDMesonBase::fgkNMass      = 1024; // number of bins
const Double_t AliCDMesonBase::fgkMinMass = 0.; // lower border
const Double_t AliCDMesonBase::fgkMaxMass = 5.12; // upper border

// transverse momentum of the two-track system
const Int_t AliCDMesonBase::fgkNMotherPt      = 128;//10; // number of bins
const Double_t AliCDMesonBase::fgkMinMotherPt = 0.; // lower border
const Double_t AliCDMesonBase::fgkMaxMotherPt = .64; //6.4 //2; // upper border

// cosine theta* (opening angle of the two daugther tracks in the
// centre-of-mass system of the two-track/mother system)
// **no meaning full variable**
const Int_t AliCDMesonBase::fgkNCTS      = 2; // number of bins
const Double_t AliCDMesonBase::fgkMinCTS = -1.; // lower border
const Double_t AliCDMesonBase::fgkMaxCTS = -0.9; // upper border

// opening angle in the lab frame
const Int_t AliCDMesonBase::fgkNOA      = 20; // number of bins
const Double_t AliCDMesonBase::fgkMinOA = -1.; // lower border
const Double_t AliCDMesonBase::fgkMaxOA = 1.; // upper border

//-- daughter kinematics
// transverse momentum of one of the two daughter particles
// (randomly selected)
const Int_t AliCDMesonBase::fgkNDaughterPt      = 128; // number of bins
const Double_t AliCDMesonBase::fgkMinDaughterPt = 0.; // lower border
const Double_t AliCDMesonBase::fgkMaxDaughterPt = 6.4; // upper border

// pseudo rapidity of one of the two daughter particles
// (randomly selected)
//const Int_t AliCDMesonBase::fgkNDaughterEta      = 64; // number of bins
//const Double_t AliCDMesonBase::fgkMinDaughterEta = -1.28; // lower border
//const Double_t AliCDMesonBase::fgkMaxDaughterEta =  1.28; // upper border

//-- Event quality information
// boolean values to reduce output size

// are there tracks in addition to the ones selected using AliCDMesonTracks
// (ITSTPC, ITSsa, ITSpureSA) (0 = no, 1 = yes)
const Int_t AliCDMesonBase::fgkNTrackResiduals      = 2; // number of bins
const Double_t AliCDMesonBase::fgkMinTrackResiduals = 0.; // lower border
const Double_t AliCDMesonBase::fgkMaxTrackResiduals = 2.; // upper border

// vertex with in +/-4cm (0 = no, 1 = yes)
const Int_t AliCDMesonBase::fgkNVertexZinRng      = 2; // number of bins
const Double_t AliCDMesonBase::fgkMinVertexZinRng = 0.; // lower border
const Double_t AliCDMesonBase::fgkMaxVertexZinRng = 2.; // upper border

// are the vertices from SPD and tracks within 0.5cm? (0 = no, 1 = yes)
const Int_t AliCDMesonBase::fgkNVertexCoincidence      = 2; // number of bins
const Double_t AliCDMesonBase::fgkMinVertexCoincidence = 0.; // lower border
const Double_t AliCDMesonBase::fgkMaxVertexCoincidence = 2.; // upper border

// are there SPD tracklets which are not assigned to tracks? (0 = no, 1 = yes)
const Int_t AliCDMesonBase::fgkNTrackletResiduals      = 2; // number of bins
const Double_t AliCDMesonBase::fgkMinTrackletResiduals = 0.; // lower border
const Double_t AliCDMesonBase::fgkMaxTrackletResiduals = 2.; // upper border

//-- MC event information
const Int_t AliCDMesonBase::fgkNProcessType      = 4; // kBinDD = number of bins
const Double_t AliCDMesonBase::fgkMinProcessType = 0.; // kBinND = lower border
const Double_t AliCDMesonBase::fgkMaxProcessType = 4.; // kBinDD = upper border


//== EMPTY EVENT STUDY (ThnEmptyEvents) ======================================
// event type
const Int_t AliCDMesonBase::fgkNEventType      = 5; // kBinEventE = number of bins (5)
const Double_t AliCDMesonBase::fgkMinEventType = 1.; // kBinEventI = lower border (1)
const Double_t AliCDMesonBase::fgkMaxEventType = 6.; // kBinEventE+kBinEventI = u. b.

// multiplicities (reused for different detectors and ways of counting)
const Int_t AliCDMesonBase::fgkNMult      = 32; // number of bins
const Double_t AliCDMesonBase::fgkMinMult = 0.; // lower border
const Double_t AliCDMesonBase::fgkMaxMult = 31.; // upper border

// multplicities - extended range
// (reused for different detectors and ways of counting)
const Int_t AliCDMesonBase::fgkNMultW      = 64; // number of bins
const Double_t AliCDMesonBase::fgkMinMultW = 0; // lower border
const Double_t AliCDMesonBase::fgkMaxMultW = 63; // upper border

//== MULTIPLICITY STUDY (TnnMultiplicity) ====================================
// number of ITSTPC tracks in event
const Int_t AliCDMesonBase::fgkNNch      = 51; // number of bins
const Double_t AliCDMesonBase::fgkMinNch = 0.; // lower border
const Double_t AliCDMesonBase::fgkMaxNch = 51.; // upper border

// number of ITS standalone tracks in event
const Int_t AliCDMesonBase::fgkNNsoft      = 11; // number of bins
const Double_t AliCDMesonBase::fgkMinNsoft = 0.; // lower border
const Double_t AliCDMesonBase::fgkMaxNsoft = 11.; // upper border

// combined multiplicity
const Int_t AliCDMesonBase::fgkNNcomb      = 61; // number of bins
const Double_t AliCDMesonBase::fgkMinNcomb = 0.; // lower border
const Double_t AliCDMesonBase::fgkMaxNcomb = 61.; // upper border

// gap configuration is reused from THnMother

// number of residual tracks
const Int_t AliCDMesonBase::fgkNNresidualTracks      = 11; // number of bins
const Double_t AliCDMesonBase::fgkMinNresidualTracks = 0.; // lower border
const Double_t AliCDMesonBase::fgkMaxNresidualTracks = 11.; // upper border

// number of residual tracklets
const Int_t AliCDMesonBase::fgkNNresidualTracklets      = 21; // number of bins
const Double_t AliCDMesonBase::fgkMinNresidualTracklets = 0.; // lower border
const Double_t AliCDMesonBase::fgkMaxNresidualTracklets = 21.; // upper border

// vertex z-position
const Int_t AliCDMesonBase::fgkNVertexZ      = 20; // number of bins
const Double_t AliCDMesonBase::fgkMinVertexZ = -10.; // lower border
const Double_t AliCDMesonBase::fgkMaxVertexZ = 10.; // upper border

// SPD and track vertex distance
const Int_t AliCDMesonBase::fgkNVerticesDistance      = 10; // number of bins
const Double_t AliCDMesonBase::fgkMinVerticesDistance = 0.; // lower border
const Double_t AliCDMesonBase::fgkMaxVerticesDistance = 5.; // upper border


//------------------------------------------------------------------------------
Int_t AliCDMesonBase::GetGapBin(TString tag, Int_t gapcg,
                                Bool_t checkCentralActivity /* = kTRUE */)
{
	//
	// retrieve gap topology for a given string
	//

	tag.ToUpper();

	Bool_t ka = kFALSE, kc = kFALSE;

	if(tag.Contains("V0")){
		ka = ka || (gapcg & kBitV0A);
		kc = kc || (gapcg & kBitV0C);
	}
	if(tag.Contains("FMD")){
		ka = ka || (gapcg & kBitFMDA);
		kc = kc || (gapcg & kBitFMDC);
	}
	if(tag.Contains("SPD")){
		ka = ka || (gapcg & kBitSPDA);
		kc = kc || (gapcg & kBitSPDC);
	}
	if(tag.Contains("TPC")){
		ka = ka || (gapcg & kBitTPCA);
		kc = kc || (gapcg & kBitTPCC);
	}
	if(tag.Contains("ZDC")){
		ka = ka || (gapcg & kBitZDCA);
		kc = kc || (gapcg & kBitZDCC);
	}

	if(ka && kc)
		return kBinNG;
	else{
		if(!ka && !kc)
			if (((gapcg & kBitCentAct) && checkCentralActivity) ||
			    !checkCentralActivity) {
				return kBinDG; // central activity seen (or not required)
			}
			else {
				return kBinNG; // no central activity
			}
		else if(!kc)
			return kBinGC;
		else
			return kBinGA;
	}
}


//------------------------------------------------------------------------------
void AliCDMesonBase::CheckRange(Double_t &var, Double_t min,
                                Double_t max)
{
	//
	// check whether the value is with in the range specified with min and max
	//

	const Double_t eps = 1e-3;
	if( var >= max ) var = max - eps;
	if( var <= min ) var = min + eps;
}


//------------------------------------------------------------------------------
Int_t AliCDMesonBase::GetAxis(TString thntit, TString name)
{
	//
	// get the number of an axis, derived from the ThnSparse title (list of axes)
	//

	thntit.ToUpper();
	thntit.ReplaceAll(" ","");
	const Int_t nmax = 20;
	TString tits[nmax];
	Int_t counter = 0;
	while(thntit.Contains(",")){
		const Int_t pos = thntit.First(",");
		tits[counter] = thntit(0, pos);
		thntit = thntit(pos+1, thntit.Length()-pos);
		counter++;
		if(counter>=nmax-1){
			printf("AliCDMesonBase AliCDMesonBase::GetAxis too small nmax! %d %d\n",
			       counter, nmax);
			return -1; //exit(1); // TODO
		}
	}
	tits[counter++] = thntit;

	//----------------

	name.ToUpper();

	for(Int_t ii=0; ii<counter; ii++){
	  if( tits[ii] == name )
		  return ii;
	}
	printf("AliCDMesonBase AliCDMesonBase::GetAxis !%s! %s not found!\n",
	       name.Data(), thntit.Data());
	for(Int_t ii=0; ii<counter; ii++){
		printf("*************** AliCDMesonBase::GetAxis *****************\n");
		printf("AliCDMesonBase AliCDMesonBase::GetAxis %d !%s!\n", ii,
		       tits[ii].Data());
		printf("\n");
	}
	return -1; //exit(1); // TODO
}


//------------------------------------------------------------------------------
TString AliCDMesonBase::GetTitleMother()
{
	//
	// get the title of ThnMother (= list of axes)
	//

	TString title = "Ncombined, CombCh, CombPID, V0, FMD, SPD, TPC,";
	title += " Mass, Pt, CTS, OA, DaughterPt, TrackResiduals, VertexZinRng,";
	title += " ProcessType, VertexCoincidence, TrackletResiduals";
	return title;
}


//------------------------------------------------------------------------------
THnSparseD * AliCDMesonBase::GetThnMother(TString name /* = "CDMeson_Mother" */)
{
	// creates the THnSparse called Mother (used for the generation of invariant
	// mass distributions)
	//

	const Int_t nbin[] = {
		fgkNNcombined, fgkNCombCh, fgkNCombPID, fgkNGapConfig, fgkNGapConfig,
		fgkNGapConfig, fgkNGapConfig, fgkNMass, fgkNMotherPt, fgkNCTS, fgkNOA,
		fgkNDaughterPt, fgkNTrackResiduals, fgkNVertexZinRng, fgkNProcessType,
		fgkNVertexCoincidence, fgkNTrackletResiduals
	};
	const Double_t binmin[] = {
		fgkMinNcombined, fgkMinCombCh, fgkMinCombPID, fgkMinGapConfig,
		fgkMinGapConfig, fgkMinGapConfig, fgkMinGapConfig, fgkMinMass,
		fgkMinMotherPt, fgkMinCTS, fgkMinOA, fgkMinDaughterPt,
		fgkMinTrackResiduals, fgkMinVertexZinRng, fgkMinProcessType,
		fgkMinVertexCoincidence, fgkMinTrackletResiduals
	};
	const Double_t binmax[] = {
		fgkMaxNcombined, fgkMaxCombCh, fgkMaxCombPID, fgkMaxGapConfig,
		fgkMaxGapConfig, fgkMaxGapConfig, fgkMaxGapConfig, fgkMaxMass,
		fgkMaxMotherPt, fgkMaxCTS, fgkMaxOA, fgkMaxDaughterPt,
		fgkMaxTrackResiduals, fgkMaxVertexZinRng, fgkMaxProcessType,
		fgkMaxVertexCoincidence, fgkMaxTrackletResiduals
	};
	
	const Int_t npar = sizeof(nbin)/sizeof(Int_t);

	return new THnSparseD(name.Data(), GetTitleMother(), npar, nbin, binmin,
	                      binmax);
}


//------------------------------------------------------------------------------
void AliCDMesonBase::FillThnMother(THnSparseD *thn, Double_t vNch,
                                   Double_t vCombCh,
                                   Double_t vCombPID, Double_t vV0,
                                   Double_t vFMD, Double_t vSPD,
                                   Double_t vTPC, Double_t vMass,
                                   Double_t vPt,  Double_t vOA,
                                   Double_t vCTS,
                                   Double_t vDaughterPt,
                                   Double_t vTrackResiduals,
                                   Double_t vVertexZ,
                                   Double_t vProcessType,
                                   Double_t vVertexCoincidence,
                                   Double_t vTrkltResiduals)
{
	//
	// fill ThnMother
	//

	Double_t var[]={
		vNch, vCombCh, vCombPID, vV0, vFMD, vSPD, vTPC, vMass, vPt, vOA, vCTS,
		vDaughterPt, vTrackResiduals, vVertexZ, vProcessType, vVertexCoincidence,
		vTrkltResiduals
	};
	const Int_t nv = sizeof(var)/sizeof(Double_t);
	if(nv!=thn->GetNdimensions()){
		printf("AliCDMesonBase::FillThnMother nv error!! %d %d\n", nv,
		       thn->GetNdimensions());
		return; //exit(1);
	}

	CheckRange(var[7], fgkMinMass, fgkMaxMass);
	CheckRange(var[8], fgkMinMotherPt, fgkMaxMotherPt);
	CheckRange(var[11], fgkMinDaughterPt, fgkMaxDaughterPt);

	thn->Fill(var);
}


//------------------------------------------------------------------------------
Int_t AliCDMesonBase::GetAxisMother(TString name)
{
	//
	// return axis number corresponding to the name
	//

	return GetAxis(GetTitleMother(), name);
}


//------------------------------------------------------------------------------
TString AliCDMesonBase::GetTitleEmptyEvents()
{
	//
	// title / list of axes of the empty event study THnSparse
	//

	TString title = "EventType, FMD-A, FMD-C, SPD-I-A, SPD-I-C, SPD-O-A, SPD-O-C";
	title += ", SPDtrkltA, SPDtrkltC";
	title += ", fmdSum1I, fmdSum2I, fmdSum2O, fmdSum3I, fmdSum3O";
	//title += ", TPC_all, TPC_diffVertex";
	return title;
}


//------------------------------------------------------------------------------
THnSparseD* AliCDMesonBase::GetThnEmptyEvents()
{
	// creates the THnSparse called Empty Events
	// EventType, FMD-A, FMD-C, SPD-I-A, SPD-I-C, SPD-O-A, SPD-O-C, FMD1I..FMD3O
	// TPC_all, TPC_diffVertex (not used so far)

	const Int_t nbin[] = {
		fgkNEventType, fgkNMultW, fgkNMultW, fgkNMult, fgkNMult, fgkNMult, fgkNMult,
		fgkNMult, fgkNMult, fgkNMult, fgkNMult, fgkNMult, fgkNMult, fgkNMult
		//, fgkNMult, fgkNMult
	};
	const Double_t binmin[] = {
		fgkMinEventType, fgkMinMultW, fgkMinMultW, fgkMinMult, fgkMinMult,
		fgkMinMult, fgkMinMult, fgkMinMult, fgkMinMult, fgkMinMult, fgkMinMult,
		fgkMinMult, fgkMinMult, fgkMinMult //, fgkMinMult, fgkMinMult
	};
	const Double_t binmax[] = {
		fgkMaxEventType, fgkMaxMultW, fgkMaxMultW, fgkMaxMult, fgkMaxMult,
		fgkMaxMult, fgkMaxMult, fgkMaxMult, fgkMaxMult, fgkMaxMult, fgkMaxMult,
		fgkMaxMult, fgkMaxMult, fgkMaxMult //, fgkMaxMult, fgkMaxMult
	};
	
	const Int_t npar = sizeof(nbin)/sizeof(Int_t);

	return new THnSparseD("CDMeson_EmptyEvents", GetTitleEmptyEvents(), npar,
	                      nbin, binmin, binmax);
}


//------------------------------------------------------------------------------
void AliCDMesonBase::FillThnEmptyEvents(THnSparseD * thn, Int_t eventType,
                                        Int_t multFMDA,
                                        Int_t multFMDC,
                                        Int_t multSPDIA,
                                        Int_t multSPDIC,
                                        Int_t multSPDOA,
                                        Int_t multSPDOC,
                                        Int_t multSPDtrkltA,
                                        Int_t multSPDtrkltC,
                                        Int_t fmdSum1I,
                                        Int_t fmdSum2I,
                                        Int_t fmdSum2O,
                                        Int_t fmdSum3I,
                                        Int_t fmdSum3O/*,
                                        Int_t multTPC,
                                        Int_t multTPCdiffVertex */)
{
	//
	// Fill ThnEmptyEvents
	//

	Double_t var[]={
	  static_cast<Double_t>(eventType), static_cast<Double_t>(multFMDA), static_cast<Double_t>(multFMDC), static_cast<Double_t>(multSPDIA), static_cast<Double_t>(multSPDIC), static_cast<Double_t>(multSPDOA),
	  static_cast<Double_t>(multSPDOC), static_cast<Double_t>(multSPDtrkltA), static_cast<Double_t>(multSPDtrkltC), static_cast<Double_t>(fmdSum1I), static_cast<Double_t>(fmdSum2I), static_cast<Double_t>(fmdSum2O),
	  static_cast<Double_t>(fmdSum3I), static_cast<Double_t>(fmdSum3O)//, multTPC, multTPCdiffVertex
	};
	const Int_t nv = sizeof(var)/sizeof(Double_t);
	if(nv!=thn->GetNdimensions()){
		printf("AliCDMesonBase::FillThnEmptyEvents nv error!! %d %d\n", nv,
		       thn->GetNdimensions());
		return; //exit(1); // TODO
	}

	thn->Fill(var);
}


//------------------------------------------------------------------------------
Int_t AliCDMesonBase::GetAxisEmptyEvents(TString name)
{
	//
	// return axis number corresponding to the name
	//

	return GetAxis(GetTitleEmptyEvents(), name);
}


//------------------------------------------------------------------------------
TString AliCDMesonBase::GetTitleMultiplicity()
{
	//
	// get title of the multiplicity study ThnSparse
	//

	TString title = "Nch, Nsoft, Ncombined, V0, FMD, SPD, TPC, NresidualTracks";
	title += ", NresidualTracklets, VertexZ, VerticesDistance, ProcessType";
	return title;
}


//------------------------------------------------------------------------------
THnSparseD* AliCDMesonBase::GetThnMultiplicity()
{
	//
	// creates the THnSparse called Multiplicity
	//

	const Int_t nbin[] = {
		fgkNNch, fgkNNsoft, fgkNNcomb,fgkNGapConfig, fgkNGapConfig,
		fgkNGapConfig, fgkNGapConfig, fgkNNresidualTracks, fgkNNresidualTracklets,
		fgkNVertexZ, fgkNVerticesDistance, fgkNProcessType
	};
	const Double_t binmin[] = {
		fgkMinNch, fgkMinNsoft, fgkMinNcomb, fgkMinGapConfig, fgkMinGapConfig,
		fgkMinGapConfig, fgkMinGapConfig, fgkMinNresidualTracks,
		fgkMinNresidualTracklets, fgkMinVertexZ, fgkMinVerticesDistance,
		fgkMinProcessType
	};
	const Double_t binmax[] = {
		fgkMaxNch, fgkMaxNsoft, fgkMaxNcomb, fgkMaxGapConfig, fgkMaxGapConfig,
		fgkMaxGapConfig, fgkMaxGapConfig, fgkMaxNresidualTracks,
		fgkMaxNresidualTracklets, fgkMaxVertexZ, fgkMaxVerticesDistance,
		fgkMaxProcessType
	};

	const Int_t npar = sizeof(nbin)/sizeof(Int_t);

	return new THnSparseD("CDMeson_Multiplicity", GetTitleMultiplicity(), npar,
	                      nbin, binmin, binmax);
}


//------------------------------------------------------------------------------
void AliCDMesonBase::FillThnMultiplicity(THnSparseD *thn, Double_t vNch,
                                         Double_t vNsoft,
                                         Double_t vNcombined,
                                         Double_t vV0,
                                         Double_t vFMD,
                                         Double_t vSPD,
                                         Double_t vTPC,
                                         Double_t vNresidualTracks,
                                         Double_t vNresidualTracklets,
                                         Double_t vVertexZ,
                                         Double_t vVerticesDistance,
                                         Double_t vProcessType)
{
	// fill ThnMultiplicity
	// input list copied from GetTitle
	// var[] copied from GetTitle

	Double_t var[]={
		vNch, vNsoft, vNcombined, vV0, vFMD, vSPD, vTPC, vNresidualTracks,
		vNresidualTracklets, vVertexZ, vVerticesDistance, vProcessType
	};
	const Int_t nv = sizeof(var)/sizeof(Double_t);
	if(nv!=thn->GetNdimensions()){
		printf("AliCDMesonBase::FillThnMultiplicity nv error!! %d %d\n", nv,
		       thn->GetNdimensions());
		return; //exit(1);
	}

	thn->Fill(var);
}


//------------------------------------------------------------------------------
Int_t AliCDMesonBase::GetAxisMultiplicity(TString name)
{
	//
	// return axis number corresponding to the name
	//

	return GetAxis(GetTitleMultiplicity(), name);
}


//------------------------------------------------------------------------------
TH1F* AliCDMesonBase::GetHistStatsFlow()
{
	//
	// setup the stats flow histogram
	//

	TH1F *hist = new TH1F("c00_statsFlow", "", AliCDMesonBase::kBinLastValue,
	                0, AliCDMesonBase::kBinLastValue);
	TAxis* axis = hist->GetXaxis();
	axis->SetBinLabel(AliCDMesonBase::kBinTotalInput+1, "total Input");
	axis->SetBinLabel(AliCDMesonBase::kBinGoodInput+1, "good ESDs");
	axis->SetBinLabel(AliCDMesonBase::kBinV0OR+1, "V0-OR");
	axis->SetBinLabel(AliCDMesonBase::kBinV0AND+1, "V0-AND");
	axis->SetBinLabel(AliCDMesonBase::kBinEventsAfterCuts+1, "after cuts");
	axis->SetBinLabel(AliCDMesonBase::kBinEventsWithOutPileUp+1, "w/o pile up");
	axis->SetBinLabel(AliCDMesonBase::kBinv0Gap+1, "with V0 DG gap");
	axis->SetBinLabel(AliCDMesonBase::kBinv0fmdGap+1, "with V0-FMD DG gap");
	axis->SetBinLabel(AliCDMesonBase::kBinv0fmdspdGap+1,
	                  "with V0-FMD-SPD DG gap");
	axis->SetBinLabel(AliCDMesonBase::kBinv0fmdspdtpcGap+1,
	                  "with V0-FMD-SPD-TPC DG gap");
	axis->SetBinLabel(AliCDMesonBase::kBinv0fmdspdtpczdcGap+1,
	                  "with V0-FMD-SPD-TPC-ZDC DG gap");
	axis->SetBinLabel(AliCDMesonBase::kBinfmdGap+1, "with FMD DG gap");
	axis->SetBinLabel(AliCDMesonBase::kBinspdGap+1, "with SPD DG gap");
	axis->SetBinLabel(AliCDMesonBase::kBintpcGap+1, "with TPC DG gap");
	axis->SetBinLabel(AliCDMesonBase::kBintpcspdGap+1, "width TPC-SPD DG gap");
	axis->SetBinLabel(AliCDMesonBase::kBintpcspdfmdGap+1,
	                  "width TPC-SPD-FMD DG gap");
	axis->SetBinLabel(AliCDMesonBase::kBintpcspdfmdv0Gap+1,
	                  "width TPC-SPD-FMD-V0 DG gap");
	axis->SetBinLabel(AliCDMesonBase::kBinspdfmdGap+1, "with SPD FMD gap");
	axis->SetBinLabel(AliCDMesonBase::kBinspdfmdv0Gap+1, "with SPD FMD V0 gap");
	axis->SetBinLabel(AliCDMesonBase::kBinTwoTrackEvents+1, "with two tracks");
	axis->SetBinLabel(AliCDMesonBase::kBinThreeTrackEvents+1,
	                  "with three tracks");
	axis->SetBinLabel(AliCDMesonBase::kBinPionEvents+1, "with two pions");
	axis->SetBinLabel(AliCDMesonBase::kBinKaonEvents+1, "with two kaons");
	axis->SetBinLabel(AliCDMesonBase::kBinProtonEvents+1, "with two proton");
	axis->SetBinLabel(AliCDMesonBase::kBinElectronEvents+1, "with two electron");
	axis->SetBinLabel(AliCDMesonBase::kBinUnknownPIDEvents+1, "with unknown PID");
	axis->SetBinLabel(AliCDMesonBase::kBinResidualTracks+1,
	                  "without residual tracks");
	axis->SetBinLabel(AliCDMesonBase::kBinResidualTracklets+1,
	                  "without residual tracklets");
	axis->SetBinLabel(AliCDMesonBase::kBinCDonlyEvents+1, "CD only events");
	return hist;
}


//------------------------------------------------------------------------------
TH2F* AliCDMesonBase::GetHistPIDStudies(TString name)
{
	//
	// setup the PID studies histogram
	//

	TH2F *hist = new TH2F(name.Data(), ";particle 1;particle 2",
	                      AliCDMesonBase::kBinPIDUnknown,
	                      AliCDMesonBase::kBinPionE,
	                      AliCDMesonBase::kBinPIDUnknown+1,
	                      AliCDMesonBase::kBinPIDUnknown,
	                      AliCDMesonBase::kBinPionE,
	                      AliCDMesonBase::kBinPIDUnknown+1);
	TAxis* x = hist->GetXaxis();
	TAxis* y = hist->GetYaxis();
	x->SetBinLabel(AliCDMesonBase::kBinPionE, "#pi (ex)");
	x->SetBinLabel(AliCDMesonBase::kBinPion, "#pi");
	x->SetBinLabel(AliCDMesonBase::kBinSinglePion, "-");
	x->SetBinLabel(AliCDMesonBase::kBinKaonE, "K (ex)");
	x->SetBinLabel(AliCDMesonBase::kBinKaon, "K");
	x->SetBinLabel(AliCDMesonBase::kBinSingleKaon, ",");
	x->SetBinLabel(AliCDMesonBase::kBinProtonE, "p (ex)");
	x->SetBinLabel(AliCDMesonBase::kBinProton, "p");
	x->SetBinLabel(AliCDMesonBase::kBinSingleProton, "_");
	x->SetBinLabel(AliCDMesonBase::kBinElectronE, "e (ex)");
	x->SetBinLabel(AliCDMesonBase::kBinElectron, "e");
	x->SetBinLabel(AliCDMesonBase::kBinSingleElectron, ".");
	x->SetBinLabel(AliCDMesonBase::kBinPIDUnknown, "X");
	y->SetBinLabel(AliCDMesonBase::kBinPionE, "#pi (ex)");
	y->SetBinLabel(AliCDMesonBase::kBinPion, "#pi");
	y->SetBinLabel(AliCDMesonBase::kBinSinglePion, "-");
	y->SetBinLabel(AliCDMesonBase::kBinKaonE, "K (ex)");
	y->SetBinLabel(AliCDMesonBase::kBinKaon, "K");
	y->SetBinLabel(AliCDMesonBase::kBinSingleKaon, ",");
	y->SetBinLabel(AliCDMesonBase::kBinProtonE, "p (ex)");
	y->SetBinLabel(AliCDMesonBase::kBinProton, "p");
	y->SetBinLabel(AliCDMesonBase::kBinSingleProton, "_");
	y->SetBinLabel(AliCDMesonBase::kBinElectronE, "e (ex)");
	y->SetBinLabel(AliCDMesonBase::kBinElectron, "e");
	y->SetBinLabel(AliCDMesonBase::kBinSingleElectron, ".");
	y->SetBinLabel(AliCDMesonBase::kBinPIDUnknown, "X");
	return hist;
}


//------------------------------------------------------------------------------
TObjArray* AliCDMesonBase::GetHistVZEROStudies(TList* l)
{
	//
	// Create Histograms for the VZERO trigger studies
	//

	TObjArray* arr = new TObjArray(130);

	TObject* o = 0x0;
	for (Int_t iPMT = 0; iPMT < 64; ++iPMT) {
		o = (TObject*)new TH2F(Form("h00_%02d_ADC_TriggerThr", iPMT),
		                       ";ADC Counts;Trigger Threshold (ADC Counts)",
		                       400, 0., 4000., 48, 2., 50.);
		arr->Add(o);
		l->Add(o);
	}
	for (Int_t iPMT = 0; iPMT < 64; ++iPMT) {
		o = (TObject*)new TH2F(Form("h01_%02d_ADC_Multiplicity", iPMT),
		                       ";ADC Counts;Multiplicity",
		                       400, 0., 4000., 250, 0., 250.);
		arr->Add(o);
		l->Add(o);
	}
	/*
	  // not of use for pp data in 2010
	o = (TObject*)new TH2F("h02_TriggerChargeA_Trigger",
	                       ";Trigger Charge A;Trigger Decision A",
	                       250, 0., 5000., 2, 0., 2.);
	arr->Add(o);
	l->Add(o);
	o = (TObject*)new TH2F("h03__TriggerChargeC_Trigger",
	                       ";Trigger Charge C;Trigger Decision C",
	                       250, 0., 5000., 2, 0., 2.);
	arr->Add(o);
	l->Add(o);
	*/

	return arr;
}


//------------------------------------------------------------------------------
void AliCDMesonBase::GetGapTriggers(THnSparseI* gaprun, Int_t gapCondition,
                                    Int_t run, Double_t& triggers,
                                    Double_t& total)
{
	// determine the number of certain triggers with a gap in the detectors
	// specified by gapCondition in run and the total number of events
	// surviving all cuts (including pile-up rejection)

	triggers = 0;
	total = 0;
	Int_t nTuple[] = { gaprun->GetAxis(0)->FindBin(run), 0 };
	for (Int_t i = 0; i< kBitGapMax; ++i) {
		nTuple[1] = i;
		Double_t temp = gaprun->GetBinContent(nTuple);
		if (!(i & gapCondition)) {
			triggers += temp;
		}
		total += temp;
	}
}


//------------------------------------------------------------------------------
void AliCDMesonBase::GetNoGapTriggers(THnSparseI* gaprun, Int_t gapCondition,
                                      Int_t run, Double_t& triggers,
                                      Double_t& total)
{
	// determine the number of certain triggers with a NO gap in the detectors
	// specified by the gapCondition in run and the total number of events
	// surviving all cuts (including pile-up rejection)

	triggers = 0;
	total = 0;
	Int_t nTuple[] = { gaprun->GetAxis(0)->FindBin(run), 0 };
	for (Int_t i = 0; i< kBitGapMax; ++i) {
		nTuple[1] = i;
		Double_t temp = gaprun->GetBinContent(nTuple);
		if (i & gapCondition) {
			triggers += temp;
		}
		total += temp;
	}
}
 AliCDMesonBase.cxx:1
 AliCDMesonBase.cxx:2
 AliCDMesonBase.cxx:3
 AliCDMesonBase.cxx:4
 AliCDMesonBase.cxx:5
 AliCDMesonBase.cxx:6
 AliCDMesonBase.cxx:7
 AliCDMesonBase.cxx:8
 AliCDMesonBase.cxx:9
 AliCDMesonBase.cxx:10
 AliCDMesonBase.cxx:11
 AliCDMesonBase.cxx:12
 AliCDMesonBase.cxx:13
 AliCDMesonBase.cxx:14
 AliCDMesonBase.cxx:15
 AliCDMesonBase.cxx:16
 AliCDMesonBase.cxx:17
 AliCDMesonBase.cxx:18
 AliCDMesonBase.cxx:19
 AliCDMesonBase.cxx:20
 AliCDMesonBase.cxx:21
 AliCDMesonBase.cxx:22
 AliCDMesonBase.cxx:23
 AliCDMesonBase.cxx:24
 AliCDMesonBase.cxx:25
 AliCDMesonBase.cxx:26
 AliCDMesonBase.cxx:27
 AliCDMesonBase.cxx:28
 AliCDMesonBase.cxx:29
 AliCDMesonBase.cxx:30
 AliCDMesonBase.cxx:31
 AliCDMesonBase.cxx:32
 AliCDMesonBase.cxx:33
 AliCDMesonBase.cxx:34
 AliCDMesonBase.cxx:35
 AliCDMesonBase.cxx:36
 AliCDMesonBase.cxx:37
 AliCDMesonBase.cxx:38
 AliCDMesonBase.cxx:39
 AliCDMesonBase.cxx:40
 AliCDMesonBase.cxx:41
 AliCDMesonBase.cxx:42
 AliCDMesonBase.cxx:43
 AliCDMesonBase.cxx:44
 AliCDMesonBase.cxx:45
 AliCDMesonBase.cxx:46
 AliCDMesonBase.cxx:47
 AliCDMesonBase.cxx:48
 AliCDMesonBase.cxx:49
 AliCDMesonBase.cxx:50
 AliCDMesonBase.cxx:51
 AliCDMesonBase.cxx:52
 AliCDMesonBase.cxx:53
 AliCDMesonBase.cxx:54
 AliCDMesonBase.cxx:55
 AliCDMesonBase.cxx:56
 AliCDMesonBase.cxx:57
 AliCDMesonBase.cxx:58
 AliCDMesonBase.cxx:59
 AliCDMesonBase.cxx:60
 AliCDMesonBase.cxx:61
 AliCDMesonBase.cxx:62
 AliCDMesonBase.cxx:63
 AliCDMesonBase.cxx:64
 AliCDMesonBase.cxx:65
 AliCDMesonBase.cxx:66
 AliCDMesonBase.cxx:67
 AliCDMesonBase.cxx:68
 AliCDMesonBase.cxx:69
 AliCDMesonBase.cxx:70
 AliCDMesonBase.cxx:71
 AliCDMesonBase.cxx:72
 AliCDMesonBase.cxx:73
 AliCDMesonBase.cxx:74
 AliCDMesonBase.cxx:75
 AliCDMesonBase.cxx:76
 AliCDMesonBase.cxx:77
 AliCDMesonBase.cxx:78
 AliCDMesonBase.cxx:79
 AliCDMesonBase.cxx:80
 AliCDMesonBase.cxx:81
 AliCDMesonBase.cxx:82
 AliCDMesonBase.cxx:83
 AliCDMesonBase.cxx:84
 AliCDMesonBase.cxx:85
 AliCDMesonBase.cxx:86
 AliCDMesonBase.cxx:87
 AliCDMesonBase.cxx:88
 AliCDMesonBase.cxx:89
 AliCDMesonBase.cxx:90
 AliCDMesonBase.cxx:91
 AliCDMesonBase.cxx:92
 AliCDMesonBase.cxx:93
 AliCDMesonBase.cxx:94
 AliCDMesonBase.cxx:95
 AliCDMesonBase.cxx:96
 AliCDMesonBase.cxx:97
 AliCDMesonBase.cxx:98
 AliCDMesonBase.cxx:99
 AliCDMesonBase.cxx:100
 AliCDMesonBase.cxx:101
 AliCDMesonBase.cxx:102
 AliCDMesonBase.cxx:103
 AliCDMesonBase.cxx:104
 AliCDMesonBase.cxx:105
 AliCDMesonBase.cxx:106
 AliCDMesonBase.cxx:107
 AliCDMesonBase.cxx:108
 AliCDMesonBase.cxx:109
 AliCDMesonBase.cxx:110
 AliCDMesonBase.cxx:111
 AliCDMesonBase.cxx:112
 AliCDMesonBase.cxx:113
 AliCDMesonBase.cxx:114
 AliCDMesonBase.cxx:115
 AliCDMesonBase.cxx:116
 AliCDMesonBase.cxx:117
 AliCDMesonBase.cxx:118
 AliCDMesonBase.cxx:119
 AliCDMesonBase.cxx:120
 AliCDMesonBase.cxx:121
 AliCDMesonBase.cxx:122
 AliCDMesonBase.cxx:123
 AliCDMesonBase.cxx:124
 AliCDMesonBase.cxx:125
 AliCDMesonBase.cxx:126
 AliCDMesonBase.cxx:127
 AliCDMesonBase.cxx:128
 AliCDMesonBase.cxx:129
 AliCDMesonBase.cxx:130
 AliCDMesonBase.cxx:131
 AliCDMesonBase.cxx:132
 AliCDMesonBase.cxx:133
 AliCDMesonBase.cxx:134
 AliCDMesonBase.cxx:135
 AliCDMesonBase.cxx:136
 AliCDMesonBase.cxx:137
 AliCDMesonBase.cxx:138
 AliCDMesonBase.cxx:139
 AliCDMesonBase.cxx:140
 AliCDMesonBase.cxx:141
 AliCDMesonBase.cxx:142
 AliCDMesonBase.cxx:143
 AliCDMesonBase.cxx:144
 AliCDMesonBase.cxx:145
 AliCDMesonBase.cxx:146
 AliCDMesonBase.cxx:147
 AliCDMesonBase.cxx:148
 AliCDMesonBase.cxx:149
 AliCDMesonBase.cxx:150
 AliCDMesonBase.cxx:151
 AliCDMesonBase.cxx:152
 AliCDMesonBase.cxx:153
 AliCDMesonBase.cxx:154
 AliCDMesonBase.cxx:155
 AliCDMesonBase.cxx:156
 AliCDMesonBase.cxx:157
 AliCDMesonBase.cxx:158
 AliCDMesonBase.cxx:159
 AliCDMesonBase.cxx:160
 AliCDMesonBase.cxx:161
 AliCDMesonBase.cxx:162
 AliCDMesonBase.cxx:163
 AliCDMesonBase.cxx:164
 AliCDMesonBase.cxx:165
 AliCDMesonBase.cxx:166
 AliCDMesonBase.cxx:167
 AliCDMesonBase.cxx:168
 AliCDMesonBase.cxx:169
 AliCDMesonBase.cxx:170
 AliCDMesonBase.cxx:171
 AliCDMesonBase.cxx:172
 AliCDMesonBase.cxx:173
 AliCDMesonBase.cxx:174
 AliCDMesonBase.cxx:175
 AliCDMesonBase.cxx:176
 AliCDMesonBase.cxx:177
 AliCDMesonBase.cxx:178
 AliCDMesonBase.cxx:179
 AliCDMesonBase.cxx:180
 AliCDMesonBase.cxx:181
 AliCDMesonBase.cxx:182
 AliCDMesonBase.cxx:183
 AliCDMesonBase.cxx:184
 AliCDMesonBase.cxx:185
 AliCDMesonBase.cxx:186
 AliCDMesonBase.cxx:187
 AliCDMesonBase.cxx:188
 AliCDMesonBase.cxx:189
 AliCDMesonBase.cxx:190
 AliCDMesonBase.cxx:191
 AliCDMesonBase.cxx:192
 AliCDMesonBase.cxx:193
 AliCDMesonBase.cxx:194
 AliCDMesonBase.cxx:195
 AliCDMesonBase.cxx:196
 AliCDMesonBase.cxx:197
 AliCDMesonBase.cxx:198
 AliCDMesonBase.cxx:199
 AliCDMesonBase.cxx:200
 AliCDMesonBase.cxx:201
 AliCDMesonBase.cxx:202
 AliCDMesonBase.cxx:203
 AliCDMesonBase.cxx:204
 AliCDMesonBase.cxx:205
 AliCDMesonBase.cxx:206
 AliCDMesonBase.cxx:207
 AliCDMesonBase.cxx:208
 AliCDMesonBase.cxx:209
 AliCDMesonBase.cxx:210
 AliCDMesonBase.cxx:211
 AliCDMesonBase.cxx:212
 AliCDMesonBase.cxx:213
 AliCDMesonBase.cxx:214
 AliCDMesonBase.cxx:215
 AliCDMesonBase.cxx:216
 AliCDMesonBase.cxx:217
 AliCDMesonBase.cxx:218
 AliCDMesonBase.cxx:219
 AliCDMesonBase.cxx:220
 AliCDMesonBase.cxx:221
 AliCDMesonBase.cxx:222
 AliCDMesonBase.cxx:223
 AliCDMesonBase.cxx:224
 AliCDMesonBase.cxx:225
 AliCDMesonBase.cxx:226
 AliCDMesonBase.cxx:227
 AliCDMesonBase.cxx:228
 AliCDMesonBase.cxx:229
 AliCDMesonBase.cxx:230
 AliCDMesonBase.cxx:231
 AliCDMesonBase.cxx:232
 AliCDMesonBase.cxx:233
 AliCDMesonBase.cxx:234
 AliCDMesonBase.cxx:235
 AliCDMesonBase.cxx:236
 AliCDMesonBase.cxx:237
 AliCDMesonBase.cxx:238
 AliCDMesonBase.cxx:239
 AliCDMesonBase.cxx:240
 AliCDMesonBase.cxx:241
 AliCDMesonBase.cxx:242
 AliCDMesonBase.cxx:243
 AliCDMesonBase.cxx:244
 AliCDMesonBase.cxx:245
 AliCDMesonBase.cxx:246
 AliCDMesonBase.cxx:247
 AliCDMesonBase.cxx:248
 AliCDMesonBase.cxx:249
 AliCDMesonBase.cxx:250
 AliCDMesonBase.cxx:251
 AliCDMesonBase.cxx:252
 AliCDMesonBase.cxx:253
 AliCDMesonBase.cxx:254
 AliCDMesonBase.cxx:255
 AliCDMesonBase.cxx:256
 AliCDMesonBase.cxx:257
 AliCDMesonBase.cxx:258
 AliCDMesonBase.cxx:259
 AliCDMesonBase.cxx:260
 AliCDMesonBase.cxx:261
 AliCDMesonBase.cxx:262
 AliCDMesonBase.cxx:263
 AliCDMesonBase.cxx:264
 AliCDMesonBase.cxx:265
 AliCDMesonBase.cxx:266
 AliCDMesonBase.cxx:267
 AliCDMesonBase.cxx:268
 AliCDMesonBase.cxx:269
 AliCDMesonBase.cxx:270
 AliCDMesonBase.cxx:271
 AliCDMesonBase.cxx:272
 AliCDMesonBase.cxx:273
 AliCDMesonBase.cxx:274
 AliCDMesonBase.cxx:275
 AliCDMesonBase.cxx:276
 AliCDMesonBase.cxx:277
 AliCDMesonBase.cxx:278
 AliCDMesonBase.cxx:279
 AliCDMesonBase.cxx:280
 AliCDMesonBase.cxx:281
 AliCDMesonBase.cxx:282
 AliCDMesonBase.cxx:283
 AliCDMesonBase.cxx:284
 AliCDMesonBase.cxx:285
 AliCDMesonBase.cxx:286
 AliCDMesonBase.cxx:287
 AliCDMesonBase.cxx:288
 AliCDMesonBase.cxx:289
 AliCDMesonBase.cxx:290
 AliCDMesonBase.cxx:291
 AliCDMesonBase.cxx:292
 AliCDMesonBase.cxx:293
 AliCDMesonBase.cxx:294
 AliCDMesonBase.cxx:295
 AliCDMesonBase.cxx:296
 AliCDMesonBase.cxx:297
 AliCDMesonBase.cxx:298
 AliCDMesonBase.cxx:299
 AliCDMesonBase.cxx:300
 AliCDMesonBase.cxx:301
 AliCDMesonBase.cxx:302
 AliCDMesonBase.cxx:303
 AliCDMesonBase.cxx:304
 AliCDMesonBase.cxx:305
 AliCDMesonBase.cxx:306
 AliCDMesonBase.cxx:307
 AliCDMesonBase.cxx:308
 AliCDMesonBase.cxx:309
 AliCDMesonBase.cxx:310
 AliCDMesonBase.cxx:311
 AliCDMesonBase.cxx:312
 AliCDMesonBase.cxx:313
 AliCDMesonBase.cxx:314
 AliCDMesonBase.cxx:315
 AliCDMesonBase.cxx:316
 AliCDMesonBase.cxx:317
 AliCDMesonBase.cxx:318
 AliCDMesonBase.cxx:319
 AliCDMesonBase.cxx:320
 AliCDMesonBase.cxx:321
 AliCDMesonBase.cxx:322
 AliCDMesonBase.cxx:323
 AliCDMesonBase.cxx:324
 AliCDMesonBase.cxx:325
 AliCDMesonBase.cxx:326
 AliCDMesonBase.cxx:327
 AliCDMesonBase.cxx:328
 AliCDMesonBase.cxx:329
 AliCDMesonBase.cxx:330
 AliCDMesonBase.cxx:331
 AliCDMesonBase.cxx:332
 AliCDMesonBase.cxx:333
 AliCDMesonBase.cxx:334
 AliCDMesonBase.cxx:335
 AliCDMesonBase.cxx:336
 AliCDMesonBase.cxx:337
 AliCDMesonBase.cxx:338
 AliCDMesonBase.cxx:339
 AliCDMesonBase.cxx:340
 AliCDMesonBase.cxx:341
 AliCDMesonBase.cxx:342
 AliCDMesonBase.cxx:343
 AliCDMesonBase.cxx:344
 AliCDMesonBase.cxx:345
 AliCDMesonBase.cxx:346
 AliCDMesonBase.cxx:347
 AliCDMesonBase.cxx:348
 AliCDMesonBase.cxx:349
 AliCDMesonBase.cxx:350
 AliCDMesonBase.cxx:351
 AliCDMesonBase.cxx:352
 AliCDMesonBase.cxx:353
 AliCDMesonBase.cxx:354
 AliCDMesonBase.cxx:355
 AliCDMesonBase.cxx:356
 AliCDMesonBase.cxx:357
 AliCDMesonBase.cxx:358
 AliCDMesonBase.cxx:359
 AliCDMesonBase.cxx:360
 AliCDMesonBase.cxx:361
 AliCDMesonBase.cxx:362
 AliCDMesonBase.cxx:363
 AliCDMesonBase.cxx:364
 AliCDMesonBase.cxx:365
 AliCDMesonBase.cxx:366
 AliCDMesonBase.cxx:367
 AliCDMesonBase.cxx:368
 AliCDMesonBase.cxx:369
 AliCDMesonBase.cxx:370
 AliCDMesonBase.cxx:371
 AliCDMesonBase.cxx:372
 AliCDMesonBase.cxx:373
 AliCDMesonBase.cxx:374
 AliCDMesonBase.cxx:375
 AliCDMesonBase.cxx:376
 AliCDMesonBase.cxx:377
 AliCDMesonBase.cxx:378
 AliCDMesonBase.cxx:379
 AliCDMesonBase.cxx:380
 AliCDMesonBase.cxx:381
 AliCDMesonBase.cxx:382
 AliCDMesonBase.cxx:383
 AliCDMesonBase.cxx:384
 AliCDMesonBase.cxx:385
 AliCDMesonBase.cxx:386
 AliCDMesonBase.cxx:387
 AliCDMesonBase.cxx:388
 AliCDMesonBase.cxx:389
 AliCDMesonBase.cxx:390
 AliCDMesonBase.cxx:391
 AliCDMesonBase.cxx:392
 AliCDMesonBase.cxx:393
 AliCDMesonBase.cxx:394
 AliCDMesonBase.cxx:395
 AliCDMesonBase.cxx:396
 AliCDMesonBase.cxx:397
 AliCDMesonBase.cxx:398
 AliCDMesonBase.cxx:399
 AliCDMesonBase.cxx:400
 AliCDMesonBase.cxx:401
 AliCDMesonBase.cxx:402
 AliCDMesonBase.cxx:403
 AliCDMesonBase.cxx:404
 AliCDMesonBase.cxx:405
 AliCDMesonBase.cxx:406
 AliCDMesonBase.cxx:407
 AliCDMesonBase.cxx:408
 AliCDMesonBase.cxx:409
 AliCDMesonBase.cxx:410
 AliCDMesonBase.cxx:411
 AliCDMesonBase.cxx:412
 AliCDMesonBase.cxx:413
 AliCDMesonBase.cxx:414
 AliCDMesonBase.cxx:415
 AliCDMesonBase.cxx:416
 AliCDMesonBase.cxx:417
 AliCDMesonBase.cxx:418
 AliCDMesonBase.cxx:419
 AliCDMesonBase.cxx:420
 AliCDMesonBase.cxx:421
 AliCDMesonBase.cxx:422
 AliCDMesonBase.cxx:423
 AliCDMesonBase.cxx:424
 AliCDMesonBase.cxx:425
 AliCDMesonBase.cxx:426
 AliCDMesonBase.cxx:427
 AliCDMesonBase.cxx:428
 AliCDMesonBase.cxx:429
 AliCDMesonBase.cxx:430
 AliCDMesonBase.cxx:431
 AliCDMesonBase.cxx:432
 AliCDMesonBase.cxx:433
 AliCDMesonBase.cxx:434
 AliCDMesonBase.cxx:435
 AliCDMesonBase.cxx:436
 AliCDMesonBase.cxx:437
 AliCDMesonBase.cxx:438
 AliCDMesonBase.cxx:439
 AliCDMesonBase.cxx:440
 AliCDMesonBase.cxx:441
 AliCDMesonBase.cxx:442
 AliCDMesonBase.cxx:443
 AliCDMesonBase.cxx:444
 AliCDMesonBase.cxx:445
 AliCDMesonBase.cxx:446
 AliCDMesonBase.cxx:447
 AliCDMesonBase.cxx:448
 AliCDMesonBase.cxx:449
 AliCDMesonBase.cxx:450
 AliCDMesonBase.cxx:451
 AliCDMesonBase.cxx:452
 AliCDMesonBase.cxx:453
 AliCDMesonBase.cxx:454
 AliCDMesonBase.cxx:455
 AliCDMesonBase.cxx:456
 AliCDMesonBase.cxx:457
 AliCDMesonBase.cxx:458
 AliCDMesonBase.cxx:459
 AliCDMesonBase.cxx:460
 AliCDMesonBase.cxx:461
 AliCDMesonBase.cxx:462
 AliCDMesonBase.cxx:463
 AliCDMesonBase.cxx:464
 AliCDMesonBase.cxx:465
 AliCDMesonBase.cxx:466
 AliCDMesonBase.cxx:467
 AliCDMesonBase.cxx:468
 AliCDMesonBase.cxx:469
 AliCDMesonBase.cxx:470
 AliCDMesonBase.cxx:471
 AliCDMesonBase.cxx:472
 AliCDMesonBase.cxx:473
 AliCDMesonBase.cxx:474
 AliCDMesonBase.cxx:475
 AliCDMesonBase.cxx:476
 AliCDMesonBase.cxx:477
 AliCDMesonBase.cxx:478
 AliCDMesonBase.cxx:479
 AliCDMesonBase.cxx:480
 AliCDMesonBase.cxx:481
 AliCDMesonBase.cxx:482
 AliCDMesonBase.cxx:483
 AliCDMesonBase.cxx:484
 AliCDMesonBase.cxx:485
 AliCDMesonBase.cxx:486
 AliCDMesonBase.cxx:487
 AliCDMesonBase.cxx:488
 AliCDMesonBase.cxx:489
 AliCDMesonBase.cxx:490
 AliCDMesonBase.cxx:491
 AliCDMesonBase.cxx:492
 AliCDMesonBase.cxx:493
 AliCDMesonBase.cxx:494
 AliCDMesonBase.cxx:495
 AliCDMesonBase.cxx:496
 AliCDMesonBase.cxx:497
 AliCDMesonBase.cxx:498
 AliCDMesonBase.cxx:499
 AliCDMesonBase.cxx:500
 AliCDMesonBase.cxx:501
 AliCDMesonBase.cxx:502
 AliCDMesonBase.cxx:503
 AliCDMesonBase.cxx:504
 AliCDMesonBase.cxx:505
 AliCDMesonBase.cxx:506
 AliCDMesonBase.cxx:507
 AliCDMesonBase.cxx:508
 AliCDMesonBase.cxx:509
 AliCDMesonBase.cxx:510
 AliCDMesonBase.cxx:511
 AliCDMesonBase.cxx:512
 AliCDMesonBase.cxx:513
 AliCDMesonBase.cxx:514
 AliCDMesonBase.cxx:515
 AliCDMesonBase.cxx:516
 AliCDMesonBase.cxx:517
 AliCDMesonBase.cxx:518
 AliCDMesonBase.cxx:519
 AliCDMesonBase.cxx:520
 AliCDMesonBase.cxx:521
 AliCDMesonBase.cxx:522
 AliCDMesonBase.cxx:523
 AliCDMesonBase.cxx:524
 AliCDMesonBase.cxx:525
 AliCDMesonBase.cxx:526
 AliCDMesonBase.cxx:527
 AliCDMesonBase.cxx:528
 AliCDMesonBase.cxx:529
 AliCDMesonBase.cxx:530
 AliCDMesonBase.cxx:531
 AliCDMesonBase.cxx:532
 AliCDMesonBase.cxx:533
 AliCDMesonBase.cxx:534
 AliCDMesonBase.cxx:535
 AliCDMesonBase.cxx:536
 AliCDMesonBase.cxx:537
 AliCDMesonBase.cxx:538
 AliCDMesonBase.cxx:539
 AliCDMesonBase.cxx:540
 AliCDMesonBase.cxx:541
 AliCDMesonBase.cxx:542
 AliCDMesonBase.cxx:543
 AliCDMesonBase.cxx:544
 AliCDMesonBase.cxx:545
 AliCDMesonBase.cxx:546
 AliCDMesonBase.cxx:547
 AliCDMesonBase.cxx:548
 AliCDMesonBase.cxx:549
 AliCDMesonBase.cxx:550
 AliCDMesonBase.cxx:551
 AliCDMesonBase.cxx:552
 AliCDMesonBase.cxx:553
 AliCDMesonBase.cxx:554
 AliCDMesonBase.cxx:555
 AliCDMesonBase.cxx:556
 AliCDMesonBase.cxx:557
 AliCDMesonBase.cxx:558
 AliCDMesonBase.cxx:559
 AliCDMesonBase.cxx:560
 AliCDMesonBase.cxx:561
 AliCDMesonBase.cxx:562
 AliCDMesonBase.cxx:563
 AliCDMesonBase.cxx:564
 AliCDMesonBase.cxx:565
 AliCDMesonBase.cxx:566
 AliCDMesonBase.cxx:567
 AliCDMesonBase.cxx:568
 AliCDMesonBase.cxx:569
 AliCDMesonBase.cxx:570
 AliCDMesonBase.cxx:571
 AliCDMesonBase.cxx:572
 AliCDMesonBase.cxx:573
 AliCDMesonBase.cxx:574
 AliCDMesonBase.cxx:575
 AliCDMesonBase.cxx:576
 AliCDMesonBase.cxx:577
 AliCDMesonBase.cxx:578
 AliCDMesonBase.cxx:579
 AliCDMesonBase.cxx:580
 AliCDMesonBase.cxx:581
 AliCDMesonBase.cxx:582
 AliCDMesonBase.cxx:583
 AliCDMesonBase.cxx:584
 AliCDMesonBase.cxx:585
 AliCDMesonBase.cxx:586
 AliCDMesonBase.cxx:587
 AliCDMesonBase.cxx:588
 AliCDMesonBase.cxx:589
 AliCDMesonBase.cxx:590
 AliCDMesonBase.cxx:591
 AliCDMesonBase.cxx:592
 AliCDMesonBase.cxx:593
 AliCDMesonBase.cxx:594
 AliCDMesonBase.cxx:595
 AliCDMesonBase.cxx:596
 AliCDMesonBase.cxx:597
 AliCDMesonBase.cxx:598
 AliCDMesonBase.cxx:599
 AliCDMesonBase.cxx:600
 AliCDMesonBase.cxx:601
 AliCDMesonBase.cxx:602
 AliCDMesonBase.cxx:603
 AliCDMesonBase.cxx:604
 AliCDMesonBase.cxx:605
 AliCDMesonBase.cxx:606
 AliCDMesonBase.cxx:607
 AliCDMesonBase.cxx:608
 AliCDMesonBase.cxx:609
 AliCDMesonBase.cxx:610
 AliCDMesonBase.cxx:611
 AliCDMesonBase.cxx:612
 AliCDMesonBase.cxx:613
 AliCDMesonBase.cxx:614
 AliCDMesonBase.cxx:615
 AliCDMesonBase.cxx:616
 AliCDMesonBase.cxx:617
 AliCDMesonBase.cxx:618
 AliCDMesonBase.cxx:619
 AliCDMesonBase.cxx:620
 AliCDMesonBase.cxx:621
 AliCDMesonBase.cxx:622
 AliCDMesonBase.cxx:623
 AliCDMesonBase.cxx:624
 AliCDMesonBase.cxx:625
 AliCDMesonBase.cxx:626
 AliCDMesonBase.cxx:627
 AliCDMesonBase.cxx:628
 AliCDMesonBase.cxx:629
 AliCDMesonBase.cxx:630
 AliCDMesonBase.cxx:631
 AliCDMesonBase.cxx:632
 AliCDMesonBase.cxx:633
 AliCDMesonBase.cxx:634
 AliCDMesonBase.cxx:635
 AliCDMesonBase.cxx:636
 AliCDMesonBase.cxx:637
 AliCDMesonBase.cxx:638
 AliCDMesonBase.cxx:639
 AliCDMesonBase.cxx:640
 AliCDMesonBase.cxx:641
 AliCDMesonBase.cxx:642
 AliCDMesonBase.cxx:643
 AliCDMesonBase.cxx:644
 AliCDMesonBase.cxx:645
 AliCDMesonBase.cxx:646
 AliCDMesonBase.cxx:647
 AliCDMesonBase.cxx:648
 AliCDMesonBase.cxx:649
 AliCDMesonBase.cxx:650
 AliCDMesonBase.cxx:651
 AliCDMesonBase.cxx:652
 AliCDMesonBase.cxx:653
 AliCDMesonBase.cxx:654
 AliCDMesonBase.cxx:655
 AliCDMesonBase.cxx:656
 AliCDMesonBase.cxx:657
 AliCDMesonBase.cxx:658
 AliCDMesonBase.cxx:659
 AliCDMesonBase.cxx:660
 AliCDMesonBase.cxx:661
 AliCDMesonBase.cxx:662
 AliCDMesonBase.cxx:663
 AliCDMesonBase.cxx:664
 AliCDMesonBase.cxx:665
 AliCDMesonBase.cxx:666
 AliCDMesonBase.cxx:667
 AliCDMesonBase.cxx:668
 AliCDMesonBase.cxx:669
 AliCDMesonBase.cxx:670
 AliCDMesonBase.cxx:671
 AliCDMesonBase.cxx:672
 AliCDMesonBase.cxx:673
 AliCDMesonBase.cxx:674
 AliCDMesonBase.cxx:675
 AliCDMesonBase.cxx:676
 AliCDMesonBase.cxx:677
 AliCDMesonBase.cxx:678
 AliCDMesonBase.cxx:679
 AliCDMesonBase.cxx:680
 AliCDMesonBase.cxx:681
 AliCDMesonBase.cxx:682
 AliCDMesonBase.cxx:683
 AliCDMesonBase.cxx:684
 AliCDMesonBase.cxx:685
 AliCDMesonBase.cxx:686
 AliCDMesonBase.cxx:687
 AliCDMesonBase.cxx:688
 AliCDMesonBase.cxx:689
 AliCDMesonBase.cxx:690
 AliCDMesonBase.cxx:691
 AliCDMesonBase.cxx:692
 AliCDMesonBase.cxx:693
 AliCDMesonBase.cxx:694
 AliCDMesonBase.cxx:695
 AliCDMesonBase.cxx:696
 AliCDMesonBase.cxx:697
 AliCDMesonBase.cxx:698
 AliCDMesonBase.cxx:699
 AliCDMesonBase.cxx:700
 AliCDMesonBase.cxx:701
 AliCDMesonBase.cxx:702
 AliCDMesonBase.cxx:703
 AliCDMesonBase.cxx:704
 AliCDMesonBase.cxx:705
 AliCDMesonBase.cxx:706
 AliCDMesonBase.cxx:707
 AliCDMesonBase.cxx:708
 AliCDMesonBase.cxx:709
 AliCDMesonBase.cxx:710
 AliCDMesonBase.cxx:711
 AliCDMesonBase.cxx:712
 AliCDMesonBase.cxx:713
 AliCDMesonBase.cxx:714
 AliCDMesonBase.cxx:715
 AliCDMesonBase.cxx:716
 AliCDMesonBase.cxx:717
 AliCDMesonBase.cxx:718
 AliCDMesonBase.cxx:719
 AliCDMesonBase.cxx:720
 AliCDMesonBase.cxx:721
 AliCDMesonBase.cxx:722
 AliCDMesonBase.cxx:723
 AliCDMesonBase.cxx:724
 AliCDMesonBase.cxx:725
 AliCDMesonBase.cxx:726
 AliCDMesonBase.cxx:727
 AliCDMesonBase.cxx:728
 AliCDMesonBase.cxx:729
 AliCDMesonBase.cxx:730
 AliCDMesonBase.cxx:731
 AliCDMesonBase.cxx:732
 AliCDMesonBase.cxx:733
 AliCDMesonBase.cxx:734
 AliCDMesonBase.cxx:735
 AliCDMesonBase.cxx:736
 AliCDMesonBase.cxx:737
 AliCDMesonBase.cxx:738
 AliCDMesonBase.cxx:739
 AliCDMesonBase.cxx:740
 AliCDMesonBase.cxx:741
 AliCDMesonBase.cxx:742
 AliCDMesonBase.cxx:743
 AliCDMesonBase.cxx:744
 AliCDMesonBase.cxx:745
 AliCDMesonBase.cxx:746
 AliCDMesonBase.cxx:747
 AliCDMesonBase.cxx:748
 AliCDMesonBase.cxx:749
 AliCDMesonBase.cxx:750
 AliCDMesonBase.cxx:751
 AliCDMesonBase.cxx:752
 AliCDMesonBase.cxx:753
 AliCDMesonBase.cxx:754
 AliCDMesonBase.cxx:755
 AliCDMesonBase.cxx:756