0a8a8621c39a2beae9bfc37d88366381cbbbba24
[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   TString taskName;
33   if (runWhat == 0 || runWhat == 2)
34   {
35     Printf("Running AlidNdEtaTask");
36   }
37   if (runWhat == 1 || runWhat == 2)
38   {
39     Printf("Running AlidNdEtaCorrectionTask");
40     if (!mc)
41     {
42       Printf("AlidNdEtaCorrectionTask needs MC. Exiting...");
43       return;
44     }
45   }
46
47   if (nRuns < 0)
48     nRuns = 1234567890;
49
50   if (aProof)
51   {
52     TProof::Open("lxb6046");
53     //gProof->SetParallel(1);
54
55     // Enable the needed package
56     if (1)
57     {
58       gProof->UploadPackage("$ALICE_ROOT/STEERBase");
59       gProof->EnablePackage("$ALICE_ROOT/STEERBase");
60       gProof->UploadPackage("$ALICE_ROOT/ESD");
61       gProof->EnablePackage("$ALICE_ROOT/ESD");
62       gProof->UploadPackage("$ALICE_ROOT/AOD");
63       gProof->EnablePackage("$ALICE_ROOT/AOD");
64       gProof->UploadPackage("$ALICE_ROOT/ANALYSIS");
65       gProof->EnablePackage("$ALICE_ROOT/ANALYSIS");
66       gProof->UploadPackage("$ALICE_ROOT/ANALYSISalice");
67       gProof->EnablePackage("$ALICE_ROOT/ANALYSISalice");
68     }
69     else
70     {
71       gProof->UploadPackage("/afs/cern.ch/alice/caf/sw/ALICE/PARs/v4-14-Release/AF-v4-14");
72       gProof->EnablePackage("/afs/cern.ch/alice/caf/sw/ALICE/PARs/v4-14-Release/AF-v4-14");
73     }
74
75     gProof->UploadPackage("$ALICE_ROOT/PWG0base");
76     gProof->EnablePackage("$ALICE_ROOT/PWG0base");
77   }
78   else
79   {
80     gSystem->Load("libVMC");
81     gSystem->Load("libTree");
82     gSystem->Load("libSTEERBase");
83     gSystem->Load("libESD");
84     gSystem->Load("libAOD");
85     gSystem->Load("libANALYSIS");
86     gSystem->Load("libANALYSISalice");
87     gSystem->Load("libPWG0base");
88   }
89
90   // Create the analysis manager
91   mgr = new AliAnalysisManager;
92
93   AliPWG0Helper::AnalysisMode analysisMode = AliPWG0Helper::kSPD;
94   AliPWG0Helper::Trigger      trigger      = AliPWG0Helper::kMB1;
95
96   AliPWG0Helper::PrintConf(analysisMode, trigger);
97
98   AliESDtrackCuts* esdTrackCuts = 0;
99   if (analysisMode != AliPWG0Helper::kSPD)
100   {
101     // selection of esd tracks
102     gROOT->ProcessLine(".L ../CreateStandardCuts.C");
103     esdTrackCuts = CreateTrackCuts(analysisMode);
104     if (!esdTrackCuts)
105     {
106       printf("ERROR: esdTrackCuts could not be created\n");
107       return;
108     }
109     esdTrackCuts->SetHistogramsOn(kTRUE);
110   }
111
112   cInput  = mgr->CreateContainer("cInput", TChain::Class(), AliAnalysisManager::kInputContainer);
113
114   // Create, add task
115   if (runWhat == 0 || runWhat == 2)
116   {
117     Load("AlidNdEtaTask", aDebug);
118     task = new AlidNdEtaTask(option);
119
120     if (mc)
121       task->SetReadMC();
122
123     // syst. error flags
124     //task->SetUseMCVertex();
125     //task->SetUseMCKine();
126     //task->SetOnlyPrimaries();
127
128     task->SetTrigger(trigger);
129     task->SetAnalysisMode(analysisMode);
130     task->SetTrackCuts(esdTrackCuts);
131
132     mgr->AddTask(task);
133
134     // Attach input
135     mgr->ConnectInput(task, 0, cInput);
136
137     // Attach output
138     cOutput = mgr->CreateContainer("cOutput", TList::Class(), AliAnalysisManager::kOutputContainer);
139     mgr->ConnectOutput(task, 0, cOutput);
140   }
141   if (runWhat == 1 || runWhat == 2)
142   {
143     Load("AlidNdEtaCorrectionTask", aDebug);
144     task2 = new AlidNdEtaCorrectionTask(option);
145
146     // syst. error flags
147     //task2->SetOnlyPrimaries();
148
149     task2->SetTrigger(trigger);
150     task2->SetAnalysisMode(analysisMode);
151     task2->SetTrackCuts(esdTrackCuts);
152
153     mgr->AddTask(task2);
154
155     // Attach input
156     mgr->ConnectInput(task2, 0, cInput);
157
158     // Attach output
159     cOutput = mgr->CreateContainer("cOutput2", TList::Class(), AliAnalysisManager::kOutputContainer);
160     mgr->ConnectOutput(task2, 0, cOutput);
161   }
162
163   if (mc) {
164     // Enable MC event handler
165     AliMCEventHandler* handler = new AliMCEventHandler;
166     handler->SetReadTR(kFALSE);
167     mgr->SetMCtruthEventHandler(handler);
168   }
169
170   // Add ESD handler
171   AliESDInputHandler* esdH = new AliESDInputHandler;
172   esdH->SetInactiveBranches("*");
173   mgr->SetInputEventHandler(esdH);
174
175   // Enable debug printouts
176   if (aDebug)
177     mgr->SetDebugLevel(2);
178
179   // Run analysis
180   mgr->InitAnalysis();
181   mgr->PrintStatus();
182
183   if (aProof == 2)
184   {
185     // process dataset
186
187     mgr->StartAnalysis("proof", data, nRuns, offset);
188   }
189   else if (aProof == 3)
190   {
191     ROOT->ProcessLine(".L CreateChainFromDataSet.C");
192     ds = gProof->GetDataSet(data);
193     chain = CreateChainFromDataSet(ds);
194     mgr->StartAnalysis("local", chain, nRuns, offset);
195   }
196   else
197   {
198     // Create chain of input files
199     gROOT->LoadMacro("../CreateESDChain.C");
200
201     chain = CreateESDChain(data, nRuns, offset);
202     //chain = CreateChain("TE", data, nRuns, offset);
203
204     mgr->StartAnalysis((aProof > 0) ? "proof" : "local", chain);
205   }
206 }
207