3 #include <TSystemDirectory.h>
10 #include <TParameter.h>
17 class TSystemDirectory;
38 gSystem->GetPathInfo(path, stat);
40 R_ISDIR(stat.fMode) ||
41 !R_ISREG(stat.fMode))
return false;
49 gSystem->GetPathInfo(path, &
id, &size, &flags, &modtime);
50 return !((flags & 0x2) == 0x2);
64 if (!name.EndsWith(
".root"))
return false;
67 if (pattern && pattern[0] !=
'\0' && !name.Contains(pattern))
return false;
70 TFile* test = TFile::Open(name.Data(),
"READ");
71 if (!test || test->IsZombie()) {
72 ::Warning(
"TestFile",
"Failed to open file %s", name.Data());
93 const char* pattern,
bool recursive)
97 TList* files = dir->GetListOfFiles();
99 gSystem->ChangeDirectory(oldDir);
104 TSystemFile*
file = 0;
105 while ((file = static_cast<TSystemFile*>(next()))) {
109 if (name ==
"." || name ==
"..")
continue;
112 if (file->IsDirectory()) {
120 TString data(Form(
"%s/%s", file->GetTitle(), name.Data()));
123 if (!
TestFile(data, pattern))
continue;
124 list->Add(
new TObjString(data));
136 TList*
Scan(
const char* datadir,
const char* pattern,
bool recursive=
false)
143 Error(
"Scan",
"%s is a file", datadir);
146 Info(
"Scan",
"Scanning %s", path.Data());
150 TSystemDirectory d(datadir, path.Data());
154 if (ret->GetEntries() <= 0) {
155 Warning(
"Scane",
"list is empty for input %s, %s",
177 const char* corrName,
178 const char* methName,
191 virtual Int_t Extract(
const char* prefix=
"$ALICE_PHYSICS/PWGLF/FORWARD/corrections")
194 TString dir = TString::Format(
"%s/%s",
198 Warning(
"Extract",
"No files matching %s found in %s",
206 while ((os = static_cast<TObjString*>(next()))) {
227 if (sNN == 2750) sNN = 2760;
230 if (runNo == 0xFFFFFFFF || runNo <= 0)
return false;
233 if (!obj)
return false;
236 Info(
"",
"File %s to be stored: run=%d sys=%d sNN=%d fld=%d mc=%d",
237 fn.Data(), runNo, sys, sNN, fld, mc);
238 return fCM->
Store(obj, runNo, sys, sNN, fld, mc,
257 str.ReplaceAll(
".root",
"");
261 TString& sSys = ((TObjString*)(tokens->At(1)))->String();
262 TString& sSNN = ((TObjString*)(tokens->At(2)))->String();
264 if (sSys.EqualTo(
"pbpb", TString::kIgnoreCase)) sys = 2;
265 else if (sSys.EqualTo(
"ppb", TString::kIgnoreCase)) sys = 3;
266 else if (sSys.EqualTo(
"pp", TString::kIgnoreCase)) sys = 1;
268 sSNN.ReplaceAll(
"GeV",
"");
269 Info(
"",
"sSNN=%s -> ", sSNN.Data());
270 while (sSNN[0] ==
'0' && sSNN.Length() > 1) sSNN.Remove(0, 1);
272 Info(
"",
"sSNN=%s sNN=%d", sSNN.Data(), sNN);
274 if (tokens->GetEntries() > 3) {
275 TString& sFld = ((TObjString*)(tokens->At(3)))->String();
276 sFld.ReplaceAll(
"kG",
"");
277 while (sFld[0] ==
'0' && sFld.Length() > 1) sFld.Remove(0, 1);
278 sFld.ReplaceAll(
"p",
"+");
279 sFld.ReplaceAll(
"m",
"-");
283 if (tokens->GetEntries() > 4) {
284 TString& sMC = ((TObjString*)(tokens->At(4)))->String();
285 mc = sMC.EqualTo(
"mc", TString::kIgnoreCase);
304 case 900: run = 118502;
break;
305 case 2760: run = 146686;
break;
306 case 7000: run = 114747;
break;
307 case 14000: run = 0xFFFFFFFF;
break;
312 case 2760: run = 137123;
break;
317 case 5023: run = 188246;
break;
322 Warning(
"ExtractRunNo",
323 "Unknown energy %d for collision system %d", sNN, sys);
335 TFile*
file = TFile::Open(fn.Data(),
"READ");
337 Error(
"ExtractObject",
"Failed to open %s", fn.Data());
344 Error(
"ExtractObject",
"Failed to get %s from %s",
377 const char* corrName,
378 const char* methName)
379 :
Extractor(dirName,corrName,methName,
"",0),
391 Fatal(
"Extract",
"Cannot use this");
403 Fatal(
"ExtractFile",
"Cannot use this (%s)", s.Data());
417 TString dir = TString::Format(
"$ALICE_PHYSICS/PWGLF/FORWARD/corrections/%s",
421 Warning(
"ExtractNorm",
"No files matching %s found in %s",
431 while ((os = static_cast<TObjString*>(next()))) {
447 Info(
"Open",
"file name set to %s",
fFileName.Data());
466 Info(
"Store",
"file name to store in %s",
fFileName.Data());
469 Warning(
"Store",
"Failed to open for %s/%s", tab.Data(),
473 return db.
Insert(tab, o, runNo, sys, sNN, 0,
false,
false);
493 case kINEL: oName =
"hInelNormalization";
break;
494 case kNSD: oName =
"hNSDNormalization";
break;
495 case kINELGT0: oName =
"hINELGT0Normalization";
break;
499 Warning(
"ExtractHist",
"Object %s not found", oName.Data());
506 case kINEL: tName =
"normalizationINEL"; ttName =
"INEL";
break;
507 case kNSD: tName =
"normalizationNSD"; ttName =
"NSD";
break;
508 case kINELGT0: tName =
"normalizationINELGT0"; ttName =
"INEL>0";
break;
510 TH1* hist =
static_cast<TH1*
>(obj->Clone(tName));
511 hist->SetDirectory(0);
512 hist->SetTitle(Form(
"Normalization for %s", ttName.Data()));
515 return Store(db, tName, hist, runNo, sys, sNN);
535 case kINEL: oName =
"inelTriggerEff";
break;
536 case kNSD: oName =
"nsdTriggerEff";
break;
537 case kINELGT0: oName =
"inelgt0TriggerEff";
break;
541 Warning(
"ExtractHist",
"Object %s not found", oName.Data());
547 case kINEL: tName =
"triggerEffINEL";
break;
548 case kNSD: tName =
"triggerEffNSD";
break;
549 case kINELGT0: tName =
"triggerEffINELGT0";
break;
553 return Store(db, tName, p, runNo, sys, sNN);
571 if (sNN == 2750) sNN = 2760;
574 if (runNo == 0xFFFFFFFF || runNo <= 0)
return false;
577 TFile* f = TFile::Open(fn,
"READ");
579 Error(
"ExtractFile",
"Failed to open %s", fn.Data());
596 return new Extractor(dir, name,
"NEAR",
"fmd_corrections.root",
602 return new Extractor(dir, name,
"NEAR",
"spd_corrections.root",
609 gROOT->Macro(
"$ALICE_PHYSICS/PWGLF/FORWARD/analysis2/scripts/LoadLibs.C");
625 gSystem->Unlink(
"fmd_corrections.root");
626 gSystem->Unlink(
"spd_corrections.root");
636 gSystem->Unlink(
"normalization.root");
639 "normalizationHists",
Base class for correction managers.
Extractor * MakeSPDExtractor(const char *dir, const char *name)
return jsonbuilder str().c_str()
Extractor * MakeFMDExtractor(const char *dir, const char *name)
virtual Bool_t Store(TObject *o, ULong_t runNo, UShort_t sys, UShort_t sNN, Short_t field, Bool_t mc, Bool_t sat, const char *file, const char *meth="NEAR") const
void ScanDirectory(TSystemDirectory *dir, TList *list, const char *pattern, bool recursive)
static Bool_t IsFile(const char *path)
void MigrateOADB(Int_t what=0x3)
Bool_t Insert(const TString &table, TObject *o, ULong_t runNo, UShort_t sys, UShort_t sNN, Short_t field, Bool_t mc=false, Bool_t sat=false, ULong_t aliRev=0, const TString &author="")
TList * Scan(const char *datadir, const char *pattern, bool recursive=false)
static Bool_t TestFile(const TString &name, const char *pattern=0)
Bool_t Open(const TString &fileName, const TString &tables="*", Bool_t rw=false, Bool_t verb=false, Bool_t fallback=false)
static AliCentralCorrectionManager & Instance()
static AliForwardCorrectionManager & Instance()