]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/AliMUONQAChecker.cxx
In mapping:
[u/mrichter/AliRoot.git] / MUON / AliMUONQAChecker.cxx
CommitLineData
8aa336b1 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
bf4d93eb 16// $Id$
17
8aa336b1 18#include "AliMUONQAChecker.h"
19
8aa336b1 20/// \class AliMUONQAChecker
21///
f587a77d 22/// Implementation of AliQACheckerBase for MCH and MTR
8aa336b1 23///
f587a77d 24/// For the moment we only implement the checking of raw data QA for the tracker
25/// by looking at the occupancy at the manu level.
26/// We count the number of manus above a given occupancy threshold, and
27/// depending on that number, the resulting QA flag is warning, error or fatal.
28/// (there's no "info" type in this case).
29///
30/// \author Laurent Aphecetche, Subatech
31
32#include "AliQA.h"
33#include "AliMUONVTrackerData.h"
34#include "AliMpManuIterator.h"
35#include <TDirectory.h>
8aa336b1 36
37/// \cond CLASSIMP
38ClassImp(AliMUONQAChecker)
39/// \endcond
40
41//__________________________________________________________________
42AliMUONQAChecker::AliMUONQAChecker() :
43 AliQACheckerBase("MUON","MUON Quality Assurance Data Maker")
44{
f587a77d 45 /// ctor
8aa336b1 46}
47
48//__________________________________________________________________
49AliMUONQAChecker::~AliMUONQAChecker()
50{
f587a77d 51 /// dtor
8aa336b1 52}
53
54//__________________________________________________________________
55AliMUONQAChecker::AliMUONQAChecker(const AliMUONQAChecker& qac) :
56 AliQACheckerBase(qac.GetName(), qac.GetTitle())
57{
f587a77d 58 /// copy ctor
8aa336b1 59}
60
f587a77d 61//______________________________________________________________________________
62const Double_t
63AliMUONQAChecker::Check(AliQA::ALITASK_t /*index*/)
64{
65 /// Check data
66
67 AliError(Form("This method is not implemented. Should it be ? fDataSubDir = %p (%s)",
68 fDataSubDir, ( fDataSubDir ? fDataSubDir->GetPath() : "")));
69 return 0.0;
70}
71
72//______________________________________________________________________________
73const Double_t
74AliMUONQAChecker::Check(AliQA::ALITASK_t index, TObjArray * list)
75{
76 /// Check objects in list
77
78 if ( index == AliQA::kRAW )
79 {
80 return CheckRaws(list);
81 }
82
83 AliWarning(Form("Checker for task %d not implement for the moment",index));
84 return 0.0;
85}
86
87//______________________________________________________________________________
88const Double_t
89AliMUONQAChecker::CheckRaws(TObjArray * list)
90{
91 TIter next(list);
92 TObject* object;
93 AliMUONVTrackerData* data(0x0);
94
95 while ( (object=next()) && !data )
96 {
97 if (object->InheritsFrom("AliMUONVTrackerData"))
98 {
99 data = static_cast<AliMUONVTrackerData*>(object);
100 }
101 }
102
103 if ( !data )
104 {
105 AliError("Did not find TrackerData in the list !");
106 return 0.0;
107 }
108
109 AliMpManuIterator it;
110 Int_t detElemId;
111 Int_t manuId;
112 Int_t n50(0); // number of manus with occupancy above 0.5
113 Int_t n75(0); // number of manus with occupancy above 0.75
114 Int_t n(0); // number of manus with some occupancy
115
116 while ( it.Next(detElemId,manuId) )
117 {
118 Float_t occ = data->Manu(detElemId,manuId,2);
119 if (occ > 0 ) ++n;
120 if (occ >= 0.5 ) ++n50;
121 if (occ >= 0.75 ) ++n75;
122 }
123
124 AliInfo(Form("n %d n50 %d n75 %d",n,n50,n75));
125
126 if ( n == 0 )
127 {
128 AliError("Oups. Got zero occupancy in all manus ?!");
129 return 0.0;
130 }
131
132 if ( n75 )
133 {
134 AliError(Form("Got %d manus with occupancy above 0.75",n75));
135 return 0.1;
136 }
137
138 if ( n50 )
139 {
140 AliWarning(Form("Got %d manus with occupancy above 0.5",n50));
141 return 0.9;
142 }
143
144 return 1.0;
145}
146
147//______________________________________________________________________________
148void
149AliMUONQAChecker::SetQA(AliQA::ALITASK_t index, const Double_t value) const
150{
151 // sets the QA according the return value of the Check
152
153 AliQA * qa = AliQA::Instance(index);
154
155 qa->UnSet(AliQA::kFATAL);
156 qa->UnSet(AliQA::kWARNING);
157 qa->UnSet(AliQA::kERROR);
158 qa->UnSet(AliQA::kINFO);
159
160 if ( value == 1.0 )
161 {
162 qa->Set(AliQA::kINFO);
163 }
164 else if ( value == 0.0 )
165 {
166 qa->Set(AliQA::kFATAL);
167 }
168 else if ( value > 0.5 )
169 {
170 qa->Set(AliQA::kWARNING);
171 }
172 else
173 {
174 qa->Set(AliQA::kERROR);
175 }
94b4cb08 176}