]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - ZDC/AliZDCQAChecker.cxx
Adding comparison macros
[u/mrichter/AliRoot.git] / ZDC / AliZDCQAChecker.cxx
... / ...
CommitLineData
1/**************************************************************************
2 * Copyright(c) 1998-1999, 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
17// --- ROOT system ---
18#include <TH1F.h>
19#include <TIterator.h>
20#include <TString.h>
21#include <TPaveText.h>
22#include <TObjArray.h>
23#include "TList.h"
24
25// --- Standard library ---
26
27// --- AliRoot header files ---
28#include "AliLog.h"
29#include "AliZDCQAChecker.h"
30
31ClassImp(AliZDCQAChecker)
32
33//____________________________________________________________________________
34void AliZDCQAChecker::Check(Double_t * test, AliQAv1::ALITASK_t index, TObjArray ** list,
35 const AliDetectorRecoParam * /*recoParam*/)
36{
37 // Checks the QA histograms on the input list:
38 //
39 const char* taskName = AliQAv1::GetAliTaskName(index);
40 //printf("\n\tAliZDCQAChecker -> checking QA histos for task %s\n",taskName);
41 //
42 Int_t ihitHisto=0, idigHisto=0;
43 Int_t irecHisto=0, irawHisto=0, esdInd=0;
44
45 TObjArray messages;
46 messages.SetOwner(kTRUE);
47
48 for(Int_t specie = 0; specie<AliRecoParam::kNSpecies; specie++){
49 Int_t count = 0;
50 if(!AliQAv1::Instance(AliQAv1::GetDetIndex(GetName()))->IsEventSpecieSet(AliRecoParam::ConvertIndex(specie)))
51 continue ;
52 //printf("\tAliZDCQAChecker -> specie %d, AliRecoParam::ConvertIndex(specie) %d, AliRecoParam::kLowMult %d, IsEventSpecieSet(specie) %d\n",
53 // specie, AliRecoParam::ConvertIndex(specie) ,AliRecoParam::kLowMult,
54 // AliQAv1::Instance(AliQAv1::GetDetIndex(GetName()))->IsEventSpecieSet(AliRecoParam::ConvertIndex(specie)));
55
56 // ====================================================================
57 // Checks for p-p events
58 // ====================================================================
59 if(AliRecoParam::ConvertIndex(specie) == AliRecoParam::kLowMult){
60 if(list[specie]->GetEntries()==0){
61 AliWarning("\t The list to be checked is empty!"); // nothing to check
62 return;
63 }
64 //AliDebug(AliQAv1::GetQADebugLevel(), Form("\n\tAliZDCQAChecker-> checking QA histograms for task %s\n\n",taskName));
65 TIter next(list[specie]);
66 count = 0;
67 TH1 * hdata;
68
69 Float_t res=0., percentageDiff=0.30;
70 Float_t meanZNA=0., meanZNC=0., meanZPA=0., meanZPC=0.;
71 Float_t pmCZNA=0., pmCZNC=0., pmCZPA=0., pmCZPC=0.;
72 Float_t pmQZNA=0., pmQZNC=0., pmQZPA=0., pmQZPC=0.;
73 Float_t sumADCZNA=0., sumADCZNC=0., sumADCZPA=0., sumADCZPC=0.;
74 Float_t adcCZNA=0., adcCZNC=0., adcCZPA=0., adcCZPC=0.;
75 Float_t adcQZNA=0., adcQZNC=0., adcQZPA=0., adcQZPC=0.;
76
77 while((hdata = dynamic_cast<TH1 *>(next()))){
78 if(hdata){
79 // -------------------------------------------------------------------
80 if(index == AliQAv1::kSIM){
81 //AliDebug(AliQAv1::GetQADebugLevel(), Form("\tAliZDCQAChecker-> checking histo %s",hdata->GetName()));
82 // Check HITS histos
83 //
84 if(!(strncmp(hdata->GetName(),"hHits",5))){
85 if(hdata->GetEntries()>0){
86 if(ihitHisto==0) meanZNC = hdata->GetMean();
87 else if(ihitHisto==1) meanZNA = hdata->GetMean();
88 else if(ihitHisto==2) meanZPC = hdata->GetMean();
89 else if(ihitHisto==3) meanZPA = hdata->GetMean();
90 else if(ihitHisto==4) pmQZNC = hdata->GetMean();
91 else if(ihitHisto==5) pmQZNA = hdata->GetMean();
92 else if(ihitHisto==6) pmQZPC = hdata->GetMean();
93 else if(ihitHisto==7) pmQZPA = hdata->GetMean();
94 else if(ihitHisto==8) pmCZNC = hdata->GetMean();
95 else if(ihitHisto==9) pmCZNA = hdata->GetMean();
96 else if(ihitHisto==10) pmCZPC = hdata->GetMean();
97 else if(ihitHisto==11) pmCZPA = hdata->GetMean();
98 }
99 //
100 // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff
101 if(ihitHisto==11){
102 if(TMath::Abs(meanZNC)>1.e-10){
103 if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)<percentageDiff)
104 res=1.;
105 else
106 res=.5;
107 test[specie] += res;
108 count++;
109 }
110 if(TMath::Abs(meanZNA)>1.e-10){
111 if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)<percentageDiff)
112 res=1.;
113 else percentageDiff=
114 res=.5;
115 test[specie] += res;
116 count++;
117 }
118 if(TMath::Abs(meanZPC)>1.e-10){
119 if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)<percentageDiff)
120 res=1.;
121 else
122 res=.5;
123 test[specie] += res;
124 count++;
125 }
126 if(TMath::Abs(meanZPA)>1.e-10){
127 if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)<percentageDiff)
128 res=1.;
129 else
130 res=.5;
131 test[specie] += res;
132 count++;
133 }
134 }
135 ihitHisto++;
136 }
137 // Check DIGIT HIGH GAIN CHAIN histos
138 else if(!(strncmp(hdata->GetName(),"hDig",4))){
139 if(hdata->GetEntries()>0){
140 if(idigHisto==0) sumADCZNC = hdata->GetMean();
141 else if(idigHisto==1) sumADCZNA = hdata->GetMean();
142 else if(idigHisto==2) sumADCZPC = hdata->GetMean();
143 else if(idigHisto==3) sumADCZPA = hdata->GetMean();
144 else if(idigHisto==4) pmQZNC = hdata->GetMean();
145 else if(idigHisto==5) pmQZNA = hdata->GetMean();
146 else if(idigHisto==6) pmQZPC = hdata->GetMean();
147 else if(idigHisto==7) pmQZPA = hdata->GetMean();
148 else if(idigHisto==8) pmCZNC = hdata->GetMean();
149 else if(idigHisto==9) pmCZNA = hdata->GetMean();
150 else if(idigHisto==10) pmCZPC = hdata->GetMean();
151 else if(idigHisto==11) pmCZPA = hdata->GetMean();
152 }
153 //
154 // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff
155 if(idigHisto==11){
156 if(TMath::Abs(sumADCZNC)>1.e-10){
157 if((TMath::Abs(adcQZNC-adcCZNC)/adcCZNC)<percentageDiff)
158 res=1.;
159 else
160 res=.5;
161 test[specie] += res;
162 count++;
163 }
164 if(TMath::Abs(sumADCZNA)>1.e-10){
165 if((TMath::Abs(adcQZNA-adcCZNA)/adcCZNA)<percentageDiff)
166 res=1.;
167 else
168 res=.5;
169 test[specie] += res;
170 count++;
171 }
172 if(TMath::Abs(sumADCZPC)>1.e-10){
173 if((TMath::Abs(adcQZPC-adcCZPC)/adcCZPC)<percentageDiff)
174 res=1.;
175 else
176 res=.5;
177 test[specie] += res;
178 count++;
179 }
180 if(TMath::Abs(sumADCZPA)>1.e-10){
181 if((TMath::Abs(adcQZPA-adcCZPA)/adcCZPA)<percentageDiff)
182 res=1.;
183 else
184 res=.5;
185 test[specie] += res;
186 count++;
187 }
188 }
189 idigHisto++;
190 }
191 }
192 // -------------------------------------------------------------------
193 else if(index == AliQAv1::kRAW) {
194 //
195 // Check RAW HIGH GAIN CHAIN histos
196
197 messages.Clear();
198
199 Bool_t iDetPM = kTRUE;
200 // --- Checks
201 if(irawHisto==22){
202 Float_t resADC=0.;
203 for(int ibin=1; ibin<=hdata->GetNbinsX(); ibin++){
204 if((hdata->GetBinContent(ibin))>10.){
205 res=1.;
206 }
207 else if((hdata->GetBinContent(ibin))<10.){
208 res=0.5;
209 if(ibin==1 || ibin==6 || ibin==11 || ibin==12 || ibin==13 || ibin==18){
210 iDetPM = kFALSE;
211 }
212 }
213 //
214 resADC += res;
215 test[specie] += res;
216 count++;
217 }
218 Float_t rv=1.;
219 if(hdata->GetNbinsX() != 0) rv = resADC/hdata->GetNbinsX();
220 if(rv == 1.) messages.Add(new TObjString("ADCs are OK!"));
221 else if(iDetPM==kFALSE){
222 messages.Add(new TObjString("Problem with ADCs!"));
223 messages.Add(new TObjString("IF THIS IS NOT A TECHNICAL"));
224 messages.Add(new TObjString("OR A STANDALONE_PEDESTAL RUN"));
225 }
226 else if(iDetPM==kTRUE) messages.Add(new TObjString("Minor problem with ADCs"));
227 SetupHisto(messages, *hdata, rv);
228 }
229 else if(irawHisto==23){
230 Double_t refTDCs = -319.5;
231 Float_t resTDC=0.;
232 for(int ibin=5; ibin<=6; ibin++){
233 if(TMath::Abs((hdata->GetBinContent(ibin))-refTDCs)<2.){
234 res=1.;
235 }
236 else if((TMath::Abs((hdata->GetBinContent(ibin))-refTDCs)>=2.) &&
237 (TMath::Abs((hdata->GetBinContent(ibin))-refTDCs)<=3.)){
238 res=0.9;
239 }
240 else{
241 res=0.5;
242 }
243 //
244 resTDC += res;
245 test[specie] += res;
246 count++;
247 }
248 Float_t rv=1.;
249 if(hdata->GetNbinsX() != 0) rv = resTDC/2;
250 if(rv == 1.) messages.Add(new TObjString("TDCs are OK!"));
251 else if(rv<1 && rv>=0.9) messages.Add(new TObjString("Minor problem with TDCs"));
252 else{
253 messages.Add(new TObjString("Serious problem in ZDC timing"));
254 messages.Add(new TObjString("IF THIS IS NOT A TECHNICAL RUN"));
255 messages.Add(new TObjString("OR A STANDALONE_PEDESTAL RUN"));
256 }
257 SetupHisto(messages, *hdata, rv);
258 }
259 irawHisto++;
260
261 }
262 // -------------------------------------------------------------------
263 else if(index == AliQAv1::kREC) {
264 //
265 // Check REC HIGH GAIN CHAIN histos
266 if(hdata->GetEntries()>0){
267 if(irecHisto==0) meanZNC = hdata->GetMean();
268 else if(irecHisto==1) meanZNA = hdata->GetMean();
269 else if(irecHisto==2) meanZPC = hdata->GetMean();
270 else if(irecHisto==3) meanZPA = hdata->GetMean();
271 else if(irecHisto==4) pmQZNC = hdata->GetMean();
272 else if(irecHisto==5) pmQZNA = hdata->GetMean();
273 else if(irecHisto==6) pmQZPC = hdata->GetMean();
274 else if(irecHisto==7) pmQZPA = hdata->GetMean();
275 else if(irecHisto==8) pmCZNC = hdata->GetMean();
276 else if(irecHisto==9) pmCZNA = hdata->GetMean();
277 else if(irecHisto==10) pmCZPC = hdata->GetMean();
278 else if(irecHisto==11) pmCZPA = hdata->GetMean();
279 }
280 //
281 // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff
282 if(irecHisto==11){
283 if(TMath::Abs(meanZNC)>1.e-10){
284 if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)<percentageDiff)
285 res=1.;
286 else
287 res=.5;
288 test[specie] += res;
289 count++;
290 }
291 if(TMath::Abs(meanZNA)>1.e-10){
292 if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)<percentageDiff)
293 res=1.;
294 else
295 res=.5;
296 test[specie] += res;
297 count++;
298 }
299 if(TMath::Abs(meanZPC)>1.e-10){
300 if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)<percentageDiff)
301 res=1.;
302 else
303 res=.5;
304 test[specie] += res;
305 count++;
306 }
307 if(TMath::Abs(meanZPA)>1.e-10){
308 if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)<percentageDiff)
309 res=1.;
310 else
311 res=.5;
312 test[specie] += res;
313 count++;
314 }
315 }
316 irecHisto++;
317 }
318 // -------------------------------------------------------------------
319 else if(index == AliQAv1::kESD) {
320 //
321 // Check ESD HIGH GAIN CHAIN histos
322 if(hdata->GetEntries()>0){
323 if(esdInd==2) sumADCZNC = hdata->GetMean();
324 else if(esdInd==3) sumADCZNA = hdata->GetMean();
325 else if(esdInd==4) sumADCZPC = hdata->GetMean();
326 else if(esdInd==5) sumADCZPA = hdata->GetMean();
327 else if(esdInd==8) pmQZNC = hdata->GetMean();
328 else if(esdInd==9) pmQZNA = hdata->GetMean();
329 else if(esdInd==10) pmQZPC = hdata->GetMean();
330 else if(esdInd==11) pmQZPA = hdata->GetMean();
331 else if(esdInd==12) pmCZNC = hdata->GetMean();
332 else if(esdInd==13) pmCZNA = hdata->GetMean();
333 else if(esdInd==14) pmCZPC = hdata->GetMean();
334 else if(esdInd==15) pmCZPA = hdata->GetMean();
335 }
336 //
337 // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff
338 if(esdInd==15){
339 if(TMath::Abs(sumADCZNC)>1.e-10){
340 if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)<percentageDiff)
341 res=1.;
342 else
343 res=.5;
344 test[specie] += res;
345 count++;
346 }
347 if(TMath::Abs(sumADCZNA)>1.e-10){
348 if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)<percentageDiff)
349 res=1.;
350 else
351 res=.5;
352 test[specie] += res;
353 count++;
354 }
355 if(TMath::Abs(sumADCZPC)>1.e-10){
356 if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)<percentageDiff)
357 res=1.;
358 else
359 res=.5;
360 test[specie] += res;
361 count++;
362 }
363 if(TMath::Abs(sumADCZPA)>1.e-10){
364 if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)<percentageDiff)
365 res=1.;
366 else
367 res=.5;
368 test[specie] += res;
369 count++;
370 }
371 }
372 esdInd++;
373 }
374 else {
375 AliWarning(Form("\n\t No ZDC QA for %s task\n",taskName));
376 return ;
377 }
378 }//if(hdata)
379 else AliError("AliZDCQAChecker-> No histos!!!\n");
380 }
381 } // LowMult (p-p)
382 // ====================================================================
383 // Checks for A-A events
384 // ====================================================================
385 else if (AliRecoParam::ConvertIndex(specie) == AliRecoParam::kHighMult) {
386 if(list[specie]->GetEntries()==0){
387 AliWarning("\t The list to be checked is empty!");
388 return ;
389 }
390 //AliDebug(AliQAv1::GetQADebugLevel(), Form("\n\tAliZDCQAChecker-> checking QA histograms for task %s\n\n",taskName));
391 //
392 TIter next(list[specie]);
393 count = 0;
394 TH1 * hdata;
395
396 Float_t res=0., percentageDiff=0.10;
397 Float_t meanZNA=0., meanZNC=0., meanZPA=0., meanZPC=0.;
398 Float_t pmCZNA=0., pmCZNC=0., pmCZPA=0., pmCZPC=0.;
399 Float_t pmQZNA=0., pmQZNC=0., pmQZPA=0., pmQZPC=0.;
400 Float_t sumADCZNA=0., sumADCZNC=0., sumADCZPA=0., sumADCZPC=0.;
401 Float_t adcCZNA=0., adcCZNC=0., adcCZPA=0., adcCZPC=0.;
402 Float_t adcQZNA=0., adcQZNC=0., adcQZPA=0., adcQZPC=0.;
403
404 while((hdata = dynamic_cast<TH1 *>(next()))){
405 if(hdata){
406 //AliDebug(AliQAv1::GetQADebugLevel(), Form("\tAliZDCQAChecker-> checking histo %s",hdata->GetName()));
407 // -------------------------------------------------------------------
408 if(index == AliQAv1::kSIM){
409 // Check HITS histos
410 if (!(strncmp(hdata->GetName(),"hHits",5))){
411 if(hdata->GetEntries()>0){
412 if(ihitHisto==0) meanZNC = hdata->GetMean();
413 else if(ihitHisto==1) meanZNA = hdata->GetMean();
414 else if(ihitHisto==2) meanZPC = hdata->GetMean();
415 else if(ihitHisto==3) meanZPA = hdata->GetMean();
416 else if(ihitHisto==4) pmQZNC = hdata->GetMean();
417 else if(ihitHisto==5) pmQZNA = hdata->GetMean();
418 else if(ihitHisto==6) pmQZPC = hdata->GetMean();
419 else if(ihitHisto==7) pmQZPA = hdata->GetMean();
420 else if(ihitHisto==8) pmCZNC = hdata->GetMean();
421 else if(ihitHisto==9) pmCZNA = hdata->GetMean();
422 else if(ihitHisto==10) pmCZPC = hdata->GetMean();
423 else if(ihitHisto==11) pmCZPA = hdata->GetMean();
424 }
425 //
426 // --- Check whether 2*|Mean ZNA - Mean ZNC|/(Mean ZNA + Mean ZNC) < percentageDiff
427 // --- and 2*|Mean ZPA - Mean ZPC|/(Mean ZPA + Mean ZPC) < 2*percentageDiff
428 if(ihitHisto==3){
429 if(TMath::Abs(meanZNC)>1.e-10 && TMath::Abs(meanZNA)>1.e-10){
430 if((2*TMath::Abs(meanZNC-meanZNA)/(meanZNA+meanZNC))<percentageDiff)
431 res=1.;
432 else
433 res=.5;
434 test[specie] += res;
435 count++;
436 }
437 if(TMath::Abs(meanZPC)>1.e-10 && TMath::Abs(meanZPA)>1.e-10){
438 if((TMath::Abs(meanZPC-meanZPA)/(meanZPA+meanZPC))<percentageDiff)
439 res=1.;
440 else
441 res=.5;
442 test[specie] += res;
443 count++;
444 }
445 }
446 // --- Check whether (mean PMQi - PMC)/PMC < percentageDiff
447 if(ihitHisto==11){
448 if(TMath::Abs(meanZNC)>1.e-10){
449 if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)<percentageDiff)
450 res=1.;
451 else
452 res=.5;
453 test[specie] += res;
454 count++;
455 }
456 if(TMath::Abs(meanZNA)>1.e-10){
457 if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)<percentageDiff)
458 res=1.;
459 else
460 res=.5;
461 test[specie] += res;
462 count++;
463 }
464 if(TMath::Abs(meanZPC)>1.e-10){
465 if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)<percentageDiff)
466 res=1.;
467 else
468 res=.5;
469 test[specie] += res;
470 count++;
471 }
472 if(TMath::Abs(meanZPA)>1.e-10){
473 if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)<percentageDiff)
474 res=1.;
475 else
476 res=.5;
477 test[specie] += res;
478 count++;
479 }
480 }
481 ihitHisto++;
482 }
483 // Check DIGITS histos
484 else if (!(strncmp(hdata->GetName(),"hDig",4))){
485 if(hdata->GetEntries()>0){
486 if(idigHisto==0) sumADCZNC = hdata->GetMean();
487 else if(idigHisto==1) sumADCZNA = hdata->GetMean();
488 else if(idigHisto==2) sumADCZPC = hdata->GetMean();
489 else if(idigHisto==3) sumADCZPA = hdata->GetMean();
490 else if(idigHisto==4) adcQZNC = hdata->GetMean();
491 else if(idigHisto==5) adcQZNA = hdata->GetMean();
492 else if(idigHisto==6) adcQZPC = hdata->GetMean();
493 else if(idigHisto==7) adcQZPA = hdata->GetMean();
494 else if(idigHisto==8) adcCZNC = hdata->GetMean();
495 else if(idigHisto==9) adcCZNA = hdata->GetMean();
496 else if(idigHisto==10) adcCZPC = hdata->GetMean();
497 else if(idigHisto==11) adcCZPA = hdata->GetMean();
498 }
499 //
500 // --- Check whether 2*|Mean ZNA - Mean ZNC|/(Mean ZNA + Mean ZNC) < percentageDiff
501 // --- and 2*|Mean ZPA - Mean ZPC|/(Mean ZPA + Mean ZPC) < 2*percentageDiff
502 if(idigHisto==3){
503 if(TMath::Abs(sumADCZNC)>1.e-10 && TMath::Abs(sumADCZNA)>1.e-10){
504 if((2*TMath::Abs(sumADCZNC-sumADCZNA)/(sumADCZNA+sumADCZNC))<percentageDiff)
505 res=1.;
506 else
507 res=.5;
508 test[specie] += res;
509 count++;
510 }
511 if(TMath::Abs(sumADCZPC)>1.e-10 && TMath::Abs(sumADCZPA)>1.e-10){
512 if((TMath::Abs(sumADCZPC-sumADCZPA)/(sumADCZPA+sumADCZPC))<percentageDiff)
513 res=1.;
514 else
515 res=.5;
516 test[specie] += res;
517 count++;
518 }
519 }
520 // --- Check whether (sumADC PMQi - PMC)/PMC < percentageDiff
521 if(idigHisto==11){
522 if(TMath::Abs(sumADCZNC)>1.e-10){
523 if((TMath::Abs(adcQZNC-adcCZNC)/adcCZNC)<percentageDiff)
524 res=1.;
525 else
526 res=.5;
527 test[specie] += res;
528 count++;
529 }
530 if(TMath::Abs(sumADCZNA)>1.e-10){
531 if((TMath::Abs(adcQZNA-adcCZNA)/adcCZNA)<percentageDiff)
532 res=1.;
533 else
534 res=.5;
535 test[specie] += res;
536 count++;
537 }
538 if(TMath::Abs(sumADCZPC)>1.e-10){
539 if((TMath::Abs(adcQZPC-adcCZPC)/adcCZPC)<percentageDiff)
540 res=1.;
541 else
542 res=.5;
543 test[specie] += res;
544 count++;
545 }
546 if(TMath::Abs(sumADCZPA)>1.e-10){
547 if((TMath::Abs(adcQZPA-adcCZPA)/adcCZPA)<percentageDiff)
548 res=1.;
549 else
550 res=.5;
551 test[specie] += res;
552 count++;
553 }
554 }
555 idigHisto++;
556 }
557 }
558 // -------------------------------------------------------------------
559 else if(index == AliQAv1::kRAW){
560 //
561 // Check RAW HIGH GAIN CHAIN histos
562
563 messages.Clear();
564
565 Bool_t iDetPM = kTRUE;
566 // --- Checks
567 if(irawHisto==22){
568 Float_t resADC=0.;
569 for(int ibin=1; ibin<=hdata->GetNbinsX(); ibin++){
570 if((hdata->GetBinContent(ibin))>10.){
571 res=1.;
572 }
573 else if((hdata->GetBinContent(ibin))<10. &&
574 (ibin==1 || ibin==6 || ibin==11 || ibin==12 || ibin==13 || ibin==18)){
575 res=0.5;
576 iDetPM = kFALSE;
577 }
578 //
579 resADC += res;
580 test[specie] += res;
581 count++;
582 }
583 Float_t rv=1.;
584 if(hdata->GetNbinsX() != 0) rv = resADC/hdata->GetNbinsX();
585 if(rv == 1.) messages.Add(new TObjString("ADCs are OK!"));
586 else if(iDetPM==kFALSE){
587 messages.Add(new TObjString("Problem with ADCs!"));
588 messages.Add(new TObjString("IF THIS IS NOT A TECHNICAL RUN"));
589 }
590 else if(iDetPM==kTRUE) messages.Add(new TObjString("Minor problem with ADCs"));
591 SetupHisto(messages, *hdata, rv);
592 }
593 else if(irawHisto==23){
594 Double_t refTDCs[6] = {-83.0,-78.1,-80.2,-79.3,-81.0,-80.9};
595 Float_t resTDC=0.;
596 for(int ibin=1; ibin<=hdata->GetNbinsX(); ibin++){
597 if(TMath::Abs((hdata->GetBinContent(ibin))-refTDCs[ibin-1])<4.){
598 res=1.;
599 }
600 else{
601 res=0.5;
602 }
603 //
604 resTDC += res;
605 test[specie] += res;
606 count++;
607 }
608 Float_t rv=1.;
609 if(hdata->GetNbinsX() != 0) rv = resTDC/hdata->GetNbinsX();
610 if(rv == 1.) messages.Add(new TObjString("TDCs are OK!"));
611 else if(rv<1 && rv>0.9) messages.Add(new TObjString("Minor problem with TDCs"));
612 else{
613 messages.Add(new TObjString("Serious problem in ZDC timing"));
614 messages.Add(new TObjString("IF THIS IS NOT A TECHNICAL RUN"));
615 }
616 SetupHisto(messages, *hdata, rv);
617 }
618 else if(irawHisto==26){
619 Double_t yZNC=hdata->GetBinContent(2);
620 Double_t yZNA=hdata->GetBinContent(4);
621 if(TMath::Abs(yZNC)<0.4 && TMath::Abs(yZNA)<0.4) res=1.;
622 else res=0.5;
623 test[specie] += res;
624 count++;
625 //
626 printf(" yZNC = %1.2f yZNA = %1.2f -> res %1.2f\n",yZNC, yZNA,res);
627 if(res == 1.) messages.Add(new TObjString("ZN positions are OK!"));
628 else{
629 messages.Add(new TObjString("Problem in ZN positions!"));
630 messages.Add(new TObjString("IF THIS IS NOT A TECHNICAL RUN"));
631 }
632 SetupHisto(messages, *hdata, res);
633 }
634 irawHisto++;
635
636 }
637 // -------------------------------------------------------------------
638 else if(index == AliQAv1::kREC){
639 //
640 // Check RAW HIGH GAIN CHAIN histos
641 if(hdata->GetEntries()>0){
642 if(irecHisto==0) meanZNC = hdata->GetMean();
643 else if(irecHisto==1) meanZNA = hdata->GetMean();
644 else if(irecHisto==2) meanZPC = hdata->GetMean();
645 else if(irecHisto==3) meanZPA = hdata->GetMean();
646 else if(irecHisto==4) pmQZNC = hdata->GetMean();
647 else if(irecHisto==5) pmQZNA = hdata->GetMean();
648 else if(irecHisto==6) pmQZPC = hdata->GetMean();
649 else if(irecHisto==7) pmQZPA = hdata->GetMean();
650 else if(irecHisto==8) pmCZNC = hdata->GetMean();
651 else if(irecHisto==9) pmCZNA = hdata->GetMean();
652 else if(irecHisto==10) pmCZPC = hdata->GetMean();
653 else if(irecHisto==11) pmCZPA = hdata->GetMean();
654 }
655 //
656 // --- Check whether 2*|Mean ZNA - Mean ZNC|/(Mean ZNA + Mean ZNC) < percentageDiff
657 // --- and 2*|Mean ZPA - Mean ZPC|/(Mean ZPA + Mean ZPC) < 2*percentageDiff
658 if(irecHisto==3){
659 if(TMath::Abs(meanZNC)>1.e-10 && TMath::Abs(meanZNA)>1.e-10){
660 if((2*TMath::Abs(meanZNC-meanZNA)/(meanZNA+meanZNC))<percentageDiff)
661 res=1.;
662 else
663 res=.5;
664 test[specie] += res;
665 count++;
666 }
667 if(TMath::Abs(meanZPC)>1.e-10 && TMath::Abs(meanZPA)>1.e-10){
668 if((TMath::Abs(meanZPC-meanZPA)/(meanZPA+meanZPC))<percentageDiff)
669 res=1.;
670 else
671 res=.5;
672 test[specie] += res;
673 count++;
674 }
675 }
676 // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff
677 if(irecHisto==11){
678 if((TMath::Abs(meanZNC)>1.e-10) && (pmCZNC>1.e-10)){
679 if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)<percentageDiff)
680 res=1.;
681 else
682 res=.5;
683 test[specie] += res;
684 count++;
685 }
686 if((TMath::Abs(meanZNA)>1.e-10) && (pmCZNA>1.e-10)){
687 if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)<percentageDiff)
688 res=1.;
689 else
690 res=.5;
691 test[specie] += res;
692 count++;
693 }
694 if((TMath::Abs(meanZPC)>1.e-10) && (pmCZPC>1.e-10)){
695 if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)<percentageDiff)
696 res=1.;
697 else
698 res=.5;
699 test[specie] += res;
700 count++;
701 }
702 if((TMath::Abs(meanZPA)>1.e-10) && (pmCZPA>1.e-10)){
703 if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)<percentageDiff)
704 res=1.;
705 else
706 res=.5;
707 test[specie] += res;
708 count++;
709 }
710 }
711 irecHisto++;
712 }
713 // -------------------------------------------------------------------
714 else if(index == AliQAv1::kESD){
715 //
716 // Check ESD HIGH GAIN CHAIN histos
717 if(hdata->GetEntries()>0){
718 if(esdInd==2) sumADCZNC = hdata->GetMean();
719 else if(esdInd==3) sumADCZNA = hdata->GetMean();
720 else if(esdInd==4) sumADCZPC = hdata->GetMean();
721 else if(esdInd==5) sumADCZPA = hdata->GetMean();
722 else if(esdInd==8) pmQZNC = hdata->GetMean();
723 else if(esdInd==9) pmQZNA = hdata->GetMean();
724 else if(esdInd==10) pmQZPC = hdata->GetMean();
725 else if(esdInd==11) pmQZPA = hdata->GetMean();
726 else if(esdInd==12) pmCZNC = hdata->GetMean();
727 else if(esdInd==13) pmCZNA = hdata->GetMean();
728 else if(esdInd==14) pmCZPC = hdata->GetMean();
729 else if(esdInd==15) pmCZPA = hdata->GetMean();
730 }
731 //
732 // --- Check whether 2*|Mean ZNA - Mean ZNC|/(Mean ZNA + Mean ZNC) < percentageDiff
733 // --- and 2*|Mean ZPA - Mean ZPC|/(Mean ZPA + Mean ZPC) < 2*percentageDiff
734 if(esdInd==5){
735 if(TMath::Abs(sumADCZNC)>1.e-10 && TMath::Abs(sumADCZNA)>1.e-10){
736 if((2*TMath::Abs(sumADCZNC-sumADCZNA)/(sumADCZNA+sumADCZNC))<percentageDiff)
737 res=1.;
738 else
739 res=.5;
740 test[specie] += res;
741 count++;
742 }
743 if(TMath::Abs(sumADCZPC)>1.e-10 && TMath::Abs(sumADCZPA)>1.e-10){
744 if((TMath::Abs(sumADCZPC-sumADCZPA)/(sumADCZPA+sumADCZPC))<percentageDiff)
745 res=1.;
746 else
747 res=.5;
748 test[specie] += res;
749 count++;
750 }
751 }
752 // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff
753 if(esdInd==15){
754 if(TMath::Abs(sumADCZNC)>1.e-10){
755 if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)<percentageDiff)
756 res=1.;
757 else
758 res=.5;
759 test[specie] += res;
760 count++;
761 }
762 if(TMath::Abs(sumADCZNA)>1.e-10){
763 if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)<percentageDiff)
764 res=1.;
765 else
766 res=.5;
767 test[specie] += res;
768 count++;
769 }
770/* if(TMath::Abs(sumADCZPC)>1.e-10){
771 if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)<percentageDiff)
772 res=1.;
773 else
774 res=.5;
775 test[specie] += res;
776 count++;
777 }
778 if(TMath::Abs(sumADCZPA)>1.e-10){
779 if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)<percentageDiff)
780 res=1.;
781 else
782 res=.5;
783 test[specie] += res;
784 count++;
785 }
786*/
787 }
788 esdInd++;
789 }
790 else {
791 AliWarning(Form("\n\t No ZDC QA for %s task\n",taskName));
792 return ;
793 }
794 }//if(hdata)
795 else AliError("\t No histos found for ZDC!!!\n");
796 }
797 } // HighMult (Pb-Pb)
798 // ====================================================================
799 // Checks for Calibration events
800 // ====================================================================
801 else if (AliRecoParam::ConvertIndex(specie) == AliRecoParam::kCalib) {
802 AliWarning(Form("\n\t No check implemented in ZDC QA for %s task\n",taskName));
803 return ;
804 } // Calibration
805 // ====================================================================
806 // Checks for cosmic events
807 // ====================================================================
808 else if (AliRecoParam::ConvertIndex(specie) == AliRecoParam::kCosmic) {
809 AliWarning(Form("\n\t No check implemented in ZDC QA for %s task\n",taskName));
810 return ;
811 } // Cosmic
812 if(TMath::Abs(count)>1.e-10) test[specie] = test[specie]/count;
813 AliDebug(AliQAv1::GetQADebugLevel(), Form("\n\t ZDC QA check result = %1.2f\n",test[specie]));
814 } // Loop on species
815}
816
817//___________________________________________________________________
818void AliZDCQAChecker::SetupHisto(const TObjArray& messages, TH1& histo, Float_t& code)
819{
820 //
821 /// Add text to histos
822 //
823
824 TPaveText* text = new TPaveText(0.70,0.70,0.99,0.99,"NDC");
825
826 TIter next(&messages);
827 TObjString* str;
828
829 while ( ( str = static_cast<TObjString*>(next()) ) ){
830 text->AddText(str->String());
831 }
832
833 TString defaultText = "";
834
835 Int_t color = 0;
836 if(code==1.){
837 color = kGreen;
838 defaultText = "Everything is fine!";
839 }
840 else if(code<1. && code>=0.9){
841 color = kYellow;
842 defaultText = "To be monitored in next runs";
843 }
844 else if(code<0.9 && code>=0.6){
845 color = kOrange;
846 defaultText = "notify the expert DURING THE DAY!";
847 }
848 else if(code<0.6){
849 color = kRed;
850 defaultText = "CALL THE EXPERT!!!!";
851 }
852
853
854 text->AddText(defaultText.Data());
855 text->SetFillColor(color);
856
857 //histo.SetFillStyle(1001);
858 //histo.SetFillColor(color);
859
860 histo.SetStats(kFALSE);
861
862 histo.GetListOfFunctions()->Add(text);
863}