]>
Commit | Line | Data |
---|---|---|
5b716935 | 1 | /************************************************************************** |
2 | * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | ||
16 | /* $Id$ */ | |
17 | ||
18 | // ***************************************** | |
19 | // Checks the quality assurance | |
20 | // by comparing with reference data | |
21 | // P. Cerello Apr 2008 | |
22 | // INFN Torino | |
23 | ||
24 | // --- ROOT system --- | |
3647765c | 25 | #include "TH1.h" |
80b9610c | 26 | #include <TH1D.h> |
27 | #include <TH2.h> | |
5b716935 | 28 | // --- AliRoot header files --- |
f09c0b42 | 29 | #include "AliITSQADataMakerRec.h" |
5b716935 | 30 | #include "AliITSQASDDChecker.h" |
c71529b0 | 31 | #include "AliLog.h" |
3647765c | 32 | #include "AliCDBEntry.h" |
f09c0b42 | 33 | #include "AliCDBManager.h" |
80b9610c | 34 | #include "AliITSCalibrationSDD.h" |
35 | #include "AliITSgeomTGeo.h" | |
f09c0b42 | 36 | |
5b716935 | 37 | |
3647765c | 38 | ClassImp(AliITSQASDDChecker) |
5b716935 | 39 | //__________________________________________________________________ |
40 | AliITSQASDDChecker& AliITSQASDDChecker::operator = (const AliITSQASDDChecker& qac ) | |
41 | { | |
42 | // Equal operator. | |
43 | this->~AliITSQASDDChecker(); | |
44 | new(this) AliITSQASDDChecker(qac); | |
45 | return *this; | |
46 | } | |
47 | ||
80b9610c | 48 | AliITSQASDDChecker::~AliITSQASDDChecker() |
49 | { | |
f09c0b42 | 50 | |
51 | //destructor | |
80b9610c | 52 | if(fStepBitSDD) |
53 | { | |
54 | delete[] fStepBitSDD ; | |
55 | fStepBitSDD = NULL; | |
56 | } | |
57 | if(fLowSDDValue) | |
58 | { | |
59 | delete[]fLowSDDValue; | |
60 | fLowSDDValue=NULL; | |
61 | } | |
62 | if(fHighSDDValue) | |
63 | { | |
64 | delete[]fHighSDDValue; | |
65 | fHighSDDValue=NULL; | |
66 | } | |
67 | if(fCalibration) | |
68 | { | |
69 | delete fCalibration; | |
70 | fCalibration=NULL; | |
71 | } | |
72 | } // dtor | |
73 | ||
5b716935 | 74 | //__________________________________________________________________ |
f09c0b42 | 75 | Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, const TObjArray * list, const AliDetectorRecoParam * /*recoparam*/) |
76 | { | |
77 | //check histograms of the different lists | |
80b9610c | 78 | AliInfo(Form("AliITSQASDDChecker called with offset: %d\n", fSubDetOffset) ); |
79 | ||
3647765c | 80 | AliDebug(1,Form("AliITSQASDDChecker called with offset: %d\n", fSubDetOffset)); |
3647765c | 81 | |
78fb0b3d | 82 | Double_t SDDQACheckerValue = 0.; |
80b9610c | 83 | TH1 *hdata=NULL; |
84 | Double_t entries=0.; | |
85 | Double_t entries2[2]; | |
86 | for(Int_t i=0;i<2;i++)entries2[i]=0.; | |
80118b05 | 87 | |
88 | if(!fCalibration){ | |
89 | AliCDBEntry *calibSDD = AliCDBManager::Instance()->Get("ITS/Calib/CalibSDD"); | |
90 | Bool_t cacheStatus = AliCDBManager::Instance()->GetCacheFlag(); | |
91 | if(!calibSDD) | |
92 | { | |
93 | AliError("Calibration object retrieval failed! SDD will not be processed"); | |
94 | fCalibration = NULL; | |
78fb0b3d | 95 | SDDQACheckerValue= fHighSDDValue[AliQAv1::kWARNING]; |
80118b05 | 96 | } |
97 | fCalibration = (TObjArray *)calibSDD->GetObject(); | |
98 | ||
99 | if(!cacheStatus)calibSDD->SetObject(NULL); | |
100 | calibSDD->SetOwner(kTRUE); | |
101 | if(!cacheStatus) | |
102 | { | |
103 | delete calibSDD; | |
104 | } | |
105 | } | |
106 | ||
78fb0b3d | 107 | AliInfo("Calib SDD Created\n "); |
80118b05 | 108 | |
78fb0b3d | 109 | TIter next(list); |
78fb0b3d | 110 | |
6bf3d857 | 111 | switch(index) { |
112 | case AliQAv1::kRAW:{ | |
80b9610c | 113 | AliInfo(Form("Check on %s\n",AliQAv1::GetAliTaskName(index))); |
6bf3d857 | 114 | // if(fRawModulePattern) { delete fRawModulePattern; fRawModulePattern = 0; } |
115 | // if(fRawL3Pattern) { delete fRawL3Pattern; fRawL3Pattern = 0; } | |
116 | // if(fRawL4Pattern) { delete fRawL4Pattern; fRawL4Pattern = 0; } | |
117 | if (list->GetEntries() == 0){SDDQACheckerValue += fHighSDDValue[AliQAv1::kFATAL]; break;} | |
118 | TH1 *hmodule=NULL; | |
119 | TH2 *hlayer[2]; | |
120 | Int_t emptymodules[2], filledmodules[2],emptyladders[2],filledladders[2]; | |
121 | for(Int_t i=0;i<2;i++){emptymodules[i]=0; filledmodules[i]=0; emptyladders[i]=0; filledladders[i]=0; } | |
122 | for(Int_t i=0;i<2;i++)hlayer[i]=NULL; | |
78fb0b3d | 123 | while( (hdata = dynamic_cast<TH1* >(next())) ){ |
6bf3d857 | 124 | if (hdata){TString hname=hdata->GetName(); |
78fb0b3d | 125 | if(hname.Contains("SDDchargeMap"))continue; |
126 | if(hname.Contains("SDDModPattern")){ | |
6bf3d857 | 127 | if(hname.Contains("NORM")) continue; |
128 | hmodule=(TH1*)hdata->Clone(); | |
129 | entries= hdata->GetEntries(); | |
130 | if(AliITSQADataMakerRec::AreEqual(entries,0.)){AliWarning(Form("===================>>>>>> No entries in %s \n",hname.Data()));SDDQACheckerValue += fStepBitSDD[AliQAv1::kFATAL];}//endif entries | |
131 | else{int modmax=hdata->GetNbinsX(); | |
132 | Int_t empty=0; | |
133 | Int_t filled=0; | |
134 | Double_t content=0; | |
135 | for(Int_t i=1;i<=modmax;i++){content=hdata->GetBinContent(i);if(AliITSQADataMakerRec::AreEqual(content,0.)) empty++; else filled++; }//end for | |
136 | AliInfo(Form(" %s : empty modules %i \t filled modules %i",hname.Data(), empty, filled));}//end else pattern entries !=0 | |
137 | } | |
78fb0b3d | 138 | if(hname.Contains("_RelativeOccupancy")) { |
6bf3d857 | 139 | //fRawModulePattern = (TH1F *) hdata; |
140 | Float_t threshold = hdata->GetMean() + 4*hdata->GetRMS(); | |
141 | if(hname.Contains("L3")) AliInfo(Form("SDD check number 1: L3 mean: %f, rms: ,%f",hdata->GetMean(),hdata->GetRMS())); | |
142 | if(hname.Contains("L4")) AliInfo(Form("SDD check number 2: L4 mean: %f, rms: ,%f",hdata->GetMean(),hdata->GetRMS())); | |
78fb0b3d | 143 | Int_t aboveThreshold = 0; |
6bf3d857 | 144 | for(Int_t k=0; k<= hdata->GetNbinsX(); k++) {if(hdata->GetBinLowEdge(k) > threshold) aboveThreshold += (int)(hdata->GetBinContent(k));} |
145 | Float_t fractionAboveThreshold = ((Float_t) aboveThreshold)/hdata->GetEntries(); | |
78fb0b3d | 146 | if(hname.Contains("L3")) AliInfo(Form("SDD check number 1, L3: Raw fractionAboveThreshold: %f",fractionAboveThreshold)); |
147 | if(hname.Contains("L4")) AliInfo(Form("SDD check number 2, L4: Raw fractionAboveThreshold: %f",fractionAboveThreshold)); | |
6bf3d857 | 148 | if(fractionAboveThreshold > fThresholdForRelativeOccupancy) {SDDQACheckerValue=fHighSDDValue[AliQAv1::kWARNING]; |
78fb0b3d | 149 | if(hname.Contains("L3")) AliInfo(Form("SDD check number 1: Set Warning (L3 Raw)")); |
6bf3d857 | 150 | if(hname.Contains("L4")) AliInfo(Form("SDD check number 2: Set Warning (L4 Raw)")); } } |
151 | if(hname.Contains("SDDphizL3") || hname.Contains("SDDphizL4")){if(hname.Contains("NORM"))continue; | |
152 | //if(hname.Contains("L3")) {fRawL3Pattern = (TH2F *) hdata;} | |
153 | //if(hname.Contains("L4")) {fRawL4Pattern = (TH2F *) hdata;} | |
154 | Int_t layer=0; | |
155 | if(hname.Contains("3"))layer=0; | |
156 | else if(hname.Contains("4"))layer=1; | |
157 | entries2[layer]=hdata->GetEntries(); | |
158 | if(entries2[layer]==0){AliWarning(Form("===================>>>>>> No entries in %s \n",hname.Data())); | |
159 | SDDQACheckerValue += fStepBitSDD[AliQAv1::kFATAL];}//end if getentries | |
160 | else{ | |
161 | Int_t layer1=0; | |
162 | if(hname.Contains("3"))layer1=0; | |
163 | else if(hname.Contains("4"))layer1=1; | |
164 | TH2* htemp=dynamic_cast<TH2*>(hdata); | |
165 | hlayer[layer1]=(TH2*)htemp->Clone(); | |
166 | char newname[50]; | |
167 | sprintf(newname,"%s_copy",hname.Data()); | |
168 | hlayer[layer1]->SetName(newname); | |
169 | hlayer[layer1]->RebinX(2); | |
170 | int modmay=hlayer[layer1]->GetNbinsY(); | |
171 | TH1D* hproj= hlayer[layer1]->ProjectionY(); | |
172 | Double_t ladcontent=0; | |
173 | for(Int_t i=1;i<=modmay;i++) {//loop on the ladders | |
174 | ladcontent=hproj->GetBinContent(i); | |
175 | if(AliITSQADataMakerRec::AreEqual(ladcontent,0.)) emptyladders[layer1]++; | |
176 | else filledladders[layer1]++;}//end for | |
177 | AliInfo(Form(" %s : empty ladders %i \t filled ladders %i\n",hname.Data(), emptyladders[layer], filledladders[layer]));//end else layer 3 | |
178 | delete hproj; | |
179 | hproj=NULL;}//end else entries !=0 | |
180 | }//end check on phiz | |
78fb0b3d | 181 | }//end if hdata |
182 | }//end while | |
183 | if(AliITSQADataMakerRec::AreEqual(entries,0.)&&AliITSQADataMakerRec::AreEqual(entries2[0],0.)&&AliITSQADataMakerRec::AreEqual(entries2[1],0.)) break; | |
184 | //else{ | |
185 | if(hmodule || (hlayer[0] && hlayer[1])){ | |
186 | Int_t excluded=0; | |
187 | Int_t active=0; | |
188 | Int_t exactive=0;//excluded but taking data | |
189 | for(Int_t imod=0;imod<fgknSDDmodules;imod++){ | |
190 | Int_t lay=0; | |
191 | Int_t lad=0; | |
192 | Int_t det=0; | |
193 | Int_t module=0; | |
194 | module=imod+fgkmodoffset; | |
195 | AliITSCalibrationSDD * cal=(AliITSCalibrationSDD*)fCalibration->At(imod); | |
196 | if(cal==0) { delete cal; continue;} | |
197 | AliITSgeomTGeo::GetModuleId(module,lay,lad,det); | |
198 | if (cal->IsBad()){ | |
199 | excluded++; | |
200 | Double_t content=0.; | |
201 | Double_t contentlayer[2]; | |
202 | for(Int_t i=0;i<2;i++)contentlayer[i]=0.; | |
203 | if(hmodule)content=hmodule->GetBinContent(imod+1);//if expert bit is active the histogram has been created | |
f2fafc64 | 204 | if(hlayer[lay-3]) contentlayer[lay-3]=hlayer[lay-3]->GetBinContent(det,lad); |
78fb0b3d | 205 | if(AliITSQADataMakerRec::AreEqual(content,0.)== kFALSE || AliITSQADataMakerRec::AreEqual(contentlayer[lay-3],0.)==kFALSE) { |
206 | filledmodules[lay-3]++; | |
207 | AliWarning(Form("The module %d (layer %i, ladder %i det %i ) excluded from the acquisition, took data \n ",module,lay,lad,det)); | |
208 | exactive++; | |
209 | } else if(AliITSQADataMakerRec::AreEqual(content,0.) && AliITSQADataMakerRec::AreEqual(contentlayer[lay-3],0.)) | |
210 | emptymodules[lay-3]++; | |
211 | } else { | |
212 | Double_t contentgood=0.; | |
213 | active++; | |
f2fafc64 | 214 | if(hlayer[lay-3]) contentgood=hlayer[lay-3]->GetBinContent(det,lad); |
78fb0b3d | 215 | if(AliITSQADataMakerRec::AreEqual(contentgood,0.)) |
216 | emptymodules[lay-3]++; | |
217 | else | |
218 | filledmodules[lay-3]++; | |
219 | } | |
220 | }//end for | |
221 | for(Int_t i=0;i<2;i++){AliInfo(Form("Layer %i \tempty modules %i \t filled modules %i\n", i+3,emptymodules[i], filledmodules[i]));}//end else layers | |
222 | if(exactive==0){ | |
223 | AliInfo(Form("All the active modules (%i) are in acquisition. The number of excluded modules are %i \n",active,excluded)); | |
224 | SDDQACheckerValue=fHighSDDValue[AliQAv1::kINFO]; | |
3647765c | 225 | } |
78fb0b3d | 226 | if(exactive!=0){ |
227 | AliWarning(Form("%i modules excluded from the acquisition took data. Active modules%i \n ",exactive,active)); | |
228 | SDDQACheckerValue=fHighSDDValue[AliQAv1::kWARNING]; | |
229 | } | |
230 | if(excluded==exactive){ | |
231 | AliWarning(Form("All the modules excluded from the acquisition (%d) took data! Active modules %i\n",excluded,active)); | |
232 | SDDQACheckerValue=fHighSDDValue[AliQAv1::kWARNING]; | |
233 | } | |
234 | if(active==0){ | |
235 | AliWarning(Form("No modules took data: excluded %i \t exactive %i \n", excluded, exactive)); | |
236 | SDDQACheckerValue=fHighSDDValue[AliQAv1::kFATAL]; | |
237 | } | |
6bf3d857 | 238 | |
78fb0b3d | 239 | }//end else |
6bf3d857 | 240 | delete hmodule; |
241 | hmodule=NULL; | |
242 | for(Int_t i=0;i<2;i++) { | |
243 | delete hlayer[i]; | |
244 | hlayer[i]=NULL; | |
245 | } | |
78fb0b3d | 246 | |
6bf3d857 | 247 | } |
248 | ||
80b9610c | 249 | break; |
6bf3d857 | 250 | |
251 | case AliQAv1::kNULLTASK:{ | |
252 | AliInfo(Form("No Check on %s\n",AliQAv1::GetAliTaskName(index))); | |
253 | SDDQACheckerValue=1.; | |
254 | } | |
255 | break; | |
256 | ||
257 | case AliQAv1::kREC: | |
258 | { | |
259 | ||
80b9610c | 260 | AliInfo(Form("Check on %s\n",AliQAv1::GetAliTaskName(index))); |
6bf3d857 | 261 | |
78fb0b3d | 262 | if (list->GetEntries() == 0){ //check if the list is empty |
263 | //printf("SDDQACheckerValue = %f \t value %f\n",SDDQACheckerValue,fHighSDDValue[AliQAv1::kFATAL]); | |
6bf3d857 | 264 | SDDQACheckerValue=fHighSDDValue[AliQAv1::kFATAL]; |
265 | break; | |
78fb0b3d | 266 | }//end if getentries |
6bf3d857 | 267 | |
78fb0b3d | 268 | while((hdata=dynamic_cast<TH1* >(next()))){ |
269 | if (hdata){ | |
270 | TString hname=hdata->GetName(); | |
271 | if(hname.Contains("_RelativeOccupancy")) { | |
6bf3d857 | 272 | Float_t threshold = hdata->GetMean() + 4*hdata->GetRMS(); |
273 | if(hname.Contains("L3")) AliInfo(Form("SDD check number 3: L3 mean: %f, rms: ,%f",hdata->GetMean(),hdata->GetRMS())); | |
274 | if(hname.Contains("L4")) AliInfo(Form("SDD check number 4: L4 mean: %f, rms: ,%f",hdata->GetMean(),hdata->GetRMS())); | |
78fb0b3d | 275 | Int_t aboveThreshold = 0; |
6bf3d857 | 276 | for(Int_t k=0; k<= ((Int_t)hdata->GetNbinsX()); k++) { |
277 | if(hdata->GetBinLowEdge(k) > threshold) aboveThreshold += (Int_t)(hdata->GetBinContent(k)); | |
78fb0b3d | 278 | } |
6bf3d857 | 279 | Float_t fractionAboveThreshold = ((Float_t) aboveThreshold)/hdata->GetEntries(); |
78fb0b3d | 280 | if(hname.Contains("L3")) AliInfo(Form("SDD check number 3, L3: RecPoints fractionAboveThreshold: %f",fractionAboveThreshold)); |
281 | if(hname.Contains("L4")) AliInfo(Form("SDD check number 4, L4: RecPoints fractionAboveThreshold: %f",fractionAboveThreshold)); | |
282 | if(fractionAboveThreshold > fThresholdForRelativeOccupancy) { | |
283 | SDDQACheckerValue=fHighSDDValue[AliQAv1::kWARNING]; | |
284 | if(hname.Contains("L3")) AliInfo(Form("SDD check number 3: Set Warning (L3 RecPoints)")); | |
285 | if(hname.Contains("L4")) AliInfo(Form("SDD check number 4: Set Warning (L4 RecPoints)")); | |
286 | } | |
287 | } | |
288 | if(hname.Contains("Rec2Raw") && !hname.Contains("2D")) { | |
289 | //Float_t threshold = 0.; | |
290 | if(hname.Contains("L3")) AliInfo(Form("SDD check number 5: L3 R2R mean: %f, rms: ,%f",((TH1F *) hdata)->GetMean(),((TH1F *) hdata)->GetRMS())); | |
291 | if(hname.Contains("L4")) AliInfo(Form("SDD check number 6: L4 R2R mean: %f, rms: ,%f",((TH1F *) hdata)->GetMean(),((TH1F *) hdata)->GetRMS())); | |
292 | Int_t belowThreshold = 0; | |
293 | for(Int_t k=0; k<=((TH1F *)hdata)->GetNbinsX(); k++) { | |
294 | if(((TH1F *) hdata)->GetBinLowEdge(k) < fThresholdForRecToRawRatio) belowThreshold += ((Int_t)((TH1F *) hdata)->GetBinContent(k)); | |
295 | } | |
296 | Double_t fractionBelowThreshold =0.; | |
cdf5ef76 | 297 | Double_t entries3=((TH1F *)hdata)->GetEntries(); |
6bf3d857 | 298 | if(entries3>0.001)fractionBelowThreshold = ((Double_t)(belowThreshold))/entries3; |
78fb0b3d | 299 | else{ AliWarning(Form("No entries on %s. The check will retuns zero.\n",hdata->GetName() )); } |
300 | if(hname.Contains("L3")) AliInfo(Form("SDD check number 5, L3: RecPoints2Raws fractionBelowThreshold: %f",fractionBelowThreshold)); | |
301 | if(hname.Contains("L4")) AliInfo(Form("SDD check number 6, L4: RecPoints2Raws fractionBelowThreshold: %f",fractionBelowThreshold)); | |
302 | if(fractionBelowThreshold > fThresholdForRelativeOccupancy) { | |
303 | SDDQACheckerValue=fHighSDDValue[AliQAv1::kWARNING]; | |
304 | if(hname.Contains("L3")) AliInfo(Form("SDD check number 5: Set Warning (L3 RecPoints2Raws)")); | |
305 | if(hname.Contains("L4")) AliInfo(Form("SDD check number 6: Set Warning (L4 RecPoints2Raws)")); | |
306 | } | |
307 | } | |
308 | if(hname.Contains("dedx")) { | |
309 | if(hname.Contains("L3")) AliInfo(Form("SDD check number 7: L3 average charge: %f, rms: ,%f",hdata->GetMean(),hdata->GetRMS())); | |
310 | if(hname.Contains("L4")) AliInfo(Form("SDD check number 8: L4 average charge: %f, rms: ,%f",hdata->GetMean(),hdata->GetRMS())); | |
311 | } | |
312 | } | |
313 | } | |
6bf3d857 | 314 | |
78fb0b3d | 315 | SDDQACheckerValue=1.; |
6bf3d857 | 316 | } |
317 | break; | |
318 | case AliQAv1::kANA: | |
319 | { | |
80118b05 | 320 | AliInfo(Form("===================> No Check on %s\n",AliQAv1::GetAliTaskName(index))); |
78fb0b3d | 321 | SDDQACheckerValue=1.; |
6bf3d857 | 322 | } |
323 | break; | |
324 | case AliQAv1::kESD: | |
325 | { | |
80118b05 | 326 | AliInfo(Form("==================> No Check on %s\n",AliQAv1::GetAliTaskName(index))); |
78fb0b3d | 327 | SDDQACheckerValue=1.; |
6bf3d857 | 328 | } |
329 | break; | |
330 | case AliQAv1::kNTASK:{ | |
331 | AliInfo(Form("==================> No Check on %s\n",AliQAv1::GetAliTaskName(index))); | |
332 | SDDQACheckerValue=1.; | |
333 | } | |
334 | break; | |
335 | case AliQAv1::kSIM:{ | |
336 | AliInfo(Form("Check on %s\n",AliQAv1::GetAliTaskName(index))); | |
337 | Int_t uid=list->GetUniqueID(); | |
338 | if(uid==60) { | |
339 | //digits | |
340 | if (list->GetEntries() == 0){ | |
341 | SDDQACheckerValue=fHighSDDValue[AliQAv1::kFATAL]; | |
342 | break; | |
343 | } else{ | |
344 | ||
345 | while( (hdata = dynamic_cast<TH1* >(next())) ){ | |
346 | if (hdata){ | |
347 | if(hdata->GetEntries()==0)SDDQACheckerValue += fStepBitSDD[AliQAv1::kFATAL]; | |
348 | else { | |
349 | TString hname=hdata->GetName(); | |
350 | if(hname.Contains("SDDDIGITSModulePattern")) { | |
351 | //see raws | |
352 | ||
353 | SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO]; | |
354 | } else if(hname.Contains("SDDAnodeDistribution")) { | |
355 | SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO]; | |
356 | } else if(hname.Contains("SDDTbinDistribution")) { | |
357 | //to do as rp | |
358 | SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO]; | |
359 | } else if(hname.Contains("SDDADCCountsDistribution")) { | |
360 | SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO]; | |
361 | }//end adc counts | |
362 | ||
363 | }//end entries !=0 | |
364 | }//end hdata | |
365 | }//end while | |
366 | }//end else | |
367 | } else if(uid==50) | |
368 | { | |
369 | //hits | |
370 | if (list->GetEntries() == 0){ | |
371 | SDDQACheckerValue=fHighSDDValue[AliQAv1::kFATAL]; | |
372 | break; | |
373 | } | |
374 | else{ | |
375 | ||
376 | while( (hdata = dynamic_cast<TH1* >(next())) ){ | |
377 | if (hdata){ | |
378 | if(hdata->GetEntries()==0)SDDQACheckerValue += fStepBitSDD[AliQAv1::kFATAL]; | |
379 | else { | |
380 | TString hname=hdata->GetName(); | |
381 | if(hname.Contains("SDDHITSModulePattern")) { | |
382 | //to do as raws | |
383 | SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO]; | |
384 | } else if(hname.Contains("SDDHITlenghtalonglocalYCoord")) { | |
385 | SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO]; | |
386 | } else if(hname.Contains("SDDHITlenghtalonglocalYCoordZoom")) { | |
387 | SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO]; | |
388 | } else if(hname.Contains("SDDDepositedEnergyDistribution")) { | |
389 | SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO]; | |
390 | }//end deposited energy | |
391 | ||
392 | }//end entries !=0 | |
393 | }//end hdata | |
394 | }//end while | |
395 | }//end else | |
396 | } else if(uid==70) | |
397 | { | |
398 | //sdigits | |
78fb0b3d | 399 | if (list->GetEntries() == 0){ |
400 | SDDQACheckerValue=fHighSDDValue[AliQAv1::kFATAL]; | |
6bf3d857 | 401 | break; |
78fb0b3d | 402 | } else{ |
6bf3d857 | 403 | |
78fb0b3d | 404 | while( (hdata = dynamic_cast<TH1* >(next())) ){ |
405 | if (hdata){ | |
406 | if(hdata->GetEntries()==0)SDDQACheckerValue += fStepBitSDD[AliQAv1::kFATAL]; | |
407 | else { | |
408 | TString hname=hdata->GetName(); | |
6bf3d857 | 409 | if(hname.Contains("SDDSDIGITSModulePattern")) { |
410 | //to do as raws | |
78fb0b3d | 411 | SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO]; |
412 | } else if(hname.Contains("SDDAnodeDistribution")) { | |
413 | SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO]; | |
414 | } else if(hname.Contains("SDDTbinDistribution")) { | |
415 | //to do as rp | |
416 | SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO]; | |
417 | } else if(hname.Contains("SDDADCCountsDistribution")) { | |
418 | SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO]; | |
6bf3d857 | 419 | }//end adc counts bindistribution |
78fb0b3d | 420 | }//end entries !=0 |
421 | }//end hdata | |
422 | }//end while | |
423 | }//end else | |
6bf3d857 | 424 | }//end sdigits |
425 | SDDQACheckerValue=1.; | |
426 | } | |
427 | break; | |
428 | ||
429 | }//end switch | |
430 | ||
80118b05 | 431 | fCalibration=NULL; |
80b9610c | 432 | delete hdata; |
6bf3d857 | 433 | |
434 | ||
78fb0b3d | 435 | return SDDQACheckerValue; |
5b716935 | 436 | } |
6bf3d857 | 437 | |
3647765c | 438 | //__________________________________________________________________ |
80b9610c | 439 | void AliITSQASDDChecker::SetTaskOffset(Int_t taskoffset) |
440 | { | |
f09c0b42 | 441 | //set the number of the histograms already present in the list before the SDD histograms |
80b9610c | 442 | fSubDetOffset = taskoffset; |
443 | } | |
444 | ||
445 | ||
446 | //__________________________________________________________________ | |
f09c0b42 | 447 | void AliITSQASDDChecker::SetStepBit(const Double_t *steprange) |
80b9610c | 448 | { |
f09c0b42 | 449 | //set the values of the step bit for each QA bit range calculated in the AliITSQAChecker class |
80b9610c | 450 | fStepBitSDD = new Double_t[AliQAv1::kNBIT]; |
451 | for(Int_t bit=0;bit<AliQAv1::kNBIT;bit++) | |
452 | { | |
453 | fStepBitSDD[bit]=steprange[bit]; | |
454 | } | |
455 | } | |
456 | ||
457 | //__________________________________________________________________ | |
f09c0b42 | 458 | void AliITSQASDDChecker::SetSDDLimits(const Float_t *lowvalue, const Float_t * highvalue) |
3647765c | 459 | { |
f09c0b42 | 460 | //set the low and high values in for each QA bit range calculated in the AliITSQAChecker class |
80b9610c | 461 | fLowSDDValue = new Float_t[AliQAv1::kNBIT]; |
462 | fHighSDDValue= new Float_t[AliQAv1::kNBIT]; | |
463 | ||
464 | for(Int_t bit=0;bit<AliQAv1::kNBIT;bit++) | |
465 | { | |
466 | fLowSDDValue[bit]=lowvalue[bit]; | |
467 | fHighSDDValue[bit]= highvalue[bit]; | |
468 | } | |
469 | ||
3647765c | 470 | } |
80b9610c | 471 |