]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/AliITSQASDDChecker.cxx
SDD macros to check OCDB quantities updated to manage the new files with correction...
[u/mrichter/AliRoot.git] / ITS / AliITSQASDDChecker.cxx
CommitLineData
3647765c 1
5b716935 2/**************************************************************************
3 * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
4 * *
5 * Author: The ALICE Off-line Project. *
6 * Contributors are mentioned in the code where appropriate. *
7 * *
8 * Permission to use, copy, modify and distribute this software and its *
9 * documentation strictly for non-commercial purposes is hereby granted *
10 * without fee, provided that the above copyright notice appears in all *
11 * copies and that both the copyright notice and this permission notice *
12 * appear in the supporting documentation. The authors make no claims *
13 * about the suitability of this software for any purpose. It is *
14 * provided "as is" without express or implied warranty. *
15 **************************************************************************/
16
17/* $Id$ */
18
19// *****************************************
20// Checks the quality assurance
21// by comparing with reference data
22// P. Cerello Apr 2008
23// INFN Torino
24
25// --- ROOT system ---
3647765c 26#include "TH1.h"
27#include <TCanvas.h>
80b9610c 28#include <TH1D.h>
29#include <TH2.h>
30#include <TF1.h>
31
32
5b716935 33
34// --- AliRoot header files ---
35#include "AliITSQASDDChecker.h"
c71529b0 36#include "AliLog.h"
3647765c 37#include "AliCDBEntry.h"
fc7e0df2 38#include "AliQAManager.h"
3647765c 39#include "AliQACheckerBase.h"
40#include "TSystem.h"
80b9610c 41#include "AliITSCalibrationSDD.h"
42#include "AliITSgeomTGeo.h"
5b716935 43
3647765c 44ClassImp(AliITSQASDDChecker)
5b716935 45//__________________________________________________________________
46AliITSQASDDChecker& AliITSQASDDChecker::operator = (const AliITSQASDDChecker& qac )
47{
48 // Equal operator.
49 this->~AliITSQASDDChecker();
50 new(this) AliITSQASDDChecker(qac);
51 return *this;
52}
53
80b9610c 54AliITSQASDDChecker::~AliITSQASDDChecker()
55{
56 if(fStepBitSDD)
57 {
58 delete[] fStepBitSDD ;
59 fStepBitSDD = NULL;
60 }
61 if(fLowSDDValue)
62 {
63 delete[]fLowSDDValue;
64 fLowSDDValue=NULL;
65 }
66 if(fHighSDDValue)
67 {
68 delete[]fHighSDDValue;
69 fHighSDDValue=NULL;
70 }
71 if(fCalibration)
72 {
73 delete fCalibration;
74 fCalibration=NULL;
75 }
76} // dtor
77
5b716935 78//__________________________________________________________________
486788fc 79Double_t AliITSQASDDChecker::Check(AliQAv1::ALITASK_t index, TObjArray * list, const AliDetectorRecoParam * /*recoparam*/)
c71529b0 80{
80b9610c 81 AliInfo(Form("AliITSQASDDChecker called with offset: %d\n", fSubDetOffset) );
82
3647765c 83 AliDebug(1,Form("AliITSQASDDChecker called with offset: %d\n", fSubDetOffset));
3647765c 84
80b9610c 85 Double_t test = 0.;
86 TH1 *hdata=NULL;
87 Double_t entries=0.;
88 Double_t entries2[2];
89 for(Int_t i=0;i<2;i++)entries2[i]=0.;
90 switch(index)
91 {
3647765c 92
80b9610c 93 case AliQAv1::kRAW:
94 AliInfo(Form("Check on %s\n",AliQAv1::GetAliTaskName(index)));
95 if(!fCalibration){
96 AliCDBEntry *calibSDD = AliCDBManager::Instance()->Get("ITS/Calib/CalibSDD");
97 Bool_t cacheStatus = AliCDBManager::Instance()->GetCacheFlag();
98 if(!calibSDD)
99 {
100 AliError("Calibration object retrieval failed! SDD will not be processed");
101 fCalibration = NULL;
102 test= fHighSDDValue[AliQAv1::kWARNING];
103 }
104 fCalibration = (TObjArray *)calibSDD->GetObject();
105
106 if(!cacheStatus)calibSDD->SetObject(NULL);
107 calibSDD->SetOwner(kTRUE);
108 if(!cacheStatus)
109 {
110 delete calibSDD;
111 }
5b716935 112 }
80b9610c 113 AliInfo("Calib SDD Created\n ");
114
115 if (list->GetEntries() == 0.){ //check if the list is empty
116 //printf("test = %f \t value %f\n",test,fHighSDDValue[AliQAv1::kFATAL]);
117 test=test+fHighSDDValue[AliQAv1::kFATAL];
118 break;
119 }//end if getentries
120 else{
121 TIter next(list);
122 Int_t offset = 0;
123 for(offset =0;offset < fSubDetOffset; offset++){hdata = dynamic_cast<TH1*>(next());}//end for
124 Int_t emptymodules[2];
125 Int_t filledmodules[2];
126 Int_t emptyladders[2];
127 Int_t filledladders[2];
128 for(Int_t i=0;i<2;i++){
129 emptymodules[i]=0;
130 filledmodules[i]=0;
131 emptyladders[i]=0;
132 filledladders[i]=0;
3647765c 133 }
80b9610c 134 TH1 *hmodule=NULL;
135 TH2 *hlayer[2];
136 for(Int_t i=0;i<2;i++)hlayer[i]=NULL;
137 while( hdata = dynamic_cast<TH1* >(next()) ){
138 if (hdata){
139 TString hname=hdata->GetName();
140 if(hname.Contains("SDDchargeMap"))continue;
141 if(hname.Contains("SDDModPattern")){
142 hmodule=hdata;
143 entries= hdata->GetEntries();
144 if(entries==0){
145 AliWarning(Form("===================>>>>>> No entries in %s \n",hname.Data()));
146 //printf("test = %f \t value %f\n",test,fHighSDDValue[AliQAv1::kFATAL]);
147 test=test+fStepBitSDD[AliQAv1::kFATAL];
148 }//endif entries
149 else{
150 int modmax=hdata->GetNbinsX();
151 Int_t empty=0;
152 Int_t filled=0;
153 Double_t content=0;
154 for(Int_t i=1;i<=modmax;i++){
155 content=hdata->GetBinContent(i);
156 if(content==0.){empty++;}
157 else if(content!=0.){filled++;}
158 }//end for
159 AliInfo(Form(" %s : empty modules %i \t filled modules %i",hname.Data(), empty, filled));
160 }//end else pattern entries !=0
161 }//end if modpattern
162 else if(hname.Contains("SDDphizL3")||hname.Contains("SDDphizL4")){
163 Int_t layer=0;
164 if(hname.Contains("3"))layer=0;
165 else if(hname.Contains("4"))layer=1;
166 entries2[layer]=hdata->GetEntries();
167 if(entries2[layer]==0){
168 AliWarning(Form("===================>>>>>> No entries in %s \n",hname.Data()));
169 //printf("test = %f \t value %f\n",test,fStepBitSDD[AliQAv1::kFATAL]);
170 test=test+fStepBitSDD[AliQAv1::kFATAL];
171 if(entries==0){
172 //return test;
173 //break;
174 }
175 }//end if getentries
176 else{
177 Int_t layer=0;
178 if(hname.Contains("3"))layer=0;
179 else if(hname.Contains("4"))layer=1;
180 hlayer[layer]=dynamic_cast<TH2*>(hdata);
181 hlayer[layer]->RebinX(2);
182 int modmay=hlayer[layer]->GetNbinsY();
183 TH1D* hproj= hlayer[layer]->ProjectionY();
184 Double_t ladcontent=0;
185 for(Int_t i=1;i<=modmay;i++) {//loop on the ladders
186 ladcontent=hproj->GetBinContent(i);
187 if(ladcontent==0){emptyladders[layer]++;}
188 else if(ladcontent!=0){filledladders[layer]++;}
189 }//end for
190 AliInfo(Form(" %s : empty ladders %i \t filled ladders %i\n",hname.Data(), emptyladders[layer], filledladders[layer]));//end else layer 3
191 delete hproj;
192 hproj=NULL;
193 }//end else entries !=0
194 }//end if layer 3
195 }//end if hdata
196 }//end while
197 if(entries==0.&&entries2[0]==0.&&entries2[1]==0.) break;
3647765c 198 else{
80b9610c 199 if(hmodule||(hlayer[0]&&hlayer[1])){
200 Int_t excluded=0;
201 Int_t active=0;
202 Int_t exactive=0;//excluded but taking data
203 //AliITSCalibrationSDD *cal;
204 for(Int_t imod=0;imod<fgknSDDmodules;imod++){
205 Int_t lay=0;
206 Int_t lad=0;
207 Int_t det=0;
208 Int_t module=0;
209 module=imod+fgkmodoffset;
210 AliITSCalibrationSDD * cal=(AliITSCalibrationSDD*)fCalibration->At(imod);
211 if(cal==0) { delete cal; continue;}
212 AliITSgeomTGeo::GetModuleId(module,lay,lad,det);
213 if (cal->IsBad()){
214 excluded++;
215 Double_t content=0.;
216 Double_t contentlayer[2];
217 for(Int_t i=0;i<2;i++)contentlayer[i]=0.;
218 if(hmodule)content=hmodule->GetBinContent(imod+1);//if expert bit is active the histogram has been created
219 contentlayer[lay-3]=hlayer[lay-3]->GetBinContent(det,lad);
220 if(content!=0.||contentlayer[lay-3]!=0.)
221 {
222 filledmodules[lay-3]++;
223 AliWarning(Form("The module %d (layer %i, ladder %i det %i ) excluded from the acquisition, took data \n ",module,lay,lad,det));
224 exactive++;
225 }
226 else if(content==0.&&contentlayer[lay-3]==0.)emptymodules[lay-3]++;
227 //AliInfo(Form("The module %d (layer %i, ladder %i det %i ) is bad, content %f content layer %f filled modules position %d ",module,lay,lad,det,contentlayer[lay-3],content,lay-3) );
228 }//end if bad
229 else
230 {
231 Double_t contentgood=0.;
232 active++;
233 //printf("lay: %i\t det %i \t lad %i \n",lay,det,lad );
234 contentgood=hlayer[lay-3]->GetBinContent(det,lad);
235 if(contentgood==0.){emptymodules[lay-3]++;}
236 else if(contentgood!=0.){filledmodules[lay-3]++;}
237 }
238
239 //delete cal;
240 //cal=NULL;
241 }//end for
242 for(Int_t i=0;i<2;i++){AliInfo(Form(" %s :Layer %i \tempty modules %i \t filled modules %i\n",hlayer[i]->GetName(), i+3,emptymodules[i], filledmodules[i]));}//end else layers
243 if(exactive==0){
244 AliInfo(Form("All the active modules (%i) are in acquisition. The number of excluded modules are %i \n",active,excluded));
245 test=fHighSDDValue[AliQAv1::kINFO];}
246 if(exactive!=0){
247 AliWarning(Form("%i modules excluded from the acquisition took data. Active modules%i \n ",exactive,active));
248 test=fHighSDDValue[AliQAv1::kWARNING];
249 }
250 if(excluded==exactive){
251 AliWarning(Form("All the modules exluded from the acquisition (%d) took data! Active modules %i\n",excluded,active));
252 test=fHighSDDValue[AliQAv1::kWARNING];
253 }
254 if(active==0){
255 AliWarning(Form("No modules took data: excluded %i \t exactive %i \n", excluded, exactive));
256 test=fHighSDDValue[AliQAv1::kFATAL];
257 }
258 }
3647765c 259 }
80b9610c 260 }//end getentries !=0
261 //delete calSDD;
262
263
264
265 //delete calibSDD;
266 //delete calSDD;
267
268 break;
269 case AliQAv1::kNULLTASK:
270 AliInfo(Form("No Check on %s\n",AliQAv1::GetAliTaskName(index)));
271 test=1.;
272 break;
273 case AliQAv1::kSIM:
274 AliInfo(Form("Check on %s\n",AliQAv1::GetAliTaskName(index)));
275 test=1.;
276 break;
277 case AliQAv1::kREC:
278 AliInfo(Form("Check on %s\n",AliQAv1::GetAliTaskName(index)));
279 test=1.;
280 break;
281 case AliQAv1::kANA:
282 AliInfo(Form("Check on %s\n",AliQAv1::GetAliTaskName(index)));
283 test=1.;
284 break;
285 case AliQAv1::kESD:
286 AliInfo(Form("Check on %s\n",AliQAv1::GetAliTaskName(index)));
287 test=1.;
288 break;
289 case AliQAv1::kNTASK:
290 AliInfo(Form("No Check on %s\n",AliQAv1::GetAliTaskName(index)));
291 test=1.;
292 break;
293
294 }//end switch
295 delete hdata;
3647765c 296 return test;
5b716935 297}
298
3647765c 299//__________________________________________________________________
80b9610c 300void AliITSQASDDChecker::SetTaskOffset(Int_t taskoffset)
301{
302 fSubDetOffset = taskoffset;
303}
304
305
306//__________________________________________________________________
307void AliITSQASDDChecker::SetStepBit(Double_t *steprange)
308{
309
310 fStepBitSDD = new Double_t[AliQAv1::kNBIT];
311 for(Int_t bit=0;bit<AliQAv1::kNBIT;bit++)
312 {
313 fStepBitSDD[bit]=steprange[bit];
314 }
315}
316
317//__________________________________________________________________
318void AliITSQASDDChecker::SetSDDLimits(Float_t *lowvalue, Float_t * highvalue)
3647765c 319{
80b9610c 320
321 fLowSDDValue = new Float_t[AliQAv1::kNBIT];
322 fHighSDDValue= new Float_t[AliQAv1::kNBIT];
323
324 for(Int_t bit=0;bit<AliQAv1::kNBIT;bit++)
325 {
326 fLowSDDValue[bit]=lowvalue[bit];
327 fHighSDDValue[bit]= highvalue[bit];
328 }
329
3647765c 330}
80b9610c 331
332