ROOT logo
//-*- Mode: C++ -*-
// $Id: AddTaskDxHFECorrelation.C 60786 2013-02-08 18:16:19Z arossi $

#ifndef __CINT__
//#include "AliESDtrackCuts.h"
//#include "AliAnalysisCuts.h"
//#include "AliFlowTrackSimple.h"      // added as hint for hidden library dependency to libPWGflowBase
//#include "AliFlowCandidateTrack.h"   // added as hint for hidden library dependency to libPWGflowTasks
//#include "AliCFContainer.h"          // added as hint for hidden library dependency to libCORRFW
//#include "AliAODRecoDecayHF2Prong.h" // added as hint for hidden library dependency to libPWGHFvertexingHF
#include "AliHFAssociatedTrackCuts.h"
#include "AliAnalysisTaskDxHFEParticleSelection.h"
#include "AliDxHFEParticleSelection.h"
#include "AliAnalysisManager.h"
#include "AliAnalysisDataContainer.h"
#include "AliHFEcuts.h"
#include "AliLog.h"
#include "TObject.h"
#include "TClass.h"
#include "TDirectory.h"
#include "TROOT.h"
#include "AliRDHFCutsD0toKpi.h"
using namespace std;
#endif

const char* poolInfoName="PoolInfo";
AliAnalysisCuts* createDefaultPoolConfig();

/// @file   AddTaskDxHFEParticleSelection.C
/// @author Matthias.Richter@ift.uib.no, Hege.Erdal@ift.uib.no
/// @date   2013-02-12
/// @brief  Add the ParticleSelection task to the manager
///
int AddTaskDxHFEParticleSelection(TString configuration="",TString analysisName="PWGHFCJParticleSelection")
{

  //First check to see if user wants to see help
  if (configuration.BeginsWith("help") || 
      configuration.BeginsWith("--help") || 
      configuration.BeginsWith("-h") || 
      configuration.BeginsWith("options") ) {
    cout <<"\n\n============================================" << endl;
    cout << "Keywords for AddTaskDxHFEParticleSelection.C:\n"
	 << "file=                         - Filename to store output in\n"
	 << "name=                         - Name of analysis, will correspond to directory inside the file \n"
	 << "cutname=                      - Filename where information on event pool for event-mixing is stored (if use external file)\n"
	 << "runD0MassReference            - If you also want to include D2H task for D0selection (for comparison purposes)\n"
	 << "mc                            - Run on MC\n"
	 << "PbPb                          - Run on PbPbn"
	 << "usekine                       - To run on kinematical level \n"
	 << "particle=D0/electron          - Which particle to run analysis on \n"
	 << "\nD0 settings: \n"
	 << "fillD0scheme=both/D0/D0bar    - Which fillsheme to use for D0\n"
	 << "\nelectron settings: \n"
	 << "useinvmasscut                 - If you want to use invariant mass cut (default is 100MeV/c)\n" 
	 << "invmasscut=                   - If you want to specify a different invariant mass cut \n"
	 << "extraname=                    - extraname for directory and list if you run several tasks at once\n"
	 << "tpcclusters=                  - How many TPC clusters to use on single track cuts for electrons (default=120)\n"
	 << "itsclusters=                  - How many itsclusters to be used in single track cuts for electrons (default=4) \n"
	 << "itsreq=                       - (kFirst,kAny,kNone) Which ITSpixel requirement you want to impose\n"
	 << "elmcreco=                     - (aftertrackcuts/aftertofpid/afterfullpid) Where you want to stop in track selection to look for electrons for mc \n\n";
    return;
  } 

  AliAnalysisManager *pManager = AliAnalysisManager::GetAnalysisManager();
  if (!pManager) {
    ::Error("AddTaskDxHFEParticleSelection", "No analysis manager to connect to.");
    return;
  }

  Bool_t bUseMC=kFALSE;
  TString ofilename;
  Int_t system=0;
  TString taskOptions;
  Bool_t bUseKine=kFALSE;
  Bool_t bUseMCReco=kFALSE;
  Int_t NrTPCclusters=120; // quick fix for problems sending track cut objects in some instances to task
  Int_t NrITSclusters=4; // quick fix for problem sending hfe track cut object to addtask
  Int_t ITSreq=AliHFEextraCuts::kFirst;
  Int_t Particle=AliAnalysisTaskDxHFEParticleSelection::kD0;
  TString extraname="";

  // look for configuration arguments
  cout << endl << "===============================================" << endl;
  cout << "Setting up Particle Selection task: " << configuration << endl;

  // look for configuration arguments if nothing specified
  // in the function call
  if (configuration.IsNull() && gDirectory) {
    const char* confObjectName="run_single_task_configuration";
    TObject* confObject=gDirectory->FindObject(confObjectName);
    if (confObject) {
      configuration=confObject->GetTitle();
    }
  }
  {// deprecated, but keep for formatting
    {// deprecated, but keep for formatting
      TObjArray* tokens=configuration.Tokenize(" ");
      if (tokens) {
	TIter next(tokens);
	TObject* token;
	while ((token=next())) {
	  TString argument=token->GetName();
	  if (argument.BeginsWith("file=")) {
	    argument.ReplaceAll("file=", "");
	    ofilename=argument;
	  } else if (argument.BeginsWith("name=")) {
	    argument.ReplaceAll("name=", "");
	    analysisName=" "+argument+"PartSel";
	  }
	  if (argument.BeginsWith("mc")) {
	    bUseMC=kTRUE;
	    taskOptions+=" mc";
	  }
	  if (argument.BeginsWith("PbPb") || argument.BeginsWith("Pb-Pb")) {
	    system=1;
	    taskOptions+=" system=Pb-Pb";
	    cout << "Use PbPb" << endl;
	  }
	  if(argument.BeginsWith("tpcclusters=")){
	    argument.ReplaceAll("tpcclusters=", "");
	    NrTPCclusters=argument.Atoi();
	    ::Info("AddTaskDxHFEParticleSelection",Form("Setting nr TPC clusters to %d",NrTPCclusters));
	  }
	  if (argument.BeginsWith("fillD0scheme=")){
	    argument.ReplaceAll("fillD0scheme=","");
	    taskOptions+=" fillD0scheme="+argument;
	  }
	  if(argument.BeginsWith("elmcreco")){
	    bUseMCReco=kTRUE;
	    taskOptions+=" "+argument;
	  }
	  if (argument.BeginsWith("usekine") ||argument.BeginsWith("kine")) {
	    bUseKine=kTRUE;
	    taskOptions+=" usekine";
	  }
	  if (argument.BeginsWith("particle=")) {
	    taskOptions+=" "+argument;
	    argument.ReplaceAll("particle=","");
	    if (argument.CompareTo("D0")==0){ 
	      Particle=AliAnalysisTaskDxHFEParticleSelection::kD0; 
	    }
	    else if (argument.CompareTo("electron")==0){ 
	      Particle=AliAnalysisTaskDxHFEParticleSelection::kElectron; 
	    }	    
	  }
	  if(argument.BeginsWith("useinvmasscut"))
	    taskOptions+=" "+argument;
	  if(argument.BeginsWith("twoselectedinvmasscut"))
	    taskOptions+=" "+argument;
	  if(argument.BeginsWith("invmasscut="))
	    taskOptions+=" "+argument;
	  if(argument.BeginsWith("impactparamcut"))
	    taskOptions+=" "+argument;
	  if(argument.BeginsWith("etacut"))
	    taskOptions+=" "+argument;
	  if(argument.BeginsWith("storelastcutstep"))
	    taskOptions+=" "+argument;
	  if(argument.BeginsWith("itsclusters=")){
	    argument.ReplaceAll("itsclusters=", "");
	    NrITSclusters=argument.Atoi();
	  }
	  if(argument.BeginsWith("itsreq=")){
	    argument.ReplaceAll("itsreq=", "");
	    if(argument.CompareTo("kFirst")==0) ITSreq=AliHFEextraCuts::kFirst;
	    else if(argument.CompareTo("kAny")==0) ITSreq=AliHFEextraCuts::kAny;
	    else if(argument.CompareTo("kNone")==0) ITSreq=AliHFEextraCuts::kNone;
	  }
	  if(argument.BeginsWith("extraname=")){
	    argument.ReplaceAll("extraname=", "");
	    extraname=argument;
	  }
	}
	    
      }
      delete tokens;
    }
  }

  if(bUseMCReco && bUseKine) {
    ::Fatal("AddTaskDxHFECorrelation","CAN'T SET BOTH usekine AND elmcreco AT THE SAME TIME");
    return;
  }

  // check for existence of PID task and add if not available
  const char* pidTaskName="PIDResponseTask";
  const char* pidTaskMacro="$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C";
  AliAnalysisTask* pidTask=pManager->GetTask(pidTaskName);
  if (!pidTask) {
    gROOT->LoadMacro(pidTaskMacro);
    TString pidFunction;
    pidFunction.Form("AddTaskPIDResponse(%d, %d)", bUseMC, kTRUE);
    gROOT->ProcessLine(pidFunction);
    if (pManager->GetTask(pidTaskName)==NULL) {
      ::Error("AddTaskDxHFEParticleSelection", Form("failed to add PID task '%s' from macro '%s'",
					      pidTaskName, pidTaskMacro));
      return 0;
    }
  } else {
    // TODO: would like to check if the PID task was set up
    // with consistent parameters, however there are no getters at the moment
    ::Info("AddTaskDxHFEParticleSelection", Form("PID task '%s' already existing", pidTaskName));
  }

  if (ofilename.IsNull()) ofilename=AliAnalysisManager::GetCommonFileName();
  ofilename+=":"+analysisName;

  ///______________________________________________________________________
  /// Cuts For D0
  AliRDHFCutsD0toKpi* RDHFD0toKpi=new AliRDHFCutsD0toKpi();
  if (system==0) {
    RDHFD0toKpi->SetStandardCutsPP2010();
  } else {
    // TODO: think about p-Pb
    RDHFD0toKpi->SetStandardCutsPbPb2011();

    // For centrality 0-10%, add centrality flattening
    //NB! NEED FOR THE MOMENT THE FILE!
    TFile *fFlat=TFile::Open("CentrDistrBins005.root","READ");
    TCanvas *c=fFlat->Get("cintegral");
    TH1F *hfl=(TH1F*)c->FindObject("hint");
    RDHFD0toKpi->SetHistoForCentralityFlattening(hfl,0.,10.,0.,0);
    //  RDHFD0toKpi->SetUseCentrality(AliRDHFCuts::kCentV0M);

    RDHFD0toKpi->SetMinCentrality(0.);// 40.*1.01
    RDHFD0toKpi->SetMaxCentrality(10.);// 80.*1.01
  }

  ///______________________________________________________________________
  /// Cuts for HFE
  AliHFEcuts *hfecuts = new AliHFEcuts("hfeCutsTPCTOF","HFE Standard Cuts");
  hfecuts->CreateStandardCuts();

  hfecuts->SetTPCmodes(AliHFEextraCuts::kFound,AliHFEextraCuts::kFoundOverFindable);
  hfecuts->SetMinNClustersTPC(NrTPCclusters);	//Default = 80
  hfecuts->SetMinNClustersTPCPID(80);	//Default = 80
  hfecuts->SetMinRatioTPCclusters(0.6); 	//Default = 0.6
	
  ///ITS
  hfecuts->SetCutITSpixel(ITSreq); 	//Cut on SPD
  //hfecuts->SetCutITSdrift(AliHFEextraCuts::kAny); 	//Cut on SDD
  //hfecuts->SetCheckITSLayerStatus(kFALSE);
  hfecuts->SetMinNClustersITS(NrITSclusters);		//Default = 4
    
  ///TOF
  hfecuts->SetTOFPIDStep(kTRUE);
		
  ///Additional Cuts
  hfecuts->SetPtRange(0.30, 10.5);
  hfecuts->SetMaxImpactParam(1.,2.);
  hfecuts->SetVertexRange(10.);

  // ________________________________________________________________________
  // PID for HFE
  // PID for Only TOF
  AliHFEpid *fPIDOnlyTOF = new AliHFEpid("hfePidTOF");
  if(!fPIDOnlyTOF->GetNumberOfPIDdetectors()) { 
    fPIDOnlyTOF->AddDetector("TOF",0);
  }
  fPIDOnlyTOF->ConfigureTOF(3); // number of sigma TOF
  fPIDOnlyTOF->InitializePID();
  
  // PID object for TPC and TOF combined
  // Check if PID is set from outside (passed as argument)
  ::Info("AddTaskDxHFEParticleSelection",Form("Setting up new combined PID object"));
  AliHFEpid* fPID = new AliHFEpid("hfePid");
  if(!fPID->GetNumberOfPIDdetectors()) { 
    fPID->AddDetector("TOF",0);
    fPID->AddDetector("TPC",1);
  }
  //Add settings for asymmetric cut on nSigma TPC
  const int paramSize=4;
  Double_t params[paramSize];
  memset(params, 0, sizeof(Double_t)*paramSize);
  params[0]=-1.;
  fPID->ConfigureTPCdefaultCut(NULL, params, 3.);
  fPID->InitializePID();

   // PID for Only TPC
  AliHFEpid *fPIDOnlyTPC = new AliHFEpid("hfePidTPC");
  if(!fPIDOnlyTPC->GetNumberOfPIDdetectors()) { 
    fPIDOnlyTPC->AddDetector("TPC",0);
  }
  fPIDOnlyTPC->ConfigureTPCdefaultCut(NULL, params, 3.);
  fPIDOnlyTPC->InitializePID();

  //=========================================================
  //Create TList of cut (and pid) objects for D0 or electron
  TList *Cutlist = new TList;
  if(Particle==AliAnalysisTaskDxHFEParticleSelection::kD0){
    Cutlist->SetName("cut objects D0");
    Cutlist->Add(RDHFD0toKpi);
  }
  else if(Particle==AliAnalysisTaskDxHFEParticleSelection::kElectron){
    Cutlist->SetName("cut objects HFE");
    Cutlist->Add(hfecuts);
    Cutlist->Add(fPID);
    Cutlist->Add(fPIDOnlyTOF);
    Cutlist->Add(fPIDOnlyTPC);
  }

  //=======================Setting up the task=========================================  
  AliAnalysisTaskDxHFEParticleSelection *pTask=new AliAnalysisTaskDxHFEParticleSelection(taskOptions);
  if (!pTask) {
    ::Error("AddTaskDxHFEParticleSelection", "failed to create task.");
    return 0;
  }
  pTask->SetCutList(Cutlist);
  pManager->AddTask(pTask);

  // The AnalysisManager handles the output file name in the following way:
  // The output file names are set by the function SetOutputFiles
  // If the file name given to the container begins with one of the initialized
  // file names, the data is stored in the corresponding file in a folder with
  // the full name specified to the container
  // E.g. output file has been set to "myanalysis", the container is created with
  // file name "myanalysis_A", data ends up in file "myanalysis" in folder
  // "myanalysis_A"
  // IMPORTANT: choosing a file name with a different stem at this point will
  // probably lead to an empty file.

  TString listName="";

  TString cutname="";
  if(Particle==AliAnalysisTaskDxHFEParticleSelection::kD0){
    listName="D0list"+extraname;
    cutname="cutsD0Selection"+extraname;
  }
  else if(Particle==AliAnalysisTaskDxHFEParticleSelection::kElectron){
    listName="ElList"+extraname;
    cutname="cutsElectronSelection"+extraname;
  }

  ::Info("AddTaskDxHFEParticleSelection", Form("\ninitializing analysis '%s'%s, output file '%s'", analysisName.Data(), bUseMC?" (using MC)":"", ofilename.Data()));


  AliAnalysisDataContainer *pContainer=pManager->CreateContainer(listName, TList::Class(), AliAnalysisManager::kOutputContainer, ofilename.Data());    
  AliAnalysisDataContainer *pContainer2=pManager->CreateContainer(cutname,TList::Class(),AliAnalysisManager::kOutputContainer, ofilename.Data()); //cuts D0/El

  pManager->ConnectInput(pTask,0,pManager->GetCommonInputContainer());
  pManager->ConnectOutput(pTask,1,pContainer);
  pManager->ConnectOutput(pTask,2,pContainer2);


  return 1;
}

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