]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - ZDC/AliZDCQAChecker.cxx
fixed typo for setting fraction of shared clusters
[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 // Reference values from RUN 145456
231 Double_t refTDCs[6] = {-322.5,-319.1,-320.9,-319.2,-319.7,-319.2};
232 Float_t resTDC=0.;
233 for(int ibin=1; ibin<=hdata->GetNbinsX(); ibin++){
234 if(TMath::Abs((hdata->GetBinContent(ibin))-refTDCs[ibin-1])<3.){
235 res=1.;
236 }
237 else if(TMath::Abs((hdata->GetBinContent(ibin))-refTDCs[ibin-1])<5.){
238 res=0.8;
239 }
240 else res=0.5;
241 //
242 resTDC += res;
243 test[specie] += res;
244 count++;
245 }
246 Float_t rv=1.;
247 if(hdata->GetNbinsX() != 0) rv = resTDC/hdata->GetNbinsX();
248 if(rv == 1.) messages.Add(new TObjString("TDCs are OK!"));
249 else if(rv<1. && rv>0.75) messages.Add(new TObjString("Minor problem with TDCs"));
250 else{
251 messages.Add(new TObjString("Serious problem in ZDC timing"));
252 messages.Add(new TObjString("IF THIS IS NOT A TECHNICAL RUN"));
253 }
254 SetupHisto(messages, *hdata, rv);
255 }
256 irawHisto++;
257
258 }
259 // -------------------------------------------------------------------
260 else if(index == AliQAv1::kREC) {
261 //
262 // Check REC HIGH GAIN CHAIN histos
263 if(hdata->GetEntries()>0){
264 if(irecHisto==0) meanZNC = hdata->GetMean();
265 else if(irecHisto==1) meanZNA = hdata->GetMean();
266 else if(irecHisto==2) meanZPC = hdata->GetMean();
267 else if(irecHisto==3) meanZPA = hdata->GetMean();
268 else if(irecHisto==4) pmQZNC = hdata->GetMean();
269 else if(irecHisto==5) pmQZNA = hdata->GetMean();
270 else if(irecHisto==6) pmQZPC = hdata->GetMean();
271 else if(irecHisto==7) pmQZPA = hdata->GetMean();
272 else if(irecHisto==8) pmCZNC = hdata->GetMean();
273 else if(irecHisto==9) pmCZNA = hdata->GetMean();
274 else if(irecHisto==10) pmCZPC = hdata->GetMean();
275 else if(irecHisto==11) pmCZPA = hdata->GetMean();
276 }
277 //
278 // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff
279 if(irecHisto==11){
280 if(TMath::Abs(meanZNC)>1.e-10){
281 if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)<percentageDiff)
282 res=1.;
283 else
284 res=.5;
285 test[specie] += res;
286 count++;
287 }
288 if(TMath::Abs(meanZNA)>1.e-10){
289 if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)<percentageDiff)
290 res=1.;
291 else
292 res=.5;
293 test[specie] += res;
294 count++;
295 }
296 if(TMath::Abs(meanZPC)>1.e-10){
297 if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)<percentageDiff)
298 res=1.;
299 else
300 res=.5;
301 test[specie] += res;
302 count++;
303 }
304 if(TMath::Abs(meanZPA)>1.e-10){
305 if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)<percentageDiff)
306 res=1.;
307 else
308 res=.5;
309 test[specie] += res;
310 count++;
311 }
312 }
313 irecHisto++;
314 }
315 // -------------------------------------------------------------------
316 else if(index == AliQAv1::kESD) {
317 //
318 // Check ESD HIGH GAIN CHAIN histos
319 if(hdata->GetEntries()>0){
320 if(esdInd==2) sumADCZNC = hdata->GetMean();
321 else if(esdInd==3) sumADCZNA = hdata->GetMean();
322 else if(esdInd==4) sumADCZPC = hdata->GetMean();
323 else if(esdInd==5) sumADCZPA = hdata->GetMean();
324 else if(esdInd==8) pmQZNC = hdata->GetMean();
325 else if(esdInd==9) pmQZNA = hdata->GetMean();
326 else if(esdInd==10) pmQZPC = hdata->GetMean();
327 else if(esdInd==11) pmQZPA = hdata->GetMean();
328 else if(esdInd==12) pmCZNC = hdata->GetMean();
329 else if(esdInd==13) pmCZNA = hdata->GetMean();
330 else if(esdInd==14) pmCZPC = hdata->GetMean();
331 else if(esdInd==15) pmCZPA = hdata->GetMean();
332 }
333 //
334 // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff
335 if(esdInd==15){
336 if(TMath::Abs(sumADCZNC)>1.e-10){
337 if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)<percentageDiff)
338 res=1.;
339 else
340 res=.5;
341 test[specie] += res;
342 count++;
343 }
344 if(TMath::Abs(sumADCZNA)>1.e-10){
345 if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)<percentageDiff)
346 res=1.;
347 else
348 res=.5;
349 test[specie] += res;
350 count++;
351 }
352 if(TMath::Abs(sumADCZPC)>1.e-10){
353 if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)<percentageDiff)
354 res=1.;
355 else
356 res=.5;
357 test[specie] += res;
358 count++;
359 }
360 if(TMath::Abs(sumADCZPA)>1.e-10){
361 if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)<percentageDiff)
362 res=1.;
363 else
364 res=.5;
365 test[specie] += res;
366 count++;
367 }
368 }
369 esdInd++;
370 }
371 else {
372 AliWarning(Form("\n\t No ZDC QA for %s task\n",taskName));
373 return ;
374 }
375 }//if(hdata)
376 else AliError("AliZDCQAChecker-> No histos!!!\n");
377 }
378 } // LowMult (p-p)
379 // ====================================================================
380 // Checks for A-A events
381 // ====================================================================
382 else if (AliRecoParam::ConvertIndex(specie) == AliRecoParam::kHighMult) {
383 if(list[specie]->GetEntries()==0){
384 AliWarning("\t The list to be checked is empty!");
385 return ;
386 }
387 //AliDebug(AliQAv1::GetQADebugLevel(), Form("\n\tAliZDCQAChecker-> checking QA histograms for task %s\n\n",taskName));
388 //
389 TIter next(list[specie]);
390 count = 0;
391 TH1 * hdata;
392
393 Float_t res=0., percentageDiff=0.10;
394 Float_t meanZNA=0., meanZNC=0., meanZPA=0., meanZPC=0.;
395 Float_t pmCZNA=0., pmCZNC=0., pmCZPA=0., pmCZPC=0.;
396 Float_t pmQZNA=0., pmQZNC=0., pmQZPA=0., pmQZPC=0.;
397 Float_t sumADCZNA=0., sumADCZNC=0., sumADCZPA=0., sumADCZPC=0.;
398 Float_t adcCZNA=0., adcCZNC=0., adcCZPA=0., adcCZPC=0.;
399 Float_t adcQZNA=0., adcQZNC=0., adcQZPA=0., adcQZPC=0.;
400
401 while((hdata = dynamic_cast<TH1 *>(next()))){
402 if(hdata){
403 //AliDebug(AliQAv1::GetQADebugLevel(), Form("\tAliZDCQAChecker-> checking histo %s",hdata->GetName()));
404 // -------------------------------------------------------------------
405 if(index == AliQAv1::kSIM){
406 // Check HITS histos
407 if (!(strncmp(hdata->GetName(),"hHits",5))){
408 if(hdata->GetEntries()>0){
409 if(ihitHisto==0) meanZNC = hdata->GetMean();
410 else if(ihitHisto==1) meanZNA = hdata->GetMean();
411 else if(ihitHisto==2) meanZPC = hdata->GetMean();
412 else if(ihitHisto==3) meanZPA = hdata->GetMean();
413 else if(ihitHisto==4) pmQZNC = hdata->GetMean();
414 else if(ihitHisto==5) pmQZNA = hdata->GetMean();
415 else if(ihitHisto==6) pmQZPC = hdata->GetMean();
416 else if(ihitHisto==7) pmQZPA = hdata->GetMean();
417 else if(ihitHisto==8) pmCZNC = hdata->GetMean();
418 else if(ihitHisto==9) pmCZNA = hdata->GetMean();
419 else if(ihitHisto==10) pmCZPC = hdata->GetMean();
420 else if(ihitHisto==11) pmCZPA = hdata->GetMean();
421 }
422 //
423 // --- Check whether 2*|Mean ZNA - Mean ZNC|/(Mean ZNA + Mean ZNC) < percentageDiff
424 // --- and 2*|Mean ZPA - Mean ZPC|/(Mean ZPA + Mean ZPC) < 2*percentageDiff
425 if(ihitHisto==3){
426 if(TMath::Abs(meanZNC)>1.e-10 && TMath::Abs(meanZNA)>1.e-10){
427 if((2*TMath::Abs(meanZNC-meanZNA)/(meanZNA+meanZNC))<percentageDiff)
428 res=1.;
429 else
430 res=.5;
431 test[specie] += res;
432 count++;
433 }
434 if(TMath::Abs(meanZPC)>1.e-10 && TMath::Abs(meanZPA)>1.e-10){
435 if((TMath::Abs(meanZPC-meanZPA)/(meanZPA+meanZPC))<percentageDiff)
436 res=1.;
437 else
438 res=.5;
439 test[specie] += res;
440 count++;
441 }
442 }
443 // --- Check whether (mean PMQi - PMC)/PMC < percentageDiff
444 if(ihitHisto==11){
445 if(TMath::Abs(meanZNC)>1.e-10){
446 if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)<percentageDiff)
447 res=1.;
448 else
449 res=.5;
450 test[specie] += res;
451 count++;
452 }
453 if(TMath::Abs(meanZNA)>1.e-10){
454 if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)<percentageDiff)
455 res=1.;
456 else
457 res=.5;
458 test[specie] += res;
459 count++;
460 }
461 if(TMath::Abs(meanZPC)>1.e-10){
462 if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)<percentageDiff)
463 res=1.;
464 else
465 res=.5;
466 test[specie] += res;
467 count++;
468 }
469 if(TMath::Abs(meanZPA)>1.e-10){
470 if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)<percentageDiff)
471 res=1.;
472 else
473 res=.5;
474 test[specie] += res;
475 count++;
476 }
477 }
478 ihitHisto++;
479 }
480 // Check DIGITS histos
481 else if (!(strncmp(hdata->GetName(),"hDig",4))){
482 if(hdata->GetEntries()>0){
483 if(idigHisto==0) sumADCZNC = hdata->GetMean();
484 else if(idigHisto==1) sumADCZNA = hdata->GetMean();
485 else if(idigHisto==2) sumADCZPC = hdata->GetMean();
486 else if(idigHisto==3) sumADCZPA = hdata->GetMean();
487 else if(idigHisto==4) adcQZNC = hdata->GetMean();
488 else if(idigHisto==5) adcQZNA = hdata->GetMean();
489 else if(idigHisto==6) adcQZPC = hdata->GetMean();
490 else if(idigHisto==7) adcQZPA = hdata->GetMean();
491 else if(idigHisto==8) adcCZNC = hdata->GetMean();
492 else if(idigHisto==9) adcCZNA = hdata->GetMean();
493 else if(idigHisto==10) adcCZPC = hdata->GetMean();
494 else if(idigHisto==11) adcCZPA = hdata->GetMean();
495 }
496 //
497 // --- Check whether 2*|Mean ZNA - Mean ZNC|/(Mean ZNA + Mean ZNC) < percentageDiff
498 // --- and 2*|Mean ZPA - Mean ZPC|/(Mean ZPA + Mean ZPC) < 2*percentageDiff
499 if(idigHisto==3){
500 if(TMath::Abs(sumADCZNC)>1.e-10 && TMath::Abs(sumADCZNA)>1.e-10){
501 if((2*TMath::Abs(sumADCZNC-sumADCZNA)/(sumADCZNA+sumADCZNC))<percentageDiff)
502 res=1.;
503 else
504 res=.5;
505 test[specie] += res;
506 count++;
507 }
508 if(TMath::Abs(sumADCZPC)>1.e-10 && TMath::Abs(sumADCZPA)>1.e-10){
509 if((TMath::Abs(sumADCZPC-sumADCZPA)/(sumADCZPA+sumADCZPC))<percentageDiff)
510 res=1.;
511 else
512 res=.5;
513 test[specie] += res;
514 count++;
515 }
516 }
517 // --- Check whether (sumADC PMQi - PMC)/PMC < percentageDiff
518 if(idigHisto==11){
519 if(TMath::Abs(sumADCZNC)>1.e-10){
520 if((TMath::Abs(adcQZNC-adcCZNC)/adcCZNC)<percentageDiff)
521 res=1.;
522 else
523 res=.5;
524 test[specie] += res;
525 count++;
526 }
527 if(TMath::Abs(sumADCZNA)>1.e-10){
528 if((TMath::Abs(adcQZNA-adcCZNA)/adcCZNA)<percentageDiff)
529 res=1.;
530 else
531 res=.5;
532 test[specie] += res;
533 count++;
534 }
535 if(TMath::Abs(sumADCZPC)>1.e-10){
536 if((TMath::Abs(adcQZPC-adcCZPC)/adcCZPC)<percentageDiff)
537 res=1.;
538 else
539 res=.5;
540 test[specie] += res;
541 count++;
542 }
543 if(TMath::Abs(sumADCZPA)>1.e-10){
544 if((TMath::Abs(adcQZPA-adcCZPA)/adcCZPA)<percentageDiff)
545 res=1.;
546 else
547 res=.5;
548 test[specie] += res;
549 count++;
550 }
551 }
552 idigHisto++;
553 }
554 }
555 // -------------------------------------------------------------------
556 else if(index == AliQAv1::kRAW){
557 //
558 // Check RAW HIGH GAIN CHAIN histos
559
560 messages.Clear();
561
562 Bool_t iDetPM = kTRUE;
563 // --- Checks
564 if(irawHisto==22){
565 Float_t resADC=0.;
566 for(int ibin=1; ibin<=hdata->GetNbinsX(); ibin++){
567 if((hdata->GetBinContent(ibin))>10.){
568 res=1.;
569 }
570 else if((hdata->GetBinContent(ibin))<10. &&
571 (ibin==1 || ibin==6 || ibin==11 || ibin==12 || ibin==13 || ibin==18)){
572 res=0.5;
573 iDetPM = kFALSE;
574 }
575 //
576 resADC += res;
577 test[specie] += res;
578 count++;
579 }
580 Float_t rv=1.;
581 if(hdata->GetNbinsX() != 0) rv = resADC/hdata->GetNbinsX();
582 if(rv == 1.) messages.Add(new TObjString("ADCs are OK!"));
583 else if(iDetPM==kFALSE){
584 messages.Add(new TObjString("Problem with ADCs!"));
585 messages.Add(new TObjString("IF THIS IS NOT A TECHNICAL RUN"));
586 }
587 else if(iDetPM==kTRUE) messages.Add(new TObjString("Minor problem with ADCs"));
588 SetupHisto(messages, *hdata, rv);
589 }
590 else if(irawHisto==23){
591 Double_t refTDCs[6] = {-322.5,-319.1,-320.9,-319.2,-319.7,-319.2};
592 Float_t resTDC=0.;
593 for(int ibin=1; ibin<=hdata->GetNbinsX(); ibin++){
594 if(TMath::Abs((hdata->GetBinContent(ibin))-refTDCs[ibin-1])<4.){
595 res=1.;
596 }
597 else{
598 res=0.5;
599 }
600 //
601 resTDC += res;
602 test[specie] += res;
603 count++;
604 }
605 Float_t rv=1.;
606 if(hdata->GetNbinsX() != 0) rv = resTDC/hdata->GetNbinsX();
607 if(rv == 1.) messages.Add(new TObjString("TDCs are OK!"));
608 else if(rv<1 && rv>0.9) messages.Add(new TObjString("Minor problem with TDCs"));
609 else{
610 messages.Add(new TObjString("Serious problem in ZDC timing"));
611 messages.Add(new TObjString("IF THIS IS NOT A TECHNICAL RUN"));
612 }
613 SetupHisto(messages, *hdata, rv);
614 }
615 else if(irawHisto==26){
616 Double_t yZNC=hdata->GetBinContent(2);
617 Double_t yZNA=hdata->GetBinContent(4);
618 if(TMath::Abs(yZNC)<0.4 && TMath::Abs(yZNA)<0.4) res=1.;
619 else res=0.5;
620 test[specie] += res;
621 count++;
622 //
623 printf(" yZNC = %1.2f yZNA = %1.2f -> res %1.2f\n",yZNC, yZNA,res);
624 if(res == 1.) messages.Add(new TObjString("ZN positions are OK!"));
625 else{
626 messages.Add(new TObjString("Problem in ZN positions!"));
627 messages.Add(new TObjString("IF THIS IS NOT A TECHNICAL RUN"));
628 }
629 SetupHisto(messages, *hdata, res);
630 }
631 irawHisto++;
632
633 }
634 // -------------------------------------------------------------------
635 else if(index == AliQAv1::kREC){
636 //
637 // Check RAW HIGH GAIN CHAIN histos
638 if(hdata->GetEntries()>0){
639 if(irecHisto==0) meanZNC = hdata->GetMean();
640 else if(irecHisto==1) meanZNA = hdata->GetMean();
641 else if(irecHisto==2) meanZPC = hdata->GetMean();
642 else if(irecHisto==3) meanZPA = hdata->GetMean();
643 else if(irecHisto==4) pmQZNC = hdata->GetMean();
644 else if(irecHisto==5) pmQZNA = hdata->GetMean();
645 else if(irecHisto==6) pmQZPC = hdata->GetMean();
646 else if(irecHisto==7) pmQZPA = hdata->GetMean();
647 else if(irecHisto==8) pmCZNC = hdata->GetMean();
648 else if(irecHisto==9) pmCZNA = hdata->GetMean();
649 else if(irecHisto==10) pmCZPC = hdata->GetMean();
650 else if(irecHisto==11) pmCZPA = hdata->GetMean();
651 }
652 //
653 // --- Check whether 2*|Mean ZNA - Mean ZNC|/(Mean ZNA + Mean ZNC) < percentageDiff
654 // --- and 2*|Mean ZPA - Mean ZPC|/(Mean ZPA + Mean ZPC) < 2*percentageDiff
655 if(irecHisto==3){
656 if(TMath::Abs(meanZNC)>1.e-10 && TMath::Abs(meanZNA)>1.e-10){
657 if((2*TMath::Abs(meanZNC-meanZNA)/(meanZNA+meanZNC))<percentageDiff)
658 res=1.;
659 else
660 res=.5;
661 test[specie] += res;
662 count++;
663 }
664 if(TMath::Abs(meanZPC)>1.e-10 && TMath::Abs(meanZPA)>1.e-10){
665 if((TMath::Abs(meanZPC-meanZPA)/(meanZPA+meanZPC))<percentageDiff)
666 res=1.;
667 else
668 res=.5;
669 test[specie] += res;
670 count++;
671 }
672 }
673 // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff
674 if(irecHisto==11){
675 if((TMath::Abs(meanZNC)>1.e-10) && (pmCZNC>1.e-10)){
676 if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)<percentageDiff)
677 res=1.;
678 else
679 res=.5;
680 test[specie] += res;
681 count++;
682 }
683 if((TMath::Abs(meanZNA)>1.e-10) && (pmCZNA>1.e-10)){
684 if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)<percentageDiff)
685 res=1.;
686 else
687 res=.5;
688 test[specie] += res;
689 count++;
690 }
691 if((TMath::Abs(meanZPC)>1.e-10) && (pmCZPC>1.e-10)){
692 if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)<percentageDiff)
693 res=1.;
694 else
695 res=.5;
696 test[specie] += res;
697 count++;
698 }
699 if((TMath::Abs(meanZPA)>1.e-10) && (pmCZPA>1.e-10)){
700 if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)<percentageDiff)
701 res=1.;
702 else
703 res=.5;
704 test[specie] += res;
705 count++;
706 }
707 }
708 irecHisto++;
709 }
710 // -------------------------------------------------------------------
711 else if(index == AliQAv1::kESD){
712 //
713 // Check ESD HIGH GAIN CHAIN histos
714 if(hdata->GetEntries()>0){
715 if(esdInd==2) sumADCZNC = hdata->GetMean();
716 else if(esdInd==3) sumADCZNA = hdata->GetMean();
717 else if(esdInd==4) sumADCZPC = hdata->GetMean();
718 else if(esdInd==5) sumADCZPA = hdata->GetMean();
719 else if(esdInd==8) pmQZNC = hdata->GetMean();
720 else if(esdInd==9) pmQZNA = hdata->GetMean();
721 else if(esdInd==10) pmQZPC = hdata->GetMean();
722 else if(esdInd==11) pmQZPA = hdata->GetMean();
723 else if(esdInd==12) pmCZNC = hdata->GetMean();
724 else if(esdInd==13) pmCZNA = hdata->GetMean();
725 else if(esdInd==14) pmCZPC = hdata->GetMean();
726 else if(esdInd==15) pmCZPA = hdata->GetMean();
727 }
728 //
729 // --- Check whether 2*|Mean ZNA - Mean ZNC|/(Mean ZNA + Mean ZNC) < percentageDiff
730 // --- and 2*|Mean ZPA - Mean ZPC|/(Mean ZPA + Mean ZPC) < 2*percentageDiff
731 if(esdInd==5){
732 if(TMath::Abs(sumADCZNC)>1.e-10 && TMath::Abs(sumADCZNA)>1.e-10){
733 if((2*TMath::Abs(sumADCZNC-sumADCZNA)/(sumADCZNA+sumADCZNC))<percentageDiff)
734 res=1.;
735 else
736 res=.5;
737 test[specie] += res;
738 count++;
739 }
740 if(TMath::Abs(sumADCZPC)>1.e-10 && TMath::Abs(sumADCZPA)>1.e-10){
741 if((TMath::Abs(sumADCZPC-sumADCZPA)/(sumADCZPA+sumADCZPC))<percentageDiff)
742 res=1.;
743 else
744 res=.5;
745 test[specie] += res;
746 count++;
747 }
748 }
749 // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff
750 if(esdInd==15){
751 if(TMath::Abs(sumADCZNC)>1.e-10){
752 if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)<percentageDiff)
753 res=1.;
754 else
755 res=.5;
756 test[specie] += res;
757 count++;
758 }
759 if(TMath::Abs(sumADCZNA)>1.e-10){
760 if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)<percentageDiff)
761 res=1.;
762 else
763 res=.5;
764 test[specie] += res;
765 count++;
766 }
767/* if(TMath::Abs(sumADCZPC)>1.e-10){
768 if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)<percentageDiff)
769 res=1.;
770 else
771 res=.5;
772 test[specie] += res;
773 count++;
774 }
775 if(TMath::Abs(sumADCZPA)>1.e-10){
776 if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)<percentageDiff)
777 res=1.;
778 else
779 res=.5;
780 test[specie] += res;
781 count++;
782 }
783*/
784 }
785 esdInd++;
786 }
787 else {
788 AliWarning(Form("\n\t No ZDC QA for %s task\n",taskName));
789 return ;
790 }
791 }//if(hdata)
792 else AliError("\t No histos found for ZDC!!!\n");
793 }
794 } // HighMult (Pb-Pb)
795 // ====================================================================
796 // Checks for Calibration events
797 // ====================================================================
798 else if (AliRecoParam::ConvertIndex(specie) == AliRecoParam::kCalib) {
799 AliWarning(Form("\n\t No check implemented in ZDC QA for %s task\n",taskName));
800 return ;
801 } // Calibration
802 // ====================================================================
803 // Checks for cosmic events
804 // ====================================================================
805 else if (AliRecoParam::ConvertIndex(specie) == AliRecoParam::kCosmic) {
806 AliWarning(Form("\n\t No check implemented in ZDC QA for %s task\n",taskName));
807 return ;
808 } // Cosmic
809 if(TMath::Abs(count)>1.e-10) test[specie] = test[specie]/count;
810 AliDebug(AliQAv1::GetQADebugLevel(), Form("\n\t ZDC QA check result = %1.2f\n",test[specie]));
811 } // Loop on species
812}
813
814//___________________________________________________________________
815void AliZDCQAChecker::SetupHisto(const TObjArray& messages, TH1& histo, Float_t& code)
816{
817 //
818 /// Add text to histos
819 //
820
821 TPaveText* text = new TPaveText(0.70,0.70,0.99,0.99,"NDC");
822
823 TIter next(&messages);
824 TObjString* str;
825
826 while ( ( str = static_cast<TObjString*>(next()) ) ){
827 text->AddText(str->String());
828 }
829
830 TString defaultText = "";
831
832 Int_t color = 0;
833 if(code==1.){
834 color = kGreen;
835 defaultText = "Everything is fine!";
836 }
837 else if(code<1. && code>=0.9){
838 color = kYellow;
839 defaultText = "To be monitored in next runs";
840 }
841 else if(code<0.9 && code>=0.6){
842 color = kOrange;
843 defaultText = "notify the expert DURING THE DAY!";
844 }
845 else if(code<0.6){
846 color = kRed;
847 defaultText = "CALL THE EXPERT!!!!";
848 }
849
850
851 text->AddText(defaultText.Data());
852 text->SetFillColor(color);
853
854 //histo.SetFillStyle(1001);
855 //histo.SetFillColor(color);
856
857 histo.SetStats(kFALSE);
858
859 histo.GetListOfFunctions()->Add(text);
860}