ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

// $Id$

#include "AliMUONQAChecker.h"

/// \class AliMUONQAChecker
///
/// Implementation of AliQACheckerBase for MCH and MTR
///
/// \author Laurent Aphecetche, Subatech

#include "AliMUONRecoParam.h"
#include "AliMUONTrackerQAChecker.h"
#include "AliMUONTriggerQAChecker.h"
#include "AliCodeTimer.h"
#include "AliMUONQAIndices.h"

/// \cond CLASSIMP
ClassImp(AliMUONQAChecker)
/// \endcond

namespace
{
  const Int_t TRACKER=0;
  const Int_t TRIGGER=1;
}

//__________________________________________________________________
AliMUONQAChecker::AliMUONQAChecker() : 
    AliQACheckerBase("MUON","MUON Quality Assurance Data Maker"),
fCheckers(new TObjArray)
{
	/// ctor
  fCheckers->SetOwner(kTRUE);
  fCheckers->AddAt(new AliMUONTrackerQAChecker(),TRACKER);
  fCheckers->AddAt(new AliMUONTriggerQAChecker(),TRIGGER);
}          

//__________________________________________________________________
AliMUONQAChecker::~AliMUONQAChecker() 
{
	/// dtor
  delete fCheckers;
}

//______________________________________________________________________________
void
AliMUONQAChecker::Check(Double_t* rv, AliQAv1::ALITASK_t index, 
                        TObjArray** list, 
                        const AliDetectorRecoParam * recoParam)
{
  /// Check objects in list
  
  AliCodeTimerAuto(AliQAv1::GetTaskName(index),0);
  
  const AliMUONRecoParam* muonRecoParam = static_cast<const AliMUONRecoParam*>(recoParam);
  AliMUONVQAChecker::ECheckCode* ecc(0x0);

  for ( Int_t i = 0; i < AliRecoParam::kNSpecies; ++i ) 
  {
    rv[i] = -1.0;
  }
  
  for ( Int_t ic = 0; ic <= fCheckers->GetLast(); ++ic )
  {
    if ( ic != TRACKER && ic != TRIGGER ) continue;

    Bool_t trackerRequested(kFALSE);
    Bool_t triggerRequested(kFALSE);
    
    for ( Int_t i = 0; i < AliRecoParam::kNSpecies; ++i ) 
    {
      // no need to take into account detector that was not requested
      if ( ic == TRACKER && AliQAv1::GetData(list,AliMUONQAIndices::kTrackerIsThere,AliRecoParam::ConvertIndex(i)) ) trackerRequested=kTRUE;
      if ( ic == TRIGGER && AliQAv1::GetData(list,AliMUONQAIndices::kTriggerIsThere,AliRecoParam::ConvertIndex(i)) ) triggerRequested=kTRUE;
    }
    
    if ( ic == TRACKER && !trackerRequested ) 
    {
      AliInfo("Skipping tracker check as tracker not requested");
      continue;      
    }
    
    if ( ic == TRIGGER && !triggerRequested ) 
    {
      AliInfo("Skipping trigger check as trigger not requested");
      continue;      
    }
    
    AliMUONVQAChecker* qac = static_cast<AliMUONVQAChecker*>(fCheckers->At(ic));
    
    if ( index == AliQAv1::kRAW ) 
    {    
      ecc = qac->CheckRaws(list,muonRecoParam);
    }

    if ( index == AliQAv1::kREC)
    {
      ecc = qac->CheckRecPoints(list,muonRecoParam);
    }
    
    if ( index == AliQAv1::kESD )
    {
      ecc = qac->CheckESD(list,muonRecoParam);
    }
    
    if ( ecc ) 
    {
      for ( Int_t i = 0; i < AliRecoParam::kNSpecies; ++i ) 
      {
        // no need to take into account detector that was not requested
        if ( ic == TRACKER && AliQAv1::GetData(list,AliMUONQAIndices::kTrackerIsThere,AliRecoParam::ConvertIndex(i))==0x0 ) continue;
        if ( ic == TRIGGER && AliQAv1::GetData(list,AliMUONQAIndices::kTriggerIsThere,AliRecoParam::ConvertIndex(i))==0x0 ) continue;
                
        switch ( ecc[i] ) 
        {
          case AliMUONVQAChecker::kInfo:
            rv[i] = 1.0;
            break;
          case AliMUONVQAChecker::kWarning:
            rv[i] = 0.75;
            break;
          case AliMUONVQAChecker::kError:
            rv[i] = 0.25;
            break;
          case AliMUONVQAChecker::kFatal:
            rv[i] = -1.0;
            break;
          default:
            AliError("Invalid ecc value. FIXME !");
            rv[i] = -1.0;
            break;
        }
      }
    }

    delete[] ecc;
  }
}

//______________________________________________________________________________
void AliMUONQAChecker::Init(const AliQAv1::DETECTORINDEX_t det) 
{
  /// intialises QA and QA checker settings
  AliQAv1::Instance(det) ; 
  Float_t hiValue[AliQAv1::kNBIT] ; 
  Float_t lowValue[AliQAv1::kNBIT] ;
  lowValue[AliQAv1::kINFO]      = 0.999   ; 
  hiValue[AliQAv1::kINFO]       = 1.0 ; 
  hiValue[AliQAv1::kWARNING]    = 0.99 ; 
  lowValue[AliQAv1::kWARNING]   = 0.5 ; 
  lowValue[AliQAv1::kERROR]     = 0.0   ; 
  hiValue[AliQAv1::kERROR]      = 0.5 ; 
  lowValue[AliQAv1::kFATAL]     = -1.0   ; 
  hiValue[AliQAv1::kFATAL]      = 0.0 ; 
  SetHiLo(&hiValue[0], &lowValue[0]) ; 
}
 AliMUONQAChecker.cxx:1
 AliMUONQAChecker.cxx:2
 AliMUONQAChecker.cxx:3
 AliMUONQAChecker.cxx:4
 AliMUONQAChecker.cxx:5
 AliMUONQAChecker.cxx:6
 AliMUONQAChecker.cxx:7
 AliMUONQAChecker.cxx:8
 AliMUONQAChecker.cxx:9
 AliMUONQAChecker.cxx:10
 AliMUONQAChecker.cxx:11
 AliMUONQAChecker.cxx:12
 AliMUONQAChecker.cxx:13
 AliMUONQAChecker.cxx:14
 AliMUONQAChecker.cxx:15
 AliMUONQAChecker.cxx:16
 AliMUONQAChecker.cxx:17
 AliMUONQAChecker.cxx:18
 AliMUONQAChecker.cxx:19
 AliMUONQAChecker.cxx:20
 AliMUONQAChecker.cxx:21
 AliMUONQAChecker.cxx:22
 AliMUONQAChecker.cxx:23
 AliMUONQAChecker.cxx:24
 AliMUONQAChecker.cxx:25
 AliMUONQAChecker.cxx:26
 AliMUONQAChecker.cxx:27
 AliMUONQAChecker.cxx:28
 AliMUONQAChecker.cxx:29
 AliMUONQAChecker.cxx:30
 AliMUONQAChecker.cxx:31
 AliMUONQAChecker.cxx:32
 AliMUONQAChecker.cxx:33
 AliMUONQAChecker.cxx:34
 AliMUONQAChecker.cxx:35
 AliMUONQAChecker.cxx:36
 AliMUONQAChecker.cxx:37
 AliMUONQAChecker.cxx:38
 AliMUONQAChecker.cxx:39
 AliMUONQAChecker.cxx:40
 AliMUONQAChecker.cxx:41
 AliMUONQAChecker.cxx:42
 AliMUONQAChecker.cxx:43
 AliMUONQAChecker.cxx:44
 AliMUONQAChecker.cxx:45
 AliMUONQAChecker.cxx:46
 AliMUONQAChecker.cxx:47
 AliMUONQAChecker.cxx:48
 AliMUONQAChecker.cxx:49
 AliMUONQAChecker.cxx:50
 AliMUONQAChecker.cxx:51
 AliMUONQAChecker.cxx:52
 AliMUONQAChecker.cxx:53
 AliMUONQAChecker.cxx:54
 AliMUONQAChecker.cxx:55
 AliMUONQAChecker.cxx:56
 AliMUONQAChecker.cxx:57
 AliMUONQAChecker.cxx:58
 AliMUONQAChecker.cxx:59
 AliMUONQAChecker.cxx:60
 AliMUONQAChecker.cxx:61
 AliMUONQAChecker.cxx:62
 AliMUONQAChecker.cxx:63
 AliMUONQAChecker.cxx:64
 AliMUONQAChecker.cxx:65
 AliMUONQAChecker.cxx:66
 AliMUONQAChecker.cxx:67
 AliMUONQAChecker.cxx:68
 AliMUONQAChecker.cxx:69
 AliMUONQAChecker.cxx:70
 AliMUONQAChecker.cxx:71
 AliMUONQAChecker.cxx:72
 AliMUONQAChecker.cxx:73
 AliMUONQAChecker.cxx:74
 AliMUONQAChecker.cxx:75
 AliMUONQAChecker.cxx:76
 AliMUONQAChecker.cxx:77
 AliMUONQAChecker.cxx:78
 AliMUONQAChecker.cxx:79
 AliMUONQAChecker.cxx:80
 AliMUONQAChecker.cxx:81
 AliMUONQAChecker.cxx:82
 AliMUONQAChecker.cxx:83
 AliMUONQAChecker.cxx:84
 AliMUONQAChecker.cxx:85
 AliMUONQAChecker.cxx:86
 AliMUONQAChecker.cxx:87
 AliMUONQAChecker.cxx:88
 AliMUONQAChecker.cxx:89
 AliMUONQAChecker.cxx:90
 AliMUONQAChecker.cxx:91
 AliMUONQAChecker.cxx:92
 AliMUONQAChecker.cxx:93
 AliMUONQAChecker.cxx:94
 AliMUONQAChecker.cxx:95
 AliMUONQAChecker.cxx:96
 AliMUONQAChecker.cxx:97
 AliMUONQAChecker.cxx:98
 AliMUONQAChecker.cxx:99
 AliMUONQAChecker.cxx:100
 AliMUONQAChecker.cxx:101
 AliMUONQAChecker.cxx:102
 AliMUONQAChecker.cxx:103
 AliMUONQAChecker.cxx:104
 AliMUONQAChecker.cxx:105
 AliMUONQAChecker.cxx:106
 AliMUONQAChecker.cxx:107
 AliMUONQAChecker.cxx:108
 AliMUONQAChecker.cxx:109
 AliMUONQAChecker.cxx:110
 AliMUONQAChecker.cxx:111
 AliMUONQAChecker.cxx:112
 AliMUONQAChecker.cxx:113
 AliMUONQAChecker.cxx:114
 AliMUONQAChecker.cxx:115
 AliMUONQAChecker.cxx:116
 AliMUONQAChecker.cxx:117
 AliMUONQAChecker.cxx:118
 AliMUONQAChecker.cxx:119
 AliMUONQAChecker.cxx:120
 AliMUONQAChecker.cxx:121
 AliMUONQAChecker.cxx:122
 AliMUONQAChecker.cxx:123
 AliMUONQAChecker.cxx:124
 AliMUONQAChecker.cxx:125
 AliMUONQAChecker.cxx:126
 AliMUONQAChecker.cxx:127
 AliMUONQAChecker.cxx:128
 AliMUONQAChecker.cxx:129
 AliMUONQAChecker.cxx:130
 AliMUONQAChecker.cxx:131
 AliMUONQAChecker.cxx:132
 AliMUONQAChecker.cxx:133
 AliMUONQAChecker.cxx:134
 AliMUONQAChecker.cxx:135
 AliMUONQAChecker.cxx:136
 AliMUONQAChecker.cxx:137
 AliMUONQAChecker.cxx:138
 AliMUONQAChecker.cxx:139
 AliMUONQAChecker.cxx:140
 AliMUONQAChecker.cxx:141
 AliMUONQAChecker.cxx:142
 AliMUONQAChecker.cxx:143
 AliMUONQAChecker.cxx:144
 AliMUONQAChecker.cxx:145
 AliMUONQAChecker.cxx:146
 AliMUONQAChecker.cxx:147
 AliMUONQAChecker.cxx:148
 AliMUONQAChecker.cxx:149
 AliMUONQAChecker.cxx:150
 AliMUONQAChecker.cxx:151
 AliMUONQAChecker.cxx:152
 AliMUONQAChecker.cxx:153
 AliMUONQAChecker.cxx:154
 AliMUONQAChecker.cxx:155
 AliMUONQAChecker.cxx:156
 AliMUONQAChecker.cxx:157
 AliMUONQAChecker.cxx:158
 AliMUONQAChecker.cxx:159
 AliMUONQAChecker.cxx:160
 AliMUONQAChecker.cxx:161
 AliMUONQAChecker.cxx:162
 AliMUONQAChecker.cxx:163
 AliMUONQAChecker.cxx:164
 AliMUONQAChecker.cxx:165
 AliMUONQAChecker.cxx:166
 AliMUONQAChecker.cxx:167
 AliMUONQAChecker.cxx:168
 AliMUONQAChecker.cxx:169
 AliMUONQAChecker.cxx:170
 AliMUONQAChecker.cxx:171