120213180268385ea07bfa8c7da6aaa01d256924
[u/mrichter/AliRoot.git] / PHOS / AliPHOSQAChecker.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 //_________________________________________________________________________
19 // Base class for a QA checker, to be instanciated as a container of user 
20 // defined tasks
21 //*-- Author :  Yves Schutz (SUBATECH) 
22 //////////////////////////////////////////////////////////////////////////////
23
24 // --- ROOT system ---
25 #include "TROOT.h"
26 #include "TFolder.h" 
27
28 // --- Standard library ---
29
30 // --- AliRoot header files ---
31 #include "AliConfig.h"
32
33 #include "AliPHOSQAChecker.h"
34 #include "AliPHOSQAVirtualCheckable.h"
35
36 ClassImp(AliPHOSQAChecker)
37
38
39 //____________________________________________________________________________ 
40   AliPHOSQAChecker::AliPHOSQAChecker(const char * name, const char * title) : TTask(name,title) 
41 {
42   // ctor
43   // stores checkers in the PHOS QA TTask folder //Folders/Task/QA
44   
45   TFolder* topfold = AliConfig::Instance()->GetTopFolder(); //get top aliroot folder; skowron
46   TString phosqatn(AliConfig::Instance()->GetQATaskName()); //skowron
47   
48   TTask * aliceQA  = (TTask*)topfold->FindObjectAny(phosqatn); //skowron
49   if (aliceQA == 0x0)
50    {
51      Fatal("AliPHOSQAChecker","Can not find QA main task");
52      return;//never reached
53    }
54    
55   TTask * phosQA   = (TTask*)aliceQA->GetListOfTasks()->FindObject("PHOS"); //hard wired name !!!; skowron
56   if (phosQA)  // PHOS QA Tasks container exists
57    phosQA->Add(this) ;
58    else    // create  //Folders/Task/QA/PHOS
59      aliceQA->Add(this) ; 
60   
61   fCheckablesList = new TList() ;
62   fCheckable = 0;
63 }
64
65 //____________________________________________________________________________ 
66   AliPHOSQAChecker::~AliPHOSQAChecker()
67 {
68   // dtor remove the checker from the task list of the associated checker
69   
70   TIter next(fCheckablesList) ; 
71   AliPHOSQAVirtualCheckable * checkable ; 
72   while ( (checkable = (AliPHOSQAVirtualCheckable*)next()) ) 
73     checkable->RemoveChecker(this) ; 
74   ExecuteTasks("D") ; 
75 }
76
77 //____________________________________________________________________________ 
78   void AliPHOSQAChecker::CheckIt(AliPHOSQAVirtualCheckable *ca) 
79 {
80   // does the check for the given checkable 
81   
82   SetCheckable(ca) ;
83   TList * l = GetListOfTasks() ; 
84   TIter next(l) ; 
85   AliPHOSQAChecker * checker ; 
86   while ( (checker = (AliPHOSQAChecker*)next()) ) 
87     checker->SetCheckable(ca) ; 
88   ExecuteTask("") ;   
89   fCheckable = 0 ; 
90 }
91
92 //____________________________________________________________________________ 
93   void AliPHOSQAChecker::CheckIt()
94 {
95   // does the check for all attached chekables 
96   if ( fCheckablesList->IsEmpty() ) 
97     ExecuteTask("C") ; 
98   else {
99     TIter next( fCheckablesList ) ;
100     AliPHOSQAVirtualCheckable * checkable ; 
101     while ( (checkable = (AliPHOSQAVirtualCheckable*)next() ) ) {
102       fCheckable = checkable ; 
103       ExecuteTask("") ;
104     }
105   }
106 }
107
108 //____________________________________________________________________________ 
109   void AliPHOSQAChecker::Exec(Option_t *option)
110 {
111   // Performs various tasks as indicated by option
112   // P --> Print 
113   // S --> Status
114   // C --> does the comparison on all the checkables declared 
115   //   --> does the comparison on only one checkable (the one which asks CheckMe() )
116   // A --> list the alarms raised in  the associated checkables 
117   // R --> reset the alarms
118   // D --> calls the dtor
119
120   if ( !(strcmp(option,"P")) ) 
121     Print() ;
122
123   else if ( !(strcmp(option,"S")) ) 
124     Status() ;
125
126   else if ( !(strcmp(option,"C")) ) {  
127     TIter next( fCheckablesList ) ;
128     AliPHOSQAVirtualCheckable * checkable ; 
129     while ( (checkable = (AliPHOSQAVirtualCheckable*)next() ) ) {
130       fCheckable = checkable ;
131       TString message = CheckingOperation(); 
132       if ( !message.IsNull() ) { 
133         TDatime dt ;
134         TString time(dt.AsSQLString()) ;
135         message = time + message ; 
136         fCheckable->RaiseAlarm(dt.AsSQLString(), fCheckable->GetName(), GetName(), message.Data()) ; 
137       } 
138     }
139   }
140   
141   else if ( !(strcmp(option,"R")) ) {  
142     TIter next( fCheckablesList ) ;
143     AliPHOSQAVirtualCheckable * checkable ; 
144     while ( (checkable = (AliPHOSQAVirtualCheckable*)next() ) ) {
145       fCheckable = checkable ; 
146       fCheckable->ResetAlarms() ; 
147     }   
148   }
149   
150   else if ( !(strcmp(option,"")) ) {
151     TString message = CheckingOperation(); 
152     if ( !message.IsNull() ) { 
153       TDatime dt ;
154       TString time(dt.AsSQLString()) ;
155       message = time + message ; 
156       fCheckable->RaiseAlarm(dt.AsSQLString(), fCheckable->GetName(), GetName(), message.Data()) ; 
157     }
158   }     
159     
160   else if ( !(strcmp(option,"A")) )
161     PrintAlarms() ; 
162  
163   else if ( !(strcmp(option,"D")) )
164     Delete() ;
165 }
166
167 //____________________________________________________________________________ 
168   void AliPHOSQAChecker::Print()
169 {
170   // print the checker and sub-checkers, if any, name.  
171
172   Info("Print", "Checker : %s", GetName()) ;  
173
174 }
175
176 //____________________________________________________________________________ 
177   void AliPHOSQAChecker::PrintAlarms()
178 {
179   // Prints the alarms of all attached checkables
180   Info("PrintAlarms", "Checker name : %s", GetName()) ; 
181   if ( !(fCheckablesList->IsEmpty() ) ) {
182     TIter next( fCheckablesList ) ; 
183     AliPHOSQAVirtualCheckable * checkable ; 
184     while ( (checkable = (AliPHOSQAVirtualCheckable *)next() ) ) 
185       checkable->Alarms() ; 
186   }
187 }
188
189 //____________________________________________________________________________ 
190   void AliPHOSQAChecker::Status() 
191 {
192   // Prints the checkables attached to this checker
193   if ( fCheckablesList->IsEmpty() ) 
194     Info("Status", "No checkables are checked by %s", GetName()) ; 
195   else {
196     Info("Status", "The following checkables are checked by %s", GetName()) ; 
197     TIter next(fCheckablesList) ; 
198     AliPHOSQAVirtualCheckable * checkable ; 
199     while ( (checkable = (AliPHOSQAVirtualCheckable*)next() ) ) 
200       checkable->Print() ; 
201   }
202 }