ROOT logo
//-*- Mode: C++ -*-
// $Id$

#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 "AliAnalysisTaskDxHFECorrelation.h"
#include "AliDxHFECorrelation.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"
#include "AliHFAssociatedTrackCuts.h"
using namespace std;
#endif


/// @file   AddTaskDxHFECorrelation.C
/// @author Matthias.Richter@ift.uib.no, Hege.Erdal@ift.uib.no
/// @date   2013-02-12
/// @brief  Add two instances of D0-HFE correlation task to the manager, SE and ME
///
int AddTaskDxHFECorrelationME(TString configuration="")
{
  //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 AddTaskDxHFECorrelationME.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"
	 << "usekine                       - To run on kinematical level \n"
	 << "PbPb                          - To run on PbPb \n"
	 << "trigger=D/D0/electron         - Which particle to trigger 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;
  } 

  TString taskOptions="";
  Bool_t nameset=kFALSE;
  Bool_t triggerset=kFALSE;
  Int_t system=0;
  // 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();
    }
  }

  // argument scan
  // TODO: currently the name and trigger type are fixed, this requirement
  // can be loosened later
  TString delimiter(" ");
  TStringToken configurationToken(configuration, delimiter);
  while (configurationToken.NextToken()) {
    TString argument=configurationToken;
    if (argument.BeginsWith("name=")) {
      //To remove various instances of name, and force directory to be DxHFE
      if(!nameset){
	taskOptions+=" "+argument;
	nameset=kTRUE;
      }
    }
    //At the moment: Make sure trigger is D0
    else if (argument.BeginsWith("trigger=")) {
      if(!triggerset){
	taskOptions+=" trigger=D0";
	triggerset=kTRUE;
      }
    }
    else if(argument.BeginsWith("PbPb") ||
	    argument.BeginsWith("system=1") ||
	    argument.BeginsWith("Pb-Pb")){
      system=1;
      taskOptions+=" PbPb";
    }
    else {
      // simply pass argument
      taskOptions+=" "+argument;
    }
  }
  TString path;
  path="AddTaskDxHFECorrelation.C";

  if (gSystem->AccessPathName(path)!=0) {
    // first try local macro, than AliRoot default path
    path="$ALICE_ROOT/PWGHF/correlationHF/macros/AddTaskDxHFECorrelation.C";
  }

  gROOT->LoadMacro(path);

  if (!nameset) taskOptions+=" name=DxHFE";
  if (!taskOptions) taskOptions+=" trigger=D0";

  if(!AddTaskDxHFECorrelation(taskOptions)) {
    printf("Problem setting up the single event correlation task, returning\n");
    return 0;
  }
  
  taskOptions+=" event-mixing";
  if(!AddTaskDxHFECorrelation(taskOptions)) {
    printf("Problem setting up the mixed event correlation task, returning\n");
      return 0;
  }

  return 1;
}                

 AddTaskDxHFECorrelationME.C:1
 AddTaskDxHFECorrelationME.C:2
 AddTaskDxHFECorrelationME.C:3
 AddTaskDxHFECorrelationME.C:4
 AddTaskDxHFECorrelationME.C:5
 AddTaskDxHFECorrelationME.C:6
 AddTaskDxHFECorrelationME.C:7
 AddTaskDxHFECorrelationME.C:8
 AddTaskDxHFECorrelationME.C:9
 AddTaskDxHFECorrelationME.C:10
 AddTaskDxHFECorrelationME.C:11
 AddTaskDxHFECorrelationME.C:12
 AddTaskDxHFECorrelationME.C:13
 AddTaskDxHFECorrelationME.C:14
 AddTaskDxHFECorrelationME.C:15
 AddTaskDxHFECorrelationME.C:16
 AddTaskDxHFECorrelationME.C:17
 AddTaskDxHFECorrelationME.C:18
 AddTaskDxHFECorrelationME.C:19
 AddTaskDxHFECorrelationME.C:20
 AddTaskDxHFECorrelationME.C:21
 AddTaskDxHFECorrelationME.C:22
 AddTaskDxHFECorrelationME.C:23
 AddTaskDxHFECorrelationME.C:24
 AddTaskDxHFECorrelationME.C:25
 AddTaskDxHFECorrelationME.C:26
 AddTaskDxHFECorrelationME.C:27
 AddTaskDxHFECorrelationME.C:28
 AddTaskDxHFECorrelationME.C:29
 AddTaskDxHFECorrelationME.C:30
 AddTaskDxHFECorrelationME.C:31
 AddTaskDxHFECorrelationME.C:32
 AddTaskDxHFECorrelationME.C:33
 AddTaskDxHFECorrelationME.C:34
 AddTaskDxHFECorrelationME.C:35
 AddTaskDxHFECorrelationME.C:36
 AddTaskDxHFECorrelationME.C:37
 AddTaskDxHFECorrelationME.C:38
 AddTaskDxHFECorrelationME.C:39
 AddTaskDxHFECorrelationME.C:40
 AddTaskDxHFECorrelationME.C:41
 AddTaskDxHFECorrelationME.C:42
 AddTaskDxHFECorrelationME.C:43
 AddTaskDxHFECorrelationME.C:44
 AddTaskDxHFECorrelationME.C:45
 AddTaskDxHFECorrelationME.C:46
 AddTaskDxHFECorrelationME.C:47
 AddTaskDxHFECorrelationME.C:48
 AddTaskDxHFECorrelationME.C:49
 AddTaskDxHFECorrelationME.C:50
 AddTaskDxHFECorrelationME.C:51
 AddTaskDxHFECorrelationME.C:52
 AddTaskDxHFECorrelationME.C:53
 AddTaskDxHFECorrelationME.C:54
 AddTaskDxHFECorrelationME.C:55
 AddTaskDxHFECorrelationME.C:56
 AddTaskDxHFECorrelationME.C:57
 AddTaskDxHFECorrelationME.C:58
 AddTaskDxHFECorrelationME.C:59
 AddTaskDxHFECorrelationME.C:60
 AddTaskDxHFECorrelationME.C:61
 AddTaskDxHFECorrelationME.C:62
 AddTaskDxHFECorrelationME.C:63
 AddTaskDxHFECorrelationME.C:64
 AddTaskDxHFECorrelationME.C:65
 AddTaskDxHFECorrelationME.C:66
 AddTaskDxHFECorrelationME.C:67
 AddTaskDxHFECorrelationME.C:68
 AddTaskDxHFECorrelationME.C:69
 AddTaskDxHFECorrelationME.C:70
 AddTaskDxHFECorrelationME.C:71
 AddTaskDxHFECorrelationME.C:72
 AddTaskDxHFECorrelationME.C:73
 AddTaskDxHFECorrelationME.C:74
 AddTaskDxHFECorrelationME.C:75
 AddTaskDxHFECorrelationME.C:76
 AddTaskDxHFECorrelationME.C:77
 AddTaskDxHFECorrelationME.C:78
 AddTaskDxHFECorrelationME.C:79
 AddTaskDxHFECorrelationME.C:80
 AddTaskDxHFECorrelationME.C:81
 AddTaskDxHFECorrelationME.C:82
 AddTaskDxHFECorrelationME.C:83
 AddTaskDxHFECorrelationME.C:84
 AddTaskDxHFECorrelationME.C:85
 AddTaskDxHFECorrelationME.C:86
 AddTaskDxHFECorrelationME.C:87
 AddTaskDxHFECorrelationME.C:88
 AddTaskDxHFECorrelationME.C:89
 AddTaskDxHFECorrelationME.C:90
 AddTaskDxHFECorrelationME.C:91
 AddTaskDxHFECorrelationME.C:92
 AddTaskDxHFECorrelationME.C:93
 AddTaskDxHFECorrelationME.C:94
 AddTaskDxHFECorrelationME.C:95
 AddTaskDxHFECorrelationME.C:96
 AddTaskDxHFECorrelationME.C:97
 AddTaskDxHFECorrelationME.C:98
 AddTaskDxHFECorrelationME.C:99
 AddTaskDxHFECorrelationME.C:100
 AddTaskDxHFECorrelationME.C:101
 AddTaskDxHFECorrelationME.C:102
 AddTaskDxHFECorrelationME.C:103
 AddTaskDxHFECorrelationME.C:104
 AddTaskDxHFECorrelationME.C:105
 AddTaskDxHFECorrelationME.C:106
 AddTaskDxHFECorrelationME.C:107
 AddTaskDxHFECorrelationME.C:108
 AddTaskDxHFECorrelationME.C:109
 AddTaskDxHFECorrelationME.C:110
 AddTaskDxHFECorrelationME.C:111
 AddTaskDxHFECorrelationME.C:112
 AddTaskDxHFECorrelationME.C:113
 AddTaskDxHFECorrelationME.C:114
 AddTaskDxHFECorrelationME.C:115
 AddTaskDxHFECorrelationME.C:116
 AddTaskDxHFECorrelationME.C:117
 AddTaskDxHFECorrelationME.C:118
 AddTaskDxHFECorrelationME.C:119
 AddTaskDxHFECorrelationME.C:120
 AddTaskDxHFECorrelationME.C:121
 AddTaskDxHFECorrelationME.C:122
 AddTaskDxHFECorrelationME.C:123
 AddTaskDxHFECorrelationME.C:124
 AddTaskDxHFECorrelationME.C:125
 AddTaskDxHFECorrelationME.C:126
 AddTaskDxHFECorrelationME.C:127
 AddTaskDxHFECorrelationME.C:128
 AddTaskDxHFECorrelationME.C:129
 AddTaskDxHFECorrelationME.C:130
 AddTaskDxHFECorrelationME.C:131
 AddTaskDxHFECorrelationME.C:132
 AddTaskDxHFECorrelationME.C:133
 AddTaskDxHFECorrelationME.C:134
 AddTaskDxHFECorrelationME.C:135