]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG0/dNdEta/run.C
changed binning: accepts events in z +- 30cm and eta +- 3
[u/mrichter/AliRoot.git] / PWG0 / dNdEta / run.C
CommitLineData
745d6088 1void 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 = "")
0f67a57c 2{
0fc41645 3 // runWhat options: 0 = AlidNdEtaTask
4 // 1 = AlidNdEtaCorrectionTask
5 //
6 // aProof option: 0 no proof
7 // 1 proof with chain
8 // 2 proof with dataset
9
10 TString taskName;
11 if (runWhat == 0)
12 {
13 taskName = "AlidNdEtaTask";
14 }
15 else if (runWhat == 1)
16 {
17 taskName = "AlidNdEtaCorrectionTask";
18 if (!mc)
19 {
20 Printf("%s needs MC. Exiting...", taskName.Data());
21 return;
22 }
23 }
24 else
25 {
26 Printf("Do not know what to run. Exiting...");
27 return;
28 }
29
30 Printf("Processing task: %s", taskName.Data());
31
32 if (nRuns < 0)
33 nRuns = 1234567890;
34
0f67a57c 35 if (aProof)
36 {
37 TProof::Open("lxb6046");
0fc41645 38 //gProof->SetParallel(1);
0f67a57c 39
40 // Enable the needed package
567160d6 41 if (1)
42 {
43 gProof->UploadPackage("$ALICE_ROOT/STEERBase");
44 gProof->EnablePackage("$ALICE_ROOT/STEERBase");
45 gProof->UploadPackage("$ALICE_ROOT/ESD");
46 gProof->EnablePackage("$ALICE_ROOT/ESD");
47 gProof->UploadPackage("$ALICE_ROOT/AOD");
48 gProof->EnablePackage("$ALICE_ROOT/AOD");
49 gProof->UploadPackage("$ALICE_ROOT/ANALYSIS");
50 gProof->EnablePackage("$ALICE_ROOT/ANALYSIS");
51 gProof->UploadPackage("$ALICE_ROOT/ANALYSISalice");
52 gProof->EnablePackage("$ALICE_ROOT/ANALYSISalice");
53 }
54 else
55 {
56 gProof->UploadPackage("$ALICE_ROOT/AF-v4-12");
57 gProof->EnablePackage("$ALICE_ROOT/AF-v4-12");
58 }
0fc41645 59
60 gProof->UploadPackage("$ALICE_ROOT/PWG0base");
61 gProof->EnablePackage("$ALICE_ROOT/PWG0base");
0f67a57c 62 }
63 else
64 {
65 gSystem->Load("libVMC");
66 gSystem->Load("libTree");
67 gSystem->Load("libSTEERBase");
68 gSystem->Load("libESD");
69 gSystem->Load("libANALYSIS");
745d6088 70 gSystem->Load("libANALYSISalice");
0f67a57c 71 gSystem->Load("libPWG0base");
72 }
73
0f67a57c 74 // Create the analysis manager
75 mgr = new AliAnalysisManager;
76
0fc41645 77 TString compileTaskName;
78 compileTaskName.Form("%s.cxx+", taskName.Data());
0f67a57c 79 if (aDebug)
0fc41645 80 compileTaskName += "+g";
0f67a57c 81
82 // Create, add task
83 if (aProof) {
0fc41645 84 gProof->Load(compileTaskName);
0f67a57c 85 } else
0fc41645 86 gROOT->Macro(compileTaskName);
770a1f1d 87
3d7758c1 88 AliPWG0Helper::AnalysisMode analysisMode = AliPWG0Helper::kSPD;
0fc41645 89 AliPWG0Helper::Trigger trigger = AliPWG0Helper::kMB1;
90
91 AliPWG0Helper::PrintConf(analysisMode, trigger);
770a1f1d 92
0fc41645 93 AliESDtrackCuts* esdTrackCuts = 0;
770a1f1d 94 if (analysisMode != AliPWG0Helper::kSPD)
95 {
96 // selection of esd tracks
97 gROOT->ProcessLine(".L ../CreateStandardCuts.C");
0fc41645 98 esdTrackCuts = CreateTrackCuts(analysisMode);
770a1f1d 99 if (!esdTrackCuts)
100 {
101 printf("ERROR: esdTrackCuts could not be created\n");
102 return;
103 }
0fc41645 104 }
105
106 if (runWhat == 0)
107 {
108 task = new AlidNdEtaTask(option);
770a1f1d 109
0fc41645 110 if (mc)
111 task->SetReadMC();
112
113 //task->SetUseMCVertex();
114 //task->SetUseMCKine();
770a1f1d 115 }
0fc41645 116 else if (runWhat == 1)
117 {
118 task = new AlidNdEtaCorrectionTask(option);
0f67a57c 119
0fc41645 120 //task->SetOnlyPrimaries();
121 }
0f67a57c 122
0fc41645 123 task->SetTrigger(trigger);
124 task->SetAnalysisMode(analysisMode);
125 task->SetTrackCuts(esdTrackCuts);
7307d52c 126
0f67a57c 127 mgr->AddTask(task);
128
129 if (mc) {
130 // Enable MC event handler
131 AliMCEventHandler* handler = new AliMCEventHandler;
132 handler->SetReadTR(kFALSE);
133 mgr->SetMCtruthEventHandler(handler);
134 }
135
136 // Add ESD handler
137 AliESDInputHandler* esdH = new AliESDInputHandler;
567160d6 138 //esdH->SetInactiveBranches("*");
0f67a57c 139 mgr->SetInputEventHandler(esdH);
140
141 // Attach input
142 cInput = mgr->CreateContainer("cInput", TChain::Class(), AliAnalysisManager::kInputContainer);
143 mgr->ConnectInput(task, 0, cInput);
144
145 // Attach output
146 cOutput = mgr->CreateContainer("cOutput", TList::Class(), AliAnalysisManager::kOutputContainer);
147 mgr->ConnectOutput(task, 0, cOutput);
148
149 // Enable debug printouts
150 if (aDebug)
0fc41645 151 {
0f67a57c 152 mgr->SetDebugLevel(2);
0fc41645 153 AliLog::SetClassDebugLevel(taskName, AliLog::kDebug+2);
154 }
155 else
156 AliLog::SetClassDebugLevel(taskName, AliLog::kWarning);
0f67a57c 157
158 // Run analysis
159 mgr->InitAnalysis();
160 mgr->PrintStatus();
161
0fc41645 162 if (aProof == 2)
163 {
164 // process dataset
165
166 mgr->StartAnalysis("proof", data, nRuns, offset);
167 }
168 else
169 {
170 // Create chain of input files
171 gROOT->LoadMacro("../CreateESDChain.C");
172 chain = CreateESDChain(data, nRuns, offset);
173
174 mgr->StartAnalysis((aProof > 0) ? "proof" : "local", chain);
175 }
0f67a57c 176}
dd367a14 177
178void loadlibs()
179{
180 gSystem->Load("libTree");
181 gSystem->Load("libVMC");
182
183 gSystem->Load("libSTEERBase");
184 gSystem->Load("libANALYSIS");
185 gSystem->Load("libPWG0base");
186}
187
188void FinishAnalysisAll(const char* dataInput = "analysis_esd_raw.root", const char* dataOutput = "analysis_esd.root", const char* correctionMapFile = "correction_map.root", const char* correctionMapFolder = "dndeta_correction")
189{
190 loadlibs();
191
192 AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection(correctionMapFolder, correctionMapFolder);
193 TFile::Open(correctionMapFile);
194 dNdEtaCorrection->LoadHistograms();
195
196 TFile* file = TFile::Open(dataInput);
197
198 if (!file)
199 {
200 cout << "Error. File not found" << endl;
201 return;
202 }
203
567160d6 204 // Note: the last parameter does not define which analysis is going to happen, the histograms will be overwritten when loading from the f
0fc41645 205 dNdEtaAnalysis* fdNdEtaAnalysis = new dNdEtaAnalysis("dndetaNSD", "dndetaNSD");
dd367a14 206 fdNdEtaAnalysis->LoadHistograms("fdNdEtaAnalysisESD");
0fc41645 207 fdNdEtaAnalysis->Finish(dNdEtaCorrection, 0.3, AlidNdEtaCorrection::kNSD, "ESD -> NSD");
770a1f1d 208 //fdNdEtaAnalysis->DrawHistograms(kTRUE);
dd367a14 209 TFile* file2 = TFile::Open(dataOutput, "RECREATE");
210 fdNdEtaAnalysis->SaveHistograms();
211
0fc41645 212 file->cd();
213 dNdEtaAnalysis* fdNdEtaAnalysis = new dNdEtaAnalysis("dndeta", "dndeta");
214 fdNdEtaAnalysis->LoadHistograms("fdNdEtaAnalysisESD");
215 fdNdEtaAnalysis->Finish(dNdEtaCorrection, 0.3, AlidNdEtaCorrection::kINEL, "ESD -> full inelastic");
216 //fdNdEtaAnalysis->DrawHistograms(kTRUE);
217 file2->cd();
218 fdNdEtaAnalysis->SaveHistograms();
219
dd367a14 220 file->cd();
221 fdNdEtaAnalysis = new dNdEtaAnalysis("dndetaTr", "dndetaTr");
222 fdNdEtaAnalysis->LoadHistograms("fdNdEtaAnalysisESD");
0fc41645 223 fdNdEtaAnalysis->Finish(dNdEtaCorrection, 0.3, AlidNdEtaCorrection::kVertexReco, "ESD -> minimum bias");
770a1f1d 224 //fdNdEtaAnalysis->DrawHistograms(kTRUE);
dd367a14 225 file2->cd();
226 fdNdEtaAnalysis->SaveHistograms();
227
228 file->cd();
229 fdNdEtaAnalysis = new dNdEtaAnalysis("dndetaTrVtx", "dndetaTrVtx");
230 fdNdEtaAnalysis->LoadHistograms("fdNdEtaAnalysisESD");
745d6088 231 fdNdEtaAnalysis->Finish(dNdEtaCorrection, 0.3, AlidNdEtaCorrection::kTrack2Particle, "ESD -> MB with vertex");
770a1f1d 232 //fdNdEtaAnalysis->DrawHistograms(kTRUE);
dd367a14 233 file2->cd();
234 fdNdEtaAnalysis->SaveHistograms();
235
236 file->cd();
237 fdNdEtaAnalysis = new dNdEtaAnalysis("dndetaTracks", "dndetaTracks");
238 fdNdEtaAnalysis->LoadHistograms("fdNdEtaAnalysisESD");
0fc41645 239 fdNdEtaAnalysis->Finish(0, 0.3, AlidNdEtaCorrection::kNone, "ESD raw");
770a1f1d 240 //fdNdEtaAnalysis->DrawHistograms(kTRUE);
dd367a14 241 file2->cd();
242 fdNdEtaAnalysis->SaveHistograms();
9c4cc5e7 243
244 file2->Write();
245 file2->Close();
dd367a14 246}
247
248void* FinishAnalysis(const char* analysisFile = "analysis_esd_raw.root", const char* analysisDir = "fdNdEtaAnalysisESD", const char* correctionMapFile = "correction_map.root", const char* correctionMapFolder = "dndeta_correction", Bool_t useUncorrected = kFALSE, Bool_t simple = kFALSE)
249{
250 loadlibs();
251
252 TFile* file = TFile::Open(analysisFile);
253
254 dNdEtaAnalysis* fdNdEtaAnalysis = new dNdEtaAnalysis(analysisDir, analysisDir);
255 fdNdEtaAnalysis->LoadHistograms();
256
257 if (correctionMapFile)
258 {
259 AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection(correctionMapFolder, correctionMapFolder);
260 TFile::Open(correctionMapFile);
261 dNdEtaCorrection->LoadHistograms();
262
263 fdNdEtaAnalysis->Finish(dNdEtaCorrection, 0.3, AlidNdEtaCorrection::kINEL);
264 //fdNdEtaAnalysis->Finish(dNdEtaCorrection, 0, AlidNdEtaCorrection::kINEL);
265 //fdNdEtaAnalysis->Finish(dNdEtaCorrection, 0, AlidNdEtaCorrection::kTrack2Particle);
266 }
267 else
3dfa46a4 268 fdNdEtaAnalysis->Finish(0, 0.3, AlidNdEtaCorrection::kNone);
dd367a14 269
270 fdNdEtaAnalysis->DrawHistograms(simple);
271
272 TH1* hist = fdNdEtaAnalysis->GetdNdEtaHistogram(1);
273 Int_t binLeft = hist->GetXaxis()->FindBin(-0.5);
274 Int_t binRight = hist->GetXaxis()->FindBin(0.5);
275 Float_t value1 = hist->Integral(binLeft, binRight);
276
277 hist = fdNdEtaAnalysis->GetdNdEtaHistogram(2);
278 Float_t value2 = hist->Integral(binLeft, binRight);
279
280 if (value2 > 0)
281 printf("Ratio is %f, values are %f %f\n", value1 / value2, value1, value2);
282
283 return fdNdEtaAnalysis;
284}