X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONTriggerQAChecker.cxx;h=f802b0b7d4952b9c19e0ea18c15caa749c745fa1;hb=36c8e4e6653257a74461b21b2f00c23be60b337f;hp=0d54d6beb9c7cda2a3feec3d5399d7d80a1f6240;hpb=6482f70bfaf42aee1a420672dafa9cd7555ac410;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONTriggerQAChecker.cxx b/MUON/AliMUONTriggerQAChecker.cxx index 0d54d6beb9c..f802b0b7d49 100644 --- a/MUON/AliMUONTriggerQAChecker.cxx +++ b/MUON/AliMUONTriggerQAChecker.cxx @@ -68,15 +68,11 @@ AliMUONTriggerQAChecker::MarkHisto(TH1& histo, AliMUONVQAChecker::ECheckCode val //__________________________________________________________________ AliMUONVQAChecker::ECheckCode* -AliMUONTriggerQAChecker::CheckRaws(TObjArray** list, AliMUONRecoParam* ) +AliMUONTriggerQAChecker::CheckRaws(TObjArray** list, const AliMUONRecoParam* ) { /// Check raw data - AliMUONVQAChecker::ECheckCode * rv = new AliMUONVQAChecker::ECheckCode[AliRecoParam::kNSpecies] ; - - for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) { - rv[specie] = AliMUONVQAChecker::kInfo; - } + AliMUONVQAChecker::ECheckCode * rv = new AliMUONVQAChecker::ECheckCode[AliRecoParam::kNSpecies]; Int_t histoRawsPercentIndex[] = { AliMUONQAIndices::kTriggerErrorSummaryNorm, @@ -85,46 +81,76 @@ AliMUONTriggerQAChecker::CheckRaws(TObjArray** list, AliMUONRecoParam* ) }; const Int_t kNrawsHistos = sizeof(histoRawsPercentIndex)/sizeof(histoRawsPercentIndex[0]); - // MOVE THESE TO REFERENCE HISTOS -// START WITH THOSE COMMENTED OUT UNTIL WE GAIN CONFIDENCE... -// Float_t safeFactor = 5.; -// Float_t alarmPercentTrigAlgo[AliMUONTriggerQADataMakerRec::kNtrigAlgoErrorBins] = {safeFactor*1., safeFactor*1., safeFactor*1., 100., 100., 100., 100., safeFactor*1., safeFactor*1., safeFactor*1.}; -// Float_t alarmPercentCalib[AliMUONTriggerQADataMakerRec::kNtrigCalibSummaryBins] = {safeFactor*0.4, safeFactor*1., 6.2, 0.0001, safeFactor*0.4}; -// Float_t alarmPercentReadout[AliMUONTriggerQADataMakerRec::kNtrigStructErrorBins] = {safeFactor*1., safeFactor*1., safeFactor*1., safeFactor*1.}; -// -// Float_t* alarmPercent[kNrawsHistos] = {alarmPercentTrigAlgo, alarmPercentCalib, alarmPercentReadout}; -// END OF COWARD COMMENTING... - + // BEGIN OF LIMITS + // Fixme: Move me to reference histos + Float_t safeFactor = 5.; + Float_t alarmPercentTrigAlgo[AliMUONQAIndices::kNtrigAlgoErrorBins] = {safeFactor*1., safeFactor*1., safeFactor*1., 100., 100., 100., 100., safeFactor*1., safeFactor*1., safeFactor*1.}; + Float_t alarmPercentCalib[AliMUONQAIndices::kNtrigCalibSummaryBins] = {safeFactor*0.4, safeFactor*1., 6.2, 0.0001, safeFactor*0.4}; + Float_t alarmPercentReadout[AliMUONQAIndices::kNtrigStructErrorBins] = {safeFactor*1., safeFactor*1., safeFactor*1., safeFactor*1.}; + + Float_t* alarmPercent[kNrawsHistos] = {alarmPercentTrigAlgo, alarmPercentCalib, alarmPercentReadout}; + // END OF LIMTS + + TObjArray messages; + messages.SetOwner(kTRUE); + TH1* currHisto = 0x0; for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) { + rv[specie] = AliMUONVQAChecker::kInfo; + + TH1* hAnalyzedEvents = AliQAv1::GetData(list,AliMUONQAIndices::kTriggerRawNAnalyzedEvents,AliRecoParam::ConvertIndex(specie)); + Int_t nAnalyzedEvents = 0; + if ( hAnalyzedEvents ) + nAnalyzedEvents = TMath::Nint(hAnalyzedEvents->GetBinContent(1)); + +// if ( nAnalyzedEvents == 0 ) +// rv[specie] = AliMUONVQAChecker::kFatal; + for(Int_t ihisto = 0; ihistoSetBarWidth(0.5); - currHisto->SetBarOffset(0.25); - TPaveText* text = new TPaveText(0.65,0.65,0.99,0.99,"NDC"); - TString binName; - Bool_t isOk = kTRUE; - Int_t nbins = currHisto->GetXaxis()->GetNbins(); - for (Int_t ibin = 1; ibin<=nbins; ibin++){ - binName = currHisto->GetXaxis()->GetBinLabel(ibin); - binName.ReplaceAll("#splitline",""); - binName.ReplaceAll("{",""); - binName.ReplaceAll("}",""); - Float_t binContent = currHisto->GetBinContent(ibin); -// if (binContent > alarmPercent[ihisto][ibin-1]) isOk = kFALSE; - text->AddText(Form("%5.2f %% in %s", binContent, binName.Data())); - //text->AddText(Form("%5.2f %% in %s (limit %5.2f %%)", binContent, binName.Data(), alarmPercent[ihisto][ibin-1])); + if ( ! currHisto ) continue; + + Int_t nbins = currHisto->GetXaxis()->GetNbins(); + for (Int_t ibin = 1; ibin<=nbins; ibin++){ + Double_t binContent = currHisto->GetBinContent(ibin); + if ( binContent > alarmPercent[ihisto][ibin-1] ) + currRv = AliMUONVQAChecker::kWarning; + else if ( ibin == 4 && binContent > 50. ) { + messages.Add(new TObjString("Do not panic:")); + messages.Add(new TObjString("copy errors do not affect data")); + } + } // loop on bins + if ( currRv != AliMUONVQAChecker::kInfo ) { + switch ( histoRawsPercentIndex[ihisto] ) { + case AliMUONQAIndices::kTriggerErrorSummaryNorm: + case AliMUONQAIndices::kTriggerCalibSummaryNorm: + messages.Add(new TObjString("Trigger algo errors")); + break; + case AliMUONQAIndices::kTriggerReadOutErrorsNorm: + messages.Add(new TObjString("Readout errors")); + break; } - if ( ! isOk ) { - text->SetFillColor(kRed); - rv[specie] = MarkHisto(*currHisto, AliMUONVQAChecker::kError); + if ( currRv == AliMUONVQAChecker::kWarning ) + messages.Add(new TObjString("are a little bit high")); + else if ( currRv == AliMUONVQAChecker::kError || + currRv == AliMUONVQAChecker::kFatal ) + messages.Add(new TObjString("are too high")); + } + else { + switch ( histoRawsPercentIndex[ihisto] ) { + case AliMUONQAIndices::kTriggerErrorSummaryNorm: + case AliMUONQAIndices::kTriggerCalibSummaryNorm: + case AliMUONQAIndices::kTriggerReadOutErrorsNorm: + messages.Add(new TObjString("Values within limits")); + break; } - else text->SetFillColor(kGreen); - currHisto->GetListOfFunctions()->Add(text); - currHisto->SetStats(kFALSE); - currHisto->GetYaxis()->SetRangeUser(0., 110.); } + if ( MarkHisto(*currHisto, currRv) < rv[specie] ) + rv[specie] = currRv; + currHisto->GetYaxis()->SetRangeUser(0., 110.); + SetupHisto(nAnalyzedEvents, messages, *currHisto, currRv); } // loop on histos } // loop on species @@ -133,7 +159,7 @@ AliMUONTriggerQAChecker::CheckRaws(TObjArray** list, AliMUONRecoParam* ) //__________________________________________________________________ AliMUONVQAChecker::ECheckCode* -AliMUONTriggerQAChecker::CheckRecPoints(TObjArray** , AliMUONRecoParam* ) +AliMUONTriggerQAChecker::CheckRecPoints(TObjArray** , const AliMUONRecoParam* ) { /// Check rec points return 0x0; @@ -141,8 +167,67 @@ AliMUONTriggerQAChecker::CheckRecPoints(TObjArray** , AliMUONRecoParam* ) //__________________________________________________________________ AliMUONVQAChecker::ECheckCode* -AliMUONTriggerQAChecker::CheckESD(TObjArray** , AliMUONRecoParam* ) +AliMUONTriggerQAChecker::CheckESD(TObjArray** , const AliMUONRecoParam* ) { /// Check esd return 0x0; } + + +//___________________________________________________________________ +void AliMUONTriggerQAChecker::SetupHisto(Int_t nevents, const TObjArray& messages, TH1& histo, AliMUONVQAChecker::ECheckCode code) +{ + // + /// Add text to histos + // + + Double_t y1 = 0.97 - (messages.GetLast()+2)*0.075; + TPaveText* text = new TPaveText(0.5,y1,0.99,0.99,"NDC"); + + text->AddText(Form("MTR - Total events %i", nevents)); + + TIter next(&messages); + TObjString* str; + + while ( ( str = static_cast(next()) ) ){ + text->AddText(str->String()); + } + + if ( nevents == 0 ) + { + text->AddText("No event analyzed."); + } + + TString defaultText = ""; + + Int_t color = 0; + switch ( code ) { + case AliMUONVQAChecker::kInfo: + color = AliMUONVQAChecker::kInfoColor; + defaultText = "All is fine!"; + break; + case AliMUONVQAChecker::kWarning: + color = AliMUONVQAChecker::kWarningColor; + defaultText = "Please keep an eye on it!"; + break; + case AliMUONVQAChecker::kFatal: + color = AliMUONVQAChecker::kFatalColor; + defaultText = "This is bad: PLEASE CALL EXPERT!!!"; + break; + default: + color = AliMUONVQAChecker::kErrorColor; + defaultText = "PLEASE NOTIFY EXPERT! (NOT at night)"; + break; + } + + text->AddText(defaultText.Data()); + text->SetFillColor(color); + + histo.SetFillStyle(1001); + histo.SetFillColor(color); + + histo.SetStats(kFALSE); + + histo.GetListOfFunctions()->Clear(); + histo.GetListOfFunctions()->Add(text); +}