#include <TH1.h>
#include "AliTPCQAChecker.h"
#include "AliTPCQADataMakerRec.h"
ClassImp(AliTPCQAChecker)
AliTPCQAChecker& AliTPCQAChecker::operator = (const AliTPCQAChecker &checker)
{
this->~AliTPCQAChecker();
new(this) AliTPCQAChecker(checker);
return *this;
}
void
AliTPCQAChecker::Check(Double_t * rv, AliQAv1::ALITASK_t index, TObjArray ** list,
const AliDetectorRecoParam * )
{
if(fDebug>0)
AliInfo("In AliTPCQAChecker::Check");
if (index!=AliQAv1::kRAW&&index!=AliQAv1::kSIM&&index!=AliQAv1::kREC&&index!=AliQAv1::kESD) {
AliWarning(Form("Checker for task %d not implement for the moment",index));
return;
}
for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++)
rv[specie] = 1.0;
for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
if ( !AliQAv1::Instance()->IsEventSpecieSet(specie) )
continue ;
if (index == AliQAv1::kRAW)
rv[specie] = CheckRAW(specie, list[specie]);
if (index == AliQAv1::kSIM)
rv[specie] = CheckSIM(specie, list[specie]);
if (index == AliQAv1::kREC)
rv[specie] = CheckREC(specie, list[specie]);
if (index == AliQAv1::kESD)
rv[specie] = CheckESD(specie, list[specie]);
if(fDebug>3)
AliInfo(Form("Specie: %s. Task: %s. Value: %f",
AliRecoParam::GetEventSpecieName(specie),
AliQAv1::GetAliTaskName(index),
rv[specie]));
}
}
Double_t AliTPCQAChecker::CheckRAW(Int_t specie, TObjArray* list)
{
if(fDebug>0)
AliInfo("In AliTPCQAChecker::CheckRAW");
if(fDebug>2)
list->Print();
TH1* hRawsOccupancyVsSector = static_cast<TH1*>
(list->FindObject(Form("%s_hRawsOccupancyVsSector",AliRecoParam::GetEventSpecieName(specie))));
TH1* hRawsQmaxVsSector = static_cast<TH1*>
(list->FindObject(Form("%s_hRawsQmaxVsSector",AliRecoParam::GetEventSpecieName(specie))));
if (!hRawsOccupancyVsSector || !hRawsQmaxVsSector)
return -0.5;
if(hRawsOccupancyVsSector->GetEntries()==0) {
return 0.25;
}
Int_t nBinsX = hRawsOccupancyVsSector->GetNbinsX();
for(Int_t i = 1; i <= nBinsX; i++) {
if(hRawsOccupancyVsSector->GetBinContent(i)==0)
return 0.75;
}
return 1.0;
}
Double_t AliTPCQAChecker::CheckSIM(Int_t specie, TObjArray* list)
{
if(fDebug>0)
AliInfo("In AliTPCQAChecker::CheckSIM");
if(fDebug>2)
list->Print();
TH1* hDigits = static_cast<TH1*>
(list->FindObject(Form("%s_hDigitsADC",AliRecoParam::GetEventSpecieName(specie))));
TH1* hHitsNhits = static_cast<TH1*>
(list->FindObject(Form("%s_hHitsNhits",AliRecoParam::GetEventSpecieName(specie))));
TH1* hHitsElectrons = static_cast<TH1*>
(list->FindObject(Form("%s_hHitsElectrons",AliRecoParam::GetEventSpecieName(specie))));
TH1* hHitsRadius = static_cast<TH1*>
(list->FindObject(Form("%s_hHitsRadius",AliRecoParam::GetEventSpecieName(specie))));
TH1* histHitsPrimPerCm = static_cast<TH1*>
(list->FindObject(Form("%s_histHitsPrimPerCm",AliRecoParam::GetEventSpecieName(specie))));
TH1* histHitsElectronsPerCm = static_cast<TH1*>
(list->FindObject(Form("%s_histHitsElectronsPerCm",AliRecoParam::GetEventSpecieName(specie))));
if (hDigits) {
if(hDigits->GetEntries()==0)
return 0.25;
}
if (hHitsNhits && hHitsElectrons && hHitsRadius &&
histHitsPrimPerCm && histHitsElectronsPerCm) {
if (hHitsNhits->GetEntries()==0 || hHitsElectrons->GetEntries()==0 ||
hHitsRadius->GetEntries()==0 || histHitsPrimPerCm->GetEntries()==0 ||
histHitsElectronsPerCm->GetEntries()==0)
return 0.25;
}
return 1;
}
Double_t AliTPCQAChecker::CheckREC(Int_t specie, TObjArray* list)
{
if(fDebug>0)
AliInfo("In AliTPCQAChecker::CheckREC");
if(fDebug>2)
list->Print();
TH1* hDigits = static_cast<TH1*>
(list->FindObject(Form("%s_hDigitsADC",AliRecoParam::GetEventSpecieName(specie))));
TH1* hNclustersVsRow = static_cast<TH1*>
(list->FindObject(Form("%s_hRecPointsRow",AliRecoParam::GetEventSpecieName(specie))));
TH1* hQshort = static_cast<TH1*>
(list->FindObject(Form("%s_hRecPointsQShort",AliRecoParam::GetEventSpecieName(specie))));
TH1* hQmedium = static_cast<TH1*>
(list->FindObject(Form("%s_hRecPointsQMedium",AliRecoParam::GetEventSpecieName(specie))));
TH1* hQlong = static_cast<TH1*>
(list->FindObject(Form("%s_hRecPointsQLong",AliRecoParam::GetEventSpecieName(specie))));
if (!hDigits &&
(!hNclustersVsRow || !hQshort || !hQmedium || !hQlong))
return -0.5;
if (hDigits && hDigits->GetEntries()==0)
return 0.25;
if (hNclustersVsRow && hNclustersVsRow->GetEntries() < 1000) {
return 0.75;
} else {
if (!hQshort || !hQlong || !hQlong)
return -0.5;
if (hQshort->GetEntries()==0 || hQmedium->GetEntries()==0 ||
hQlong->GetEntries()==0)
return 0.25;
}
return 1;
}
Double_t AliTPCQAChecker::CheckESD(Int_t specie, TObjArray* list)
{
if(fDebug>0)
AliInfo("In AliTPCQAChecker::CheckESD");
if(fDebug>2)
list->Print();
TH1* hESDclusters = static_cast<TH1*>
(list->FindObject(Form("%s_hESDclusters",AliRecoParam::GetEventSpecieName(specie))));
TH1* hESDratio = static_cast<TH1*>
(list->FindObject(Form("%s_hESDratio",AliRecoParam::GetEventSpecieName(specie))));
TH1* hESDpt = static_cast<TH1*>
(list->FindObject(Form("%s_hESDpt",AliRecoParam::GetEventSpecieName(specie))));
if (!hESDclusters || !hESDratio || !hESDpt)
return -0.5;
return 1.0;
}
void AliTPCQAChecker::Init(const AliQAv1::DETECTORINDEX_t det)
{
if(fDebug>0)
AliInfo("In AliTPCQAChecker::Init");
AliQAv1::Instance(det) ;
Float_t hiValue[AliQAv1::kNBIT] ;
Float_t lowValue[AliQAv1::kNBIT] ;
hiValue[AliQAv1::kINFO] = 1.00;
lowValue[AliQAv1::kINFO] = 0.99;
hiValue[AliQAv1::kWARNING] = 0.99;
lowValue[AliQAv1::kWARNING] = 0.50;
hiValue[AliQAv1::kERROR] = 0.50;
lowValue[AliQAv1::kERROR] = 0.00;
hiValue[AliQAv1::kFATAL] = 0.00;
lowValue[AliQAv1::kFATAL] =-1.00;
SetHiLo(hiValue, lowValue) ;
}
void
AliTPCQAChecker::SetQA(AliQAv1::ALITASK_t index, Double_t * value) const
{
if(fDebug>0)
AliInfo("In AliTPCQAChecker::SetQA");
AliQAv1 * qa = AliQAv1::Instance(index);
for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
if (value==NULL) {
if(fDebug>1)
AliInfo(Form("Fatal QA. Task: %s. Specie: %s",
AliQAv1::GetAliTaskName(index),
AliRecoParam::GetEventSpecieName(specie)));
qa->Set(AliQAv1::kFATAL, specie) ;
} else {
if ( value[specie] >= fLowTestValue[AliQAv1::kFATAL] &&
value[specie] < fUpTestValue[AliQAv1::kFATAL] ) {
if(fDebug>1)
AliInfo(Form("QA-Fatal. Task: %s. Specie: %s",
AliQAv1::GetAliTaskName(index),
AliRecoParam::GetEventSpecieName(specie)));
qa->Set(AliQAv1::kFATAL, specie) ;
} else if ( value[specie] > fLowTestValue[AliQAv1::kERROR] &&
value[specie] <= fUpTestValue[AliQAv1::kERROR] ) {
if(fDebug>1)
AliInfo(Form("QA-Error. Task: %s. Specie: %s",
AliQAv1::GetAliTaskName(index),
AliRecoParam::GetEventSpecieName(specie)));
qa->Set(AliQAv1::kERROR, specie) ;
} else if (value[specie] > fLowTestValue[AliQAv1::kWARNING] &&
value[specie] <= fUpTestValue[AliQAv1::kWARNING]) {
if(fDebug>1)
AliInfo(Form("QA-Warning. Task: %s. Specie: %s",
AliQAv1::GetAliTaskName(index),
AliRecoParam::GetEventSpecieName(specie)));
qa->Set(AliQAv1::kWARNING, specie) ;
} else if (value[specie] > fLowTestValue[AliQAv1::kINFO] &&
value[specie] <= fUpTestValue[AliQAv1::kINFO] ) {
if(fDebug>1)
AliInfo(Form("QA-Info. Task: %s. Specie: %s",
AliQAv1::GetAliTaskName(index),
AliRecoParam::GetEventSpecieName(specie)));
qa->Set(AliQAv1::kINFO, specie) ;
}
}
}
}