]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG0/dNdEta/run.C
fix for bug #62663
[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, Int_t requiredData = 1, const char* option = "", const char* requireClass = "", const char* rejectClass = "")
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   // requiredData option: 0 = only ESD
33   //                      1 = ESD+MC
34   //                      2 = RAW (ESD+check on event type)
35   //
36   // option is passed to the task(s)
37   //   option SAVE is removed and results in moving the output files to maps/<ds name>/<trigger>/<det>
38   //
39   
40   TString taskName;
41   if (runWhat == 0 || runWhat == 2)
42   {
43     Printf("Running AlidNdEtaTask");
44   }
45   if (runWhat == 1 || runWhat == 2)
46   {
47     Printf("Running AlidNdEtaCorrectionTask");
48     if (requiredData != 1)
49     {
50       Printf("AlidNdEtaCorrectionTask needs MC. Exiting...");
51       return;
52     }
53   }
54
55   if (nRuns < 0)
56     nRuns = 1234567890;
57
58   if (aProof)
59   {
60     TProof::Mgr("alicecaf")->SetROOTVersion("v5-24-00a"); 
61     TProof::Open("alicecaf"); 
62     //gProof->SetParallel(2);
63     //gProof->SetParameter("PROOF_Packetizer", "TPacketizer");
64
65     Bool_t fullAliroot = kFALSE;
66     // Enable the needed package
67     if (1)
68     {
69       gProof->UploadPackage("$ALICE_ROOT/STEERBase");
70       gProof->EnablePackage("$ALICE_ROOT/STEERBase");
71       gProof->UploadPackage("$ALICE_ROOT/ESD");
72       gProof->EnablePackage("$ALICE_ROOT/ESD");
73       gProof->UploadPackage("$ALICE_ROOT/AOD");
74       gProof->EnablePackage("$ALICE_ROOT/AOD");
75       gProof->UploadPackage("$ALICE_ROOT/ANALYSIS");
76       gProof->EnablePackage("$ALICE_ROOT/ANALYSIS");
77       gProof->UploadPackage("$ALICE_ROOT/ANALYSISalice");
78       gProof->EnablePackage("$ALICE_ROOT/ANALYSISalice");
79     }
80     else if (!fullAliroot)
81     {
82       gProof->UploadPackage("$ALICE_ROOT/AF-v4-18-12-AN.par");
83       gProof->EnablePackage("AF-v4-18-12-AN");
84     }
85     else
86     {
87       // needed if ITS recpoints are accessed, see AlidNdEtaTask, FULLALIROOT define statement
88       gProof->UploadPackage("$ALICE_ROOT/v4-18-12-AN-all.par");
89       gProof->EnablePackage("v4-18-12-AN-all");
90     
91       gProof->Exec("TGrid::Connect(\"alien://\")", kTRUE);
92       
93       // TODO add this to loadlibs.C
94       gProof->Exec("gSystem->Load(\"libXMLParser\")", kTRUE);
95     }
96
97     gProof->UploadPackage("$ALICE_ROOT/PWG0base");
98     gProof->EnablePackage("$ALICE_ROOT/PWG0base");
99   }
100   else
101   {
102     gSystem->AddIncludePath("-I${ALICE_ROOT}/include/ -I${ALICE_ROOT}/PWG0/ -I${ALICE_ROOT}/PWG0/dNdEta/"); 
103     gSystem->Load("libVMC");
104     gSystem->Load("libTree");
105     gSystem->Load("libProof");
106     gSystem->Load("libSTEERBase");
107     gSystem->Load("libESD");
108     gSystem->Load("libAOD");
109     gSystem->Load("libANALYSIS");
110     gSystem->Load("libANALYSISalice");
111     gSystem->Load("libPWG0base");
112   }
113
114   // Create the analysis manager
115   mgr = new AliAnalysisManager;
116
117   // Add ESD handler
118   
119   if (fullAliroot)
120     AliESDInputHandler* esdH = new AliESDInputHandlerRP; // for RecPoints
121   else
122     AliESDInputHandler* esdH = new AliESDInputHandlerRP;
123   
124   esdH->SetInactiveBranches("AliESDACORDE FMD AliRawDataErrorLogs CaloClusters Cascades EMCALCells EMCALTrigger ESDfriend Kinks Kinks Cascades ALIESDACORDE MuonTracks TrdTracks CaloClusters");
125   mgr->SetInputEventHandler(esdH);
126
127   AliPWG0Helper::AnalysisMode analysisMode = AliPWG0Helper::kSPD | AliPWG0Helper::kFieldOn;
128   AliTriggerAnalysis::Trigger trigger      = AliTriggerAnalysis::kSPDGFOBits | AliTriggerAnalysis::kOfflineFlag; // AcceptAll;
129
130   AliPWG0Helper::PrintConf(analysisMode, trigger);
131
132   AliESDtrackCuts* esdTrackCuts = 0;
133   if (!(analysisMode & AliPWG0Helper::kSPD))
134   {
135     // selection of esd tracks
136     gROOT->ProcessLine(".L ../CreateStandardCuts.C");
137     esdTrackCuts = CreateTrackCuts(analysisMode);
138     if (!esdTrackCuts)
139     {
140       printf("ERROR: esdTrackCuts could not be created\n");
141       return;
142     }
143     esdTrackCuts->SetHistogramsOn(kTRUE);
144   }
145
146   cInput = mgr->GetCommonInputContainer();
147   
148   // remove SAVE option if set
149   Bool_t save = kFALSE;
150   TString optStr(option);
151   if (optStr.Contains("SAVE"))
152   {
153     optStr = optStr(0,optStr.Index("SAVE")) + optStr(optStr.Index("SAVE")+4, optStr.Length());
154     save = kTRUE;
155   }
156   
157   // Create, add task
158   if (runWhat == 0 || runWhat == 2)
159   {
160     Load("AlidNdEtaTask", aDebug);
161     task = new AlidNdEtaTask(optStr);
162
163     if (requiredData == 1)
164       task->SetReadMC();
165
166     // syst. error flags
167     //task->SetUseMCVertex();
168     //task->SetUseMCKine();
169     //task->SetOnlyPrimaries();
170     //task->SetFillPhi();
171     //task->SetSymmetrize();
172     
173     task->SetTrigger(trigger);
174     task->SetAnalysisMode(analysisMode);
175     task->SetTrackCuts(esdTrackCuts);
176     //task->SetDeltaPhiCut(0.05);
177     
178     if (requiredData == 2)
179       task->SetCheckEventType();
180     task->SetTriggerClasses(requireClass, rejectClass);
181
182     mgr->AddTask(task);
183
184     // Attach input
185     mgr->ConnectInput(task, 0, cInput);
186
187     // Attach output
188     cOutput = mgr->CreateContainer("cOutput", TList::Class(), AliAnalysisManager::kOutputContainer);
189     mgr->ConnectOutput(task, 0, cOutput);
190   }
191   if (runWhat == 1 || runWhat == 2)
192   {
193     Load("AlidNdEtaCorrectionTask", aDebug);
194     task2 = new AlidNdEtaCorrectionTask(optStr);
195
196     // syst. error flags
197     //task2->SetFillPhi();
198     //task2->SetOnlyPrimaries();
199     //task2->SetSymmetrize();
200
201     task2->SetTrigger(trigger);
202     task2->SetAnalysisMode(analysisMode);
203     task2->SetTrackCuts(esdTrackCuts);
204     //task2->SetDeltaPhiCut(0.05);
205
206     mgr->AddTask(task2);
207
208     // Attach input
209     mgr->ConnectInput(task2, 0, cInput);
210
211     // Attach output
212     cOutput = mgr->CreateContainer("cOutput2", TList::Class(), AliAnalysisManager::kOutputContainer);
213     mgr->ConnectOutput(task2, 0, cOutput);
214   }
215
216   if (requiredData == 1) {
217     // Enable MC event handler
218     AliMCEventHandler* handler = new AliMCEventHandler;
219     handler->SetReadTR(kFALSE);
220     mgr->SetMCtruthEventHandler(handler);
221   }
222
223   // Enable debug printouts
224   if (aDebug)
225     mgr->SetDebugLevel(2);
226
227   // Run analysis
228   mgr->InitAnalysis();
229   mgr->PrintStatus();
230
231   if (aProof == 2)
232   {
233     // process dataset
234
235     mgr->StartAnalysis("proof", data, nRuns, offset);
236     
237     if (save)
238     {
239       TString path("maps/");
240       path += TString(data).Tokenize("/")->Last()->GetName();
241       
242       UInt_t triggerNoFlags = (UInt_t) trigger % (UInt_t) AliTriggerAnalysis::kStartOfFlags;
243       switch (triggerNoFlags)
244       {
245         case AliTriggerAnalysis::kMB1: path += "/mb1"; break;
246         case AliTriggerAnalysis::kMB2: path += "/mb2"; break;
247         case AliTriggerAnalysis::kMB3: path += "/mb3"; break;
248         case AliTriggerAnalysis::kSPDGFO: path += "/spdgfo"; break;
249         case AliTriggerAnalysis::kSPDGFOBits: path += "/spdgfobits"; break;
250         default: Printf("ERROR: Trigger undefined for path to files"); return;
251       }
252       
253       if (strlen(requireClass) > 0 && strlen(rejectClass) == 0)
254       {
255         path += Form("/%s", requireClass);
256       }
257       else if (strlen(rejectClass) > 0)
258         path += Form("/%s--%s", requireClass, rejectClass);
259       
260       if (analysisMode & AliPWG0Helper::kSPD)
261         path += "/spd";
262       
263       if (analysisMode & AliPWG0Helper::kTPC)
264         path += "/tpc";
265         
266       gSystem->mkdir(path, kTRUE);
267       if (runWhat == 0 || runWhat == 2)
268       {
269         gSystem->Rename("analysis_esd_raw.root", path + "/analysis_esd_raw.root");
270         if (requiredData == 1)
271           gSystem->Rename("analysis_mc.root", path + "/analysis_mc.root");
272       }
273       if (runWhat == 1 || runWhat == 2)
274       {
275         gSystem->Rename("correction_map.root", path + "/correction_map.root");
276       }
277       
278       Printf(">>>>> Moved files to %s", path.Data());
279     }
280   }
281   else if (aProof == 3)
282   {
283     gROOT->ProcessLine(".L CreateChainFromDataSet.C");
284     ds = gProof->GetDataSet(data)->GetStagedSubset();
285     chain = CreateChainFromDataSet(ds);
286     mgr->StartAnalysis("local", chain, nRuns, offset);
287   }
288   else
289   {
290     // Create chain of input files
291     gROOT->LoadMacro("../CreateESDChain.C");
292
293     chain = CreateESDChain(data, nRuns, offset);
294     //chain = CreateChain("TE", data, nRuns, offset);
295
296     mgr->StartAnalysis((aProof > 0) ? "proof" : "local", chain);
297   }
298 }
299