]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONQAChecker.cxx
Comments for Doxygen
[u/mrichter/AliRoot.git] / MUON / AliMUONQAChecker.cxx
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 // $Id$
17
18 #include "AliMUONQAChecker.h"
19
20 /// \class AliMUONQAChecker
21 ///
22 /// Implementation of AliQACheckerBase for MCH and MTR
23 ///
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>
36
37 /// \cond CLASSIMP
38 ClassImp(AliMUONQAChecker)
39 /// \endcond
40
41 //__________________________________________________________________
42 AliMUONQAChecker::AliMUONQAChecker() : 
43     AliQACheckerBase("MUON","MUON Quality Assurance Data Maker") 
44 {
45         /// ctor
46 }          
47
48 //__________________________________________________________________
49 AliMUONQAChecker::~AliMUONQAChecker() 
50 {
51         /// dtor
52 }
53
54 //__________________________________________________________________
55 AliMUONQAChecker::AliMUONQAChecker(const AliMUONQAChecker& qac) : 
56     AliQACheckerBase(qac.GetName(), qac.GetTitle()) 
57 {
58         /// copy ctor 
59 }   
60
61 //______________________________________________________________________________
62 const Double_t 
63 AliMUONQAChecker::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 //______________________________________________________________________________
73 const Double_t 
74 AliMUONQAChecker::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 //______________________________________________________________________________
88 const Double_t 
89 AliMUONQAChecker::CheckRaws(TObjArray * list)
90 {
91   /// Check raws
92
93         TIter next(list);
94         TObject* object;
95         AliMUONVTrackerData* data(0x0);
96   
97         while ( (object=next()) && !data )
98         {
99                 if (object->InheritsFrom("AliMUONVTrackerData"))
100                 {
101                         data = static_cast<AliMUONVTrackerData*>(object);
102                 }
103         }
104
105   if ( !data ) 
106   {
107     AliError("Did not find TrackerData in the list !");
108     return 0.0;
109   }
110   
111   AliMpManuIterator it;
112   Int_t detElemId;
113   Int_t manuId;
114   Int_t n50(0); // number of manus with occupancy above 0.5
115   Int_t n75(0); // number of manus with occupancy above 0.75
116   Int_t n(0); // number of manus with some occupancy
117   
118   while ( it.Next(detElemId,manuId) )
119   {
120     Float_t occ = data->Manu(detElemId,manuId,2);
121     if (occ > 0 ) ++n;
122     if (occ >= 0.5 ) ++n50;
123     if (occ >= 0.75 ) ++n75;    
124   }
125
126   AliInfo(Form("n %d n50 %d n75 %d",n,n50,n75));
127   
128   if ( n == 0 ) 
129   {
130     AliError("Oups. Got zero occupancy in all manus ?!");
131     return 0.0;
132   }
133
134   if ( n75 ) 
135   {
136     AliError(Form("Got %d manus with occupancy above 0.75",n75));
137     return 0.1;
138   }
139     
140   if ( n50 ) 
141   {
142     AliWarning(Form("Got %d manus with occupancy above 0.5",n50));
143     return 0.9;
144   }
145
146         return 1.0;
147 }
148
149 //______________________________________________________________________________
150 void 
151 AliMUONQAChecker::SetQA(AliQA::ALITASK_t index, const Double_t value) const
152 {
153   /// sets the QA according the return value of the Check
154
155   AliQA * qa = AliQA::Instance(index);
156   
157   qa->UnSet(AliQA::kFATAL);
158   qa->UnSet(AliQA::kWARNING);
159   qa->UnSet(AliQA::kERROR);
160   qa->UnSet(AliQA::kINFO);
161   
162   if ( value == 1.0 ) 
163   {
164     qa->Set(AliQA::kINFO);
165   }
166   else if ( value == 0.0 )
167   {
168     qa->Set(AliQA::kFATAL);
169   }
170   else if ( value > 0.5 ) 
171   {
172     qa->Set(AliQA::kWARNING);
173   }
174   else
175   {
176     qa->Set(AliQA::kERROR);
177   }
178 }