1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 Checks the quality assurance. Under construction.
19 By comparing with reference data
23 // --- ROOT system ---
27 #include <TIterator.h>
31 // --- Standard library ---
33 // --- AliRoot header files ---
36 #include "AliQAChecker.h"
37 #include "AliVZEROQAChecker.h"
38 #include "AliVZEROQADataMakerRec.h"
39 //#include "AliCDBEntry.h"
40 //#include "AliCDBManager.h"
42 ClassImp(AliVZEROQAChecker)
44 //__________________________________________________________________
45 Double_t * AliVZEROQAChecker::Check(AliQAv1::ALITASK_t index, TObjArray ** list, AliDetectorRecoParam * /*recoParam*/)
48 // Main check function: Depending on the TASK, different checks will be applied
49 // Check for empty histograms
51 // AliDebug(AliQAv1::GetQADebugLevel(),Form("AliVZEROChecker"));
52 // AliCDBEntry *QARefRec = AliCDBManager::Instance()->Get("VZERO/QARef/RAW");
54 // AliDebug(AliQAv1::GetQADebugLevel(), "QA reference data NOT retrieved for QA check...");
58 // Check that histos are filled - (FATAL) set if empty
59 Double_t * check = new Double_t[AliRecoParam::kNSpecies] ;
60 for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
62 if ( !AliQAv1::Instance()->IsEventSpecieSet(specie) )
64 if(CheckEntries(list[specie]) == 0.0){
65 check[specie] = CheckEntries(list[specie]);
67 // Check for one disk missing (FATAL) or one ring missing (ERROR) in ESDs
68 if(index == AliQAv1::kESD)
69 check[specie] = CheckEsds(list[specie]);
75 //_________________________________________________________________
76 Double_t AliVZEROQAChecker::CheckEntries(TObjArray * list) const
79 // check on the QA histograms on the input list: list
85 if (list->GetEntries() == 0){
87 AliDebug(AliQAv1::GetQADebugLevel(), Form("There are NO ENTRIES to be checked..."));
92 while ( (hdata = dynamic_cast<TH1 *>(next())) ) {
95 if(hdata->GetEntries()>0) rv=1.0;
96 // AliDebug(AliQAv1::GetQADebugLevel(), Form("%s -> %f", hdata->GetName(), rv));
97 count++ ; // number of histos
98 test += rv ; // number of histos filled
100 AliError(Form("Data type cannot be processed"));
105 AliWarning(Form("Histograms are BOOKED for this specific task, but they are all EMPTY"));
114 //_________________________________________________________________
115 Double_t AliVZEROQAChecker::CheckEsds(TObjArray * list) const
118 // check the ESDs for missing disk or ring
120 // printf(" Number of entries in ESD list = %d\n", list->GetEntries());
123 Double_t test = 1.0; // initialisation to OK
125 Double_t Mult_V0A = 0.0;
126 Double_t Mult_V0C = 0.0;
127 Double_t V0A_BB_Ring[4], V0C_BB_Ring[4];
128 Double_t V0A_BG_Ring[4], V0C_BG_Ring[4];
129 for (Int_t i=0; i<4; i++) {
130 V0A_BB_Ring[i]= V0C_BB_Ring[i]= 0.0;
131 V0A_BG_Ring[i]= V0C_BG_Ring[i]= 0.0;
136 while ( (hdata = dynamic_cast<TH1 *>(next())) ) {
139 case AliVZEROQADataMakerRec::kCellMultiV0A:
140 Mult_V0A = hdata->GetMean();
142 case AliVZEROQADataMakerRec::kCellMultiV0C:
143 Mult_V0C = hdata->GetMean();
145 case AliVZEROQADataMakerRec::kBBFlag:
146 for (Int_t i=0; i<8; i++) {
147 if(i<4) V0C_BB_Ring[i] = hdata->Integral((i*8)+1, (i*8) +8);
148 else V0A_BB_Ring[i-4] = hdata->Integral((i*8)+1, (i*8) +8);
151 case AliVZEROQADataMakerRec::kBGFlag:
152 for (Int_t i=0; i<8; i++) {
153 if(i<4) V0C_BG_Ring[i] = hdata->Integral((i*8)+1, (i*8) +8);
154 else V0A_BG_Ring[i-4] = hdata->Integral((i*8)+1, (i*8) +8);
162 if(Mult_V0A == 0.0 || Mult_V0C == 0.0) {
163 AliWarning(Form("One of the two disks is missing !") );
164 test = 0.0; // bit FATAL set
166 if( V0A_BB_Ring[0]+V0A_BG_Ring[0] == 0.0 ||
167 V0A_BB_Ring[1]+V0A_BG_Ring[1] == 0.0 ||
168 V0A_BB_Ring[2]+V0A_BG_Ring[2] == 0.0 ||
169 V0A_BB_Ring[3]+V0A_BG_Ring[3] == 0.0 ||
170 V0C_BB_Ring[0]+V0C_BG_Ring[0] == 0.0 ||
171 V0C_BB_Ring[1]+V0C_BG_Ring[1] == 0.0 ||
172 V0C_BB_Ring[2]+V0C_BG_Ring[2] == 0.0 ||
173 V0C_BB_Ring[3]+V0C_BG_Ring[3] == 0.0 ){
174 AliWarning(Form("One ring is missing !") );
175 test = 0.1; // bit ERROR set
181 //______________________________________________________________________________
182 void AliVZEROQAChecker::Init(const AliQAv1::DETECTORINDEX_t det)
184 // intialises QA and QA checker settings
185 AliQAv1::Instance(det) ;
186 Float_t * hiValue = new Float_t[AliQAv1::kNBIT] ;
187 Float_t * lowValue = new Float_t[AliQAv1::kNBIT] ;
188 lowValue[AliQAv1::kINFO] = 0.5 ;
189 hiValue[AliQAv1::kINFO] = 1.0 ;
190 lowValue[AliQAv1::kWARNING] = 0.2 ;
191 hiValue[AliQAv1::kWARNING] = 0.5 ;
192 lowValue[AliQAv1::kERROR] = 0.0 ;
193 hiValue[AliQAv1::kERROR] = 0.2 ;
194 lowValue[AliQAv1::kFATAL] = -1.0 ;
195 hiValue[AliQAv1::kFATAL] = 0.0 ;
196 SetHiLo(hiValue, lowValue) ;
199 //______________________________________________________________________________
200 void AliVZEROQAChecker::SetQA(AliQAv1::ALITASK_t index, Double_t * value) const
202 // sets the QA word according to return value of the Check
203 AliQAv1 * qa = AliQAv1::Instance(index);
204 for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
205 qa->UnSet(AliQAv1::kFATAL, specie);
206 qa->UnSet(AliQAv1::kWARNING, specie);
207 qa->UnSet(AliQAv1::kERROR, specie);
208 qa->UnSet(AliQAv1::kINFO, specie);
209 if ( ! value ) { // No checker is implemented, set all QA to Fatal
210 qa->Set(AliQAv1::kFATAL, specie) ;
212 if ( value[specie] >= fLowTestValue[AliQAv1::kFATAL] && value[specie] < fUpTestValue[AliQAv1::kFATAL] )
213 qa->Set(AliQAv1::kFATAL, specie) ;
214 else if ( value[specie] > fLowTestValue[AliQAv1::kERROR] && value[specie] <= fUpTestValue[AliQAv1::kERROR] )
215 qa->Set(AliQAv1::kERROR, specie) ;
216 else if ( value[specie] > fLowTestValue[AliQAv1::kWARNING] && value[specie] <= fUpTestValue[AliQAv1::kWARNING] )
217 qa->Set(AliQAv1::kWARNING, specie) ;
218 else if ( value[specie] > fLowTestValue[AliQAv1::kINFO] && value[specie] <= fUpTestValue[AliQAv1::kINFO] )
219 qa->Set(AliQAv1::kINFO, specie) ;