X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONTrackerQAChecker.cxx;h=e05e80b9b919d818c84c9240bcc1c74a6afc6482;hb=b929303d2b418b4522a45879634aa81ad728eb43;hp=d3c3fca72a30d1457265bfda60651fcb7eac269d;hpb=ece56eb9d38b9746b84b76e9eaf5c4507f2961e4;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONTrackerQAChecker.cxx b/MUON/AliMUONTrackerQAChecker.cxx index d3c3fca72a3..e05e80b9b91 100644 --- a/MUON/AliMUONTrackerQAChecker.cxx +++ b/MUON/AliMUONTrackerQAChecker.cxx @@ -29,19 +29,22 @@ #include "AliCDBManager.h" #include "AliCodeTimer.h" #include "AliLog.h" +#include "AliMUONQAIndices.h" #include "AliMUONRecoParam.h" -#include "AliMUONTrackerQADataMakerRec.h" #include "AliMpBusPatch.h" #include "AliMpDDLStore.h" #include "AliQAv1.h" -#include "AliQAv1.h" #include "Riostream.h" #include "TAxis.h" #include "TDirectory.h" +#include "TGaxis.h" #include "TH1.h" #include "TLine.h" #include "TMath.h" #include "TPaveText.h" +#include "TVirtualPad.h" +#include "TStyle.h" +#include "TLatex.h" /// \cond CLASSIMP ClassImp(AliMUONTrackerQAChecker) @@ -136,8 +139,93 @@ namespace { return 0; } -} + //___________________________________________________________________________ + Int_t GetColorFromCheckCode(AliMUONVQAChecker::ECheckCode code) + { + if ( code == AliMUONVQAChecker::kInfo ) return AliMUONVQAChecker::kInfoColor; + else if ( code == AliMUONVQAChecker::kWarning ) return AliMUONVQAChecker::kWarningColor; + else if ( code == AliMUONVQAChecker::kFatal) return AliMUONVQAChecker::kFatalColor; + else return AliMUONVQAChecker::kErrorColor; + } + + const char* NOTENOUGHEVENTMESSAGE = "Not enough event to judge. Please wait a bit"; + const char* NOTIFYEXPERTMESSAGE = "PLEASE NOTIFY EXPERT !"; + const char* ALLISFINEMESSAGE = "All is fine. Just enjoy."; + + const int NOTENOUGHEVENTLIMIT = 50; + + //___________________________________________________________________________ + void SetupHisto(Int_t neventsseen, Int_t neventsused, const TObjArray& messages, TH1& histo, AliMUONVQAChecker::ECheckCode code, const char* extraopt="") + { + Bool_t allIsFine(kFALSE); + + if ( code == AliMUONVQAChecker::kInfo ) + { + allIsFine = kTRUE; + } + + Double_t y1 = 0.99 - (messages.GetLast()+(allIsFine?1:0)+2)*0.075; + + TPaveText* text = new TPaveText(0.5,y1,0.99,0.99,"NDC"); + + text->AddText(Form("MCH RUN %d - %d events seen - %d events used",AliCDBManager::Instance()->GetRun(),neventsseen,neventsused)); + + TIter next(&messages); + TObjString* str; + + while ( ( str = static_cast(next()) ) ) + { + text->AddText(str->String()); + } + + if ( allIsFine ) + { + text->AddText(ALLISFINEMESSAGE); + } + + text->SetFillColor(GetColorFromCheckCode(code)); + + Int_t color = GetColorFromCheckCode(code); + + histo.SetFillStyle(1001); + histo.SetFillColor(color); + TString sopt("BAR"); + sopt += extraopt; + histo.SetOption(sopt.Data()); + + histo.SetBit(TH1::kNoTitle); + + TList* lstF = histo.GetListOfFunctions(); + TObject* title = lstF->FindObject("title"); + if (title) delete lstF->Remove(title); + // + lstF->Add(text); + + } + + //___________________________________________________________________________ + void ShowTrueValue(TH1& hrostatusnorm, Int_t v) + { + // For a bar > 100% we put the text inside the bar (as TEXT45 option is putting above which + // would go offscreen) + + Int_t bin = hrostatusnorm.FindBin(1.0*v); + + Double_t value = hrostatusnorm.GetBinContent(bin); + + if ( value > 100.0 ) + { + TLatex* l = new TLatex(hrostatusnorm.GetBinCenter(bin),50,Form("%g",value)); + l->SetTextFont(gStyle->GetTextFont()); + l->SetTextAlign(22); + l->SetTextAngle(45); + l->SetTextSize(0.02*hrostatusnorm.GetMarkerSize()); + hrostatusnorm.GetListOfFunctions()->Add(l); + } + } + +} //__________________________________________________________________ AliMUONTrackerQAChecker::AliMUONTrackerQAChecker() : AliMUONVQAChecker() { @@ -150,16 +238,9 @@ AliMUONTrackerQAChecker::~AliMUONTrackerQAChecker() /// dtor } -//__________________________________________________________________ -AliMUONTrackerQAChecker::AliMUONTrackerQAChecker(const AliMUONTrackerQAChecker& qac) : - AliMUONVQAChecker(qac) -{ - /// copy ctor -} - //______________________________________________________________________________ AliMUONVQAChecker::ECheckCode* -AliMUONTrackerQAChecker::CheckRecPoints(TObjArray ** list, AliMUONRecoParam* /*recoParam*/) +AliMUONTrackerQAChecker::CheckRecPoints(TObjArray ** list, const AliMUONRecoParam* /*recoParam*/) { /// Check rec points /// Very binary check for the moment. @@ -170,9 +251,10 @@ AliMUONTrackerQAChecker::CheckRecPoints(TObjArray ** list, AliMUONRecoParam* /*r for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) rv[specie] = AliMUONVQAChecker::kInfo; + for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) { - TH1* h = AliQAv1::GetData(list,AliMUONTrackerQADataMakerRec::kTrackerNumberOfClustersPerDE,AliRecoParam::ConvertIndex(specie)); + TH1* h = AliQAv1::GetData(list,AliMUONQAIndices::kTrackerNumberOfClustersPerDE,AliRecoParam::ConvertIndex(specie)); if ( !h ) rv[specie] = AliMUONVQAChecker::kWarning; // only a warning if histo not found, in order not to kill anything because QA failed... @@ -197,7 +279,7 @@ AliMUONTrackerQAChecker::MarkHisto(TH1& histo, AliMUONVQAChecker::ECheckCode val //______________________________________________________________________________ AliMUONVQAChecker::ECheckCode* -AliMUONTrackerQAChecker::CheckESD(TObjArray ** list, AliMUONRecoParam* /*recoParam*/) +AliMUONTrackerQAChecker::CheckESD(TObjArray ** list, const AliMUONRecoParam* /*recoParam*/) { /// Check ESD @@ -209,13 +291,13 @@ AliMUONTrackerQAChecker::CheckESD(TObjArray ** list, AliMUONRecoParam* /*recoPar for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) { - TH1* h = AliQAv1::GetData(list,AliMUONTrackerQADataMakerRec::kESDnTracks,AliRecoParam::ConvertIndex(specie)); + TH1* h = AliQAv1::GetData(list,AliMUONQAIndices::kESDnTracks,AliRecoParam::ConvertIndex(specie)); if (!h) rv[specie] = AliMUONVQAChecker::kWarning; else if ( h->GetMean() == 0.0 ) rv[specie] = MarkHisto(*h,AliMUONVQAChecker::kFatal); // no track -> fatal - h = AliQAv1::GetData(list,AliMUONTrackerQADataMakerRec::kESDMatchTrig,AliRecoParam::ConvertIndex(specie)); + h = AliQAv1::GetData(list,AliMUONQAIndices::kESDMatchTrig,AliRecoParam::ConvertIndex(specie)); if (!h) rv[specie] = AliMUONVQAChecker::kWarning; @@ -226,7 +308,7 @@ AliMUONTrackerQAChecker::CheckESD(TObjArray ** list, AliMUONRecoParam* /*recoPar //______________________________________________________________________________ AliMUONVQAChecker::ECheckCode* -AliMUONTrackerQAChecker::CheckRaws(TObjArray ** list, AliMUONRecoParam* recoParam) +AliMUONTrackerQAChecker::CheckRaws(TObjArray ** list, const AliMUONRecoParam* recoParam) { /// Check raws @@ -243,18 +325,76 @@ AliMUONTrackerQAChecker::CheckRaws(TObjArray ** list, AliMUONRecoParam* recoPara for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) { - TH1* hbp = AliQAv1::GetData(list,AliMUONTrackerQADataMakerRec::kTrackerBusPatchOccupancy,AliRecoParam::ConvertIndex(specie)); + TH1* hneventsseen = AliQAv1::GetData(list,AliMUONQAIndices::kTrackerNofPhysicsEventsSeen,AliRecoParam::ConvertIndex(specie)); + TH1* hneventsused = AliQAv1::GetData(list,AliMUONQAIndices::kTrackerNofGoodPhysicsEventsUsed,AliRecoParam::ConvertIndex(specie)); - TH1* hnpads = AliQAv1::GetData(list,AliMUONTrackerQADataMakerRec::kTrackerBusPatchNofPads,AliRecoParam::ConvertIndex(specie)); + if (!hneventsseen || !hneventsused ) continue; + + Int_t neventsseen = TMath::Nint(hneventsseen->GetBinContent(1)); + Int_t neventsused = TMath::Nint(hneventsused->GetBinContent(1)); + + AliMUONVQAChecker::ECheckCode c1 = AliMUONVQAChecker::kInfo; + AliMUONVQAChecker::ECheckCode c2 = AliMUONVQAChecker::kInfo; + AliMUONVQAChecker::ECheckCode c3 = AliMUONVQAChecker::kInfo; + + TH1* hbp = AliQAv1::GetData(list,AliMUONQAIndices::kTrackerBusPatchOccupancy,AliRecoParam::ConvertIndex(specie)); + TH1* hbpconfig = AliQAv1::GetData(list,AliMUONQAIndices::kTrackerBusPatchConfig,AliRecoParam::ConvertIndex(specie)); + TH1* hddl = AliQAv1::GetData(list,AliMUONQAIndices::kTrackerDDLOccupancy,AliRecoParam::ConvertIndex(specie)); - TH1* hbpconfig = AliQAv1::GetData(list,AliMUONTrackerQADataMakerRec::kTrackerBusPatchConfig,AliRecoParam::ConvertIndex(specie)); - - if (!hbp || !hnpads ) + if ( hbp && hbpconfig && hddl ) { - continue; + c1 = BeautifyOccupancyHistograms(*hddl,*hbp,hbpconfig,neventsseen,neventsused,*recoParam); + } + else + { + AliError(Form("Could not BeautifyOccupancyHistograms : hddl=%p hbpconfig=%p hbp=%p",hddl,hbpconfig,hbp)); + } + + TH1* hbuspatchtokenerrors = AliQAv1::GetData(list,AliMUONQAIndices::kTrackerBusPatchTokenLostErrors,AliRecoParam::ConvertIndex(specie)); + TH1* hrostatus = AliQAv1::GetData(list,AliMUONQAIndices::kTrackerReadoutStatus,AliRecoParam::ConvertIndex(specie)); + TH1* hrostatusnorm = AliQAv1::GetData(list,AliMUONQAIndices::kTrackerReadoutStatusPerEvent,AliRecoParam::ConvertIndex(specie)); + + if ( hrostatus && hrostatusnorm && hbuspatchtokenerrors ) + { + c2 = BeautifyReadoutHistograms(*hrostatus,*hrostatusnorm,*hbuspatchtokenerrors, + neventsseen,neventsused,*recoParam); + } + else + { + AliError(Form("Could not BeautifyReadoutHistograms : hrostatus=%p hrostatusnorm=%p hbuspatchtokenerrors=%p", + hrostatus,hrostatusnorm,hbuspatchtokenerrors)); + } + + + TH1* heventsize = AliQAv1::GetData(list,AliMUONQAIndices::kTrackerDDLEventSize,AliRecoParam::ConvertIndex(specie)); + TH1* heventsizeperevent = AliQAv1::GetData(list,AliMUONQAIndices::kTrackerDDLEventSizePerEvent,AliRecoParam::ConvertIndex(specie)); + + if ( heventsize && heventsizeperevent ) + { + c3 = BeautifyEventsizeHistograms(*heventsize,*heventsizeperevent, + neventsseen,neventsused,*recoParam); + } + else + { + AliError(Form("Could not BeautifyEventsizeHistograms heventsize=%p heventsizeperevent=%p",heventsize,heventsizeperevent)); + } + + if ( c1 == AliMUONVQAChecker::kFatal || c2 == AliMUONVQAChecker::kFatal || c3 == AliMUONVQAChecker::kFatal ) + { + rv[specie] = AliMUONVQAChecker::kFatal; + } + else if ( c1 == AliMUONVQAChecker::kError || c2 == AliMUONVQAChecker::kError || c3 == AliMUONVQAChecker::kError ) + { + rv[specie] = AliMUONVQAChecker::kError; + } + else if ( c1 == AliMUONVQAChecker::kWarning || c2 == AliMUONVQAChecker::kWarning || c3 == AliMUONVQAChecker::kWarning ) + { + rv[specie] = AliMUONVQAChecker::kWarning; + } + else + { + rv[specie] = AliMUONVQAChecker::kInfo; } - - rv[specie] = BeautifyTrackerBusPatchOccupancy(*hbp,hbpconfig,*hnpads,*recoParam); } return rv; @@ -262,12 +402,14 @@ AliMUONTrackerQAChecker::CheckRaws(TObjArray ** list, AliMUONRecoParam* recoPara //____________________________________________________________________________ AliMUONVQAChecker::ECheckCode -AliMUONTrackerQAChecker::BeautifyTrackerBusPatchOccupancy(TH1& hbp, - const TH1* hbuspatchconfig, - const TH1& hnpads, - AliMUONRecoParam& recoParam) +AliMUONTrackerQAChecker::BeautifyOccupancyHistograms(TH1& hddl, + TH1& hbp, + const TH1* hbuspatchconfig, + Int_t neventsseen, + Int_t neventsused, + const AliMUONRecoParam& recoParam) { - /// Put labels, limits and so on on the TrackerBusPatchOccupancy histogram + /// Put labels, limits and so on on the TrackerBusPatchOccupancy histograms /// hbuspatchconfig and hbp must have the same bin definitions if ( hbuspatchconfig ) @@ -281,6 +423,7 @@ AliMUONTrackerQAChecker::BeautifyTrackerBusPatchOccupancy(TH1& hbp, } } + hddl.SetStats(kFALSE); hbp.SetXTitle("Absolute Bus Patch Id"); hbp.SetYTitle("Occupancy (percent)"); hbp.SetStats(kFALSE); @@ -299,29 +442,32 @@ AliMUONTrackerQAChecker::BeautifyTrackerBusPatchOccupancy(TH1& hbp, line2->SetLineColor(1); line2->SetLineWidth(1); + TList* lstF = hbp.GetListOfFunctions(); + if (lstF) { + TObject *stats = lstF->FindObject("stats"); + lstF->Remove(stats); + TObject *obj; + while ((obj = lstF->First())) { while(lstF->Remove(obj)) { } delete obj; } + if (stats) lstF->Add(stats); + } + hbp.GetListOfFunctions()->Add(line1); hbp.GetListOfFunctions()->Add(line2); TIter next(AliMpDDLStore::Instance()->CreateBusPatchIterator()); AliMpBusPatch* bp(0x0); - Int_t nMissingPads(0); - Int_t nPads(0); Int_t nBusPatches(0); Int_t nMissingBusPatches(0); while ( ( bp = static_cast(next())) ) { - Int_t bin = hbp.FindBin(bp->GetId()); - Int_t n = hnpads.GetBinContent(bin); - ++nBusPatches; - nPads += n; + Int_t bin = hbp.FindBin(bp->GetId()); - if ( hbp.GetBinContent(bin) <= 0 ) + if ( hbp.GetBinContent(bin) <= 0.0 ) { - nMissingPads += n; ++nMissingBusPatches; } } @@ -335,7 +481,6 @@ AliMUONTrackerQAChecker::BeautifyTrackerBusPatchOccupancy(TH1& hbp, Double_t alpha(0.1); // trim 10% of data Double_t tmean(0.0),tvar(0.0); Double_t ymin(0.0),ymax(0.0); - AliMUONVQAChecker::ECheckCode rv(AliMUONVQAChecker::kFatal); // default value = serious problem if ( nBusPatches ) { @@ -384,66 +529,198 @@ AliMUONTrackerQAChecker::BeautifyTrackerBusPatchOccupancy(TH1& hbp, hbp.SetMaximum(ymax*1.4); - TPaveText* text = new TPaveText(0.50,0.80,0.99,0.99,"NDC"); + AliMUONVQAChecker::ECheckCode rv(AliMUONVQAChecker::kInfo); + + TObjArray messages; + messages.SetOwner(kTRUE); - if (ok < 0 ) + if ( neventsseen < NOTENOUGHEVENTLIMIT ) { - text->AddText("Could not compute truncated mean. Not enough events ?"); - } - else if (!nPads || !nBusPatches) - { - text->AddText("Could not get the total number of pads. ERROR !!!"); + messages.Add(new TObjString(NOTENOUGHEVENTMESSAGE)); } else { - Float_t missingPadFraction = nMissingPads*100.0/nPads; - Float_t missingBusPatchFraction = nMissingBusPatches*100.0/nBusPatches; - Float_t aboveLimitFraction = nBusPatchesAboveLimit*100.0/nBusPatches; - Float_t belowLimitFraction = nBusPatchesBelowLimit*100.0/nBusPatches; - - text->AddText(Form("MCH RUN %d",AliCDBManager::Instance()->GetRun())); - text->AddText(Form("%5.2f %% of missing buspatches (%d out of %d)",missingBusPatchFraction,nMissingBusPatches,nBusPatches)); - text->AddText(Form("%5.2f %% of missing pads (%d out of %d)",missingPadFraction,nMissingPads,nPads)); - text->AddText(Form("%5.2f %% bus patches above the %5.2f %% limit",aboveLimitFraction,maxToleratedOccupancy)); - text->AddText(Form("%5.2f %% bus patches below the %e %% limit",belowLimitFraction,minToleratedOccupancy)); - text->AddText(Form("Truncated mean at %2d %% is %7.2f %%",(Int_t)(alpha*100),tmean)); - - if ( missingPadFraction >= 100.0 ) + if ( ok < 0 ) { - rv = AliMUONVQAChecker::kFatal; + messages.Add(new TObjString("Could not compute truncated mean. Not enough events ?")); + + if ( neventsused < TMath::Nint(0.1*neventsseen) ) + { + messages.Add(new TObjString(Form("We've actually seen %d events, but used only %d !",neventsseen,neventsused))); + messages.Add(new TObjString("For a normal physics run, this is highly suspect !")); + messages.Add(new TObjString(NOTIFYEXPERTMESSAGE)); + rv = AliMUONVQAChecker::kFatal; + } } - - else if ( missingPadFraction > recoParam.MissingPadFractionLimit()*100.0 || - aboveLimitFraction > recoParam.FractionOfBuspatchOutsideOccupancyLimit()*100.0 || - belowLimitFraction > recoParam.FractionOfBuspatchOutsideOccupancyLimit()*100.0 ) + else if (!nBusPatches) { - rv = AliMUONVQAChecker::kError; + messages.Add(new TObjString(Form("Could not get the total number of buspatches (%d). ERROR !!!", + nBusPatches))); + messages.Add(new TObjString("Please check with expert !")); + rv = AliMUONVQAChecker::kFatal; } else { - rv = AliMUONVQAChecker::kInfo; + Float_t missingBusPatchFraction = nMissingBusPatches*100.0/nBusPatches; + Float_t aboveLimitFraction = nBusPatchesAboveLimit*100.0/nBusPatches; + Float_t belowLimitFraction = nBusPatchesBelowLimit*100.0/nBusPatches; + + messages.Add(new TObjString(Form("%5.2f %% of missing buspatches (%d out of %d)",missingBusPatchFraction,nMissingBusPatches,nBusPatches))); + messages.Add(new TObjString(Form("%5.2f %% bus patches above the %5.2f %% limit",aboveLimitFraction,maxToleratedOccupancy))); + messages.Add(new TObjString(Form("%5.2f %% bus patches below the %e %% limit",belowLimitFraction,minToleratedOccupancy))); + messages.Add(new TObjString(Form("Bus patch mean occupancy (truncated at %2d %%) is %7.2f %%",(Int_t)(alpha*100),tmean))); + + if ( aboveLimitFraction > recoParam.FractionOfBuspatchOutsideOccupancyLimit()*100.0 || + belowLimitFraction > recoParam.FractionOfBuspatchOutsideOccupancyLimit()*100.0 ) + { + rv = AliMUONVQAChecker::kError; + } + else + { + rv = AliMUONVQAChecker::kInfo; + } } } - hbp.GetListOfFunctions()->Add(text); + SetupHisto(neventsseen,neventsused,messages,hbp,rv); + + /// Make as well a version for DDL occupancy, that'll be used by the shifter + SetupHisto(neventsseen,neventsused,messages,hddl,rv); - if ( rv == AliMUONVQAChecker::kInfo ) + + hddl.SetStats(kFALSE); + + return rv; +} + +//______________________________________________________________________________ +AliMUONVQAChecker::ECheckCode +AliMUONTrackerQAChecker::BeautifyReadoutHistograms(TH1& hrostatus, + TH1& hrostatusnorm, + const TH1& hbuspatchtokenerrors, + Int_t neventsseen, + Int_t neventsused, + const AliMUONRecoParam& recoParam) +{ + /// Normalize and put some text on the readout error histogram + /// Note in particular the treatment of tokenlost errors ! + + hrostatusnorm.Reset(); + + AliMUONVQAChecker::ECheckCode rv(AliMUONVQAChecker::kInfo); + + TObjArray messages; + messages.SetOwner(kTRUE); + + if ( neventsseen < NOTENOUGHEVENTLIMIT ) { - text->SetFillColor(3); // green = INFO + messages.Add(new TObjString(NOTENOUGHEVENTMESSAGE)); } - else if ( rv == AliMUONVQAChecker::kWarning ) + else { - text->SetFillColor(5); // yellow = WARNING + hrostatusnorm.Add(&hrostatus,100.0/neventsseen); + hrostatusnorm.SetOption("TEXT45"); // note : cannot use HIST option, otherwise the associated function (i.e. the tpavetext) is not drawn... + hrostatusnorm.SetMinimum(0.0); + hrostatusnorm.SetMaximum(100.0); + + Double_t tokenLost = hrostatusnorm.GetBinContent(hrostatusnorm.FindBin(1.0*AliMUONQAIndices::kTrackerRawNofTokenLostErrors)); + + if ( tokenLost > recoParam.TokenLostLimit() ) + { + rv = AliMUONVQAChecker::kError; + + messages.Add(new TObjString("There are some token lost errors !")); + messages.Add(new TObjString("PLEASE CHECK THE BUSY TIME FOR MUON !")); + messages.Add(new TObjString("If above 5 ms please have the MUON expert")); + messages.Add(new TObjString("check the following bus patches :")); + + for ( Int_t i = 1; i <= hbuspatchtokenerrors.GetNbinsX(); ++i ) + { + if ( hbuspatchtokenerrors.GetBinContent(i) > 0 ) + { + messages.Add(new TObjString(Form("BP %4d",i))); + } + } + } + + if ( hrostatusnorm.GetBinContent(hrostatusnorm.FindBin(AliMUONQAIndices::kTrackerRawNofEmptyEvents)) > 25.0 ) + { + messages.Add(new TObjString("Too many empty events !")); + messages.Add(new TObjString(NOTIFYEXPERTMESSAGE)); + rv = AliMUONVQAChecker::kFatal; + } } - else if ( rv == AliMUONVQAChecker::kFatal) + + SetupHisto(neventsseen,neventsused,messages,hrostatusnorm,rv,"text45"); + + ShowTrueValue(hrostatusnorm,AliMUONQAIndices::kTrackerRawNofTokenLostErrors); + ShowTrueValue(hrostatusnorm,AliMUONQAIndices::kTrackerRawNofParityErrors); + ShowTrueValue(hrostatusnorm,AliMUONQAIndices::kTrackerRawNofPaddingErrors); + ShowTrueValue(hrostatusnorm,AliMUONQAIndices::kTrackerRawNofGlitchErrors); + + return rv; +} + +//______________________________________________________________________________ +AliMUONVQAChecker::ECheckCode +AliMUONTrackerQAChecker::BeautifyEventsizeHistograms(TH1& heventsize, + TH1& heventsizeperevent, + Int_t neventsseen, + Int_t neventsused, + const AliMUONRecoParam& recoParam) +{ + /// Normalize and put some text on the event size histogram + + AliMUONVQAChecker::ECheckCode rv(AliMUONVQAChecker::kInfo); + + heventsizeperevent.Reset(); + + TObjArray messages; + messages.SetOwner(kTRUE); + + if ( neventsseen < NOTENOUGHEVENTLIMIT ) { - text->SetFillColor(2); // red = FATAL + messages.Add(new TObjString(NOTENOUGHEVENTMESSAGE)); } - else + else { - text->SetFillColor(6); // pink = ERROR + heventsizeperevent.Add(&heventsize,1.0/neventsseen/1024.0); + heventsizeperevent.SetMinimum(0); + + Double_t totalEventSizePerEvent = heventsizeperevent.Integral(); + + TString msg; + TString action; + + if ( totalEventSizePerEvent > recoParam.EventSizeHardLimit() ) + { + rv = AliMUONVQAChecker::kError; + msg = "That is really too high."; + action = NOTIFYEXPERTMESSAGE; + } + else if ( totalEventSizePerEvent > recoParam.EventSizeSoftLimit() ) + { + msg = "That is a bit high."; + action = "Please keep an eye on it."; + rv = AliMUONVQAChecker::kWarning; + } + else + { + rv = AliMUONVQAChecker::kInfo; + } + + messages.Add(new TObjString(Form(" %5.1f KB/event\n",totalEventSizePerEvent))); + if (msg.Length()>0) + { + messages.Add(new TObjString(msg)); + messages.Add(new TObjString(action)); + } } + SetupHisto(neventsseen,neventsused,messages,heventsizeperevent,rv); + return rv; } + +