* provided "as is" without express or implied warranty. *
**************************************************************************/
-#include "AliQAChecker.h"
+// $Id$
+
#include "AliMUONQAChecker.h"
-//-----------------------------------------------------------------------------
/// \class AliMUONQAChecker
///
-/// MUON base class for quality assurance checker
+/// Implementation of AliQACheckerBase for MCH and MTR
///
-/// \author C. Finck
-//-----------------------------------------------------------------------------
+/// \author Laurent Aphecetche, Subatech
+
+#include "AliMUONRecoParam.h"
+#include "AliMUONTrackerQAChecker.h"
+#include "AliMUONTriggerQAChecker.h"
+#include "AliCodeTimer.h"
+#include "AliMUONQAIndices.h"
/// \cond CLASSIMP
ClassImp(AliMUONQAChecker)
/// \endcond
+namespace
+{
+ const Int_t TRACKER=0;
+ const Int_t TRIGGER=1;
+}
+
//__________________________________________________________________
AliMUONQAChecker::AliMUONQAChecker() :
- AliQACheckerBase("MUON","MUON Quality Assurance Data Maker")
+ AliQACheckerBase("MUON","MUON Quality Assurance Data Maker"),
+fCheckers(new TObjArray)
{
-/// ctor
-
+ /// ctor
+ fCheckers->SetOwner(kTRUE);
+ fCheckers->AddAt(new AliMUONTrackerQAChecker(),TRACKER);
+ fCheckers->AddAt(new AliMUONTriggerQAChecker(),TRIGGER);
}
//__________________________________________________________________
AliMUONQAChecker::~AliMUONQAChecker()
{
-/// dtor
+ /// dtor
+ delete fCheckers;
}
-//__________________________________________________________________
-AliMUONQAChecker::AliMUONQAChecker(const AliMUONQAChecker& qac) :
- AliQACheckerBase(qac.GetName(), qac.GetTitle())
+//______________________________________________________________________________
+void
+AliMUONQAChecker::Check(Double_t* rv, AliQAv1::ALITASK_t index,
+ TObjArray** list,
+ const AliDetectorRecoParam * recoParam)
{
-/// copy ctor
+ /// Check objects in list
+
+ 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;
-//__________________________________________________________________
-AliMUONQAChecker& AliMUONQAChecker::operator = (const AliMUONQAChecker& /*qac*/ )
-{
- /// Equal operator.
- return *this;
+ Bool_t trackerRequested(kFALSE);
+ Bool_t triggerRequested(kFALSE);
+
+ for ( Int_t i = 0; i < AliRecoParam::kNSpecies; ++i )
+ {
+ // no need to take into account detector that was not requested
+ 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 )
+ {
+ // no need to take into account detector that was not requested
+ 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)
+{
+ /// intialises QA and QA checker settings
+ 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]) ;
+}