#ifndef ALITPCCALIBQACHECKER_H
#define ALITPCCALIBQACHECKER_H
#include <TNamed.h>
#include <TString.h>
#include <TH1.h>
class TTree;
class TIterator;
class TGraph;
class TObjArray;
class TVirtualPad;
class AliTPCCalibQAChecker : public TNamed {
public:
enum { kNQualityFlags=5 };
enum QualityFlag_t { kNULLFLAG=-1, kINFO, kWARNING, kERROR, kFATAL, kNFLAG };
enum AlarmType_t { kMean=0, kBinAny, kBinAll, kNentries};
AliTPCCalibQAChecker();
AliTPCCalibQAChecker(const char* name, const char *title);
virtual ~AliTPCCalibQAChecker();
void Process();
void SetTreeChecker(TTree* &tree) {fTreePtr=&tree;}
void SetHistChecker(TH1* &hist) {fHistPtr=&hist;}
void SetGraphChecker(TGraph* &graph) {fGraphPtr=&graph;}
void SetNumberChecker(Double_t & number) {fNumberPtr=&number;}
const AliTPCCalibQAChecker* GetSubChecker(const char* name, Bool_t recursive=kTRUE) const;
AliTPCCalibQAChecker* NextSubChecker();
Int_t GetNumberOfSubCheckers(Bool_t recursive=kTRUE) const;
Bool_t HasSubCheckers() const {return GetNumberOfSubCheckers(kFALSE)>0;}
void AddSubChecker(AliTPCCalibQAChecker *alarm);
void GetAlarmThreshold(Double_t &min, Double_t &max, QualityFlag_t quality=kERROR) const {min=fThresMin[quality]; max=fThresMax[quality];}
const char* GetDrawString() { return fStrDraw.Data(); }
const char* GetCutsString() { return fStrCuts.Data(); }
const char* GetDrawOptString() {return fStrDrawOpt.Data(); }
void SetDrawRepresentation(const char *draw, const char* drawOpt="") {fStrDrawRep=draw; fStrDrawRepOpt=drawOpt;}
void SetDrawAlarm(const char *draw, const char* drawOpt="") {fStrDraw=draw; fStrDrawOpt=drawOpt;}
void SetCutString(const char *cutString ) {fStrCuts=cutString;}
void SetAlarmThreshold(Double_t min, Double_t max, QualityFlag_t quality=kERROR);
void ResetAlarmThreshold(QualityFlag_t quality);
void ResetAlarmThresholds();
void SetQualityDescription(const char* text, QualityFlag_t quality=kERROR);
void SetAlarmType(AlarmType_t type) {fAlarmType=type;}
QualityFlag_t GetQuality() const {return fQualityLevel;}
Color_t GetQualityColor() const {return AliTPCCalibQAChecker::QualityColor(fQualityLevel);}
const char* GetQualityName() const {return AliTPCCalibQAChecker::QualityName(fQualityLevel);}
const char* GetQualityDescription() const { return QualityDescription(fQualityLevel);}
static const char* QualityName(AliTPCCalibQAChecker::QualityFlag_t quality);
static Color_t QualityColor(AliTPCCalibQAChecker::QualityFlag_t quality);
const char* QualityDescription(QualityFlag_t quality) const;
virtual void Draw(Option_t *option="");
virtual void Print(Option_t *option="") const;
private:
TTree **fTreePtr;
TH1 **fHistPtr;
TGraph **fGraphPtr;
Double_t *fNumberPtr;
TH1 *fHist;
TIterator *fIterSubCheckers;
TObjArray *fArrSubCheckers;
TObjArray *fArrAlarmDescriptions;
TString fStrDrawRep;
TString fStrDrawRepOpt;
TString fStrDraw;
TString fStrDrawOpt;
TString fStrCuts;
AlarmType_t fAlarmType;
QualityFlag_t fQualityLevel;
TObject* fHistRep;
Double_t fThresMin[kNQualityFlags];
Double_t fThresMax[kNQualityFlags];
void CreateRepresentationHist();
void ResetRepresentationHist() {if (fHistRep) {delete fHistRep; fHistRep=0x0;}}
void ProcessTree();
void ProcessHist();
void ProcessGraph();
void ProcessNumber();
void ProcessSub();
void ProcessEntries();
void ProcessMean();
void ProcessBin();
void CreateAlarmHist();
void ResetAlarmHist();
Int_t DrawInPad(TVirtualPad *pad, Int_t sub=1);
void DrawSubNodes(Option_t *option);
void DrawRepresentationHist(const Option_t *option);
void AddQualityLines(TH1 *hist);
AliTPCCalibQAChecker(const AliTPCCalibQAChecker &cfg);
AliTPCCalibQAChecker& operator = (const AliTPCCalibQAChecker &cfg);
QualityFlag_t GetQuality(Double_t value) const;
QualityFlag_t GetQuality(Int_t n, const Double_t *arr) const;
ClassDef(AliTPCCalibQAChecker,1);
};
inline AliTPCCalibQAChecker::QualityFlag_t AliTPCCalibQAChecker::GetQuality(Double_t value) const
{
QualityFlag_t quality=kINFO;
for (Int_t i=(Int_t)kINFO; i<kNQualityFlags; ++i){
if (fThresMin[i]>=fThresMax[i]) continue;
if (value<fThresMin[i]||value>fThresMax[i]) quality=(QualityFlag_t)i;
}
return quality;
}
inline AliTPCCalibQAChecker::QualityFlag_t AliTPCCalibQAChecker::GetQuality(Int_t n, const Double_t *arr) const
{
QualityFlag_t quality=kINFO;
for (Int_t i=(Int_t)kINFO; i<kNQualityFlags; ++i){
if (fThresMin[i]>=fThresMax[i]) continue;
for (Int_t ientry=0; ientry<n; ++ientry){
Double_t value=arr[ientry];
if (value<fThresMin[i]||value>fThresMax[i]) quality=(QualityFlag_t)i;
}
}
return quality;
}
#endif
AliTPCCalibQAChecker.h:10 AliTPCCalibQAChecker.h:11 AliTPCCalibQAChecker.h:12 AliTPCCalibQAChecker.h:13 AliTPCCalibQAChecker.h:14 AliTPCCalibQAChecker.h:15 AliTPCCalibQAChecker.h:16 AliTPCCalibQAChecker.h:17 AliTPCCalibQAChecker.h:18 AliTPCCalibQAChecker.h:19 AliTPCCalibQAChecker.h:20 AliTPCCalibQAChecker.h:21 AliTPCCalibQAChecker.h:22 AliTPCCalibQAChecker.h:23 AliTPCCalibQAChecker.h:24 AliTPCCalibQAChecker.h:25 AliTPCCalibQAChecker.h:26 AliTPCCalibQAChecker.h:27 AliTPCCalibQAChecker.h:28 AliTPCCalibQAChecker.h:29 AliTPCCalibQAChecker.h:30 AliTPCCalibQAChecker.h:31 AliTPCCalibQAChecker.h:32 AliTPCCalibQAChecker.h:33 AliTPCCalibQAChecker.h:34 AliTPCCalibQAChecker.h:35 AliTPCCalibQAChecker.h:36 AliTPCCalibQAChecker.h:37 AliTPCCalibQAChecker.h:38 AliTPCCalibQAChecker.h:39 AliTPCCalibQAChecker.h:40 AliTPCCalibQAChecker.h:41 AliTPCCalibQAChecker.h:42 AliTPCCalibQAChecker.h:43 AliTPCCalibQAChecker.h:44 AliTPCCalibQAChecker.h:45 AliTPCCalibQAChecker.h:46 AliTPCCalibQAChecker.h:47 AliTPCCalibQAChecker.h:48 AliTPCCalibQAChecker.h:49 AliTPCCalibQAChecker.h:50 AliTPCCalibQAChecker.h:51 AliTPCCalibQAChecker.h:52 AliTPCCalibQAChecker.h:53 AliTPCCalibQAChecker.h:54 AliTPCCalibQAChecker.h:55 AliTPCCalibQAChecker.h:56 AliTPCCalibQAChecker.h:57 AliTPCCalibQAChecker.h:58 AliTPCCalibQAChecker.h:59 AliTPCCalibQAChecker.h:60 AliTPCCalibQAChecker.h:61 AliTPCCalibQAChecker.h:62 AliTPCCalibQAChecker.h:63 AliTPCCalibQAChecker.h:64 AliTPCCalibQAChecker.h:65 AliTPCCalibQAChecker.h:66 AliTPCCalibQAChecker.h:67 AliTPCCalibQAChecker.h:68 AliTPCCalibQAChecker.h:69 AliTPCCalibQAChecker.h:70 AliTPCCalibQAChecker.h:71 AliTPCCalibQAChecker.h:72 AliTPCCalibQAChecker.h:73 AliTPCCalibQAChecker.h:74 AliTPCCalibQAChecker.h:75 AliTPCCalibQAChecker.h:76 AliTPCCalibQAChecker.h:77 AliTPCCalibQAChecker.h:78 AliTPCCalibQAChecker.h:79 AliTPCCalibQAChecker.h:80 AliTPCCalibQAChecker.h:81 AliTPCCalibQAChecker.h:82 AliTPCCalibQAChecker.h:83 AliTPCCalibQAChecker.h:84 AliTPCCalibQAChecker.h:85 AliTPCCalibQAChecker.h:86 AliTPCCalibQAChecker.h:87 AliTPCCalibQAChecker.h:88 AliTPCCalibQAChecker.h:89 AliTPCCalibQAChecker.h:90 AliTPCCalibQAChecker.h:91 AliTPCCalibQAChecker.h:92 AliTPCCalibQAChecker.h:93 AliTPCCalibQAChecker.h:94 AliTPCCalibQAChecker.h:95 AliTPCCalibQAChecker.h:96 AliTPCCalibQAChecker.h:97 AliTPCCalibQAChecker.h:98 AliTPCCalibQAChecker.h:99 AliTPCCalibQAChecker.h:100 AliTPCCalibQAChecker.h:101 AliTPCCalibQAChecker.h:102 AliTPCCalibQAChecker.h:103 AliTPCCalibQAChecker.h:104 AliTPCCalibQAChecker.h:105 AliTPCCalibQAChecker.h:106 AliTPCCalibQAChecker.h:107 AliTPCCalibQAChecker.h:108 AliTPCCalibQAChecker.h:109 AliTPCCalibQAChecker.h:110 AliTPCCalibQAChecker.h:111 AliTPCCalibQAChecker.h:112 AliTPCCalibQAChecker.h:113 AliTPCCalibQAChecker.h:114 AliTPCCalibQAChecker.h:115 AliTPCCalibQAChecker.h:116 AliTPCCalibQAChecker.h:117 AliTPCCalibQAChecker.h:118 AliTPCCalibQAChecker.h:119 AliTPCCalibQAChecker.h:120 AliTPCCalibQAChecker.h:121 AliTPCCalibQAChecker.h:122 AliTPCCalibQAChecker.h:123 AliTPCCalibQAChecker.h:124 AliTPCCalibQAChecker.h:125 AliTPCCalibQAChecker.h:126 AliTPCCalibQAChecker.h:127 AliTPCCalibQAChecker.h:128 AliTPCCalibQAChecker.h:129 AliTPCCalibQAChecker.h:130 AliTPCCalibQAChecker.h:131 AliTPCCalibQAChecker.h:132 AliTPCCalibQAChecker.h:133 AliTPCCalibQAChecker.h:134 AliTPCCalibQAChecker.h:135 AliTPCCalibQAChecker.h:136 AliTPCCalibQAChecker.h:137 AliTPCCalibQAChecker.h:138 AliTPCCalibQAChecker.h:139 AliTPCCalibQAChecker.h:140 AliTPCCalibQAChecker.h:141 AliTPCCalibQAChecker.h:142 AliTPCCalibQAChecker.h:143 AliTPCCalibQAChecker.h:144 AliTPCCalibQAChecker.h:145 AliTPCCalibQAChecker.h:146 AliTPCCalibQAChecker.h:147 AliTPCCalibQAChecker.h:148 AliTPCCalibQAChecker.h:149 AliTPCCalibQAChecker.h:150 AliTPCCalibQAChecker.h:151 AliTPCCalibQAChecker.h:152 AliTPCCalibQAChecker.h:153 AliTPCCalibQAChecker.h:154 AliTPCCalibQAChecker.h:155 AliTPCCalibQAChecker.h:156 AliTPCCalibQAChecker.h:157 AliTPCCalibQAChecker.h:158 AliTPCCalibQAChecker.h:159 AliTPCCalibQAChecker.h:160 AliTPCCalibQAChecker.h:161 AliTPCCalibQAChecker.h:162 AliTPCCalibQAChecker.h:163 AliTPCCalibQAChecker.h:164 AliTPCCalibQAChecker.h:165 AliTPCCalibQAChecker.h:166 AliTPCCalibQAChecker.h:167 AliTPCCalibQAChecker.h:168 AliTPCCalibQAChecker.h:169 AliTPCCalibQAChecker.h:170 AliTPCCalibQAChecker.h:171 AliTPCCalibQAChecker.h:172 AliTPCCalibQAChecker.h:173 AliTPCCalibQAChecker.h:174 AliTPCCalibQAChecker.h:175 AliTPCCalibQAChecker.h:176 AliTPCCalibQAChecker.h:177 AliTPCCalibQAChecker.h:178 AliTPCCalibQAChecker.h:179 AliTPCCalibQAChecker.h:180