fd90f09cad6baab5aa749afd1462cc9f9c496b55
[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("alicecaf");
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-16-Release/AF-v4-16");
72       gProof->EnablePackage("AF-v4-16");
73     }
74
75     gProof->UploadPackage("$ALICE_ROOT/PWG0base");
76     gProof->EnablePackage("$ALICE_ROOT/PWG0base");
77   }
78   else
79   {
80     gSystem->AddIncludePath("-I${ALICE_ROOT}/include/ -I${ALICE_ROOT}/PWG0/ -I${ALICE_ROOT}/PWG0/dNdEta/"); 
81     gSystem->Load("libVMC");
82     gSystem->Load("libTree");
83     gSystem->Load("libProof");
84     gSystem->Load("libSTEERBase");
85     gSystem->Load("libESD");
86     gSystem->Load("libAOD");
87     gSystem->Load("libANALYSIS");
88     gSystem->Load("libANALYSISalice");
89     gSystem->Load("libPWG0base");
90   }
91
92   // Create the analysis manager
93   mgr = new AliAnalysisManager;
94
95   // Add ESD handler
96   AliESDInputHandler* esdH = new AliESDInputHandler;
97   esdH->SetInactiveBranches("AliESDACORDE FMD ALIESDTZERO ALIESDVZERO ALIESDZDC AliRawDataErrorLogs CaloClusters Cascades EMCALCells EMCALTrigger ESDfriend Kinks Kinks Cascades AliESDTZERO ALIESDACORDE MuonTracks TrdTracks CaloClusters");
98   mgr->SetInputEventHandler(esdH);
99
100   AliPWG0Helper::AnalysisMode analysisMode = AliPWG0Helper::kSPD;
101   AliPWG0Helper::Trigger      trigger      = AliPWG0Helper::kMB1;
102
103   AliPWG0Helper::PrintConf(analysisMode, trigger);
104
105   AliESDtrackCuts* esdTrackCuts = 0;
106   if (analysisMode != AliPWG0Helper::kSPD)
107   {
108     // selection of esd tracks
109     gROOT->ProcessLine(".L ../CreateStandardCuts.C");
110     esdTrackCuts = CreateTrackCuts(analysisMode);
111     if (!esdTrackCuts)
112     {
113       printf("ERROR: esdTrackCuts could not be created\n");
114       return;
115     }
116     esdTrackCuts->SetHistogramsOn(kTRUE);
117   }
118
119   cInput  = mgr->GetCommonInputContainer();
120
121   // Create, add task
122   if (runWhat == 0 || runWhat == 2)
123   {
124     Load("AlidNdEtaTask", aDebug);
125     task = new AlidNdEtaTask(option);
126
127     if (mc)
128       task->SetReadMC();
129
130     // syst. error flags
131     //task->SetUseMCVertex();
132     //task->SetUseMCKine();
133     //task->SetOnlyPrimaries();
134     //task->SetFillPhi();
135     
136     task->SetTrigger(trigger);
137     task->SetAnalysisMode(analysisMode);
138     task->SetTrackCuts(esdTrackCuts);
139     task->SetDeltaPhiCut(0.05);
140
141     mgr->AddTask(task);
142
143     // Attach input
144     mgr->ConnectInput(task, 0, cInput);
145
146     // Attach output
147     cOutput = mgr->CreateContainer("cOutput", TList::Class(), AliAnalysisManager::kOutputContainer);
148     mgr->ConnectOutput(task, 0, cOutput);
149   }
150   if (runWhat == 1 || runWhat == 2)
151   {
152     Load("AlidNdEtaCorrectionTask", aDebug);
153     task2 = new AlidNdEtaCorrectionTask(option);
154
155     // syst. error flags
156     //task2->SetFillPhi();
157     //task2->SetOnlyPrimaries();
158
159     task2->SetTrigger(trigger);
160     task2->SetAnalysisMode(analysisMode);
161     task2->SetTrackCuts(esdTrackCuts);
162     //task2->SetDeltaPhiCut(0.05);
163
164     mgr->AddTask(task2);
165
166     // Attach input
167     mgr->ConnectInput(task2, 0, cInput);
168
169     // Attach output
170     cOutput = mgr->CreateContainer("cOutput2", TList::Class(), AliAnalysisManager::kOutputContainer);
171     mgr->ConnectOutput(task2, 0, cOutput);
172   }
173
174   if (mc) {
175     // Enable MC event handler
176     AliMCEventHandler* handler = new AliMCEventHandler;
177     handler->SetReadTR(kFALSE);
178     mgr->SetMCtruthEventHandler(handler);
179   }
180
181   // Enable debug printouts
182   if (aDebug)
183     mgr->SetDebugLevel(2);
184
185   // Run analysis
186   mgr->InitAnalysis();
187   mgr->PrintStatus();
188
189   if (aProof == 2)
190   {
191     // process dataset
192
193     mgr->StartAnalysis("proof", data, nRuns, offset);
194   }
195   else if (aProof == 3)
196   {
197     gROOT->ProcessLine(".L CreateChainFromDataSet.C");
198     ds = gProof->GetDataSet(data)->GetStagedSubset();
199     chain = CreateChainFromDataSet(ds);
200     mgr->StartAnalysis("local", chain, nRuns, offset);
201   }
202   else
203   {
204     // Create chain of input files
205     gROOT->LoadMacro("../CreateESDChain.C");
206
207     chain = CreateESDChain(data, nRuns, offset);
208     //chain = CreateChain("TE", data, nRuns, offset);
209
210     mgr->StartAnalysis((aProof > 0) ? "proof" : "local", chain);
211   }
212 }
213