LCOV - code coverage report
Current view: top level - ACORDE/ACORDEbase - AliACORDEQAChecker.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 12 83 14.5 %
Date: 2016-06-14 17:26:59 Functions: 4 12 33.3 %

          Line data    Source code
       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             : //  Checks the quality assurance for ACORDE. 
      17             : //  Default implementation
      18             : //  Authors:
      19             : //      Mario Rodriguez Cahuantzi <mrodrigu@mail.cern.ch> (FCFM-BUAP) 
      20             : //      Luciano Diaz Gonzalez <luciano.diaz@nucleares.unam.mx> (ICN-UNAM)
      21             : //      Arturo Fernandez <afernan@mail.cern.ch> (FCFM-BUAP)
      22             : //  Last update: Nov. 14t 2009 --> MRC <mrodrigu@mail.cern.ch> (FCFM-BUAP) 
      23             : //...
      24             : 
      25             : // --- ROOT system ---
      26             : #include <TClass.h>
      27             : #include <TH1F.h> 
      28             : #include <TH1I.h> 
      29             : #include <TIterator.h> 
      30             : #include <TKey.h> 
      31             : #include <TFile.h> 
      32             : #include <TPaveText.h>
      33             : #include <TLine.h>
      34             : // --- Standard library ---
      35             : 
      36             : // --- AliRoot header files ---
      37             : #include "AliLog.h"
      38             : #include "AliQAv1.h"
      39             : #include "AliQAChecker.h"
      40             : #include "AliACORDEQAChecker.h"
      41             : #include "AliCDBEntry.h"
      42             : #include "AliQAManager.h"
      43             : 
      44             : /*************************************************************************
      45             :    Last update: Oct. 10th 2011 from Mario RC, <mrodrigu@mail.cern.ch>
      46             :         |-> Adding the checker class for raw and esd index
      47             :         |-> Setting the threshold lines and box for DQM shifter
      48             : 
      49             : *************************************************************************/
      50             : 
      51          12 : ClassImp(AliACORDEQAChecker)
      52             : 
      53             : //____________________________________________________________________________
      54             : 
      55             : AliACORDEQAChecker::AliACORDEQAChecker()  :
      56           3 : AliQACheckerBase("ACORDE","ACORDE Quality Assurance Data Maker"),
      57           9 : fTextDQMShifterInfo(new TPaveText(2.2,0.90,2.9,0.99,"T")),
      58           9 : fMax(new TLine(1,0.5,3,0.5))
      59          15 : {
      60             :         // default constructor
      61           3 :         fMax->SetLineColor(kGreen);
      62           3 :         fMax->SetLineWidth(3);
      63           6 : }
      64             : //____________________________________________________________________________
      65             : AliACORDEQAChecker::~AliACORDEQAChecker()
      66           0 : {
      67             :         // destructor
      68           0 :         delete fTextDQMShifterInfo;
      69           0 :         delete fMax;
      70           0 : }
      71             : //____________________________________________________________________________
      72             : AliACORDEQAChecker::AliACORDEQAChecker(const AliACORDEQAChecker& qac) :
      73           0 : AliQACheckerBase(qac.GetName(), qac.GetTitle()),
      74           0 : fTextDQMShifterInfo(new TPaveText(2.2,0.90,2.9,0.99,"T")),
      75           0 : fMax(static_cast<TLine*>(qac.fMax->Clone()))
      76           0 : {
      77             :         //
      78           0 : }
      79             : //____________________________________________________________________________
      80             : AliACORDEQAChecker& AliACORDEQAChecker::operator = (const AliACORDEQAChecker &qac)
      81             : {
      82             :         // use cpy option from constructor
      83           0 :         if (&qac==this) return *this;
      84           0 :         new (this) AliACORDEQAChecker(qac);
      85           0 :         return *this;
      86           0 : }
      87             : //____________________________________________________________________________
      88             : void AliACORDEQAChecker::Check(Double_t * test, AliQAv1::ALITASK_t /*index*/)
      89             : {
      90           0 :   for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) 
      91           0 :     test[specie] = 0.0 ; 
      92           0 : }
      93             : //____________________________________________________________________________
      94             : void AliACORDEQAChecker::Check(Double_t * test, AliQAv1::ALITASK_t /*index*/, TObjArray ** list, const AliDetectorRecoParam * /*recoParam*/)
      95             : {
      96             : // Close version to the final one for the ACORDE QA Checker
      97             :   
      98             : // Loop over the run species (for specie!= cosmic by now we set QA to INFO) 
      99             :   
     100         117 :   for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) 
     101             :   {
     102          45 :         test[specie] = 1.0;
     103          45 :         if ( !AliQAv1::Instance()->IsEventSpecieSet(specie) ) continue ; 
     104           0 :         if (list[specie]->GetEntries() == 0) test[specie] = 1.; // Nothing to check
     105             :         else 
     106             :         {
     107           0 :                 TIter next(list[specie]) ; 
     108             :                 TH1 * hdata ; // Data created by the AliACORDEQADataMakerXXX (Sim/Rec)
     109           0 :                 while ( (hdata = dynamic_cast<TH1 *>(next())) ) 
     110             :                 {
     111             :                         //if (hdata) 
     112           0 :                         if (hdata->GetEntries()!=0)
     113             :                         { 
     114             :                                 Double_t rv = 0.0 ; 
     115           0 :                                 if(hdata->GetEntries()>0) rv=1; 
     116           0 :                                 AliDebug(AliQAv1::GetQADebugLevel(), Form("%s -> %f", hdata->GetName(), rv)) ; 
     117           0 :                                 TString hdataName = hdata->GetName();
     118             :                                 //if (hdata->GetListOfFunctions()->GetEntries() == 0) continue;  
     119             :                                                 
     120           0 :                                 if (hdataName.Contains("fhACORDEStatusAMU_DQM"))
     121             :                                 {
     122           0 :                                         if (!hdata->GetListOfFunctions()->Contains(fTextDQMShifterInfo))
     123           0 :                                                 hdata->GetListOfFunctions()->Add(fTextDQMShifterInfo);
     124           0 :                                         if (!hdata->GetListOfFunctions()->Contains(fMax))
     125           0 :                                                 hdata->GetListOfFunctions()->Add(fMax);
     126             :                                 }
     127             :                                 // check with OCDB ref. data
     128           0 :                                 if ( (fRefOCDBSubDir[specie]) && (hdataName.Contains("ACORDEBitPattern")) ) 
     129             :                                 {
     130             :                                         TH1 * href = NULL;
     131           0 :                                         if (fRefSubDir) href = static_cast<TH1*>(fRefSubDir->Get(hdata->GetName()));
     132           0 :                                         else if (fRefOCDBSubDir[specie]) href = static_cast<TH1*>(fRefOCDBSubDir[specie]->FindObject(hdata->GetName()));
     133           0 :                                         test[specie] = CheckAcordeRefHits(href,hdata);
     134           0 :                                 }else
     135             :                                 {
     136           0 :                                         if (hdataName.Contains("ACORDEBitPattern"))
     137             :                                                 // Here we use an inner QA Checher without the QAref data
     138             :                                         {
     139           0 :                                                 Float_t acoDataMax = hdata->GetMaximum();
     140             :                                                 Int_t flagAcoQAChecker = 0;
     141           0 :                                                 if (acoDataMax == 0) continue;
     142           0 :                                                 for(Int_t i=0;i<60;i++)
     143             :                                                 {
     144           0 :                                                         if ((hdata->GetBinContent(i)/acoDataMax) < 0.75) flagAcoQAChecker++; 
     145             :                                                 }
     146           0 :                                                 Double_t simpleFlag = 1.-flagAcoQAChecker/60.;
     147           0 :                                                 if ( (simpleFlag >= 0.90) && (simpleFlag <= 1.0) ) test[specie] = 0.75; // INFO
     148           0 :                                                 if ( (simpleFlag >= 0.70) && (simpleFlag < 0.90) ) test[specie] = 0.50; // WARNING
     149           0 :                                                 if ( (simpleFlag >= 0.25) && (simpleFlag < 0.70) ) test[specie] = 0.25; // ERROR
     150           0 :                                                 if ( (simpleFlag >= 0.0) && (simpleFlag < 0.25) )  test[specie] = -1.0; // FATAL
     151           0 :                                                 if (test[specie]>0) rv = test[specie];
     152             :                                                 else rv = 1.0;
     153           0 :                                         }
     154           0 :                                         if (hdataName.Contains("fhACORDEStatusAMU_DQM"))
     155             :                                         {
     156           0 :                                                 Float_t goodModules = hdata->GetBinContent(1);
     157           0 :                                                 Float_t badModules = hdata->GetBinContent(2);
     158           0 :                                                 if (goodModules >= badModules)
     159           0 :                                                         test[specie] = 0.75;
     160           0 :                                                 else test[specie] = 0.30;
     161             :                                                 
     162           0 :                                         }        // check for DQM condition
     163           0 :                                         rv = test[specie];
     164           0 :                                         if (fTextDQMShifterInfo) // DQM-flag asignment
     165             :                                         {
     166           0 :                                                 fTextDQMShifterInfo->Clear();
     167           0 :                                                 if (rv > 0.4){
     168           0 :                                                         fTextDQMShifterInfo->SetFillColor(kGreen);
     169           0 :                                                         fTextDQMShifterInfo->AddText("ACORDE: O.K.");
     170             :                                                 }else{
     171           0 :                                                         fTextDQMShifterInfo->SetFillColor(kRed);
     172           0 :                                                         fTextDQMShifterInfo->AddText("ACORDE: Not, O.K.");
     173             :                                                 }
     174             :                                         } // end DQM flag asignment
     175             :                                 }// NO OCDB checking
     176           0 :                         } // hdata with entries
     177           0 :                         else AliError("Data type cannot be processed") ;
     178             :                 } // loop over histograms from QADataMaker
     179           0 :         }  // end checker
     180           0 :     if ( (specie == AliRecoParam::kHighMult) || (specie == AliRecoParam::kLowMult) || (specie == AliRecoParam::kCalib) ) test[specie] = 0.75;
     181             :   } // end of species
     182           9 : }
     183             : //____________________________________________________________________________
     184             : Double_t AliACORDEQAChecker::CheckAcordeRefHits(const TH1 * href, const TH1 * hdata) const
     185             : {
     186             :         Double_t test = 0.;
     187             :         Int_t flag=0;
     188           0 :         for (Int_t i=0;i<60;i++)
     189             :         {
     190           0 :                 if (TMath::Abs(href->GetBinContent(i)-hdata->GetBinContent(i))>10) flag++;
     191             :         }
     192           0 :         if ((flag>50)&&(flag<=60)) test = -1.;
     193           0 :         if ((flag>30)&&(flag<=50)) test = 0.25;
     194           0 :         if ((flag>10)&&(flag<=30)) test = 0.5;
     195           0 :         if ((flag>0)&&(flag<=10)) test = 0.75;
     196           0 :         return test;
     197             : }

Generated by: LCOV version 1.11