]>
Commit | Line | Data |
---|---|---|
eb9356d5 | 1 | void run(Char_t* data, Long64_t nRuns = -1, Long64_t offset = 0, Bool_t aDebug = kFALSE, Int_t aProof = 0, Int_t requiredData = 1, const char* option = "") |
a9017e49 | 2 | { |
f55b30d2 | 3 | // aProof option: |
4 | // -2 grid, terminate mode | |
5 | // -1 grid, full mode | |
6 | // 0 local | |
745d6088 | 7 | // 1 proof with chain |
8 | // 2 proof with dataset | |
f55b30d2 | 9 | // 3 local with proof dataset |
eb9356d5 | 10 | // |
11 | // requiredData option: 0 = only ESD | |
12 | // 1 = ESD+MC | |
13 | // 2 = RAW (ESD+check on event type) | |
14 | // | |
745d6088 | 15 | |
16 | if (nRuns < 0) | |
17 | nRuns = 1234567890; | |
18 | ||
f55b30d2 | 19 | if (aProof > 0) |
a9017e49 | 20 | { |
70fdd197 | 21 | gEnv->SetValue("XSec.GSI.DelegProxy", "2"); |
69b09e3b | 22 | TProof::Open("alicecaf"); |
eb9356d5 | 23 | |
a9017e49 | 24 | // Enable the needed package |
dca331bb | 25 | if (1) |
26 | { | |
27 | gProof->UploadPackage("$ALICE_ROOT/STEERBase"); | |
28 | gProof->EnablePackage("$ALICE_ROOT/STEERBase"); | |
29 | gProof->UploadPackage("$ALICE_ROOT/ESD"); | |
30 | gProof->EnablePackage("$ALICE_ROOT/ESD"); | |
31 | gProof->UploadPackage("$ALICE_ROOT/AOD"); | |
32 | gProof->EnablePackage("$ALICE_ROOT/AOD"); | |
33 | gProof->UploadPackage("$ALICE_ROOT/ANALYSIS"); | |
34 | gProof->EnablePackage("$ALICE_ROOT/ANALYSIS"); | |
35 | gProof->UploadPackage("$ALICE_ROOT/ANALYSISalice"); | |
36 | gProof->EnablePackage("$ALICE_ROOT/ANALYSISalice"); | |
37 | } | |
38 | else | |
39 | { | |
69b09e3b | 40 | gProof->UploadPackage("$ALICE_ROOT/AF-v4-16"); |
41 | gProof->EnablePackage("$ALICE_ROOT/AF-v4-16"); | |
dca331bb | 42 | } |
745d6088 | 43 | |
44 | gProof->UploadPackage("$ALICE_ROOT/PWG0base"); | |
45 | gProof->EnablePackage("$ALICE_ROOT/PWG0base"); | |
a9017e49 | 46 | } |
47 | else | |
48 | { | |
49 | gSystem->Load("libVMC"); | |
50 | gSystem->Load("libTree"); | |
51 | gSystem->Load("libSTEERBase"); | |
52 | gSystem->Load("libESD"); | |
dca331bb | 53 | gSystem->Load("libAOD"); |
a9017e49 | 54 | gSystem->Load("libANALYSIS"); |
dca331bb | 55 | gSystem->Load("libANALYSISalice"); |
a9017e49 | 56 | gSystem->Load("libPWG0base"); |
f55b30d2 | 57 | |
58 | gROOT->ProcessLine(gSystem->ExpandPathName(".include $ALICE_ROOT/PWG0")); | |
a9017e49 | 59 | } |
60 | ||
a9017e49 | 61 | // Create the analysis manager |
dca331bb | 62 | mgr = new AliAnalysisManager; |
a9017e49 | 63 | |
eb9356d5 | 64 | // Add ESD handler |
65 | AliESDInputHandler* esdH = new AliESDInputHandler; | |
66 | esdH->SetInactiveBranches("AliESDACORDE FMD ALIESDTZERO ALIESDZDC AliRawDataErrorLogs CaloClusters Cascades EMCALCells EMCALTrigger ESDfriend Kinks AliESDTZERO ALIESDACORDE MuonTracks TrdTracks"); | |
67 | mgr->SetInputEventHandler(esdH); | |
68 | ||
69 | // physics selection | |
70 | gROOT->ProcessLine(".L $ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); | |
71 | physicsSelectionTask = AddTaskPhysicsSelection((requiredData == 2) ? kFALSE : kTRUE); | |
72 | ||
73 | // FO efficiency (for MC) | |
f55b30d2 | 74 | if (0 && requiredData != 2) |
eb9356d5 | 75 | { |
76 | //const char* fastORFile = "../dNdEta/spdFOEff_run104824_52.root"; | |
77 | //const char* fastORFile = "../dNdEta/spdFOEff_run104867_92.root"; | |
78 | //const char* fastORFile = "../dNdEta/spdFOEff_run105054_7.root"; | |
79 | const char* fastORFile = "../dNdEta/spdFOEff_run114931.root"; | |
80 | ||
81 | Printf("NOTE: Simulating FAST-OR efficiency on the analysis level using file %s", fastORFile); | |
82 | TFile::Open(fastORFile); | |
83 | ||
84 | spdFOEff = (TH1F*) gFile->Get("spdFOEff"); | |
85 | physicsSelectionTask->GetPhysicsSelection()->Initialize(114931); | |
86 | physicsSelectionTask->GetPhysicsSelection()->GetTriggerAnalysis()->SetSPDGFOEfficiency(spdFOEff); | |
87 | } | |
88 | ||
89 | AliPWG0Helper::AnalysisMode analysisMode = AliPWG0Helper::kSPD | AliPWG0Helper::kFieldOn; | |
90 | //AliPWG0Helper::AnalysisMode analysisMode = AliPWG0Helper::kTPCITS | AliPWG0Helper::kFieldOn; | |
91 | ||
92 | //AliTriggerAnalysis::Trigger trigger = AliTriggerAnalysis::kAcceptAll | AliTriggerAnalysis::kOfflineFlag; | |
93 | AliTriggerAnalysis::Trigger trigger = AliTriggerAnalysis::kAcceptAll | AliTriggerAnalysis::kOfflineFlag | AliTriggerAnalysis::kOneParticle; | |
94 | ||
95 | //AliTriggerAnalysis::Trigger trigger = AliTriggerAnalysis::kMB1Prime | AliTriggerAnalysis::kOfflineFlag; | |
96 | //AliTriggerAnalysis::Trigger trigger = AliTriggerAnalysis::kSPDGFOBits | AliTriggerAnalysis::kOfflineFlag; | |
97 | //AliTriggerAnalysis::Trigger trigger = AliTriggerAnalysis::kV0AND | AliTriggerAnalysis::kOfflineFlag; | |
a2cdb42c | 98 | |
eb9356d5 | 99 | AliPWG0Helper::DiffTreatment diffTreatment = AliPWG0Helper::kMCFlags; |
100 | //AliPWG0Helper::DiffTreatment diffTreatment = AliPWG0Helper::kE710Cuts; | |
101 | ||
102 | AliPWG0Helper::PrintConf(analysisMode, trigger, diffTreatment); | |
a9017e49 | 103 | |
104 | TString taskName("AliMultiplicityTask.cxx+"); | |
105 | if (aDebug) | |
106 | taskName += "+g"; | |
107 | ||
108 | // Create, add task | |
745d6088 | 109 | if (aProof > 0) { |
a9017e49 | 110 | gProof->Load(taskName); |
111 | } else | |
112 | gROOT->Macro(taskName); | |
113 | ||
eb9356d5 | 114 | // 0 bin calculation |
115 | if (0) | |
116 | { | |
117 | } | |
118 | ||
119 | // V0 syst. study | |
120 | if (0) | |
121 | { | |
122 | Printf("NOTE: Systematic study for VZERO enabled!"); | |
123 | //physicsSelectionTask->GetPhysicsSelection()->Initialize(104867); | |
124 | for (Int_t i=0; i<1; i++) | |
125 | { | |
126 | // for MC and data | |
127 | physicsSelectionTask->GetPhysicsSelection()->GetTriggerAnalysis(i)->SetV0HwPars(15, 61.5, 86.5); | |
128 | physicsSelectionTask->GetPhysicsSelection()->GetTriggerAnalysis(i)->SetV0AdcThr(15); | |
129 | // only for MC | |
130 | //physicsSelectionTask->GetPhysicsSelection()->GetTriggerAnalysis(i)->SetV0HwPars(0, 0, 125); | |
131 | //physicsSelectionTask->GetPhysicsSelection()->GetTriggerAnalysis(i)->SetV0AdcThr(0); | |
132 | } | |
133 | } | |
134 | ||
135 | TString optionStr(option); | |
136 | ||
137 | // remove SAVE option if set | |
138 | Bool_t save = kFALSE; | |
139 | TString optionStr(option); | |
140 | if (optionStr.Contains("SAVE")) | |
141 | { | |
142 | optionStr = optionStr(0,optionStr.Index("SAVE")) + optionStr(optionStr.Index("SAVE")+4, optionStr.Length()); | |
143 | save = kTRUE; | |
144 | } | |
145 | ||
146 | task = new AliMultiplicityTask(optionStr); | |
f3eb27f6 | 147 | |
70fdd197 | 148 | if (!(analysisMode & AliPWG0Helper::kSPD)) |
f3eb27f6 | 149 | { |
150 | // selection of esd tracks | |
151 | gROOT->ProcessLine(".L ../CreateStandardCuts.C"); | |
152 | AliESDtrackCuts* esdTrackCuts = CreateTrackCuts(analysisMode); | |
153 | if (!esdTrackCuts) | |
154 | { | |
155 | printf("ERROR: esdTrackCuts could not be created\n"); | |
156 | return; | |
157 | } | |
158 | ||
159 | task->SetTrackCuts(esdTrackCuts); | |
160 | } | |
eb9356d5 | 161 | //else |
162 | // task->SetDeltaPhiCut(0.05); | |
f3eb27f6 | 163 | |
745d6088 | 164 | task->SetAnalysisMode(analysisMode); |
a2cdb42c | 165 | task->SetTrigger(trigger); |
eb9356d5 | 166 | task->SetDiffTreatment(diffTreatment); |
2fa65f52 | 167 | |
eb9356d5 | 168 | if (requiredData == 1) |
2fa65f52 | 169 | task->SetReadMC(); |
170 | ||
f3eb27f6 | 171 | //task->SetUseMCVertex(); |
eb9356d5 | 172 | |
173 | if (requiredData != 2) | |
174 | task->SetSkipParticles(); | |
f3eb27f6 | 175 | |
a9017e49 | 176 | mgr->AddTask(task); |
177 | ||
eb9356d5 | 178 | if (requiredData == 1) { |
2fa65f52 | 179 | // Enable MC event handler |
180 | AliMCEventHandler* handler = new AliMCEventHandler; | |
69b09e3b | 181 | if (!optionStr.Contains("particle-efficiency")) |
182 | handler->SetReadTR(kFALSE); | |
2fa65f52 | 183 | mgr->SetMCtruthEventHandler(handler); |
184 | } | |
a9017e49 | 185 | |
dca331bb | 186 | // pt study |
dca331bb | 187 | if (optionStr.Contains("pt-spectrum-func")) |
188 | { | |
69b09e3b | 189 | TF1* func = new TF1("func", "1", 0, 0.2); |
190 | //TF1* func = new TF1("func", "1.5 - x / 0.2 * 0.5", 0, 0.2); | |
191 | //TF1* func = new TF1("func", "1.25 - x / 0.2 * 0.25", 0, 0.2); | |
192 | //TF1* func = new TF1("func", "0.75 + x / 0.2 * 0.25", 0, 0.2); | |
193 | hist = func->GetHistogram(); | |
dca331bb | 194 | //new TCanvas; func->Draw(); |
195 | //inputList.Add(func->GetHistogram()->Clone("pt-spectrum")); | |
196 | ||
dca331bb | 197 | new TCanvas; hist->Draw(); |
69b09e3b | 198 | task->SetPtSpectrum((TH1D*) hist->Clone("pt-spectrum")); |
dca331bb | 199 | } |
200 | ||
a9017e49 | 201 | // Attach input |
861795a8 | 202 | cInput = mgr->GetCommonInputContainer(); |
a9017e49 | 203 | mgr->ConnectInput(task, 0, cInput); |
204 | ||
205 | // Attach output | |
f55b30d2 | 206 | cOutput = mgr->CreateContainer("cOutput", TList::Class(), AliAnalysisManager::kOutputContainer, "mult_Temp.root"); |
a9017e49 | 207 | mgr->ConnectOutput(task, 0, cOutput); |
208 | ||
209 | // Enable debug printouts | |
210 | if (aDebug) | |
211 | mgr->SetDebugLevel(2); | |
212 | ||
213 | // Run analysis | |
214 | mgr->InitAnalysis(); | |
215 | mgr->PrintStatus(); | |
745d6088 | 216 | |
217 | if (aProof == 2) | |
218 | { | |
219 | // process dataset | |
220 | ||
221 | mgr->StartAnalysis("proof", data, nRuns, offset); | |
eb9356d5 | 222 | |
223 | if (save) | |
224 | { | |
225 | TString path("maps/"); | |
226 | path += TString(data).Tokenize("/")->Last()->GetName(); | |
227 | ||
228 | UInt_t triggerNoFlags = (UInt_t) trigger % (UInt_t) AliTriggerAnalysis::kStartOfFlags; | |
229 | switch (triggerNoFlags) | |
230 | { | |
231 | case AliTriggerAnalysis::kAcceptAll: path += "/all"; break; | |
232 | case AliTriggerAnalysis::kMB1: path += "/mb1"; break; | |
233 | case AliTriggerAnalysis::kMB2: path += "/mb2"; break; | |
234 | case AliTriggerAnalysis::kMB3: path += "/mb3"; break; | |
235 | case AliTriggerAnalysis::kSPDGFO: path += "/spdgfo"; break; | |
236 | case AliTriggerAnalysis::kSPDGFOBits: path += "/spdgfobits"; break; | |
237 | case AliTriggerAnalysis::kV0AND: path += "/v0and"; break; | |
238 | case AliTriggerAnalysis::kNSD1: path += "/nsd1"; break; | |
239 | case AliTriggerAnalysis::kMB1Prime: path += "/mb1prime"; break; | |
240 | default: Printf("ERROR: Trigger undefined for path to files"); return; | |
241 | } | |
242 | ||
243 | if (trigger & AliTriggerAnalysis::kOneParticle) | |
244 | path += "-onepart"; | |
245 | ||
246 | if (analysisMode & AliPWG0Helper::kSPD) | |
247 | path += "/spd"; | |
248 | ||
249 | if (analysisMode & AliPWG0Helper::kTPC) | |
250 | path += "/tpc"; | |
251 | ||
252 | if (analysisMode & AliPWG0Helper::kTPCITS) | |
253 | path += "/tpcits"; | |
254 | ||
255 | gSystem->mkdir(path, kTRUE); | |
256 | ||
257 | TString fileName("multiplicity"); | |
258 | if (optionStr.Contains("only-process-type-nd")) | |
259 | fileName += "ND"; | |
260 | if (optionStr.Contains("only-process-type-sd")) | |
261 | fileName += "SD"; | |
262 | if (optionStr.Contains("only-process-type-dd")) | |
263 | fileName += "DD"; | |
264 | fileName += ".root"; | |
265 | ||
266 | gSystem->Rename(fileName, path + "/" + fileName); | |
267 | gSystem->Rename("event_stat.root", path + "/event_stat.root"); | |
268 | ||
269 | Printf(">>>>> Moved files to %s", path.Data()); | |
270 | } | |
745d6088 | 271 | } |
69b09e3b | 272 | else if (aProof == 3) |
273 | { | |
274 | gROOT->ProcessLine(".L CreateChainFromDataSet.C"); | |
275 | ds = gProof->GetDataSet(data)->GetStagedSubset(); | |
eb9356d5 | 276 | chain = CreateChainFromDataSet(ds, "esdTree", nRuns); |
69b09e3b | 277 | mgr->StartAnalysis("local", chain, nRuns, offset); |
278 | } | |
f55b30d2 | 279 | else if (aProof == 0) |
745d6088 | 280 | { |
281 | // Create chain of input files | |
282 | gROOT->LoadMacro("../CreateESDChain.C"); | |
283 | chain = CreateESDChain(data, nRuns, offset); | |
284 | ||
285 | mgr->StartAnalysis((aProof > 0) ? "proof" : "local", chain); | |
286 | } | |
f55b30d2 | 287 | else if (aProof == -1 || aProof == -2) |
288 | { | |
289 | gSystem->Unlink("EventStat_temp.root"); | |
290 | gSystem->Unlink("mult_Temp.root"); | |
291 | gSystem->Unlink("event_stat.root"); | |
292 | gSystem->Unlink("multiplicity.root"); | |
293 | ||
294 | AliAnalysisAlien *plugin = new AliAnalysisAlien(); | |
295 | ||
296 | if (aProof == -1) | |
297 | plugin->SetRunMode("full"); | |
298 | else | |
299 | plugin->SetRunMode("terminate"); | |
300 | ||
301 | plugin->SetAPIVersion("V1.1x"); | |
302 | plugin->SetROOTVersion("v5-26-00b-2"); | |
303 | //plugin->SetAliROOTVersion("v4-19-10-AN"); | |
304 | ||
305 | //plugin->SetGridDataDir("/alice/sim/LHC10b6"); | |
306 | //plugin->SetDataPattern("*/AliESDs.root"); | |
307 | //plugin->SetRunRange(115186, 115210); | |
308 | ||
309 | //plugin->SetGridDataDir("/alice/data/2010/LHC10b"); | |
310 | //plugin->SetDataPattern("*/AliESDs.root"); | |
311 | //plugin->SetRunRange(114931, 114931); | |
312 | //plugin->SetRunPrefix("000"); | |
313 | ||
314 | //plugin->AddDataFile("/alice/cern.ch/user/j/jgrosseo/run114931_6.xml"); //LHC10b4 | |
315 | ||
316 | TString dataStr(data); | |
317 | dataStr.ReplaceAll("__", "#"); | |
318 | TObjArray* dataList = dataStr.Tokenize("#"); | |
319 | for (Int_t i=0; i<dataList->GetEntries(); i++) | |
320 | plugin->AddDataFile(Form("/alice/cern.ch/user/j/jgrosseo/%s", dataList->At(i)->GetName())); | |
321 | ||
322 | TGrid::Connect("alien://"); | |
323 | ||
324 | // use work dir from ds name | |
325 | TString dir; | |
326 | dir.Form("gridjob/dir_%s", data); | |
327 | if (aProof == -1) | |
328 | gGrid->Rmdir(dir); | |
329 | ||
330 | /* | |
331 | Int_t n = 0; | |
332 | while (n < 1000) | |
333 | { | |
334 | dir.Form("gridjob/dir%d", n); | |
335 | TMap* mapLs = (TMap*) gGrid->Ls(dir)->At(0); | |
336 | TObjString *valueLsPath = dynamic_cast<TObjString*>(mapLs->GetValue("path")); | |
337 | if (!valueLsPath) | |
338 | break; | |
339 | n++; | |
340 | } | |
341 | if (n == 1000) | |
342 | AliFatal("Clean your home dir!"); | |
343 | if (aProof == -2) | |
344 | n--; | |
345 | dir.Form("gridjob/dir%d", n); | |
346 | */ | |
347 | Printf(">>>>> Using relative dir %s", dir.Data()); | |
348 | ||
349 | plugin->SetGridWorkingDir(dir); | |
350 | plugin->SetGridOutputDir("griddir"); | |
351 | plugin->SetDefaultOutputs(); | |
352 | ||
353 | // | |
354 | plugin->SetFastReadOption(); | |
355 | ||
356 | //plugin->EnablePackage(gSystem->ExpandPathName("$ALICE_ROOT/PWG0base.par")); | |
357 | plugin->EnablePackage(gSystem->ExpandPathName("STEERBase.par")); | |
358 | plugin->EnablePackage(gSystem->ExpandPathName("ESD.par")); | |
359 | plugin->EnablePackage(gSystem->ExpandPathName("AOD.par")); | |
360 | plugin->EnablePackage(gSystem->ExpandPathName("ANALYSIS.par")); | |
361 | plugin->EnablePackage(gSystem->ExpandPathName("ANALYSISalice.par")); | |
362 | plugin->EnablePackage(gSystem->ExpandPathName("PWG0base.par")); | |
363 | plugin->SetAnalysisSource("AliMultiplicityTask.cxx"); | |
364 | plugin->SetAdditionalLibs("AliMultiplicityTask.h AliMultiplicityTask.cxx"); | |
365 | ||
366 | plugin->SetSplitMaxInputFileNumber(50); | |
367 | plugin->SetNtestFiles(2); | |
368 | ||
369 | AliAnalysisManager::GetAnalysisManager()->SetGridHandler(plugin); | |
370 | ||
371 | mgr->StartAnalysis("grid"); | |
372 | if (aProof == -1) | |
373 | return; | |
374 | } | |
375 | ||
376 | if (save) | |
377 | { | |
378 | TString path("maps/"); | |
379 | path += TString(data).Tokenize("/")->Last()->GetName(); | |
380 | ||
381 | UInt_t triggerNoFlags = (UInt_t) trigger % (UInt_t) AliTriggerAnalysis::kStartOfFlags; | |
382 | switch (triggerNoFlags) | |
383 | { | |
384 | case AliTriggerAnalysis::kAcceptAll: path += "/all"; break; | |
385 | case AliTriggerAnalysis::kMB1: path += "/mb1"; break; | |
386 | case AliTriggerAnalysis::kMB2: path += "/mb2"; break; | |
387 | case AliTriggerAnalysis::kMB3: path += "/mb3"; break; | |
388 | case AliTriggerAnalysis::kSPDGFO: path += "/spdgfo"; break; | |
389 | case AliTriggerAnalysis::kSPDGFOBits: path += "/spdgfobits"; break; | |
390 | case AliTriggerAnalysis::kV0AND: path += "/v0and"; break; | |
391 | case AliTriggerAnalysis::kNSD1: path += "/nsd1"; break; | |
392 | case AliTriggerAnalysis::kMB1Prime: path += "/mb1prime"; break; | |
393 | default: Printf("ERROR: Trigger undefined for path to files"); return; | |
394 | } | |
395 | ||
396 | if (trigger & AliTriggerAnalysis::kOneParticle) | |
397 | path += "-onepart"; | |
398 | ||
399 | if (analysisMode & AliPWG0Helper::kSPD) | |
400 | path += "/spd"; | |
401 | ||
402 | if (analysisMode & AliPWG0Helper::kTPC) | |
403 | path += "/tpc"; | |
404 | ||
405 | if (analysisMode & AliPWG0Helper::kTPCITS) | |
406 | path += "/tpcits"; | |
407 | ||
408 | gSystem->mkdir(path, kTRUE); | |
409 | ||
410 | TString fileName("multiplicity"); | |
411 | if (optionStr.Contains("only-process-type-nd")) | |
412 | fileName += "ND"; | |
413 | if (optionStr.Contains("only-process-type-sd")) | |
414 | fileName += "SD"; | |
415 | if (optionStr.Contains("only-process-type-dd")) | |
416 | fileName += "DD"; | |
417 | fileName += ".root"; | |
418 | ||
419 | gSystem->Rename(fileName, path + "/" + fileName); | |
420 | gSystem->Rename("event_stat.root", path + "/event_stat.root"); | |
421 | ||
422 | Printf(">>>>> Moved files to %s", path.Data()); | |
423 | } | |
a9017e49 | 424 | } |