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 for Kinematic filtering
//  Fill AODtrackMC tracks from Kinematic stack
//
 
#include <TChain.h>
#include <TFile.h>
#include "TParticle.h"
#include "TParameter.h"
#include "TString.h"
#include "TList.h"
#include "TProfile.h"
#include "TH1F.h"


#include "AliAnalysisTaskMCParticleFilter.h"
#include "AliAnalysisManager.h"
#include "AliAnalysisFilter.h"
#include "AliHeader.h"
#include "AliStack.h"
#include "AliMCEvent.h"
#include "AliMCEventHandler.h"
#include "AliESDInputHandler.h"
#include "AliAODEvent.h"
#include "AliAODHeader.h"
#include "AliAODMCHeader.h"
#include "AliAODHandler.h"
#include "AliAODVertex.h"
#include "AliAODMCParticle.h"
#include "AliCollisionGeometry.h"
#include "AliGenDPMjetEventHeader.h"
#include "AliGenHijingEventHeader.h"
#include "AliGenPythiaEventHeader.h"
#include "AliGenCocktailEventHeader.h"
#include "AliGenEventHeaderTunedPbPb.h"
#include "AliESDtrack.h"
#include "AliAODTrack.h"
#include "AliAODPid.h"
#include "AliESDpid.h"

#include "AliLog.h"

ClassImp(AliAnalysisTaskMCParticleFilter)

////////////////////////////////////////////////////////////////////////

//____________________________________________________________________
AliAnalysisTaskMCParticleFilter::AliAnalysisTaskMCParticleFilter():
  AliAnalysisTaskSE(),
  fTrackFilterMother(0x0),
  fAODMcHeader(0x0),
  fAODMcParticles(0x0),
  fHistList(0x0)
{
  // Default constructor
}

Bool_t AliAnalysisTaskMCParticleFilter::Notify()
{
  //
  // Implemented Notify() to read the cross sections
  // from pyxsec.root
  // 
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  TTree *tree = mgr->GetTree();
  Double_t xsection = 0;
  UInt_t   ntrials  = 0;
  if(tree){
    TFile *curfile = tree->GetCurrentFile();
    if (!curfile) {
      Error("Notify","No current file");
      return kFALSE;
    }

    TString fileName(curfile->GetName());
    TString datafile = mgr->GetInputEventHandler()->GetInputFileName();
    if (fileName.Contains(datafile)) {
        fileName.ReplaceAll(datafile, "pyxsec.root");
    }
    else if(fileName.Contains("AliESDs.root")){
        fileName.ReplaceAll("AliESDs.root", "pyxsec.root");
    }
    else if(fileName.Contains("AliAOD.root")){
        fileName.ReplaceAll("AliAOD.root", "pyxsec.root");
    }
    else if(fileName.Contains("galice.root")){
        // for running with galice and kinematics alone...                      
        fileName.ReplaceAll("galice.root", "pyxsec.root");
    }


    TFile *fxsec = TFile::Open(fileName.Data());
    if(!fxsec){
      AliInfo(Form("%s:%d %s not found in the Input",(char*)__FILE__,__LINE__,fileName.Data()));
      // not a severe condition we just do not have the information...
      return kTRUE;
    }
    TTree *xtree = (TTree*)fxsec->Get("Xsection");
    if(!xtree){
      AliWarning(Form("%s:%d tree not found in the pyxsec.root",(char*)__FILE__,__LINE__));
      return kTRUE;
    }
    xtree->SetBranchAddress("xsection",&xsection);
    xtree->SetBranchAddress("ntrials",&ntrials);
    xtree->GetEntry(0);
    ((TProfile*)(fHistList->FindObject("h1Xsec")))->Fill("<#sigma>",xsection);
  }
  return kTRUE;
}



//____________________________________________________________________
AliAnalysisTaskMCParticleFilter::AliAnalysisTaskMCParticleFilter(const char* name):
    AliAnalysisTaskSE(name),
    fTrackFilterMother(0x0),
    fAODMcHeader(0x0),
    fAODMcParticles(0x0),
    fHistList(0x0)
{
  // Default constructor
  DefineOutput(1, TList::Class());  
}

/*
//____________________________________________________________________
AliAnalysisTaskMCParticleFilter::AliAnalysisTaskMCParticleFilter(const AliAnalysisTaskMCParticleFilter& obj):
    AliAnalysisTaskSE(obj),
    fTrackFilterMother(obj.fTrackFilterMother)
{
  // Copy constructor
}
*/
//____________________________________________________________________
AliAnalysisTaskMCParticleFilter::~AliAnalysisTaskMCParticleFilter()
{

  if(fAODMcHeader){
    delete fAODMcHeader;
  }
  if(fAODMcParticles){
    fAODMcParticles->Delete();
    delete fAODMcParticles;
  }
}

/*
//____________________________________________________________________
AliAnalysisTaskMCParticleFilter& AliAnalysisTaskMCParticleFilter::operator=(const AliAnalysisTaskMCParticleFilter& other)
{
// Assignment
  if(this!=&other) {
    AliAnalysisTaskSE::operator=(other);
    fTrackFilterMother = other.fTrackFilterMother;
  }
  return *this;
}
*/
//____________________________________________________________________
void AliAnalysisTaskMCParticleFilter::UserCreateOutputObjects()
{
  // Create the output container
  

    if (OutputTree()&&fTrackFilterMother) 
	OutputTree()->GetUserInfo()->Add(fTrackFilterMother);

    // this part is mainly needed to set the MCEventHandler
    // to the AODHandler, this will not be needed when
    // AODHandler goes to ANALYSISalice
    // setting in the steering macro will not work on proof :(
    // so we have to do it in a task

    // the branch booking can also go into the AODHandler then


    // mcparticles
    fAODMcParticles = new TClonesArray("AliAODMCParticle", 0);
    fAODMcParticles->SetName(AliAODMCParticle::StdBranchName());
    AddAODBranch("TClonesArray",&fAODMcParticles);

    // MC header...
    fAODMcHeader = new AliAODMCHeader();
    fAODMcHeader->SetName(AliAODMCHeader::StdBranchName());
    AddAODBranch("AliAODMCHeader",&fAODMcHeader);    

    AliMCEventHandler *mcH = (AliMCEventHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetMCtruthEventHandler()); 
    AliAODHandler *aodH = dynamic_cast<AliAODHandler*> ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
    if(!aodH){
      AliWarning("Could not get AODHandler");
      return;
    }
    aodH->SetMCEventHandler(mcH);


    // these are histograms, for averaging and summing
    // do it via histograms to be PROOF-proof
    // which merges the results from different workers
    // histos are not saved reside only in memory
    
    

    fHistList = new TList();
    TProfile *h1Xsec = new TProfile("h1Xsec","xsec from pyxsec.root",1,0,1);
    h1Xsec->GetXaxis()->SetBinLabel(1,"<#sigma>");
    fHistList->Add(h1Xsec);
    TH1F* h1Trials = new TH1F("h1Trials","trials from MC header",1,0,1);
    h1Trials->GetXaxis()->SetBinLabel(1,"#sum{ntrials}");
    fHistList->Add(h1Trials);

    PostData(1,fHistList);
    
}

//____________________________________________________________________
void AliAnalysisTaskMCParticleFilter::UserExec(Option_t */*option*/)
{
  // Execute analysis for current event
  //
  
  // Fill AOD tracks from Kinematic stack
  PostData(1,fHistList);
  
  // get AliAOD Event 
  AliAODEvent* aod = AODEvent();
  if (!aod) {
      AliWarning("No Output Handler connected, doing nothing !") ;
      return;
  }

  AliMCEventHandler *mcH = (AliMCEventHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetMCtruthEventHandler()); 
  if(!mcH){ 
    AliWarning("No MC handler Found");
    return;
  }
  
  AliAODHandler *aodH = dynamic_cast<AliAODHandler*> ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
  if(!aodH){
    AliWarning("Could not get AODHandler");
    return;
  }



  // fetch the output 
  // Fill control histos

  // tmp array for holding the mctracks
  // need to set mother and duagther __before__
  // filling in the tree

  AliMCEvent *mcE = MCEvent();

  if(!mcE){
    AliWarning("No MC event Found");
    return;
  }

  Int_t np    = mcE->GetNumberOfTracks();
  Int_t nprim = mcE->GetNumberOfPrimaries();
  // TODO ADD MC VERTEX

  // Get the proper MC Collision Geometry
  AliGenEventHeader* mcEH = mcE->GenEventHeader();

  AliGenPythiaEventHeader *pyH  = dynamic_cast<AliGenPythiaEventHeader*>(mcEH);
  AliGenHijingEventHeader *hiH  = 0;
  AliCollisionGeometry    *colG = 0;
  AliGenDPMjetEventHeader *dpmH = 0;
  AliGenEventHeaderTunedPbPb *tunedH = 0;

  // it can be only one save some casts
  // assuming PYTHIA and HIJING are the most likely ones...
  if(!pyH){
      hiH = dynamic_cast<AliGenHijingEventHeader*>(mcEH);
      if(!hiH){
	  dpmH = dynamic_cast<AliGenDPMjetEventHeader*>(mcEH);
	  if(!dpmH){
	    tunedH = dynamic_cast<AliGenEventHeaderTunedPbPb*>(mcEH);
	  }
      }
  }
  
  if (hiH || dpmH) colG = dynamic_cast<AliCollisionGeometry*>(mcEH);

  // fetch the trials on a event by event basis, not from pyxsec.root otherwise 
  // we will get a problem when running on proof since Notify may be called 
  // more than once per file
  // consider storing this information in the AOD output via AliAODHandler
  Float_t ntrials = 0;
  if (!colG) {
    AliGenCocktailEventHeader *ccEH = dynamic_cast<AliGenCocktailEventHeader *>(mcEH);
    if (ccEH) {
      TList *genHeaders = ccEH->GetHeaders();
      for (int imch=0; imch<genHeaders->GetEntries(); imch++) {
	if(!pyH)pyH = dynamic_cast<AliGenPythiaEventHeader*>(genHeaders->At(imch));
	if(!hiH)hiH = dynamic_cast<AliGenHijingEventHeader*>(genHeaders->At(imch));
	if(!colG)colG = dynamic_cast<AliCollisionGeometry *>(genHeaders->At(imch));
	if(!dpmH)dpmH = dynamic_cast<AliGenDPMjetEventHeader*>(genHeaders->At(imch));
      }
    }
  }

  // take the trials from the p+p event
  if(hiH)ntrials = hiH->Trials();
  if(dpmH)ntrials = dpmH->Trials();
  if(pyH)ntrials = pyH->Trials();
  if(ntrials)((TH1F*)(fHistList->FindObject("h1Trials")))->Fill("#sum{ntrials}",ntrials); 
  



  if (colG) {
    fAODMcHeader->SetReactionPlaneAngle(colG->ReactionPlaneAngle());
    AliInfo(Form("Found Collision Geometry. Got Reaction Plane %lf\n", colG->ReactionPlaneAngle()));
  }
  else if(tunedH) {
    fAODMcHeader->SetReactionPlaneAngle(tunedH->GetPsi2());
    fAODMcHeader->SetCrossSection(tunedH->GetCentrality());
  }


  Int_t j=0;
  for (Int_t ip = 0; ip < np; ip++){
    AliMCParticle* mcpart = (AliMCParticle*) mcE->GetTrack(ip);
    TParticle* part = mcpart->Particle();
    Float_t xv = part->Vx();
    Float_t yv = part->Vy();
    Float_t zv = part->Vz();
    Float_t rv = TMath::Sqrt(xv * xv + yv * yv);
      
    Bool_t write = kFALSE;
    
    if (ip < nprim) {
      // Select the primary event
      write = kTRUE;
    } else if (part->GetUniqueID() == kPDecay) {
      // Particles from decay
      // Check that the decay chain ends at a primary particle
      AliMCParticle* mother = mcpart;
      Int_t imo = mcpart->GetMother();
      while((imo >= nprim) && (mother->Particle()->GetUniqueID() == kPDecay)) {
	mother =  (AliMCParticle*) mcE->GetTrack(imo);
	imo =  mother->GetMother();
      }
      // Select according to pseudorapidity and production point of primary ancestor
      if (imo < nprim)write = kTRUE;         
      // if(!Select(((AliMCParticle*) mcE->GetTrack(imo))->Particle(), rv, zv))write = kFALSE; // selection on eta and phi of the mother
    } else if (part->GetUniqueID() == kPPair) {
      // Now look for pair production
      Int_t imo = mcpart->GetMother();
      if (imo < nprim) {
	// Select, if the gamma is a primary
	write = kTRUE;
      } else {
	// Check if the gamma comes from the decay chain of a primary particle
	AliMCParticle* mother =  (AliMCParticle*) mcE->GetTrack(imo);
	imo = mother->GetMother();
	while((imo >= nprim) && (mother->Particle()->GetUniqueID() == kPDecay)) {
	  mother =   (AliMCParticle*) mcE->GetTrack(imo);
	  imo =  mother->GetMother();
	}
	// Select according to pseudorapidity and production point 
	if (imo < nprim && Select(mother->Particle(), rv, zv)) 
	  write = kTRUE;
      }
    }

    if (write) {
      if(mcH)mcH->SelectParticle(ip);
      j++;      
    }
  }

  /*

  // check varibales for charm need all daughters
  static int  iTaken = 0;
  static int  iAll = 0;
  static int  iCharm = 0;

  for (Int_t ip = 0; ip < np; ip++){
    AliMCParticle* mcpart = (AliMCParticle*) mcE->GetTrack(ip);
    TParticle* part = mcpart->Particle();
    // debug info to check fro charm daugthers
    if((TMath::Abs(part->GetPdgCode()))==411){
      iCharm++;
      Int_t d0 =  part->GetFirstDaughter();
      Int_t d1 =  part->GetLastDaughter();
      if(d0>0&&d1>0){
	for(int id = d0;id <= d1;id++){
	  iAll++;
	  if(mcH->IsParticleSelected(id)){
	    iTaken++;
	    Printf("> %d/%d Taken",id,nprim);
	    PrintMCParticle( (AliMCParticle*)mcE->GetTrack(id),id);
	  }
	  else{
	    Printf("> %d/%d NOT Taken",id,nprim);
	    PrintMCParticle( (AliMCParticle*)mcE->GetTrack(id),id);
	  }
	}
      }
    }// if charm
    AliInfo(Form("Taken daughters %d/%d of %d charm",iTaken,iAll,iCharm));
  }
  */


  aodH->StoreMCParticles();

  return;
}

void AliAnalysisTaskMCParticleFilter::Terminate(Option_t */*option*/){
  //
  // Terminate the execution save the PYTHIA x_section to the UserInfo()
  //


  fHistList = (TList*)GetOutputData(1);
  if(!fHistList){
    Printf("%s:%d Output list not found",(char*)__FILE__,__LINE__);
    return;
  }

  TProfile *hXsec = ((TProfile*)(fHistList->FindObject("h1Xsec")));
  TH1F* hTrials  = ((TH1F*)(fHistList->FindObject("h1Trials")));
  if(!hXsec)return;
  if(!hTrials)return;

  Float_t xsec = hXsec->GetBinContent(1);
  Float_t trials = hTrials->Integral();
  AliInfo(Form("Average -section %.4E and total number of trials %E",xsec,trials));

}

Bool_t AliAnalysisTaskMCParticleFilter::Select(TParticle* part, Float_t rv, Float_t zv)
{
  // Selection accoring to eta of the mother and production point
  // This has to be refined !!!!!!

  // Esp if we don't have collisison in the central barrel but e.g. beam gas
  //  return kTRUE;

  Float_t eta = part->Eta();

  // central barrel consider everything in the ITS...
  // large eta window for smeared vertex and SPD acceptance (2 at z = 0)
  // larger for V0s in the TPC
  //  if (TMath::Abs(eta) < 2.5 && rv < 250. && TMath::Abs(zv)<255)return kTRUE;

  if (TMath::Abs(eta) < 2.5 && rv < 170)return kTRUE;   

  // Andreas' Cuts
  //  if (TMath::Abs(eta) < 1. && rv < 170)return kTRUE;   



  // Muon arm
  if(eta > -4.2 && eta < -2.3 && zv > -500.)return kTRUE; // Muon arms

  // PMD acceptance 2.3 <= eta < = 3.5
  //  if(eta>2.0&&eta<3.7)return kTRUE; 

  return kFALSE;
 
}

void AliAnalysisTaskMCParticleFilter::PrintMCParticle(const AliMCParticle *mcp,Int_t np){
  
  const TParticle *p = mcp->Particle();
  Printf("Nr.%d --- Status %d ---- Mother1 %d Mother2 %d Daughter1 %d Daughte\
r2 %d ",
	 np,p->GetStatusCode(),p->GetMother(0),p->GetMother(1),p->GetDaughter \
	 (0),p->GetDaughter(1));
  Printf("Eta %3.3f Phi %3.3f ",p->Eta(),p->Phi());
  p->Print();
  Printf("---------------------------------------");
}
 AliAnalysisTaskMCParticleFilter.cxx:1
 AliAnalysisTaskMCParticleFilter.cxx:2
 AliAnalysisTaskMCParticleFilter.cxx:3
 AliAnalysisTaskMCParticleFilter.cxx:4
 AliAnalysisTaskMCParticleFilter.cxx:5
 AliAnalysisTaskMCParticleFilter.cxx:6
 AliAnalysisTaskMCParticleFilter.cxx:7
 AliAnalysisTaskMCParticleFilter.cxx:8
 AliAnalysisTaskMCParticleFilter.cxx:9
 AliAnalysisTaskMCParticleFilter.cxx:10
 AliAnalysisTaskMCParticleFilter.cxx:11
 AliAnalysisTaskMCParticleFilter.cxx:12
 AliAnalysisTaskMCParticleFilter.cxx:13
 AliAnalysisTaskMCParticleFilter.cxx:14
 AliAnalysisTaskMCParticleFilter.cxx:15
 AliAnalysisTaskMCParticleFilter.cxx:16
 AliAnalysisTaskMCParticleFilter.cxx:17
 AliAnalysisTaskMCParticleFilter.cxx:18
 AliAnalysisTaskMCParticleFilter.cxx:19
 AliAnalysisTaskMCParticleFilter.cxx:20
 AliAnalysisTaskMCParticleFilter.cxx:21
 AliAnalysisTaskMCParticleFilter.cxx:22
 AliAnalysisTaskMCParticleFilter.cxx:23
 AliAnalysisTaskMCParticleFilter.cxx:24
 AliAnalysisTaskMCParticleFilter.cxx:25
 AliAnalysisTaskMCParticleFilter.cxx:26
 AliAnalysisTaskMCParticleFilter.cxx:27
 AliAnalysisTaskMCParticleFilter.cxx:28
 AliAnalysisTaskMCParticleFilter.cxx:29
 AliAnalysisTaskMCParticleFilter.cxx:30
 AliAnalysisTaskMCParticleFilter.cxx:31
 AliAnalysisTaskMCParticleFilter.cxx:32
 AliAnalysisTaskMCParticleFilter.cxx:33
 AliAnalysisTaskMCParticleFilter.cxx:34
 AliAnalysisTaskMCParticleFilter.cxx:35
 AliAnalysisTaskMCParticleFilter.cxx:36
 AliAnalysisTaskMCParticleFilter.cxx:37
 AliAnalysisTaskMCParticleFilter.cxx:38
 AliAnalysisTaskMCParticleFilter.cxx:39
 AliAnalysisTaskMCParticleFilter.cxx:40
 AliAnalysisTaskMCParticleFilter.cxx:41
 AliAnalysisTaskMCParticleFilter.cxx:42
 AliAnalysisTaskMCParticleFilter.cxx:43
 AliAnalysisTaskMCParticleFilter.cxx:44
 AliAnalysisTaskMCParticleFilter.cxx:45
 AliAnalysisTaskMCParticleFilter.cxx:46
 AliAnalysisTaskMCParticleFilter.cxx:47
 AliAnalysisTaskMCParticleFilter.cxx:48
 AliAnalysisTaskMCParticleFilter.cxx:49
 AliAnalysisTaskMCParticleFilter.cxx:50
 AliAnalysisTaskMCParticleFilter.cxx:51
 AliAnalysisTaskMCParticleFilter.cxx:52
 AliAnalysisTaskMCParticleFilter.cxx:53
 AliAnalysisTaskMCParticleFilter.cxx:54
 AliAnalysisTaskMCParticleFilter.cxx:55
 AliAnalysisTaskMCParticleFilter.cxx:56
 AliAnalysisTaskMCParticleFilter.cxx:57
 AliAnalysisTaskMCParticleFilter.cxx:58
 AliAnalysisTaskMCParticleFilter.cxx:59
 AliAnalysisTaskMCParticleFilter.cxx:60
 AliAnalysisTaskMCParticleFilter.cxx:61
 AliAnalysisTaskMCParticleFilter.cxx:62
 AliAnalysisTaskMCParticleFilter.cxx:63
 AliAnalysisTaskMCParticleFilter.cxx:64
 AliAnalysisTaskMCParticleFilter.cxx:65
 AliAnalysisTaskMCParticleFilter.cxx:66
 AliAnalysisTaskMCParticleFilter.cxx:67
 AliAnalysisTaskMCParticleFilter.cxx:68
 AliAnalysisTaskMCParticleFilter.cxx:69
 AliAnalysisTaskMCParticleFilter.cxx:70
 AliAnalysisTaskMCParticleFilter.cxx:71
 AliAnalysisTaskMCParticleFilter.cxx:72
 AliAnalysisTaskMCParticleFilter.cxx:73
 AliAnalysisTaskMCParticleFilter.cxx:74
 AliAnalysisTaskMCParticleFilter.cxx:75
 AliAnalysisTaskMCParticleFilter.cxx:76
 AliAnalysisTaskMCParticleFilter.cxx:77
 AliAnalysisTaskMCParticleFilter.cxx:78
 AliAnalysisTaskMCParticleFilter.cxx:79
 AliAnalysisTaskMCParticleFilter.cxx:80
 AliAnalysisTaskMCParticleFilter.cxx:81
 AliAnalysisTaskMCParticleFilter.cxx:82
 AliAnalysisTaskMCParticleFilter.cxx:83
 AliAnalysisTaskMCParticleFilter.cxx:84
 AliAnalysisTaskMCParticleFilter.cxx:85
 AliAnalysisTaskMCParticleFilter.cxx:86
 AliAnalysisTaskMCParticleFilter.cxx:87
 AliAnalysisTaskMCParticleFilter.cxx:88
 AliAnalysisTaskMCParticleFilter.cxx:89
 AliAnalysisTaskMCParticleFilter.cxx:90
 AliAnalysisTaskMCParticleFilter.cxx:91
 AliAnalysisTaskMCParticleFilter.cxx:92
 AliAnalysisTaskMCParticleFilter.cxx:93
 AliAnalysisTaskMCParticleFilter.cxx:94
 AliAnalysisTaskMCParticleFilter.cxx:95
 AliAnalysisTaskMCParticleFilter.cxx:96
 AliAnalysisTaskMCParticleFilter.cxx:97
 AliAnalysisTaskMCParticleFilter.cxx:98
 AliAnalysisTaskMCParticleFilter.cxx:99
 AliAnalysisTaskMCParticleFilter.cxx:100
 AliAnalysisTaskMCParticleFilter.cxx:101
 AliAnalysisTaskMCParticleFilter.cxx:102
 AliAnalysisTaskMCParticleFilter.cxx:103
 AliAnalysisTaskMCParticleFilter.cxx:104
 AliAnalysisTaskMCParticleFilter.cxx:105
 AliAnalysisTaskMCParticleFilter.cxx:106
 AliAnalysisTaskMCParticleFilter.cxx:107
 AliAnalysisTaskMCParticleFilter.cxx:108
 AliAnalysisTaskMCParticleFilter.cxx:109
 AliAnalysisTaskMCParticleFilter.cxx:110
 AliAnalysisTaskMCParticleFilter.cxx:111
 AliAnalysisTaskMCParticleFilter.cxx:112
 AliAnalysisTaskMCParticleFilter.cxx:113
 AliAnalysisTaskMCParticleFilter.cxx:114
 AliAnalysisTaskMCParticleFilter.cxx:115
 AliAnalysisTaskMCParticleFilter.cxx:116
 AliAnalysisTaskMCParticleFilter.cxx:117
 AliAnalysisTaskMCParticleFilter.cxx:118
 AliAnalysisTaskMCParticleFilter.cxx:119
 AliAnalysisTaskMCParticleFilter.cxx:120
 AliAnalysisTaskMCParticleFilter.cxx:121
 AliAnalysisTaskMCParticleFilter.cxx:122
 AliAnalysisTaskMCParticleFilter.cxx:123
 AliAnalysisTaskMCParticleFilter.cxx:124
 AliAnalysisTaskMCParticleFilter.cxx:125
 AliAnalysisTaskMCParticleFilter.cxx:126
 AliAnalysisTaskMCParticleFilter.cxx:127
 AliAnalysisTaskMCParticleFilter.cxx:128
 AliAnalysisTaskMCParticleFilter.cxx:129
 AliAnalysisTaskMCParticleFilter.cxx:130
 AliAnalysisTaskMCParticleFilter.cxx:131
 AliAnalysisTaskMCParticleFilter.cxx:132
 AliAnalysisTaskMCParticleFilter.cxx:133
 AliAnalysisTaskMCParticleFilter.cxx:134
 AliAnalysisTaskMCParticleFilter.cxx:135
 AliAnalysisTaskMCParticleFilter.cxx:136
 AliAnalysisTaskMCParticleFilter.cxx:137
 AliAnalysisTaskMCParticleFilter.cxx:138
 AliAnalysisTaskMCParticleFilter.cxx:139
 AliAnalysisTaskMCParticleFilter.cxx:140
 AliAnalysisTaskMCParticleFilter.cxx:141
 AliAnalysisTaskMCParticleFilter.cxx:142
 AliAnalysisTaskMCParticleFilter.cxx:143
 AliAnalysisTaskMCParticleFilter.cxx:144
 AliAnalysisTaskMCParticleFilter.cxx:145
 AliAnalysisTaskMCParticleFilter.cxx:146
 AliAnalysisTaskMCParticleFilter.cxx:147
 AliAnalysisTaskMCParticleFilter.cxx:148
 AliAnalysisTaskMCParticleFilter.cxx:149
 AliAnalysisTaskMCParticleFilter.cxx:150
 AliAnalysisTaskMCParticleFilter.cxx:151
 AliAnalysisTaskMCParticleFilter.cxx:152
 AliAnalysisTaskMCParticleFilter.cxx:153
 AliAnalysisTaskMCParticleFilter.cxx:154
 AliAnalysisTaskMCParticleFilter.cxx:155
 AliAnalysisTaskMCParticleFilter.cxx:156
 AliAnalysisTaskMCParticleFilter.cxx:157
 AliAnalysisTaskMCParticleFilter.cxx:158
 AliAnalysisTaskMCParticleFilter.cxx:159
 AliAnalysisTaskMCParticleFilter.cxx:160
 AliAnalysisTaskMCParticleFilter.cxx:161
 AliAnalysisTaskMCParticleFilter.cxx:162
 AliAnalysisTaskMCParticleFilter.cxx:163
 AliAnalysisTaskMCParticleFilter.cxx:164
 AliAnalysisTaskMCParticleFilter.cxx:165
 AliAnalysisTaskMCParticleFilter.cxx:166
 AliAnalysisTaskMCParticleFilter.cxx:167
 AliAnalysisTaskMCParticleFilter.cxx:168
 AliAnalysisTaskMCParticleFilter.cxx:169
 AliAnalysisTaskMCParticleFilter.cxx:170
 AliAnalysisTaskMCParticleFilter.cxx:171
 AliAnalysisTaskMCParticleFilter.cxx:172
 AliAnalysisTaskMCParticleFilter.cxx:173
 AliAnalysisTaskMCParticleFilter.cxx:174
 AliAnalysisTaskMCParticleFilter.cxx:175
 AliAnalysisTaskMCParticleFilter.cxx:176
 AliAnalysisTaskMCParticleFilter.cxx:177
 AliAnalysisTaskMCParticleFilter.cxx:178
 AliAnalysisTaskMCParticleFilter.cxx:179
 AliAnalysisTaskMCParticleFilter.cxx:180
 AliAnalysisTaskMCParticleFilter.cxx:181
 AliAnalysisTaskMCParticleFilter.cxx:182
 AliAnalysisTaskMCParticleFilter.cxx:183
 AliAnalysisTaskMCParticleFilter.cxx:184
 AliAnalysisTaskMCParticleFilter.cxx:185
 AliAnalysisTaskMCParticleFilter.cxx:186
 AliAnalysisTaskMCParticleFilter.cxx:187
 AliAnalysisTaskMCParticleFilter.cxx:188
 AliAnalysisTaskMCParticleFilter.cxx:189
 AliAnalysisTaskMCParticleFilter.cxx:190
 AliAnalysisTaskMCParticleFilter.cxx:191
 AliAnalysisTaskMCParticleFilter.cxx:192
 AliAnalysisTaskMCParticleFilter.cxx:193
 AliAnalysisTaskMCParticleFilter.cxx:194
 AliAnalysisTaskMCParticleFilter.cxx:195
 AliAnalysisTaskMCParticleFilter.cxx:196
 AliAnalysisTaskMCParticleFilter.cxx:197
 AliAnalysisTaskMCParticleFilter.cxx:198
 AliAnalysisTaskMCParticleFilter.cxx:199
 AliAnalysisTaskMCParticleFilter.cxx:200
 AliAnalysisTaskMCParticleFilter.cxx:201
 AliAnalysisTaskMCParticleFilter.cxx:202
 AliAnalysisTaskMCParticleFilter.cxx:203
 AliAnalysisTaskMCParticleFilter.cxx:204
 AliAnalysisTaskMCParticleFilter.cxx:205
 AliAnalysisTaskMCParticleFilter.cxx:206
 AliAnalysisTaskMCParticleFilter.cxx:207
 AliAnalysisTaskMCParticleFilter.cxx:208
 AliAnalysisTaskMCParticleFilter.cxx:209
 AliAnalysisTaskMCParticleFilter.cxx:210
 AliAnalysisTaskMCParticleFilter.cxx:211
 AliAnalysisTaskMCParticleFilter.cxx:212
 AliAnalysisTaskMCParticleFilter.cxx:213
 AliAnalysisTaskMCParticleFilter.cxx:214
 AliAnalysisTaskMCParticleFilter.cxx:215
 AliAnalysisTaskMCParticleFilter.cxx:216
 AliAnalysisTaskMCParticleFilter.cxx:217
 AliAnalysisTaskMCParticleFilter.cxx:218
 AliAnalysisTaskMCParticleFilter.cxx:219
 AliAnalysisTaskMCParticleFilter.cxx:220
 AliAnalysisTaskMCParticleFilter.cxx:221
 AliAnalysisTaskMCParticleFilter.cxx:222
 AliAnalysisTaskMCParticleFilter.cxx:223
 AliAnalysisTaskMCParticleFilter.cxx:224
 AliAnalysisTaskMCParticleFilter.cxx:225
 AliAnalysisTaskMCParticleFilter.cxx:226
 AliAnalysisTaskMCParticleFilter.cxx:227
 AliAnalysisTaskMCParticleFilter.cxx:228
 AliAnalysisTaskMCParticleFilter.cxx:229
 AliAnalysisTaskMCParticleFilter.cxx:230
 AliAnalysisTaskMCParticleFilter.cxx:231
 AliAnalysisTaskMCParticleFilter.cxx:232
 AliAnalysisTaskMCParticleFilter.cxx:233
 AliAnalysisTaskMCParticleFilter.cxx:234
 AliAnalysisTaskMCParticleFilter.cxx:235
 AliAnalysisTaskMCParticleFilter.cxx:236
 AliAnalysisTaskMCParticleFilter.cxx:237
 AliAnalysisTaskMCParticleFilter.cxx:238
 AliAnalysisTaskMCParticleFilter.cxx:239
 AliAnalysisTaskMCParticleFilter.cxx:240
 AliAnalysisTaskMCParticleFilter.cxx:241
 AliAnalysisTaskMCParticleFilter.cxx:242
 AliAnalysisTaskMCParticleFilter.cxx:243
 AliAnalysisTaskMCParticleFilter.cxx:244
 AliAnalysisTaskMCParticleFilter.cxx:245
 AliAnalysisTaskMCParticleFilter.cxx:246
 AliAnalysisTaskMCParticleFilter.cxx:247
 AliAnalysisTaskMCParticleFilter.cxx:248
 AliAnalysisTaskMCParticleFilter.cxx:249
 AliAnalysisTaskMCParticleFilter.cxx:250
 AliAnalysisTaskMCParticleFilter.cxx:251
 AliAnalysisTaskMCParticleFilter.cxx:252
 AliAnalysisTaskMCParticleFilter.cxx:253
 AliAnalysisTaskMCParticleFilter.cxx:254
 AliAnalysisTaskMCParticleFilter.cxx:255
 AliAnalysisTaskMCParticleFilter.cxx:256
 AliAnalysisTaskMCParticleFilter.cxx:257
 AliAnalysisTaskMCParticleFilter.cxx:258
 AliAnalysisTaskMCParticleFilter.cxx:259
 AliAnalysisTaskMCParticleFilter.cxx:260
 AliAnalysisTaskMCParticleFilter.cxx:261
 AliAnalysisTaskMCParticleFilter.cxx:262
 AliAnalysisTaskMCParticleFilter.cxx:263
 AliAnalysisTaskMCParticleFilter.cxx:264
 AliAnalysisTaskMCParticleFilter.cxx:265
 AliAnalysisTaskMCParticleFilter.cxx:266
 AliAnalysisTaskMCParticleFilter.cxx:267
 AliAnalysisTaskMCParticleFilter.cxx:268
 AliAnalysisTaskMCParticleFilter.cxx:269
 AliAnalysisTaskMCParticleFilter.cxx:270
 AliAnalysisTaskMCParticleFilter.cxx:271
 AliAnalysisTaskMCParticleFilter.cxx:272
 AliAnalysisTaskMCParticleFilter.cxx:273
 AliAnalysisTaskMCParticleFilter.cxx:274
 AliAnalysisTaskMCParticleFilter.cxx:275
 AliAnalysisTaskMCParticleFilter.cxx:276
 AliAnalysisTaskMCParticleFilter.cxx:277
 AliAnalysisTaskMCParticleFilter.cxx:278
 AliAnalysisTaskMCParticleFilter.cxx:279
 AliAnalysisTaskMCParticleFilter.cxx:280
 AliAnalysisTaskMCParticleFilter.cxx:281
 AliAnalysisTaskMCParticleFilter.cxx:282
 AliAnalysisTaskMCParticleFilter.cxx:283
 AliAnalysisTaskMCParticleFilter.cxx:284
 AliAnalysisTaskMCParticleFilter.cxx:285
 AliAnalysisTaskMCParticleFilter.cxx:286
 AliAnalysisTaskMCParticleFilter.cxx:287
 AliAnalysisTaskMCParticleFilter.cxx:288
 AliAnalysisTaskMCParticleFilter.cxx:289
 AliAnalysisTaskMCParticleFilter.cxx:290
 AliAnalysisTaskMCParticleFilter.cxx:291
 AliAnalysisTaskMCParticleFilter.cxx:292
 AliAnalysisTaskMCParticleFilter.cxx:293
 AliAnalysisTaskMCParticleFilter.cxx:294
 AliAnalysisTaskMCParticleFilter.cxx:295
 AliAnalysisTaskMCParticleFilter.cxx:296
 AliAnalysisTaskMCParticleFilter.cxx:297
 AliAnalysisTaskMCParticleFilter.cxx:298
 AliAnalysisTaskMCParticleFilter.cxx:299
 AliAnalysisTaskMCParticleFilter.cxx:300
 AliAnalysisTaskMCParticleFilter.cxx:301
 AliAnalysisTaskMCParticleFilter.cxx:302
 AliAnalysisTaskMCParticleFilter.cxx:303
 AliAnalysisTaskMCParticleFilter.cxx:304
 AliAnalysisTaskMCParticleFilter.cxx:305
 AliAnalysisTaskMCParticleFilter.cxx:306
 AliAnalysisTaskMCParticleFilter.cxx:307
 AliAnalysisTaskMCParticleFilter.cxx:308
 AliAnalysisTaskMCParticleFilter.cxx:309
 AliAnalysisTaskMCParticleFilter.cxx:310
 AliAnalysisTaskMCParticleFilter.cxx:311
 AliAnalysisTaskMCParticleFilter.cxx:312
 AliAnalysisTaskMCParticleFilter.cxx:313
 AliAnalysisTaskMCParticleFilter.cxx:314
 AliAnalysisTaskMCParticleFilter.cxx:315
 AliAnalysisTaskMCParticleFilter.cxx:316
 AliAnalysisTaskMCParticleFilter.cxx:317
 AliAnalysisTaskMCParticleFilter.cxx:318
 AliAnalysisTaskMCParticleFilter.cxx:319
 AliAnalysisTaskMCParticleFilter.cxx:320
 AliAnalysisTaskMCParticleFilter.cxx:321
 AliAnalysisTaskMCParticleFilter.cxx:322
 AliAnalysisTaskMCParticleFilter.cxx:323
 AliAnalysisTaskMCParticleFilter.cxx:324
 AliAnalysisTaskMCParticleFilter.cxx:325
 AliAnalysisTaskMCParticleFilter.cxx:326
 AliAnalysisTaskMCParticleFilter.cxx:327
 AliAnalysisTaskMCParticleFilter.cxx:328
 AliAnalysisTaskMCParticleFilter.cxx:329
 AliAnalysisTaskMCParticleFilter.cxx:330
 AliAnalysisTaskMCParticleFilter.cxx:331
 AliAnalysisTaskMCParticleFilter.cxx:332
 AliAnalysisTaskMCParticleFilter.cxx:333
 AliAnalysisTaskMCParticleFilter.cxx:334
 AliAnalysisTaskMCParticleFilter.cxx:335
 AliAnalysisTaskMCParticleFilter.cxx:336
 AliAnalysisTaskMCParticleFilter.cxx:337
 AliAnalysisTaskMCParticleFilter.cxx:338
 AliAnalysisTaskMCParticleFilter.cxx:339
 AliAnalysisTaskMCParticleFilter.cxx:340
 AliAnalysisTaskMCParticleFilter.cxx:341
 AliAnalysisTaskMCParticleFilter.cxx:342
 AliAnalysisTaskMCParticleFilter.cxx:343
 AliAnalysisTaskMCParticleFilter.cxx:344
 AliAnalysisTaskMCParticleFilter.cxx:345
 AliAnalysisTaskMCParticleFilter.cxx:346
 AliAnalysisTaskMCParticleFilter.cxx:347
 AliAnalysisTaskMCParticleFilter.cxx:348
 AliAnalysisTaskMCParticleFilter.cxx:349
 AliAnalysisTaskMCParticleFilter.cxx:350
 AliAnalysisTaskMCParticleFilter.cxx:351
 AliAnalysisTaskMCParticleFilter.cxx:352
 AliAnalysisTaskMCParticleFilter.cxx:353
 AliAnalysisTaskMCParticleFilter.cxx:354
 AliAnalysisTaskMCParticleFilter.cxx:355
 AliAnalysisTaskMCParticleFilter.cxx:356
 AliAnalysisTaskMCParticleFilter.cxx:357
 AliAnalysisTaskMCParticleFilter.cxx:358
 AliAnalysisTaskMCParticleFilter.cxx:359
 AliAnalysisTaskMCParticleFilter.cxx:360
 AliAnalysisTaskMCParticleFilter.cxx:361
 AliAnalysisTaskMCParticleFilter.cxx:362
 AliAnalysisTaskMCParticleFilter.cxx:363
 AliAnalysisTaskMCParticleFilter.cxx:364
 AliAnalysisTaskMCParticleFilter.cxx:365
 AliAnalysisTaskMCParticleFilter.cxx:366
 AliAnalysisTaskMCParticleFilter.cxx:367
 AliAnalysisTaskMCParticleFilter.cxx:368
 AliAnalysisTaskMCParticleFilter.cxx:369
 AliAnalysisTaskMCParticleFilter.cxx:370
 AliAnalysisTaskMCParticleFilter.cxx:371
 AliAnalysisTaskMCParticleFilter.cxx:372
 AliAnalysisTaskMCParticleFilter.cxx:373
 AliAnalysisTaskMCParticleFilter.cxx:374
 AliAnalysisTaskMCParticleFilter.cxx:375
 AliAnalysisTaskMCParticleFilter.cxx:376
 AliAnalysisTaskMCParticleFilter.cxx:377
 AliAnalysisTaskMCParticleFilter.cxx:378
 AliAnalysisTaskMCParticleFilter.cxx:379
 AliAnalysisTaskMCParticleFilter.cxx:380
 AliAnalysisTaskMCParticleFilter.cxx:381
 AliAnalysisTaskMCParticleFilter.cxx:382
 AliAnalysisTaskMCParticleFilter.cxx:383
 AliAnalysisTaskMCParticleFilter.cxx:384
 AliAnalysisTaskMCParticleFilter.cxx:385
 AliAnalysisTaskMCParticleFilter.cxx:386
 AliAnalysisTaskMCParticleFilter.cxx:387
 AliAnalysisTaskMCParticleFilter.cxx:388
 AliAnalysisTaskMCParticleFilter.cxx:389
 AliAnalysisTaskMCParticleFilter.cxx:390
 AliAnalysisTaskMCParticleFilter.cxx:391
 AliAnalysisTaskMCParticleFilter.cxx:392
 AliAnalysisTaskMCParticleFilter.cxx:393
 AliAnalysisTaskMCParticleFilter.cxx:394
 AliAnalysisTaskMCParticleFilter.cxx:395
 AliAnalysisTaskMCParticleFilter.cxx:396
 AliAnalysisTaskMCParticleFilter.cxx:397
 AliAnalysisTaskMCParticleFilter.cxx:398
 AliAnalysisTaskMCParticleFilter.cxx:399
 AliAnalysisTaskMCParticleFilter.cxx:400
 AliAnalysisTaskMCParticleFilter.cxx:401
 AliAnalysisTaskMCParticleFilter.cxx:402
 AliAnalysisTaskMCParticleFilter.cxx:403
 AliAnalysisTaskMCParticleFilter.cxx:404
 AliAnalysisTaskMCParticleFilter.cxx:405
 AliAnalysisTaskMCParticleFilter.cxx:406
 AliAnalysisTaskMCParticleFilter.cxx:407
 AliAnalysisTaskMCParticleFilter.cxx:408
 AliAnalysisTaskMCParticleFilter.cxx:409
 AliAnalysisTaskMCParticleFilter.cxx:410
 AliAnalysisTaskMCParticleFilter.cxx:411
 AliAnalysisTaskMCParticleFilter.cxx:412
 AliAnalysisTaskMCParticleFilter.cxx:413
 AliAnalysisTaskMCParticleFilter.cxx:414
 AliAnalysisTaskMCParticleFilter.cxx:415
 AliAnalysisTaskMCParticleFilter.cxx:416
 AliAnalysisTaskMCParticleFilter.cxx:417
 AliAnalysisTaskMCParticleFilter.cxx:418
 AliAnalysisTaskMCParticleFilter.cxx:419
 AliAnalysisTaskMCParticleFilter.cxx:420
 AliAnalysisTaskMCParticleFilter.cxx:421
 AliAnalysisTaskMCParticleFilter.cxx:422
 AliAnalysisTaskMCParticleFilter.cxx:423
 AliAnalysisTaskMCParticleFilter.cxx:424
 AliAnalysisTaskMCParticleFilter.cxx:425
 AliAnalysisTaskMCParticleFilter.cxx:426
 AliAnalysisTaskMCParticleFilter.cxx:427
 AliAnalysisTaskMCParticleFilter.cxx:428
 AliAnalysisTaskMCParticleFilter.cxx:429
 AliAnalysisTaskMCParticleFilter.cxx:430
 AliAnalysisTaskMCParticleFilter.cxx:431
 AliAnalysisTaskMCParticleFilter.cxx:432
 AliAnalysisTaskMCParticleFilter.cxx:433
 AliAnalysisTaskMCParticleFilter.cxx:434
 AliAnalysisTaskMCParticleFilter.cxx:435
 AliAnalysisTaskMCParticleFilter.cxx:436
 AliAnalysisTaskMCParticleFilter.cxx:437
 AliAnalysisTaskMCParticleFilter.cxx:438
 AliAnalysisTaskMCParticleFilter.cxx:439
 AliAnalysisTaskMCParticleFilter.cxx:440
 AliAnalysisTaskMCParticleFilter.cxx:441
 AliAnalysisTaskMCParticleFilter.cxx:442
 AliAnalysisTaskMCParticleFilter.cxx:443
 AliAnalysisTaskMCParticleFilter.cxx:444
 AliAnalysisTaskMCParticleFilter.cxx:445
 AliAnalysisTaskMCParticleFilter.cxx:446
 AliAnalysisTaskMCParticleFilter.cxx:447
 AliAnalysisTaskMCParticleFilter.cxx:448
 AliAnalysisTaskMCParticleFilter.cxx:449
 AliAnalysisTaskMCParticleFilter.cxx:450
 AliAnalysisTaskMCParticleFilter.cxx:451
 AliAnalysisTaskMCParticleFilter.cxx:452
 AliAnalysisTaskMCParticleFilter.cxx:453
 AliAnalysisTaskMCParticleFilter.cxx:454
 AliAnalysisTaskMCParticleFilter.cxx:455
 AliAnalysisTaskMCParticleFilter.cxx:456
 AliAnalysisTaskMCParticleFilter.cxx:457
 AliAnalysisTaskMCParticleFilter.cxx:458
 AliAnalysisTaskMCParticleFilter.cxx:459
 AliAnalysisTaskMCParticleFilter.cxx:460
 AliAnalysisTaskMCParticleFilter.cxx:461
 AliAnalysisTaskMCParticleFilter.cxx:462
 AliAnalysisTaskMCParticleFilter.cxx:463
 AliAnalysisTaskMCParticleFilter.cxx:464
 AliAnalysisTaskMCParticleFilter.cxx:465
 AliAnalysisTaskMCParticleFilter.cxx:466
 AliAnalysisTaskMCParticleFilter.cxx:467
 AliAnalysisTaskMCParticleFilter.cxx:468
 AliAnalysisTaskMCParticleFilter.cxx:469
 AliAnalysisTaskMCParticleFilter.cxx:470
 AliAnalysisTaskMCParticleFilter.cxx:471
 AliAnalysisTaskMCParticleFilter.cxx:472
 AliAnalysisTaskMCParticleFilter.cxx:473
 AliAnalysisTaskMCParticleFilter.cxx:474
 AliAnalysisTaskMCParticleFilter.cxx:475
 AliAnalysisTaskMCParticleFilter.cxx:476
 AliAnalysisTaskMCParticleFilter.cxx:477
 AliAnalysisTaskMCParticleFilter.cxx:478
 AliAnalysisTaskMCParticleFilter.cxx:479
 AliAnalysisTaskMCParticleFilter.cxx:480
 AliAnalysisTaskMCParticleFilter.cxx:481
 AliAnalysisTaskMCParticleFilter.cxx:482
 AliAnalysisTaskMCParticleFilter.cxx:483
 AliAnalysisTaskMCParticleFilter.cxx:484
 AliAnalysisTaskMCParticleFilter.cxx:485
 AliAnalysisTaskMCParticleFilter.cxx:486
 AliAnalysisTaskMCParticleFilter.cxx:487
 AliAnalysisTaskMCParticleFilter.cxx:488
 AliAnalysisTaskMCParticleFilter.cxx:489
 AliAnalysisTaskMCParticleFilter.cxx:490
 AliAnalysisTaskMCParticleFilter.cxx:491
 AliAnalysisTaskMCParticleFilter.cxx:492
 AliAnalysisTaskMCParticleFilter.cxx:493
 AliAnalysisTaskMCParticleFilter.cxx:494
 AliAnalysisTaskMCParticleFilter.cxx:495