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.                  *
 **************************************************************************/

//-----------------------------------------------------------------
//         AliAnalysisTaskSpectraAllChAOD class
//-----------------------------------------------------------------

#include "TChain.h"
#include "TTree.h"
#include "TLegend.h"
#include "TH1F.h"
#include "TH2F.h"
#include "THnSparse.h"
#include "TCanvas.h"
#include "AliAnalysisTask.h"
#include "AliAODTrack.h"
#include "AliAODMCParticle.h"
#include "AliVParticle.h"
#include "AliAODEvent.h"
#include "AliAODInputHandler.h"
#include "AliAnalysisTaskSpectraAllChAOD.h"
#include "AliAnalysisTaskESDfilter.h"
#include "AliAnalysisDataContainer.h"
#include "AliSpectraAODTrackCuts.h"
#include "AliSpectraAODEventCuts.h"
#include "AliHelperPID.h"
#include "AliPIDCombined.h"
#include "AliCentrality.h"
#include "TProof.h"
#include "AliVEvent.h"
#include "AliStack.h"
#include <TMCProcess.h>

#include <iostream>

using namespace AliHelperPIDNameSpace;
using namespace std;

ClassImp(AliAnalysisTaskSpectraAllChAOD)

//________________________________________________________________________
AliAnalysisTaskSpectraAllChAOD::AliAnalysisTaskSpectraAllChAOD(const char *name) : AliAnalysisTaskSE(name),  
fAOD(0x0),
fTrackCuts(0x0),
fEventCuts(0x0),
fHelperPID(0x0),
fIsMC(0),
fDoDoubleCounting(0),
fFillOnlyEvents(0),
fCharge(0),
fVZEROside(0),
fOutput(0x0),
fnCentBins(20),
fnQvecBins(100),
fnNchBins(200),
fIsQvecCalibMode(0),
fQvecUpperLim(100),
fIsAOD160(1),
fnDCABins(60),
fDCAmin(-3),
fDCAmax(3),
fDCAzCut(999999.),
fQst(1),
fQtrk(0),
fQgenType(0),
fDoCentrSystCentrality(0)
{
  // Default constructor
  DefineInput(0, TChain::Class());
  DefineOutput(1, TList::Class());
  DefineOutput(2, AliSpectraAODEventCuts::Class());
  DefineOutput(3, AliSpectraAODTrackCuts::Class());
  DefineOutput(4, AliHelperPID::Class());
}

//________________________________________________________________________
void AliAnalysisTaskSpectraAllChAOD::UserCreateOutputObjects()
{
  // create output objects
  fOutput=new TList();
  fOutput->SetOwner();
  fOutput->SetName("fOutput");

  if (!fTrackCuts) AliFatal("Track Cuts should be set in the steering macro");
  if (!fEventCuts) AliFatal("Event Cuts should be set in the steering macro");
  if (!fHelperPID)  AliFatal("HelperPID should be set in the steering macro");

  // binning common to all the THn
  const Double_t ptBins[] = {0.20,0.30,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.2,1.4,1.6,1.8,2.0,2.4,2.8,3.2,3.6,4.0,5.0,6.0,7.0,8.0,9.0,10.,12.,15.,20.,25.,30.,35.,40.,50.,75.,100.};
  const Int_t nptBins=34;
  //const Double_t ptBins[] = {0.20,0.25,0.30,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.6,1.8,2.0,2.4,2.8,3.2,3.6,4.0,5.0,6.0,7.0,8.0,9.0,10.,12.,15.,20.,25.,30.,35.,40.,50.,75.,100.};
  //const Int_t nptBins=44;

  //dimensions of THnSparse for tracks
  //const Int_t nvartrk=8;
  //                                             pt          cent          Q vec       IDrec          IDgen        isph         y             DCA 
  //  Int_t    binsHistRealTrk[nvartrk] = {      nptBins, fnCentBins,     fnQvecBins,        4,             3,          3,        2,        fnDCABins};
  //  Double_t xminHistRealTrk[nvartrk] = {         0.,          0.,              0.,       -.5,          -0.5,        0.5,      -0.5,          fDCAmin};
  //  Double_t xmaxHistRealTrk[nvartrk] = {       10.,       100.,     fQvecUpperLim,       3.5,      2.5,        3.5,      0.5,         fDCAmax};
  //  THnSparseF* NSparseHistTrk = new THnSparseF("NSparseHistTrk","NSparseHistTrk",nvartrk,binsHistRealTrk,xminHistRealTrk,xmaxHistRealTrk);
  //  NSparseHistTrk->GetAxis(0)->SetTitle("#it{p}_{T,rec}");
  //  NSparseHistTrk->GetAxis(0)->SetName("pT_rec");
  //  NSparseHistTrk->SetBinEdges(0,ptBins);
  //  NSparseHistTrk->GetAxis(1)->SetTitle(Form("%s cent",fEventCuts->GetCentralityMethod().Data()));
  //  NSparseHistTrk->GetAxis(1)->SetName(Form("%s_cent",fEventCuts->GetCentralityMethod().Data()));
  //  NSparseHistTrk->GetAxis(2)->SetTitle("Q vec");
  //  NSparseHistTrk->GetAxis(2)->SetName("Q_vec");
  //  NSparseHistTrk->GetAxis(3)->SetTitle("ID rec");
  //  NSparseHistTrk->GetAxis(3)->SetName("ID_rec");
  //  NSparseHistTrk->GetAxis(4)->SetTitle("ID gen");
  //  NSparseHistTrk->GetAxis(4)->SetName("ID_gen");
  //  NSparseHistTrk->GetAxis(5)->SetTitle("isph");
  //  NSparseHistTrk->GetAxis(5)->SetName("isph");
  //  NSparseHistTrk->GetAxis(6)->SetTitle("y");
  //  NSparseHistTrk->GetAxis(6)->SetName("y");
  //  NSparseHistTrk->GetAxis(7)->SetTitle("dca");
  //  NSparseHistTrk->GetAxis(7)->SetName("dca");
  const Int_t nvartrk=7;
  Int_t    binsHistRealTrk[nvartrk] = {      nptBins, fnCentBins,     fnQvecBins,        4,             3,          3,        2};
  Double_t xminHistRealTrk[nvartrk] = {         0.,          0.,              0.,       -.5,          -0.5,        0.5,      -0.5};
  Double_t xmaxHistRealTrk[nvartrk] = {       10.,       100.,     fQvecUpperLim,       3.5,      2.5,        3.5,      0.5};
  THnSparseF* NSparseHistTrk = new THnSparseF("NSparseHistTrk","NSparseHistTrk",nvartrk,binsHistRealTrk,xminHistRealTrk,xmaxHistRealTrk);
  NSparseHistTrk->GetAxis(0)->SetTitle("#it{p}_{T,rec}");
  NSparseHistTrk->GetAxis(0)->SetName("pT_rec");
  NSparseHistTrk->SetBinEdges(0,ptBins);
  NSparseHistTrk->GetAxis(1)->SetTitle(Form("%s cent",fEventCuts->GetCentralityMethod().Data()));
  NSparseHistTrk->GetAxis(1)->SetName(Form("%s_cent",fEventCuts->GetCentralityMethod().Data()));
  NSparseHistTrk->GetAxis(2)->SetTitle("Q vec");
  NSparseHistTrk->GetAxis(2)->SetName("Q_vec");
  NSparseHistTrk->GetAxis(3)->SetTitle("ID rec");
  NSparseHistTrk->GetAxis(3)->SetName("ID_rec");
  NSparseHistTrk->GetAxis(4)->SetTitle("ID gen");
  NSparseHistTrk->GetAxis(4)->SetName("ID_gen");
  NSparseHistTrk->GetAxis(5)->SetTitle("isph");
  NSparseHistTrk->GetAxis(5)->SetName("isph");
  NSparseHistTrk->GetAxis(6)->SetTitle("y");
  NSparseHistTrk->GetAxis(6)->SetName("y");


  fOutput->Add(NSparseHistTrk);

  //dimensions of THnSparse for stack
  const Int_t nvarst=7;
  //                                             pt          cent    IDgen        isph        y    etaselected       Qvec gen
  Int_t    binsHistRealSt[nvarst] = {      nptBins,  fnCentBins,        3,         2,        2,             1,      fnQvecBins};
  Double_t xminHistRealSt[nvarst] = {         0.,           0.,      -0.5,      -0.5,    -0.5,            0.5,              0.};
  Double_t xmaxHistRealSt[nvarst] = {       10.,        100.,      2.5,       1.5,      0.5,           1.5,      fQvecUpperLim};
  THnSparseF* NSparseHistSt = new THnSparseF("NSparseHistSt","NSparseHistSt",nvarst,binsHistRealSt,xminHistRealSt,xmaxHistRealSt);
  NSparseHistSt->GetAxis(0)->SetTitle("#it{p}_{T,gen}");
  NSparseHistSt->SetBinEdges(0,ptBins);
  NSparseHistSt->GetAxis(0)->SetName("pT_rec");
  NSparseHistSt->GetAxis(1)->SetTitle(Form("%s cent",fEventCuts->GetCentralityMethod().Data()));
  NSparseHistSt->GetAxis(1)->SetName(Form("%s_cent",fEventCuts->GetCentralityMethod().Data()));
  NSparseHistSt->GetAxis(2)->SetTitle("ID gen");
  NSparseHistSt->GetAxis(2)->SetName("ID_gen");
  NSparseHistSt->GetAxis(3)->SetTitle("isph");
  NSparseHistSt->GetAxis(3)->SetName("isph");
  NSparseHistSt->GetAxis(4)->SetTitle("y");
  NSparseHistSt->GetAxis(4)->SetName("y");
  NSparseHistSt->GetAxis(5)->SetTitle("etaselected");
  NSparseHistSt->GetAxis(5)->SetName("etaselected");
  NSparseHistSt->GetAxis(6)->SetTitle("Q vec gen");
  NSparseHistSt->GetAxis(6)->SetName("Q_vec_gen");
  fOutput->Add(NSparseHistSt);

  //dimensions of THnSparse for the normalization
  const Int_t nvarev=3;
  //                                             cent             Q vec                Nch
  Int_t    binsHistRealEv[nvarev] = {    fnCentBins,      fnQvecBins,           fnNchBins};
  Double_t xminHistRealEv[nvarev] = {           0.,               0.,                   0.};
  Double_t xmaxHistRealEv[nvarev] = {       100.,  fQvecUpperLim,               2000.};
  THnSparseF* NSparseHistEv = new THnSparseF("NSparseHistEv","NSparseHistEv",nvarev,binsHistRealEv,xminHistRealEv,xmaxHistRealEv);
  NSparseHistEv->GetAxis(0)->SetTitle(Form("%s cent",fEventCuts->GetCentralityMethod().Data()));
  NSparseHistEv->GetAxis(0)->SetName(Form("%s_cent",fEventCuts->GetCentralityMethod().Data()));
  NSparseHistEv->GetAxis(1)->SetTitle("Q vec");
  NSparseHistEv->GetAxis(1)->SetName("Q_vec");
  NSparseHistEv->GetAxis(2)->SetTitle("N charged");
  NSparseHistEv->GetAxis(2)->SetName("N_ch");
  fOutput->Add(NSparseHistEv);

  PostData(1, fOutput  );
  PostData(2, fEventCuts);
  PostData(3, fTrackCuts);
  PostData(4, fHelperPID);
}

//________________________________________________________________________

void AliAnalysisTaskSpectraAllChAOD::UserExec(Option_t *)
{
  //Printf("An event");
  // main event loop
  fAOD = dynamic_cast<AliAODEvent*>(fInputEvent);
  if (!fAOD) {
    AliWarning("ERROR: AliAODEvent not available \n");
    return;
  }

  if (strcmp(fAOD->ClassName(), "AliAODEvent"))
  {
    AliFatal("Not processing AODs");
  }

  if(!fEventCuts->IsSelected(fAOD,fTrackCuts))return;//event selection

  //Default TPC priors
  if(fHelperPID->GetPIDType()==kBayes)fHelperPID->GetPIDCombined()->SetDefaultTPCPriors();//FIXME we should modify the task to change priors

  Double_t Qvec=0.;
  if(fIsQvecCalibMode){
    if(fVZEROside==0)Qvec=fEventCuts->GetqV0A();
    else if (fVZEROside==1)Qvec=fEventCuts->GetqV0C();
    else if (fVZEROside==2)Qvec=fEventCuts->GetqTPC();
  }
  else Qvec=fEventCuts->GetQvecPercentile(fVZEROside);

  Double_t QvecMC = 0.;
  if(fIsMC){
    if(fIsQvecCalibMode){
      QvecMC = fEventCuts->CalculateQVectorMC(fVZEROside, fQgenType);
    }
    else QvecMC = fEventCuts->GetQvecPercentileMC(fVZEROside, fQgenType);
  }

  Double_t Cent=(fDoCentrSystCentrality)?1.01*fEventCuts->GetCent():fEventCuts->GetCent();

  // First do MC to fill up the MC particle array
  TClonesArray *arrayMC = 0;
  if (fIsMC)
  {
    arrayMC = (TClonesArray*) fAOD->GetList()->FindObject(AliAODMCParticle::StdBranchName());
    if (!arrayMC) {
      AliFatal("Error: MC particles branch not found!\n");
    }
    Int_t nMC = arrayMC->GetEntries();
    for (Int_t iMC = 0; iMC < nMC; iMC++)
    {
      AliAODMCParticle *partMC = (AliAODMCParticle*) arrayMC->At(iMC);
      if(!partMC->Charge()) continue;//Skip neutrals
      if(fCharge != 0 && partMC->Charge()*fCharge < 0.) continue;//if fCharge != 0 only select fCharge

      //flag to select particle in the same ETA acceptance of the tracks (to be used for the comparison with AllCh)
      Double_t etaselected=-1.;
      if(partMC->Eta()>=fTrackCuts->GetEtaMin() && partMC->Eta()<=fTrackCuts->GetEtaMax())etaselected=1.;

      //pt     cent    IDgen        isph        y
      Double_t varSt[7];
      varSt[0]=partMC->Pt();
      varSt[1]=Cent;
      varSt[2]=(Double_t)fHelperPID->GetParticleSpecies(partMC);
      varSt[3]=(Double_t)partMC->IsPhysicalPrimary();
      varSt[4]=partMC->Y();
      varSt[5]=etaselected;

      if(fQst==0) varSt[6]=Qvec;
      else varSt[6]=QvecMC;

      ((THnSparseF*)fOutput->FindObject("NSparseHistSt"))->Fill(varSt);//stack loop

      //Printf("a particle");

    }
  }

  //main loop on tracks

  Int_t Nch = 0.;

  for (Int_t iTracks = 0; iTracks < fAOD->GetNumberOfTracks(); iTracks++) {
    AliAODTrack* track = dynamic_cast<AliAODTrack*>(fAOD->GetTrack(iTracks));
    if(!track) AliFatal("Not a standard AOD");
    if(fCharge != 0 && track->Charge() != fCharge) continue;//if fCharge != 0 only select fCharge 
    if (!fTrackCuts->IsSelected(track,kTRUE)) continue; //track selection (rapidity selection NOT in the standard cuts)
    if(!fFillOnlyEvents){
      Int_t IDrec=fHelperPID->GetParticleSpecies(track,kTRUE);//id from detector
      Double_t y= track->Y(fHelperPID->GetMass((AliHelperParticleSpecies_t)IDrec));
      Int_t IDgen=kSpUndefined;//set if MC
      Int_t isph=-999;
      //       Int_t iswd=-999;

      if (arrayMC) {
        AliAODMCParticle *partMC = (AliAODMCParticle*) arrayMC->At(TMath::Abs(track->GetLabel()));
        if (!partMC) {
          AliError("Cannot get MC particle");
          continue;
        }
        IDgen=fHelperPID->GetParticleSpecies(partMC);
        isph=partMC->IsPhysicalPrimary();
        //iswd=partMC->IsSecondaryFromWeakDecay();//FIXME not working on old productions - removed Apr 8th 2014

        if(fIsAOD160){// enabled for new ADO160 only
          if(partMC->IsSecondaryFromWeakDecay()) isph=2.;
          if(partMC->IsSecondaryFromMaterial()) isph=3.;

        }
      }

      /*** DCA ***/
      Double_t dcaxy = -999.;
      Double_t dcaz = -999.;

      Double_t p[2]; 
      if(GetDCA(track,p)){ dcaxy=p[0]; dcaz=p[1];}

      if(dcaz >= fDCAzCut) continue;

      //if the q vector is done using the TPC, we avoid overlap
      if (fVZEROside==2 && TMath::Abs(track->Eta())<0.5)continue;

      //pt     cent    Q vec     IDrec     IDgen       isph      y
      //      Double_t varTrk[8];
      Double_t varTrk[7];
      varTrk[0]=track->Pt();
      varTrk[1]=Cent;
      if(fIsMC && fQtrk==1) varTrk[2]=QvecMC;
      else varTrk[2]=Qvec;
      varTrk[3]=(Double_t)IDrec;
      varTrk[4]=(Double_t)IDgen;
      varTrk[5]=(Double_t)isph;
      varTrk[6]=y;
      //varTrk[7]=dcaxy;
      ((THnSparseF*)fOutput->FindObject("NSparseHistTrk"))->Fill(varTrk);//track loop

      //for nsigma PID fill double counting of ID
      if(fHelperPID->GetPIDType()<kBayes && fDoDoubleCounting){//only nsigma
        Bool_t *HasDC;
        HasDC=fHelperPID->GetDoubleCounting(track,kTRUE);//get the array with double counting
        for(Int_t ipart=0;ipart<kNSpecies;ipart++){
          if(HasDC[ipart]==kTRUE){
            varTrk[3]=(Double_t)ipart;
            ((THnSparseF*)fOutput->FindObject("NSparseHistTrk"))->Fill(varTrk);//track loop
          }
        }
      }

      //fill all charged (3)
      varTrk[3]=3.;
      varTrk[4]=3.;
      ((THnSparseF*)fOutput->FindObject("NSparseHistTrk"))->Fill(varTrk);//track loop
    }//end if fFillOnlyEvents

    //Printf("a track");

    Nch++;
  } // end loop on tracks

  Double_t varEv[4];
  varEv[0]=Cent;
  varEv[1]=Qvec;
  varEv[2]=Nch;
  ((THnSparseF*)fOutput->FindObject("NSparseHistEv"))->Fill(varEv);//event loop

  PostData(1, fOutput  );
  PostData(2, fEventCuts);
  PostData(3, fTrackCuts);
  PostData(4, fHelperPID);
}

//_________________________________________________________________
Bool_t  AliAnalysisTaskSpectraAllChAOD::GetDCA(const AliAODTrack* trk, Double_t * p){

  //AliAODTrack::DCA(): for newest AOD fTrack->DCA() always gives -999. This should fix.
  //FIXME should update EventCuts?
  //FIXME add track->GetXYZ(p) method

  double xyz[3],cov[3];

  if (!trk->GetXYZ(xyz)) { // dca is not stored
    AliExternalTrackParam etp;
    etp.CopyFromVTrack(trk);
    AliVEvent* ev = (AliVEvent*)trk->GetEvent();
    if (!ev) {/*printf("Event is not connected to the track\n");*/ return kFALSE;}
    if (!etp.PropagateToDCA(ev->GetPrimaryVertex(), ev->GetMagneticField(),999,xyz,cov)) return kFALSE; // failed, track is too far from vertex
  }
  p[0] = xyz[0];
  p[1] = xyz[1];
  return kTRUE;

}

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