1 #include "AliForwardCorrectionManager.h"
2 #include "AliForwardUtil.h"
9 //____________________________________________________________________
10 AliForwardCorrectionManager* AliForwardCorrectionManager::fgInstance = 0;
11 const char* AliForwardCorrectionManager::fgkSecondaryMapSkel = "secondary";
12 const char* AliForwardCorrectionManager::fgkDoubleHitSkel = "doublehit";
13 const char* AliForwardCorrectionManager::fgkELossFitsSkel = "elossfits";
14 const char* AliForwardCorrectionManager::fgkVertexBiasSkel = "vertexbias";
15 const char* AliForwardCorrectionManager::fgkMergingEffSkel = "merging";
17 #define PREFIX "$(ALICE_ROOT)/PWG2/FORWARD/corrections/"
19 //____________________________________________________________________
20 AliForwardCorrectionManager& AliForwardCorrectionManager::Instance()
22 if (!fgInstance) fgInstance= new AliForwardCorrectionManager;
26 //____________________________________________________________________
27 AliForwardCorrectionManager::AliForwardCorrectionManager()
33 fELossFitsPath(PREFIX "ELossFits"),
34 fMergingEffPath(PREFIX "MergingEfficiency"),
35 fSecondaryMapPath(PREFIX "SecondaryMap"),
36 fDoubleHitPath(PREFIX "DoubleHit"),
37 fVertexBiasPath(PREFIX "VertexBias"),
45 //____________________________________________________________________
46 AliForwardCorrectionManager::AliForwardCorrectionManager(const AliForwardCorrectionManager& o)
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)
65 //____________________________________________________________________
66 AliForwardCorrectionManager&
67 AliForwardCorrectionManager::operator=(const AliForwardCorrectionManager& o)
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;
86 //____________________________________________________________________
88 AliForwardCorrectionManager::Init(const char* cms,
95 UShort_t col = AliForwardUtil::ParseCollisionSystem(cms);
97 AliForwardUtil::ParseCenterOfMassEnergy(col, sNN),
98 AliForwardUtil::ParseMagneticField(field),
102 //____________________________________________________________________
104 AliForwardCorrectionManager::Init(UShort_t cms,
111 if (force) fInit = kFALSE;
112 if (fInit) return kTRUE;
115 if (fSys == cms && TMath::Abs(fSNN - sNN) < 10 && fField == field) {
116 // We're already initialised for these settings - do nothing and return
120 // Set cached parameters
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));
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));
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"));
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));
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",
171 //____________________________________________________________________
173 AliForwardCorrectionManager::GetFileName(ECorrection what,
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")));
187 //____________________________________________________________________
189 AliForwardCorrectionManager::GetFileName(ECorrection what) const
192 AliWarning("Corrections manager initialised, do a forced Init(...)");
195 return GetFileName(what, fSys, fSNN, fField, false);
198 //____________________________________________________________________
200 AliForwardCorrectionManager::GetFileDir(ECorrection what) const
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;
208 AliWarning(Form("Unknown correction: %d", what));
212 //____________________________________________________________________
214 AliForwardCorrectionManager::GetFilePath(ECorrection what,
221 const Char_t* dir = GetFileDir(what);
222 if (!dir) return path;
224 TString fname(GetFileName(what, sys, sNN, field, mc));
225 if (fname.IsNull()) return path;
227 path = gSystem->ConcatFileName(gSystem->ExpandPathName(dir), fname);
231 //____________________________________________________________________
233 AliForwardCorrectionManager::GetFilePath(ECorrection what) const
236 AliWarning("Corrections manager initialised, do a forced Init(...)");
239 return GetFilePath(what, fSys, fSNN, fField, false);
242 //____________________________________________________________________
244 AliForwardCorrectionManager::GetFile(ECorrection what,
250 Bool_t newfile) const
252 TString path = GetFilePath(what, sys, sNN, field, mc);
253 if (path.IsNull()) return 0;
256 if (newfile) opt="RECREATE";
258 if (gSystem->AccessPathName(path.Data(),
259 (rw ? kWritePermission : kReadPermission))) {
260 AliWarning(Form("file %s cannot be found or insufficient permissions",
264 opt=(rw ? "UPDATE" : "READ");
266 TFile* file = TFile::Open(path.Data(), opt.Data());
268 AliWarning(Form("file %s cannot be opened in mode %s",
269 path.Data(), opt.Data()));
274 //____________________________________________________________________
276 AliForwardCorrectionManager::GetFile(ECorrection what) const
279 AliWarning("Corrections manager initialised, do a forced Init(...)");
282 return GetFile(what, fSys, fSNN, fField, false);
285 //____________________________________________________________________
287 AliForwardCorrectionManager::GetObjectName(ECorrection what) const
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;
297 //____________________________________________________________________
299 AliForwardCorrectionManager::CheckObject(TFile* file, ECorrection what) const
301 TObject* o = file->Get(GetObjectName(what));
303 AliWarning(Form("Object %s not found in %s",
304 GetObjectName(what), file->GetName()));
311 //____________________________________________________________________
313 AliForwardCorrectionManager::GetObject(ECorrection what,
319 TFile* file = GetFile(what, sys, sNN, field, mc, false, false);
322 return CheckObject(file, what);
324 //____________________________________________________________________
326 AliForwardCorrectionManager::GetObject(ECorrection what) const
329 AliWarning("Corrections manager initialised, do a forced Init(...)");
332 return GetObject(what, fSys, fSNN, fField, false);
336 //____________________________________________________________________
338 AliForwardCorrectionManager::ReadSecondaryMap(UShort_t sys, UShort_t sNN,
342 AliWarning("Corrections manager initialised, do a forced Init(...)");
346 TObject* o = GetObject(kSecondaryMap, sys, sNN, field, false);
347 if (!o) return kFALSE;
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()));
359 //____________________________________________________________________
361 AliForwardCorrectionManager::ReadDoubleHit(UShort_t sys, UShort_t sNN,
365 AliWarning("Corrections manager initialised, do a forced Init(...)");
369 TObject* o = GetObject(kDoubleHit, sys, sNN, field, false);
370 if (!o) return kFALSE;
372 fDoubleHit = dynamic_cast<AliFMDCorrDoubleHit*>(o);
374 AliWarning(Form("Object %s (%p) is not an AliFMDCorrDoubleHit object, "
375 "but %s", fgkDoubleHitSkel, o, o->ClassName()));
383 //____________________________________________________________________
385 AliForwardCorrectionManager::ReadELossFits(UShort_t sys, UShort_t sNN,
386 Short_t field, Bool_t mc)
389 AliWarning("Corrections manager initialised, do a forced Init(...)");
393 TObject* o = GetObject(kELossFits, sys, sNN, field, mc);
394 if (!o) return kFALSE;
396 fELossFit = dynamic_cast<AliFMDCorrELossFit*>(o);
398 AliWarning(Form("Object %s (%p) is not an AliFMDCorrELossFit object, "
399 "but %s", fgkELossFitsSkel, o, o->ClassName()));
407 //____________________________________________________________________
409 AliForwardCorrectionManager::ReadVertexBias(UShort_t sys,
414 AliWarning("Corrections manager initialised, do a forced Init(...)");
418 TObject* o = GetObject(kVertexBias, sys, sNN, field, false);
419 if (!o) return kFALSE;
421 fVertexBias = dynamic_cast<AliFMDCorrVertexBias*>(o);
423 AliWarning(Form("Object %s (%p) is not an AliFMDCorrVertexBias object, "
424 "but %s", fgkVertexBiasSkel, o, o->ClassName()));
432 //____________________________________________________________________
434 AliForwardCorrectionManager::ReadMergingEfficiency(UShort_t sys,
439 AliWarning("Corrections manager initialised, do a forced Init(...)");
443 TObject* o = GetObject(kMergingEfficiency, sys, sNN, field, false);
444 if (!o) return kFALSE;
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()));
457 //____________________________________________________________________