LCOV - code coverage report
Current view: top level - VZERO/VZERObase - AliVZEROQAChecker.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 40 112 35.7 %
Date: 2016-06-14 17:26:59 Functions: 6 8 75.0 %

          Line data    Source code
       1             : /**************************************************************************
       2             :  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
       3             :  *                                                                        *
       4             :  * Author: The ALICE Off-line Project.                                    *
       5             :  * Contributors are mentioned in the code where appropriate.              *
       6             :  *                                                                        *
       7             :  * Permission to use, copy, modify and distribute this software and its   *
       8             :  * documentation strictly for non-commercial purposes is hereby granted   *
       9             :  * without fee, provided that the above copyright notice appears in all   *
      10             :  * copies and that both the copyright notice and this permission notice   *
      11             :  * appear in the supporting documentation. The authors make no claims     *
      12             :  * about the suitability of this software for any purpose. It is          *
      13             :  * provided "as is" without express or implied warranty.                  *
      14             :  **************************************************************************/
      15             : 
      16             : 
      17             : /*
      18             :   Checks the quality assurance. Under construction. 
      19             :   By comparing with reference data
      20             : 
      21             : */
      22             : 
      23             : // --- ROOT system ---
      24             : #include <TClass.h>
      25             : #include <TH1F.h> 
      26             : #include <TH1I.h> 
      27             : #include <TIterator.h> 
      28             : #include <TKey.h> 
      29             : #include <TFile.h> 
      30             : 
      31             : // --- Standard library ---
      32             : 
      33             : // --- AliRoot header files ---
      34             : #include "AliLog.h"
      35             : #include "AliQAv1.h"
      36             : #include "AliQAChecker.h"
      37             : #include "AliVZEROQAChecker.h"
      38             : #include "AliVZEROQADataMakerRec.h"
      39             : 
      40          44 : ClassImp(AliVZEROQAChecker)
      41             : 
      42             : //__________________________________________________________________
      43           3 : AliVZEROQAChecker::AliVZEROQAChecker() : AliQACheckerBase("VZERO","VZERO Quality Assurance Data Checker"),
      44           3 :   fLowEventCut(1000),
      45           3 :   fORvsANDCut(0.2),
      46           3 :   fBGvsBBCut(0.2)
      47          15 : {
      48             :   // Default constructor
      49             :   // Nothing else here
      50           6 : }
      51             : 
      52             : //__________________________________________________________________
      53             : void AliVZEROQAChecker::Check(Double_t * check, AliQAv1::ALITASK_t index, TObjArray ** list, const AliDetectorRecoParam * /*recoParam*/) 
      54             : {
      55             :   // Main check function: Depending on the TASK, different checks will be applied
      56             :   // Check for missing channels and check on the trigger type for raw data
      57             :   // Check for missing disk or rings for esd (to be redone)
      58             : 
      59         117 :   for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
      60          45 :     check[specie] = 1.0;
      61             :     // no check on cosmic or calibration events
      62          81 :     if (AliRecoParam::ConvertIndex(specie) == AliRecoParam::kCosmic || AliRecoParam::ConvertIndex(specie) == AliRecoParam::kCalib)
      63             :       continue;
      64          27 :     if ( !AliQAv1::Instance()->IsEventSpecieSet(specie) ) 
      65             :       continue;
      66           0 :     if (index == AliQAv1::kRAW) {
      67           0 :       check[specie] =  CheckRaws(list[specie]);
      68           0 :     } else if (index == AliQAv1::kESD) {
      69             :       // Check for one disk missing (FATAL) or one ring missing (ERROR) in ESDs (to be redone)
      70           0 :       check[specie] =  CheckEsds(list[specie]);
      71           0 :     } 
      72             :   }
      73           9 : }
      74             : 
      75             : //_________________________________________________________________
      76             : Double_t AliVZEROQAChecker::CheckRaws(TObjArray * list) const
      77             : {
      78             : 
      79             :   //  Check on the QA histograms on the raw-data input list:
      80             :   //  Two things are checked: the presence of data in all channels and
      81             :   //  the ratio between different trigger types
      82             : 
      83             :   Double_t test = 1.0;
      84           0 :   if (list->GetEntries() == 0){  
      85           0 :     AliWarning("There are no histograms to be checked");
      86           0 :   } else {
      87           0 :     TH1F *hTriggers  = (TH1F*)list->At(AliVZEROQADataMakerRec::kTriggers);
      88           0 :     if (!hTriggers) {
      89           0 :       AliWarning("Trigger type histogram is not found");
      90           0 :     }
      91           0 :     else if (hTriggers->GetEntries() < fLowEventCut) {
      92           0 :       AliInfo("Not enough events to perform QA checks");
      93           0 :     }
      94             :     else {
      95           0 :       Double_t nANDs = hTriggers->GetBinContent(hTriggers->FindBin(0));
      96           0 :       Double_t nORs = hTriggers->GetBinContent(hTriggers->FindBin(1));
      97           0 :       Double_t nBGAs = hTriggers->GetBinContent(hTriggers->FindBin(2));
      98           0 :       Double_t nBGCs = hTriggers->GetBinContent(hTriggers->FindBin(3));
      99           0 :       if ((nORs - nANDs) > fORvsANDCut*nANDs) test = 0.001;
     100           0 :       if ((nBGAs + nBGCs) > fBGvsBBCut*nANDs) test = 0.002;
     101             :     }
     102           0 :     TH1F *hBBflags = (TH1F*)list->At(AliVZEROQADataMakerRec::kBBFlagsPerChannel);
     103           0 :     if (!hBBflags) {
     104           0 :       AliWarning("BB-flags per channel histogram is not found");
     105           0 :     }
     106           0 :     else if (hBBflags->GetEntries() < fLowEventCut) {
     107           0 :       AliInfo("Not enough events to perform QA checks");
     108           0 :     }
     109             :     else {
     110           0 :       for(Int_t iBin = 1; iBin <= 64; ++iBin) {
     111           0 :         if (hBBflags->GetBinContent(iBin) < 1.0) test = -1.0;
     112             :       }
     113             :     }
     114             :   }
     115           0 :   return test ; 
     116             : }  
     117             : 
     118             : //_________________________________________________________________
     119             : Double_t AliVZEROQAChecker::CheckEsds(TObjArray * list) const
     120             : {
     121             :   
     122             : //  check the ESDs for missing disk or ring
     123             : //  printf(" Number of entries in ESD list = %d\n", list->GetEntries()); 
     124             : //  list->Print();
     125             : 
     126             :   Double_t test     = 1.0;     // initialisation to OK
     127             :   Int_t    histonb =   0; 
     128             :   Double_t multV0A = 0.0;
     129             :   Double_t multV0C = 0.0;
     130           0 :   Double_t v0ABBRing[4], v0CBBRing[4];
     131           0 :   Double_t v0ABGRing[4], v0CBGRing[4];
     132           0 :   for (Int_t i=0; i<4; i++) { 
     133           0 :        v0ABBRing[i]= v0CBBRing[i]= 0.0;
     134           0 :        v0ABGRing[i]= v0CBGRing[i]= 0.0;
     135             :   }  
     136           0 :   TIter next(list) ; 
     137             :   TH1 * hdata ;
     138             :   
     139           0 :   while ( (hdata = dynamic_cast<TH1 *>(next())) ) {
     140           0 :           if (hdata) {
     141           0 :                   switch (histonb) {
     142             :                   case AliVZEROQADataMakerRec::kCellMultiV0A:
     143           0 :                           multV0A  = hdata->GetMean();
     144           0 :                           break;
     145             :                   case AliVZEROQADataMakerRec::kCellMultiV0C:
     146           0 :                           multV0C  = hdata->GetMean();
     147           0 :                           break;
     148             :                   case AliVZEROQADataMakerRec::kBBFlag:
     149           0 :                   for (Int_t i=0; i<8; i++) {         
     150           0 :                                   if(i<4) v0CBBRing[i]  = hdata->Integral((i*8)+1, (i*8) +8);
     151           0 :                                   else v0ABBRing[i-4]  = hdata->Integral((i*8)+1, (i*8) +8);
     152             :                           }           
     153           0 :                           break;
     154             :                   case AliVZEROQADataMakerRec::kBGFlag:
     155           0 :                   for (Int_t i=0; i<8; i++) {         
     156           0 :                                   if(i<4) v0CBGRing[i]  = hdata->Integral((i*8)+1, (i*8) +8);
     157           0 :                                   else v0ABGRing[i-4]  = hdata->Integral((i*8)+1, (i*8) +8);
     158             :                           }           
     159           0 :                           break;
     160             :                   }
     161             :           }
     162           0 :           histonb++;
     163             :   }
     164             :   
     165           0 :   if(multV0A == 0.0 || multV0C == 0.0) {
     166           0 :      AliWarning(Form("One of the two disks is missing !") );
     167             :      test = 0.0; // bit FATAL set
     168           0 :   }
     169           0 :   if( v0ABBRing[0]+v0ABGRing[0] == 0.0 || 
     170           0 :       v0ABBRing[1]+v0ABGRing[1] == 0.0 || 
     171           0 :       v0ABBRing[2]+v0ABGRing[2] == 0.0 || 
     172           0 :       v0ABBRing[3]+v0ABGRing[3] == 0.0 || 
     173           0 :       v0CBBRing[0]+v0CBGRing[0] == 0.0 || 
     174           0 :       v0CBBRing[1]+v0CBGRing[1] == 0.0 || 
     175           0 :       v0CBBRing[2]+v0CBGRing[2] == 0.0 || 
     176           0 :       v0CBBRing[3]+v0CBGRing[3] == 0.0  ){    
     177           0 :       AliWarning(Form("One ring is missing !") );
     178             :       test = 0.1;   // bit ERROR set
     179           0 :   }
     180             : 
     181             :   return test ; 
     182           0 : } 
     183             : 
     184             : //______________________________________________________________________________
     185             : void AliVZEROQAChecker::Init(const AliQAv1::DETECTORINDEX_t det) 
     186             : {
     187             :   // intialises QA and QA checker settings
     188          18 :   AliQAv1::Instance(det) ; 
     189           9 :   Float_t * hiValue = new Float_t[AliQAv1::kNBIT] ; 
     190           9 :   Float_t * lowValue = new Float_t[AliQAv1::kNBIT] ;
     191           9 :   lowValue[AliQAv1::kINFO]      = 0.5   ; 
     192           9 :   hiValue[AliQAv1::kINFO]       = 1.0 ; 
     193           9 :   lowValue[AliQAv1::kWARNING]   = 0.2 ; 
     194           9 :   hiValue[AliQAv1::kWARNING]    = 0.5 ; 
     195           9 :   lowValue[AliQAv1::kERROR]     = 0.0   ; 
     196           9 :   hiValue[AliQAv1::kERROR]      = 0.2 ; 
     197           9 :   lowValue[AliQAv1::kFATAL]     = -1.0   ; 
     198           9 :   hiValue[AliQAv1::kFATAL]      = 0.0 ; 
     199           9 :   SetHiLo(hiValue, lowValue) ; 
     200          18 :   delete [] hiValue;
     201          18 :   delete [] lowValue;
     202           9 : }
     203             : 
     204             : //______________________________________________________________________________
     205             : void AliVZEROQAChecker::SetQA(AliQAv1::ALITASK_t index, Double_t * value) const
     206             : {
     207             : // sets the QA word according to return value of the Check
     208          18 :   AliQAv1 * qa = AliQAv1::Instance(index);
     209         108 :   for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
     210          45 :     qa->UnSet(AliQAv1::kFATAL, specie);
     211          45 :     qa->UnSet(AliQAv1::kWARNING, specie);
     212          45 :     qa->UnSet(AliQAv1::kERROR, specie);
     213          45 :     qa->UnSet(AliQAv1::kINFO, specie);
     214          45 :     if ( ! value ) { // No checker is implemented, set all QA to Fatal
     215           0 :       qa->Set(AliQAv1::kFATAL, specie) ; 
     216           0 :     } else {
     217          90 :       if ( value[specie] >= fLowTestValue[AliQAv1::kFATAL] && value[specie] < fUpTestValue[AliQAv1::kFATAL] ) 
     218           0 :         qa->Set(AliQAv1::kFATAL, specie) ; 
     219          90 :       else if ( value[specie] > fLowTestValue[AliQAv1::kERROR] && value[specie] <= fUpTestValue[AliQAv1::kERROR]  )
     220           0 :         qa->Set(AliQAv1::kERROR, specie) ; 
     221          90 :       else if ( value[specie] > fLowTestValue[AliQAv1::kWARNING] && value[specie] <= fUpTestValue[AliQAv1::kWARNING]  )
     222           0 :         qa->Set(AliQAv1::kWARNING, specie) ;
     223          90 :       else if ( value[specie] > fLowTestValue[AliQAv1::kINFO] && value[specie] <= fUpTestValue[AliQAv1::kINFO] ) 
     224          45 :         qa->Set(AliQAv1::kINFO, specie) ;    
     225             :     }
     226             :   }
     227           9 : }
     228             :   

Generated by: LCOV version 1.11