X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONQAChecker.cxx;h=8cc7f15a4331eebbfd9c61507b9206eea12f7037;hb=6fc3dfc08ab2e4943b1b70379ac1dc22e202c29b;hp=a817eca516c4feab2a869ff966f7ddb67a3a768c;hpb=cddcc1f3b00cdcdac20666f644fb42998a250ff6;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONQAChecker.cxx b/MUON/AliMUONQAChecker.cxx index a817eca516c..8cc7f15a433 100644 --- a/MUON/AliMUONQAChecker.cxx +++ b/MUON/AliMUONQAChecker.cxx @@ -21,221 +21,135 @@ /// /// Implementation of AliQACheckerBase for MCH and MTR /// -/// For the moment we only implement the checking of raw data QA for the tracker -/// by looking at the occupancy at the manu level. -/// We count the number of manus above a given occupancy threshold, and -/// depending on that number, the resulting QA flag is warning, error or fatal. -/// (there's no "info" type in this case). -/// /// \author Laurent Aphecetche, Subatech -#include "AliLog.h" -#include "AliMUONVTrackerData.h" -#include "AliMpManuIterator.h" -#include "AliQAv1.h" -#include -#include +#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 + fCheckers->SetOwner(kTRUE); + fCheckers->AddAt(new AliMUONTrackerQAChecker(),TRACKER); + fCheckers->AddAt(new AliMUONTriggerQAChecker(),TRIGGER); } //__________________________________________________________________ AliMUONQAChecker::~AliMUONQAChecker() { /// dtor -} - -//__________________________________________________________________ -AliMUONQAChecker::AliMUONQAChecker(const AliMUONQAChecker& qac) : - AliQACheckerBase(qac.GetName(), qac.GetTitle()) -{ - /// copy ctor -} - -//______________________________________________________________________________ -Double_t * -AliMUONQAChecker::Check(AliQAv1::ALITASK_t /*index*/) -{ - /// Check data - - AliError(Form("This method is not implemented. Should it be ? fDataSubDir = %p (%s)", - fDataSubDir, ( fDataSubDir ? fDataSubDir->GetPath() : ""))); - return NULL; + delete fCheckers; } //______________________________________________________________________________ -Double_t * -AliMUONQAChecker::Check(AliQAv1::ALITASK_t index, TObjArray ** list) +void +AliMUONQAChecker::Check(Double_t* rv, AliQAv1::ALITASK_t index, + TObjArray** list, + const AliDetectorRecoParam * recoParam) { /// Check objects in list - if ( index == AliQAv1::kRAW ) - { - return CheckRaws(list); - } - - if ( index == AliQAv1::kREC) - { - return CheckRecPoints(list); - } + AliCodeTimerAuto(AliQAv1::GetTaskName(index),0); - if ( index == AliQAv1::kESD ) - { - return CheckESD(list); - } - - AliWarning(Form("Checker for task %d not implement for the moment",index)); - return NULL; -} + const AliMUONRecoParam* muonRecoParam = static_cast(recoParam); + AliMUONVQAChecker::ECheckCode* ecc(0x0); -//______________________________________________________________________________ -TH1* -AliMUONQAChecker::GetHisto(TObjArray* list, const char* hname) const -{ - /// Get a given histo from the list - TH1* h = static_cast(list->FindObject(hname)); - if (!h) + for ( Int_t i = 0; i < AliRecoParam::kNSpecies; ++i ) { - AliError(Form("Did not find expected histo %s",hname)); + rv[i] = -1.0; } - return h; -} - -//______________________________________________________________________________ -Double_t * -AliMUONQAChecker::CheckRecPoints(TObjArray ** list) -{ - /// Check rec points - /// Very binary check for the moment. - - Double_t * rv = new Double_t[AliRecoParam::kNSpecies] ; - for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) - rv[specie] = 1.0 ; - - for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) { - TH1* h = GetHisto(list[specie],"hTrackerNumberOfClustersPerDE"); - if ( !h ) rv[specie] = 0.75; // only a warning if histo not found, in order not to kill anything because QA failed... - - else if ( h->GetMean() == 0.0 ) rv[specie] = MarkHisto(*h,0.0); - } - return rv; -} - -//______________________________________________________________________________ -Double_t -AliMUONQAChecker::MarkHisto(TH1& histo, Double_t value) const -{ - /// Mark histo as originator of some QA error/warning - - if ( value != 1.0 ) + for ( Int_t ic = 0; ic <= fCheckers->GetLast(); ++ic ) { - histo.SetBit(AliQAv1::GetQABit()); - } - - return value; -} + if ( ic != TRACKER && ic != TRIGGER ) continue; -//______________________________________________________________________________ -Double_t * -AliMUONQAChecker::CheckESD(TObjArray ** list) -{ - /// Check ESD - - Double_t * rv = new Double_t[AliRecoParam::kNSpecies] ; - for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) - rv[specie] = 1.0 ; - - for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) { + Bool_t trackerRequested(kFALSE); + Bool_t triggerRequested(kFALSE); - TH1* h = GetHisto(list[specie],"hESDnTracks"); - - if (!h) rv[specie] = 0.75; - - else if ( h->GetMean() == 0.0 ) rv[specie] = MarkHisto(*h,0.0); // no track -> fatal - - h = GetHisto(list[specie],"hESDMatchTrig"); - - if (!h) rv[specie] = 0.75; - - else if (h->GetMean() == 0.0 ) rv[specie] = MarkHisto(*h,0.25); // no trigger matching -> error - } - return rv; -} - -//______________________________________________________________________________ -Double_t * -AliMUONQAChecker::CheckRaws(TObjArray ** list) -{ - /// Check raws - - Double_t * rv = new Double_t[AliRecoParam::kNSpecies] ; - for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) - rv[specie] = 1.0 ; - - for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) { - TIter next(list[specie]); - TObject* object; - AliMUONVTrackerData* data(0x0); - - while ( (object=next()) && !data ) - { - if (object->InheritsFrom("AliMUONVTrackerData")) - { - data = static_cast(object); - } - } - - if ( !data ) - { - AliError("Did not find TrackerData in the list !"); - return NULL; - } - - AliMpManuIterator it; - Int_t detElemId; - Int_t manuId; - Int_t n50(0); // number of manus with occupancy above 0.5 - Int_t n75(0); // number of manus with occupancy above 0.75 - Int_t n(0); // number of manus with some occupancy - - while ( it.Next(detElemId,manuId) ) - { - Float_t occ = data->Manu(detElemId,manuId,2); - if (occ > 0 ) ++n; - if (occ >= 0.5 ) ++n50; - if (occ >= 0.75 ) ++n75; - } - - AliInfo(Form("n %d n50 %d n75 %d",n,n50,n75)); - - if ( n == 0 ) - { - AliError("Oups. Got zero occupancy in all manus ?!"); - rv[specie] = 0.0; - } + 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(fCheckers->At(ic)); + + if ( index == AliQAv1::kRAW ) + { + ecc = qac->CheckRaws(list,muonRecoParam); + } - if ( n75 ) - { - AliError(Form("Got %d manus with occupancy above 0.75",n75)); - rv[specie] = 0.1; - } + if ( index == AliQAv1::kREC) + { + ecc = qac->CheckRecPoints(list,muonRecoParam); + } + + if ( index == AliQAv1::kESD ) + { + ecc = qac->CheckESD(list,muonRecoParam); + } - if ( n50 ) + if ( ecc ) + { + for ( Int_t i = 0; i < AliRecoParam::kNSpecies; ++i ) { - AliWarning(Form("Got %d manus with occupancy above 0.5",n50)); - rv[specie] = 0.9; + // 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; } - return rv; } //______________________________________________________________________________ @@ -255,32 +169,3 @@ void AliMUONQAChecker::Init(const AliQAv1::DETECTORINDEX_t det) hiValue[AliQAv1::kFATAL] = 0.0 ; SetHiLo(&hiValue[0], &lowValue[0]) ; } - -//______________________________________________________________________________ -void -AliMUONQAChecker::SetQA(AliQAv1::ALITASK_t index, Double_t * value) const -{ - /// sets the QA according the return value of the Check - - 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 ) { // No checker is implemented, set all QA to Fatal - 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) ; - } - } -}