// Quality Assurance Object//_________________________________________________________________________
// Quality Assurance object. The QA status is held in one word per detector,
// each bit corresponds to a different status.
-// bit 0-3 : QA raised during simulation (SIM)
-// bit 4-7 : QA raised during reconstruction (REC)
-// bit 8-11 : QA raised during ESD checking (ESD)
-// bit 12-15: QA raised during analysis (ANA)
+// bit 0-3 : QA raised during simulation (RAW)
+// bit 4-7 : QA raised during simulation (SIM)
+// bit 8-11 : QA raised during reconstruction (REC)
+// bit 12-15 : QA raised during ESD checking (ESD)
+// bit 16-19 : QA raised during analysis (ANA)
// Each of the 4 bits corresponds to a severity level of increasing importance
// from lower to higher bit (INFO, WARNING, ERROR, FATAL)
//
"ZDC", "PMD", "T0", "VZERO", "ACORDE", "HLT", "Global"} ;
TString AliQA::fgGRPPath = "GRP/GRP/Data" ;
TString AliQA::fgRTNames[] = {"UNKNOWN", "AUTO_TEST", "CALIBRATION", "CALIBRATION_PULSER", "CHANNEL_DELAY_TUNING", "COSMIC",
- "COSMICS", "DAQ_FO_UNIF_SCAN", "DAQ_GEN_DAC_SCAN", "DAQ_MEAN_TH_SCAN", "DAQ_MIN_TH_SCAN",
- "DAQ_NOISY_PIX_SCAN", "DAQ_PIX_DELAY_SCAN", "DAQ_UNIFORMITY_SCAN", "DCS_FO_UNIF_SCAN",
- "DCS_MEAN_TH_SCAN", "DCS_MIN_TH_SCAN", "DCS_PIX_DELAY_SCAN", "DCS_UNIFORMITY_SCAN",
- "DDL_TEST", "GAIN", "PEDESTAL", "INJECTOR", "LASER", "MONTECARLO", "NOISE", "NOISY_PIX_SCAN",
- "PHYSICS", "PULSER", "STANDALONE", "STANDALONE_BC", "STANDALONE_CENTRAL", "STANDALONE_COSMIC",
- "STANDALONE_EMD", "STANDALONE_LASER", "STANDALONE_MB", "STANDALONE_PEDESTAL",
- "STANDALONE_SEMICENTRAL", "STANDALONE_PULSER" } ;
+ "COSMICS", "DAQ_FO_UNIF_SCAN", "DAQ_GEN_DAC_SCAN", "DAQ_MEAN_TH_SCAN", "DAQ_MIN_TH_SCAN",
+ "DAQ_NOISY_PIX_SCAN", "DAQ_PIX_DELAY_SCAN", "DAQ_UNIFORMITY_SCAN", "DCS_FO_UNIF_SCAN",
+ "DCS_MEAN_TH_SCAN", "DCS_MIN_TH_SCAN", "DCS_PIX_DELAY_SCAN", "DCS_UNIFORMITY_SCAN",
+ "DDL_TEST", "GAIN", "PEDESTAL", "INJECTOR", "LASER", "MONTECARLO", "NOISE", "NOISY_PIX_SCAN",
+ "PHYSICS", "PULSER", "STANDALONE", "STANDALONE_BC", "STANDALONE_CENTRAL", "STANDALONE_COSMIC",
+ "STANDALONE_EMD", "STANDALONE_LASER", "STANDALONE_MB", "STANDALONE_PEDESTAL",
+ "STANDALONE_SEMICENTRAL", "STANDALONE_PULSER" } ;
TString AliQA::fgTaskNames[] = {"Raws", "Hits", "SDigits", "Digits", "RecPoints", "TrackSegments", "RecParticles", "ESDs"} ;
const TString AliQA::fkgLabLocalFile = "file://" ;
const TString AliQA::fkgLabLocalOCDB = "local://" ;
return rv ;
}
+//_______________________________________________________________
+const AliQA::TASKINDEX_t AliQA::GetTaskIndex(const char * name)
+{
+ // returns the detector index corresponding to a given name
+ TString sname(name) ;
+ TASKINDEX_t rv ;
+ for (Int_t tsk = 0; tsk < kNTASKINDEX ; tsk++) {
+ if ( GetTaskName(tsk) == sname ) {
+ rv = TASKINDEX_t(tsk) ;
+ break ;
+ }
+ }
+ return rv ;
+}
+
//_______________________________________________________________
const Bool_t AliQA::IsSet(DETECTORINDEX_t det, ALITASK_t tsk, QABIT_t bit) const
{
// Checks is the requested bit is set
-
+
CheckRange(det) ;
CheckRange(tsk) ;
CheckRange(bit) ;
-
+
ULong_t offset = Offset(tsk) ;
ULong_t status = GetStatus(det) ;
offset+= bit ;
return status ;
}
+//_______________________________________________________________
+const Bool_t AliQA::IsSetAny(DETECTORINDEX_t det, ALITASK_t tsk) const
+{
+ // Checks is the requested bit is set
+
+ CheckRange(det) ;
+ CheckRange(tsk) ;
+
+ ULong_t offset = Offset(tsk) ;
+ ULong_t status = GetStatus(det) ;
+ UShort_t st = 0 ;
+ for ( Int_t bit = 0 ; bit < kNBIT ; bit++) {
+ offset+= bit ;
+ st += (status & 1 << offset) != 0 ;
+ }
+ if ( st == 0 )
+ return kFALSE ;
+ else
+ return kTRUE ;
+}
+//_______________________________________________________________
+const Bool_t AliQA::IsSetAny(DETECTORINDEX_t det) const
+{
+ // Checks is the requested bit is set
+
+ CheckRange(det) ;
+
+ ULong_t status = GetStatus(det) ;
+ UShort_t st = 0 ;
+ for ( Int_t tsk = 0 ; tsk < kNTASK ; tsk++) {
+ ULong_t offset = Offset(ALITASK_t(tsk)) ;
+ for ( Int_t bit = 0 ; bit < kNBIT ; bit++) {
+ offset+= bit ;
+ st += (status & 1 << offset) != 0 ;
+ }
+ }
+ if ( st == 0 )
+ return kFALSE ;
+ else
+ return kTRUE ;
+}
+
//_______________________________________________________________
AliQA * AliQA::Instance()
{
{
// Set the lower level directory name where reference data are found
TString test(name) ;
- RUNTYPE_t rt ;
- for (Int_t index = 0; index < AliQA::kNTYPE; index++) {
- if (test == fgRTNames[index]) {
+ RUNTYPE_t rt = kNULLTYPE ;
+ for (Int_t index = 0; index < kNTYPE; index++) {
+ if (test.CompareTo(fgRTNames[index]) == 0) {
rt = (RUNTYPE_t) index ;
break ;
- } else {
+ }
+ }
+
+ if (rt == kNULLTYPE) {
printf("AliQA::SetQARefDataDirName: %s is an unknown RUN TYPE name\n", name) ;
return ;
- }
- }
- SetQARefDataDirName(rt) ;
+ }
+
+ SetQARefDataDirName(rt) ;
}
//_____________________________________________________________________________
{
// dispplay the QA status word
Int_t index ;
- for (index = 0 ; index < kNDET ; index++)
- ShowStatus(DETECTORINDEX_t(index)) ;
+ for (index = 0 ; index < kNDET ; index++) {
+ for (Int_t tsk = kRAW ; tsk < kNTASK ; tsk++) {
+ ShowStatus(DETECTORINDEX_t(index), ALITASK_t(tsk)) ;
+ }
+ }
}
//_______________________________________________________________
-void AliQA::ShowStatus(DETECTORINDEX_t det) const
+void AliQA::ShowStatus(DETECTORINDEX_t det, ALITASK_t tsk) const
{
// Prints the full QA status of a given detector
CheckRange(det) ;
AliInfo(Form("====> QA Status for %8s raw =0x%x, sim=0x%x, rec=0x%x, esd=0x%x, ana=0x%x", GetDetName(det).Data(),
tskStatus[kRAW], tskStatus[kSIM], tskStatus[kREC], tskStatus[kESD], tskStatus[kANA] )) ;
- for (Int_t tsk = kRAW ; tsk < kNTASK ; tsk++) {
- ShowASCIIStatus(det, ALITASK_t(tsk), tskStatus[tsk]) ;
+ if (tsk == kNULLTASK) {
+ for (Int_t itsk = kRAW ; itsk < kNTASK ; itsk++) {
+ ShowASCIIStatus(det, ALITASK_t(itsk), tskStatus[itsk]) ;
+ }
+ } else {
+ ShowASCIIStatus(det, tsk, tskStatus[tsk]) ;
}
}