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>
22 // --- Standard library ---
24 // --- AliRoot header files ---
26 #include "AliZDCQAChecker.h"
28 ClassImp(AliZDCQAChecker)
30 //____________________________________________________________________________
31 Double_t * AliZDCQAChecker::Check(AliQAv1::ALITASK_t index, TObjArray ** list,
32 AliDetectorRecoParam * /*recoParam*/)
34 // Checks the QA histograms on the input list:
36 Double_t * test = new Double_t[AliRecoParam::kNSpecies] ;
37 Int_t * ntests = new Int_t[AliRecoParam::kNSpecies] ;
38 const char* taskName = AliQAv1::GetAliTaskName(index);
40 for(Int_t specie = 0; specie < AliRecoParam::kNSpecies; specie++) {
43 if ( !AliQAv1::Instance()->IsEventSpecieSet(specie) ) continue ;
44 // ====================================================================
45 // Checks for p-p events
46 // ====================================================================
47 if (specie == AliRecoParam::kLowMult) {
48 if(list[specie]->GetEntries()==0){
49 AliWarning("\t The list to be checked is empty!"); // nothing to check
52 //AliDebug(AliQAv1::GetQADebugLevel(), Form("\n\tAliZDCQAChecker-> checking QA histograms for task %s\n\n",taskName));
53 TIter next(list[specie]);
56 Float_t res=0., percentageDiff=0.15;
57 while((hdata = dynamic_cast<TH1 *>(next()))){
59 // -------------------------------------------------------------------
60 if(index == AliQAv1::kSIM){
61 //AliDebug(AliQAv1::GetQADebugLevel(), Form("\tAliZDCQAChecker-> checking histo %s",hdata->GetName()));
63 Float_t sumZNA=0., sumZNC=0., sumZPA=0., sumZPC=0.;
64 Float_t pmCZNA=0., pmCZNC=0., pmCZPA=0., pmCZPC=0.;
65 Float_t pmQZNA=0., pmQZNC=0., pmQZPA=0., pmQZPC=0.;
66 Float_t sumADCZNA=0., sumADCZNC=0., sumADCZPA=0., sumADCZPC=0.;
67 Float_t adcCZNA=0., adcCZNC=0., adcCZPA=0., adcCZPC=0.;
68 Float_t adcQZNA=0., adcQZNC=0., adcQZPA=0., adcQZPC=0.;
69 Int_t ihitHisto=0, idigHisto=0;
71 if(!(strncmp(hdata->GetName(),"hHits",5))){
72 if(hdata->GetEntries()>0){
73 if(ihitHisto==0) sumZNC = hdata->GetMean();
74 else if(ihitHisto==1) sumZNA = hdata->GetMean();
75 else if(ihitHisto==2) sumZPC = hdata->GetMean();
76 else if(ihitHisto==3) sumZPA = hdata->GetMean();
77 else if(ihitHisto==4) pmQZNC = hdata->GetMean();
78 else if(ihitHisto==5) pmQZNA = hdata->GetMean();
79 else if(ihitHisto==6) pmQZPC = hdata->GetMean();
80 else if(ihitHisto==7) pmQZPA = hdata->GetMean();
81 else if(ihitHisto==8) pmCZNC = hdata->GetMean();
82 else if(ihitHisto==9) pmCZNA = hdata->GetMean();
83 else if(ihitHisto==10) pmCZPC = hdata->GetMean();
84 else if(ihitHisto==11) pmCZPA = hdata->GetMean();
87 // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff
90 if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)<percentageDiff)
98 if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)<percentageDiff)
106 if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)<percentageDiff)
114 if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)<percentageDiff)
124 // Check DIGIT HIGH GAIN CHAIN histos
125 else if(!(strncmp(hdata->GetName(),"hDig",4))){
126 if(hdata->GetEntries()>0){
127 if(idigHisto==0) sumADCZNC = hdata->GetMean();
128 else if(idigHisto==1) sumADCZNA = hdata->GetMean();
129 else if(idigHisto==2) sumADCZPC = hdata->GetMean();
130 else if(idigHisto==3) sumADCZPA = hdata->GetMean();
131 else if(idigHisto==4) pmQZNC = hdata->GetMean();
132 else if(idigHisto==5) pmQZNA = hdata->GetMean();
133 else if(idigHisto==6) pmQZPC = hdata->GetMean();
134 else if(idigHisto==7) pmQZPA = hdata->GetMean();
135 else if(idigHisto==8) pmCZNC = hdata->GetMean();
136 else if(idigHisto==9) pmCZNA = hdata->GetMean();
137 else if(idigHisto==10) pmCZPC = hdata->GetMean();
138 else if(idigHisto==11) pmCZPA = hdata->GetMean();
141 // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff
144 if((TMath::Abs(adcQZNC-adcCZNC)/adcCZNC)<percentageDiff)
152 if((TMath::Abs(adcQZNA-adcCZNA)/adcCZNA)<percentageDiff)
160 if((TMath::Abs(adcQZPC-adcCZPC)/adcCZPC)<percentageDiff)
168 if((TMath::Abs(adcQZPA-adcCZPA)/adcCZPA)<percentageDiff)
179 // -------------------------------------------------------------------
180 else if(index == AliQAv1::kRAW) {
181 Float_t sumADCZNA=0., sumADCZNC=0., sumADCZPA=0., sumADCZPC=0.;
182 Float_t adcCZNA=0., adcCZNC=0., adcCZPA=0., adcCZPC=0.;
183 Float_t adcQZNA=0., adcQZNC=0., adcQZPA=0., adcQZPC=0.;
186 // Check RAW HIGH GAIN CHAIN histos
187 if(hdata->GetEntries()>0){
188 if(irawHisto==0) sumADCZNC = hdata->GetMean();
189 else if(irawHisto==1) sumADCZNA = hdata->GetMean();
190 else if(irawHisto==2) sumADCZPC = hdata->GetMean();
191 else if(irawHisto==3) sumADCZPA = hdata->GetMean();
192 else if(irawHisto==4) adcQZNC = hdata->GetMean();
193 else if(irawHisto==5) adcQZNA = hdata->GetMean();
194 else if(irawHisto==6) adcQZPC = hdata->GetMean();
195 else if(irawHisto==7) adcQZPA = hdata->GetMean();
196 else if(irawHisto==8) adcCZNC = hdata->GetMean();
197 else if(irawHisto==9) adcCZNA = hdata->GetMean();
198 else if(irawHisto==10) adcCZPC = hdata->GetMean();
199 else if(irawHisto==11) adcCZPA = hdata->GetMean();
202 // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff
205 if((TMath::Abs(adcQZNC-adcCZNC)/adcCZNC)<percentageDiff)
213 if((TMath::Abs(adcQZNA-adcCZNA)/adcCZNA)<percentageDiff)
221 if((TMath::Abs(adcQZPC-adcCZPC)/adcCZPC)<percentageDiff)
229 if((TMath::Abs(adcQZPA-adcCZPA)/adcCZPA)<percentageDiff)
239 // -------------------------------------------------------------------
240 else if(index == AliQAv1::kESD) {
241 Float_t sumADCZNA=0., sumADCZNC=0., sumADCZPA=0., sumADCZPC=0.;
242 Float_t pmCZNA=0., pmCZNC=0., pmCZPA=0., pmCZPC=0.;
243 Float_t pmQZNA=0., pmQZNC=0., pmQZPA=0., pmQZPC=0.;
246 // Check ESD HIGH GAIN CHAIN histos
247 if(hdata->GetEntries()!=0){
248 if(esdInd==2) sumADCZNC = hdata->GetMean();
249 else if(esdInd==3) sumADCZNA = hdata->GetMean();
250 else if(esdInd==4) sumADCZPC = hdata->GetMean();
251 else if(esdInd==5) sumADCZPA = hdata->GetMean();
252 else if(esdInd==6) pmQZNC = hdata->GetMean();
253 else if(esdInd==7) pmQZNA = hdata->GetMean();
254 else if(esdInd==8) pmQZPC = hdata->GetMean();
255 else if(esdInd==9) pmQZPA = hdata->GetMean();
256 else if(esdInd==10) pmCZNC = hdata->GetMean();
257 else if(esdInd==11) pmCZNA = hdata->GetMean();
258 else if(esdInd==12) pmCZPC = hdata->GetMean();
259 else if(esdInd==13) pmCZPA = hdata->GetMean();
262 // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff
265 if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)<percentageDiff)
273 if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)<percentageDiff)
281 if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)<percentageDiff)
289 if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)<percentageDiff)
300 AliWarning(Form("\n\t No ZDC QA for %s task\n",taskName));
304 else AliError("AliZDCQAChecker-> No histos!!!\n");
307 // ====================================================================
308 // Checks for A-A events
309 // ====================================================================
310 else if (specie == AliRecoParam::kHighMult) {
311 if(list[specie]->GetEntries()==0){
312 AliWarning("\t The list to be checked is empty!");
315 //AliDebug(AliQAv1::GetQADebugLevel(), Form("\n\tAliZDCQAChecker-> checking QA histograms for task %s\n\n",taskName));
317 TIter next(list[specie]);
320 Float_t res=0., percentageDiff=0.10;
321 while((hdata = dynamic_cast<TH1 *>(next()))){
323 //AliDebug(AliQAv1::GetQADebugLevel(), Form("\tAliZDCQAChecker-> checking histo %s",hdata->GetName()));
324 // -------------------------------------------------------------------
325 if(index == AliQAv1::kSIM){
326 Float_t meanZNA=0., meanZNC=0., meanZPA=0., meanZPC=0.;
327 Float_t pmCZNA=0., pmCZNC=0., pmCZPA=0., pmCZPC=0.;
328 Float_t pmQZNA=0., pmQZNC=0., pmQZPA=0., pmQZPC=0.;
329 Float_t sumADCZNA=0., sumADCZNC=0., sumADCZPA=0., sumADCZPC=0.;
330 Float_t adcCZNA=0., adcCZNC=0., adcCZPA=0., adcCZPC=0.;
331 Float_t adcQZNA=0., adcQZNC=0., adcQZPA=0., adcQZPC=0.;
332 Int_t hitInd=0, digInd=0;
334 if (!(strncmp(hdata->GetName(),"hHits",5))){
335 if(hdata->GetEntries()>0){
336 if(hitInd==0) meanZNC = hdata->GetMean();
337 else if(hitInd==1) meanZNA = hdata->GetMean();
338 else if(hitInd==2) meanZPC = hdata->GetMean();
339 else if(hitInd==3) meanZPA = hdata->GetMean();
340 else if(hitInd==4) pmQZNC = hdata->GetMean();
341 else if(hitInd==5) pmQZNA = hdata->GetMean();
342 else if(hitInd==6) pmQZPC = hdata->GetMean();
343 else if(hitInd==7) pmQZPA = hdata->GetMean();
344 else if(hitInd==8) pmCZNC = hdata->GetMean();
345 else if(hitInd==9) pmCZNA = hdata->GetMean();
346 else if(hitInd==10) pmCZPC = hdata->GetMean();
347 else if(hitInd==11) pmCZPA = hdata->GetMean();
350 // --- Check whether 2*|Mean ZNA - Mean ZNC|/(Mean ZNA + Mean ZNC) < percentageDiff
351 // --- and 2*|Mean ZPA - Mean ZPC|/(Mean ZPA + Mean ZPC) < 2*percentageDiff
353 if(meanZNC!=0 && meanZNA!=0){
354 if((2*TMath::Abs(meanZNC-meanZNA)/(meanZNA+meanZNC))<percentageDiff)
361 if(meanZPC!=0 && meanZPA!=0){
362 if((TMath::Abs(meanZPC-meanZPA)/(meanZPA+meanZPC))<percentageDiff)
370 // --- Check whether (mean PMQi - PMC)/PMC < percentageDiff
373 if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)<percentageDiff)
381 if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)<percentageDiff)
389 if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)<percentageDiff)
397 if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)<percentageDiff)
407 // Check DIGITS histos
408 else if (!(strncmp(hdata->GetName(),"hDig",4))){
409 if(hdata->GetEntries()>0){
410 if(digInd==0) sumADCZNC = hdata->GetMean();
411 else if(digInd==1) sumADCZNA = hdata->GetMean();
412 else if(digInd==2) sumADCZPC = hdata->GetMean();
413 else if(digInd==3) sumADCZPA = hdata->GetMean();
414 else if(digInd==4) adcQZNC = hdata->GetMean();
415 else if(digInd==5) adcQZNA = hdata->GetMean();
416 else if(digInd==6) adcQZPC = hdata->GetMean();
417 else if(digInd==7) adcQZPA = hdata->GetMean();
418 else if(digInd==8) adcCZNC = hdata->GetMean();
419 else if(digInd==9) adcCZNA = hdata->GetMean();
420 else if(digInd==10) adcCZPC = hdata->GetMean();
421 else if(digInd==11) adcCZPA = hdata->GetMean();
424 // --- Check whether 2*|Mean ZNA - Mean ZNC|/(Mean ZNA + Mean ZNC) < percentageDiff
425 // --- and 2*|Mean ZPA - Mean ZPC|/(Mean ZPA + Mean ZPC) < 2*percentageDiff
427 if(sumADCZNC!=0 && sumADCZNA!=0){
428 if((2*TMath::Abs(sumADCZNC-sumADCZNA)/(sumADCZNA+sumADCZNC))<percentageDiff)
435 if(sumADCZPC!=0 && sumADCZPA!=0){
436 if((TMath::Abs(sumADCZPC-sumADCZPA)/(sumADCZPA+sumADCZPC))<percentageDiff)
444 // --- Check whether (sumADC PMQi - PMC)/PMC < percentageDiff
447 if((TMath::Abs(adcQZNC-adcCZNC)/adcCZNC)<percentageDiff)
455 if((TMath::Abs(adcQZNA-adcCZNA)/adcCZNA)<percentageDiff)
463 if((TMath::Abs(adcQZPC-adcCZPC)/adcCZPC)<percentageDiff)
471 if((TMath::Abs(adcQZPA-adcCZPA)/adcCZPA)<percentageDiff)
482 // -------------------------------------------------------------------
483 else if(index == AliQAv1::kRAW){
484 Float_t sumADCZNA=0., sumADCZNC=0., sumADCZPA=0., sumADCZPC=0.;
485 Float_t adcCZNA=0., adcCZNC=0., adcCZPA=0., adcCZPC=0.;
486 Float_t adcQZNA=0., adcQZNC=0., adcQZPA=0., adcQZPC=0.;
489 // Check RAW HIGH GAIN CHAIN histos
490 if(hdata->GetEntries()>0){
491 if(rawInd==0) sumADCZNC = hdata->GetMean();
492 else if(rawInd==1) sumADCZNA = hdata->GetMean();
493 else if(rawInd==2) sumADCZPC = hdata->GetMean();
494 else if(rawInd==3) sumADCZPA = hdata->GetMean();
495 else if(rawInd==4) adcQZNC = hdata->GetMean();
496 else if(rawInd==5) adcQZNA = hdata->GetMean();
497 else if(rawInd==6) adcQZPC = hdata->GetMean();
498 else if(rawInd==7) adcQZPA = hdata->GetMean();
499 else if(rawInd==8) adcCZNC = hdata->GetMean();
500 else if(rawInd==9) adcCZNA = hdata->GetMean();
501 else if(rawInd==10) adcCZPC = hdata->GetMean();
502 else if(rawInd==11) adcCZPA = hdata->GetMean();
505 // --- Check whether 2*|Mean ZNA - Mean ZNC|/(Mean ZNA + Mean ZNC) < percentageDiff
506 // --- and 2*|Mean ZPA - Mean ZPC|/(Mean ZPA + Mean ZPC) < 2*percentageDiff
508 if(sumADCZNC!=0 && sumADCZNA!=0){
509 if((2*TMath::Abs(sumADCZNC-sumADCZNA)/(sumADCZNA+sumADCZNC))<percentageDiff)
516 if(sumADCZPC!=0 && sumADCZPA!=0){
517 if((TMath::Abs(sumADCZPC-sumADCZPA)/(sumADCZPA+sumADCZPC))<percentageDiff)
525 // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff
528 if((TMath::Abs(adcQZNC-adcCZNC)/adcCZNC)<percentageDiff)
536 if((TMath::Abs(adcQZNA-adcCZNA)/adcCZNA)<percentageDiff)
544 if((TMath::Abs(adcQZPC-adcCZPC)/adcCZPC)<percentageDiff)
552 if((TMath::Abs(adcQZPA-adcCZPA)/adcCZPA)<percentageDiff)
562 // -------------------------------------------------------------------
563 else if(index == AliQAv1::kESD){
564 Float_t sumADCZNA=0., sumADCZNC=0., sumADCZPA=0., sumADCZPC=0.;
565 Float_t pmCZNA=0., pmCZNC=0., pmCZPA=0., pmCZPC=0.;
566 Float_t pmQZNA=0., pmQZNC=0., pmQZPA=0., pmQZPC=0.;
569 // Check ESD HIGH GAIN CHAIN histos
570 if(hdata->GetEntries()!=0){
571 if(esdInd==2) sumADCZNC = hdata->GetMean();
572 else if(esdInd==3) sumADCZNA = hdata->GetMean();
573 else if(esdInd==4) sumADCZPC = hdata->GetMean();
574 else if(esdInd==5) sumADCZPA = hdata->GetMean();
575 else if(esdInd==6) pmQZNC = hdata->GetMean();
576 else if(esdInd==7) pmQZNA = hdata->GetMean();
577 else if(esdInd==8) pmQZPC = hdata->GetMean();
578 else if(esdInd==9) pmQZPA = hdata->GetMean();
579 else if(esdInd==10) pmCZNC = hdata->GetMean();
580 else if(esdInd==11) pmCZNA = hdata->GetMean();
581 else if(esdInd==12) pmCZPC = hdata->GetMean();
582 else if(esdInd==13) pmCZPA = hdata->GetMean();
585 // --- Check whether 2*|Mean ZNA - Mean ZNC|/(Mean ZNA + Mean ZNC) < percentageDiff
586 // --- and 2*|Mean ZPA - Mean ZPC|/(Mean ZPA + Mean ZPC) < 2*percentageDiff
588 if(sumADCZNC!=0 && sumADCZNA!=0){
589 if((2*TMath::Abs(sumADCZNC-sumADCZNA)/(sumADCZNA+sumADCZNC))<percentageDiff)
596 if(sumADCZPC!=0 && sumADCZPA!=0){
597 if((TMath::Abs(sumADCZPC-sumADCZPA)/(sumADCZPA+sumADCZPC))<percentageDiff)
605 // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff
608 if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)<percentageDiff)
616 if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)<percentageDiff)
624 if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)<percentageDiff)
632 if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)<percentageDiff)
643 AliWarning(Form("\n\t No ZDC QA for %s task\n",taskName));
647 else AliError("\t No histos found for ZDC!!!\n");
649 } // HighMult (Pb-Pb)
651 AliError(Form("Checking not implemented for %s, %s",
652 AliRecoParam::GetEventSpecieName(AliRecoParam::kCosmic),
653 AliRecoParam::GetEventSpecieName(AliRecoParam::kCalib))) ;
657 for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
658 if(ntests[specie]!=0) test[specie] = test[specie]/ntests[specie];
659 AliDebug(AliQAv1::GetQADebugLevel(), Form("\n\t ZDC QA check result = %1.2f\n",test[specie]));