]>
Commit | Line | Data |
---|---|---|
045a97a7 | 1 | #ifndef __CINT__ |
2 | #include <TSystemDirectory.h> | |
3 | #include <TFile.h> | |
4 | #include <TList.h> | |
5 | #include <AliCDBEntry.h> | |
6 | #include <AliFMDMap.h> | |
7 | #include <AliFMDCalibPedestal.h> | |
8 | #include <AliFMDCalibGain.h> | |
9 | #include <AliFMDCalibStripRange.h> | |
10 | #include <AliFMDCalibSampleRate.h> | |
11 | #include <TString.h> | |
12 | #include <TSystem.h> | |
13 | #include <TError.h> | |
14 | #else | |
15 | class AliFMDMap; | |
16 | #endif | |
17 | ||
18 | Bool_t | |
19 | CheckMap(const char* path, const AliFMDMap* map) | |
20 | { | |
21 | if (!map) { | |
22 | Warning("CheckFile", "No map in %s", path); | |
23 | return false; | |
24 | } | |
25 | if (!map->Ptr() || map->MaxIndex() <= 0) { | |
26 | Warning("CheckFile", "Map %p (%d) has no data in %s", | |
27 | map->Ptr(), map->MaxIndex(), path); | |
28 | return false; | |
29 | } | |
30 | return true; | |
31 | } | |
32 | ||
33 | enum { | |
34 | kMap, | |
35 | kPedestal, | |
36 | kGain, | |
37 | kRate, | |
38 | kRange | |
39 | }; | |
40 | ||
41 | Bool_t | |
42 | CheckFile(const char* name, const char* dirName, Int_t which) | |
43 | { | |
44 | TString path(gSystem->ConcatFileName(dirName, name)); | |
45 | TFile* file = TFile::Open(path, "READ"); | |
46 | if (!file) { | |
47 | Warning("CheckFile", "Failed to open %s", path.Data()); | |
48 | return false; | |
49 | } | |
50 | AliCDBEntry* entry = static_cast<AliCDBEntry*>(file->Get("AliCDBEntry")); | |
51 | if (!entry) { | |
52 | Warning("CheckFile", "No entry in %s", path.Data()); | |
53 | file->Close(); | |
54 | return false; | |
55 | } | |
56 | TObject* object = entry->GetObject(); | |
57 | if (!object) { | |
58 | Warning("CheckFile", "Entry has no object in %s", path.Data()); | |
59 | file->Close(); | |
60 | return false; | |
61 | } | |
62 | ||
63 | const AliFMDMap* map = 0; | |
64 | if (which == kMap) map = static_cast<AliFMDMap*>(object); | |
65 | else if (which == kPedestal) | |
66 | map = &(static_cast<AliFMDCalibPedestal*>(object)->Values()); | |
67 | else if (which == kGain) | |
68 | map = &(static_cast<AliFMDCalibGain*>(object)->Values()); | |
69 | else if (which == kRate) | |
70 | map = &(static_cast<AliFMDCalibSampleRate*>(object)->Rates()); | |
71 | else if (which == kRange) | |
72 | map = &(static_cast<AliFMDCalibStripRange*>(object)->Ranges()); | |
73 | else { | |
74 | Warning("CheckFile", "Don't now how to deal with what=%d", which); | |
75 | file->Close(); | |
76 | return false; | |
77 | } | |
78 | if (!CheckMap(path.Data(), map)) { | |
79 | file->Close(); | |
80 | return false; | |
81 | } | |
82 | Info("CheckFile", "Map OK in %s", path.Data()); | |
83 | file->Close(); | |
84 | return true; | |
85 | } | |
86 | ||
87 | ||
88 | void | |
89 | CheckCalibData(const char* dirName) | |
90 | { | |
91 | TString dirS(dirName); | |
92 | if (dirS.EndsWith("/")) dirS.Remove(dirS.Length()-1); | |
93 | dirS = gSystem->BaseName(dirS.Data()); | |
94 | Int_t what = 0; | |
95 | if (dirS == "Dead" || dirS == "ZeroSuppression") what = kMap; | |
96 | else if (dirS == "Pedestal") what = kPedestal; | |
97 | else if (dirS == "PulseGain") what = kGain; | |
98 | else if (dirS == "SampleRate") what = kRate; | |
99 | else if (dirS == "StripRange") what = kRange; | |
100 | else { | |
101 | Error("CheckCalibData", "Don't know how to deal with %s in %s", | |
102 | dirS.Data(), dirName); | |
103 | return; | |
104 | } | |
105 | ||
106 | TSystemDirectory dir(dirName, dirName); | |
107 | TList* files(dir.GetListOfFiles()); | |
108 | TIter next(files); | |
109 | TObject* obj = 0; | |
110 | ||
111 | Int_t nTotal = 0; | |
112 | Int_t nOk = 0; | |
113 | while ((obj = next())) { | |
114 | TString name(obj->GetName()); | |
115 | if (!name.EndsWith(".root")) continue; | |
116 | nTotal++; | |
117 | if (CheckFile(name, dirName, what)) nOk++; | |
118 | } | |
119 | Info("CheckCalibData", "Total: %d, OK: %d, Bad: %d in %s ", | |
120 | nTotal, nOk, nTotal - nOk, dirName); | |
121 | } |