1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 // --- MUON header files ---
19 #include "AliMUONQADataMakerRec.h"
21 //-----------------------------------------------------------------------------
22 /// \class AliMUONQADataMakerRec
24 /// MUON base class for quality assurance data (histo) maker
26 /// It is now only a steering class for the two subclasses AliMUONTrackerQADataMakerRec
27 /// and AliMUONTriggerQADataMakerRec
29 /// \author C. Finck, D. Stocco, L. Aphecetche, A. Blanc
32 #include "AliMUONTrackerQADataMakerRec.h"
33 #include "AliMUONTriggerQADataMakerRec.h"
34 #include "AliQAChecker.h"
35 #include "AliRawReader.h"
36 #include "AliRawEventHeaderBase.h"
39 ClassImp(AliMUONQADataMakerRec)
42 //____________________________________________________________________________
43 AliMUONQADataMakerRec::AliMUONQADataMakerRec(Bool_t tracker, Bool_t trigger) :
44 AliQADataMakerRec(AliQAv1::GetDetName(AliQAv1::kMUON), "MUON Quality Assurance Data Maker"),
45 fTracker(tracker ? new AliMUONTrackerQADataMakerRec(this) : 0x0),
46 fTrigger(trigger ? new AliMUONTriggerQADataMakerRec(this) : 0x0)
49 AliInfo(Form("tracker=%d trigger=%d",tracker,trigger));
52 //__________________________________________________________________
53 AliMUONQADataMakerRec::~AliMUONQADataMakerRec()
60 //____________________________________________________________________________
61 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)
63 TObjArray** list = GetList(task);
66 return Add2List(hist,index,list,expert,image,saveForCorr);
71 //____________________________________________________________________________
72 void AliMUONQADataMakerRec::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray** list)
74 /// Detector specific actions at end of cycle
76 ResetEventTrigClasses(); // RS
78 for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++)
80 if (! IsValidEventSpecie(specie, list) ) continue;
82 SetEventSpecie(AliRecoParam::ConvertIndex(specie)); // needed by the GetXXXData methods
84 if ( task == AliQAv1::kRAWS )
86 if ( fTracker ) fTracker->EndOfDetectorCycleRaws(specie,list);
87 if ( fTrigger ) fTrigger->EndOfDetectorCycleRaws(specie,list);
89 else if ( task == AliQAv1::kRECPOINTS )
91 // normalize recpoints histograms
92 if ( fTracker ) fTracker->EndOfDetectorCycleRecPoints(specie,list);
93 if ( fTrigger ) fTrigger->EndOfDetectorCycleRecPoints(specie,list);
95 else if ( task == AliQAv1::kESDS )
97 // normalize esds histograms
98 if ( fTracker ) fTracker->EndOfDetectorCycleESDs(specie,list);
99 if ( fTrigger ) fTrigger->EndOfDetectorCycleESDs(specie,list);
101 else if ( task == AliQAv1::kDIGITSR )
103 if ( fTracker ) fTracker->EndOfDetectorCycleDigits(specie,list);
104 if ( fTrigger ) fTrigger->EndOfDetectorCycleDigits(specie,list);
108 AliFatal(Form("Not implemented for task %s",AliQAv1::GetTaskName(task).Data()));
112 // do the QA checking
113 AliQAChecker::Instance()->Run(AliQAv1::kMUON,task,list,const_cast<AliDetectorRecoParam*>(GetRecoParam()));
116 //____________________________________________________________________________
117 TObject* AliMUONQADataMakerRec::GetData(AliQAv1::TASKINDEX_t task, const Int_t index)
119 TObjArray** list = GetList(task);
120 if (list) return GetData(list,index);
124 //____________________________________________________________________________
125 TObjArray** AliMUONQADataMakerRec::GetList(AliQAv1::TASKINDEX_t task)
127 // enum TASKINDEX_t {
128 // kNULLTASKINDEX=-1, kRAWS, kHITS, kSDIGITS, kDIGITS, kDIGITSR, kRECPOINTS, kTRACKSEGMENTS, kRECPARTICLES, kESDS, kNTASKINDEX };
129 if ( task == AliQAv1::kRAWS )
133 else if ( task == AliQAv1::kDIGITS || task == AliQAv1::kDIGITSR )
135 return fDigitsQAList;
137 else if ( task == AliQAv1::kRECPOINTS )
139 return fRecPointsQAList;
143 AliFatal(Form("task %s not supported here yet",AliQAv1::GetTaskName(task).Data()));
148 //____________________________________________________________________________
149 void AliMUONQADataMakerRec::InitRaws()
151 /// create Raws histograms in Raws subdir
153 if ( fTracker ) fTracker->InitRaws();
154 if ( fTrigger ) fTrigger->InitRaws();
156 ClonePerTrigClass(AliQAv1::kRAWS); // this should be the last line
159 //__________________________________________________________________
160 void AliMUONQADataMakerRec::InitDigits()
162 /// Initialized Digits spectra
163 if ( fTracker ) fTracker->InitDigits();
164 if ( fTrigger ) fTrigger->InitDigits();
166 ClonePerTrigClass(AliQAv1::kDIGITS); // this should be the last line
169 //____________________________________________________________________________
170 void AliMUONQADataMakerRec::InitRecPoints()
172 /// create Reconstructed Points histograms in RecPoints subdir
173 if ( fTracker ) fTracker->InitRecPoints();
174 if ( fTrigger ) fTrigger->InitRecPoints();
176 ClonePerTrigClass(AliQAv1::kRECPOINTS); // this should be the last line
180 //____________________________________________________________________________
181 void AliMUONQADataMakerRec::InitESDs()
183 ///create ESDs histograms in ESDs subdir
184 if ( fTracker ) fTracker->InitESDs();
185 if ( fTrigger ) fTrigger->InitESDs();
187 ClonePerTrigClass(AliQAv1::kESDS); // this should be the last line
190 //____________________________________________________________________________
191 void AliMUONQADataMakerRec::MakeRaws(AliRawReader* rawReader)
193 /// make QA for rawdata
194 /// Note that we do not call the sub-datamaker MakeRaws method
195 /// for events where the MCH or MTR is not part of the readout...
197 if ( !rawReader || !rawReader->GetDetectorPattern() ) return;
199 UInt_t clmask = rawReader->GetDetectorPattern()[0];
201 if ( fTracker && rawReader->GetType() == AliRawEventHeaderBase::kPhysicsEvent )
203 UInt_t mchMask = AliDAQ::DetectorPattern(" MUONTRK ");
204 if ( clmask & mchMask )
207 fTracker->MakeRaws(rawReader);
211 if ( fTrigger && (rawReader->GetType() == AliRawEventHeaderBase::kPhysicsEvent ||
212 rawReader->GetType() == AliRawEventHeaderBase::kCalibrationEvent ) )
214 UInt_t mtrMask = AliDAQ::DetectorPattern(" MUONTRG ");
215 if ( clmask & mtrMask )
218 fTrigger->MakeRaws(rawReader);
222 IncEvCountCycleRaws();
223 IncEvCountTotalRaws();
227 //__________________________________________________________________
228 void AliMUONQADataMakerRec::MakeDigits()
230 /// makes data from Digits
232 AliFatal("Not implemented");
235 //__________________________________________________________________
236 void AliMUONQADataMakerRec::MakeDigits(TTree* digitsTree)
238 /// makes data from Digits
240 // Do nothing in case of calibration event
241 if ( GetEventSpecie() == AliRecoParam::kCalib ) return;
243 if ( fTracker ) fTracker->MakeDigits(digitsTree);
244 if ( fTrigger ) fTrigger->MakeDigits(digitsTree);
246 IncEvCountCycleDigits();
247 IncEvCountTotalDigits();
251 //____________________________________________________________________________
252 void AliMUONQADataMakerRec::MakeRecPoints(TTree* clustersTree)
254 /// Fill histograms from treeR
256 // Do nothing in case of calibration event
257 if ( GetEventSpecie() == AliRecoParam::kCalib ) return;
259 if ( fTracker ) fTracker->MakeRecPoints(clustersTree);
260 if ( fTrigger ) fTrigger->MakeRecPoints(clustersTree);
262 IncEvCountCycleRecPoints();
263 IncEvCountTotalRecPoints();
267 //____________________________________________________________________________
268 void AliMUONQADataMakerRec::MakeESDs(AliESDEvent* esd)
270 /// make QA data from ESDs
272 // Do nothing in case of calibration event
273 if ( GetEventSpecie() == AliRecoParam::kCalib ) return;
275 if ( fTracker ) fTracker->MakeESDs(esd);
276 if ( fTrigger ) fTrigger->MakeESDs(esd);
278 IncEvCountCycleESDs();
279 IncEvCountTotalESDs();
283 //____________________________________________________________________________
284 void AliMUONQADataMakerRec::ResetDetector(AliQAv1::TASKINDEX_t task)
288 for (int spec = 0; spec < AliRecoParam::kNSpecies; ++spec)
290 if (!AliQAv1::Instance()->IsEventSpecieSet(AliRecoParam::ConvertIndex(spec)))
293 if ( task == AliQAv1::kRAWS )
295 if (fTracker) fTracker->ResetDetectorRaws(fRawsQAList[spec]);
296 if (fTrigger) fTrigger->ResetDetectorRaws(fRawsQAList[spec]);
298 else if ( task == AliQAv1::kRECPOINTS )
300 if (fTracker) fTracker->ResetDetectorRecPoints(fRecPointsQAList[spec]);
301 if (fTrigger) fTrigger->ResetDetectorRecPoints(fRecPointsQAList[spec]);
303 else if ( task == AliQAv1::kESDS )
305 if (fTracker) fTracker->ResetDetectorESDs(fESDsQAList[spec]);
306 if (fTrigger) fTrigger->ResetDetectorESDs(fESDsQAList[spec]);
308 else if ( task == AliQAv1::kDIGITS )
310 if (fTracker) fTracker->ResetDetectorDigits(fDigitsQAList[spec]);
311 if (fTrigger) fTrigger->ResetDetectorDigits(fDigitsQAList[spec]);
315 AliFatal(Form("Not implemented for task %s",AliQAv1::GetTaskName(task).Data()));
320 //____________________________________________________________________________
321 void AliMUONQADataMakerRec::StartOfDetectorCycle()
323 /// Detector specific actions at start of cycle