X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=EMCAL%2FAliEMCALQAChecker.cxx;h=5ca16afe9d0146b3c1c8b8e100ca5f230791428f;hb=b626371c810c0b068e5c7dcec0337fa06187f3b3;hp=bc00cc09fd65246493ec9906b4127dc474a72ff5;hpb=a57708c8068e7466e6ac6ee3742d85cef0ca9917;p=u%2Fmrichter%2FAliRoot.git diff --git a/EMCAL/AliEMCALQAChecker.cxx b/EMCAL/AliEMCALQAChecker.cxx index bc00cc09fd6..5ca16afe9d0 100644 --- a/EMCAL/AliEMCALQAChecker.cxx +++ b/EMCAL/AliEMCALQAChecker.cxx @@ -110,7 +110,7 @@ void AliEMCALQAChecker::Check(Double_t * test, AliQAv1::ALITASK_t index, TObjArr if ( index == AliQAv1::kRAW ) { CheckRaws(test, list); - printf ("checkers for task %d \n", index) ; + //printf ("checkers for task %d \n", index) ; } if ( index == AliQAv1::kREC) @@ -122,7 +122,7 @@ void AliEMCALQAChecker::Check(Double_t * test, AliQAv1::ALITASK_t index, TObjArr { CheckESD(test, list); } - AliWarning(Form("Checker for task %d not implement for the moment",index)); + //AliWarning(Form("Checker for task %d not implement for the moment",index)); } //______________________________________________________________________________ @@ -199,237 +199,271 @@ void AliEMCALQAChecker::CheckRaws(Double_t * test, TObjArray ** list) TList *lstF = 0; Int_t calibSpecieId = (Int_t)TMath::Log2( AliRecoParam::kCalib ); for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) { + test[specie] = 0.0 ; if ( !AliQAv1::Instance()->IsEventSpecieSet(specie)) continue ; if (list[specie]->GetEntries() == 0) test[specie] = 0. ; // nothing to check else { - //get calib histos - TH2F * hdata = (TH2F*)list[specie]->At(k2DRatioAmp) ; - TH1F * ratio = (TH1F*)list[specie]->At(kRatioDist) ; - - //get L1 histos - TH2F *hL1GammaPatch = (TH2F*)list[specie]->At(kGL1); - TH2F *hL1JetPatch = (TH2F*)list[specie]->At(kJL1); - TH1I *hFrameR = (TH1I*)list[specie]->At(kSTUTRU); - - //calib histo checker first: - - if(hdata->GetEntries()!=0 && ratio->GetEntries()!=0) { - //adding the lines to distinguish different SMs - lstF = hdata->GetListOfFunctions(); - CleanListOfFunctions(lstF); - lstF->Add(fLineCol->Clone()); - for(Int_t iLine = 0; iLine < 4; iLine++) { - lstF->Add(fLineRow[iLine]->Clone()); - } - //Now adding the text to for each SM - for(Int_t iSM = 0 ; iSM < fgknSM ; iSM++){ //number of SMs loop start - lstF->Add(fTextSM[iSM]->Clone()); - } - // - lstF = ratio->GetListOfFunctions(); - CleanListOfFunctions(lstF); - // - //now check the ratio histogram - Double_t binContent = 0. ; - Int_t nGoodTower = 0 ; - Double_t rv = 0. ; - for(Int_t ix = 1; ix <= hdata->GetNbinsX(); ix++) { - for(Int_t iy = 1; iy <= hdata->GetNbinsY(); iy++) { - binContent = hdata->GetBinContent(ix, iy) ; - if (binContent < 1.2 && binContent > 0.8) nGoodTower++ ; - } - } - rv = nGoodTower/nTot ; - printf("%2.2f %% towers out of range [0.8, 1.2]\n", (1-rv)*100); - if(fText){ - lstF->Add(fText->Clone()) ; - fText->Clear() ; - - fText->AddText(Form("%2.2f %% towers out of range [0.8, 1.2]", (1-rv)*100)); - if (rv < ratioThresh) { - test[specie] = ratioThresh; - // 2 lines text info for quality - fText->SetFillColor(2) ; - fText->AddText(Form("EMCAL = NOK, CALL EXPERTS!!!")); - } - else { - test[specie] = 1 - ratioThresh; - fText->SetFillColor(3) ; - fText->AddText(Form("EMCAL = OK, ENJOY...")); - } - }//fText - } // calib histo checking done - - //now L1 checks: - if (specie != calibSpecieId) { - if(hL1GammaPatch->GetEntries() !=0 ) { - lstF = hL1GammaPatch->GetListOfFunctions(); - CleanListOfFunctions(lstF); - - - // Checker for L1GammaPatch - //Double_t dL1GmeanTrig = 1./2961.; - //Double_t dL1GmeanTrigTRU = 1./32.; - //Int_t sigmaG = 100; // deviation from mean value (increased to 100) - //Int_t sigmaGTRU = 5; // deviation from mean value for TRUs - Double_t dL1GEntries = hL1GammaPatch->GetEntries(); - Int_t badL1G[48][64] = {{0}} ; - Int_t badL1GTRU[2][16] = {{0}} ; - Int_t nBadL1G = 0; - Int_t nBadL1GTRU = 0; - Double_t binContentTRU[2][16] = {{0.}}; - for(Int_t ix = 1; ix <= hL1GammaPatch->GetNbinsX(); ix++) { - for(Int_t iy = 1; iy <= hL1GammaPatch->GetNbinsY(); iy++) { - Double_t binContent = hL1GammaPatch->GetBinContent(ix, iy) ; - if (binContent != 0) { - - // fill counter for TRUs - binContentTRU[(Int_t)((ix-1)/24)][(Int_t)((iy-1)/4)] += binContent; - - // OLD METHOD (if a patch triggers > sigmaG * mean value (1/#patch positions total) says "hot spot !") - // if ((double)binContent/(double)dL1GEntries > sigmaG*dL1GmeanTrig) { - // badL1G[ix-1][iy-1] += 1; - // nBadL1G += 1; - // } - - // NEW METHOD (if Rate > Threshold * ( (Number of towers or TRUs * Average rate) - Rate ) --> "hot spot !") - // Thresold = how much does the noisy tower/TRU contribute to the rate - // 1.0 --> Rate of noisy tower/TRU = Rate of all other towers/TRUs - if (binContent/dL1GEntries > ThreshG / ( 1 + ThreshG )) { - badL1G[ix-1][iy-1] += 1; - nBadL1G += 1; - } - } - } - } - - // check TRUs - for(Int_t ix = 1; ix <= 2; ix++) { - for(Int_t iy = 1; iy <= 16; iy++) { - if(binContentTRU[ix-1][iy-1]/dL1GEntries > ThreshG / ( 1 + ThreshG )) { - badL1GTRU[ix-1][iy-1] += 1; - nBadL1GTRU += 1; - } - } - } - - if(fTextL1[0]){ - lstF->Add(fTextL1[0]->Clone()) ; - fTextL1[0]->Clear() ; - - if (nBadL1G == 0 && nBadL1GTRU == 0 ) { - fTextL1[0]->SetFillColor(3) ; - fTextL1[0]->AddText(Form("L1 GAMMA TRIGGER = OK, ENJOY...")); - } - else if (nBadL1G == 0){ - fTextL1[0]->SetFillColor(2) ; - fTextL1[0]->AddText(Form("HOT SPOT IN L1 GAMMA TRIGGER (TRU) = CALL EXPERT!!")); - - } - else{ - fTextL1[0]->SetFillColor(2) ; - fTextL1[0]->AddText(Form("HOT SPOT IN L1 GAMMA TRIGGER = CALL EXPERT!!")); - /* - for(Int_t ix = 1; ix <= hL1GammaPatch->GetNbinsX(); ix++) { - for(Int_t iy = 1; iy <= hL1GammaPatch->GetNbinsY(); iy++) { - if(badL1G[ix-1][iy-1] != 0) printf("L1 Gamma patch with position x = %d, y = %d is out of range\n",ix,iy); - } - } - */ - } - }//fTextL1[0] - }// L1 gamma patch checking done - - if(hL1JetPatch->GetEntries() !=0) { - lstF = hL1JetPatch->GetListOfFunctions(); - CleanListOfFunctions(lstF); - - // Checker for L1JetPatch - //Double_t dL1JmeanTrig = 1/126.; - //Int_t sigmaJ = 5; // deviation from mean value - Double_t dL1JEntries = hL1JetPatch->GetEntries(); - Int_t badL1J[12][16] = {{0}} ; - Int_t nBadL1J = 0; - for(Int_t ix = 1; ix <= hL1JetPatch->GetNbinsX(); ix++) { - for(Int_t iy = 1; iy <= hL1JetPatch->GetNbinsY(); iy++) { - Double_t binContent = hL1JetPatch->GetBinContent(ix, iy) ; - if (binContent != 0) { - - // OLD METHOD (if a patch triggers > sigmaJ * mean value (1/#patch positions total) says "hot spot !") - // if ((double)binContent/(double)dL1JEntries > sigmaJ*dL1JmeanTrig) { - // badL1J[ix-1][iy-1] += 1 ; - // nBadL1J += 1; - // } - - // NEW METHOD (if Rate > Threshold * ( (Number of towers or TRUs * Average rate) - Rate ) --> "hot spot !") - // Threshold: same definitionas for Gamma - if ((double)binContent/(double)dL1JEntries > ThreshJ / ( 1 + ThreshJ )) { - badL1J[ix-1][iy-1] += 1 ; - nBadL1J += 1; - } - } - } - } - - if(fTextL1[1]){ - lstF->Add(fTextL1[1]->Clone()) ; - fTextL1[1]->Clear() ; - - if (nBadL1J == 0) { - fTextL1[1]->SetFillColor(3) ; - fTextL1[1]->AddText(Form("L1 JET TRIGGER = OK, ENJOY...")); - } - else { - fTextL1[1]->SetFillColor(2) ; - fTextL1[1]->AddText(Form("HOT SPOT IN L1 JET TRIGGER = CALL EXPERT!!")); -/* - for(Int_t ix = 1; ix <= hL1JetPatch->GetNbinsX(); ix++) { - for(Int_t iy = 1; iy <= hL1JetPatch->GetNbinsY(); iy++) { - if(badL1J[ix-1][iy-1] != 0) printf("L1 Jet patch with position x = %d, y = %d is out of range\n",(4*ix-4),(4*iy-4)); - } - } -*/ - - } - }//fTextL1[1] - } // L1 Jet patch checking done - } // if (specie != calibSpecieId) .. - - if(hFrameR->GetEntries() !=0) { - lstF = hFrameR->GetListOfFunctions(); - CleanListOfFunctions(lstF); - - Int_t badLink[32] = {0}; - Int_t nBadLink = 0; - for(Int_t ix = 1; ix <= hFrameR->GetNbinsX(); ix++) { - Double_t binContent = hFrameR->GetBinContent(ix) ; - if (binContent == 0) { - badLink[ix-1] += 1; - nBadLink += 1; - } - } - if(fTextL1[2]){ - lstF->Add(fTextL1[2]->Clone()) ; - fTextL1[2]->Clear() ; + //get calib histos + TH2F * hdata = (TH2F*)list[specie]->At(k2DRatioAmp) ; + TH1F * ratio = (TH1F*)list[specie]->At(kRatioDist) ; + + //get L1 histos + TH2F *hL1GammaPatch = (TH2F*)list[specie]->At(kGL1); + TH2F *hL1JetPatch = (TH2F*)list[specie]->At(kJL1); + TH1I *hFrameR = (TH1I*)list[specie]->At(kSTUTRU); + + + // ======================================================================================= + //calib histo checker first: + if( hdata && ratio ){ - if (nBadLink < badLinkThresh) { - fTextL1[2]->SetFillColor(3) ; - fTextL1[2]->AddText(Form("LINK TRU-STU = OK, ENJOY...")); - } - else { - fTextL1[2]->SetFillColor(2) ; - fTextL1[2]->AddText(Form("PROBLEM WITH TRU-STU LINK = CALL EXPERT!!")); -/* - for(Int_t ix = 0; ix <= hFrameR->GetNbinsX(); ix++) { - if(badLink[ix] != 0) printf("STU link with TRU %d is out\n",ix); - } -*/ - } - }//fTextL1[2] - } // Checker for link TRU-STU done - } - + // first clean lines, text (functions) + lstF = hdata->GetListOfFunctions(); + CleanListOfFunctions(lstF); + lstF = ratio->GetListOfFunctions(); + CleanListOfFunctions(lstF); + + if(hdata->GetEntries()!=0 && ratio->GetEntries()!=0) { + + lstF = hdata->GetListOfFunctions(); + + //adding the lines to distinguish different SMs + lstF->Add(fLineCol->Clone()); + for(Int_t iLine = 0; iLine < 5; iLine++) { + lstF->Add(fLineRow[iLine]->Clone()); + } + //Now adding the text to for each SM + for(Int_t iSM = 0 ; iSM < fgknSM ; iSM++){ //number of SMs loop start + lstF->Add(fTextSM[iSM]->Clone()); + } + + + //now check the ratio histogram + lstF = ratio->GetListOfFunctions(); + + Double_t binContent = 0. ; + Int_t nGoodTower = 0 ; + Double_t rv = 0. ; + for(Int_t ix = 1; ix <= hdata->GetNbinsX(); ix++) { + for(Int_t iy = 1; iy <= hdata->GetNbinsY(); iy++) { + binContent = hdata->GetBinContent(ix, iy) ; + if (binContent < 1.2 && binContent > 0.8) nGoodTower++ ; + } + } + rv = nGoodTower/nTot ; + //printf("%2.2f %% towers out of range [0.8, 1.2]\n", (1-rv)*100); + if(fText){ + lstF->Add(fText->Clone()) ; + fText->Clear() ; + + fText->AddText(Form("%2.2f %% towers out of range [0.8, 1.2]", (1-rv)*100)); + if (rv < ratioThresh) { + test[specie] = ratioThresh; + // 2 lines text info for quality + fText->SetFillColor(2) ; + fText->AddText(Form("EMCAL = NOK, CALL EXPERTS!!!")); + } + else { + test[specie] = 1 - ratioThresh; + fText->SetFillColor(3) ; + fText->AddText(Form("EMCAL = OK, ENJOY...")); + } + }//fText + }//calib histo checking done + }//histograms NOT NULL + + // ======================================================================================== + // now L1 checks: + + if( hL1GammaPatch ){ + + // first clean lines, text (functions) + lstF = hL1GammaPatch->GetListOfFunctions(); + CleanListOfFunctions(lstF); + + if (specie != calibSpecieId) { + //if(hL1GammaPatch->GetEntries() !=0 ) { + if(hL1GammaPatch->GetEntries() > 10) { // need some statistics for hot spot calculation + lstF = hL1GammaPatch->GetListOfFunctions(); + + // Checker for L1GammaPatch + //Double_t dL1GmeanTrig = 1./2961.; + //Double_t dL1GmeanTrigTRU = 1./32.; + //Int_t sigmaG = 100; // deviation from mean value (increased to 100) + //Int_t sigmaGTRU = 5; // deviation from mean value for TRUs + Double_t dL1GEntries = hL1GammaPatch->GetEntries(); + Int_t badL1G[48][64] = {{0}} ; + Int_t badL1GTRU[2][16] = {{0}} ; + Int_t nBadL1G = 0; + Int_t nBadL1GTRU = 0; + Double_t binContentTRU[2][16] = {{0.}}; + for(Int_t ix = 1; ix <= hL1GammaPatch->GetNbinsX(); ix++) { + for(Int_t iy = 1; iy <= hL1GammaPatch->GetNbinsY(); iy++) { + Double_t binContent = hL1GammaPatch->GetBinContent(ix, iy) ; + if (binContent != 0) { + + // fill counter for TRUs + binContentTRU[(Int_t)((ix-1)/24)][(Int_t)((iy-1)/4)] += binContent; + + // OLD METHOD (if a patch triggers > sigmaG * mean value (1/#patch positions total) says "hot spot !") + // if ((double)binContent/(double)dL1GEntries > sigmaG*dL1GmeanTrig) { + // badL1G[ix-1][iy-1] += 1; + // nBadL1G += 1; + // } + + // NEW METHOD (if Rate > Threshold * ( (Number of towers or TRUs * Average rate) - Rate ) --> "hot spot !") + // Thresold = how much does the noisy tower/TRU contribute to the rate + // 1.0 --> Rate of noisy tower/TRU = Rate of all other towers/TRUs + if (binContent/dL1GEntries > ThreshG / ( 1 + ThreshG )) { + badL1G[ix-1][iy-1] += 1; + nBadL1G += 1; + } + } + } + } + + // check TRUs + for(Int_t ix = 1; ix <= 2; ix++) { + for(Int_t iy = 1; iy <= 16; iy++) { + if(binContentTRU[ix-1][iy-1]/dL1GEntries > ThreshG / ( 1 + ThreshG )) { + badL1GTRU[ix-1][iy-1] += 1; + nBadL1GTRU += 1; + } + } + } + + if(fTextL1[0]){ + lstF->Add(fTextL1[0]->Clone()) ; + fTextL1[0]->Clear() ; + + if (nBadL1G == 0 && nBadL1GTRU == 0 ) { + fTextL1[0]->SetFillColor(3) ; + fTextL1[0]->AddText(Form("L1 GAMMA TRIGGER = OK, ENJOY...")); + } + else if (nBadL1G == 0){ + fTextL1[0]->SetFillColor(2) ; + fTextL1[0]->AddText(Form("HOT SPOT IN L1 GAMMA TRIGGER (TRU) = CALL EXPERT!!")); + + } + else{ + fTextL1[0]->SetFillColor(2) ; + fTextL1[0]->AddText(Form("HOT SPOT IN L1 GAMMA TRIGGER = CALL EXPERT!!")); + /* + for(Int_t ix = 1; ix <= hL1GammaPatch->GetNbinsX(); ix++) { + for(Int_t iy = 1; iy <= hL1GammaPatch->GetNbinsY(); iy++) { + if(badL1G[ix-1][iy-1] != 0) printf("L1 Gamma patch with position x = %d, y = %d is out of range\n",ix,iy); + } + } + */ + } + }//fTextL1[0] + }// L1 gamma patch checking done + }// if (specie != calibSpecieId) .. + }//hL1GammaPatch NOT NULL + + if( hL1JetPatch ){ + + lstF = hL1JetPatch->GetListOfFunctions(); + CleanListOfFunctions(lstF); + + if (specie != calibSpecieId) { + + //if(hL1JetPatch->GetEntries() !=0) { + if(hL1JetPatch->GetEntries() > 10) { // need some statistics for hot spot calculation + + lstF = hL1JetPatch->GetListOfFunctions(); + + // Checker for L1JetPatch + //Double_t dL1JmeanTrig = 1/126.; + //Int_t sigmaJ = 5; // deviation from mean value + Double_t dL1JEntries = hL1JetPatch->GetEntries(); + Int_t badL1J[12][16] = {{0}} ; + Int_t nBadL1J = 0; + for(Int_t ix = 1; ix <= hL1JetPatch->GetNbinsX(); ix++) { + for(Int_t iy = 1; iy <= hL1JetPatch->GetNbinsY(); iy++) { + Double_t binContent = hL1JetPatch->GetBinContent(ix, iy) ; + if (binContent != 0) { + + // OLD METHOD (if a patch triggers > sigmaJ * mean value (1/#patch positions total) says "hot spot !") + // if ((double)binContent/(double)dL1JEntries > sigmaJ*dL1JmeanTrig) { + // badL1J[ix-1][iy-1] += 1 ; + // nBadL1J += 1; + // } + + // NEW METHOD (if Rate > Threshold * ( (Number of towers or TRUs * Average rate) - Rate ) --> "hot spot !") + // Threshold: same definitionas for Gamma + if ((double)binContent/(double)dL1JEntries > ThreshJ / ( 1 + ThreshJ )) { + badL1J[ix-1][iy-1] += 1 ; + nBadL1J += 1; + } + } + } + } + + if(fTextL1[1]){ + lstF->Add(fTextL1[1]->Clone()) ; + fTextL1[1]->Clear() ; + + if (nBadL1J == 0) { + fTextL1[1]->SetFillColor(3) ; + fTextL1[1]->AddText(Form("L1 JET TRIGGER = OK, ENJOY...")); + } + else { + fTextL1[1]->SetFillColor(2) ; + fTextL1[1]->AddText(Form("HOT SPOT IN L1 JET TRIGGER = CALL EXPERT!!")); + /* + for(Int_t ix = 1; ix <= hL1JetPatch->GetNbinsX(); ix++) { + for(Int_t iy = 1; iy <= hL1JetPatch->GetNbinsY(); iy++) { + if(badL1J[ix-1][iy-1] != 0) printf("L1 Jet patch with position x = %d, y = %d is out of range\n",(4*ix-4),(4*iy-4)); + } + } + */ + + } + }//fTextL1[1] + } // L1 Jet patch checking done + } // if (specie != calibSpecieId) .. + }// hL1JetPatch NOT NULL + + if(hFrameR){ + + lstF = hFrameR->GetListOfFunctions(); + CleanListOfFunctions(lstF); + + if(hFrameR->GetEntries() !=0) { + lstF = hFrameR->GetListOfFunctions(); + + Int_t badLink[32] = {0}; + Int_t nBadLink = 0; + for(Int_t ix = 1; ix <= hFrameR->GetNbinsX(); ix++) { + Double_t binContent = hFrameR->GetBinContent(ix) ; + if (binContent == 0) { + badLink[ix-1] += 1; + nBadLink += 1; + } + } + if(fTextL1[2]){ + lstF->Add(fTextL1[2]->Clone()) ; + fTextL1[2]->Clear() ; + + if (nBadLink < badLinkThresh) { + fTextL1[2]->SetFillColor(3) ; + fTextL1[2]->AddText(Form("LINK TRU-STU = OK, ENJOY...")); + } + else { + fTextL1[2]->SetFillColor(2) ; + fTextL1[2]->AddText(Form("PROBLEM WITH TRU-STU LINK = CALL EXPERT!!")); + /* + for(Int_t ix = 0; ix <= hFrameR->GetNbinsX(); ix++) { + if(badLink[ix] != 0) printf("STU link with TRU %d is out\n",ix); + } + */ + } + }//fTextL1[2] + } // Checker for link TRU-STU done + }//hFrameR NOT NULL + } // species processed } // specie } //______________________________________________________________________________