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