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.                  *
**************************************************************************/
//
// Example analysis for diffractive studies
//
// Author:
//  Felix Reidt <Felix.Reidt@cern.ch>


#include <TH1.h>
#include <TH2.h>
#include <TList.h>


#include "AliAODInputHandler.h"
#include "AliAODHandler.h"
#include "AliESDInputHandler.h"
#include "AliPIDResponse.h"
#include "AliPhysicsSelection.h"

#include "AliCDMesonBaseStripped.h"
#include "AliCDMesonUtilsStripped.h"
#include "AliCDMesonTracks.h"
#include "AliAnalysisTaskCDex.h"


//------------------------------------------------------------------------------
AliAnalysisTaskCDex::AliAnalysisTaskCDex(const char* name):
	AliAnalysisTaskSE(name)
	, fDoAOD(kFALSE)
	, fMaxVtxDst(0.5) // value to be checked with the vertex study histograms

	, fESDEvent(0x0)
	, fAODEvent(0x0)
	, fPIDResponse(0x0)
	, fTracks(new AliCDMesonTracks())
	, fVtxDst(-1.)
	, fVtxZ(-20)
	, fResidualTracks(0)
	, fResidualTracklets(0)
	, fMCprocessType(0)
	, fMCprocess(-1)

	, fRun(-999)
	, fCurrentGapCondition(0)

	, fHist(0x0)

	, fv0ntrk(0x0)
	, fv0fmdntrk(0x0)
	, fv0fmdspdntrk(0x0)
	, fv0fmdspdtpcntrk(0x0)

	, fhStatsFlow(0x0)
{
	//
	// standard constructor
	//
	// slot in TaskSE must start from 1
	DefineOutput(1, TList::Class());

	// initialize gap information
	for (Int_t iGap = 0; iGap < kMax; ++iGap) {
		fGapInformation[iGap] = 0;
	}
}


//------------------------------------------------------------------------------
AliAnalysisTaskCDex::~AliAnalysisTaskCDex()
{
	//
	// destructor
	//

	if (fHist) {
		fHist->Clear();
		delete fHist;
		fHist = 0x0;
	}

	if (fTracks) {
		delete fTracks;
		fTracks = 0x0;
	}
}


//------------------------------------------------------------------------------
void AliAnalysisTaskCDex::UserCreateOutputObjects()
{
	//
	// createOutputObjects
	//

	//= TList for Histograms =====================================================
	fHist = new TList;
	fHist->SetOwner(); // ensures that the histograms are all deleted on exit!

	//= MULTIPLICITY PER GAP CONDITION =
	fv0ntrk = new TH2D("b00_v0ntrk", ";number of tracks;gap condition",
	                   80, 0., 80., 4, 1., 5.);
	//x: ntrk; y: V0
	fHist->Add(fv0ntrk);

	fv0fmdntrk = new TH2D("b01_v0fmdntrk", ";number of tracks;gap condition",
		                      80, 0., 80., 4, 1., 5.);
	//x: ntrk; y: V0FMD
	fHist->Add(fv0fmdntrk);

	fv0fmdspdntrk =
		new TH2D("b02_v0fmdspdntrk", ";number of tracks;gap condition",
		         80, 0., 80., 4, 1., 5.);
	//x: ntrk; y: V0FMDSPD
	fHist->Add(fv0fmdspdntrk);

	fv0fmdspdtpcntrk =
		new TH2D("b03_v0fmdspdtpcntrk", ";number of tracks;gap condition",
		         80, 0., 80., 4, 1., 5.);
	//x: ntrk; y: V0FMDSPDTPC
	fHist->Add(fv0fmdspdtpcntrk);


	//= STATISTICS FLOW =
	fhStatsFlow = AliCDMesonBaseStripped::GetHistStatsFlow();
	fHist->Add(fhStatsFlow);
}


//------------------------------------------------------------------------------
void AliAnalysisTaskCDex::UserExec(Option_t *)
{
	//
	// executed for every event which passed the physics selection
	//
	// in order to select only correct minimum bias events,
	// SetCollisionCandidates(AliVEvent::kMB) should be used

	fhStatsFlow->Fill(AliCDMesonBaseStripped::kBinTotalInput); // stats flow

	//= INPUT DATA SANITY TESTS ==================================================
	if(!CheckInput()) {
		PostOutputs();
		return;
	}

	fhStatsFlow->Fill(AliCDMesonBaseStripped::kBinGoodInput); // stats flow

	//= EVENT SELECTION ==========================================================
	Bool_t eventIsValid = (fDoAOD) ?
		AliCDMesonUtilsStripped::CutEvent(fAODEvent) :
		AliCDMesonUtilsStripped::CutEvent(fESDEvent);
	if (!eventIsValid) {
		PostOutputs();
		return;
	}

	fhStatsFlow->Fill(AliCDMesonBaseStripped::kBinEventsAfterCuts); // stats flow

	//= PILE UP ==================================================================
	const Bool_t isPileup = (fDoAOD) ?
		fAODEvent->IsPileupFromSPD(2, 0.8, 3., 2., 5.) :
		fESDEvent->IsPileupFromSPD(2, 0.8, 3., 2., 5.);
	// using only 2 instead of three contributors

	if (isPileup) {
		PostOutputs();
		return;
	}

	fhStatsFlow->Fill(AliCDMesonBaseStripped::kBinEventsWithOutPileUp);

	//= GAP ======================================================================
	// determine the complete gap configuration (for all gap-tagging detectors)
	if (!DetermineGap()) {
		PostOutputs();
		return;
	}

	//= VERTEX COINCIDENCE AND POSITION ==========================================
	AnalyzeVtx();
	if (!(abs(fVtxZ) < 4.)) { // vertex from tracks within +/-4cm
		//PostOutputs();
		//return;
	}

	//= TRACK CUTS ===============================================================
	fTracks->ProcessEvent(fAODEvent, fESDEvent, kTRUE);
	// apply cuts (including soft)
	DoMultiplicityStudy(); // fill corresponding histograms

	// is multiplicity within the desired range of  2 to 3?
	Int_t nch = fTracks->GetTracks();
	Int_t ncombined = fTracks->GetCombinedTracks();

	//============================================================================
	//=== USER ANALYSIS CODE =====================================================
	//============================================================================
	for (Int_t iTrack = 0; iTrack < ncombined; ++iTrack) { // including soft
		AliVTrack* trk = fTracks->GetTrack(iTrack);
		trk->GetID(); // prevent warning...
	}
	for (Int_t iTrack = 0; iTrack < nch; ++iTrack) { // excluding soft tracks
		AliVTrack* trk = fTracks->GetTrack(iTrack);
		trk->GetID(); // prevent warning...
	}

	if (fGapInformation[kV0FMDSPDTPC] == AliCDMesonBaseStripped::kBinDG) {
		// event is a full double gap event
	}

	//============================================================================
	PostOutputs();
}


//------------------------------------------------------------------------------
void AliAnalysisTaskCDex::PostOutputs()
{
	//
	// PostData
	//
	// this function is main of use with multiple output containers

	PostData(1, fHist);
}


//------------------------------------------------------------------------------
Bool_t AliAnalysisTaskCDex::CheckInput()
{
	//
	// general protection of the task against malicious input data
	//
	if (const AliESDInputHandler *esdH =
	    dynamic_cast<AliESDInputHandler*>(fInputHandler)){
		fESDEvent = esdH->GetEvent();
	}
	else if (const AliAODInputHandler *aodH =
	         dynamic_cast<AliAODInputHandler*>(fInputHandler)){
		fAODEvent = aodH->GetEvent();
		fDoAOD = kTRUE;
	}
	fPIDResponse = (AliPIDResponse*)fInputHandler->GetPIDResponse();

	if(!fESDEvent && !fAODEvent){
		printf("AliAnalysisTaskex - No valid event\n");
		return kFALSE;
	}

	if(!fPIDResponse){
		printf("AliAnalysisTaskex -  No PIDd\n");
		// PID is fixed to unknown
		//return kFALSE;
	}

	if(fDoAOD && fAODEvent && fabs(fAODEvent->GetMagneticField())<1){
		printf("AliAnalysisTaskex - strange Bfield! %f\n",
		       fAODEvent->GetMagneticField());
		return kFALSE;
	}
	else if((!fDoAOD) && fESDEvent && fabs(fESDEvent->GetMagneticField())<1){
		printf("AliAnalysisTaskex - strange Bfield! %f\n",
		       fESDEvent->GetMagneticField());
		return kFALSE;
	}

	Int_t tmprun = 0;
	if (fDoAOD && fAODEvent) {
		tmprun = fAODEvent->GetRunNumber();
	}
	else if (fESDEvent) {
		tmprun = fESDEvent->GetRunNumber();
	}

	if(fRun!=tmprun){
		fRun = tmprun;
		AliCDMesonUtilsStripped::SPDLoadGeom(fRun);
	}

	return kTRUE;
}


//------------------------------------------------------------------------------
Bool_t AliAnalysisTaskCDex::DetermineGap()
{
	// determines the gap configuration for all gap tagging detectors based on the
	// data set which is available
	//

	if (fDoAOD) {
		AliAODHandler* aodHandler =
			(AliAODHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
		TTree *aodTree = aodHandler->GetTree();
		aodTree->SetBranchAddress("gapCondition", &fCurrentGapCondition);
		aodTree->GetEvent(Entry()); // seems to be needed! (loads current event)
		if (!fCurrentGapCondition) {
			fCurrentGapCondition = 0xfffe;
			puts("AliAnalysisTaskCDex - ");
			puts("error while gap condition determination using AODs\n");
			return kFALSE;
		}
	}
	else {
		// gap determination from detector information
		fCurrentGapCondition = AliCDMesonUtilsStripped::GetGapConfig(fESDEvent);

		// gap determination from preprocessed detector information
		/*
		AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
		TTree* esdTree = am->GetInputEventHandler()->GetTree(); // get ESD tree
		if (esdTree) {
			esdTree->SetBranchAddress("gapCondition", &fCurrentGapCondition);
			esdTree->GetEvent(Entry()); // seems to be needed! (loads current event)
		}
		*/

		if (!fCurrentGapCondition) {
			fCurrentGapCondition = 0xfffe;
			puts("AliAnalysisTaskCDex - ");
			puts("error while gap condition determination using ESDs\n");
			return kFALSE;
		}
	}

	// disentagle the contributions to the gap conditions of different "tightness"
	fGapInformation[kV0] =
		AliCDMesonBaseStripped::GetGapBin("V0", fCurrentGapCondition);
	fGapInformation[kV0FMD] =
		AliCDMesonBaseStripped::GetGapBin("V0FMD", fCurrentGapCondition);
	fGapInformation[kV0FMDSPD] =
		AliCDMesonBaseStripped::GetGapBin("V0FMDSPD", fCurrentGapCondition);
	fGapInformation[kV0FMDSPDTPC] =
		AliCDMesonBaseStripped::GetGapBin("V0FMDSPDTPC", fCurrentGapCondition);
	fGapInformation[kFMD] =
		AliCDMesonBaseStripped::GetGapBin("FMD",fCurrentGapCondition);
	fGapInformation[kSPD] =
		AliCDMesonBaseStripped::GetGapBin("SPD",fCurrentGapCondition);
	fGapInformation[kTPC] =
		AliCDMesonBaseStripped::GetGapBin("TPC",fCurrentGapCondition);

	return kTRUE;
}


//------------------------------------------------------------------------------
void AliAnalysisTaskCDex::DoMultiplicityStudy()
{
	// stores the multiplicity distributions for different gap conditions and
	// adds some information to the statsFlow histogram
	//

	// retrieve values from the track object
	Int_t ntrk0 = fTracks->GetTracksBeforeCuts(); // number of tracks before cuts
	//Int_t nch = fTracks->GetTracks(); // number of good ITS-TPC primaries
	Int_t ncombined = fTracks->GetCombinedTracks(); // number ITSTPC and ITS only
	Int_t nITSpureSA = fTracks->GetITSpureSACount(); // number ITS standalone

	// determine the residual tracks / tracklets
	fResidualTracks = ntrk0 - ncombined - nITSpureSA;
	fResidualTracklets = fTracks->GetRemainingTrackletsCentralBarrel();

	// multiplicity distributions for different gaps
	fv0ntrk->Fill(ncombined, fGapInformation[kV0]);
	fv0fmdntrk->Fill(ncombined, fGapInformation[kV0FMD]);
	fv0fmdspdntrk->Fill(ncombined, fGapInformation[kV0FMDSPD]);
	fv0fmdspdtpcntrk->Fill(ncombined, fGapInformation[kV0FMDSPDTPC]);

	if (fGapInformation[kV0] == AliCDMesonBaseStripped::kBinDG) {
		fhStatsFlow->Fill(AliCDMesonBaseStripped::kBinv0Gap);
	}
	if (fGapInformation[kV0FMD] == AliCDMesonBaseStripped::kBinDG) {
		fhStatsFlow->Fill(AliCDMesonBaseStripped::kBinv0fmdGap);
	}
	if (fGapInformation[kV0FMDSPD] == AliCDMesonBaseStripped::kBinDG) {
		fhStatsFlow->Fill(AliCDMesonBaseStripped::kBinv0fmdspdGap);
	}
	if (fGapInformation[kV0FMDSPDTPC] == AliCDMesonBaseStripped::kBinDG) {
		fhStatsFlow->Fill(AliCDMesonBaseStripped::kBinv0fmdspdtpcGap);
	}

	// event cleanliness
	if (fResidualTracks == 0) {
		fhStatsFlow->Fill(AliCDMesonBaseStripped::kBinResidualTracks);
	}
	if (fResidualTracklets == 0) {
		fhStatsFlow->Fill(AliCDMesonBaseStripped::kBinResidualTracklets);
	}
}


//--------------------------------------------------------------------------
void AliAnalysisTaskCDex::AnalyzeVtx()
{
	// calculates the distance between the vertex obtain from tracks and the
	// vertex obtain from spd tracklets
	// stores the z position of the primary vertex from tracks

	fVtxDst = 0.; // reset distance

	// retrieve the pointers of the current primary vertices
	AliVVertex* trackVtx = (fDoAOD) ?
		(AliVVertex*)fAODEvent->GetPrimaryVertex() :
		(AliVVertex*)fESDEvent->GetPrimaryVertexTracks();
	AliVVertex* spdVtx = (fDoAOD) ?
		(AliVVertex*)fAODEvent->GetPrimaryVertexSPD() :
		(AliVVertex*)fESDEvent->GetPrimaryVertexSPD();

	fVtxZ = trackVtx->GetZ(); // store the vertex z position

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