#include "AliMUONQAChecker.h"
#include "AliMUONRecoParam.h"
#include "AliMUONTrackerQAChecker.h"
#include "AliMUONTriggerQAChecker.h"
#include "AliCodeTimer.h"
#include "AliMUONQAIndices.h"
ClassImp(AliMUONQAChecker)
namespace
{
const Int_t TRACKER=0;
const Int_t TRIGGER=1;
}
AliMUONQAChecker::AliMUONQAChecker() :
AliQACheckerBase("MUON","MUON Quality Assurance Data Maker"),
fCheckers(new TObjArray)
{
fCheckers->SetOwner(kTRUE);
fCheckers->AddAt(new AliMUONTrackerQAChecker(),TRACKER);
fCheckers->AddAt(new AliMUONTriggerQAChecker(),TRIGGER);
}
AliMUONQAChecker::~AliMUONQAChecker()
{
delete fCheckers;
}
void
AliMUONQAChecker::Check(Double_t* rv, AliQAv1::ALITASK_t index,
TObjArray** list,
const AliDetectorRecoParam * recoParam)
{
AliCodeTimerAuto(AliQAv1::GetTaskName(index),0);
const AliMUONRecoParam* muonRecoParam = static_cast<const AliMUONRecoParam*>(recoParam);
AliMUONVQAChecker::ECheckCode* ecc(0x0);
for ( Int_t i = 0; i < AliRecoParam::kNSpecies; ++i )
{
rv[i] = -1.0;
}
for ( Int_t ic = 0; ic <= fCheckers->GetLast(); ++ic )
{
if ( ic != TRACKER && ic != TRIGGER ) continue;
Bool_t trackerRequested(kFALSE);
Bool_t triggerRequested(kFALSE);
for ( Int_t i = 0; i < AliRecoParam::kNSpecies; ++i )
{
if ( ic == TRACKER && AliQAv1::GetData(list,AliMUONQAIndices::kTrackerIsThere,AliRecoParam::ConvertIndex(i)) ) trackerRequested=kTRUE;
if ( ic == TRIGGER && AliQAv1::GetData(list,AliMUONQAIndices::kTriggerIsThere,AliRecoParam::ConvertIndex(i)) ) triggerRequested=kTRUE;
}
if ( ic == TRACKER && !trackerRequested )
{
AliInfo("Skipping tracker check as tracker not requested");
continue;
}
if ( ic == TRIGGER && !triggerRequested )
{
AliInfo("Skipping trigger check as trigger not requested");
continue;
}
AliMUONVQAChecker* qac = static_cast<AliMUONVQAChecker*>(fCheckers->At(ic));
if ( index == AliQAv1::kRAW )
{
ecc = qac->CheckRaws(list,muonRecoParam);
}
if ( index == AliQAv1::kREC)
{
ecc = qac->CheckRecPoints(list,muonRecoParam);
}
if ( index == AliQAv1::kESD )
{
ecc = qac->CheckESD(list,muonRecoParam);
}
if ( ecc )
{
for ( Int_t i = 0; i < AliRecoParam::kNSpecies; ++i )
{
if ( ic == TRACKER && AliQAv1::GetData(list,AliMUONQAIndices::kTrackerIsThere,AliRecoParam::ConvertIndex(i))==0x0 ) continue;
if ( ic == TRIGGER && AliQAv1::GetData(list,AliMUONQAIndices::kTriggerIsThere,AliRecoParam::ConvertIndex(i))==0x0 ) continue;
switch ( ecc[i] )
{
case AliMUONVQAChecker::kInfo:
rv[i] = 1.0;
break;
case AliMUONVQAChecker::kWarning:
rv[i] = 0.75;
break;
case AliMUONVQAChecker::kError:
rv[i] = 0.25;
break;
case AliMUONVQAChecker::kFatal:
rv[i] = -1.0;
break;
default:
AliError("Invalid ecc value. FIXME !");
rv[i] = -1.0;
break;
}
}
}
delete[] ecc;
}
}
void AliMUONQAChecker::Init(const AliQAv1::DETECTORINDEX_t det)
{
AliQAv1::Instance(det) ;
Float_t hiValue[AliQAv1::kNBIT] ;
Float_t lowValue[AliQAv1::kNBIT] ;
lowValue[AliQAv1::kINFO] = 0.999 ;
hiValue[AliQAv1::kINFO] = 1.0 ;
hiValue[AliQAv1::kWARNING] = 0.99 ;
lowValue[AliQAv1::kWARNING] = 0.5 ;
lowValue[AliQAv1::kERROR] = 0.0 ;
hiValue[AliQAv1::kERROR] = 0.5 ;
lowValue[AliQAv1::kFATAL] = -1.0 ;
hiValue[AliQAv1::kFATAL] = 0.0 ;
SetHiLo(&hiValue[0], &lowValue[0]) ;
}