ROOT logo
/*
 *  AnaQA.C
 *  
 *
 *  Created by schutz on 29/09/08.
 *  Copyright 2008 CERN. All rights reserved.
 *
 */
#include <TFile.h>
#include <TList.h>
#include <TNamed.h>
#include "AliQA.h"

void AnaQA(Int_t run) 
{
// Macro to analyse the output of the QAChecker
  
  // Open the file that holds the AliQA object
  const char * resultFileName = "QA.root" ; //AliQA::GetQAResultFileName() ; 
  const char * msgE = "QA ERROR: " ; 
  const char * msgS = "QA SIGNAL: " ; 

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