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

// Analysis task to produce trees of lightweight events
// evgeny.kryshen@cern.ch

// aliroot
#include "AliAnalysisTaskCFTree.h"
#include "AliCFParticle.h"
#include "AliAnalysisManager.h"
#include "AliInputEventHandler.h"
#include "AliESDEvent.h"
#include "AliAODEvent.h"
#include "AliMCEvent.h"
#include "AliAODTrack.h"
#include "AliESDtrack.h"
#include "AliExternalTrackParam.h"
#include "AliCentrality.h"
#include "AliAnalysisFilter.h"
#include "AliVMultiplicity.h"
#include "AliAnalysisUtils.h"
// root
#include "TMath.h"
#include "TFile.h"
#include "TList.h"
#include "TH1I.h"
#include "TChain.h"
#include "TTree.h"
#include "TClonesArray.h"
ClassImp(AliAnalysisTaskCFTree)

//-----------------------------------------------------------------------------
AliAnalysisTaskCFTree::AliAnalysisTaskCFTree(const char* name) :
  AliAnalysisTaskSE(name),
  fTrackFilter(0x0),
  fHybridConstrainedMask(0),
  fTPConlyConstrainedMask(0),
  fUtils(0x0),
  fListOfHistos(0x0),
  fEventStatistics(0x0),
  fTree(0x0),
  fTracks(0x0),
  fTracklets(0x0),
  fMuons(0x0),
  fMcParticles(0x0),
  fField(0),
  fCentrality(),
  fVtxZ(0),
  fVtxTPConly(0),
  fVtxContributors(0),
  fPeriod(0),
  fOrbit(),
  fBc(),
  fSelectMask(0),
  fIsPileupSPD(0),
  fIsPileupMV(0),
  fSelectBit(AliVEvent::kAny),
  fZVertexCut(10.),
  fTrackFilterBit(0xffffffff),
  fTrackEtaCut(1.0),
  fPtMin(0.15),
  fSharedClusterCut(0.4),
  fCrossedRowsCut(100),
  fFoundFractionCut(0.8),
  fDphiCut(1.e9),
  fStoreTracks(0),
  fStoreTracklets(0),
  fStoreMuons(0),
  fStoreMcTracks(0),
  fStoreMcTracklets(0),
  fStoreMcMuons(0),
  fStorePidInfo(0)
{
  Info("AliAnalysisTaskCFTree","Calling Constructor");
  DefineInput(0,TChain::Class());
  DefineOutput(1,TList::Class());
  DefineOutput(2,TTree::Class());
}
//-----------------------------------------------------------------------------


//-----------------------------------------------------------------------------
void AliAnalysisTaskCFTree::UserCreateOutputObjects(){
  fListOfHistos = new TList();
  fListOfHistos->SetOwner();
  fEventStatistics = new TH1I("fEventStatistics","",10,0,10);
  fEventStatistics->SetBit(TH1::kCanRebin);

  fListOfHistos->Add(fEventStatistics);

  if (fStoreTracks)    fTracks      = new TClonesArray("AliCFParticle",2000);
  if (fStoreTracklets) fTracklets   = new TClonesArray("AliCFParticle",2000);
  if (fStoreMuons)     fMuons       = new TClonesArray("AliCFParticle",2000);
  if (fStoreMcTracks)  fMcParticles = new TClonesArray("AliCFParticle",2000);
  // create file-resident tree
  TDirectory *owd = gDirectory;
  OpenFile(1);
  fTree = new TTree("events","events");
  owd->cd();
  fTree->Branch("cent",&fCentrality,"fCentrality[6]/F");
  fTree->Branch("vtxz",&fVtxZ);
  fTree->Branch("vtxTPConly",&fVtxTPConly);
  fTree->Branch("vtxContributors",&fVtxContributors);
  fTree->Branch("field",&fField);
  fTree->Branch("run",&fCurrentRunNumber);
  fTree->Branch("period",&fPeriod);
  fTree->Branch("orbit",&fOrbit);
  fTree->Branch("bc",&fBc);
  fTree->Branch("mask",&fSelectMask);
  fTree->Branch("pileupspd",&fIsPileupSPD);
  fTree->Branch("pileupmv",&fIsPileupMV);
  if (fTracks)      fTree->Branch("tracks",&fTracks);
  if (fTracklets)   fTree->Branch("tracklets",&fTracklets);
  if (fMuons)       fTree->Branch("muons",&fMuons);
  if (fMcParticles) fTree->Branch("mcparticles",&fMcParticles);

  fUtils = new AliAnalysisUtils();

  PostData(1,fListOfHistos);
  PostData(2,fTree);
}
//-----------------------------------------------------------------------------


//-----------------------------------------------------------------------------
void AliAnalysisTaskCFTree::UserExec(Option_t *){
  fEventStatistics->Fill("before cuts",1);
  
  if (!fInputEvent) return;
  fEventStatistics->Fill("after event check",1);
  
  // TODO
  //  TString classes = fInputEvent->GetFiredTriggerClasses();
  //  fClassesFired = 0;
  //  fClassesFired |= (classes.Contains("CINT7-S-") << 0);
  //  fClassesFired |= (classes.Contains("CINT7-B-") << 0);
  //  fClassesFired |= (classes.Contains("CSHM8-S-") << 1);
  //  fClassesFired |= (classes.Contains("CSHM8-B-") << 1);
  //  fClassesFired |= (classes.Contains("CMSL7-S-") << 2);
  //  fClassesFired |= (classes.Contains("CMSL7-B-") << 2);
  //  fClassesFired |= (classes.Contains("CMSH7-S-") << 3);
  //  fClassesFired |= (classes.Contains("CMSH7-B-") << 3);
  //  fClassesFired |= (classes.Contains("CMUL7-S-") << 4);
  //  fClassesFired |= (classes.Contains("CMUL7-B-") << 4);
  //  fClassesFired |= (classes.Contains("CMLL7-S-") << 5);
  //  fClassesFired |= (classes.Contains("CMLL7-B-") << 5);
  //  fClassesFired |= (classes.Contains("CINT8-S-") << 6);
  //  fClassesFired |= (classes.Contains("CSPI7-S-") << 7);
  //  fClassesFired |= (classes.Contains("CSPI8-S-") << 8);
  //  fClassesFired |= (classes.Contains("CMSL8-S-") << 9);
  //  fClassesFired |= (classes.Contains("CMSH8-S-") <<10);
  //  fClassesFired |= (classes.Contains("CMUL8-S-") <<11);
  //  fClassesFired |= (classes.Contains("CMLL8-S-") <<12);
  //  fClassesFired |= (classes.Contains("C0MUL-SA") <<13);
  //  fClassesFired |= (classes.Contains("C0MUL-SC") <<14);
  //  if (!fClassesFired) return;
  //  fEventStatistics->Fill("after trigger check",1);
  
  fSelectMask = fInputHandler->IsEventSelected();
  if (!(fSelectMask & fSelectBit)) return;
  
  fEventStatistics->Fill("after physics selection",1);
  
  fPeriod        = fInputEvent->GetPeriodNumber();
  fOrbit         = fInputEvent->GetOrbitNumber();
  fBc            = fInputEvent->GetBunchCrossNumber();
  fField         = fInputEvent->GetMagneticField();
  fCentrality[0] = fInputEvent->GetCentrality()->GetCentralityPercentile("V0M");
  fCentrality[1] = fInputEvent->GetCentrality()->GetCentralityPercentile("V0A");
  fCentrality[2] = fInputEvent->GetCentrality()->GetCentralityPercentile("V0C");
  fCentrality[3] = fInputEvent->GetCentrality()->GetCentralityPercentile("CL1");
  fCentrality[4] = fInputEvent->GetCentrality()->GetCentralityPercentile("ZNA");
  fCentrality[5] = fInputEvent->GetCentrality()->GetCentralityPercentile("ZNC");
  fIsPileupSPD   = fUtils->IsPileUpSPD(fInputEvent);
  fIsPileupMV    = fUtils->IsPileUpMV(fInputEvent);
//  fNofITSClusters[i] = esd->GetMultiplicity()->GetNumberOfITSClusters(i);
  
  const AliVVertex* vertex  = fInputEvent->GetPrimaryVertex();
  fVtxZ  = vertex->GetZ();
  fVtxTPConly = TString(vertex->GetName()).CompareTo("PrimaryVertex") && TString(vertex->GetName()).CompareTo("SPDVertex");
  fVtxContributors = vertex->GetNContributors();
  if (TMath::Abs(fVtxZ) >= fZVertexCut)  return;
  fEventStatistics->Fill("after vertex cut",1);
  
  if (fTracks) {
    fTracks->Clear();
    for (Int_t ipart=0;ipart<fInputEvent->GetNumberOfTracks();ipart++){
      AliVTrack* track = (AliVTrack*) fInputEvent->GetTrack(ipart);
      if (!track) continue;
      UInt_t mask = GetFilterMap(track);
      if (!(mask & fTrackFilterBit)) continue;

      if (track->InheritsFrom("AliAODTrack")) AddTrack(track,mask,0);
      else if (track->InheritsFrom("AliESDtrack")) {
        if (mask)                           AddTrack(track,mask,1);
        if (mask & fHybridConstrainedMask)  AddTrack(track,mask,2);
        if (mask & fTPConlyConstrainedMask) AddTrack(track,mask,3);
      }
    }
  }
  
  if (fTracklets){
    fTracklets->Clear();
    AliVMultiplicity* mult = fInputEvent->GetMultiplicity();
    Int_t nTracklets = mult->GetNumberOfTracklets();
    for (Int_t i=0;i<nTracklets;i++){
      Float_t phi   = mult->GetPhi(i);
      Float_t eta   = -TMath::Log(TMath::Tan(mult->GetTheta(i)/2));
      Float_t dphi  = mult->GetDeltaPhi(i);
      if (TMath::Abs(dphi)>fDphiCut) continue;
      AliCFParticle* tracklet = new ((*fTracklets)[fTracklets->GetEntriesFast()]) AliCFParticle(dphi,eta,phi,0,0,fStoreMcTracklets?4:0);
      if (!fStoreMcTracklets || !fMCEvent) continue;
      Int_t label1 = mult->GetLabel(i,0);
      Int_t label2 = mult->GetLabel(i,1);
      if (label1!=label2) continue;
      AliVParticle* particle = fMCEvent->GetTrack(label1);
      if (!particle) continue;
      Short_t charge = particle->Charge();
      Float_t ptMC   = particle->Pt();
      Float_t etaMC  = particle->Eta();
      Float_t phiMC  = particle->Phi();
      Float_t pdg    = particle->PdgCode();
      tracklet->SetCharge(charge);
      tracklet->SetAt(ptMC,0);
      tracklet->SetAt(etaMC,1);
      tracklet->SetAt(phiMC,2);
      tracklet->SetAt(pdg,3);
    }
  }
  
  AliAODEvent* aod = dynamic_cast<AliAODEvent*> (fInputEvent);
  if (fMuons && aod){ // aod only
    fMuons->Clear();
    for (Int_t iTrack = 0; iTrack < aod->GetNumberOfTracks(); iTrack++) {
      AliAODTrack* track = dynamic_cast<AliAODTrack*>(aod->GetTrack(iTrack));
      if(!track) AliFatal("Not a standard AOD");
      if (!track->IsMuonTrack()) continue;
      Float_t pt     = track->Pt();
      Float_t eta    = track->Eta();
      Float_t phi    = track->Phi();
      Short_t charge = track->Charge();
      Float_t dca    = track->DCA();
      Float_t chi2   = track->Chi2perNDF();
      Float_t rabs   = track->GetRAtAbsorberEnd();
      Int_t   mask   = track->GetMatchTrigger();
      if (rabs < 17.6 || rabs > 89.5) continue;
      if (eta < -4 || eta > -2.5) continue;
      AliCFParticle* part = new ((*fMuons)[fMuons->GetEntriesFast()]) AliCFParticle(pt,eta,phi,charge,mask,fStoreMcMuons?11:3);
      part->SetAt(dca,0);
      part->SetAt(chi2,1);
      part->SetAt(rabs,2);
      if (!fStoreMcMuons || !fMCEvent) continue;
      Int_t label = TMath::Abs(track->GetLabel()); 
      AliVParticle* mcpart = fMCEvent->GetTrack(label);
      if (!mcpart) continue;
      Int_t mcpdg = mcpart->PdgCode();
      Float_t mcpt  = mcpart->Pt();
      Float_t mceta = mcpart->Eta();
      Float_t mcphi = mcpart->Phi();
      part->SetAt(mcpt,3);
      part->SetAt(mceta,4);
      part->SetAt(mcphi,5);
      part->SetAt(mcpdg,6);
      part->SetAt(0,10);
      Bool_t isPrimary = fMCEvent->IsPhysicalPrimary(label);
      if (isPrimary) continue;
      label = mcpart->GetMother();
      while (!isPrimary && label>=0) {
        mcpart = (AliVParticle*) fMCEvent->GetTrack(label);
        label = mcpart->GetMother();
        isPrimary = fMCEvent->IsPhysicalPrimary(label);
      }
      if (!mcpart) continue;
      Float_t mcprimarypt  = mcpart->Pt();
      Float_t mcprimaryeta = mcpart->Eta();
      Float_t mcprimaryphi = mcpart->Phi();
      Int_t   mcprimarypdg = mcpart->PdgCode();
      part->SetAt(mcprimarypt,7);
      part->SetAt(mcprimaryeta,8);
      part->SetAt(mcprimaryphi,9);
      part->SetAt(mcprimarypdg,10);
    }
  }

  if (fMcParticles && fMCEvent) {
    fMcParticles->Clear();
    TString gen;
    for (Int_t ipart=0;ipart<fMCEvent->GetNumberOfTracks();ipart++){
      AliVParticle* part = fMCEvent->GetTrack(ipart);
      Bool_t isCocktail = fMCEvent->GetCocktailGenerator(ipart,gen);
      if (isCocktail && !gen.Contains("Pythia") && !gen.Contains("Hijing") && !gen.Contains("AMPT") && !gen.Contains("DPMJET")) continue;
      Float_t pt     = part->Pt();
      Float_t eta    = part->Eta();
      Float_t phi    = part->Phi();
      Char_t  charge = part->Charge();
      Int_t   mask   = part->PdgCode();
      // TODO
      //  Bool_t isPrimary = fMCEvent->IsPhysicalPrimary(ipart);
      // if (pt < fMcPtMin) continue;
      // if (TMath::Abs(eta) > fMcTrackEtaCut) continue;
      new ((*fMcParticles)[fMcParticles->GetEntriesFast()]) AliCFParticle(pt,eta,phi,charge,mask);
    }
  }

  fTree->Fill();
  PostData(1,fListOfHistos);
  PostData(2,fTree);
}
//-----------------------------------------------------------------------------


//-----------------------------------------------------------------------------
UInt_t AliAnalysisTaskCFTree::GetFilterMap(AliVTrack* track){
  UInt_t mask = 0;
  if (track->InheritsFrom("AliAODTrack")) {
    AliAODTrack* part = (AliAODTrack*) track;
    mask = part->GetFilterMap();
    Double_t nCrossedRaws      = part->GetTPCNCrossedRows();
    Double_t nFindableClusters = part->GetTPCNclsF();
    Double_t nSharedClusters   = part->GetTPCnclsS();
    Double_t nClusters         = part->GetTPCncls();
    Bool_t itsRefit            = part->GetStatus() & AliVTrack::kITSrefit;
    if (nCrossedRaws/nFindableClusters > fFoundFractionCut) mask |= (1 << 26);
    if (nCrossedRaws>fCrossedRowsCut)                       mask |= (1 << 27);
    if (itsRefit)                                           mask |= (1 << 28);
    if (nSharedClusters/nClusters<=fSharedClusterCut)       mask |= (1 << 29);
    if (part->GetLabel()<0)                                 mask |= (1 << 31);
  } else if (track->InheritsFrom("AliESDtrack")){
    AliESDtrack* part = (AliESDtrack*) track;
    if (!fTrackFilter) AliFatal("Track filter undefined");
    mask |= fTrackFilter->IsSelected(part);
  }
  
  return mask;
}
//-----------------------------------------------------------------------------


//-----------------------------------------------------------------------------
AliCFParticle* AliAnalysisTaskCFTree::AddTrack(AliVTrack* track, UInt_t mask, UInt_t flag){

  // skip neutral mc trackicles
  Char_t charge = track->Charge();
  if (charge==0) return NULL;
  
  // set pt,eta,phi
  Float_t pt=0,eta=0,phi=0;
  if (flag==0 || flag==1){ // AOD or Global ESD tracks
    pt  = track->Pt();
    eta = track->Eta();
    phi = track->Phi();
    if  (flag==1) mask &= (~fHybridConstrainedMask) & (~fTPConlyConstrainedMask);
  } 
  else if (flag==2) { // Hybrid constrained tracks (ESD)
    AliESDtrack* part = (AliESDtrack*) track;
    const AliExternalTrackParam* param = part->GetConstrainedParam();
    pt  = param->Pt();
    eta = param->Eta();
    phi = param->Phi();
    mask &= fHybridConstrainedMask;
  } 
  else if (flag==3) { // TPC only constrained tracks (ESD)
    AliESDtrack* part = (AliESDtrack*) track;
    AliESDtrack tpcTrack;
    if (!part->FillTPCOnlyTrack(tpcTrack)) return NULL;
    AliExternalTrackParam param;
    const AliESDVertex* vtxSPD = ((AliESDEvent*) fInputEvent)->GetPrimaryVertexSPD();
    if (!tpcTrack.RelateToVertexTPC(vtxSPD,fField,1.e30,&param)) return NULL;
    pt  = param.Pt();
    eta = param.Eta();
    phi = param.Phi();
    mask &= fTPConlyConstrainedMask;
  }

  // kinematic cuts
  if (pt < fPtMin || TMath::Abs(eta) > fTrackEtaCut) return NULL;

  AliCFParticle* cftrack = new ((*fTracks)[fTracks->GetEntriesFast()]) AliCFParticle(pt,eta,phi,charge,mask,fStorePidInfo ? 3: 0);

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