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

////////////////////////////////////////////////////////////////////////////
//  Class to retrieve the branch of the dielectron candidates stored in   //
//  filtered AODs file (AliAOD.Dielectron.root). It is possible to        //
//  apply tighter cuts to candidates stored in the branch and do the      //
//  matching with MC truth.                                               //
////////////////////////////////////////////////////////////////////////////

#include "TChain.h"
#include "TNtuple.h"
#include "TList.h"
#include "TH1F.h"
#include "TH2F.h"
#include "TDatabasePDG.h"
#include "TF1.h"
#include "AliAnalysisManager.h"
#include "AliAODHandler.h"
#include "AliAODEvent.h"
#include "AliAODVertex.h"
#include "AliAODTrack.h"
#include "AliAODMCParticle.h"
#include "AliAnalysisTaskDielectronReadAODBranch.h"
#include "AliDielectronPair.h"
#include "AliDielectronMC.h"

ClassImp(AliAnalysisTaskDielectronReadAODBranch)
	//________________________________________________________________________
	AliAnalysisTaskDielectronReadAODBranch::AliAnalysisTaskDielectronReadAODBranch():
		AliAnalysisTaskSE(),
		fOutput(0),
                fNtupleJPSI(0),
                fNentries(0),
		fInvMass(0),
		fInvMassNoCuts(0),
                fpsproperSignal(0),
		fpsproperSidebands(0),            
		fpsproperAll(0),                  
		fpsproperUnder(0),
                fpsproperUpper(0),
                fLxyVsPtleg1(0),
		fLxyVsPtleg2(0),
		fLxyVsPt(0),
		fMeeVsPt(0),
		fMeeVsLxy(0),
		fprimvtxZ(0),  
		fsecvtxZ(0),  
		fprimvtxX(0),  
		fsecvtxX(0),  
		fprimvtxY(0),  
		fsecvtxY(0),  
		fPt(0),
		fPtLeg1(0),
		fPtLeg2(0),
		fdEdxP(0),
		fHasMC(0),
		fobj(0),
		fobjMC(0),
                fPtCut(1.),
                fSpdFirstRequired(kFALSE),
                fClsTPC(90),
                fPairType(1),
                fPtJpsi(1.3),
                fInvMassSignalLimits(0),
                fInvMassSideBandsLimits(0),
		fSecondary(0)
{
	// Default constructor
}

//________________________________________________________________________
AliAnalysisTaskDielectronReadAODBranch::AliAnalysisTaskDielectronReadAODBranch(const char *name):
	AliAnalysisTaskSE(name),
	fOutput(0),
        fNtupleJPSI(0),
        fNentries(0),
	fInvMass(0),
        fInvMassNoCuts(0),
        fpsproperSignal(0),
	fpsproperSidebands(0),            
	fpsproperAll(0),                  
	fpsproperUnder(0),
        fpsproperUpper(0),
        fLxyVsPtleg1(0),
	fLxyVsPtleg2(0),
	fLxyVsPt(0),
	fMeeVsPt(0),
	fMeeVsLxy(0),
	fprimvtxZ(0), 
	fsecvtxZ(0),  
	fprimvtxX(0), 
	fsecvtxX(0),  
	fprimvtxY(0), 
	fsecvtxY(0),  
	fPt(0),
	fPtLeg1(0),
	fPtLeg2(0),
	fdEdxP(0),
        fHasMC(0),
	fobj(0),
	fobjMC(0),
        fPtCut(1.),
        fSpdFirstRequired(kFALSE),
        fClsTPC(90),
        fPairType(1),
        fPtJpsi(1.3),
        fInvMassSignalLimits(0),
        fInvMassSideBandsLimits(0), 
	fSecondary(0)
{
	// Default constructor
	DefineInput(0,TChain::Class());
	DefineOutput(1,TList::Class());  //My private output

        fInvMassSignalLimits = new Double_t[2]; 
        fInvMassSignalLimits[0] = 0.;  fInvMassSignalLimits[1] = 0.; 
        fInvMassSideBandsLimits = new Double_t[2]; 
        fInvMassSideBandsLimits[0] = 0.;  fInvMassSideBandsLimits[1] = 0.;
}

//________________________________________________________________________
AliAnalysisTaskDielectronReadAODBranch::~AliAnalysisTaskDielectronReadAODBranch()
{
	if(fOutput)   delete fOutput;
	if(fobj)      delete fobj;
	if(fobjMC)    delete fobjMC;
}

//________________________________________________________________________
void AliAnalysisTaskDielectronReadAODBranch::Init()
{
	// Initialization
	if(fDebug > 1) printf("AnalysisTaskReadAOD::Init() \n");
	return;
}

//________________________________________________________________________
void AliAnalysisTaskDielectronReadAODBranch::UserCreateOutputObjects()
{
	//
        // Create the output container
	//
	if(fDebug > 1) printf("AnalysisTaskReadAOD::UserCreateOutputObjects() \n");
	fOutput = new TList();
	fOutput->SetOwner();
	//// Histogram booking
        
        // invariant mass
        fInvMass = new TH1F("fInvMass","fInvMass",300,2.0,2.0+300*.04); // step 40MeV
        fInvMassNoCuts = new TH1F("fInvMass_no_cuts","fInvMass_no_cuts",125,0,125*0.04); //step 40MeV
        fNentries = new TH1F("numberOfevent","numbOfEvent",1,-0.5,0.5);

        //pseudoproper 
	fpsproperSignal = new TH1F("psproper_decay_length",Form("psproper_decay_length_distrib(AODcuts+#clustTPC>%d, pT(leg)>%fGeV, pT(J/#psi)>%fGeV/c, %f < M < %f);X [#mu m];Entries/40#mu m",fClsTPC,fPtCut,fPtJpsi,fInvMassSignalLimits[0],fInvMassSignalLimits[1]),150,-3000.,3000.);
	fpsproperSidebands = new TH1F("psproper_decay_length_sidebands",Form("psproper_decay_length_distrib_sidebands(AODcuts+#clustTPC>%d, pT(e+e-)>%f GeV,pT(J/#psi)>%f GeV/c,M> %f && M < %f );  X [#mu m]; Entries/40#mu m",fClsTPC,fPtCut,fPtJpsi,fInvMassSideBandsLimits[1],fInvMassSideBandsLimits[0]),150,-3000.,3000.);
	fpsproperAll = new TH1F("psproper_decay_length_all",Form("psproper_decay_length_distrib_all(AODcuts+#clustTPC>%d, pT(e+e-)>%f GeV,pT(J/#psi)>%f GeV/c);X [#mu m];Entries/15#mu m",fClsTPC,fPtCut,fPtJpsi),400,-3000.,3000.);
	fpsproperUnder = new TH1F("psproper_decay_length_under",Form("psproper_decay_length_distrib_under(AODcuts+#clustTPC>%d,pT(e+e-)>%f GeV,pT(J/#psi)>%f GeV/c);X [#mu m];Entries/15#mu m",fClsTPC,fPtCut,fPtJpsi),400,-3000.,3000.); 
        fpsproperUpper = new TH1F("psproper_decay_length_upper",Form("psproper_decay_length_distrib_upper(AODcuts+#clustTPC>%d,pT(e+e-)>%f GeV,pT(J/#psi)>%f GeV/c);X [#mu m];Entries/15#mu m",fClsTPC,fPtCut,fPtJpsi),400,-3000.,3000.);  
        //
	fLxyVsPtleg1 = new TH2F("Lxy_vs_Pt_leg1",Form("Lxy_vs_Pt_leg1_distrib(AODcuts+#clustTPC>%d,pT(e+e-)>%f GeV,pT(J/#psi)>%f GeV/c,%f<M<%f);p_{T}[GeV/c]; X",fClsTPC,fPtCut,fPtJpsi,fInvMassSignalLimits[0],fInvMassSignalLimits[1]), 700, 0., 7.,400, -3000.,3000.);
	fLxyVsPtleg2 = new TH2F("Lxy_vs_Pt_leg2",Form("Lxy_vs_Pt_leg2_distrib(AODcuts+#clustTPC>%d,pT(e+e-)>%f GeV,pT(J/#psi)>%f GeV/c,%f<M<%f);p_{T}[GeV/c]; X",fClsTPC,fPtCut,fPtJpsi,fInvMassSignalLimits[0],fInvMassSignalLimits[1]), 700, 0., 7.,400, -3000.,3000.);
	fLxyVsPt = new TH2F("Lxy_vs_Pt_jpsi",Form("Lxy_vs_Pt_jpsi_distrib(AODcuts+#clustTPC>%d,pT(e+e-)>%f GeV,pT(J/#psi)>%f GeV/c,%f<M<%f); p_{T}[GeV/c]; X",fClsTPC,fPtCut,fPtJpsi,fInvMassSignalLimits[0],fInvMassSignalLimits[1]), 700, 0., 7.,400, -3000.,3000.);
	fMeeVsPt = new TH2F("Mee_vs_Pt_jpsi",Form("Mee_vs_Pt_jpsi_distrib(AODcuts+#clustTPC>%d,pT(e+e-)>%f GeV,pT(J/#psi)>%f GeV/c,%f<M<%f); p_{T}[GeV/c]; M_{ee}",fClsTPC,fPtCut,fPtJpsi,fInvMassSignalLimits[0],fInvMassSignalLimits[1]), 700, 0., 7.,200, 1.99,4.1);
	fMeeVsLxy = new TH2F("Mee_vs_Lxy_jpsi",Form("Mee_vs_Lxy_jpsi_distrib(AODcuts+#clustTPC>%d,pT(e+e-)>%f GeV),pT(J/#psi)>%f GeV/c; X; M_{ee}",fClsTPC,fPtCut,fPtJpsi), 400, -3000, 3000.,200, 1.99,4.1);

	// QA plots
	fprimvtxZ = new TH1F("prim_vtx_Z",Form("prim_vtx_Z_distrib(AODcuts + #clustTPC>%d, pT(e+e-)>%f GeV, pT(J/#psi)>%f);  Z[cm]; Entries/20 mm",fClsTPC,fPtCut,fPtJpsi),1000,-10.,10.);
	fsecvtxZ = new TH1F("sec_vtx_Z",Form("sec_vtx_Z_distrib(AODcuts + #clustTPC>%d, pT(e+e-)>%f GeV, pT(J/#psi)>%f);  Z[cm]; Entries/20 mm",fClsTPC,fPtCut,fPtJpsi),1000,-10.,10.);
	fprimvtxX = new TH1F("prim_vtx_X",Form("prim_vtx_X_distrib(AODcuts + #clustTPC>%d, pT(e+e-)>%f GeV,pT(J/#psi)>%f);  X[cm]; Entries/mm",fClsTPC,fPtCut,fPtJpsi),1000,-0.5,0.5);
	fsecvtxX = new TH1F("sec_vtx_X",Form("sec_vtx_X_distrib(AODcuts + #clustTPC>%d, pT(e+e-)>%f GeV,pT(J/#psi)>%f);  X[cm]; Entries/20 mm",fClsTPC,fPtCut,fPtJpsi),100,-1.,1.);
	fprimvtxY = new TH1F("prim_vtx_Y",Form("prim_vtx_Y_distrib(AODcuts + #clustTPC>%d, pT(e+e-)>%f GeV,pT(J/#psi)>%f);  Y[cm]; Entries/mm",fClsTPC,fPtCut,fPtJpsi),1000,-0.5,0.5);
	fsecvtxY = new TH1F("sec_vtx_Y",Form("sec_vtx_Y_distrib(AODcuts + #clustTPC>%d, pT(e+e-)>%f GeV,pT(J/#psi)>%f);  Y[cm]; Entries/20 mm",fClsTPC,fPtCut,fPtJpsi),100,-1.,1.);
	//
	fPt = new TH1F("Pt(J/psi)",Form("Pt_Jpsi_distrib(AODcuts + #clustTPC>%d, pT(e+e-)>%f GeV, pT(J/#psi)>%f); p_{T}(J/#psi)[GeV/c]; Entries/25 MeV",fClsTPC,fPtCut,fPtJpsi),400,0.,10.);
	fPtLeg1 = new TH1F("Pt_leg1",Form("Pt_leg1_distrib(AODcuts + #clustTPC>%d, pT(e+e-) > %f GeV, pT(J/#psi)>%f);  p_{T}[GeV/c]; Entries/25 MeV",fClsTPC,fPtCut,fPtJpsi),400,0.,10.);
	fPtLeg2 = new TH1F("Pt_leg2",Form("Pt_leg2_distrib(AODcuts + #clustTPC>%d, pT(e+e-) > %f GeV, pT(J/#psi)>%f);  p_{T}[GeV/c]; Entries/25 MeV",fClsTPC,fPtCut,fPtJpsi),400,0.,10.);
	//dE/dx plots
	fdEdxP = new TH2F("dE/dx_vs_Ptpc",Form("dE/dx_vs_Ptpc(AODcuts + #clustTPC>%d, pT(e+e-) > %f GeV, pT(J/#psi)>%f)",fClsTPC,fPtCut,fPtJpsi),400,0.2,20.,200,0.,200.);
        
        //J/psi n-tuple (X and M values)
        fNtupleJPSI = new TNtuple("fNtupleJPSI","J/#psi pseudo-proper decay time & invariant mass","Xdecaytime:Mass");
 
	// add histograms to list
	fOutput->Add(fNentries);
	fOutput->Add(fInvMass);
        fOutput->Add(fInvMassNoCuts); 
	fOutput->Add(fpsproperSignal);
	fOutput->Add(fpsproperSidebands);
	fOutput->Add(fpsproperAll);
	fOutput->Add(fpsproperUnder);
        fOutput->Add(fpsproperUpper);
        fOutput->Add(fLxyVsPtleg1);
	fOutput->Add(fLxyVsPtleg2);
	fOutput->Add(fLxyVsPt);
	fOutput->Add(fMeeVsPt);
	fOutput->Add(fMeeVsLxy);
	fOutput->Add(fprimvtxZ);
	fOutput->Add(fsecvtxZ);
	fOutput->Add(fprimvtxX);
	fOutput->Add(fsecvtxX);
	fOutput->Add(fprimvtxY);
	fOutput->Add(fsecvtxY);
	fOutput->Add(fPt);
	fOutput->Add(fPtLeg1);
	fOutput->Add(fPtLeg2);
        fOutput->Add(fNtupleJPSI);
        fOutput->Add(fdEdxP);
	return;
}

//________________________________________________________________________
void AliAnalysisTaskDielectronReadAODBranch::UserExec(Option_t */*option*/)
{
	// Execute analysis for current event:
	AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
	if (!aod) return;

	Double_t vtxPrim[3] = {0.,0.,0.};

	AliAODVertex* primvtx = aod->GetPrimaryVertex();
	vtxPrim[0] = primvtx->GetX();
	vtxPrim[1] = primvtx->GetY();
	vtxPrim[2] = primvtx->GetZ();

	AliAODHandler* aodHandler = (AliAODHandler*)((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());

	TTree *aodTree = aodHandler->GetTree();
	if(!fobj) aodTree->SetBranchAddress("dielectrons",&fobj);

	if(fHasMC){ aodTree->SetBranchAddress("mcparticles",&fobjMC);
	if(!fobjMC) printf("AliAnalysisTaskDielectronReadAODBranch::UserExec: MC particles branch not found!\n"); }

	fNentries->Fill(0);
	aodTree->GetEvent(Entry());

	// loop over candidates
	if(fobj) {
		TObjArray *objArr = (TObjArray*)fobj->UncheckedAt(fPairType);
		for(int j=0;j<objArr->GetEntriesFast();j++)
		{
			AliDielectronPair *pairObj = (AliDielectronPair*)objArr->UncheckedAt(j);
			fInvMassNoCuts->Fill(pairObj->M()); 
                        Double_t vtxSec[3] = {0.,0.,0.};
			fprimvtxX->Fill(vtxPrim[0]);
			fprimvtxY->Fill(vtxPrim[1]);
			fprimvtxZ->Fill(vtxPrim[2]);
			pairObj->XvYvZv(vtxSec);
			fsecvtxX->Fill(vtxSec[0]);
			fsecvtxY->Fill(vtxSec[1]);
			fsecvtxZ->Fill(vtxSec[2]);

			Double_t lxy = ((vtxSec[0]-vtxPrim[0])*(pairObj->Px()) + (vtxSec[1]-vtxPrim[1])*(pairObj->Py()))/pairObj->Pt();
			Double_t psProperDecayLength = lxy*(TDatabasePDG::Instance()->GetParticle(443)->Mass())/pairObj->Pt();

			AliAODTrack *trk = (AliAODTrack*)pairObj->GetFirstDaughterP();
			AliAODTrack *trk1 = (AliAODTrack*)pairObj->GetSecondDaughterP();
			if(!trk || !trk1) {printf("ERROR: daughter tracks not available\n"); continue;}

			//check in case of MC analysis if candidate is a true J/psi->ee
                          if(fHasMC && ((AliDielectronMC::Instance()->IsJpsiPrimary(pairObj))!=fSecondary)) continue;
			   AliAODPid *pid  = trk->GetDetPid();
                                AliAODPid *pid1 = trk1->GetDetPid();
                                if(!pid || !pid1){
                                        if(fDebug>1) printf("No AliAODPid found\n");
                                        continue;
                                }
                                 // ptLeg cut
                                if((trk->Pt()<fPtCut) || (trk1->Pt()<fPtCut)) continue;
                           
                                // pt jpsi cut
                                if((pairObj->Pt())<fPtJpsi) continue; 
 
                              //spd first required
                              if(fSpdFirstRequired)
                              {
                               if((!trk->HasPointOnITSLayer(0)) || (!trk1->HasPointOnITSLayer(0))) continue;
                              }
                           //
                          if((trk->GetTPCNcls()) <= fClsTPC || (trk1->GetTPCNcls()) <= fClsTPC) continue;
                         	if(trk->Charge()==-1){
					fPtLeg1->Fill(trk->Pt());
				} else {fPtLeg2->Fill(trk->Pt());}
				if(trk1->Charge()==-1){
					fPtLeg1->Fill(trk1->Pt());
				} else {fPtLeg2->Fill(trk1->Pt());}
				//Fill dE/dx related plots (before PID cuts)
				fdEdxP->Fill(pid->GetTPCmomentum(),pid->GetTPCsignal());
				fdEdxP->Fill(pid1->GetTPCmomentum(),pid1->GetTPCsignal());
					fInvMass->Fill(pairObj->M());
				        fPt->Fill(pairObj->Pt());
                                 	fMeeVsLxy->Fill(10000*psProperDecayLength,pairObj->M());
					fMeeVsPt->Fill(pairObj->Pt(),pairObj->M());
					fpsproperAll->Fill(10000*psProperDecayLength);
                                           
                                           //psproper in the signal region 
					   if((pairObj->M())<fInvMassSignalLimits[1] && (pairObj->M())>fInvMassSignalLimits[0]){
                                         	fpsproperSignal->Fill(10000*psProperDecayLength);
						fLxyVsPt->Fill(pairObj->Pt(),10000*psProperDecayLength);  //jpsi 
						fLxyVsPtleg1->Fill(trk->Pt(),10000*psProperDecayLength);  //leg1 (warning: mixture of pos and neg tracks)
						fLxyVsPtleg2->Fill(trk1->Pt(),10000*psProperDecayLength); //leg2 (warning: mixture of pos and neg tracks)
					        fNtupleJPSI->Fill(10000*psProperDecayLength,pairObj->M()); // fill the N-tuple (imput of the minimization algorithm)
                                                 } 

                                        // psproper in the sidebands 
					if((pairObj->M())> fInvMassSideBandsLimits[1] || (pairObj->M())< fInvMassSideBandsLimits[0])
                                        fpsproperSidebands->Fill(10000*psProperDecayLength);
                                          
                                        // psproper in the lower sideband
				        if(pairObj->M()< fInvMassSideBandsLimits[0]) fpsproperUnder->Fill(10000*psProperDecayLength);
                                          
                                        // psproper in the upper sideband
                                        if(pairObj->M()> fInvMassSideBandsLimits[1]) fpsproperUpper->Fill(10000*psProperDecayLength);
                        } // end loop over candidates
		}// end loop over pair types
        // Post the data
	PostData(1,fOutput);
	return;
} 

//________________________________________________________________________
void AliAnalysisTaskDielectronReadAODBranch::Terminate(Option_t */*option*/)
{
	if(fDebug > 1) printf("AliAnalysisTaskDielectronReadAODBranch::Terminate() \n");
	return;
}

 AliAnalysisTaskDielectronReadAODBranch.cxx:1
 AliAnalysisTaskDielectronReadAODBranch.cxx:2
 AliAnalysisTaskDielectronReadAODBranch.cxx:3
 AliAnalysisTaskDielectronReadAODBranch.cxx:4
 AliAnalysisTaskDielectronReadAODBranch.cxx:5
 AliAnalysisTaskDielectronReadAODBranch.cxx:6
 AliAnalysisTaskDielectronReadAODBranch.cxx:7
 AliAnalysisTaskDielectronReadAODBranch.cxx:8
 AliAnalysisTaskDielectronReadAODBranch.cxx:9
 AliAnalysisTaskDielectronReadAODBranch.cxx:10
 AliAnalysisTaskDielectronReadAODBranch.cxx:11
 AliAnalysisTaskDielectronReadAODBranch.cxx:12
 AliAnalysisTaskDielectronReadAODBranch.cxx:13
 AliAnalysisTaskDielectronReadAODBranch.cxx:14
 AliAnalysisTaskDielectronReadAODBranch.cxx:15
 AliAnalysisTaskDielectronReadAODBranch.cxx:16
 AliAnalysisTaskDielectronReadAODBranch.cxx:17
 AliAnalysisTaskDielectronReadAODBranch.cxx:18
 AliAnalysisTaskDielectronReadAODBranch.cxx:19
 AliAnalysisTaskDielectronReadAODBranch.cxx:20
 AliAnalysisTaskDielectronReadAODBranch.cxx:21
 AliAnalysisTaskDielectronReadAODBranch.cxx:22
 AliAnalysisTaskDielectronReadAODBranch.cxx:23
 AliAnalysisTaskDielectronReadAODBranch.cxx:24
 AliAnalysisTaskDielectronReadAODBranch.cxx:25
 AliAnalysisTaskDielectronReadAODBranch.cxx:26
 AliAnalysisTaskDielectronReadAODBranch.cxx:27
 AliAnalysisTaskDielectronReadAODBranch.cxx:28
 AliAnalysisTaskDielectronReadAODBranch.cxx:29
 AliAnalysisTaskDielectronReadAODBranch.cxx:30
 AliAnalysisTaskDielectronReadAODBranch.cxx:31
 AliAnalysisTaskDielectronReadAODBranch.cxx:32
 AliAnalysisTaskDielectronReadAODBranch.cxx:33
 AliAnalysisTaskDielectronReadAODBranch.cxx:34
 AliAnalysisTaskDielectronReadAODBranch.cxx:35
 AliAnalysisTaskDielectronReadAODBranch.cxx:36
 AliAnalysisTaskDielectronReadAODBranch.cxx:37
 AliAnalysisTaskDielectronReadAODBranch.cxx:38
 AliAnalysisTaskDielectronReadAODBranch.cxx:39
 AliAnalysisTaskDielectronReadAODBranch.cxx:40
 AliAnalysisTaskDielectronReadAODBranch.cxx:41
 AliAnalysisTaskDielectronReadAODBranch.cxx:42
 AliAnalysisTaskDielectronReadAODBranch.cxx:43
 AliAnalysisTaskDielectronReadAODBranch.cxx:44
 AliAnalysisTaskDielectronReadAODBranch.cxx:45
 AliAnalysisTaskDielectronReadAODBranch.cxx:46
 AliAnalysisTaskDielectronReadAODBranch.cxx:47
 AliAnalysisTaskDielectronReadAODBranch.cxx:48
 AliAnalysisTaskDielectronReadAODBranch.cxx:49
 AliAnalysisTaskDielectronReadAODBranch.cxx:50
 AliAnalysisTaskDielectronReadAODBranch.cxx:51
 AliAnalysisTaskDielectronReadAODBranch.cxx:52
 AliAnalysisTaskDielectronReadAODBranch.cxx:53
 AliAnalysisTaskDielectronReadAODBranch.cxx:54
 AliAnalysisTaskDielectronReadAODBranch.cxx:55
 AliAnalysisTaskDielectronReadAODBranch.cxx:56
 AliAnalysisTaskDielectronReadAODBranch.cxx:57
 AliAnalysisTaskDielectronReadAODBranch.cxx:58
 AliAnalysisTaskDielectronReadAODBranch.cxx:59
 AliAnalysisTaskDielectronReadAODBranch.cxx:60
 AliAnalysisTaskDielectronReadAODBranch.cxx:61
 AliAnalysisTaskDielectronReadAODBranch.cxx:62
 AliAnalysisTaskDielectronReadAODBranch.cxx:63
 AliAnalysisTaskDielectronReadAODBranch.cxx:64
 AliAnalysisTaskDielectronReadAODBranch.cxx:65
 AliAnalysisTaskDielectronReadAODBranch.cxx:66
 AliAnalysisTaskDielectronReadAODBranch.cxx:67
 AliAnalysisTaskDielectronReadAODBranch.cxx:68
 AliAnalysisTaskDielectronReadAODBranch.cxx:69
 AliAnalysisTaskDielectronReadAODBranch.cxx:70
 AliAnalysisTaskDielectronReadAODBranch.cxx:71
 AliAnalysisTaskDielectronReadAODBranch.cxx:72
 AliAnalysisTaskDielectronReadAODBranch.cxx:73
 AliAnalysisTaskDielectronReadAODBranch.cxx:74
 AliAnalysisTaskDielectronReadAODBranch.cxx:75
 AliAnalysisTaskDielectronReadAODBranch.cxx:76
 AliAnalysisTaskDielectronReadAODBranch.cxx:77
 AliAnalysisTaskDielectronReadAODBranch.cxx:78
 AliAnalysisTaskDielectronReadAODBranch.cxx:79
 AliAnalysisTaskDielectronReadAODBranch.cxx:80
 AliAnalysisTaskDielectronReadAODBranch.cxx:81
 AliAnalysisTaskDielectronReadAODBranch.cxx:82
 AliAnalysisTaskDielectronReadAODBranch.cxx:83
 AliAnalysisTaskDielectronReadAODBranch.cxx:84
 AliAnalysisTaskDielectronReadAODBranch.cxx:85
 AliAnalysisTaskDielectronReadAODBranch.cxx:86
 AliAnalysisTaskDielectronReadAODBranch.cxx:87
 AliAnalysisTaskDielectronReadAODBranch.cxx:88
 AliAnalysisTaskDielectronReadAODBranch.cxx:89
 AliAnalysisTaskDielectronReadAODBranch.cxx:90
 AliAnalysisTaskDielectronReadAODBranch.cxx:91
 AliAnalysisTaskDielectronReadAODBranch.cxx:92
 AliAnalysisTaskDielectronReadAODBranch.cxx:93
 AliAnalysisTaskDielectronReadAODBranch.cxx:94
 AliAnalysisTaskDielectronReadAODBranch.cxx:95
 AliAnalysisTaskDielectronReadAODBranch.cxx:96
 AliAnalysisTaskDielectronReadAODBranch.cxx:97
 AliAnalysisTaskDielectronReadAODBranch.cxx:98
 AliAnalysisTaskDielectronReadAODBranch.cxx:99
 AliAnalysisTaskDielectronReadAODBranch.cxx:100
 AliAnalysisTaskDielectronReadAODBranch.cxx:101
 AliAnalysisTaskDielectronReadAODBranch.cxx:102
 AliAnalysisTaskDielectronReadAODBranch.cxx:103
 AliAnalysisTaskDielectronReadAODBranch.cxx:104
 AliAnalysisTaskDielectronReadAODBranch.cxx:105
 AliAnalysisTaskDielectronReadAODBranch.cxx:106
 AliAnalysisTaskDielectronReadAODBranch.cxx:107
 AliAnalysisTaskDielectronReadAODBranch.cxx:108
 AliAnalysisTaskDielectronReadAODBranch.cxx:109
 AliAnalysisTaskDielectronReadAODBranch.cxx:110
 AliAnalysisTaskDielectronReadAODBranch.cxx:111
 AliAnalysisTaskDielectronReadAODBranch.cxx:112
 AliAnalysisTaskDielectronReadAODBranch.cxx:113
 AliAnalysisTaskDielectronReadAODBranch.cxx:114
 AliAnalysisTaskDielectronReadAODBranch.cxx:115
 AliAnalysisTaskDielectronReadAODBranch.cxx:116
 AliAnalysisTaskDielectronReadAODBranch.cxx:117
 AliAnalysisTaskDielectronReadAODBranch.cxx:118
 AliAnalysisTaskDielectronReadAODBranch.cxx:119
 AliAnalysisTaskDielectronReadAODBranch.cxx:120
 AliAnalysisTaskDielectronReadAODBranch.cxx:121
 AliAnalysisTaskDielectronReadAODBranch.cxx:122
 AliAnalysisTaskDielectronReadAODBranch.cxx:123
 AliAnalysisTaskDielectronReadAODBranch.cxx:124
 AliAnalysisTaskDielectronReadAODBranch.cxx:125
 AliAnalysisTaskDielectronReadAODBranch.cxx:126
 AliAnalysisTaskDielectronReadAODBranch.cxx:127
 AliAnalysisTaskDielectronReadAODBranch.cxx:128
 AliAnalysisTaskDielectronReadAODBranch.cxx:129
 AliAnalysisTaskDielectronReadAODBranch.cxx:130
 AliAnalysisTaskDielectronReadAODBranch.cxx:131
 AliAnalysisTaskDielectronReadAODBranch.cxx:132
 AliAnalysisTaskDielectronReadAODBranch.cxx:133
 AliAnalysisTaskDielectronReadAODBranch.cxx:134
 AliAnalysisTaskDielectronReadAODBranch.cxx:135
 AliAnalysisTaskDielectronReadAODBranch.cxx:136
 AliAnalysisTaskDielectronReadAODBranch.cxx:137
 AliAnalysisTaskDielectronReadAODBranch.cxx:138
 AliAnalysisTaskDielectronReadAODBranch.cxx:139
 AliAnalysisTaskDielectronReadAODBranch.cxx:140
 AliAnalysisTaskDielectronReadAODBranch.cxx:141
 AliAnalysisTaskDielectronReadAODBranch.cxx:142
 AliAnalysisTaskDielectronReadAODBranch.cxx:143
 AliAnalysisTaskDielectronReadAODBranch.cxx:144
 AliAnalysisTaskDielectronReadAODBranch.cxx:145
 AliAnalysisTaskDielectronReadAODBranch.cxx:146
 AliAnalysisTaskDielectronReadAODBranch.cxx:147
 AliAnalysisTaskDielectronReadAODBranch.cxx:148
 AliAnalysisTaskDielectronReadAODBranch.cxx:149
 AliAnalysisTaskDielectronReadAODBranch.cxx:150
 AliAnalysisTaskDielectronReadAODBranch.cxx:151
 AliAnalysisTaskDielectronReadAODBranch.cxx:152
 AliAnalysisTaskDielectronReadAODBranch.cxx:153
 AliAnalysisTaskDielectronReadAODBranch.cxx:154
 AliAnalysisTaskDielectronReadAODBranch.cxx:155
 AliAnalysisTaskDielectronReadAODBranch.cxx:156
 AliAnalysisTaskDielectronReadAODBranch.cxx:157
 AliAnalysisTaskDielectronReadAODBranch.cxx:158
 AliAnalysisTaskDielectronReadAODBranch.cxx:159
 AliAnalysisTaskDielectronReadAODBranch.cxx:160
 AliAnalysisTaskDielectronReadAODBranch.cxx:161
 AliAnalysisTaskDielectronReadAODBranch.cxx:162
 AliAnalysisTaskDielectronReadAODBranch.cxx:163
 AliAnalysisTaskDielectronReadAODBranch.cxx:164
 AliAnalysisTaskDielectronReadAODBranch.cxx:165
 AliAnalysisTaskDielectronReadAODBranch.cxx:166
 AliAnalysisTaskDielectronReadAODBranch.cxx:167
 AliAnalysisTaskDielectronReadAODBranch.cxx:168
 AliAnalysisTaskDielectronReadAODBranch.cxx:169
 AliAnalysisTaskDielectronReadAODBranch.cxx:170
 AliAnalysisTaskDielectronReadAODBranch.cxx:171
 AliAnalysisTaskDielectronReadAODBranch.cxx:172
 AliAnalysisTaskDielectronReadAODBranch.cxx:173
 AliAnalysisTaskDielectronReadAODBranch.cxx:174
 AliAnalysisTaskDielectronReadAODBranch.cxx:175
 AliAnalysisTaskDielectronReadAODBranch.cxx:176
 AliAnalysisTaskDielectronReadAODBranch.cxx:177
 AliAnalysisTaskDielectronReadAODBranch.cxx:178
 AliAnalysisTaskDielectronReadAODBranch.cxx:179
 AliAnalysisTaskDielectronReadAODBranch.cxx:180
 AliAnalysisTaskDielectronReadAODBranch.cxx:181
 AliAnalysisTaskDielectronReadAODBranch.cxx:182
 AliAnalysisTaskDielectronReadAODBranch.cxx:183
 AliAnalysisTaskDielectronReadAODBranch.cxx:184
 AliAnalysisTaskDielectronReadAODBranch.cxx:185
 AliAnalysisTaskDielectronReadAODBranch.cxx:186
 AliAnalysisTaskDielectronReadAODBranch.cxx:187
 AliAnalysisTaskDielectronReadAODBranch.cxx:188
 AliAnalysisTaskDielectronReadAODBranch.cxx:189
 AliAnalysisTaskDielectronReadAODBranch.cxx:190
 AliAnalysisTaskDielectronReadAODBranch.cxx:191
 AliAnalysisTaskDielectronReadAODBranch.cxx:192
 AliAnalysisTaskDielectronReadAODBranch.cxx:193
 AliAnalysisTaskDielectronReadAODBranch.cxx:194
 AliAnalysisTaskDielectronReadAODBranch.cxx:195
 AliAnalysisTaskDielectronReadAODBranch.cxx:196
 AliAnalysisTaskDielectronReadAODBranch.cxx:197
 AliAnalysisTaskDielectronReadAODBranch.cxx:198
 AliAnalysisTaskDielectronReadAODBranch.cxx:199
 AliAnalysisTaskDielectronReadAODBranch.cxx:200
 AliAnalysisTaskDielectronReadAODBranch.cxx:201
 AliAnalysisTaskDielectronReadAODBranch.cxx:202
 AliAnalysisTaskDielectronReadAODBranch.cxx:203
 AliAnalysisTaskDielectronReadAODBranch.cxx:204
 AliAnalysisTaskDielectronReadAODBranch.cxx:205
 AliAnalysisTaskDielectronReadAODBranch.cxx:206
 AliAnalysisTaskDielectronReadAODBranch.cxx:207
 AliAnalysisTaskDielectronReadAODBranch.cxx:208
 AliAnalysisTaskDielectronReadAODBranch.cxx:209
 AliAnalysisTaskDielectronReadAODBranch.cxx:210
 AliAnalysisTaskDielectronReadAODBranch.cxx:211
 AliAnalysisTaskDielectronReadAODBranch.cxx:212
 AliAnalysisTaskDielectronReadAODBranch.cxx:213
 AliAnalysisTaskDielectronReadAODBranch.cxx:214
 AliAnalysisTaskDielectronReadAODBranch.cxx:215
 AliAnalysisTaskDielectronReadAODBranch.cxx:216
 AliAnalysisTaskDielectronReadAODBranch.cxx:217
 AliAnalysisTaskDielectronReadAODBranch.cxx:218
 AliAnalysisTaskDielectronReadAODBranch.cxx:219
 AliAnalysisTaskDielectronReadAODBranch.cxx:220
 AliAnalysisTaskDielectronReadAODBranch.cxx:221
 AliAnalysisTaskDielectronReadAODBranch.cxx:222
 AliAnalysisTaskDielectronReadAODBranch.cxx:223
 AliAnalysisTaskDielectronReadAODBranch.cxx:224
 AliAnalysisTaskDielectronReadAODBranch.cxx:225
 AliAnalysisTaskDielectronReadAODBranch.cxx:226
 AliAnalysisTaskDielectronReadAODBranch.cxx:227
 AliAnalysisTaskDielectronReadAODBranch.cxx:228
 AliAnalysisTaskDielectronReadAODBranch.cxx:229
 AliAnalysisTaskDielectronReadAODBranch.cxx:230
 AliAnalysisTaskDielectronReadAODBranch.cxx:231
 AliAnalysisTaskDielectronReadAODBranch.cxx:232
 AliAnalysisTaskDielectronReadAODBranch.cxx:233
 AliAnalysisTaskDielectronReadAODBranch.cxx:234
 AliAnalysisTaskDielectronReadAODBranch.cxx:235
 AliAnalysisTaskDielectronReadAODBranch.cxx:236
 AliAnalysisTaskDielectronReadAODBranch.cxx:237
 AliAnalysisTaskDielectronReadAODBranch.cxx:238
 AliAnalysisTaskDielectronReadAODBranch.cxx:239
 AliAnalysisTaskDielectronReadAODBranch.cxx:240
 AliAnalysisTaskDielectronReadAODBranch.cxx:241
 AliAnalysisTaskDielectronReadAODBranch.cxx:242
 AliAnalysisTaskDielectronReadAODBranch.cxx:243
 AliAnalysisTaskDielectronReadAODBranch.cxx:244
 AliAnalysisTaskDielectronReadAODBranch.cxx:245
 AliAnalysisTaskDielectronReadAODBranch.cxx:246
 AliAnalysisTaskDielectronReadAODBranch.cxx:247
 AliAnalysisTaskDielectronReadAODBranch.cxx:248
 AliAnalysisTaskDielectronReadAODBranch.cxx:249
 AliAnalysisTaskDielectronReadAODBranch.cxx:250
 AliAnalysisTaskDielectronReadAODBranch.cxx:251
 AliAnalysisTaskDielectronReadAODBranch.cxx:252
 AliAnalysisTaskDielectronReadAODBranch.cxx:253
 AliAnalysisTaskDielectronReadAODBranch.cxx:254
 AliAnalysisTaskDielectronReadAODBranch.cxx:255
 AliAnalysisTaskDielectronReadAODBranch.cxx:256
 AliAnalysisTaskDielectronReadAODBranch.cxx:257
 AliAnalysisTaskDielectronReadAODBranch.cxx:258
 AliAnalysisTaskDielectronReadAODBranch.cxx:259
 AliAnalysisTaskDielectronReadAODBranch.cxx:260
 AliAnalysisTaskDielectronReadAODBranch.cxx:261
 AliAnalysisTaskDielectronReadAODBranch.cxx:262
 AliAnalysisTaskDielectronReadAODBranch.cxx:263
 AliAnalysisTaskDielectronReadAODBranch.cxx:264
 AliAnalysisTaskDielectronReadAODBranch.cxx:265
 AliAnalysisTaskDielectronReadAODBranch.cxx:266
 AliAnalysisTaskDielectronReadAODBranch.cxx:267
 AliAnalysisTaskDielectronReadAODBranch.cxx:268
 AliAnalysisTaskDielectronReadAODBranch.cxx:269
 AliAnalysisTaskDielectronReadAODBranch.cxx:270
 AliAnalysisTaskDielectronReadAODBranch.cxx:271
 AliAnalysisTaskDielectronReadAODBranch.cxx:272
 AliAnalysisTaskDielectronReadAODBranch.cxx:273
 AliAnalysisTaskDielectronReadAODBranch.cxx:274
 AliAnalysisTaskDielectronReadAODBranch.cxx:275
 AliAnalysisTaskDielectronReadAODBranch.cxx:276
 AliAnalysisTaskDielectronReadAODBranch.cxx:277
 AliAnalysisTaskDielectronReadAODBranch.cxx:278
 AliAnalysisTaskDielectronReadAODBranch.cxx:279
 AliAnalysisTaskDielectronReadAODBranch.cxx:280
 AliAnalysisTaskDielectronReadAODBranch.cxx:281
 AliAnalysisTaskDielectronReadAODBranch.cxx:282
 AliAnalysisTaskDielectronReadAODBranch.cxx:283
 AliAnalysisTaskDielectronReadAODBranch.cxx:284
 AliAnalysisTaskDielectronReadAODBranch.cxx:285
 AliAnalysisTaskDielectronReadAODBranch.cxx:286
 AliAnalysisTaskDielectronReadAODBranch.cxx:287
 AliAnalysisTaskDielectronReadAODBranch.cxx:288
 AliAnalysisTaskDielectronReadAODBranch.cxx:289
 AliAnalysisTaskDielectronReadAODBranch.cxx:290
 AliAnalysisTaskDielectronReadAODBranch.cxx:291
 AliAnalysisTaskDielectronReadAODBranch.cxx:292
 AliAnalysisTaskDielectronReadAODBranch.cxx:293
 AliAnalysisTaskDielectronReadAODBranch.cxx:294
 AliAnalysisTaskDielectronReadAODBranch.cxx:295
 AliAnalysisTaskDielectronReadAODBranch.cxx:296
 AliAnalysisTaskDielectronReadAODBranch.cxx:297
 AliAnalysisTaskDielectronReadAODBranch.cxx:298
 AliAnalysisTaskDielectronReadAODBranch.cxx:299
 AliAnalysisTaskDielectronReadAODBranch.cxx:300
 AliAnalysisTaskDielectronReadAODBranch.cxx:301
 AliAnalysisTaskDielectronReadAODBranch.cxx:302
 AliAnalysisTaskDielectronReadAODBranch.cxx:303
 AliAnalysisTaskDielectronReadAODBranch.cxx:304
 AliAnalysisTaskDielectronReadAODBranch.cxx:305
 AliAnalysisTaskDielectronReadAODBranch.cxx:306
 AliAnalysisTaskDielectronReadAODBranch.cxx:307
 AliAnalysisTaskDielectronReadAODBranch.cxx:308
 AliAnalysisTaskDielectronReadAODBranch.cxx:309
 AliAnalysisTaskDielectronReadAODBranch.cxx:310
 AliAnalysisTaskDielectronReadAODBranch.cxx:311
 AliAnalysisTaskDielectronReadAODBranch.cxx:312
 AliAnalysisTaskDielectronReadAODBranch.cxx:313
 AliAnalysisTaskDielectronReadAODBranch.cxx:314
 AliAnalysisTaskDielectronReadAODBranch.cxx:315
 AliAnalysisTaskDielectronReadAODBranch.cxx:316
 AliAnalysisTaskDielectronReadAODBranch.cxx:317
 AliAnalysisTaskDielectronReadAODBranch.cxx:318
 AliAnalysisTaskDielectronReadAODBranch.cxx:319
 AliAnalysisTaskDielectronReadAODBranch.cxx:320
 AliAnalysisTaskDielectronReadAODBranch.cxx:321
 AliAnalysisTaskDielectronReadAODBranch.cxx:322
 AliAnalysisTaskDielectronReadAODBranch.cxx:323
 AliAnalysisTaskDielectronReadAODBranch.cxx:324
 AliAnalysisTaskDielectronReadAODBranch.cxx:325
 AliAnalysisTaskDielectronReadAODBranch.cxx:326
 AliAnalysisTaskDielectronReadAODBranch.cxx:327
 AliAnalysisTaskDielectronReadAODBranch.cxx:328
 AliAnalysisTaskDielectronReadAODBranch.cxx:329
 AliAnalysisTaskDielectronReadAODBranch.cxx:330
 AliAnalysisTaskDielectronReadAODBranch.cxx:331
 AliAnalysisTaskDielectronReadAODBranch.cxx:332
 AliAnalysisTaskDielectronReadAODBranch.cxx:333
 AliAnalysisTaskDielectronReadAODBranch.cxx:334
 AliAnalysisTaskDielectronReadAODBranch.cxx:335
 AliAnalysisTaskDielectronReadAODBranch.cxx:336
 AliAnalysisTaskDielectronReadAODBranch.cxx:337
 AliAnalysisTaskDielectronReadAODBranch.cxx:338
 AliAnalysisTaskDielectronReadAODBranch.cxx:339