X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ZDC%2FAliZDCQAChecker.cxx;h=71a5d1ae9c246d27cd4cc3e308b51b80c532c05d;hb=f5cb4aecdc46e8874d3e8c21d0c1bed70e18a4a6;hp=a68042fbb3e1793fa593205d4b5e6689b1889bc7;hpb=486788fc5f619cefd44d4ba996a1ff2fce396168;p=u%2Fmrichter%2FAliRoot.git diff --git a/ZDC/AliZDCQAChecker.cxx b/ZDC/AliZDCQAChecker.cxx index a68042fbb3e..71a5d1ae9c2 100644 --- a/ZDC/AliZDCQAChecker.cxx +++ b/ZDC/AliZDCQAChecker.cxx @@ -18,6 +18,9 @@ #include #include #include +#include +#include +#include "TList.h" // --- Standard library --- @@ -28,55 +31,63 @@ ClassImp(AliZDCQAChecker) //____________________________________________________________________________ -Double_t * AliZDCQAChecker::Check(AliQAv1::ALITASK_t index, TObjArray ** list, +void AliZDCQAChecker::Check(Double_t * test, AliQAv1::ALITASK_t index, TObjArray ** list, const AliDetectorRecoParam * /*recoParam*/) { // Checks the QA histograms on the input list: // - Double_t * test = new Double_t[AliRecoParam::kNSpecies] ; - Int_t * ntests = new Int_t[AliRecoParam::kNSpecies] ; const char* taskName = AliQAv1::GetAliTaskName(index); - printf("\n\tAliZDCQAChecker -> checking QA histos for task %s\n",taskName); + //printf("\n\tAliZDCQAChecker -> checking QA histos for task %s\n",taskName); // + Int_t ihitHisto=0, idigHisto=0; + Int_t irecHisto=0, irawHisto=0, esdInd=0; + + TObjArray messages; + messages.SetOwner(kTRUE); + for(Int_t specie = 0; specie specie %d\n\n",specie); + Int_t count = 0; + if(!AliQAv1::Instance(AliQAv1::GetDetIndex(GetName()))->IsEventSpecieSet(AliRecoParam::ConvertIndex(specie))) + continue ; + //printf("\tAliZDCQAChecker -> specie %d, AliRecoParam::ConvertIndex(specie) %d, AliRecoParam::kLowMult %d, IsEventSpecieSet(specie) %d\n", + // specie, AliRecoParam::ConvertIndex(specie) ,AliRecoParam::kLowMult, + // AliQAv1::Instance(AliQAv1::GetDetIndex(GetName()))->IsEventSpecieSet(AliRecoParam::ConvertIndex(specie))); - if(!AliQAv1::Instance()->IsEventSpecieSet(specie)) continue; // ==================================================================== // Checks for p-p events // ==================================================================== - if(specie == AliRecoParam::kLowMult){ + if(AliRecoParam::ConvertIndex(specie) == AliRecoParam::kLowMult){ if(list[specie]->GetEntries()==0){ AliWarning("\t The list to be checked is empty!"); // nothing to check - return test; + return; } //AliDebug(AliQAv1::GetQADebugLevel(), Form("\n\tAliZDCQAChecker-> checking QA histograms for task %s\n\n",taskName)); TIter next(list[specie]); - ntests[specie] = 0; + count = 0; TH1 * hdata; - Float_t res=0., percentageDiff=0.15; + + Float_t res=0., percentageDiff=0.30; + Float_t meanZNA=0., meanZNC=0., meanZPA=0., meanZPC=0.; + Float_t pmCZNA=0., pmCZNC=0., pmCZPA=0., pmCZPC=0.; + Float_t pmQZNA=0., pmQZNC=0., pmQZPA=0., pmQZPC=0.; + Float_t sumADCZNA=0., sumADCZNC=0., sumADCZPA=0., sumADCZPC=0.; + Float_t adcCZNA=0., adcCZNC=0., adcCZPA=0., adcCZPC=0.; + Float_t adcQZNA=0., adcQZNC=0., adcQZPA=0., adcQZPC=0.; + Int_t nentries = -99; + while((hdata = dynamic_cast(next()))){ if(hdata){ // ------------------------------------------------------------------- if(index == AliQAv1::kSIM){ //AliDebug(AliQAv1::GetQADebugLevel(), Form("\tAliZDCQAChecker-> checking histo %s",hdata->GetName())); // Check HITS histos - Float_t sumZNA=0., sumZNC=0., sumZPA=0., sumZPC=0.; - Float_t pmCZNA=0., pmCZNC=0., pmCZPA=0., pmCZPC=0.; - Float_t pmQZNA=0., pmQZNC=0., pmQZPA=0., pmQZPC=0.; - Float_t sumADCZNA=0., sumADCZNC=0., sumADCZPA=0., sumADCZPC=0.; - Float_t adcCZNA=0., adcCZNC=0., adcCZPA=0., adcCZPC=0.; - Float_t adcQZNA=0., adcQZNC=0., adcQZPA=0., adcQZPC=0.; - Int_t ihitHisto=0, idigHisto=0; // if(!(strncmp(hdata->GetName(),"hHits",5))){ if(hdata->GetEntries()>0){ - if(ihitHisto==0) sumZNC = hdata->GetMean(); - else if(ihitHisto==1) sumZNA = hdata->GetMean(); - else if(ihitHisto==2) sumZPC = hdata->GetMean(); - else if(ihitHisto==3) sumZPA = hdata->GetMean(); + if(ihitHisto==0) meanZNC = hdata->GetMean(); + else if(ihitHisto==1) meanZNA = hdata->GetMean(); + else if(ihitHisto==2) meanZPC = hdata->GetMean(); + else if(ihitHisto==3) meanZPA = hdata->GetMean(); else if(ihitHisto==4) pmQZNC = hdata->GetMean(); else if(ihitHisto==5) pmQZNA = hdata->GetMean(); else if(ihitHisto==6) pmQZPC = hdata->GetMean(); @@ -89,37 +100,37 @@ Double_t * AliZDCQAChecker::Check(AliQAv1::ALITASK_t index, TObjArray ** list, // // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff if(ihitHisto==11){ - if(sumZNC!=0){ + if(TMath::Abs(meanZNC)>1.e-10){ if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)1.e-10){ if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)1.e-10){ if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)1.e-10){ if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)1.e-10){ if((TMath::Abs(adcQZNC-adcCZNC)/adcCZNC)1.e-10){ if((TMath::Abs(adcQZNA-adcCZNA)/adcCZNA)1.e-10){ if((TMath::Abs(adcQZPC-adcCZPC)/adcCZPC)1.e-10){ if((TMath::Abs(adcQZPA-adcCZPA)/adcCZPA)GetEntries()>0){ - if(irawHisto==0) sumADCZNC = hdata->GetMean(); - else if(irawHisto==1) sumADCZNA = hdata->GetMean(); - else if(irawHisto==2) sumADCZPC = hdata->GetMean(); - else if(irawHisto==3) sumADCZPA = hdata->GetMean(); - else if(irawHisto==4) adcQZNC = hdata->GetMean(); - else if(irawHisto==5) adcQZNA = hdata->GetMean(); - else if(irawHisto==6) adcQZPC = hdata->GetMean(); - else if(irawHisto==7) adcQZPA = hdata->GetMean(); - else if(irawHisto==8) adcCZNC = hdata->GetMean(); - else if(irawHisto==9) adcCZNA = hdata->GetMean(); - else if(irawHisto==10) adcCZPC = hdata->GetMean(); - else if(irawHisto==11) adcCZPA = hdata->GetMean(); + + messages.Clear(); + + Bool_t iDetPM = kTRUE; + // --- Checks + if(irawHisto==16) nentries = Int_t (hdata->GetEntries()); + if(irawHisto==18){ + Float_t resADC=0.; + for(int ibin=1; ibin<=hdata->GetNbinsX(); ibin++){ + if((hdata->GetBinContent(ibin))>10.){ + res=1.; + } + else if((hdata->GetBinContent(ibin))<10.){ + res=0.5; + if(ibin==1 || ibin==6 || ibin==11 || ibin==12 || ibin==13 || ibin==18){ + iDetPM = kFALSE; + } + } + // + resADC += res; + test[specie] += res; + count++; + } + if(nentries != -99) messages.Add(new TObjString(Form("#entries %d",nentries))); + else messages.Add(new TObjString("#entries not known")); + // + Float_t rv=1.; + if(hdata->GetNbinsX() != 0) rv = resADC/hdata->GetNbinsX(); + if(rv == 1.) messages.Add(new TObjString("ADCs are OK!")); + else if(iDetPM==kFALSE){ + messages.Add(new TObjString("Problem with some ADC!")); + messages.Add(new TObjString("IF THIS IS A PHYSICS RUN")); + } + else if(iDetPM==kTRUE) messages.Add(new TObjString("Minor problem with ADCs")); + SetupHisto(messages, *hdata, rv); } - // - // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff - if(irawHisto==11){ - if(sumADCZNC!=0){ - if((TMath::Abs(adcQZNC-adcCZNC)/adcCZNC)GetNbinsX(); ibin++){ + if(TMath::Abs((hdata->GetBinContent(ibin))-refTDCs[ibin-1])<3.){ + res=1.; + } + else if(TMath::Abs((hdata->GetBinContent(ibin))-refTDCs[ibin-1])<5.){ + res=0.8; + } + else res=0.5; + // + resTDC += res; + test[specie] += res; + count++; + } + Float_t rv=1.; + if(hdata->GetNbinsX() != 0) rv = resTDC/hdata->GetNbinsX(); + if(rv == 1.) messages.Add(new TObjString("TDCs are OK!")); + else if(rv<1. && rv>0.75) messages.Add(new TObjString("Minor problem with TDCs")); + else{ + messages.Add(new TObjString("Serious problem in ZDC timing")); + messages.Add(new TObjString("IF THIS IS A PHYSICS RUN")); + } + SetupHisto(messages, *hdata, rv); } - irawHisto++; + irawHisto++; + } // ------------------------------------------------------------------- else if(index == AliQAv1::kREC) { - Float_t sumZNA=0., sumZNC=0., sumZPA=0., sumZPC=0.; - Float_t pmCZNA=0., pmCZNC=0., pmCZPA=0., pmCZPC=0.; - Float_t pmQZNA=0., pmQZNC=0., pmQZPA=0., pmQZPC=0.; - Int_t irecHisto=0; // // Check REC HIGH GAIN CHAIN histos if(hdata->GetEntries()>0){ - if(irecHisto==0) sumZNC = hdata->GetMean(); - else if(irecHisto==1) sumZNA = hdata->GetMean(); - else if(irecHisto==2) sumZPC = hdata->GetMean(); - else if(irecHisto==3) sumZPA = hdata->GetMean(); + if(irecHisto==0) meanZNC = hdata->GetMean(); + else if(irecHisto==1) meanZNA = hdata->GetMean(); + else if(irecHisto==2) meanZPC = hdata->GetMean(); + else if(irecHisto==3) meanZPA = hdata->GetMean(); else if(irecHisto==4) pmQZNC = hdata->GetMean(); else if(irecHisto==5) pmQZNA = hdata->GetMean(); else if(irecHisto==6) pmQZPC = hdata->GetMean(); @@ -264,57 +281,53 @@ Double_t * AliZDCQAChecker::Check(AliQAv1::ALITASK_t index, TObjArray ** list, // // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff if(irecHisto==11){ - if(sumZNC!=0){ + if(TMath::Abs(meanZNC)>1.e-10){ if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)1.e-10){ if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)1.e-10){ if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)1.e-10){ if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)GetEntries()!=0){ - if(esdInd==2) sumADCZNC = hdata->GetMean(); - else if(esdInd==3) sumADCZNA = hdata->GetMean(); - else if(esdInd==4) sumADCZPC = hdata->GetMean(); - else if(esdInd==5) sumADCZPA = hdata->GetMean(); - else if(esdInd==6) pmQZNC = hdata->GetMean(); - else if(esdInd==7) pmQZNA = hdata->GetMean(); - else if(esdInd==8) pmQZPC = hdata->GetMean(); + if(hdata->GetEntries()>0){ + if(esdInd==0) sumADCZNC = hdata->GetMean(); + else if(esdInd==1) sumADCZNA = hdata->GetMean(); + else if(esdInd==2) sumADCZPC = hdata->GetMean(); + else if(esdInd==3) sumADCZPA = hdata->GetMean(); + else if(esdInd==6) pmQZNC = hdata->GetMean(); + else if(esdInd==7) pmQZNA = hdata->GetMean(); + else if(esdInd==8) pmQZPC = hdata->GetMean(); else if(esdInd==9) pmQZPA = hdata->GetMean(); else if(esdInd==10) pmCZNC = hdata->GetMean(); else if(esdInd==11) pmCZNA = hdata->GetMean(); @@ -323,45 +336,45 @@ Double_t * AliZDCQAChecker::Check(AliQAv1::ALITASK_t index, TObjArray ** list, } // // --- Check whether (sum PMQi - PMC)/PMC < percentageDiff - if(esdInd==13){ - if(sumADCZNC!=0){ + if(esdInd==15){ + if(TMath::Abs(sumADCZNC)>1.e-10){ if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)1.e-10){ if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)1.e-10){ if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)1.e-10){ if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA) No histos!!!\n"); @@ -370,353 +383,336 @@ Double_t * AliZDCQAChecker::Check(AliQAv1::ALITASK_t index, TObjArray ** list, // ==================================================================== // Checks for A-A events // ==================================================================== - else if (specie == AliRecoParam::kHighMult) { + if (AliRecoParam::ConvertIndex(specie) == AliRecoParam::kHighMult) { if(list[specie]->GetEntries()==0){ AliWarning("\t The list to be checked is empty!"); - return test; + return ; } //AliDebug(AliQAv1::GetQADebugLevel(), Form("\n\tAliZDCQAChecker-> checking QA histograms for task %s\n\n",taskName)); // TIter next(list[specie]); - ntests[specie] = 0; + count = 0; TH1 * hdata; + Float_t res=0., percentageDiff=0.10; + Float_t meanZNA=0., meanZNC=0., meanZPA=0., meanZPC=0.; + Float_t pmCZNA=0., pmCZNC=0., pmCZPA=0., pmCZPC=0.; + Float_t pmQZNA=0., pmQZNC=0., pmQZPA=0., pmQZPC=0.; + Float_t sumADCZNA=0., sumADCZNC=0., sumADCZPA=0., sumADCZPC=0.; + Float_t adcCZNA=0., adcCZNC=0., adcCZPA=0., adcCZPC=0.; + Float_t adcQZNA=0., adcQZNC=0., adcQZPA=0., adcQZPC=0.; + Int_t nentries=-99; + while((hdata = dynamic_cast(next()))){ if(hdata){ //AliDebug(AliQAv1::GetQADebugLevel(), Form("\tAliZDCQAChecker-> checking histo %s",hdata->GetName())); // ------------------------------------------------------------------- if(index == AliQAv1::kSIM){ - Float_t meanZNA=0., meanZNC=0., meanZPA=0., meanZPC=0.; - Float_t pmCZNA=0., pmCZNC=0., pmCZPA=0., pmCZPC=0.; - Float_t pmQZNA=0., pmQZNC=0., pmQZPA=0., pmQZPC=0.; - Float_t sumADCZNA=0., sumADCZNC=0., sumADCZPA=0., sumADCZPC=0.; - Float_t adcCZNA=0., adcCZNC=0., adcCZPA=0., adcCZPC=0.; - Float_t adcQZNA=0., adcQZNC=0., adcQZPA=0., adcQZPC=0.; - Int_t hitInd=0, digInd=0; // Check HITS histos if (!(strncmp(hdata->GetName(),"hHits",5))){ if(hdata->GetEntries()>0){ - if(hitInd==0) meanZNC = hdata->GetMean(); - else if(hitInd==1) meanZNA = hdata->GetMean(); - else if(hitInd==2) meanZPC = hdata->GetMean(); - else if(hitInd==3) meanZPA = hdata->GetMean(); - else if(hitInd==4) pmQZNC = hdata->GetMean(); - else if(hitInd==5) pmQZNA = hdata->GetMean(); - else if(hitInd==6) pmQZPC = hdata->GetMean(); - else if(hitInd==7) pmQZPA = hdata->GetMean(); - else if(hitInd==8) pmCZNC = hdata->GetMean(); - else if(hitInd==9) pmCZNA = hdata->GetMean(); - else if(hitInd==10) pmCZPC = hdata->GetMean(); - else if(hitInd==11) pmCZPA = hdata->GetMean(); + if(ihitHisto==0) meanZNC = hdata->GetMean(); + else if(ihitHisto==1) meanZNA = hdata->GetMean(); + else if(ihitHisto==2) meanZPC = hdata->GetMean(); + else if(ihitHisto==3) meanZPA = hdata->GetMean(); + else if(ihitHisto==4) pmQZNC = hdata->GetMean(); + else if(ihitHisto==5) pmQZNA = hdata->GetMean(); + else if(ihitHisto==6) pmQZPC = hdata->GetMean(); + else if(ihitHisto==7) pmQZPA = hdata->GetMean(); + else if(ihitHisto==8) pmCZNC = hdata->GetMean(); + else if(ihitHisto==9) pmCZNA = hdata->GetMean(); + else if(ihitHisto==10) pmCZPC = hdata->GetMean(); + else if(ihitHisto==11) pmCZPA = hdata->GetMean(); } // // --- Check whether 2*|Mean ZNA - Mean ZNC|/(Mean ZNA + Mean ZNC) < percentageDiff // --- and 2*|Mean ZPA - Mean ZPC|/(Mean ZPA + Mean ZPC) < 2*percentageDiff - if(hitInd==3){ - if(meanZNC!=0 && meanZNA!=0){ + if(ihitHisto==3){ + if(TMath::Abs(meanZNC)>1.e-10 && TMath::Abs(meanZNA)>1.e-10){ if((2*TMath::Abs(meanZNC-meanZNA)/(meanZNA+meanZNC))1.e-10 && TMath::Abs(meanZPA)>1.e-10){ if((TMath::Abs(meanZPC-meanZPA)/(meanZPA+meanZPC))1.e-10){ if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)1.e-10){ if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)1.e-10){ if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)1.e-10){ if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)GetName(),"hDig",4))){ if(hdata->GetEntries()>0){ - if(digInd==0) sumADCZNC = hdata->GetMean(); - else if(digInd==1) sumADCZNA = hdata->GetMean(); - else if(digInd==2) sumADCZPC = hdata->GetMean(); - else if(digInd==3) sumADCZPA = hdata->GetMean(); - else if(digInd==4) adcQZNC = hdata->GetMean(); - else if(digInd==5) adcQZNA = hdata->GetMean(); - else if(digInd==6) adcQZPC = hdata->GetMean(); - else if(digInd==7) adcQZPA = hdata->GetMean(); - else if(digInd==8) adcCZNC = hdata->GetMean(); - else if(digInd==9) adcCZNA = hdata->GetMean(); - else if(digInd==10) adcCZPC = hdata->GetMean(); - else if(digInd==11) adcCZPA = hdata->GetMean(); + if(idigHisto==0) sumADCZNC = hdata->GetMean(); + else if(idigHisto==1) sumADCZNA = hdata->GetMean(); + else if(idigHisto==2) sumADCZPC = hdata->GetMean(); + else if(idigHisto==3) sumADCZPA = hdata->GetMean(); + else if(idigHisto==4) adcQZNC = hdata->GetMean(); + else if(idigHisto==5) adcQZNA = hdata->GetMean(); + else if(idigHisto==6) adcQZPC = hdata->GetMean(); + else if(idigHisto==7) adcQZPA = hdata->GetMean(); + else if(idigHisto==8) adcCZNC = hdata->GetMean(); + else if(idigHisto==9) adcCZNA = hdata->GetMean(); + else if(idigHisto==10) adcCZPC = hdata->GetMean(); + else if(idigHisto==11) adcCZPA = hdata->GetMean(); } // // --- Check whether 2*|Mean ZNA - Mean ZNC|/(Mean ZNA + Mean ZNC) < percentageDiff // --- and 2*|Mean ZPA - Mean ZPC|/(Mean ZPA + Mean ZPC) < 2*percentageDiff - if(digInd==3){ - if(sumADCZNC!=0 && sumADCZNA!=0){ + if(idigHisto==3){ + if(TMath::Abs(sumADCZNC)>1.e-10 && TMath::Abs(sumADCZNA)>1.e-10){ if((2*TMath::Abs(sumADCZNC-sumADCZNA)/(sumADCZNA+sumADCZNC))1.e-10 && TMath::Abs(sumADCZPA)>1.e-10){ if((TMath::Abs(sumADCZPC-sumADCZPA)/(sumADCZPA+sumADCZPC))1.e-10){ if((TMath::Abs(adcQZNC-adcCZNC)/adcCZNC)1.e-10){ if((TMath::Abs(adcQZNA-adcCZNA)/adcCZNA)1.e-10){ if((TMath::Abs(adcQZPC-adcCZPC)/adcCZPC)1.e-10){ if((TMath::Abs(adcQZPA-adcCZPA)/adcCZPA)GetEntries()>0){ - if(rawInd==0) sumADCZNC = hdata->GetMean(); - else if(rawInd==1) sumADCZNA = hdata->GetMean(); - else if(rawInd==2) sumADCZPC = hdata->GetMean(); - else if(rawInd==3) sumADCZPA = hdata->GetMean(); - else if(rawInd==4) adcQZNC = hdata->GetMean(); - else if(rawInd==5) adcQZNA = hdata->GetMean(); - else if(rawInd==6) adcQZPC = hdata->GetMean(); - else if(rawInd==7) adcQZPA = hdata->GetMean(); - else if(rawInd==8) adcCZNC = hdata->GetMean(); - else if(rawInd==9) adcCZNA = hdata->GetMean(); - else if(rawInd==10) adcCZPC = hdata->GetMean(); - else if(rawInd==11) adcCZPA = hdata->GetMean(); + + messages.Clear(); + + Bool_t iDetPM = kTRUE; + // --- Checks + if(irawHisto==16) nentries = Int_t (hdata->GetEntries()); + if(irawHisto==18){ + Float_t resADC=0.; + for(int ibin=1; ibin<=hdata->GetNbinsX(); ibin++){ + if((hdata->GetBinContent(ibin))>10.){ + res=1.; + } + else if((hdata->GetBinContent(ibin))<10. && + (ibin==1 || ibin==6 || ibin==11 || ibin==12 || ibin==13 || ibin==18)){ + res=0.5; + iDetPM = kFALSE; + } + // + resADC += res; + test[specie] += res; + count++; + } + if(nentries != -99) messages.Add(new TObjString(Form("#entries %d",nentries))); + else messages.Add(new TObjString("#entries not known")); + // + Float_t rv=1.; + if(hdata->GetNbinsX() != 0) rv = resADC/hdata->GetNbinsX(); + if(rv > 0.98) messages.Add(new TObjString("ADCs are OK!")); + else if(iDetPM==kFALSE){ + messages.Add(new TObjString("Problem with ADCs!")); + messages.Add(new TObjString("IF THIS IS A PHYSICS RUN")); + } + else if(iDetPM==kTRUE) messages.Add(new TObjString("Minor problem with ADCs")); + SetupHisto(messages, *hdata, rv); } - // - // --- Check whether 2*|Mean ZNA - Mean ZNC|/(Mean ZNA + Mean ZNC) < percentageDiff - // --- and 2*|Mean ZPA - Mean ZPC|/(Mean ZPA + Mean ZPC) < 2*percentageDiff - if(rawInd==3){ - if(sumADCZNC!=0 && sumADCZNA!=0){ - if((2*TMath::Abs(sumADCZNC-sumADCZNA)/(sumADCZNA+sumADCZNC))GetNbinsX(); ibin++){ + if(TMath::Abs((hdata->GetBinContent(ibin))-refTDCs[ibin-1])<3.){ + res=1.; + } + else if(TMath::Abs((hdata->GetBinContent(ibin))-refTDCs[ibin-1])<4.){ + res=0.8; + } + else res=0.5; + // + resTDC += res; + test[specie] += res; + count++; + } + Float_t rv=1.; + if(hdata->GetNbinsX() != 0) rv = resTDC/hdata->GetNbinsX(); + if(rv == 1.) messages.Add(new TObjString("TDCs are OK!")); + else if(rv<1 && rv>0.75) messages.Add(new TObjString("Minor problem with TDCs")); + else{ + messages.Add(new TObjString("Serious problem in ZDC timing")); + messages.Add(new TObjString("IF THIS IS A PHYSICS RUN")); + } + SetupHisto(messages, *hdata, rv); } - rawInd++; + irawHisto++; + } // ------------------------------------------------------------------- else if(index == AliQAv1::kREC){ - Float_t sumZNA=0., sumZNC=0., sumZPA=0., sumZPC=0.; - Float_t pmCZNA=0., pmCZNC=0., pmCZPA=0., pmCZPC=0.; - Float_t pmQZNA=0., pmQZNC=0., pmQZPA=0., pmQZPC=0.; - Int_t recInd=0; // // Check RAW HIGH GAIN CHAIN histos if(hdata->GetEntries()>0){ - if(recInd==0) sumZNC = hdata->GetMean(); - else if(recInd==1) sumZNA = hdata->GetMean(); - else if(recInd==2) sumZPC = hdata->GetMean(); - else if(recInd==3) sumZPA = hdata->GetMean(); - else if(recInd==4) pmQZNC = hdata->GetMean(); - else if(recInd==5) pmQZNA = hdata->GetMean(); - else if(recInd==6) pmQZPC = hdata->GetMean(); - else if(recInd==7) pmQZPA = hdata->GetMean(); - else if(recInd==8) pmCZNC = hdata->GetMean(); - else if(recInd==9) pmCZNA = hdata->GetMean(); - else if(recInd==10) pmCZPC = hdata->GetMean(); - else if(recInd==11) pmCZPA = hdata->GetMean(); + if(irecHisto==0) meanZNC = hdata->GetMean(); + else if(irecHisto==1) meanZNA = hdata->GetMean(); + else if(irecHisto==2) meanZPC = hdata->GetMean(); + else if(irecHisto==3) meanZPA = hdata->GetMean(); + else if(irecHisto==4) pmQZNC = hdata->GetMean(); + else if(irecHisto==5) pmQZNA = hdata->GetMean(); + else if(irecHisto==6) pmQZPC = hdata->GetMean(); + else if(irecHisto==7) pmQZPA = hdata->GetMean(); + else if(irecHisto==8) pmCZNC = hdata->GetMean(); + else if(irecHisto==9) pmCZNA = hdata->GetMean(); + else if(irecHisto==10) pmCZPC = hdata->GetMean(); + else if(irecHisto==11) pmCZPA = hdata->GetMean(); } // // --- Check whether 2*|Mean ZNA - Mean ZNC|/(Mean ZNA + Mean ZNC) < percentageDiff // --- and 2*|Mean ZPA - Mean ZPC|/(Mean ZPA + Mean ZPC) < 2*percentageDiff - if(recInd==3){ - if(sumZNC!=0 && sumZNA!=0){ - if((2*TMath::Abs(sumZNC-sumZNA)/(sumZNA+sumZNC))1.e-10 && TMath::Abs(meanZNA)>1.e-10){ + if((2*TMath::Abs(meanZNC-meanZNA)/(meanZNA+meanZNC))1.e-10 && TMath::Abs(meanZPA)>1.e-10){ + if((TMath::Abs(meanZPC-meanZPA)/(meanZPA+meanZPC))1.e-10) && (pmCZNC>1.e-10)){ if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)1.e-10) && (pmCZNA>1.e-10)){ if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)1.e-10) && (pmCZPC>1.e-10)){ if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)1.e-10) && (pmCZPA>1.e-10)){ if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)GetEntries()!=0){ - if(esdInd==2) sumADCZNC = hdata->GetMean(); - else if(esdInd==3) sumADCZNA = hdata->GetMean(); - else if(esdInd==4) sumADCZPC = hdata->GetMean(); - else if(esdInd==5) sumADCZPA = hdata->GetMean(); - else if(esdInd==6) pmQZNC = hdata->GetMean(); - else if(esdInd==7) pmQZNA = hdata->GetMean(); + if(hdata->GetEntries()>0){ + if(esdInd==0) sumADCZNC = hdata->GetMean(); + else if(esdInd==1) sumADCZNA = hdata->GetMean(); + else if(esdInd==2) sumADCZPC = hdata->GetMean(); + else if(esdInd==3) sumADCZPA = hdata->GetMean(); + else if(esdInd==6) pmQZNC = hdata->GetMean(); + else if(esdInd==7) pmQZNA = hdata->GetMean(); else if(esdInd==8) pmQZPC = hdata->GetMean(); else if(esdInd==9) pmQZPA = hdata->GetMean(); else if(esdInd==10) pmCZNC = hdata->GetMean(); @@ -728,63 +724,64 @@ Double_t * AliZDCQAChecker::Check(AliQAv1::ALITASK_t index, TObjArray ** list, // --- Check whether 2*|Mean ZNA - Mean ZNC|/(Mean ZNA + Mean ZNC) < percentageDiff // --- and 2*|Mean ZPA - Mean ZPC|/(Mean ZPA + Mean ZPC) < 2*percentageDiff if(esdInd==5){ - if(sumADCZNC!=0 && sumADCZNA!=0){ + if(TMath::Abs(sumADCZNC)>1.e-10 && TMath::Abs(sumADCZNA)>1.e-10){ if((2*TMath::Abs(sumADCZNC-sumADCZNA)/(sumADCZNA+sumADCZNC))1.e-10 && TMath::Abs(sumADCZPA)>1.e-10){ if((TMath::Abs(sumADCZPC-sumADCZPA)/(sumADCZPA+sumADCZPC))1.e-10){ if((TMath::Abs(pmQZNC-pmCZNC)/pmCZNC)1.e-10){ if((TMath::Abs(pmQZNA-pmCZNA)/pmCZNA)1.e-10){ if((TMath::Abs(pmQZPC-pmCZPC)/pmCZPC)1.e-10){ if((TMath::Abs(pmQZPA-pmCZPA)/pmCZPA)1.e-10) test[specie] = test[specie]/count; AliDebug(AliQAv1::GetQADebugLevel(), Form("\n\t ZDC QA check result = %1.2f\n",test[specie])); - } - delete [] ntests ; - return test; + } // Loop on species } +//___________________________________________________________________ +void AliZDCQAChecker::SetupHisto(const TObjArray& messages, TH1& histo, Float_t& code) +{ + // + /// Add text to histos + // + + TPaveText* text = new TPaveText(0.70,0.70,0.99,0.99,"NDC"); + + TIter next(&messages); + TObjString* str; + + while ( ( str = static_cast(next()) ) ){ + text->AddText(str->String()); + } + + TString defaultText = ""; + + Int_t color = 0; + if(code==1.){ + color = kGreen; + defaultText = "Everything is fine!"; + } + else if(code<1. && code>=0.85){ + color = kYellow; + defaultText = "To be monitored in next runs"; + } + else if(code<0.85 && code>=0.6){ + color = kOrange; + defaultText = "notify the expert DURING THE DAY!"; + } + else if(code<0.6){ + color = kRed; + defaultText = "PLEASE CALL THE EXPERT!!!!"; + } + + + text->AddText(defaultText.Data()); + text->SetFillColor(color); + + //histo.SetFillStyle(1001); + //histo.SetFillColor(color); + + histo.SetStats(kFALSE); + + TList* lst = histo.GetListOfFunctions(); + if(lst){ + TObject *stats = lst->FindObject("stats"); + lst->Remove(stats); + TObject *obj; + while ((obj = lst->First())) { + while(lst->Remove(obj)) { } + delete obj; + } + if(stats) lst->Add(stats); + lst->Add(text); + } +}