]>
Commit | Line | Data |
---|---|---|
3d886162 | 1 | /* |
2 | * AnaQA.C | |
3 | * | |
4 | * | |
5 | * Created by schutz on 29/09/08. | |
6 | * Copyright 2008 CERN. All rights reserved. | |
7 | * | |
8 | */ | |
9 | #include <TFile.h> | |
10 | #include <TList.h> | |
11 | #include <TNamed.h> | |
12 | #include "AliQA.h" | |
13 | ||
14 | void AnaQA(Int_t run) | |
15 | { | |
16 | // Macro to analyse the output of the QAChecker | |
17 | ||
18 | // Open the file that holds the AliQA object | |
19 | const char * resultFileName = "QA.root" ; //AliQA::GetQAResultFileName() ; | |
20 | const char * msgE = "QA ERROR: " ; | |
21 | const char * msgS = "QA SIGNAL: " ; | |
22 | ||
23 | TFile * inputQAFile = TFile::Open(resultFileName) ; | |
24 | if ( ! inputQAFile ) { | |
25 | printf("QA ERROR: File %s not found\n", AliQA::GetQAResultFileName()) ; | |
26 | exit(1) ; | |
27 | } | |
28 | // Get the AliQA object from the file | |
29 | // inputQAFile.ls() ; | |
30 | AliQA * qa = dynamic_cast<AliQA*>(inputQAFile->Get(AliQA::GetQAName())) ; | |
31 | // Show the status of all Detectors | |
32 | for (Int_t det = 0 ; det < AliQA::kNDET ; det++) { | |
33 | for (Int_t task = 0 ; task < AliQA::kNTASK ; task++) { | |
34 | if (qa->IsSetAny(AliQA::DETECTORINDEX_t(det), AliQA::ALITASK_t(task))) { | |
35 | qa->ShowStatus(AliQA::DETECTORINDEX_t(det), AliQA::ALITASK_t(task)) ; | |
36 | // found a bad detector, open the QA data file and search for the faulty histogram | |
37 | TFile * dataQAFile = TFile::Open(AliQA::GetQADataFileName(AliQA::GetDetName(det), run)) ; | |
38 | if ( ! dataQAFile ) { | |
39 | printf("%s File %s not found\n", msgE, AliQA::GetQADataFileName(AliQA::GetDetName(det), run)) ; | |
40 | exit(1) ; | |
41 | } | |
42 | dataQAFile->cd(AliQA::GetDetName(AliQA::DETECTORINDEX_t(det))) ; | |
43 | TDirectory * saveDir = gDirectory ; | |
44 | switch (task) { | |
45 | case AliQA::kNULLTASK: | |
46 | break ; | |
47 | case AliQA::kRAW: | |
48 | Bool_t dir = saveDir->cd(AliQA::GetTaskName(AliQA::kRAWS)) ; | |
49 | if ( ! dir ) { | |
50 | printf("%s Directory %s not found in %s\n", msgE, AliQA::GetTaskName(AliQA::kRAWS).Data(), AliQA::GetQADataFileName(AliQA::GetDetName(det), run)) ; | |
51 | } else { | |
52 | TList * listofkeys = gDirectory->GetListOfKeys() ; | |
53 | for (Int_t key = 0 ; key < listofkeys->GetEntries() ; key++) { | |
54 | TNamed * obj = dynamic_cast<TNamed*>(listofkeys->At(key)) ; | |
55 | if (obj) { | |
56 | Bool_t rv = obj->TestBit(AliQA::GetQABit()) ; | |
57 | if (rv) | |
58 | printf("%s QA bit set in %s/%s/%s\n", | |
59 | msgS, | |
60 | AliQA::GetDetName(det), | |
61 | AliQA::GetTaskName(AliQA::kRAWS).Data(), | |
62 | obj->GetName()); | |
63 | } | |
64 | } | |
65 | } | |
66 | break ; | |
67 | case AliQA::kSIM: | |
68 | dir = saveDir->cd(AliQA::GetTaskName(AliQA::kHITS)) ; | |
69 | if ( ! dir ) { | |
70 | printf("%s Directory %s not found in %s\n", msgE, AliQA::GetTaskName(AliQA::kHITS).Data(), AliQA::GetQADataFileName(AliQA::GetDetName(det), run)) ; | |
71 | } else { | |
72 | TList * listofkeys = gDirectory->GetListOfKeys() ; | |
73 | for (Int_t key = 0 ; key < listofkeys->GetEntries() ; key++) { | |
74 | TNamed * obj = dynamic_cast<TNamed*>(listofkeys->At(key)) ; | |
75 | if (obj) { | |
76 | Bool_t rv = obj->TestBit(AliQA::GetQABit()) ; | |
77 | if (rv) | |
78 | printf("%s QA bit set in %s/%s/%s\n", | |
79 | msgS, | |
80 | AliQA::GetDetName(det), | |
81 | AliQA::GetTaskName(AliQA::kHITS).Data(), | |
82 | obj->GetName()); | |
83 | } | |
84 | } | |
85 | } | |
86 | dir = saveDir->cd(AliQA::GetTaskName(AliQA::kSDIGITS)) ; | |
87 | if ( ! dir ) { | |
88 | printf("%s Directory %s not found in %s\n", msgE, AliQA::GetTaskName(AliQA::kSDIGITS).Data(), AliQA::GetQADataFileName(AliQA::GetDetName(det), run)) ; | |
89 | } else { | |
90 | TList * listofkeys = gDirectory->GetListOfKeys() ; | |
91 | for (Int_t key = 0 ; key < listofkeys->GetEntries() ; key++) { | |
92 | TNamed * obj = dynamic_cast<TNamed*>(listofkeys->At(key)) ; | |
93 | if (obj) { | |
94 | Bool_t rv = obj->TestBit(AliQA::GetQABit()) ; | |
95 | if (rv) | |
96 | printf("%s QA bit set in %s/%s/%s\n", | |
97 | msgS, | |
98 | AliQA::GetDetName(det), | |
99 | AliQA::GetTaskName(AliQA::kSDIGITS).Data(), | |
100 | obj->GetName()); | |
101 | } | |
102 | } | |
103 | } | |
104 | ||
105 | dir = saveDir->cd(AliQA::GetTaskName(AliQA::kDIGITS)) ; | |
106 | if ( ! dir ) { | |
107 | printf("%s Directory %s not found in %s\n", msgE, AliQA::GetTaskName(AliQA::kDIGITS).Data(), AliQA::GetQADataFileName(AliQA::GetDetName(det), run)) ; | |
108 | } else { | |
109 | TList * listofkeys = gDirectory->GetListOfKeys() ; | |
110 | for (Int_t key = 0 ; key < listofkeys->GetEntries() ; key++) { | |
111 | TNamed * obj = dynamic_cast<TNamed*>(listofkeys->At(key)) ; | |
112 | if (obj) { | |
113 | Bool_t rv = obj->TestBit(AliQA::GetQABit()) ; | |
114 | if (rv) | |
115 | printf("%s QA bit set in %s/%s/%s\n", | |
116 | msgS, | |
117 | AliQA::GetDetName(det), | |
118 | AliQA::GetTaskName(AliQA::kDIGITS).Data(), | |
119 | obj->GetName()); | |
120 | } | |
121 | } | |
122 | } | |
123 | break ; | |
124 | case AliQA::kREC: | |
125 | dir = saveDir->cd(AliQA::GetTaskName(AliQA::kRECPOINTS)) ; | |
126 | if ( ! dir ) { | |
127 | printf("%s Directory %s not found in %s\n", msgE, AliQA::GetTaskName(AliQA::kRECPOINTS).Data(), AliQA::GetQADataFileName(AliQA::GetDetName(det), run)) ; | |
128 | } else { | |
129 | TList * listofkeys = gDirectory->GetListOfKeys() ; | |
130 | for (Int_t key = 0 ; key < listofkeys->GetEntries() ; key++) { | |
131 | TNamed * obj = dynamic_cast<TNamed*>(listofkeys->At(key)) ; | |
132 | if (obj) { | |
133 | Bool_t rv = obj->TestBit(AliQA::GetQABit()) ; | |
134 | if (rv) | |
135 | printf("%s QA bit set in %s/%s/%s\n", | |
136 | msgS, | |
137 | AliQA::GetDetName(det), | |
138 | AliQA::GetTaskName(AliQA::kRECPOINTS).Data(), | |
139 | obj->GetName()) ; | |
140 | } | |
141 | } | |
142 | } | |
143 | break ; | |
144 | case AliQA::kESD: | |
145 | dir = saveDir->cd(AliQA::GetTaskName(AliQA::kESDS)) ; | |
146 | if ( ! dir ) { | |
147 | printf("%s Directory %s not found in %s\n", msgE, AliQA::GetTaskName(AliQA::kESDS).Data(), AliQA::GetQADataFileName(AliQA::GetDetName(det), run)) ; | |
148 | } else { | |
149 | TList * listofkeys = gDirectory->GetListOfKeys() ; | |
150 | for (Int_t key = 0 ; key < listofkeys->GetEntries() ; key++) { | |
151 | TNamed * obj = dynamic_cast<TNamed*>(listofkeys->At(key)) ; | |
152 | if (obj) { | |
153 | Bool_t rv = obj->TestBit(AliQA::GetQABit()) ; | |
154 | if (rv) | |
155 | printf("%s QA bit set in %s/%s/%s\n", | |
156 | msgS, | |
157 | AliQA::GetDetName(det), | |
158 | AliQA::GetTaskName(AliQA::kESDS).Data(), | |
159 | obj->GetName()); | |
160 | } | |
161 | } | |
162 | } | |
163 | break ; | |
164 | case AliQA::kANA: | |
165 | break ; | |
166 | default: | |
167 | break ; | |
168 | } | |
169 | dataQAFile->Close() ; | |
170 | } | |
171 | } | |
172 | } | |
173 | inputQAFile->Close() ; | |
174 | } |