ROOT logo
// Macro to run AliDhcTask - A. Adare, Mar 2012
// Choose dataType = "esd" or "aod".
// Choose runMode  = "local", "proof", "grid", or "terminate".
// Choose proofCluster = "skaf.saske.sk" or "alice-caf.cern.ch".
// When running on proof: use root, not aliroot.

Int_t verbosity      = 0;
Long64_t nEvents     = 123456789;
TString runMode      = "local"; // "proof";
TString dataType     = "aod";
TString localDir     = "/Users/adare/esd/alice/data/2010/LHC10h/000139107/ESDs/pass2/";
TString esdDir       = localDir + TString("10000139107001.120/");
TString aodDir       = localDir + TString("AOD049/0008/");
TString proofDataset = "/alice/data/LHC10h_000137848_p2_AOD049";
TString proofCluster = "aadare@skaf.saske.sk"; // or "aadare@alice-caf.cern.ch";
TString alirootVer   = "VO_ALICE@AliRoot::v4-21-21-AN"; // for PROOF
TString libsBase     = "Tree:Geom:VMC:STEERBase:ESD:AOD";
TString libsExtra    = "ANALYSIS:ANALYSISalice:PWGCFCorrelationsDPhi";
TList* libList = new TList();
TChain* chain = 0;

void RunDhcTask()
{
  // Creates the large file memstat_<pid>.root.
  // Call TMemStat::Show() on the promp to analyze it.
  if (0)
    TMemStat mm("gnubuiltin");

  if (runMode=="local")
    LocalSetup();
  else if (runMode=="proof") {
    ProofSetup();
  }

  AddDhcTask();
  
  /// ---  All set up now...run Analysis!  ---
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr->InitAnalysis()) 
    return;
  if (verbosity > 0)
    mgr->PrintStatus();
  
  if (runMode=="local") {
    mgr->StartAnalysis(runMode.Data(), chain, nEvents);
  }
  else if (runMode=="proof") {
    mgr->StartAnalysis(runMode.Data(), proofDataset.Data(), nEvents);
  }
  return;
}

void LocalSetup()
{
  // Load libraries 
  TObjArray* libs = libsExtra.Tokenize(":");
  for (Int_t i=0; i<libs->GetEntries(); i++) {
    const char* name = libs->At(i)->GetName();
    Int_t ret = gSystem->Load(Form("lib%s", name));
    if (ret > 0)
      Warning("LocalSetup()", "lib%s already loaded", name);
    if (ret < 0)
      Warning("LocalSetup()", "lib%s failed to load", name);
  }
  
  // Add headers
  gSystem->AddIncludePath("-I$ALICE_ROOT/include");
  
  // Load macros/tasks
  if (dataType == "esd") {
    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C");
  }
  gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
  // gROOT->LoadMacro("AliPool.cxx+g");  
  // gROOT->LoadMacro("AliDhcTask.cxx+g");  
  
  // Setup chain
  TString chainName = dataType.Contains("aod") ? "aodTree" : "esdTree";
  chain = new TChain(chainName.Data());
  if (dataType.Contains("aod"))
    chain->Add(Form("%sAliAOD.root", aodDir.Data()));
  if (dataType.Contains("esd"))
    chain->Add(Form("%sAliESDs.root", esdDir.Data()));
  return;
}

void ProofSetup()
{
  gEnv->SetValue("XSec.GSI.DelegProxy", "2");
      
  // Get PROOF pointer
  TProof *proof = gProof;
  if (proof) {
    TProof::Reset(proofCluster.Data()); // add kTRUE as a 2nd arg for hard reset
    //    proof->Reset("");
    cerr << "Trying to reset proof" << endl;
  } else {
    proof = TProof::Open(proofCluster.Data(), "workers=60");
  }
  if (!proof) {
    cerr << "Connection to " << proofCluster.Data()
	 << " failed!" << endl;
    return;
  }

  if (0) {
    proof->ShowPackages();
    proof->ShowDataSets();
  }
  
  // Load libraries   
  int  ret = 0;
  libList->Add(new TNamed("ALIROOT_EXTRA_LIBS", libsBase.Data()));
  libList->Add(new TNamed("ALIROOT_EXTRA_LIBS", libsExtra.Data()));

  ret = proof->EnablePackage(alirootVer.Data(), libList);
  
  proof->EnablePackage(alirootVer.Data(), 0);
  if (ret) {
    Error("ProofSetup()", "Failed to load all libs.");
    return;
  }

  // Load macros/tasks
  if (dataType == "esd") {
    proof->Load("AddTaskCentrality.C");
  }
  proof->Load("AddTaskPhysicsSelection.C");
  proof->Load("AliPool.cxx+g");  
  proof->Load("AliDhcTask.cxx+g", 0);
  return;
}

void AddDhcTask()
{
  // Need the following macros loaded beforehand:
  // "$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C" (ESD only)
  // "$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"
  // "AliDhcTask.cxx+g"

  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr)
    mgr = new AliAnalysisManager("DhcAnalysis");
  AliESDInputHandler* esdH = new AliESDInputHandler();
  AliAODInputHandler* aodH = new AliAODInputHandler();
  
  if (dataType.Contains("aod"))
    mgr->SetInputEventHandler(aodH);
  if (dataType.Contains("esd"))
    mgr->SetInputEventHandler(esdH);
  
  if (dataType == "esd") {
    AliCentralitySelectionTask *centTask = AddTaskCentrality();
    centTask->SelectCollisionCandidates(AliVEvent::kAny);
    centTask->SetPass(2);
  }
  
  AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection();
  
  AliDhcTask *dhcTask = new AliDhcTask("DhcTask");
  dhcTask->SelectCollisionCandidates(AliVEvent::kMB);
  dhcTask->SetVerbosity(verbosity);

  // Add task(s)
  mgr->AddTask(dhcTask);
  
  // Create containers for input/output
  AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
  AliAnalysisDataContainer *coutput = 
    mgr->CreateContainer("dhclist", TList::Class(),   
			 AliAnalysisManager::kOutputContainer, 
			 "dhctask_output.root");
  
  // Connect input/output
  mgr->ConnectInput(dhcTask, 0, cinput);
  mgr->ConnectOutput(dhcTask, 1, coutput);
  
  // Enable debug printouts
  mgr->SetDebugLevel(verbosity);

  return;
}

 RunDhcTask.C:1
 RunDhcTask.C:2
 RunDhcTask.C:3
 RunDhcTask.C:4
 RunDhcTask.C:5
 RunDhcTask.C:6
 RunDhcTask.C:7
 RunDhcTask.C:8
 RunDhcTask.C:9
 RunDhcTask.C:10
 RunDhcTask.C:11
 RunDhcTask.C:12
 RunDhcTask.C:13
 RunDhcTask.C:14
 RunDhcTask.C:15
 RunDhcTask.C:16
 RunDhcTask.C:17
 RunDhcTask.C:18
 RunDhcTask.C:19
 RunDhcTask.C:20
 RunDhcTask.C:21
 RunDhcTask.C:22
 RunDhcTask.C:23
 RunDhcTask.C:24
 RunDhcTask.C:25
 RunDhcTask.C:26
 RunDhcTask.C:27
 RunDhcTask.C:28
 RunDhcTask.C:29
 RunDhcTask.C:30
 RunDhcTask.C:31
 RunDhcTask.C:32
 RunDhcTask.C:33
 RunDhcTask.C:34
 RunDhcTask.C:35
 RunDhcTask.C:36
 RunDhcTask.C:37
 RunDhcTask.C:38
 RunDhcTask.C:39
 RunDhcTask.C:40
 RunDhcTask.C:41
 RunDhcTask.C:42
 RunDhcTask.C:43
 RunDhcTask.C:44
 RunDhcTask.C:45
 RunDhcTask.C:46
 RunDhcTask.C:47
 RunDhcTask.C:48
 RunDhcTask.C:49
 RunDhcTask.C:50
 RunDhcTask.C:51
 RunDhcTask.C:52
 RunDhcTask.C:53
 RunDhcTask.C:54
 RunDhcTask.C:55
 RunDhcTask.C:56
 RunDhcTask.C:57
 RunDhcTask.C:58
 RunDhcTask.C:59
 RunDhcTask.C:60
 RunDhcTask.C:61
 RunDhcTask.C:62
 RunDhcTask.C:63
 RunDhcTask.C:64
 RunDhcTask.C:65
 RunDhcTask.C:66
 RunDhcTask.C:67
 RunDhcTask.C:68
 RunDhcTask.C:69
 RunDhcTask.C:70
 RunDhcTask.C:71
 RunDhcTask.C:72
 RunDhcTask.C:73
 RunDhcTask.C:74
 RunDhcTask.C:75
 RunDhcTask.C:76
 RunDhcTask.C:77
 RunDhcTask.C:78
 RunDhcTask.C:79
 RunDhcTask.C:80
 RunDhcTask.C:81
 RunDhcTask.C:82
 RunDhcTask.C:83
 RunDhcTask.C:84
 RunDhcTask.C:85
 RunDhcTask.C:86
 RunDhcTask.C:87
 RunDhcTask.C:88
 RunDhcTask.C:89
 RunDhcTask.C:90
 RunDhcTask.C:91
 RunDhcTask.C:92
 RunDhcTask.C:93
 RunDhcTask.C:94
 RunDhcTask.C:95
 RunDhcTask.C:96
 RunDhcTask.C:97
 RunDhcTask.C:98
 RunDhcTask.C:99
 RunDhcTask.C:100
 RunDhcTask.C:101
 RunDhcTask.C:102
 RunDhcTask.C:103
 RunDhcTask.C:104
 RunDhcTask.C:105
 RunDhcTask.C:106
 RunDhcTask.C:107
 RunDhcTask.C:108
 RunDhcTask.C:109
 RunDhcTask.C:110
 RunDhcTask.C:111
 RunDhcTask.C:112
 RunDhcTask.C:113
 RunDhcTask.C:114
 RunDhcTask.C:115
 RunDhcTask.C:116
 RunDhcTask.C:117
 RunDhcTask.C:118
 RunDhcTask.C:119
 RunDhcTask.C:120
 RunDhcTask.C:121
 RunDhcTask.C:122
 RunDhcTask.C:123
 RunDhcTask.C:124
 RunDhcTask.C:125
 RunDhcTask.C:126
 RunDhcTask.C:127
 RunDhcTask.C:128
 RunDhcTask.C:129
 RunDhcTask.C:130
 RunDhcTask.C:131
 RunDhcTask.C:132
 RunDhcTask.C:133
 RunDhcTask.C:134
 RunDhcTask.C:135
 RunDhcTask.C:136
 RunDhcTask.C:137
 RunDhcTask.C:138
 RunDhcTask.C:139
 RunDhcTask.C:140
 RunDhcTask.C:141
 RunDhcTask.C:142
 RunDhcTask.C:143
 RunDhcTask.C:144
 RunDhcTask.C:145
 RunDhcTask.C:146
 RunDhcTask.C:147
 RunDhcTask.C:148
 RunDhcTask.C:149
 RunDhcTask.C:150
 RunDhcTask.C:151
 RunDhcTask.C:152
 RunDhcTask.C:153
 RunDhcTask.C:154
 RunDhcTask.C:155
 RunDhcTask.C:156
 RunDhcTask.C:157
 RunDhcTask.C:158
 RunDhcTask.C:159
 RunDhcTask.C:160
 RunDhcTask.C:161
 RunDhcTask.C:162
 RunDhcTask.C:163
 RunDhcTask.C:164
 RunDhcTask.C:165
 RunDhcTask.C:166
 RunDhcTask.C:167
 RunDhcTask.C:168
 RunDhcTask.C:169
 RunDhcTask.C:170
 RunDhcTask.C:171
 RunDhcTask.C:172
 RunDhcTask.C:173
 RunDhcTask.C:174
 RunDhcTask.C:175
 RunDhcTask.C:176
 RunDhcTask.C:177
 RunDhcTask.C:178
 RunDhcTask.C:179
 RunDhcTask.C:180
 RunDhcTask.C:181
 RunDhcTask.C:182
 RunDhcTask.C:183
 RunDhcTask.C:184