]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG0/dNdEta/run.C
first paper analysis code:
[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   AliESDInputHandler* esdH = new AliESDInputHandlerRP; // for RecPoints
102   
103   esdH->SetInactiveBranches("AliESDACORDE FMD ALIESDTZERO ALIESDVZERO ALIESDZDC AliRawDataErrorLogs CaloClusters Cascades EMCALCells EMCALTrigger ESDfriend Kinks Kinks Cascades AliESDTZERO ALIESDACORDE MuonTracks TrdTracks CaloClusters");
104   mgr->SetInputEventHandler(esdH);
105
106   AliPWG0Helper::AnalysisMode analysisMode = AliPWG0Helper::kSPD | AliPWG0Helper::kFieldOn;
107   AliTriggerAnalysis::Trigger trigger      = AliTriggerAnalysis::kSPDGFOBits | AliTriggerAnalysis::kOfflineFlag; // AcceptAll;
108
109   AliPWG0Helper::PrintConf(analysisMode, trigger);
110
111   AliESDtrackCuts* esdTrackCuts = 0;
112   if (!(analysisMode & AliPWG0Helper::kSPD))
113   {
114     // selection of esd tracks
115     gROOT->ProcessLine(".L ../CreateStandardCuts.C");
116     esdTrackCuts = CreateTrackCuts(analysisMode);
117     if (!esdTrackCuts)
118     {
119       printf("ERROR: esdTrackCuts could not be created\n");
120       return;
121     }
122     esdTrackCuts->SetHistogramsOn(kTRUE);
123   }
124
125   cInput = mgr->GetCommonInputContainer();
126   
127   // remove SAVE option if set
128   Bool_t save = kFALSE;
129   TString optStr(option);
130   if (optStr.Contains("SAVE"))
131   {
132     optStr = optStr(0,optStr.Index("SAVE")) + optStr(optStr.Index("SAVE")+4, optStr.Length());
133     save = kTRUE;
134   }
135   
136   // Create, add task
137   if (runWhat == 0 || runWhat == 2)
138   {
139     Load("AlidNdEtaTask", aDebug);
140     task = new AlidNdEtaTask(optStr);
141
142     if (mc)
143       task->SetReadMC();
144
145     // syst. error flags
146     //task->SetUseMCVertex();
147     //task->SetUseMCKine();
148     //task->SetOnlyPrimaries();
149     //task->SetFillPhi();
150     //task->SetSymmetrize();
151     
152     task->SetTrigger(trigger);
153     task->SetAnalysisMode(analysisMode);
154     task->SetTrackCuts(esdTrackCuts);
155     //task->SetDeltaPhiCut(0.05);
156     
157     task->SetCheckEventType();
158
159     mgr->AddTask(task);
160
161     // Attach input
162     mgr->ConnectInput(task, 0, cInput);
163
164     // Attach output
165     cOutput = mgr->CreateContainer("cOutput", TList::Class(), AliAnalysisManager::kOutputContainer);
166     mgr->ConnectOutput(task, 0, cOutput);
167   }
168   if (runWhat == 1 || runWhat == 2)
169   {
170     Load("AlidNdEtaCorrectionTask", aDebug);
171     task2 = new AlidNdEtaCorrectionTask(optStr);
172
173     // syst. error flags
174     //task2->SetFillPhi();
175     //task2->SetOnlyPrimaries();
176     //task2->SetSymmetrize();
177
178     task2->SetTrigger(trigger);
179     task2->SetAnalysisMode(analysisMode);
180     task2->SetTrackCuts(esdTrackCuts);
181     //task2->SetDeltaPhiCut(0.05);
182
183     mgr->AddTask(task2);
184
185     // Attach input
186     mgr->ConnectInput(task2, 0, cInput);
187
188     // Attach output
189     cOutput = mgr->CreateContainer("cOutput2", TList::Class(), AliAnalysisManager::kOutputContainer);
190     mgr->ConnectOutput(task2, 0, cOutput);
191   }
192
193   if (mc) {
194     // Enable MC event handler
195     AliMCEventHandler* handler = new AliMCEventHandler;
196     handler->SetReadTR(kFALSE);
197     mgr->SetMCtruthEventHandler(handler);
198   }
199
200   // Enable debug printouts
201   if (aDebug)
202     mgr->SetDebugLevel(2);
203
204   // Run analysis
205   mgr->InitAnalysis();
206   mgr->PrintStatus();
207
208   if (aProof == 2)
209   {
210     // process dataset
211
212     mgr->StartAnalysis("proof", data, nRuns, offset);
213     
214     if (save)
215     {
216       TString path("maps/");
217       path += TString(data).Tokenize("/")->Last()->GetName();
218       
219       UInt_t triggerNoFlags = (UInt_t) trigger % (UInt_t) AliTriggerAnalysis::kStartOfFlags;
220       switch (triggerNoFlags)
221       {
222         case AliTriggerAnalysis::kMB1: path += "/mb1"; break;
223         case AliTriggerAnalysis::kMB2: path += "/mb2"; break;
224         case AliTriggerAnalysis::kMB3: path += "/mb3"; break;
225         case AliTriggerAnalysis::kSPDGFO: path += "/spdgfo"; break;
226         case AliTriggerAnalysis::kSPDGFOBits: path += "/spdgfobits"; break;
227         default: Printf("ERROR: Trigger undefined for path to files"); return;
228       }
229       
230       if (analysisMode & AliPWG0Helper::kSPD)
231         path += "/spd";
232       
233       if (analysisMode & AliPWG0Helper::kTPC)
234         path += "/tpc";
235         
236       gSystem->mkdir(path, kTRUE);
237       if (runWhat == 0 || runWhat == 2)
238       {
239         gSystem->Rename("analysis_esd_raw.root", path + "/analysis_esd_raw.root");
240         if (mc)
241           gSystem->Rename("analysis_mc.root", path + "/analysis_mc.root");
242       }
243       if (runWhat == 1 || runWhat == 2)
244       {
245         gSystem->Rename("correction_map.root", path + "/correction_map.root");
246       }
247       
248       Printf(">>>>> Moved files to %s", path.Data());
249     }
250   }
251   else if (aProof == 3)
252   {
253     gROOT->ProcessLine(".L CreateChainFromDataSet.C");
254     ds = gProof->GetDataSet(data)->GetStagedSubset();
255     chain = CreateChainFromDataSet(ds);
256     mgr->StartAnalysis("local", chain, nRuns, offset);
257   }
258   else
259   {
260     // Create chain of input files
261     gROOT->LoadMacro("../CreateESDChain.C");
262
263     chain = CreateESDChain(data, nRuns, offset);
264     //chain = CreateChain("TE", data, nRuns, offset);
265
266     mgr->StartAnalysis((aProof > 0) ? "proof" : "local", chain);
267   }
268 }
269