f361cfca33140f613996a4a3d4ff23502d124ebf
[u/mrichter/AliRoot.git] / PWG0 / dNdEta / run.C
1 void Load(const char* taskName, Bool_t debug)
2 {
3   TString compileTaskName;
4   compileTaskName.Form("%s.cxx++", taskName);
5   if (debug)
6     compileTaskName += "g";
7
8   if (gProof) {
9     gProof->Load(compileTaskName);
10   } else
11     gROOT->Macro(compileTaskName);
12
13   // Enable debug printouts
14   if (debug)
15   {
16     AliLog::SetClassDebugLevel(taskName, AliLog::kDebug+2);
17   }
18   else
19     AliLog::SetClassDebugLevel(taskName, AliLog::kWarning);
20 }
21
22 void run(Int_t runWhat, const Char_t* data, Int_t nRuns=20, Int_t offset=0, Bool_t aDebug = kFALSE, Int_t aProof = kFALSE, Bool_t mc = kTRUE, const char* option = "")
23 {
24   // runWhat options: 0 = AlidNdEtaTask
25   //                  1 = AlidNdEtaCorrectionTask
26   //                  2 = both
27   //
28   // aProof option: 0 no proof
29   //                1 proof with chain
30   //                2 proof with dataset
31   //
32   // option is passed to the task(s)
33   //   option SAVE is removed and results in moving the output files to maps/<ds name>/<trigger>/<det>
34   //
35   
36   TString taskName;
37   if (runWhat == 0 || runWhat == 2)
38   {
39     Printf("Running AlidNdEtaTask");
40   }
41   if (runWhat == 1 || runWhat == 2)
42   {
43     Printf("Running AlidNdEtaCorrectionTask");
44     if (!mc)
45     {
46       Printf("AlidNdEtaCorrectionTask needs MC. Exiting...");
47       return;
48     }
49   }
50
51   if (nRuns < 0)
52     nRuns = 1234567890;
53
54   if (aProof)
55   {
56     TProof::Open("alicecaf"); 
57     //gProof->SetParallel(1);
58
59     // Enable the needed package
60     if (1)
61     {
62       gProof->UploadPackage("$ALICE_ROOT/STEERBase");
63       gProof->EnablePackage("$ALICE_ROOT/STEERBase");
64       gProof->UploadPackage("$ALICE_ROOT/ESD");
65       gProof->EnablePackage("$ALICE_ROOT/ESD");
66       gProof->UploadPackage("$ALICE_ROOT/AOD");
67       gProof->EnablePackage("$ALICE_ROOT/AOD");
68       gProof->UploadPackage("$ALICE_ROOT/ANALYSIS");
69       gProof->EnablePackage("$ALICE_ROOT/ANALYSIS");
70       gProof->UploadPackage("$ALICE_ROOT/ANALYSISalice");
71       gProof->EnablePackage("$ALICE_ROOT/ANALYSISalice");
72     }
73     else
74     {
75       gProof->UploadPackage("/afs/cern.ch/alice/caf/sw/ALICE/PARs/v4-17-Release/AF-v4-17");
76       gProof->EnablePackage("AF-v4-17");
77     }
78
79     gProof->UploadPackage("$ALICE_ROOT/PWG0base");
80     gProof->EnablePackage("$ALICE_ROOT/PWG0base");
81   }
82   else
83   {
84     gSystem->AddIncludePath("-I${ALICE_ROOT}/include/ -I${ALICE_ROOT}/PWG0/ -I${ALICE_ROOT}/PWG0/dNdEta/"); 
85     gSystem->Load("libVMC");
86     gSystem->Load("libTree");
87     gSystem->Load("libProof");
88     gSystem->Load("libSTEERBase");
89     gSystem->Load("libESD");
90     gSystem->Load("libAOD");
91     gSystem->Load("libANALYSIS");
92     gSystem->Load("libANALYSISalice");
93     gSystem->Load("libPWG0base");
94   }
95
96   // Create the analysis manager
97   mgr = new AliAnalysisManager;
98
99   // Add ESD handler
100   AliESDInputHandler* esdH = new AliESDInputHandler;
101   esdH->SetInactiveBranches("AliESDACORDE FMD ALIESDTZERO ALIESDVZERO ALIESDZDC AliRawDataErrorLogs CaloClusters Cascades EMCALCells EMCALTrigger ESDfriend Kinks Kinks Cascades AliESDTZERO ALIESDACORDE MuonTracks TrdTracks CaloClusters");
102   mgr->SetInputEventHandler(esdH);
103
104   AliPWG0Helper::AnalysisMode analysisMode = AliPWG0Helper::kTPC | AliPWG0Helper::kFieldOn;
105   AliPWG0Helper::Trigger      trigger      = AliPWG0Helper::kMB1;
106
107   AliPWG0Helper::PrintConf(analysisMode, trigger);
108
109   AliESDtrackCuts* esdTrackCuts = 0;
110   if (!(analysisMode & AliPWG0Helper::kSPD))
111   {
112     // selection of esd tracks
113     gROOT->ProcessLine(".L ../CreateStandardCuts.C");
114     esdTrackCuts = CreateTrackCuts(analysisMode);
115     if (!esdTrackCuts)
116     {
117       printf("ERROR: esdTrackCuts could not be created\n");
118       return;
119     }
120     esdTrackCuts->SetHistogramsOn(kTRUE);
121   }
122
123   cInput = mgr->GetCommonInputContainer();
124   
125   // remove SAVE option if set
126   Bool_t save = kFALSE;
127   TString optStr(option);
128   if (optStr.Contains("SAVE"))
129   {
130     optStr = optStr(0,optStr.Index("SAVE")) + optStr(optStr.Index("SAVE")+4, optStr.Length());
131     save = kTRUE;
132   }
133   
134   // Create, add task
135   if (runWhat == 0 || runWhat == 2)
136   {
137     Load("AlidNdEtaTask", aDebug);
138     task = new AlidNdEtaTask(optStr);
139
140     if (mc)
141       task->SetReadMC();
142
143     // syst. error flags
144     //task->SetUseMCVertex();
145     //task->SetUseMCKine();
146     //task->SetOnlyPrimaries();
147     //task->SetFillPhi();
148     
149     task->SetTrigger(trigger);
150     task->SetAnalysisMode(analysisMode);
151     task->SetTrackCuts(esdTrackCuts);
152     //task->SetDeltaPhiCut(0.05);
153
154     mgr->AddTask(task);
155
156     // Attach input
157     mgr->ConnectInput(task, 0, cInput);
158
159     // Attach output
160     cOutput = mgr->CreateContainer("cOutput", TList::Class(), AliAnalysisManager::kOutputContainer);
161     mgr->ConnectOutput(task, 0, cOutput);
162   }
163   if (runWhat == 1 || runWhat == 2)
164   {
165     Load("AlidNdEtaCorrectionTask", aDebug);
166     task2 = new AlidNdEtaCorrectionTask(optStr);
167
168     // syst. error flags
169     //task2->SetFillPhi();
170     //task2->SetOnlyPrimaries();
171
172     task2->SetTrigger(trigger);
173     task2->SetAnalysisMode(analysisMode);
174     task2->SetTrackCuts(esdTrackCuts);
175     //task2->SetDeltaPhiCut(0.05);
176
177     mgr->AddTask(task2);
178
179     // Attach input
180     mgr->ConnectInput(task2, 0, cInput);
181
182     // Attach output
183     cOutput = mgr->CreateContainer("cOutput2", TList::Class(), AliAnalysisManager::kOutputContainer);
184     mgr->ConnectOutput(task2, 0, cOutput);
185   }
186
187   if (mc) {
188     // Enable MC event handler
189     AliMCEventHandler* handler = new AliMCEventHandler;
190     handler->SetReadTR(kFALSE);
191     mgr->SetMCtruthEventHandler(handler);
192   }
193
194   // Enable debug printouts
195   if (aDebug)
196     mgr->SetDebugLevel(2);
197
198   // Run analysis
199   mgr->InitAnalysis();
200   mgr->PrintStatus();
201
202   if (aProof == 2)
203   {
204     // process dataset
205
206     mgr->StartAnalysis("proof", data, nRuns, offset);
207     
208     if (save)
209     {
210       TString path("maps/");
211       path += TString(data).Tokenize("/")->Last()->GetName();
212       
213       switch (trigger)
214       {
215         case AliPWG0Helper::kMB1:
216         case AliPWG0Helper::kOfflineMB1: path += "/mb1"; break;
217         case AliPWG0Helper::kMB2:
218         case AliPWG0Helper::kOfflineMB2: path += "/mb2"; break;
219         case AliPWG0Helper::kMB3:
220         case AliPWG0Helper::kOfflineMB3: path += "/mb3"; break;
221         case AliPWG0Helper::kFASTOR:
222         case AliPWG0Helper::kOfflineFASTOR: path += "/fastor"; break;
223         default: Printf("ERROR: Trigger undefined for path to files"); return;
224       }
225       
226       if (analysisMode & AliPWG0Helper::kSPD)
227         path += "/spd";
228       
229       if (analysisMode & AliPWG0Helper::kTPC)
230         path += "/tpc";
231         
232       gSystem->mkdir(path, kTRUE);
233       if (runWhat == 0 || runWhat == 2)
234         gSystem->Rename("analysis_esd_raw.root", path + "/analysis_esd_raw.root");
235       if (runWhat == 1 || runWhat == 2)
236       {
237         gSystem->Rename("analysis_mc.root", path + "/analysis_mc.root");
238         gSystem->Rename("correction_map.root", path + "/correction_map.root");
239       }
240       
241       Printf(">>>>> Moved files to %s", path.Data());
242     }
243   }
244   else if (aProof == 3)
245   {
246     gROOT->ProcessLine(".L CreateChainFromDataSet.C");
247     ds = gProof->GetDataSet(data)->GetStagedSubset();
248     chain = CreateChainFromDataSet(ds);
249     mgr->StartAnalysis("local", chain, nRuns, offset);
250   }
251   else
252   {
253     // Create chain of input files
254     gROOT->LoadMacro("../CreateESDChain.C");
255
256     chain = CreateESDChain(data, nRuns, offset);
257     //chain = CreateChain("TE", data, nRuns, offset);
258
259     mgr->StartAnalysis((aProof > 0) ? "proof" : "local", chain);
260   }
261 }
262