bug fixed
[u/mrichter/AliRoot.git] / MUON / AliMUONQADataMakerRec.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 // --- MUON header files ---
19 #include "AliMUONQADataMakerRec.h"
20
21 //-----------------------------------------------------------------------------
22 /// \class AliMUONQADataMakerRec
23 ///
24 /// MUON base class for quality assurance data (histo) maker
25 ///
26 /// It is now only a steering class for the two subclasses AliMUONTrackerQADataMakerRec
27 /// and AliMUONTriggerQADataMakerRec
28 ///
29 /// \author C. Finck, D. Stocco, L. Aphecetche, A. Blanc
30
31 #include "AliMUONTrackerQADataMakerRec.h"
32 #include "AliMUONTriggerQADataMakerRec.h"
33 #include "AliQAChecker.h"
34 #include "AliRawReader.h"
35 #include "AliRawEventHeaderBase.h"
36
37 /// \cond CLASSIMP
38 ClassImp(AliMUONQADataMakerRec)
39 /// \endcond
40            
41 //____________________________________________________________________________ 
42 AliMUONQADataMakerRec::AliMUONQADataMakerRec(Bool_t tracker, Bool_t trigger) : 
43 AliQADataMakerRec(AliQAv1::GetDetName(AliQAv1::kMUON), "MUON Quality Assurance Data Maker"),
44 fTracker(tracker ? new AliMUONTrackerQADataMakerRec(this) : 0x0),
45 fTrigger(trigger ? new AliMUONTriggerQADataMakerRec(this) : 0x0)
46 {
47   /// ctor
48 }
49
50 //__________________________________________________________________
51 AliMUONQADataMakerRec::~AliMUONQADataMakerRec()
52 {
53     /// dtor
54   delete fTracker;
55   delete fTrigger;
56 }
57
58 //____________________________________________________________________________ 
59 Int_t AliMUONQADataMakerRec::Add2List(TH1 * hist, const Int_t index, AliQAv1::TASKINDEX_t task, const Bool_t expert, const Bool_t image, const Bool_t saveForCorr)
60 {
61   TObjArray** list = GetList(task);
62   if (list)
63   {
64     return Add2List(hist,index,list,expert,image,saveForCorr);
65   }
66   return -1;
67 }
68
69 //____________________________________________________________________________ 
70 void AliMUONQADataMakerRec::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray** list)
71 {
72   /// Detector specific actions at end of cycle
73   
74   for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) 
75   {
76     if (! IsValidEventSpecie(specie, list)  ) continue;
77     
78     SetEventSpecie(AliRecoParam::ConvertIndex(specie)); // needed by the GetXXXData methods
79     
80     if ( task == AliQAv1::kRAWS ) 
81     {
82       if ( fTracker ) fTracker->EndOfDetectorCycleRaws(specie,list);
83       if ( fTrigger ) fTrigger->EndOfDetectorCycleRaws(specie,list);
84     }  
85     else if ( task == AliQAv1::kRECPOINTS )
86     {
87       // normalize recpoints histograms
88       if ( fTracker ) fTracker->EndOfDetectorCycleRecPoints(specie,list);
89       if ( fTrigger ) fTrigger->EndOfDetectorCycleRecPoints(specie,list);
90     }
91     else if ( task == AliQAv1::kESDS ) 
92     {
93       // normalize esds histograms
94       if ( fTracker ) fTracker->EndOfDetectorCycleESDs(specie,list);
95       if ( fTrigger ) fTrigger->EndOfDetectorCycleESDs(specie,list);
96     }
97     else if ( task == AliQAv1::kDIGITSR ) 
98     {
99       if ( fTracker ) fTracker->EndOfDetectorCycleDigits(specie,list);        
100       if ( fTrigger ) fTrigger->EndOfDetectorCycleDigits(specie,list);
101     }
102     else
103     {
104       AliFatal(Form("Not implemented for task %s",AliQAv1::GetTaskName(task).Data()));
105     }
106   } // loop on specie
107     
108   // do the QA checking
109   AliQAChecker::Instance()->Run(AliQAv1::kMUON,task,list,const_cast<AliDetectorRecoParam*>(GetRecoParam()));
110 }
111
112 //____________________________________________________________________________ 
113 TObject* AliMUONQADataMakerRec::GetData(AliQAv1::TASKINDEX_t task, const Int_t index)
114 {
115   TObjArray** list = GetList(task);
116   if (list) return GetData(list,index);
117   return 0x0;
118 }
119
120 //____________________________________________________________________________ 
121 TObjArray** AliMUONQADataMakerRec::GetList(AliQAv1::TASKINDEX_t task)
122 {
123   //  enum TASKINDEX_t {
124   //    kNULLTASKINDEX=-1, kRAWS, kHITS, kSDIGITS, kDIGITS, kDIGITSR, kRECPOINTS, kTRACKSEGMENTS, kRECPARTICLES, kESDS, kNTASKINDEX };
125   if ( task == AliQAv1::kRAWS ) 
126   {
127       return fRawsQAList;
128   }
129   else if ( task == AliQAv1::kDIGITS || task == AliQAv1::kDIGITSR )
130   {
131     return fDigitsQAList;
132   }
133   else if ( task == AliQAv1::kRECPOINTS ) 
134   {
135     return fRecPointsQAList;
136   }
137   else
138   {
139       AliFatal(Form("task %s not supported here yet",AliQAv1::GetTaskName(task).Data()));
140   }
141   return 0x0;
142 }
143
144 //____________________________________________________________________________ 
145 void AliMUONQADataMakerRec::InitRaws()
146 {
147   /// create Raws histograms in Raws subdir
148         
149   if ( fTracker ) fTracker->InitRaws();
150   if ( fTrigger ) fTrigger->InitRaws();
151 }
152
153 //__________________________________________________________________
154 void AliMUONQADataMakerRec::InitDigits() 
155 {
156   /// Initialized Digits spectra 
157   if ( fTracker ) fTracker->InitDigits();
158   if ( fTrigger ) fTrigger->InitDigits();
159
160
161 //____________________________________________________________________________ 
162 void AliMUONQADataMakerRec::InitRecPoints()
163 {
164         /// create Reconstructed Points histograms in RecPoints subdir
165   if ( fTracker ) fTracker->InitRecPoints();
166   if ( fTrigger ) fTrigger->InitRecPoints();
167 }
168
169
170 //____________________________________________________________________________ 
171 void AliMUONQADataMakerRec::InitESDs()
172 {
173   ///create ESDs histograms in ESDs subdir
174   if ( fTracker ) fTracker->InitESDs();
175   if ( fTrigger ) fTrigger->InitESDs();
176 }
177
178 //____________________________________________________________________________
179 void AliMUONQADataMakerRec::MakeRaws(AliRawReader* rawReader)
180 {
181   /// make QA for rawdata
182
183   // Check id histograms already created for this Event Specie
184
185   if ( fTracker && rawReader->GetType() == AliRawEventHeaderBase::kPhysicsEvent ) 
186   {
187     rawReader->Reset();
188     fTracker->MakeRaws(rawReader);
189   }
190   
191   if ( fTrigger && (rawReader->GetType() == AliRawEventHeaderBase::kPhysicsEvent ||
192                     rawReader->GetType() == AliRawEventHeaderBase::kCalibrationEvent ) )
193   {
194     rawReader->Reset();    
195     fTrigger->MakeRaws(rawReader);
196   }
197 }
198
199 //__________________________________________________________________
200 void AliMUONQADataMakerRec::MakeDigits()         
201 {
202   /// makes data from Digits
203   
204   AliFatal("Not implemented");
205 }
206
207 //__________________________________________________________________
208 void AliMUONQADataMakerRec::MakeDigits(TTree* digitsTree)         
209 {
210   /// makes data from Digits
211
212   // Do nothing in case of calibration event
213   if ( GetEventSpecie() == AliRecoParam::kCalib ) return;
214
215   if ( fTracker ) fTracker->MakeDigits(digitsTree);
216   if ( fTrigger ) fTrigger->MakeDigits(digitsTree);  
217 }
218
219 //____________________________________________________________________________
220 void AliMUONQADataMakerRec::MakeRecPoints(TTree* clustersTree)
221 {
222         /// Fill histograms from treeR
223
224   // Do nothing in case of calibration event
225   if ( GetEventSpecie() == AliRecoParam::kCalib ) return;
226         
227   if ( fTracker ) fTracker->MakeRecPoints(clustersTree);
228   if ( fTrigger ) fTrigger->MakeRecPoints(clustersTree);  
229 }
230
231 //____________________________________________________________________________
232 void AliMUONQADataMakerRec::MakeESDs(AliESDEvent* esd)
233 {
234   /// make QA data from ESDs
235
236   // Do nothing in case of calibration event
237   if ( GetEventSpecie() == AliRecoParam::kCalib ) return;
238   
239   if ( fTracker ) fTracker->MakeESDs(esd);
240   if ( fTrigger ) fTrigger->MakeESDs(esd);  
241
242  }
243
244 //____________________________________________________________________________ 
245 void AliMUONQADataMakerRec::ResetDetector(AliQAv1::TASKINDEX_t task)
246 {
247   /// Reset internals
248   
249   for (int spec = 0; spec < AliRecoParam::kNSpecies; ++spec) 
250   {
251     if (!AliQAv1::Instance()->IsEventSpecieSet(AliRecoParam::ConvertIndex(spec)))
252       continue;
253     
254     if ( task == AliQAv1::kRAWS ) 
255     {
256       if (fTracker) fTracker->ResetDetectorRaws(fRawsQAList[spec]);
257       if (fTrigger) fTrigger->ResetDetectorRaws(fRawsQAList[spec]);
258     }
259     else if ( task == AliQAv1::kRECPOINTS )
260     {
261       if (fTracker) fTracker->ResetDetectorRecPoints(fRecPointsQAList[spec]);
262       if (fTrigger) fTrigger->ResetDetectorRecPoints(fRecPointsQAList[spec]);
263     }
264     else if ( task == AliQAv1::kESDS ) 
265     {
266       if (fTracker) fTracker->ResetDetectorESDs(fESDsQAList[spec]);
267       if (fTrigger) fTrigger->ResetDetectorESDs(fESDsQAList[spec]);
268     }
269     else if ( task == AliQAv1::kDIGITS ) 
270     {
271       if (fTracker) fTracker->ResetDetectorDigits(fDigitsQAList[spec]);
272       if (fTrigger) fTrigger->ResetDetectorDigits(fDigitsQAList[spec]);
273     }
274     else
275     {
276       AliFatal(Form("Not implemented for task %s",AliQAv1::GetTaskName(task).Data()));
277     }
278   }
279 }
280
281 //____________________________________________________________________________ 
282 void AliMUONQADataMakerRec::StartOfDetectorCycle()
283 {
284     /// Detector specific actions at start of cycle  
285 }