#include <TClass.h>
#include <TH1F.h>
#include <TH1I.h>
#include <TIterator.h>
#include <TKey.h>
#include <TFile.h>
#include "AliLog.h"
#include "AliQAv1.h"
#include "AliQAChecker.h"
#include "AliVZEROQAChecker.h"
#include "AliVZEROQADataMakerRec.h"
ClassImp(AliVZEROQAChecker)
AliVZEROQAChecker::AliVZEROQAChecker() : AliQACheckerBase("VZERO","VZERO Quality Assurance Data Checker"),
fLowEventCut(1000),
fORvsANDCut(0.2),
fBGvsBBCut(0.2)
{
}
void AliVZEROQAChecker::Check(Double_t * check, AliQAv1::ALITASK_t index, TObjArray ** list, const AliDetectorRecoParam * )
{
for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
check[specie] = 1.0;
if (AliRecoParam::ConvertIndex(specie) == AliRecoParam::kCosmic || AliRecoParam::ConvertIndex(specie) == AliRecoParam::kCalib)
continue;
if ( !AliQAv1::Instance()->IsEventSpecieSet(specie) )
continue;
if (index == AliQAv1::kRAW) {
check[specie] = CheckRaws(list[specie]);
} else if (index == AliQAv1::kESD) {
check[specie] = CheckEsds(list[specie]);
}
}
}
Double_t AliVZEROQAChecker::CheckRaws(TObjArray * list) const
{
Double_t test = 1.0;
if (list->GetEntries() == 0){
AliWarning("There are no histograms to be checked");
} else {
TH1F *hTriggers = (TH1F*)list->At(AliVZEROQADataMakerRec::kTriggers);
if (!hTriggers) {
AliWarning("Trigger type histogram is not found");
}
else if (hTriggers->GetEntries() < fLowEventCut) {
AliInfo("Not enough events to perform QA checks");
}
else {
Double_t nANDs = hTriggers->GetBinContent(hTriggers->FindBin(0));
Double_t nORs = hTriggers->GetBinContent(hTriggers->FindBin(1));
Double_t nBGAs = hTriggers->GetBinContent(hTriggers->FindBin(2));
Double_t nBGCs = hTriggers->GetBinContent(hTriggers->FindBin(3));
if ((nORs - nANDs) > fORvsANDCut*nANDs) test = 0.001;
if ((nBGAs + nBGCs) > fBGvsBBCut*nANDs) test = 0.002;
}
TH1F *hBBflags = (TH1F*)list->At(AliVZEROQADataMakerRec::kBBFlagsPerChannel);
if (!hBBflags) {
AliWarning("BB-flags per channel histogram is not found");
}
else if (hBBflags->GetEntries() < fLowEventCut) {
AliInfo("Not enough events to perform QA checks");
}
else {
for(Int_t iBin = 1; iBin <= 64; ++iBin) {
if (hBBflags->GetBinContent(iBin) < 1.0) test = -1.0;
}
}
}
return test ;
}
Double_t AliVZEROQAChecker::CheckEsds(TObjArray * list) const
{
Double_t test = 1.0;
Int_t histonb = 0;
Double_t multV0A = 0.0;
Double_t multV0C = 0.0;
Double_t v0ABBRing[4], v0CBBRing[4];
Double_t v0ABGRing[4], v0CBGRing[4];
for (Int_t i=0; i<4; i++) {
v0ABBRing[i]= v0CBBRing[i]= 0.0;
v0ABGRing[i]= v0CBGRing[i]= 0.0;
}
TIter next(list) ;
TH1 * hdata ;
while ( (hdata = dynamic_cast<TH1 *>(next())) ) {
if (hdata) {
switch (histonb) {
case AliVZEROQADataMakerRec::kCellMultiV0A:
multV0A = hdata->GetMean();
break;
case AliVZEROQADataMakerRec::kCellMultiV0C:
multV0C = hdata->GetMean();
break;
case AliVZEROQADataMakerRec::kBBFlag:
for (Int_t i=0; i<8; i++) {
if(i<4) v0CBBRing[i] = hdata->Integral((i*8)+1, (i*8) +8);
else v0ABBRing[i-4] = hdata->Integral((i*8)+1, (i*8) +8);
}
break;
case AliVZEROQADataMakerRec::kBGFlag:
for (Int_t i=0; i<8; i++) {
if(i<4) v0CBGRing[i] = hdata->Integral((i*8)+1, (i*8) +8);
else v0ABGRing[i-4] = hdata->Integral((i*8)+1, (i*8) +8);
}
break;
}
}
histonb++;
}
if(multV0A == 0.0 || multV0C == 0.0) {
AliWarning(Form("One of the two disks is missing !") );
test = 0.0;
}
if( v0ABBRing[0]+v0ABGRing[0] == 0.0 ||
v0ABBRing[1]+v0ABGRing[1] == 0.0 ||
v0ABBRing[2]+v0ABGRing[2] == 0.0 ||
v0ABBRing[3]+v0ABGRing[3] == 0.0 ||
v0CBBRing[0]+v0CBGRing[0] == 0.0 ||
v0CBBRing[1]+v0CBGRing[1] == 0.0 ||
v0CBBRing[2]+v0CBGRing[2] == 0.0 ||
v0CBBRing[3]+v0CBGRing[3] == 0.0 ){
AliWarning(Form("One ring is missing !") );
test = 0.1;
}
return test ;
}
void AliVZEROQAChecker::Init(const AliQAv1::DETECTORINDEX_t det)
{
AliQAv1::Instance(det) ;
Float_t * hiValue = new Float_t[AliQAv1::kNBIT] ;
Float_t * lowValue = new Float_t[AliQAv1::kNBIT] ;
lowValue[AliQAv1::kINFO] = 0.5 ;
hiValue[AliQAv1::kINFO] = 1.0 ;
lowValue[AliQAv1::kWARNING] = 0.2 ;
hiValue[AliQAv1::kWARNING] = 0.5 ;
lowValue[AliQAv1::kERROR] = 0.0 ;
hiValue[AliQAv1::kERROR] = 0.2 ;
lowValue[AliQAv1::kFATAL] = -1.0 ;
hiValue[AliQAv1::kFATAL] = 0.0 ;
SetHiLo(hiValue, lowValue) ;
delete [] hiValue;
delete [] lowValue;
}
void AliVZEROQAChecker::SetQA(AliQAv1::ALITASK_t index, Double_t * value) const
{
AliQAv1 * qa = AliQAv1::Instance(index);
for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
qa->UnSet(AliQAv1::kFATAL, specie);
qa->UnSet(AliQAv1::kWARNING, specie);
qa->UnSet(AliQAv1::kERROR, specie);
qa->UnSet(AliQAv1::kINFO, specie);
if ( ! value ) {
qa->Set(AliQAv1::kFATAL, specie) ;
} else {
if ( value[specie] >= fLowTestValue[AliQAv1::kFATAL] && value[specie] < fUpTestValue[AliQAv1::kFATAL] )
qa->Set(AliQAv1::kFATAL, specie) ;
else if ( value[specie] > fLowTestValue[AliQAv1::kERROR] && value[specie] <= fUpTestValue[AliQAv1::kERROR] )
qa->Set(AliQAv1::kERROR, specie) ;
else if ( value[specie] > fLowTestValue[AliQAv1::kWARNING] && value[specie] <= fUpTestValue[AliQAv1::kWARNING] )
qa->Set(AliQAv1::kWARNING, specie) ;
else if ( value[specie] > fLowTestValue[AliQAv1::kINFO] && value[specie] <= fUpTestValue[AliQAv1::kINFO] )
qa->Set(AliQAv1::kINFO, specie) ;
}
}
}
AliVZEROQAChecker.cxx:100 AliVZEROQAChecker.cxx:101 AliVZEROQAChecker.cxx:102 AliVZEROQAChecker.cxx:103 AliVZEROQAChecker.cxx:104 AliVZEROQAChecker.cxx:105 AliVZEROQAChecker.cxx:106 AliVZEROQAChecker.cxx:107 AliVZEROQAChecker.cxx:108 AliVZEROQAChecker.cxx:109 AliVZEROQAChecker.cxx:110 AliVZEROQAChecker.cxx:111 AliVZEROQAChecker.cxx:112 AliVZEROQAChecker.cxx:113 AliVZEROQAChecker.cxx:114 AliVZEROQAChecker.cxx:115 AliVZEROQAChecker.cxx:116 AliVZEROQAChecker.cxx:117 AliVZEROQAChecker.cxx:118 AliVZEROQAChecker.cxx:119 AliVZEROQAChecker.cxx:120 AliVZEROQAChecker.cxx:121 AliVZEROQAChecker.cxx:122 AliVZEROQAChecker.cxx:123 AliVZEROQAChecker.cxx:124 AliVZEROQAChecker.cxx:125 AliVZEROQAChecker.cxx:126 AliVZEROQAChecker.cxx:127 AliVZEROQAChecker.cxx:128 AliVZEROQAChecker.cxx:129 AliVZEROQAChecker.cxx:130 AliVZEROQAChecker.cxx:131 AliVZEROQAChecker.cxx:132 AliVZEROQAChecker.cxx:133 AliVZEROQAChecker.cxx:134 AliVZEROQAChecker.cxx:135 AliVZEROQAChecker.cxx:136 AliVZEROQAChecker.cxx:137 AliVZEROQAChecker.cxx:138 AliVZEROQAChecker.cxx:139 AliVZEROQAChecker.cxx:140 AliVZEROQAChecker.cxx:141 AliVZEROQAChecker.cxx:142 AliVZEROQAChecker.cxx:143 AliVZEROQAChecker.cxx:144 AliVZEROQAChecker.cxx:145 AliVZEROQAChecker.cxx:146 AliVZEROQAChecker.cxx:147 AliVZEROQAChecker.cxx:148 AliVZEROQAChecker.cxx:149 AliVZEROQAChecker.cxx:150 AliVZEROQAChecker.cxx:151 AliVZEROQAChecker.cxx:152 AliVZEROQAChecker.cxx:153 AliVZEROQAChecker.cxx:154 AliVZEROQAChecker.cxx:155 AliVZEROQAChecker.cxx:156 AliVZEROQAChecker.cxx:157 AliVZEROQAChecker.cxx:158 AliVZEROQAChecker.cxx:159 AliVZEROQAChecker.cxx:160 AliVZEROQAChecker.cxx:161 AliVZEROQAChecker.cxx:162 AliVZEROQAChecker.cxx:163 AliVZEROQAChecker.cxx:164 AliVZEROQAChecker.cxx:165 AliVZEROQAChecker.cxx:166 AliVZEROQAChecker.cxx:167 AliVZEROQAChecker.cxx:168 AliVZEROQAChecker.cxx:169 AliVZEROQAChecker.cxx:170 AliVZEROQAChecker.cxx:171 AliVZEROQAChecker.cxx:172 AliVZEROQAChecker.cxx:173 AliVZEROQAChecker.cxx:174 AliVZEROQAChecker.cxx:175 AliVZEROQAChecker.cxx:176 AliVZEROQAChecker.cxx:177 AliVZEROQAChecker.cxx:178 AliVZEROQAChecker.cxx:179 AliVZEROQAChecker.cxx:180 AliVZEROQAChecker.cxx:181 AliVZEROQAChecker.cxx:182 AliVZEROQAChecker.cxx:183 AliVZEROQAChecker.cxx:184 AliVZEROQAChecker.cxx:185 AliVZEROQAChecker.cxx:186 AliVZEROQAChecker.cxx:187 AliVZEROQAChecker.cxx:188 AliVZEROQAChecker.cxx:189 AliVZEROQAChecker.cxx:190 AliVZEROQAChecker.cxx:191 AliVZEROQAChecker.cxx:192 AliVZEROQAChecker.cxx:193 AliVZEROQAChecker.cxx:194 AliVZEROQAChecker.cxx:195 AliVZEROQAChecker.cxx:196 AliVZEROQAChecker.cxx:197 AliVZEROQAChecker.cxx:198 AliVZEROQAChecker.cxx:199 AliVZEROQAChecker.cxx:200 AliVZEROQAChecker.cxx:201 AliVZEROQAChecker.cxx:202 AliVZEROQAChecker.cxx:203 AliVZEROQAChecker.cxx:204 AliVZEROQAChecker.cxx:205 AliVZEROQAChecker.cxx:206 AliVZEROQAChecker.cxx:207 AliVZEROQAChecker.cxx:208 AliVZEROQAChecker.cxx:209 AliVZEROQAChecker.cxx:210 AliVZEROQAChecker.cxx:211 AliVZEROQAChecker.cxx:212 AliVZEROQAChecker.cxx:213 AliVZEROQAChecker.cxx:214 AliVZEROQAChecker.cxx:215 AliVZEROQAChecker.cxx:216 AliVZEROQAChecker.cxx:217 AliVZEROQAChecker.cxx:218 AliVZEROQAChecker.cxx:219 AliVZEROQAChecker.cxx:220 AliVZEROQAChecker.cxx:221 AliVZEROQAChecker.cxx:222 AliVZEROQAChecker.cxx:223 AliVZEROQAChecker.cxx:224 AliVZEROQAChecker.cxx:225 AliVZEROQAChecker.cxx:226 AliVZEROQAChecker.cxx:227 AliVZEROQAChecker.cxx:228