QA validation macro and script
[u/mrichter/AliRoot.git] / test / QA / AnaQA.C
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 }