new functionality and new class added
[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 void AliMUONQADataMakerRec::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray** list)
60 {
61   /// Detector specific actions at end of cycle
62   
63   for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) 
64   {
65     if (! IsValidEventSpecie(specie, list)  ) continue;
66     
67     SetEventSpecie(AliRecoParam::ConvertIndex(specie));
68         
69     if ( task == AliQAv1::kRAWS ) 
70     {
71       if (fTracker) fTracker->EndOfDetectorCycleRaws(specie,list);
72       if (fTrigger) fTrigger->EndOfDetectorCycleRaws(specie,list);
73     }
74     
75     if ( task == AliQAv1::kRECPOINTS )
76     {
77       // normalize recpoints histograms
78       if (fTracker) fTracker->EndOfDetectorCycleRecPoints(specie,list);
79       if (fTrigger) fTrigger->EndOfDetectorCycleRecPoints(specie,list);
80     }
81     
82     if ( task == AliQAv1::kESDS ) 
83     {
84       // normalize esds histograms
85       if (fTracker) fTracker->EndOfDetectorCycleESDs(specie,list);
86       if (fTrigger) fTrigger->EndOfDetectorCycleESDs(specie,list);
87     }
88    } // loop on specie
89     
90   // do the QA checking
91   AliQAChecker::Instance()->Run(AliQAv1::kMUON,task,list,const_cast<AliDetectorRecoParam*>(GetRecoParam()));
92 }
93
94 //____________________________________________________________________________ 
95 void AliMUONQADataMakerRec::InitRaws()
96 {
97   /// create Raws histograms in Raws subdir
98         
99   if ( fTracker ) fTracker->InitRaws();
100   if ( fTrigger ) fTrigger->InitRaws();
101 }
102
103 //__________________________________________________________________
104 void AliMUONQADataMakerRec::InitDigits() 
105 {
106   /// Initialized Digits spectra 
107   if ( fTracker ) fTracker->InitDigits();
108   if ( fTrigger ) fTrigger->InitDigits();
109
110
111 //____________________________________________________________________________ 
112 void AliMUONQADataMakerRec::InitRecPoints()
113 {
114         /// create Reconstructed Points histograms in RecPoints subdir
115   if ( fTracker ) fTracker->InitRecPoints();
116   if ( fTrigger ) fTrigger->InitRecPoints();
117 }
118
119
120 //____________________________________________________________________________ 
121 void AliMUONQADataMakerRec::InitESDs()
122 {
123   ///create ESDs histograms in ESDs subdir
124   if ( fTracker ) fTracker->InitESDs();
125   if ( fTrigger ) fTrigger->InitESDs();
126 }
127
128 //____________________________________________________________________________
129 void AliMUONQADataMakerRec::MakeRaws(AliRawReader* rawReader)
130 {
131   /// make QA for rawdata
132
133   // Check id histograms already created for this Event Specie
134
135   if ( fTracker && rawReader->GetType() == AliRawEventHeaderBase::kPhysicsEvent ) 
136   {
137     rawReader->Reset();
138     fTracker->MakeRaws(rawReader);
139   }
140   
141   if ( fTrigger && (rawReader->GetType() == AliRawEventHeaderBase::kPhysicsEvent ||
142                     rawReader->GetType() == AliRawEventHeaderBase::kCalibrationEvent ) )
143   {
144     rawReader->Reset();    
145     fTrigger->MakeRaws(rawReader);
146   }
147 }
148
149 //__________________________________________________________________
150 void AliMUONQADataMakerRec::MakeDigits()         
151 {
152   /// makes data from Digits
153   
154   AliError("Not implemented");
155 }
156
157 //__________________________________________________________________
158 void AliMUONQADataMakerRec::MakeDigits(TTree* digitsTree)         
159 {
160   /// makes data from Digits
161
162   // Do nothing in case of calibration event
163   if ( GetRecoParam()->GetEventSpecie() == AliRecoParam::kCalib ) return;
164
165   if ( fTracker ) fTracker->MakeDigits(digitsTree);
166   if ( fTrigger ) fTrigger->MakeDigits(digitsTree);  
167 }
168
169 //____________________________________________________________________________
170 void AliMUONQADataMakerRec::MakeRecPoints(TTree* clustersTree)
171 {
172         /// Fill histograms from treeR
173
174   // Do nothing in case of calibration event
175   if ( GetRecoParam()->GetEventSpecie() == AliRecoParam::kCalib ) return;
176         
177   if ( fTracker ) fTracker->MakeRecPoints(clustersTree);
178   if ( fTrigger ) fTrigger->MakeRecPoints(clustersTree);  
179 }
180
181 //____________________________________________________________________________
182 void AliMUONQADataMakerRec::MakeESDs(AliESDEvent* esd)
183 {
184   /// make QA data from ESDs
185
186   // Do nothing in case of calibration event
187   if ( GetRecoParam()->GetEventSpecie() == AliRecoParam::kCalib ) return;
188   
189   if ( fTracker ) fTracker->MakeESDs(esd);
190   if ( fTrigger ) fTrigger->MakeESDs(esd);  
191
192  }
193
194 //____________________________________________________________________________ 
195 void AliMUONQADataMakerRec::ResetDetector(AliQAv1::TASKINDEX_t task)
196 {
197   /// Reset internals
198   
199   for (int spec = 0; spec < AliRecoParam::kNSpecies; ++spec) 
200   {
201     if (!AliQAv1::Instance()->IsEventSpecieSet(AliRecoParam::ConvertIndex(spec)))
202       continue;
203     
204     if ( task == AliQAv1::kRAWS ) 
205     {
206       if (fTracker) fTracker->ResetDetectorRaws(fRawsQAList[spec]);
207       if (fTrigger) fTrigger->ResetDetectorRaws(fRawsQAList[spec]);
208     }
209     else if ( task == AliQAv1::kRECPOINTS )
210     {
211       if (fTracker) fTracker->ResetDetectorRecPoints(fRecPointsQAList[spec]);
212       if (fTrigger) fTrigger->ResetDetectorRecPoints(fRecPointsQAList[spec]);
213     }
214     else if ( task == AliQAv1::kESDS ) 
215     {
216       if (fTracker) fTracker->ResetDetectorESDs(fESDsQAList[spec]);
217       if (fTrigger) fTrigger->ResetDetectorESDs(fESDsQAList[spec]);
218     }
219     else if ( task == AliQAv1::kDIGITS ) 
220     {
221       if (fTracker) fTracker->ResetDetectorDigits(fDigitsQAList[spec]);
222       if (fTrigger) fTrigger->ResetDetectorDigits(fDigitsQAList[spec]);
223     }
224     else
225     {
226       AliError("Not implemented");
227     }
228   }
229 }
230
231 //____________________________________________________________________________ 
232 void AliMUONQADataMakerRec::StartOfDetectorCycle()
233 {
234     /// Detector specific actions at start of cycle  
235 }