// 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 warningPercentTrigAlgo[AliMUONQAIndices::kNtrigAlgoErrorBins] = {static_cast<Float_t>(safeFactor*1.), static_cast<Float_t>(safeFactor*1.), static_cast<Float_t>(safeFactor*1.), 100., 100., 100., 100., static_cast<Float_t>(safeFactor*1.), static_cast<Float_t>(safeFactor*1.), static_cast<Float_t>(safeFactor*1.)};
+ Float_t warningPercentCalib[AliMUONQAIndices::kNtrigCalibSummaryBins] = {static_cast<Float_t>(safeFactor*0.4), static_cast<Float_t>(safeFactor*1.), 3.1, 0.0001, static_cast<Float_t>(safeFactor*0.4)};
+ Float_t warningPercentReadout[AliMUONQAIndices::kNtrigStructErrorBins] = {static_cast<Float_t>(safeFactor*1.), static_cast<Float_t>(safeFactor*1.), static_cast<Float_t>(safeFactor*1.), static_cast<Float_t>(safeFactor*1.)};
- Float_t* alarmPercent[kNrawsHistos] = {alarmPercentTrigAlgo, alarmPercentCalib, alarmPercentReadout};
+ Float_t* warningPercent[kNrawsHistos] = {warningPercentTrigAlgo, warningPercentCalib, warningPercentReadout};
+
+ Float_t errorFactor = 30.;
+ Float_t errorPercentTrigAlgo[AliMUONQAIndices::kNtrigAlgoErrorBins] = {static_cast<Float_t>(errorFactor*1.), static_cast<Float_t>(errorFactor*1.), static_cast<Float_t>(errorFactor*1.), 100., 100., 100., 100., static_cast<Float_t>(errorFactor*1.), static_cast<Float_t>(errorFactor*1.), static_cast<Float_t>(errorFactor*1.)};
+ Float_t errorPercentCalib[AliMUONQAIndices::kNtrigCalibSummaryBins] = {static_cast<Float_t>(errorFactor*0.4), static_cast<Float_t>(errorFactor*1.), 6.2, 3.*0.0001, static_cast<Float_t>(errorFactor*0.4)};
+ Float_t errorPercentReadout[AliMUONQAIndices::kNtrigStructErrorBins] = {static_cast<Float_t>(errorFactor*1.), static_cast<Float_t>(errorFactor*1.), static_cast<Float_t>(errorFactor*1.), static_cast<Float_t>(errorFactor*1.)};
// END OF LIMTS
+ Float_t* errorPercent[kNrawsHistos] = {errorPercentTrigAlgo, errorPercentCalib, errorPercentReadout};
+
TObjArray messages;
messages.SetOwner(kTRUE);
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;
+ //if ( nAnalyzedEvents == 0 ) rv[specie] = AliMUONVQAChecker::kFatal;
for(Int_t ihisto = 0; ihisto<kNrawsHistos; ihisto++){
+ Int_t nAnalyzedEvents = 0;
+ Int_t ibinNevents = ( histoRawsPercentIndex[ihisto] == AliMUONQAIndices::kTriggerReadOutErrorsNorm ) ? 1 : 2;
+ if ( hAnalyzedEvents ) nAnalyzedEvents = TMath::Nint(hAnalyzedEvents->GetBinContent(ibinNevents));
AliMUONVQAChecker::ECheckCode currRv = AliMUONVQAChecker::kInfo;
messages.Clear();
currHisto = AliQAv1::GetData(list,histoRawsPercentIndex[ihisto],AliRecoParam::ConvertIndex(specie));
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"));
- }
+ 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] ) {
currRv == AliMUONVQAChecker::kFatal )
messages.Add(new TObjString("are too high"));
}
- else {
+ else if ( nAnalyzedEvents != 0 ) {
switch ( histoRawsPercentIndex[ihisto] ) {
case AliMUONQAIndices::kTriggerErrorSummaryNorm:
case AliMUONQAIndices::kTriggerCalibSummaryNorm:
if ( MarkHisto(*currHisto, currRv) < rv[specie] )
rv[specie] = currRv;
currHisto->GetYaxis()->SetRangeUser(0., 110.);
- SetupHisto(nAnalyzedEvents, messages, *currHisto, currRv);
+ SetupHisto(nAnalyzedEvents, messages, *currHisto, currRv, specie);
} // loop on histos
} // loop on species
//___________________________________________________________________
-void AliMUONTriggerQAChecker::SetupHisto(Int_t nevents, const TObjArray& messages, TH1& histo, AliMUONVQAChecker::ECheckCode code)
+void AliMUONTriggerQAChecker::SetupHisto(Int_t nevents, const TObjArray& messages, TH1& histo, AliMUONVQAChecker::ECheckCode code, Int_t esIndex)
{
//
/// 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<TObjString*>(next()) ) ){
- text->AddText(str->String());
- }
-
- if ( nevents == 0 )
- {
- text->AddText("No event analyzed.");
- }
+ Double_t y1 = 0.87 - (messages.GetLast()+2)*0.075;
+ TPaveText* text = new TPaveText(0.25,y1,0.75,0.89,"NDC");
+
+ Int_t eventLimit = ( AliRecoParam::ConvertIndex(esIndex) == AliRecoParam::kCalib ) ? 5 : 20;
- TString defaultText = "";
+ text->AddText(Form("MTR - Specie: %s", AliRecoParam::GetEventSpecieName(esIndex)));
+ text->AddText(Form("Total events %i", nevents));
+ 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:
+
+ if ( nevents == 0 ) {
color = AliMUONVQAChecker::kFatalColor;
- defaultText = "This is bad: PLEASE CALL EXPERT!!!";
- break;
- default:
- color = AliMUONVQAChecker::kErrorColor;
- defaultText = "PLEASE NOTIFY EXPERT! (NOT at night)";
- break;
+ defaultText = "No events analyzed!";
+ }
+ else if ( nevents <= eventLimit ) {
+ color = AliMUONVQAChecker::kWarningColor;
+ text->AddText("Not enough events to judge");
+ defaultText = "Please wait for more statistics";
+ }
+ else {
+ TIter next(&messages);
+ TObjString* str;
+
+ while ( ( str = static_cast<TObjString*>(next()) ) ){
+ text->AddText(str->String());
+ }
+
+ 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());
histo.SetStats(kFALSE);
- histo.GetListOfFunctions()->Clear();
+ histo.GetListOfFunctions()->Delete();
histo.GetListOfFunctions()->Add(text);
}