]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/FORWARD/analysis2/AliForwardCorrectionManager.cxx
MC sharing sub-algorithm
[u/mrichter/AliRoot.git] / PWG2 / FORWARD / analysis2 / AliForwardCorrectionManager.cxx
CommitLineData
0bd4b00f 1#include "AliForwardCorrectionManager.h"
2#include "AliForwardUtil.h"
3#include <TString.h>
4#include <AliLog.h>
5#include <TFile.h>
6#include <TSystem.h>
7
8
9//____________________________________________________________________
10AliForwardCorrectionManager* AliForwardCorrectionManager::fgInstance = 0;
11const char* AliForwardCorrectionManager::fgkSecondaryMapSkel = "secondary";
12const char* AliForwardCorrectionManager::fgkDoubleHitSkel = "doublehit";
13const char* AliForwardCorrectionManager::fgkELossFitsSkel = "elossfits";
14const char* AliForwardCorrectionManager::fgkVertexBiasSkel = "vertexbias";
15const char* AliForwardCorrectionManager::fgkMergingEffSkel = "merging";
16
17#define PREFIX "$(ALICE_ROOT)/PWG2/FORWARD/corrections/"
18
19//____________________________________________________________________
20AliForwardCorrectionManager& AliForwardCorrectionManager::Instance()
21{
22 if (!fgInstance) fgInstance= new AliForwardCorrectionManager;
23 return *fgInstance;
24}
25
26//____________________________________________________________________
27AliForwardCorrectionManager::AliForwardCorrectionManager()
28 : TObject(),
29 fInit(kFALSE),
30 fSys(0),
31 fSNN(0),
32 fField(999),
33 fELossFitsPath(PREFIX "ELossFits"),
34 fMergingEffPath(PREFIX "MergingEfficiency"),
35 fSecondaryMapPath(PREFIX "SecondaryMap"),
36 fDoubleHitPath(PREFIX "DoubleHit"),
37 fVertexBiasPath(PREFIX "VertexBias"),
38 fELossFit(0),
39 fSecondaryMap(0),
40 fDoubleHit(0),
41 fVertexBias(0),
42 fMergingEfficiency(0)
43{
44}
45//____________________________________________________________________
46AliForwardCorrectionManager::AliForwardCorrectionManager(const AliForwardCorrectionManager& o)
47 : TObject(o),
48 fInit(o.fInit),
49 fSys(o.fSys),
50 fSNN(o.fSNN),
51 fField(o.fField),
52 fELossFitsPath(o.fELossFitsPath),
53 fMergingEffPath(o.fMergingEffPath),
54 fSecondaryMapPath(o.fSecondaryMapPath),
55 fDoubleHitPath(o.fDoubleHitPath),
56 fVertexBiasPath(o.fVertexBiasPath),
57 fELossFit(o.fELossFit),
58 fSecondaryMap(o.fSecondaryMap),
59 fDoubleHit(o.fDoubleHit),
60 fVertexBias(o.fVertexBias),
61 fMergingEfficiency(o.fMergingEfficiency)
62
63{
64}
65//____________________________________________________________________
66AliForwardCorrectionManager&
67AliForwardCorrectionManager::operator=(const AliForwardCorrectionManager& o)
68{
69 fInit = o.fInit;
70 fSys = o.fSys;
71 fSNN = o.fSNN;
72 fField = o.fField;
73 fELossFitsPath = o.fELossFitsPath;
74 fMergingEffPath = o.fMergingEffPath;
75 fSecondaryMapPath = o.fSecondaryMapPath;
76 fDoubleHitPath = o.fDoubleHitPath;
77 fVertexBiasPath = o.fVertexBiasPath;
78 fELossFit = o.fELossFit;
79 fSecondaryMap = o.fSecondaryMap;
80 fDoubleHit = o.fDoubleHit;
81 fVertexBias = o.fVertexBias;
82 fMergingEfficiency= o.fMergingEfficiency;
83 return *this;
84}
85
86//____________________________________________________________________
87Bool_t
88AliForwardCorrectionManager::Init(const char* cms,
89 Float_t sNN,
90 Float_t field,
91 Bool_t mc,
92 UInt_t what,
93 Bool_t force)
94{
95 UShort_t col = AliForwardUtil::ParseCollisionSystem(cms);
96 return Init(col,
97 AliForwardUtil::ParseCenterOfMassEnergy(col, sNN),
98 AliForwardUtil::ParseMagneticField(field),
99 mc, what, force);
100}
101
102//____________________________________________________________________
103Bool_t
104AliForwardCorrectionManager::Init(UShort_t cms,
105 UShort_t sNN,
106 Short_t field,
107 Bool_t mc,
108 UInt_t what,
109 Bool_t force)
110{
111 if (force) fInit = kFALSE;
112 if (fInit) return kTRUE;
113
114 Bool_t ret = kTRUE;
115 if (fSys == cms && TMath::Abs(fSNN - sNN) < 10 && fField == field) {
116 // We're already initialised for these settings - do nothing and return
117 fInit = kTRUE;
118 return ret;
119 }
120 // Set cached parameters
121 fSys = cms;
122 fSNN = sNN;
123 fField = field;
124
125 // Read secondary map if requested
126 if (what & kSecondaryMap) {
127 if (!ReadSecondaryMap(cms, sNN, field)) {
128 AliWarning(Form("Failed to read in secondary map for "
129 "cms=%d, sNN=%dGeV, field=%dkG", cms, sNN, field));
130 ret = kFALSE;
131 }
132 }
133 // Read double hit if requested
134 if (what & kDoubleHit) {
135 if (!ReadDoubleHit(cms, sNN, field)) {
136 AliWarning(Form("Failed to read in double hit correction for "
137 "cms=%d, sNN=%dGeV, field=%dkG", cms, sNN, field));
138 ret = kFALSE;
139 }
140 }
141 // Read energy loss fits if requested
142 if (what & kELossFits) {
143 if (!ReadELossFits(cms, sNN, field, mc)) {
144 AliWarning(Form("Failed to read in energy loss fits for "
145 "cms=%d, sNN=%dGeV, field=%dkG, %s",
146 cms, sNN, field, mc ? "MC" : "real"));
147 ret = kFALSE;
148 }
149 }
150 // Read event selection efficiencies if requested
151 if (what & kVertexBias) {
152 if (!ReadVertexBias(cms, sNN, field)) {
153 AliWarning(Form("Failed to read in event selection efficiency for "
154 "cms=%d, sNN=%dGeV, field=%dkG", cms, sNN, field));
155 ret = kFALSE;
156 }
157 }
158 // Read merging efficiencies if requested
159 if (what & kMergingEfficiency) {
160 if (!ReadMergingEfficiency(cms, sNN, field)) {
161 AliWarning(Form("Failed to read in hit merging efficiency for "
162 "cms=%d, sNN=%dGeV, field=%dkG",
163 cms, sNN, field));
164 ret = kFALSE;
165 }
166 }
167 fInit = kTRUE;
168 return ret;
169}
170
171//____________________________________________________________________
172TString
173AliForwardCorrectionManager::GetFileName(ECorrection what,
174 UShort_t sys,
175 UShort_t sNN,
176 Short_t field,
177 Bool_t mc) const
178{
179 TString fname = "";
180 fname = GetObjectName(what);
181 fname.Append(Form("_%s_%04dGeV_%c%1dkG_%s.root",
182 AliForwardUtil::CollisionSystemString(sys),
183 sNN, (field < 0 ? 'm' : 'p'), TMath::Abs(field),
184 (mc ? "MC" : "real")));
185 return fname;
186}
187//____________________________________________________________________
188TString
189AliForwardCorrectionManager::GetFileName(ECorrection what) const
190{
191 if (!fInit) {
192 AliWarning("Corrections manager initialised, do a forced Init(...)");
193 return "";
194 }
195 return GetFileName(what, fSys, fSNN, fField, false);
196}
197
198//____________________________________________________________________
199const Char_t*
200AliForwardCorrectionManager::GetFileDir(ECorrection what) const
201{
202 if (what & kSecondaryMap) return fSecondaryMapPath;
203 else if (what & kDoubleHit) return fDoubleHitPath;
204 else if (what & kELossFits) return fELossFitsPath;
205 else if (what & kVertexBias) return fVertexBiasPath;
206 else if (what & kMergingEfficiency) return fMergingEffPath;
207
208 AliWarning(Form("Unknown correction: %d", what));
209 return 0;
210}
211
212//____________________________________________________________________
213TString
214AliForwardCorrectionManager::GetFilePath(ECorrection what,
215 UShort_t sys,
216 UShort_t sNN,
217 Short_t field,
218 Bool_t mc) const
219{
220 TString path = "";
221 const Char_t* dir = GetFileDir(what);
222 if (!dir) return path;
223
224 TString fname(GetFileName(what, sys, sNN, field, mc));
225 if (fname.IsNull()) return path;
226
227 path = gSystem->ConcatFileName(gSystem->ExpandPathName(dir), fname);
228
229 return path;
230}
231//____________________________________________________________________
232TString
233AliForwardCorrectionManager::GetFilePath(ECorrection what) const
234{
235 if (!fInit) {
236 AliWarning("Corrections manager initialised, do a forced Init(...)");
237 return "";
238 }
239 return GetFilePath(what, fSys, fSNN, fField, false);
240}
241
242//____________________________________________________________________
243TFile*
244AliForwardCorrectionManager::GetFile(ECorrection what,
245 UShort_t sys,
246 UShort_t sNN,
247 Short_t field,
248 Bool_t mc,
249 Bool_t rw,
250 Bool_t newfile) const
251{
252 TString path = GetFilePath(what, sys, sNN, field, mc);
253 if (path.IsNull()) return 0;
254
255 TString opt;
256 if (newfile) opt="RECREATE";
257 else {
258 if (gSystem->AccessPathName(path.Data(),
259 (rw ? kWritePermission : kReadPermission))) {
260 AliWarning(Form("file %s cannot be found or insufficient permissions",
261 path.Data()));
262 return 0;
263 }
264 opt=(rw ? "UPDATE" : "READ");
265 }
266 TFile* file = TFile::Open(path.Data(), opt.Data());
267 if (!file) {
268 AliWarning(Form("file %s cannot be opened in mode %s",
269 path.Data(), opt.Data()));
270 return 0;
271 }
272 return file;
273}
274//____________________________________________________________________
275TFile*
276AliForwardCorrectionManager::GetFile(ECorrection what) const
277{
278 if (!fInit) {
279 AliWarning("Corrections manager initialised, do a forced Init(...)");
280 return 0;
281 }
282 return GetFile(what, fSys, fSNN, fField, false);
283}
284
285//____________________________________________________________________
286const Char_t*
287AliForwardCorrectionManager::GetObjectName(ECorrection what) const
288{
289 if (what & kSecondaryMap) return fgkSecondaryMapSkel;
290 else if (what & kDoubleHit) return fgkDoubleHitSkel;
291 else if (what & kELossFits) return fgkELossFitsSkel;
292 else if (what & kVertexBias) return fgkVertexBiasSkel;
293 else if (what & kMergingEfficiency) return fgkMergingEffSkel;
294 return 0;
295}
296
297//____________________________________________________________________
298TObject*
299AliForwardCorrectionManager::CheckObject(TFile* file, ECorrection what) const
300{
301 TObject* o = file->Get(GetObjectName(what));
302 if (!o) {
303 AliWarning(Form("Object %s not found in %s",
304 GetObjectName(what), file->GetName()));
305 file->Close();
306 return 0;
307 }
308 return o;
309}
310
311//____________________________________________________________________
312TObject*
313AliForwardCorrectionManager::GetObject(ECorrection what,
314 UShort_t sys,
315 UShort_t sNN,
316 Short_t field,
317 Bool_t mc) const
318{
319 TFile* file = GetFile(what, sys, sNN, field, mc, false, false);
320 if (!file) return 0;
321
322 return CheckObject(file, what);
323}
324//____________________________________________________________________
325TObject*
326AliForwardCorrectionManager::GetObject(ECorrection what) const
327{
328 if (!fInit) {
329 AliWarning("Corrections manager initialised, do a forced Init(...)");
330 return 0;
331 }
332 return GetObject(what, fSys, fSNN, fField, false);
333}
334
335
336//____________________________________________________________________
337Bool_t
338AliForwardCorrectionManager::ReadSecondaryMap(UShort_t sys, UShort_t sNN,
339 Short_t field)
340{
341 if (fInit) {
342 AliWarning("Corrections manager initialised, do a forced Init(...)");
343 return kFALSE;
344 }
345
346 TObject* o = GetObject(kSecondaryMap, sys, sNN, field, false);
347 if (!o) return kFALSE;
348
349 fSecondaryMap = dynamic_cast<AliFMDCorrSecondaryMap*>(o);
350 if (!fSecondaryMap) {
351 AliWarning(Form("Object %s (%p) is not an AliFMDCorrSecondaryMap object, "
352 "but %s", fgkSecondaryMapSkel, o, o->ClassName()));
353 return kFALSE;
354 }
355
356 // file->Close();
357 return kTRUE;
358}
359//____________________________________________________________________
360Bool_t
361AliForwardCorrectionManager::ReadDoubleHit(UShort_t sys, UShort_t sNN,
362 Short_t field)
363{
364 if (fInit) {
365 AliWarning("Corrections manager initialised, do a forced Init(...)");
366 return kFALSE;
367 }
368
369 TObject* o = GetObject(kDoubleHit, sys, sNN, field, false);
370 if (!o) return kFALSE;
371
372 fDoubleHit = dynamic_cast<AliFMDCorrDoubleHit*>(o);
373 if (!fDoubleHit) {
374 AliWarning(Form("Object %s (%p) is not an AliFMDCorrDoubleHit object, "
375 "but %s", fgkDoubleHitSkel, o, o->ClassName()));
376 return kFALSE;
377 }
378
379 // file->Close();
380 return kTRUE;
381}
382
383//____________________________________________________________________
384Bool_t
385AliForwardCorrectionManager::ReadELossFits(UShort_t sys, UShort_t sNN,
386 Short_t field, Bool_t mc)
387{
388 if (fInit) {
389 AliWarning("Corrections manager initialised, do a forced Init(...)");
390 return kFALSE;
391 }
392
393 TObject* o = GetObject(kELossFits, sys, sNN, field, mc);
394 if (!o) return kFALSE;
395
396 fELossFit = dynamic_cast<AliFMDCorrELossFit*>(o);
397 if (!fELossFit) {
398 AliWarning(Form("Object %s (%p) is not an AliFMDCorrELossFit object, "
399 "but %s", fgkELossFitsSkel, o, o->ClassName()));
400 return kFALSE;
401 }
402
403 // file->Close();
404 return kTRUE;
405}
406
407//____________________________________________________________________
408Bool_t
409AliForwardCorrectionManager::ReadVertexBias(UShort_t sys,
410 UShort_t sNN,
411 Short_t field)
412{
413 if (fInit) {
414 AliWarning("Corrections manager initialised, do a forced Init(...)");
415 return kFALSE;
416 }
417
418 TObject* o = GetObject(kVertexBias, sys, sNN, field, false);
419 if (!o) return kFALSE;
420
421 fVertexBias = dynamic_cast<AliFMDCorrVertexBias*>(o);
422 if (!fVertexBias) {
423 AliWarning(Form("Object %s (%p) is not an AliFMDCorrVertexBias object, "
424 "but %s", fgkVertexBiasSkel, o, o->ClassName()));
425 return kFALSE;
426 }
427
428 // file->Close();
429 return kTRUE;
430}
431
432//____________________________________________________________________
433Bool_t
434AliForwardCorrectionManager::ReadMergingEfficiency(UShort_t sys,
435 UShort_t sNN,
436 Short_t field)
437{
438 if (fInit) {
439 AliWarning("Corrections manager initialised, do a forced Init(...)");
440 return kFALSE;
441 }
442
443 TObject* o = GetObject(kMergingEfficiency, sys, sNN, field, false);
444 if (!o) return kFALSE;
445
446 fMergingEfficiency = dynamic_cast<AliFMDCorrMergingEfficiency*>(o);
447 if (!fMergingEfficiency) {
448 AliWarning(Form("Object %s (%p) is not an AliFMDCorrMergingEfficiency "
449 "object, but %s", fgkMergingEffSkel, o, o->ClassName()));
450 return kFALSE;
451 }
452
453 // file->Close();
454 return kTRUE;
455}
456
457//____________________________________________________________________
458//
459// EOF
460//