ROOT logo
// $Id$

//**************************************************************************
//* This file is property of and copyright by the ALICE Project            * 
//* ALICE Experiment at CERN, All rights reserved.                         *
//*                                                                        *
//* Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no>        *
//*                  Sedat Altinpinar <Sedat.Altinpinar@cern.ch>           *
//*                  Hege Erdal       <hege.erdal@gmail.com>               *
//*                                                                        *
//* 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.                  *
//**************************************************************************

/// @file   AliAnalysisTaskDxHFEParticleSelection.cxx
/// @author Sedat Altinpinar, Hege Erdal, Matthias Richter
/// @date   2012-03-19
/// @brief  AnalysisTask electron selection for D0 - HFE correlation
///

#include "AliAnalysisTaskDxHFEParticleSelection.h"
#include "AliDxHFEParticleSelection.h"
#include "AliDxHFEParticleSelectionD0.h"
#include "AliDxHFEParticleSelectionMCD0.h"
#include "AliDxHFEParticleSelectionEl.h"
#include "AliDxHFEParticleSelectionMCEl.h"
#include "AliAnalysisManager.h"
#include "AliAnalysisCuts.h"
#include "AliLog.h"
#include "TH1F.h"
#include "AliESDInputHandler.h"
#include "AliAODHandler.h"
#include "AliAODRecoDecayHF2Prong.h"
#include "AliRDHFCutsD0toKpi.h"
#include "AliHFEtools.h"
#include "TChain.h"
#include "TSystem.h"
#include "TObjArray.h"
#include "AliAODMCParticle.h"
#include "TFile.h"
#include "TList.h"
#include "TObjArray.h"
#include <memory>

using namespace std;

/// ROOT macro for the implementation of ROOT specific class methods
ClassImp(AliAnalysisTaskDxHFEParticleSelection)

AliAnalysisTaskDxHFEParticleSelection::AliAnalysisTaskDxHFEParticleSelection(const char* opt)
  : AliAnalysisTaskSE("AliAnalysisTaskDxHFEParticleSelection")
  , fOutput(0)
  , fOption(opt)
  , fCutList(NULL)
  , fCutsD0(NULL)
  , fSelector(NULL)
  , fUseMC(kFALSE)
  , fFillOnlyD0D0bar(0)
  , fSelectedTracks(NULL)
  , fMCArray(NULL)
  , fParticleType(kD0)
  , fSystem(0)
  , fUseKine(kFALSE)
{
  // constructor
  //
  //

  DefineSlots();
}

int AliAnalysisTaskDxHFEParticleSelection::DefineSlots()
{
  // define the data slots
  DefineInput(0, TChain::Class());
  DefineOutput(1, TList::Class());
  DefineOutput(2, TList::Class());
  return 0;
}

AliAnalysisTaskDxHFEParticleSelection::~AliAnalysisTaskDxHFEParticleSelection()
{
  // destructor
  //
  //

  // histograms are in the output list and deleted when the output
  // list is deleted by the TSelector dtor

  if (fOutput && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
    delete fOutput;
    fOutput = 0;
  }

  if (fSelector) {
    fSelector->Clear();
    delete fSelector;
    fSelector=NULL;
  }
  if(fSelectedTracks){
    delete fSelectedTracks;
    fSelectedTracks=NULL;
  }
  if(fMCArray) delete fMCArray;
  fMCArray=NULL;
  // external object, do not delete
  fCutsD0=NULL;

}

void AliAnalysisTaskDxHFEParticleSelection::UserCreateOutputObjects()
{
  // create result objects and add to output list

  Int_t iResult=0;

  fOutput = new TList;
  fOutput->SetOwner();

  ParseArguments(fOption.Data());

  // REVIEW: this has only effect if the list is deleted, it should
  // be done where the list is created, in any case, all objects of the
  // list are presumably external objects, they should not be deleted in
  // this class
  fCutList->SetOwner(); // NOt sure if needed

  // setting up for D0s
  if(fParticleType==kD0){

    if(fUseMC) fSelector=new AliDxHFEParticleSelectionMCD0(fOption);
    else fSelector=new AliDxHFEParticleSelectionD0(fOption);
    fSelector->SetCuts(fCutList,AliDxHFEParticleSelectionD0::kCutList);
    iResult=fSelector->Init();

    TObject *obj=NULL;
    TIter iter(fCutList);
    while((obj = iter())){
      fCutsD0=dynamic_cast<AliRDHFCuts*>(obj);
      if (!fCutsD0) {
	AliError(Form("Cut object is not of required type AliRDHFCuts but %s", obj->ClassName()));
      }
    }
  }
  

  // Setting up for electrons
  if(fParticleType==kElectron){
    if(fUseMC) fSelector=new AliDxHFEParticleSelectionMCEl(fOption);
    else fSelector=new AliDxHFEParticleSelectionEl(fOption);
    fSelector->SetCuts(fCutList, AliDxHFEParticleSelectionEl::kCutList);
    iResult=fSelector->Init();

    // If running on electrons, for now use RDHFCuts for event selection. 
    // Set up default cut object:
    AliRDHFCutsD0toKpi* cuts=new AliRDHFCutsD0toKpi();
    cuts->SetStandardCutsPP2010();
    fCutsD0=cuts;
  }

  if (iResult<0) {
    AliFatal(Form("initialization of worker class instance fElectrons failed with error %d", iResult));
  }


  // Retrieving the list containing histos and THnSparse
  // and storing them instead of fSelector
  // Fix to be able to merge
  TList *list =(TList*)fSelector->GetControlObjects();
  TObject *obj=NULL;

  TIter next(list);
  while((obj = next())){
    fOutput->Add(obj);
  }

  // all tasks must post data once for all outputs
  PostData(1, fOutput);
  PostData(2, fCutList);
}

void AliAnalysisTaskDxHFEParticleSelection::UserExec(Option_t* /*option*/)
{
  // process the event

  // TODO: implement correct input, this is likely not to be the
  // ESD
  TObject* pInput=InputEvent();
  if (!pInput) {
    AliError("failed to get input");
    return;
  }

  // check if input is an ESD
  AliVEvent *pEvent = dynamic_cast<AliVEvent*>(pInput);
  TClonesArray *inputArray=0;

  if(!pEvent && AODEvent() && IsStandardAOD()) { //Not sure if this is needed.. Keep it for now. 
    // In case there is an AOD handler writing a standard AOD, use the AOD 
    // event in memory rather than the input (ESD) event.    
    pEvent = AODEvent();
    // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root)
    // have to taken from the AOD event hold by the AliAODExtension
    AliAODHandler* aodHandler = (AliAODHandler*) 
      ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
    
    if(aodHandler->GetExtensions()) {
      AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root");
      AliAODEvent* aodFromExt = ext->GetAOD();
      inputArray=(TClonesArray*)aodFromExt->GetList()->FindObject("D0toKpi");
    }
  } else if(pEvent) {
    inputArray=(TClonesArray*)pEvent->GetList()->FindObject("D0toKpi");
  }
  if(!inputArray || !pEvent) {
    AliError("Input branch not found!\n");
    return;
  }
  // fix for temporary bug in ESDfilter
  // the AODs with null vertex pointer didn't pass the PhysSel
  if(!pEvent->GetPrimaryVertex() || TMath::Abs(pEvent->GetMagneticField())<0.001){
    AliDebug(2,"Rejected at GetPrimaryvertex");
    return;
  }

  fSelector->HistogramEventProperties(AliDxHFEParticleSelection::kEventsAll);

  //At the moment: Use AliRDHFCuts for event selection
  AliRDHFCuts* cutsd0=dynamic_cast<AliRDHFCuts*>(fCutsD0);
  if (!cutsd0) return; // Fatal thrown already in initialization

  if(!cutsd0->IsEventSelected(pEvent)) {
    AliDebug(2,"rejected at IsEventSelected");
    return;
  }

  fSelector->HistogramEventProperties(AliDxHFEParticleSelection::kEventsSel);

  if(fUseMC && fUseKine){
    fMCArray = dynamic_cast<TObjArray*>(pEvent->FindListObject(AliAODMCParticle::StdBranchName()));
    if(!fMCArray){
      AliError("Array of MC particles not found");
      return;
    }
  }

  if (fSelectedTracks) delete fSelectedTracks;

  if(fParticleType==kElectron){
    // Gets the PID response from the analysis manager
    AliPIDResponse *pidResponse = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler())->GetPIDResponse();
    if(!pidResponse){
      // TODO: consider issuing fatal instead of debug in case pidresponse not available
      AliDebug(1, "Using default PID Response");
      pidResponse = AliHFEtools::GetDefaultPID(kFALSE, fInputEvent->IsA() == AliAODEvent::Class()); 
    }
  
    // Fetching the PID objects from the list, checks if the objects are AliHFEpids
    // If so, checks if they are initialized and also sets the pidresponse
    TObject *obj=NULL;
    TIter next(fCutList);
    while((obj = next())){
      if(strcmp(obj->ClassName(),"AliHFEpid")==0){
	AliHFEpid* pidObj=(AliHFEpid*)obj;
	if(!pidObj->IsInitialized()){
	  AliWarning("PID not initialised, get from Run no");
	  pidObj->InitializePID(pEvent->GetRunNumber());
	}
	pidObj->SetPIDResponse(pidResponse);
      }
    }

    // Also sends the pidresponse to the particle selection class for electron
    fSelector->SetPIDResponse(pidResponse); 

    if(fUseKine) fSelectedTracks=(fSelector->Select(fMCArray, pEvent));
    else fSelectedTracks=(fSelector->Select(pEvent));
  }
  else{
    if(fUseKine)  fSelectedTracks=(fSelector->Select(fMCArray,pEvent));
    else fSelectedTracks=(fSelector->Select(inputArray,pEvent));
  }

  Int_t nSelected = fSelectedTracks->GetEntriesFast();
  if(nSelected>0)
    fSelector->HistogramEventProperties(AliDxHFEParticleSelection::kEventsWithParticle);

  PostData(1, fOutput);
}

int AliAnalysisTaskDxHFEParticleSelection::ParseArguments(const char* arguments)
{
  // parse arguments and set internal flags
  TString strArguments(arguments);
  auto_ptr<TObjArray> tokens(strArguments.Tokenize(" "));
  if (!tokens.get()) return 0;

  TIter next(tokens.get());
  TObject* token;
  while ((token=next())) {
    TString argument=token->GetName();
   
    if (argument.BeginsWith("mc")) {
      fUseMC=true;
      continue;
    }
    if (argument.BeginsWith("system=")) {
      argument.ReplaceAll("system=", "");
      if (argument.CompareTo("pp")==0) {fSystem=0; }
      else if (argument.CompareTo("Pb-Pb")==0){ fSystem=1;}
      else if (argument.CompareTo("p-Pb")==0){ fSystem=2;}
      else {
	AliWarning(Form("can not set collision system, unknown parameter '%s'", argument.Data()));
	// TODO: check what makes sense
	fSystem=0;
      }
      continue;
    }
    if (argument.BeginsWith("usekine") || argument.BeginsWith("kine")) {
      fUseKine=true;
      AliInfo("Running on MC stack");
      continue;
    }
    if (argument.BeginsWith("fillD0scheme=")){
      argument.ReplaceAll("fillD0scheme=", "");
      if (argument.CompareTo("both")==0){ fFillOnlyD0D0bar=0;}
      else if (argument.CompareTo("D0")==0){ fFillOnlyD0D0bar=1;}
      else if (argument.CompareTo("D0bar")==0){ fFillOnlyD0D0bar=2;}
      else {
	AliWarning(Form("can not set D0 filling scheme, unknown parameter '%s'", argument.Data()));
	fFillOnlyD0D0bar=0;
      }
      continue;
    }
    if (argument.BeginsWith("particle=")){
      argument.ReplaceAll("particle=","");     
      if (argument.CompareTo("D0")==0){ fParticleType=kD0; AliInfo("Running over D0s ");}
      else if (argument.CompareTo("electron")==0){ fParticleType=kElectron; AliInfo("Running over Electrons ");}
      else{
	AliWarning(Form("can not set particle, unknown parameter '%s'. Particle set to D0", argument.Data()));
	fParticleType=kD0;
      }
      continue;
    }
    AliWarning(Form("unknown argument '%s'", argument.Data()));
      
  }

  return 0;
}

void AliAnalysisTaskDxHFEParticleSelection::FinishTaskOutput()
{
  // end of the processing
}

void AliAnalysisTaskDxHFEParticleSelection::Terminate(Option_t *)
{
  // last action on the client
  fOutput = dynamic_cast<TList*> (GetOutputData(1));
  if (!fOutput) {
    AliFatal("failed to get output container");
    return;
  }

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