]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/AliITSQASDDChecker.cxx
Adding ruleckecher files into the distribbution
[u/mrichter/AliRoot.git] / ITS / AliITSQASDDChecker.cxx
CommitLineData
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>
8db5c9f9 28#include "TCanvas.h"
29#include "TPaveText.h"
30#include "TPad.h"
31//#include "TPaletteAxis.h"
5b716935 32// --- AliRoot header files ---
f09c0b42 33#include "AliITSQADataMakerRec.h"
5b716935 34#include "AliITSQASDDChecker.h"
c71529b0 35#include "AliLog.h"
3647765c 36#include "AliCDBEntry.h"
f09c0b42 37#include "AliCDBManager.h"
80b9610c 38#include "AliITSCalibrationSDD.h"
39#include "AliITSgeomTGeo.h"
8db5c9f9 40#include "AliQAManager.h"
41#include "AliQAv1.h"
42#include "AliQAChecker.h"
43#include "AliQACheckerBase.h"
f09c0b42 44
5b716935 45
3647765c 46ClassImp(AliITSQASDDChecker)
5b716935 47//__________________________________________________________________
48AliITSQASDDChecker& AliITSQASDDChecker::operator = (const AliITSQASDDChecker& qac )
49{
50 // Equal operator.
51 this->~AliITSQASDDChecker();
52 new(this) AliITSQASDDChecker(qac);
53 return *this;
54}
55
80b9610c 56AliITSQASDDChecker::~AliITSQASDDChecker()
57{
f09c0b42 58
59 //destructor
80b9610c 60 if(fStepBitSDD)
61 {
62 delete[] fStepBitSDD ;
63 fStepBitSDD = NULL;
64 }
65 if(fLowSDDValue)
66 {
67 delete[]fLowSDDValue;
68 fLowSDDValue=NULL;
69 }
70 if(fHighSDDValue)
71 {
72 delete[]fHighSDDValue;
73 fHighSDDValue=NULL;
74 }
75 if(fCalibration)
76 {
77 delete fCalibration;
78 fCalibration=NULL;
79 }
8db5c9f9 80 if(fImage)
81 {
82 delete []fImage;
83 fImage=NULL;
84 }
80b9610c 85} // dtor
86
5b716935 87//__________________________________________________________________
f09c0b42 88Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, const TObjArray * list, const AliDetectorRecoParam * /*recoparam*/)
89{
90 //check histograms of the different lists
80b9610c 91 AliInfo(Form("AliITSQASDDChecker called with offset: %d\n", fSubDetOffset) );
92
3647765c 93 AliDebug(1,Form("AliITSQASDDChecker called with offset: %d\n", fSubDetOffset));
3647765c 94
78fb0b3d 95 Double_t SDDQACheckerValue = 0.;
80b9610c 96 TH1 *hdata=NULL;
97 Double_t entries=0.;
98 Double_t entries2[2];
99 for(Int_t i=0;i<2;i++)entries2[i]=0.;
80118b05 100
101 if(!fCalibration){
102 AliCDBEntry *calibSDD = AliCDBManager::Instance()->Get("ITS/Calib/CalibSDD");
103 Bool_t cacheStatus = AliCDBManager::Instance()->GetCacheFlag();
104 if(!calibSDD)
105 {
106 AliError("Calibration object retrieval failed! SDD will not be processed");
107 fCalibration = NULL;
78fb0b3d 108 SDDQACheckerValue= fHighSDDValue[AliQAv1::kWARNING];
80118b05 109 }
d2f99642 110 else{
111 fCalibration = (TObjArray *)calibSDD->GetObject();
112
113 if(!cacheStatus)calibSDD->SetObject(NULL);
114 calibSDD->SetOwner(kTRUE);
115 if(!cacheStatus)
116 {
117 delete calibSDD;
118 }
119 }//end calibsdd
120 }//end f calibration
80118b05 121
78fb0b3d 122 AliInfo("Calib SDD Created\n ");
80118b05 123
78fb0b3d 124 TIter next(list);
78fb0b3d 125
6bf3d857 126 switch(index) {
127 case AliQAv1::kRAW:{
80b9610c 128 AliInfo(Form("Check on %s\n",AliQAv1::GetAliTaskName(index)));
6bf3d857 129// if(fRawModulePattern) { delete fRawModulePattern; fRawModulePattern = 0; }
130// if(fRawL3Pattern) { delete fRawL3Pattern; fRawL3Pattern = 0; }
131// if(fRawL4Pattern) { delete fRawL4Pattern; fRawL4Pattern = 0; }
132 if (list->GetEntries() == 0){SDDQACheckerValue += fHighSDDValue[AliQAv1::kFATAL]; break;}
133 TH1 *hmodule=NULL;
134 TH2 *hlayer[2];
d2f99642 135 hdata=NULL;
6bf3d857 136 Int_t emptymodules[2], filledmodules[2],emptyladders[2],filledladders[2];
137 for(Int_t i=0;i<2;i++){emptymodules[i]=0; filledmodules[i]=0; emptyladders[i]=0; filledladders[i]=0; }
138 for(Int_t i=0;i<2;i++)hlayer[i]=NULL;
78fb0b3d 139 while( (hdata = dynamic_cast<TH1* >(next())) ){
6bf3d857 140 if (hdata){TString hname=hdata->GetName();
78fb0b3d 141 if(hname.Contains("SDDchargeMap"))continue;
142 if(hname.Contains("SDDModPattern")){
6bf3d857 143 if(hname.Contains("NORM")) continue;
144 hmodule=(TH1*)hdata->Clone();
145 entries= hdata->GetEntries();
146 if(AliITSQADataMakerRec::AreEqual(entries,0.)){AliWarning(Form("===================>>>>>> No entries in %s \n",hname.Data()));SDDQACheckerValue += fStepBitSDD[AliQAv1::kFATAL];}//endif entries
147 else{int modmax=hdata->GetNbinsX();
148 Int_t empty=0;
149 Int_t filled=0;
150 Double_t content=0;
151 for(Int_t i=1;i<=modmax;i++){content=hdata->GetBinContent(i);if(AliITSQADataMakerRec::AreEqual(content,0.)) empty++; else filled++; }//end for
152 AliInfo(Form(" %s : empty modules %i \t filled modules %i",hname.Data(), empty, filled));}//end else pattern entries !=0
153 }
78fb0b3d 154 if(hname.Contains("_RelativeOccupancy")) {
6bf3d857 155 //fRawModulePattern = (TH1F *) hdata;
156 Float_t threshold = hdata->GetMean() + 4*hdata->GetRMS();
157 if(hname.Contains("L3")) AliInfo(Form("SDD check number 1: L3 mean: %f, rms: ,%f",hdata->GetMean(),hdata->GetRMS()));
158 if(hname.Contains("L4")) AliInfo(Form("SDD check number 2: L4 mean: %f, rms: ,%f",hdata->GetMean(),hdata->GetRMS()));
78fb0b3d 159 Int_t aboveThreshold = 0;
6bf3d857 160 for(Int_t k=0; k<= hdata->GetNbinsX(); k++) {if(hdata->GetBinLowEdge(k) > threshold) aboveThreshold += (int)(hdata->GetBinContent(k));}
6753619d 161 Float_t fractionAboveThreshold=0.;
162 if(hdata->GetEntries()>0.)fractionAboveThreshold=((Float_t) aboveThreshold)/hdata->GetEntries();
78fb0b3d 163 if(hname.Contains("L3")) AliInfo(Form("SDD check number 1, L3: Raw fractionAboveThreshold: %f",fractionAboveThreshold));
164 if(hname.Contains("L4")) AliInfo(Form("SDD check number 2, L4: Raw fractionAboveThreshold: %f",fractionAboveThreshold));
6bf3d857 165 if(fractionAboveThreshold > fThresholdForRelativeOccupancy) {SDDQACheckerValue=fHighSDDValue[AliQAv1::kWARNING];
78fb0b3d 166 if(hname.Contains("L3")) AliInfo(Form("SDD check number 1: Set Warning (L3 Raw)"));
6bf3d857 167 if(hname.Contains("L4")) AliInfo(Form("SDD check number 2: Set Warning (L4 Raw)")); } }
168 if(hname.Contains("SDDphizL3") || hname.Contains("SDDphizL4")){if(hname.Contains("NORM"))continue;
169 //if(hname.Contains("L3")) {fRawL3Pattern = (TH2F *) hdata;}
170 //if(hname.Contains("L4")) {fRawL4Pattern = (TH2F *) hdata;}
171 Int_t layer=0;
172 if(hname.Contains("3"))layer=0;
173 else if(hname.Contains("4"))layer=1;
174 entries2[layer]=hdata->GetEntries();
175 if(entries2[layer]==0){AliWarning(Form("===================>>>>>> No entries in %s \n",hname.Data()));
176 SDDQACheckerValue += fStepBitSDD[AliQAv1::kFATAL];}//end if getentries
177 else{
178 Int_t layer1=0;
179 if(hname.Contains("3"))layer1=0;
180 else if(hname.Contains("4"))layer1=1;
181 TH2* htemp=dynamic_cast<TH2*>(hdata);
d2f99642 182 if(htemp){
183 hlayer[layer1]=(TH2*)htemp->Clone();
184 hlayer[layer1]->SetName(Form("%s_copy",hname.Data()));
185 hlayer[layer1]->RebinX(2);
186 int modmay=hlayer[layer1]->GetNbinsY();
187 TH1D* hproj= hlayer[layer1]->ProjectionY();
188 Double_t ladcontent=0;
189 for(Int_t i=1;i<=modmay;i++) {//loop on the ladders
190 ladcontent=hproj->GetBinContent(i);
191 if(AliITSQADataMakerRec::AreEqual(ladcontent,0.)) emptyladders[layer1]++;
192 else filledladders[layer1]++;}//end for
193 AliInfo(Form(" %s : empty ladders %i \t filled ladders %i\n",hname.Data(), emptyladders[layer], filledladders[layer]));//end else layer 3
194 delete hproj;
195 hproj=NULL;
196 }//end if htemp
197 }//end else entries !=0
6bf3d857 198 }//end check on phiz
78fb0b3d 199 }//end if hdata
200 }//end while
201 if(AliITSQADataMakerRec::AreEqual(entries,0.)&&AliITSQADataMakerRec::AreEqual(entries2[0],0.)&&AliITSQADataMakerRec::AreEqual(entries2[1],0.)) break;
202 //else{
203 if(hmodule || (hlayer[0] && hlayer[1])){
204 Int_t excluded=0;
205 Int_t active=0;
206 Int_t exactive=0;//excluded but taking data
207 for(Int_t imod=0;imod<fgknSDDmodules;imod++){
208 Int_t lay=0;
209 Int_t lad=0;
210 Int_t det=0;
211 Int_t module=0;
212 module=imod+fgkmodoffset;
213 AliITSCalibrationSDD * cal=(AliITSCalibrationSDD*)fCalibration->At(imod);
d2f99642 214 if(cal==0) { continue;}
78fb0b3d 215 AliITSgeomTGeo::GetModuleId(module,lay,lad,det);
216 if (cal->IsBad()){
217 excluded++;
218 Double_t content=0.;
219 Double_t contentlayer[2];
220 for(Int_t i=0;i<2;i++)contentlayer[i]=0.;
221 if(hmodule)content=hmodule->GetBinContent(imod+1);//if expert bit is active the histogram has been created
f2fafc64 222 if(hlayer[lay-3]) contentlayer[lay-3]=hlayer[lay-3]->GetBinContent(det,lad);
78fb0b3d 223 if(AliITSQADataMakerRec::AreEqual(content,0.)== kFALSE || AliITSQADataMakerRec::AreEqual(contentlayer[lay-3],0.)==kFALSE) {
224 filledmodules[lay-3]++;
225 AliWarning(Form("The module %d (layer %i, ladder %i det %i ) excluded from the acquisition, took data \n ",module,lay,lad,det));
226 exactive++;
227 } else if(AliITSQADataMakerRec::AreEqual(content,0.) && AliITSQADataMakerRec::AreEqual(contentlayer[lay-3],0.))
228 emptymodules[lay-3]++;
229 } else {
230 Double_t contentgood=0.;
231 active++;
f2fafc64 232 if(hlayer[lay-3]) contentgood=hlayer[lay-3]->GetBinContent(det,lad);
78fb0b3d 233 if(AliITSQADataMakerRec::AreEqual(contentgood,0.))
234 emptymodules[lay-3]++;
235 else
236 filledmodules[lay-3]++;
237 }
238 }//end for
239 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
240 if(exactive==0){
241 AliInfo(Form("All the active modules (%i) are in acquisition. The number of excluded modules are %i \n",active,excluded));
242 SDDQACheckerValue=fHighSDDValue[AliQAv1::kINFO];
3647765c 243 }
78fb0b3d 244 if(exactive!=0){
245 AliWarning(Form("%i modules excluded from the acquisition took data. Active modules%i \n ",exactive,active));
246 SDDQACheckerValue=fHighSDDValue[AliQAv1::kWARNING];
247 }
248 if(excluded==exactive){
249 AliWarning(Form("All the modules excluded from the acquisition (%d) took data! Active modules %i\n",excluded,active));
250 SDDQACheckerValue=fHighSDDValue[AliQAv1::kWARNING];
251 }
252 if(active==0){
253 AliWarning(Form("No modules took data: excluded %i \t exactive %i \n", excluded, exactive));
254 SDDQACheckerValue=fHighSDDValue[AliQAv1::kFATAL];
255 }
6bf3d857 256
78fb0b3d 257 }//end else
6bf3d857 258 delete hmodule;
259 hmodule=NULL;
260 for(Int_t i=0;i<2;i++) {
261 delete hlayer[i];
262 hlayer[i]=NULL;
263 }
78fb0b3d 264
6bf3d857 265 }
266
80b9610c 267 break;
6bf3d857 268
269 case AliQAv1::kNULLTASK:{
270 AliInfo(Form("No Check on %s\n",AliQAv1::GetAliTaskName(index)));
271 SDDQACheckerValue=1.;
272 }
273 break;
274
275 case AliQAv1::kREC:
276 {
8db5c9f9 277 Int_t uidrec=list->GetUniqueID();
80b9610c 278 AliInfo(Form("Check on %s\n",AliQAv1::GetAliTaskName(index)));
8db5c9f9 279 if(uidrec==20){
280 //recpoints
281 if (list->GetEntries() == 0){ //check if the list is empty
282 //printf("SDDQACheckerValue = %f \t value %f\n",SDDQACheckerValue,fHighSDDValue[AliQAv1::kFATAL]);
283 SDDQACheckerValue=fHighSDDValue[AliQAv1::kFATAL];
284 break;
285 }//end if getentries
6bf3d857 286
8db5c9f9 287 while((hdata=dynamic_cast<TH1* >(next()))){
288 if (hdata){
289 TString hname=hdata->GetName();
290 if(hname.Contains("_RelativeOccupancy")) {
291 Float_t threshold = hdata->GetMean() + 4*hdata->GetRMS();
292 if(hname.Contains("L3")) AliInfo(Form("SDD check number 3: L3 mean: %f, rms: ,%f",hdata->GetMean(),hdata->GetRMS()));
293 if(hname.Contains("L4")) AliInfo(Form("SDD check number 4: L4 mean: %f, rms: ,%f",hdata->GetMean(),hdata->GetRMS()));
294 Int_t aboveThreshold = 0;
295 for(Int_t k=0; k<= ((Int_t)hdata->GetNbinsX()); k++) {
296 if(hdata->GetBinLowEdge(k) > threshold) aboveThreshold += (Int_t)(hdata->GetBinContent(k));
297 }
6753619d 298 Float_t fractionAboveThreshold=0.;
299 if(hdata->GetEntries()>0.) fractionAboveThreshold = ((Float_t) aboveThreshold)/hdata->GetEntries();
8db5c9f9 300 if(hname.Contains("L3")) AliInfo(Form("SDD check number 3, L3: RecPoints fractionAboveThreshold: %f",fractionAboveThreshold));
301 if(hname.Contains("L4")) AliInfo(Form("SDD check number 4, L4: RecPoints fractionAboveThreshold: %f",fractionAboveThreshold));
302 if(fractionAboveThreshold > fThresholdForRelativeOccupancy) {
303 SDDQACheckerValue=fHighSDDValue[AliQAv1::kWARNING];
304 if(hname.Contains("L3")) AliInfo(Form("SDD check number 3: Set Warning (L3 RecPoints)"));
305 if(hname.Contains("L4")) AliInfo(Form("SDD check number 4: Set Warning (L4 RecPoints)"));
306 }
78fb0b3d 307 }
8db5c9f9 308 if(hname.Contains("Rec2Raw") && !hname.Contains("2D")) {
309 //Float_t threshold = 0.;
310 if(hname.Contains("L3")) AliInfo(Form("SDD check number 5: L3 R2R mean: %f, rms: ,%f",((TH1F *) hdata)->GetMean(),((TH1F *) hdata)->GetRMS()));
311 if(hname.Contains("L4")) AliInfo(Form("SDD check number 6: L4 R2R mean: %f, rms: ,%f",((TH1F *) hdata)->GetMean(),((TH1F *) hdata)->GetRMS()));
312 Int_t belowThreshold = 0;
313 for(Int_t k=0; k<=((TH1F *)hdata)->GetNbinsX(); k++) {
314 if(((TH1F *) hdata)->GetBinLowEdge(k) < fThresholdForRecToRawRatio) belowThreshold += ((Int_t)((TH1F *) hdata)->GetBinContent(k));
315 }
316 Double_t fractionBelowThreshold =0.;
317 Double_t entries3=((TH1F *)hdata)->GetEntries();
318 if(entries3>0.001)fractionBelowThreshold = ((Double_t)(belowThreshold))/entries3;
319 else{ AliWarning(Form("No entries on %s. The check will retuns zero.\n",hdata->GetName() )); }
320 if(hname.Contains("L3")) AliInfo(Form("SDD check number 5, L3: RecPoints2Raws fractionBelowThreshold: %f",fractionBelowThreshold));
321 if(hname.Contains("L4")) AliInfo(Form("SDD check number 6, L4: RecPoints2Raws fractionBelowThreshold: %f",fractionBelowThreshold));
322 if(fractionBelowThreshold > fThresholdForRelativeOccupancy) {
323 SDDQACheckerValue=fHighSDDValue[AliQAv1::kWARNING];
324 if(hname.Contains("L3")) AliInfo(Form("SDD check number 5: Set Warning (L3 RecPoints2Raws)"));
325 if(hname.Contains("L4")) AliInfo(Form("SDD check number 6: Set Warning (L4 RecPoints2Raws)"));
326 }
78fb0b3d 327 }
8db5c9f9 328 if(hname.Contains("dedx")) {
329 if(hname.Contains("L3")) AliInfo(Form("SDD check number 7: L3 average charge: %f, rms: ,%f",hdata->GetMean(),hdata->GetRMS()));
330 if(hname.Contains("L4")) AliInfo(Form("SDD check number 8: L4 average charge: %f, rms: ,%f",hdata->GetMean(),hdata->GetRMS()));
78fb0b3d 331 }
332 }
8db5c9f9 333 }
6bf3d857 334
8db5c9f9 335 SDDQACheckerValue=1.;
336 }
337 else if(uidrec==40)
338 {
339 //digitsr
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("SDD DIGITS Module Pattern")) {
351 //see raws
352
353 SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];
354 } else if(hname.Contains("SDD Anode Distribution")) {
355 SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];
356 } else if(hname.Contains("SDD Tbin Distribution")) {
357 //to do as rp
358 SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];
359 } else if(hname.Contains("SDD ADC Counts Distribution")) {
360 SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];
361 }//end adc counts
362
363 }//end entries !=0
364 }//end hdata
365 }//end while
366 }//end else
367 SDDQACheckerValue=1.;
368 }
369
6bf3d857 370 }
371 break;
372 case AliQAv1::kANA:
373 {
80118b05 374 AliInfo(Form("===================> No Check on %s\n",AliQAv1::GetAliTaskName(index)));
78fb0b3d 375 SDDQACheckerValue=1.;
6bf3d857 376 }
377 break;
378 case AliQAv1::kESD:
379 {
80118b05 380 AliInfo(Form("==================> No Check on %s\n",AliQAv1::GetAliTaskName(index)));
78fb0b3d 381 SDDQACheckerValue=1.;
6bf3d857 382 }
383 break;
384 case AliQAv1::kNTASK:{
385 AliInfo(Form("==================> No Check on %s\n",AliQAv1::GetAliTaskName(index)));
386 SDDQACheckerValue=1.;
387 }
388 break;
389 case AliQAv1::kSIM:{
390 AliInfo(Form("Check on %s\n",AliQAv1::GetAliTaskName(index)));
391 Int_t uid=list->GetUniqueID();
392 if(uid==60) {
393 //digits
394 if (list->GetEntries() == 0){
395 SDDQACheckerValue=fHighSDDValue[AliQAv1::kFATAL];
396 break;
397 } else{
398
399 while( (hdata = dynamic_cast<TH1* >(next())) ){
400 if (hdata){
401 if(hdata->GetEntries()==0)SDDQACheckerValue += fStepBitSDD[AliQAv1::kFATAL];
402 else {
403 TString hname=hdata->GetName();
404 if(hname.Contains("SDDDIGITSModulePattern")) {
405 //see raws
406
407 SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];
408 } else if(hname.Contains("SDDAnodeDistribution")) {
409 SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];
410 } else if(hname.Contains("SDDTbinDistribution")) {
411 //to do as rp
412 SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];
413 } else if(hname.Contains("SDDADCCountsDistribution")) {
414 SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];
415 }//end adc counts
416
417 }//end entries !=0
418 }//end hdata
419 }//end while
420 }//end else
421 } else if(uid==50)
422 {
423 //hits
424 if (list->GetEntries() == 0){
425 SDDQACheckerValue=fHighSDDValue[AliQAv1::kFATAL];
426 break;
427 }
428 else{
429
430 while( (hdata = dynamic_cast<TH1* >(next())) ){
431 if (hdata){
432 if(hdata->GetEntries()==0)SDDQACheckerValue += fStepBitSDD[AliQAv1::kFATAL];
433 else {
434 TString hname=hdata->GetName();
435 if(hname.Contains("SDDHITSModulePattern")) {
436 //to do as raws
437 SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];
438 } else if(hname.Contains("SDDHITlenghtalonglocalYCoord")) {
439 SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];
440 } else if(hname.Contains("SDDHITlenghtalonglocalYCoordZoom")) {
441 SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];
442 } else if(hname.Contains("SDDDepositedEnergyDistribution")) {
443 SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];
444 }//end deposited energy
445
446 }//end entries !=0
447 }//end hdata
448 }//end while
449 }//end else
450 } else if(uid==70)
451 {
452 //sdigits
78fb0b3d 453 if (list->GetEntries() == 0){
454 SDDQACheckerValue=fHighSDDValue[AliQAv1::kFATAL];
6bf3d857 455 break;
78fb0b3d 456 } else{
6bf3d857 457
78fb0b3d 458 while( (hdata = dynamic_cast<TH1* >(next())) ){
459 if (hdata){
460 if(hdata->GetEntries()==0)SDDQACheckerValue += fStepBitSDD[AliQAv1::kFATAL];
461 else {
462 TString hname=hdata->GetName();
6bf3d857 463 if(hname.Contains("SDDSDIGITSModulePattern")) {
464 //to do as raws
78fb0b3d 465 SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];
466 } else if(hname.Contains("SDDAnodeDistribution")) {
467 SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];
468 } else if(hname.Contains("SDDTbinDistribution")) {
469 //to do as rp
470 SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];
471 } else if(hname.Contains("SDDADCCountsDistribution")) {
472 SDDQACheckerValue += fStepBitSDD[AliQAv1::kINFO];
6bf3d857 473 }//end adc counts bindistribution
78fb0b3d 474 }//end entries !=0
475 }//end hdata
476 }//end while
477 }//end else
6bf3d857 478 }//end sdigits
479 SDDQACheckerValue=1.;
480 }
481 break;
482
483 }//end switch
484
80118b05 485 fCalibration=NULL;
d2f99642 486 if(hdata) delete hdata;
6bf3d857 487
488
78fb0b3d 489 return SDDQACheckerValue;
5b716935 490}
6bf3d857 491
3647765c 492//__________________________________________________________________
80b9610c 493void AliITSQASDDChecker::SetTaskOffset(Int_t taskoffset)
494{
f09c0b42 495 //set the number of the histograms already present in the list before the SDD histograms
80b9610c 496 fSubDetOffset = taskoffset;
497}
498
499
500//__________________________________________________________________
f09c0b42 501void AliITSQASDDChecker::SetStepBit(const Double_t *steprange)
80b9610c 502{
f09c0b42 503 //set the values of the step bit for each QA bit range calculated in the AliITSQAChecker class
80b9610c 504 fStepBitSDD = new Double_t[AliQAv1::kNBIT];
505 for(Int_t bit=0;bit<AliQAv1::kNBIT;bit++)
506 {
507 fStepBitSDD[bit]=steprange[bit];
508 }
509}
510
511//__________________________________________________________________
f09c0b42 512void AliITSQASDDChecker::SetSDDLimits(const Float_t *lowvalue, const Float_t * highvalue)
3647765c 513{
f09c0b42 514 //set the low and high values in for each QA bit range calculated in the AliITSQAChecker class
80b9610c 515 fLowSDDValue = new Float_t[AliQAv1::kNBIT];
516 fHighSDDValue= new Float_t[AliQAv1::kNBIT];
517
518 for(Int_t bit=0;bit<AliQAv1::kNBIT;bit++)
519 {
520 fLowSDDValue[bit]=lowvalue[bit];
521 fHighSDDValue[bit]= highvalue[bit];
522 }
523
3647765c 524}
8db5c9f9 525//__________________________________________________________________
526Bool_t AliITSQASDDChecker::MakeSDDImage( TObjArray ** list, AliQAv1::TASKINDEX_t task, AliQAv1::MODE_t mode)
527{
528 Bool_t rval=kFALSE;
529 fImage=(TCanvas**)AliQAChecker::Instance()->GetDetQAChecker(0)->GetImage();
530 //create the image for raws and recpoints. In the other case, the default methodof CheckerBase class will be used
531 switch(task)
532 {
533 case AliQAv1::kRAWS:{
534 rval=MakeSDDRawsImage(list, task,mode);
535 }
536 break;
537 case AliQAv1::kRECPOINTS:{ rval=MakeSDDRecPointsImage(list, task,mode); }
538 break;
539 case AliQAv1::kHITS:; case AliQAv1::kESDS:; case AliQAv1::kDIGITS:;case AliQAv1::kDIGITSR:;case AliQAv1::kSDIGITS:;case AliQAv1::kTRACKSEGMENTS:;case AliQAv1::kRECPARTICLES:; default:
540 {
541 rval=kFALSE;
542 //AliQAChecker::Instance()->GetDetQAChecker(0)->MakeImage(list,task,mode);
543 }
544 break;
545 case AliQAv1::kNULLTASKINDEX:; case AliQAv1::kNTASKINDEX:
546 {AliWarning(Form("No histograms for this task ( %s ) \n", AliQAv1::GetTaskName(task).Data())); rval=kFALSE;}
547 break;
548 }
549return rval;
550}
551
552
553//_______________________________________________________________________
554Bool_t AliITSQASDDChecker::MakeSDDRawsImage(TObjArray ** list, AliQAv1::TASKINDEX_t task, AliQAv1::MODE_t mode )
555{
556
557 for (Int_t esIndex = 0 ; esIndex < AliRecoParam::kNSpecies ; esIndex++) {
558 //printf("-------------------------> %i \n", esIndex);
559 if (! AliQAv1::Instance(AliQAv1::GetDetIndex(GetName()))->IsEventSpecieSet(AliRecoParam::ConvertIndex(esIndex)) || list[esIndex]->GetEntries() == 0)
560 {//printf ("Nothing for %s \n", AliRecoParam::GetEventSpecieName(esIndex));
561 continue;
562 }
563 else{
564 const Char_t * title = Form("QA_%s_%s_%s", GetName(), AliQAv1::GetTaskName(task).Data(), AliRecoParam::GetEventSpecieName(esIndex)) ;
565 if ( !fImage[esIndex] ) {
566 fImage[esIndex] = new TCanvas(title, title,1280,980) ;
567 }
568
569 fImage[esIndex]->Clear() ;
570 fImage[esIndex]->SetTitle(title) ;
571 fImage[esIndex]->cd();
572
573 TPaveText someText(0.015, 0.015, 0.98, 0.98);
574 someText.AddText(title);
575 someText.Draw();
576 fImage[esIndex]->Print(Form("%s%s%d.%s", AliQAv1::GetImageFileName(), AliQAv1::GetModeName(mode), AliQAChecker::Instance()->GetRunNumber(), AliQAv1::GetImageFileFormat()), "ps") ;
577 fImage[esIndex]->Clear() ;
578 Int_t nx =2; //TMath::Nint(TMath::Sqrt(nImages));
579 Int_t ny =1; // nx ;
580 //if (nx < TMath::Sqrt(nImages))
581 //ny++ ;
582 fImage[esIndex]->Divide(nx, ny) ;
583 TIter nexthist(list[esIndex]) ;
584 TH1* hist = NULL ;
585 Int_t npad = 1 ;
586 fImage[esIndex]->cd(npad);
587 fImage[esIndex]->cd(npad)->SetBorderMode(0) ;
588 while ( (hist=static_cast<TH1*>(nexthist())) ) {
589 //gPad=fImage[esIndex]->cd(npad)->GetPad(npad);
590 TString cln(hist->ClassName()) ;
591 if ( ! cln.Contains("TH") )
592 continue ;
593
594 if(hist->TestBit(AliQAv1::GetImageBit())) {
595 hist->GetXaxis()->SetTitleSize(0.02);
596 hist->GetYaxis()->SetTitleSize(0.02);
597 hist->GetXaxis()->SetLabelSize(0.02);
598 hist->GetYaxis()->SetLabelSize(0.02);
599 if(cln.Contains("TH2"))
600 {
601 gPad->SetRightMargin(0.15);
602 gPad->SetLeftMargin(0.05);
603 hist->SetStats(0);
604 hist->SetOption("colz") ;
605 //hist->GetListOfFunctions()->FindObject("palette")->SetLabelSize(0.025);
606 //gPad->Update();
607 }
608 hist->DrawCopy() ;
609 fImage[esIndex]->cd(++npad) ;
610 fImage[esIndex]->cd(npad)->SetBorderMode(0) ;
611 }
612 }
613 fImage[esIndex]->Print(Form("%s%s%d.%s", AliQAv1::GetImageFileName(), AliQAv1::GetModeName(mode), AliQAChecker::Instance()->GetRunNumber(), AliQAv1::GetImageFileFormat()), "ps") ;
614 }
615 }
616 return kTRUE;
617}
618
619
620
621
622//_______________________________________________________________________
623Bool_t AliITSQASDDChecker::MakeSDDRecPointsImage(TObjArray ** list, AliQAv1::TASKINDEX_t task, AliQAv1::MODE_t mode )
624{
80b9610c 625
8db5c9f9 626 for (Int_t esIndex = 0 ; esIndex < AliRecoParam::kNSpecies ; esIndex++) {
627 if (! AliQAv1::Instance(AliQAv1::GetDetIndex(GetName()))->IsEventSpecieSet(AliRecoParam::ConvertIndex(esIndex)) || list[esIndex]->GetEntries() == 0)
628 {
629 //printf ("Nothing for %s \n", AliQAv1::GetTaskName(task).Data());
630 continue;
631 }
632 const Char_t * title = Form("QA_%s_%s_%s", GetName(), AliQAv1::GetTaskName(task).Data(), AliRecoParam::GetEventSpecieName(esIndex)) ;
633 if ( !fImage[esIndex] ) {
634 fImage[esIndex] = new TCanvas(title, title,1280,980) ;
635 }
636 fImage[esIndex]->Clear() ;
637 fImage[esIndex]->SetTitle(title) ;
638 fImage[esIndex]->cd();
639 fImage[esIndex]->SetBorderMode(0) ;
640 TPaveText someText(0.015, 0.015, 0.98, 0.98);
641 someText.AddText(title);
642 someText.Draw();
643 fImage[esIndex]->Print(Form("%s%s%d.%s", AliQAv1::GetImageFileName(), AliQAv1::GetModeName(mode), AliQAChecker::Instance()->GetRunNumber(), AliQAv1::GetImageFileFormat()), "ps") ;
644 fImage[esIndex]->Clear() ;
645 Int_t nx =2; //TMath::Nint(TMath::Sqrt(nImages));
646 Int_t ny =4; // nx ;
647 //if (nx < TMath::Sqrt(nImages))
648 //ny++ ;
649 fImage[esIndex]->Divide(nx, ny) ;
650 TIter nexthist(list[esIndex]) ;
651 TH1* hist = NULL ;
652 Int_t npad = 1 ;
653 fImage[esIndex]->cd(npad) ;
654 fImage[esIndex]->cd(npad)->SetBorderMode(0) ;
655 while ( (hist=static_cast<TH1*>(nexthist())) ) {
656 //gPad=fImage[esIndex]->cd(npad)->GetPad(npad);
657 TString cln(hist->ClassName()) ;
658 //printf("=====================> Class name %s \n",cln.Data());
659 if ( ! cln.Contains("TH") )
660 continue ;
661 if(hist->TestBit(AliQAv1::GetImageBit())) {
662 hist->GetXaxis()->SetTitleSize(0.02);
663 hist->GetYaxis()->SetTitleSize(0.02);
664 hist->GetXaxis()->SetLabelSize(0.02);
665 hist->GetYaxis()->SetLabelSize(0.02);
666 if(cln.Contains("TH1"))
667 {
668 hist->SetFillColor(kOrange+7);
669 //SetFrameFillColor(kAzure-9);
670 //hist->DrawCopy() ;
671 }
672 if(cln.Contains("TH2"))
673 {
674 gPad->SetRightMargin(0.15);
675 gPad->SetLeftMargin(0.05);
676 hist->SetStats(0);
677 hist->SetOption("colz") ;
678 // TPaletteAxis *paletta =(TPaletteAxis*)hist->GetListOfFunctions()->FindObject("palette");
679 //paletta->SetLabelSize(0.025);
680 //gPad->Update();
681 }
682 hist->DrawCopy();
683 fImage[esIndex]->cd(++npad) ;
684 fImage[esIndex]->cd(npad)->SetBorderMode(0) ;
685 }
686 }
687 fImage[esIndex]->Print(Form("%s%s%d.%s", AliQAv1::GetImageFileName(), AliQAv1::GetModeName(mode), AliQAChecker::Instance()->GetRunNumber(), AliQAv1::GetImageFileFormat()), "ps") ;
688 }
689 // }
690 return kTRUE;
691}