24 #include <TObjArray.h> 26 #include <TObjString.h> 36 #include <TIterator.h> 41 #include <TStopwatch.h> 50 TNamed(
"AliTPCCalibQAChecker",
"AliTPCCalibQAChecker"),
56 fIterSubCheckers(0x0),
58 fArrAlarmDescriptions(0x0),
141 AliInfo(Form(
"Processing Time (%s): %fs",GetName(),s.RealTime()));
153 while ( (o=next()) ) {
157 if (subQuality>quality) quality=subQuality;
215 h->SetNameTitle(Form(
"h%s",GetName()),GetTitle());
230 Int_t
npoints=(*fGraphPtr)->GetN();
243 TH1* h=
new TH1F(Form(
"h%s",GetName()),GetTitle(),1,0,1);
244 h->GetXaxis()->SetBinLabel(1,
"Value");
250 TMarker *marker=(TMarker*)h->GetListOfFunctions()->FindObject(
"TMarker");
252 marker=
new TMarker(.5,0,20);
253 h->GetListOfFunctions()->Add(marker);
265 if (draw.IsNull())
return;
273 Int_t
res=(*fTreePtr)->Draw(draw.Data(),cuts.Data(),opt.Data());
284 Double_t value=h->GetMean();
297 for (Int_t iquality=(Int_t)
kINFO; iquality<
kNQualityFlags; ++iquality) nquality[iquality]=0;
301 Int_t nbinsX=h->GetNbinsX();
302 Int_t nbinsY=h->GetNbinsY();
303 Int_t nbinsZ=h->GetNbinsZ();
304 Int_t nbinsTotal=nbinsX*nbinsY*nbinsZ;
307 for (Int_t ibinZ=1;ibinZ<nbinsZ+1;++ibinZ){
308 for (Int_t ibinY=1;ibinY<nbinsY+1;++ibinY){
309 for (Int_t ibinX=1;ibinX<nbinsX+1;++ibinX){
310 Double_t value = (*fHistPtr)->GetBinContent(ibinX, ibinY, ibinZ);
339 draw.ReplaceAll(
"%alarm%",
fStrDraw.Data());
341 if (draw.IsNull())
return;
348 Int_t
res=(*fTreePtr)->Draw(draw.Data(),cuts.Data(),opt.Data());
349 TH1 *hist=(*fTreePtr)->GetHistogram();
351 AliError(Form(
"Could not create representation histogram of alarm '%s'",GetName()));
357 h->SetNameTitle(Form(
"h%s",GetName()),GetTitle());
367 if (draw.IsNull())
return;
375 Int_t
res=(*fTreePtr)->Draw(draw.Data(),cuts.Data(),opt.Data());
376 fHist=(*fTreePtr)->GetHistogram();
377 if (res<0 || !
fHist){
378 AliError(Form(
"Could not create alarm histogram of alarm '%s'",GetName()));
381 fHist->SetDirectory(0);
414 TString sOpt(option);
417 sOpt.ReplaceAll(
"+-",
" ");
421 while ( (o=next()) ) o->Print(sOpt.Data());
464 if (quality<kINFO||quality>
kFATAL)
return;
478 if (sname==GetName())
return this;
484 while ( (o=next()) ){
507 while ( (o=next()) ){
562 Color_t
info = kSpring-8;
563 Color_t warning = kOrange;
564 Color_t error = kRed;
565 Color_t fatal = kRed+2;
566 Color_t none = kWhite;
598 s.ReplaceAll(
"%min",min);
599 s.ReplaceAll(
"%max",max);
613 while ( (o=next()) ) {
631 if (!gPad)
new TCanvas;
632 TPad *mother=(TPad*)gPad;
636 Int_t nCols = (Int_t)TMath::Ceil( TMath::Sqrt(nPads) );
637 Int_t nRows = (Int_t)TMath::Ceil( (Double_t)nPads/(Double_t)nCols );
638 gPad->Divide(nCols,nRows);
644 while ( (pad=(TPad*)mother->GetPad(ipad)) ){
645 TFrame* frame=(TFrame*)pad->GetPrimitive(
"TFrame");
646 if (frame) frame->SetFillColor(kWhite);
647 else {
printf(
"no frame\n");}
660 if (!gPad)
new TCanvas;
661 Bool_t withBackColor=kTRUE;
666 if (opt.Contains(
"nobc")) withBackColor=kFALSE;
667 opt.ReplaceAll(
"nobc",
"");
672 opt.ReplaceAll(
"prof",
"");
688 Double_t xmin=hist->GetXaxis()->GetXmin();
689 Double_t xmax=hist->GetXaxis()->GetXmax();
697 TLine *lmin=
new TLine(xmin,min,xmax,min);
698 lmin->SetLineWidth(2);
700 TLine *lmax=
new TLine(xmin,max,xmax,max);
701 lmax->SetLineWidth(2);
703 hist->GetListOfFunctions()->Add(lmin);
704 hist->GetListOfFunctions()->Add(lmax);
706 hist->SetAxisRange(min,max,
"Y");
printf("Chi2/npoints = %f\n", TMath::Sqrt(chi2/npoints))
void DrawRepresentationHist(const Option_t *option)
void SetQualityDescription(const char *text, QualityFlag_t quality=kERROR)
void CreateRepresentationHist()
Int_t DrawInPad(TVirtualPad *pad, Int_t sub=1)
Double_t * fNumberPtr
Pointer to the graph pointer.
virtual ~AliTPCCalibQAChecker()
Int_t GetNumberOfSubCheckers(Bool_t recursive=kTRUE) const
Color_t GetQualityColor() const
TObjArray * fArrAlarmDescriptions
virtual void Print(Option_t *option="") const
const AliTPCCalibQAChecker * GetSubChecker(const char *name, Bool_t recursive=kTRUE) const
static const char * QualityName(AliTPCCalibQAChecker::QualityFlag_t quality)
const char * QualityDescription(QualityFlag_t quality) const
AliTPCCalibQAChecker * NextSubChecker()
TH1 ** fHistPtr
Pointer to the Tree pointer.
QualityFlag_t GetQuality() const
void ResetAlarmThresholds()
TH1 * fHist
Pointer to number.
Double_t fThresMax[kNQualityFlags]
TObjArray * fArrSubCheckers
iterator over sub checkers
void DrawSubNodes(Option_t *option)
QualityFlag_t fQualityLevel
void ResetRepresentationHist()
void SetAlarmThreshold(Double_t min, Double_t max, QualityFlag_t quality=kERROR)
TGraph ** fGraphPtr
Pointer to the hist pointer.
Double_t fThresMin[kNQualityFlags]
const char * GetQualityName() const
void AddSubChecker(AliTPCCalibQAChecker *alarm)
void ResetAlarmThreshold(QualityFlag_t quality)
void AddQualityLines(TH1 *hist)
#define AliError(message)
Bool_t HasSubCheckers() const
virtual void Draw(Option_t *option="")
static Color_t QualityColor(AliTPCCalibQAChecker::QualityFlag_t quality)
TIterator * fIterSubCheckers
Hist pointer for tree processing.