1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
17 // --- ROOT system ---
19 #include <TIterator.h>
21 #include <TPaveText.h>
22 #include <TObjArray.h>
25 // --- Standard library ---
27 // --- AliRoot header files ---
29 #include "AliZDCQAChecker.h"
31 ClassImp(AliZDCQAChecker)
33 //____________________________________________________________________________
34 void AliZDCQAChecker::Check(Double_t * test, AliQAv1::ALITASK_t index, TObjArray ** list,
35 const AliDetectorRecoParam * /*recoParam*/)
37 // Checks the QA histograms on the input list:
39 const char* taskName = AliQAv1::GetAliTaskName(index);
40 //printf("\n\tAliZDCQAChecker -> checking QA histos for task %s\n",taskName);
42 Int_t ihitHisto=0, idigHisto=0;
43 Int_t irecHisto=0, irawHisto=0, esdInd=0;
46 messages.SetOwner(kTRUE);
48 for(Int_t specie = 0; specie<AliRecoParam::kNSpecies; specie++){
50 if(!AliQAv1::Instance(AliQAv1::GetDetIndex(GetName()))->IsEventSpecieSet(AliRecoParam::ConvertIndex(specie)))
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)));
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
64 //AliDebug(AliQAv1::GetQADebugLevel(), Form("\n\tAliZDCQAChecker-> checking QA histograms for task %s\n\n",taskName));
65 TIter next(list[specie]);
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.;
77 while((hdata = dynamic_cast<TH1 *>(next()))){
79 // -------------------------------------------------------------------
80 if(index == AliQAv1::kSIM){
81 //AliDebug(AliQAv1::GetQADebugLevel(), Form("\tAliZDCQAChecker-> checking histo %s",hdata->GetName()));
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();
100 // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff
102 if(TMath::Abs(meanZNC)>1.e-10){
103 if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)<percentageDiff)
110 if(TMath::Abs(meanZNA)>1.e-10){
111 if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)<percentageDiff)
118 if(TMath::Abs(meanZPC)>1.e-10){
119 if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)<percentageDiff)
126 if(TMath::Abs(meanZPA)>1.e-10){
127 if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)<percentageDiff)
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();
154 // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff
156 if(TMath::Abs(sumADCZNC)>1.e-10){
157 if((TMath::Abs(adcQZNC-adcCZNC)/adcCZNC)<percentageDiff)
164 if(TMath::Abs(sumADCZNA)>1.e-10){
165 if((TMath::Abs(adcQZNA-adcCZNA)/adcCZNA)<percentageDiff)
172 if(TMath::Abs(sumADCZPC)>1.e-10){
173 if((TMath::Abs(adcQZPC-adcCZPC)/adcCZPC)<percentageDiff)
180 if(TMath::Abs(sumADCZPA)>1.e-10){
181 if((TMath::Abs(adcQZPA-adcCZPA)/adcCZPA)<percentageDiff)
192 // -------------------------------------------------------------------
193 else if(index == AliQAv1::kRAW) {
195 // Check RAW HIGH GAIN CHAIN histos
199 Bool_t iDetPM = kTRUE;
203 for(int ibin=1; ibin<=hdata->GetNbinsX(); ibin++){
204 if((hdata->GetBinContent(ibin))>10.){
207 else if((hdata->GetBinContent(ibin))<10.){
209 if(ibin==1 || ibin==6 || ibin==11 || ibin==12 || ibin==13 || ibin==18){
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"));
226 else if(iDetPM==kTRUE) messages.Add(new TObjString("Minor problem with ADCs"));
227 SetupHisto(messages, *hdata, rv);
229 else if(irawHisto==23){
230 Double_t refTDCs[6] = {-325.,-321.6,-323.4,-321.6,-322.2,-321.7};
232 for(int ibin=1; ibin<=hdata->GetNbinsX(); ibin++){
233 if(TMath::Abs((hdata->GetBinContent(ibin))-refTDCs[ibin-1])<12.){
245 if(hdata->GetNbinsX() != 0) rv = resTDC/hdata->GetNbinsX();
246 if(rv == 1.) messages.Add(new TObjString("TDCs are OK!"));
247 else if(rv<1 && rv>0.8) messages.Add(new TObjString("Minor problem with TDCs"));
249 messages.Add(new TObjString("Serious problem in ZDC timing"));
250 messages.Add(new TObjString("IF THIS IS NOT A TECHNICAL RUN"));
252 SetupHisto(messages, *hdata, rv);
257 // -------------------------------------------------------------------
258 else if(index == AliQAv1::kREC) {
260 // Check REC HIGH GAIN CHAIN histos
261 if(hdata->GetEntries()>0){
262 if(irecHisto==0) meanZNC = hdata->GetMean();
263 else if(irecHisto==1) meanZNA = hdata->GetMean();
264 else if(irecHisto==2) meanZPC = hdata->GetMean();
265 else if(irecHisto==3) meanZPA = hdata->GetMean();
266 else if(irecHisto==4) pmQZNC = hdata->GetMean();
267 else if(irecHisto==5) pmQZNA = hdata->GetMean();
268 else if(irecHisto==6) pmQZPC = hdata->GetMean();
269 else if(irecHisto==7) pmQZPA = hdata->GetMean();
270 else if(irecHisto==8) pmCZNC = hdata->GetMean();
271 else if(irecHisto==9) pmCZNA = hdata->GetMean();
272 else if(irecHisto==10) pmCZPC = hdata->GetMean();
273 else if(irecHisto==11) pmCZPA = hdata->GetMean();
276 // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff
278 if(TMath::Abs(meanZNC)>1.e-10){
279 if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)<percentageDiff)
286 if(TMath::Abs(meanZNA)>1.e-10){
287 if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)<percentageDiff)
294 if(TMath::Abs(meanZPC)>1.e-10){
295 if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)<percentageDiff)
302 if(TMath::Abs(meanZPA)>1.e-10){
303 if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)<percentageDiff)
313 // -------------------------------------------------------------------
314 else if(index == AliQAv1::kESD) {
316 // Check ESD HIGH GAIN CHAIN histos
317 if(hdata->GetEntries()>0){
318 if(esdInd==2) sumADCZNC = hdata->GetMean();
319 else if(esdInd==3) sumADCZNA = hdata->GetMean();
320 else if(esdInd==4) sumADCZPC = hdata->GetMean();
321 else if(esdInd==5) sumADCZPA = hdata->GetMean();
322 else if(esdInd==8) pmQZNC = hdata->GetMean();
323 else if(esdInd==9) pmQZNA = hdata->GetMean();
324 else if(esdInd==10) pmQZPC = hdata->GetMean();
325 else if(esdInd==11) pmQZPA = hdata->GetMean();
326 else if(esdInd==12) pmCZNC = hdata->GetMean();
327 else if(esdInd==13) pmCZNA = hdata->GetMean();
328 else if(esdInd==14) pmCZPC = hdata->GetMean();
329 else if(esdInd==15) pmCZPA = hdata->GetMean();
332 // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff
334 if(TMath::Abs(sumADCZNC)>1.e-10){
335 if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)<percentageDiff)
342 if(TMath::Abs(sumADCZNA)>1.e-10){
343 if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)<percentageDiff)
350 if(TMath::Abs(sumADCZPC)>1.e-10){
351 if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)<percentageDiff)
358 if(TMath::Abs(sumADCZPA)>1.e-10){
359 if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)<percentageDiff)
370 AliWarning(Form("\n\t No ZDC QA for %s task\n",taskName));
374 else AliError("AliZDCQAChecker-> No histos!!!\n");
377 // ====================================================================
378 // Checks for A-A events
379 // ====================================================================
380 else if (AliRecoParam::ConvertIndex(specie) == AliRecoParam::kHighMult) {
381 if(list[specie]->GetEntries()==0){
382 AliWarning("\t The list to be checked is empty!");
385 //AliDebug(AliQAv1::GetQADebugLevel(), Form("\n\tAliZDCQAChecker-> checking QA histograms for task %s\n\n",taskName));
387 TIter next(list[specie]);
391 Float_t res=0., percentageDiff=0.10;
392 Float_t meanZNA=0., meanZNC=0., meanZPA=0., meanZPC=0.;
393 Float_t pmCZNA=0., pmCZNC=0., pmCZPA=0., pmCZPC=0.;
394 Float_t pmQZNA=0., pmQZNC=0., pmQZPA=0., pmQZPC=0.;
395 Float_t sumADCZNA=0., sumADCZNC=0., sumADCZPA=0., sumADCZPC=0.;
396 Float_t adcCZNA=0., adcCZNC=0., adcCZPA=0., adcCZPC=0.;
397 Float_t adcQZNA=0., adcQZNC=0., adcQZPA=0., adcQZPC=0.;
399 while((hdata = dynamic_cast<TH1 *>(next()))){
401 //AliDebug(AliQAv1::GetQADebugLevel(), Form("\tAliZDCQAChecker-> checking histo %s",hdata->GetName()));
402 // -------------------------------------------------------------------
403 if(index == AliQAv1::kSIM){
405 if (!(strncmp(hdata->GetName(),"hHits",5))){
406 if(hdata->GetEntries()>0){
407 if(ihitHisto==0) meanZNC = hdata->GetMean();
408 else if(ihitHisto==1) meanZNA = hdata->GetMean();
409 else if(ihitHisto==2) meanZPC = hdata->GetMean();
410 else if(ihitHisto==3) meanZPA = hdata->GetMean();
411 else if(ihitHisto==4) pmQZNC = hdata->GetMean();
412 else if(ihitHisto==5) pmQZNA = hdata->GetMean();
413 else if(ihitHisto==6) pmQZPC = hdata->GetMean();
414 else if(ihitHisto==7) pmQZPA = hdata->GetMean();
415 else if(ihitHisto==8) pmCZNC = hdata->GetMean();
416 else if(ihitHisto==9) pmCZNA = hdata->GetMean();
417 else if(ihitHisto==10) pmCZPC = hdata->GetMean();
418 else if(ihitHisto==11) pmCZPA = hdata->GetMean();
421 // --- Check whether 2*|Mean ZNA - Mean ZNC|/(Mean ZNA + Mean ZNC) < percentageDiff
422 // --- and 2*|Mean ZPA - Mean ZPC|/(Mean ZPA + Mean ZPC) < 2*percentageDiff
424 if(TMath::Abs(meanZNC)>1.e-10 && TMath::Abs(meanZNA)>1.e-10){
425 if((2*TMath::Abs(meanZNC-meanZNA)/(meanZNA+meanZNC))<percentageDiff)
432 if(TMath::Abs(meanZPC)>1.e-10 && TMath::Abs(meanZPA)>1.e-10){
433 if((TMath::Abs(meanZPC-meanZPA)/(meanZPA+meanZPC))<percentageDiff)
441 // --- Check whether (mean PMQi - PMC)/PMC < percentageDiff
443 if(TMath::Abs(meanZNC)>1.e-10){
444 if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)<percentageDiff)
451 if(TMath::Abs(meanZNA)>1.e-10){
452 if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)<percentageDiff)
459 if(TMath::Abs(meanZPC)>1.e-10){
460 if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)<percentageDiff)
467 if(TMath::Abs(meanZPA)>1.e-10){
468 if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)<percentageDiff)
478 // Check DIGITS histos
479 else if (!(strncmp(hdata->GetName(),"hDig",4))){
480 if(hdata->GetEntries()>0){
481 if(idigHisto==0) sumADCZNC = hdata->GetMean();
482 else if(idigHisto==1) sumADCZNA = hdata->GetMean();
483 else if(idigHisto==2) sumADCZPC = hdata->GetMean();
484 else if(idigHisto==3) sumADCZPA = hdata->GetMean();
485 else if(idigHisto==4) adcQZNC = hdata->GetMean();
486 else if(idigHisto==5) adcQZNA = hdata->GetMean();
487 else if(idigHisto==6) adcQZPC = hdata->GetMean();
488 else if(idigHisto==7) adcQZPA = hdata->GetMean();
489 else if(idigHisto==8) adcCZNC = hdata->GetMean();
490 else if(idigHisto==9) adcCZNA = hdata->GetMean();
491 else if(idigHisto==10) adcCZPC = hdata->GetMean();
492 else if(idigHisto==11) adcCZPA = hdata->GetMean();
495 // --- Check whether 2*|Mean ZNA - Mean ZNC|/(Mean ZNA + Mean ZNC) < percentageDiff
496 // --- and 2*|Mean ZPA - Mean ZPC|/(Mean ZPA + Mean ZPC) < 2*percentageDiff
498 if(TMath::Abs(sumADCZNC)>1.e-10 && TMath::Abs(sumADCZNA)>1.e-10){
499 if((2*TMath::Abs(sumADCZNC-sumADCZNA)/(sumADCZNA+sumADCZNC))<percentageDiff)
506 if(TMath::Abs(sumADCZPC)>1.e-10 && TMath::Abs(sumADCZPA)>1.e-10){
507 if((TMath::Abs(sumADCZPC-sumADCZPA)/(sumADCZPA+sumADCZPC))<percentageDiff)
515 // --- Check whether (sumADC PMQi - PMC)/PMC < percentageDiff
517 if(TMath::Abs(sumADCZNC)>1.e-10){
518 if((TMath::Abs(adcQZNC-adcCZNC)/adcCZNC)<percentageDiff)
525 if(TMath::Abs(sumADCZNA)>1.e-10){
526 if((TMath::Abs(adcQZNA-adcCZNA)/adcCZNA)<percentageDiff)
533 if(TMath::Abs(sumADCZPC)>1.e-10){
534 if((TMath::Abs(adcQZPC-adcCZPC)/adcCZPC)<percentageDiff)
541 if(TMath::Abs(sumADCZPA)>1.e-10){
542 if((TMath::Abs(adcQZPA-adcCZPA)/adcCZPA)<percentageDiff)
553 // -------------------------------------------------------------------
554 else if(index == AliQAv1::kRAW){
556 // Check RAW HIGH GAIN CHAIN histos
560 Bool_t iDetPM = kTRUE;
564 for(int ibin=1; ibin<=hdata->GetNbinsX(); ibin++){
565 if((hdata->GetBinContent(ibin))>10.){
568 else if((hdata->GetBinContent(ibin))<10. &&
569 (ibin==1 || ibin==6 || ibin==11 || ibin==12 || ibin==13 || ibin==18)){
579 if(hdata->GetNbinsX() != 0) rv = resADC/hdata->GetNbinsX();
580 if(rv == 1.) messages.Add(new TObjString("ADCs are OK!"));
581 else if(iDetPM==kFALSE){
582 messages.Add(new TObjString("Problem with ADCs!"));
583 messages.Add(new TObjString("IF THIS IS NOT A TECHNICAL RUN"));
585 else if(iDetPM==kTRUE) messages.Add(new TObjString("Minor problem with ADCs"));
586 SetupHisto(messages, *hdata, rv);
588 else if(irawHisto==23){
589 Double_t refTDCs[6] = {-83.0,-78.1,-80.2,-79.3,-81.0,-80.9};
591 for(int ibin=1; ibin<=hdata->GetNbinsX(); ibin++){
592 if(TMath::Abs((hdata->GetBinContent(ibin))-refTDCs[ibin-1])<4.){
604 if(hdata->GetNbinsX() != 0) rv = resTDC/hdata->GetNbinsX();
605 if(rv == 1.) messages.Add(new TObjString("TDCs are OK!"));
606 else if(rv<1 && rv>0.9) messages.Add(new TObjString("Minor problem with TDCs"));
608 messages.Add(new TObjString("Serious problem in ZDC timing"));
609 messages.Add(new TObjString("IF THIS IS NOT A TECHNICAL RUN"));
611 SetupHisto(messages, *hdata, rv);
613 else if(irawHisto==26){
614 Double_t yZNC=hdata->GetBinContent(2);
615 Double_t yZNA=hdata->GetBinContent(4);
616 if(TMath::Abs(yZNC)<0.4 && TMath::Abs(yZNA)<0.4) res=1.;
621 printf(" yZNC = %1.2f yZNA = %1.2f -> res %1.2f\n",yZNC, yZNA,res);
622 if(res == 1.) messages.Add(new TObjString("ZN positions are OK!"));
624 messages.Add(new TObjString("Problem in ZN positions!"));
625 messages.Add(new TObjString("IF THIS IS NOT A TECHNICAL RUN"));
627 SetupHisto(messages, *hdata, res);
632 // -------------------------------------------------------------------
633 else if(index == AliQAv1::kREC){
635 // Check RAW HIGH GAIN CHAIN histos
636 if(hdata->GetEntries()>0){
637 if(irecHisto==0) meanZNC = hdata->GetMean();
638 else if(irecHisto==1) meanZNA = hdata->GetMean();
639 else if(irecHisto==2) meanZPC = hdata->GetMean();
640 else if(irecHisto==3) meanZPA = hdata->GetMean();
641 else if(irecHisto==4) pmQZNC = hdata->GetMean();
642 else if(irecHisto==5) pmQZNA = hdata->GetMean();
643 else if(irecHisto==6) pmQZPC = hdata->GetMean();
644 else if(irecHisto==7) pmQZPA = hdata->GetMean();
645 else if(irecHisto==8) pmCZNC = hdata->GetMean();
646 else if(irecHisto==9) pmCZNA = hdata->GetMean();
647 else if(irecHisto==10) pmCZPC = hdata->GetMean();
648 else if(irecHisto==11) pmCZPA = hdata->GetMean();
651 // --- Check whether 2*|Mean ZNA - Mean ZNC|/(Mean ZNA + Mean ZNC) < percentageDiff
652 // --- and 2*|Mean ZPA - Mean ZPC|/(Mean ZPA + Mean ZPC) < 2*percentageDiff
654 if(TMath::Abs(meanZNC)>1.e-10 && TMath::Abs(meanZNA)>1.e-10){
655 if((2*TMath::Abs(meanZNC-meanZNA)/(meanZNA+meanZNC))<percentageDiff)
662 if(TMath::Abs(meanZPC)>1.e-10 && TMath::Abs(meanZPA)>1.e-10){
663 if((TMath::Abs(meanZPC-meanZPA)/(meanZPA+meanZPC))<percentageDiff)
671 // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff
673 if((TMath::Abs(meanZNC)>1.e-10) && (pmCZNC>1.e-10)){
674 if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)<percentageDiff)
681 if((TMath::Abs(meanZNA)>1.e-10) && (pmCZNA>1.e-10)){
682 if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)<percentageDiff)
689 if((TMath::Abs(meanZPC)>1.e-10) && (pmCZPC>1.e-10)){
690 if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)<percentageDiff)
697 if((TMath::Abs(meanZPA)>1.e-10) && (pmCZPA>1.e-10)){
698 if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)<percentageDiff)
708 // -------------------------------------------------------------------
709 else if(index == AliQAv1::kESD){
711 // Check ESD HIGH GAIN CHAIN histos
712 if(hdata->GetEntries()>0){
713 if(esdInd==2) sumADCZNC = hdata->GetMean();
714 else if(esdInd==3) sumADCZNA = hdata->GetMean();
715 else if(esdInd==4) sumADCZPC = hdata->GetMean();
716 else if(esdInd==5) sumADCZPA = hdata->GetMean();
717 else if(esdInd==8) pmQZNC = hdata->GetMean();
718 else if(esdInd==9) pmQZNA = hdata->GetMean();
719 else if(esdInd==10) pmQZPC = hdata->GetMean();
720 else if(esdInd==11) pmQZPA = hdata->GetMean();
721 else if(esdInd==12) pmCZNC = hdata->GetMean();
722 else if(esdInd==13) pmCZNA = hdata->GetMean();
723 else if(esdInd==14) pmCZPC = hdata->GetMean();
724 else if(esdInd==15) pmCZPA = hdata->GetMean();
727 // --- Check whether 2*|Mean ZNA - Mean ZNC|/(Mean ZNA + Mean ZNC) < percentageDiff
728 // --- and 2*|Mean ZPA - Mean ZPC|/(Mean ZPA + Mean ZPC) < 2*percentageDiff
730 if(TMath::Abs(sumADCZNC)>1.e-10 && TMath::Abs(sumADCZNA)>1.e-10){
731 if((2*TMath::Abs(sumADCZNC-sumADCZNA)/(sumADCZNA+sumADCZNC))<percentageDiff)
738 if(TMath::Abs(sumADCZPC)>1.e-10 && TMath::Abs(sumADCZPA)>1.e-10){
739 if((TMath::Abs(sumADCZPC-sumADCZPA)/(sumADCZPA+sumADCZPC))<percentageDiff)
747 // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff
749 if(TMath::Abs(sumADCZNC)>1.e-10){
750 if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)<percentageDiff)
757 if(TMath::Abs(sumADCZNA)>1.e-10){
758 if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)<percentageDiff)
765 /* if(TMath::Abs(sumADCZPC)>1.e-10){
766 if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)<percentageDiff)
773 if(TMath::Abs(sumADCZPA)>1.e-10){
774 if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)<percentageDiff)
786 AliWarning(Form("\n\t No ZDC QA for %s task\n",taskName));
790 else AliError("\t No histos found for ZDC!!!\n");
792 } // HighMult (Pb-Pb)
793 // ====================================================================
794 // Checks for Calibration events
795 // ====================================================================
796 else if (AliRecoParam::ConvertIndex(specie) == AliRecoParam::kCalib) {
797 AliWarning(Form("\n\t No check implemented in ZDC QA for %s task\n",taskName));
800 // ====================================================================
801 // Checks for cosmic events
802 // ====================================================================
803 else if (AliRecoParam::ConvertIndex(specie) == AliRecoParam::kCosmic) {
804 AliWarning(Form("\n\t No check implemented in ZDC QA for %s task\n",taskName));
807 if(TMath::Abs(count)>1.e-10) test[specie] = test[specie]/count;
808 AliDebug(AliQAv1::GetQADebugLevel(), Form("\n\t ZDC QA check result = %1.2f\n",test[specie]));
812 //___________________________________________________________________
813 void AliZDCQAChecker::SetupHisto(const TObjArray& messages, TH1& histo, Float_t& code)
816 /// Add text to histos
819 TPaveText* text = new TPaveText(0.70,0.70,0.99,0.99,"NDC");
821 TIter next(&messages);
824 while ( ( str = static_cast<TObjString*>(next()) ) ){
825 text->AddText(str->String());
828 TString defaultText = "";
833 defaultText = "Everything is fine!";
835 else if(code<1. && code>=0.9){
837 defaultText = "To be monitored in next runs";
839 else if(code<0.9 && code>=0.6){
841 defaultText = "notify the expert DURING THE DAY!";
845 defaultText = "CALL THE EXPERT!!!!";
849 text->AddText(defaultText.Data());
850 text->SetFillColor(color);
852 //histo.SetFillStyle(1001);
853 //histo.SetFillColor(color);
855 histo.SetStats(kFALSE);
857 histo.GetListOfFunctions()->Add(text);