]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
QA validation macro and script
authorschutz <schutz@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 30 Sep 2008 10:56:18 +0000 (10:56 +0000)
committerschutz <schutz@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 30 Sep 2008 10:56:18 +0000 (10:56 +0000)
test/QA/AnaQA.C [new file with mode: 0644]
test/QA/AnaQA.sh [new file with mode: 0755]

diff --git a/test/QA/AnaQA.C b/test/QA/AnaQA.C
new file mode 100644 (file)
index 0000000..8a82858
--- /dev/null
@@ -0,0 +1,174 @@
+/*
+ *  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() ; 
+}
diff --git a/test/QA/AnaQA.sh b/test/QA/AnaQA.sh
new file mode 100755 (executable)
index 0000000..308f847
--- /dev/null
@@ -0,0 +1,66 @@
+#!/bin/sh
+
+# AnaQA.sh
+# 
+#
+# Created by schutz on 30/09/08.
+# Copyright 2008 CERN. All rights reserved.
+macroname="AnaQA"
+validateout=`dirname $0`
+validatetime=`date`
+validated="0";
+if [ -z $validateout ]
+then
+    validateout="."
+fi
+
+cd $validateout;
+validateworkdir=`pwd`;
+
+echo "*******************************************************" >> stdout;
+echo "* AliRoot QA Validation Script V1.0                   *" >> stdout;
+echo "* Time:    $validatetime " >> stdout;
+echo "* Dir:     $validateout" >> stdout;
+echo "* Workdir: $validateworkdir" >> stdout;
+echo "* ----------------------------------------------------*" >> stdout;
+detectorlist="ITS TPC TRD TOF PHOS HMPID EMCAL FMD ZDC T0 VZERO PMD ACORDE Global"
+if [ $# -eq 0 ] ; then
+ echo "syntax: AnaQA.sh #runNumber"
+ exit 1
+fi
+if [ ! -f  ${macroname}.C ] ; then 
+ echo "* ########## Job not validated - no validation macro (${macroname}.C)  ###" >> stdout;
+ exit 2
+fi 
+run=$1
+logfile=${macroname}_${run}.log
+if [ -e $logfile ] ; then
+ rm $logfile
+fi 
+aliroot -b > $logfile <<EOF
+.L ${macroname}.C+
+${macroname}($run)
+EOF
+if [ ! -f  $logfile ] ; then 
+ echo "* ########## Job not validated - no log file ($logfile)  ###" >> stdout;
+ exit 2
+fi 
+let error=0
+declare -a array
+for pb in `grep -i "Problem signalled" $logfile | awk '{print $1"_"$2"_"$NF}'` ; do
+ for det in detectorlist ; do
+  array[$error]=`echo $pb | awk '{ split($0, a, "_"); print a[1]" "a[3]" in "a[2]}'`
+  ((error++))
+ done 
+done  
+if [ "$error" = "0" ] ; then 
+ echo "* ----------------   Job Validated  ------------------*" >> stdout;
+else 
+ errors=${#array[@]}
+ echo "* ########## Job not validated - number of errors: $errors ###" >> stdout;
+ for (( i=0;i<$errors;i++ )); do
+  echo $i-- ${array[${i}]} >> stdout;
+ done
+fi
+echo "* ----------------------------------------------------*" >> stdout;
+echo "*******************************************************" >> stdout;