]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG4/UserTasks/DiHadronCorrelations/RunDhcTask.C
Code as used for final data
[u/mrichter/AliRoot.git] / PWG4 / UserTasks / DiHadronCorrelations / RunDhcTask.C
1 // Macro to run AliDhcTask - A. Adare, Apr 2011
2 // Choose dataType = "esd" or "aod".
3 // Choose runMode  = "local", "proof", "grid", or "terminate".
4 // Choose proofCluster = "skaf.saske.sk" or "alice-caf.cern.ch".
5 // When running on proof: use root, not aliroot.
6
7 Int_t verbosity      = 0;
8 Long64_t nEvents     = 200;
9 TString runMode      = "local";
10 TString dataType     = "aod";
11 TString localDir     = "/Users/adare/esd/alice/data/2010/LHC10h/000139107/ESDs/pass2/";
12 TString esdDir       = localDir + TString("10000139107001.120/");
13 TString aodDir       = localDir + TString("AOD049/0008/");
14 TString proofDataset = "/alice/data/LHC10h_000137848_p2_AOD049";
15 //TString proofCluster = "aadare@alice-caf.cern.ch";
16 TString proofCluster = "aadare@skaf.saske.sk";
17 TString alirootVer   = "VO_ALICE@AliRoot::v4-21-21-AN";
18 TString libsBase     = "Tree:Geom:VMC:STEERBase:ESD:AOD";
19 //TString libsExtra    = "ANALYSIS:ANALYSISalice:CORRFW:JETAN:PWG4JetTasks";
20 TString libsExtra    = "ANALYSIS:ANALYSISalice";
21 TList* libList = new TList();
22 TChain* chain = 0;
23
24 void RunDhcTask()
25 {
26   // Creates the large file memstat_<pid>.root.
27   // Call TMemStat::Show() on the promp to analyze it.
28   if (0)
29     TMemStat mm("gnubuiltin");
30
31   if (runMode=="local")
32     LocalSetup();
33   else if (runMode=="proof") {
34     ProofSetup();
35   }
36
37   AddDhcTask();
38   
39   /// ---  All set up now...run Analysis!  ---
40   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
41   if (!mgr->InitAnalysis()) 
42     return;
43   if (verbosity > 0)
44     mgr->PrintStatus();
45   
46   if (runMode=="local") {
47     mgr->StartAnalysis(runMode.Data(), chain, nEvents);
48   }
49   else if (runMode=="proof") {
50     mgr->StartAnalysis(runMode.Data(), proofDataset.Data(), nEvents);
51   }
52   return;
53 }
54
55 void LocalSetup()
56 {
57   // Load libraries 
58   TObjArray* libs = libsExtra.Tokenize(":");
59   for (Int_t i=0; i<libs->GetEntries(); i++) {
60     const char* name = libs->At(i)->GetName();
61     Int_t ret = gSystem->Load(Form("lib%s", name));
62     if (ret > 0)
63       Warning("LocalSetup()", "lib%s already loaded", name);
64     if (ret < 0)
65       Warning("LocalSetup()", "lib%s failed to load", name);
66   }
67   
68   // Add headers
69   gSystem->AddIncludePath("-I$ALICE_ROOT/include");
70   
71   // Load macros/tasks
72   if (dataType == "esd") {
73     gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C");
74   }
75   gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
76   gROOT->LoadMacro("KiddiePoolClasses.cxx+g");  
77   gROOT->LoadMacro("AliDhcTask.cxx+g");  
78   
79   // Setup chain
80   TString chainName = dataType.Contains("aod") ? "aodTree" : "esdTree";
81   chain = new TChain(chainName.Data());
82   if (dataType.Contains("aod"))
83     chain->Add(Form("%sAliAOD.root", aodDir.Data()));
84   if (dataType.Contains("esd"))
85     chain->Add(Form("%sAliESDs.root", esdDir.Data()));
86   return;
87 }
88
89 void ProofSetup()
90 {
91   gEnv->SetValue("XSec.GSI.DelegProxy", "2");
92       
93   // Get PROOF pointer
94   TProof *proof = gProof;
95   if (proof) {
96     TProof::Reset(proofCluster.Data()); // add kTRUE as a 2nd arg for hard reset
97     //    proof->Reset("");
98     cerr << "Trying to reset proof" << endl;
99   } else {
100     proof = TProof::Open(proofCluster.Data(), "workers=60");
101   }
102   if (!proof) {
103     cerr << "Connection to " << proofCluster.Data()
104          << " failed!" << endl;
105     return;
106   }
107
108   if (0) {
109     proof->ShowPackages();
110     proof->ShowDataSets();
111   }
112   
113   // Load libraries   
114   int  ret = 0;
115   libList->Add(new TNamed("ALIROOT_EXTRA_LIBS", libsBase.Data()));
116   libList->Add(new TNamed("ALIROOT_EXTRA_LIBS", libsExtra.Data()));
117
118   ret = proof->EnablePackage(alirootVer.Data(), libList);
119   
120   proof->EnablePackage(alirootVer.Data(), 0);
121   if (ret) {
122     Error("ProofSetup()", "Failed to load all libs.");
123     return;
124   }
125
126   // Load macros/tasks
127   if (dataType == "esd") {
128     proof->Load("AddTaskCentrality.C");
129   }
130   proof->Load("AddTaskPhysicsSelection.C");
131   proof->Load("KiddiePoolClasses.cxx+g");  
132   proof->Load("AliDhcTask.cxx+g", 0);
133   return;
134 }
135
136 void AddDhcTask()
137 {
138   // Need the following macros loaded beforehand:
139   // "$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C" (ESD only)
140   // "$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"
141   // "AliDhcTask.cxx+g"
142
143   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
144   if (!mgr)
145     mgr = new AliAnalysisManager("DhcAnalysis");
146   AliESDInputHandler* esdH = new AliESDInputHandler();
147   AliAODInputHandler* aodH = new AliAODInputHandler();
148   
149   if (dataType.Contains("aod"))
150     mgr->SetInputEventHandler(aodH);
151   if (dataType.Contains("esd"))
152     mgr->SetInputEventHandler(esdH);
153   
154   if (dataType == "esd") {
155     AliCentralitySelectionTask *centTask = AddTaskCentrality();
156     centTask->SelectCollisionCandidates(AliVEvent::kAny);
157     centTask->SetPass(2);
158   }
159   
160   AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection();
161   
162   AliDhcTask *dhcTask = new AliDhcTask("DhcTask");
163   dhcTask->SelectCollisionCandidates(AliVEvent::kMB);
164   dhcTask->SetVerbosity(verbosity);
165
166   // Add task(s)
167   mgr->AddTask(dhcTask);
168   
169   // Create containers for input/output
170   AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
171   AliAnalysisDataContainer *coutput = 
172     mgr->CreateContainer("dhclist", TList::Class(),   
173                          AliAnalysisManager::kOutputContainer, 
174                          "dhctask_output.root");
175   
176   // Connect input/output
177   mgr->ConnectInput(dhcTask, 0, cinput);
178   mgr->ConnectOutput(dhcTask, 1, coutput);
179   
180   // Enable debug printouts
181   mgr->SetDebugLevel(verbosity);
182
183   return;
184 }
185