X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONTriggerQAChecker.cxx;h=d23d23594d41400ff59bc23a4158c1437cfbab2d;hb=4ba89433b23ffcfccd41a0d7b7e21aa757645d79;hp=c9229455f5cc8631dc4d7402eb6bfc2cd22c27e2;hpb=486788fc5f619cefd44d4ba996a1ff2fce396168;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONTriggerQAChecker.cxx b/MUON/AliMUONTriggerQAChecker.cxx index c9229455f5c..d23d23594d4 100644 --- a/MUON/AliMUONTriggerQAChecker.cxx +++ b/MUON/AliMUONTriggerQAChecker.cxx @@ -72,11 +72,7 @@ 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,84 @@ AliMUONTriggerQAChecker::CheckRaws(TObjArray** list, const 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 warningPercentTrigAlgo[AliMUONQAIndices::kNtrigAlgoErrorBins] = {safeFactor*1., safeFactor*1., safeFactor*1., 100., 100., 100., 100., safeFactor*1., safeFactor*1., safeFactor*1.}; + Float_t warningPercentCalib[AliMUONQAIndices::kNtrigCalibSummaryBins] = {safeFactor*0.4, safeFactor*1., 6.2, 0.0001, safeFactor*0.4}; + Float_t warningPercentReadout[AliMUONQAIndices::kNtrigStructErrorBins] = {safeFactor*1., safeFactor*1., safeFactor*1., safeFactor*1.}; + + Float_t* warningPercent[kNrawsHistos] = {warningPercentTrigAlgo, warningPercentCalib, warningPercentReadout}; + + Float_t errorFactor = 30.; + Float_t errorPercentTrigAlgo[AliMUONQAIndices::kNtrigAlgoErrorBins] = {errorFactor*1., errorFactor*1., errorFactor*1., 100., 100., 100., 100., errorFactor*1., errorFactor*1., errorFactor*1.}; + Float_t errorPercentCalib[AliMUONQAIndices::kNtrigCalibSummaryBins] = {errorFactor*0.4, errorFactor*1., 3.*6.2, 3.*0.0001, errorFactor*0.4}; + Float_t errorPercentReadout[AliMUONQAIndices::kNtrigStructErrorBins] = {errorFactor*1., errorFactor*1., errorFactor*1., errorFactor*1.}; + // END OF LIMTS + + Float_t* errorPercent[kNrawsHistos] = {errorPercentTrigAlgo, errorPercentCalib, errorPercentReadout}; + 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 > errorPercent[ihisto][ibin-1] ) + currRv = AliMUONVQAChecker::kError; + else if ( binContent > warningPercent[ihisto][ibin-1] ) + currRv = AliMUONVQAChecker::kWarning; + else if ( ibin == 4 && binContent > 50. && AliRecoParam::ConvertIndex(specie) == AliRecoParam::kCalib) { + 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 if ( nAnalyzedEvents != 0 ) { + 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 @@ -146,3 +180,68 @@ 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.87 - (messages.GetLast()+2)*0.075; + TPaveText* text = new TPaveText(0.25,y1,0.75,0.89,"NDC"); + + text->AddText(Form("MTR - Total events %i", nevents)); + + TIter next(&messages); + TObjString* str; + + while ( ( str = static_cast(next()) ) ){ + text->AddText(str->String()); + } + + TString defaultText = ""; + Int_t color = 0; + + if ( nevents == 0 ) { + color = AliMUONVQAChecker::kFatalColor; + defaultText = "No events analyzed!"; + } + else if ( nevents <= 20 ) { + color = AliMUONVQAChecker::kWarningColor; + text->AddText("Not enough events to judge"); + text->AddText("Please wait for more statistics"); + } + else { + 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 = "PLEASE CALL MUON TRIGGER EXPERT!!!"; + break; + default: + color = AliMUONVQAChecker::kErrorColor; + defaultText = "PLEASE CALL MUON TRIGGER EXPERT!"; + break; + } + } + + text->AddText(defaultText.Data()); + text->SetFillColor(color); + + histo.SetFillStyle(1001); + histo.SetFillColor(color); + + histo.SetStats(kFALSE); + + histo.GetListOfFunctions()->Delete(); + histo.GetListOfFunctions()->Add(text); +}