Algorithm optimization (F.Bellini)
[u/mrichter/AliRoot.git] / TOF / AliTOFQADataMakerRec.cxx
CommitLineData
04236e67 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///////////////////////////////////////////////////////////////////////
17// //
18// Produces the data needed to calculate the TOF quality assurance. //
19// QA objects are 1 & 2 Dimensional histograms. //
20// author: S.Arcelli //
21// //
22///////////////////////////////////////////////////////////////////////
23
fc71ba02 24/*
724eb92e 25Modified by fbellini on 18/01/2011
26- reduced histo binning to reduce size
27- added decoding errors plot
28- added channel maps and options for DQM shifters
29- new list of recPoints and ESDs plots
30- removed hTrmChannels035 and hTrmChannels3671
31
32 Modified by bvonhall on 03/11/2010
dce30a9d 33 - modified declaration of hTrmChannels035 and hTrmChannels3671 in EndOfDetectorCycle()
34 to prevent memory corruption
35
724eb92e 36 Modified by adecaro on 18/10/2010
e648d82d 37 - fTOFRawStream object set as private member
38
724eb92e 39Modified by fbellini on 13/09/2010
ea8ae424 40 - Set TLines as private members
41 - Set image flag for expert histos
42
724eb92e 43Modified by fbellini on 14/06/2010
5b4ed716 44 - Updated plots
45 - use LoadRawDataBuffersV2()
46
fc71ba02 47 Modified by fbellini on 10/05/2010
48 - Fixed EndOfDetectorCycle() memory corruption bug
49
50 Modified by fbellini on 22/04/2010
f63f6d7e 51 - Added filter for physics events
52
53 Modified by fbellini on 16/04/2010
5f144062 54 - Added EnableDqmShifterOpt()
55 - Modified EndOfDetectorCycle() with options for DQM
56 - Updated ESDs QA
57
58 Modified by fbellini on 30/03/2010
59 - Changed raws time histos range to 610ns
60 - Added FilterLTMData() and FilterSpare() methods
61 - Added check on enabled channels for raw data
62 - Updated RecPoints QA
63
64 Modified by fbellini on 02/03/2010
65 - Fixed raw data decoding methods (use AliTOFRawStream::LoadRawDataBuffer())
66 - Added filter for noisy channels and read map from OCDB
67 - Added GetCalibData() method
68 - Added CheckVolumeID() and CheckEquipID() methods
69 - Updated Raw QA
32bd8225 70*/
71
04236e67 72#include <TClonesArray.h>
04236e67 73#include <TH1F.h>
74#include <TH2F.h>
5f144062 75#include <TLine.h>
724eb92e 76#include <TPaveText.h>
32bd8225 77
17f2cd01 78#include "AliCDBManager.h"
17f2cd01 79#include "AliCDBEntry.h"
04236e67 80#include "AliESDEvent.h"
81#include "AliESDtrack.h"
04236e67 82#include "AliQAChecker.h"
83#include "AliRawReader.h"
32bd8225 84#include "AliTOFRawStream.h"
5c7c93fa 85#include "AliTOFcluster.h"
86#include "AliTOFQADataMakerRec.h"
04236e67 87#include "AliTOFrawData.h"
5c7c93fa 88#include "AliTOFGeometry.h"
17f2cd01 89#include "AliTOFChannelOnlineStatusArray.h"
724eb92e 90#include "AliTOFDecoderSummaryData.h"
91#include "AliTOFDecoderV2.h"
dce30a9d 92
04236e67 93ClassImp(AliTOFQADataMakerRec)
94
95//____________________________________________________________________________
96 AliTOFQADataMakerRec::AliTOFQADataMakerRec() :
17f2cd01 97 AliQADataMakerRec(AliQAv1::GetDetName(AliQAv1::kTOF), "TOF Quality Assurance Data Maker"),
98 fCalibData(0x0),
5f144062 99 fEnableNoiseFiltering(kFALSE),
e648d82d 100 fEnableDqmShifterOpt(kFALSE),
101 fProcessedRawEventN(0),
724eb92e 102 fIsSOC(kFALSE),
e648d82d 103 fLineExpTimeMin(new TLine(200., 0., 200., 0.)),
104 fLineExpTimeMax(new TLine(250., 0., 250., 0.)),
105 fLineExpTotMin(new TLine(5., 0., 5., 0.)),
106 fLineExpTotMax(new TLine(20., 0., 20., 0.)),
724eb92e 107 fTOFRawStream(AliTOFRawStream()),
108 fDecoderSummary(new AliTOFDecoderSummaryData())
04236e67 109{
110 //
111 // ctor
724eb92e 112 //
113 for (Int_t sm=0;sm<17;sm++){
114 fLineSMid[sm] = new TLine( sm+1, 0., sm+1, 91.);
ea8ae424 115 }
724eb92e 116 //initialize all TRM counters to -1 i.e. invalid value
117 // for (Int_t trm=0;trm<720;trm++){
118 // fTRMNoisyArray[trm]=-1;
119 // fTRMHwOkArray[trm]=-1;
120 // fTRMEnabledArray[trm]=-1;
121 // }
122
04236e67 123}
124
125//____________________________________________________________________________
126AliTOFQADataMakerRec::AliTOFQADataMakerRec(const AliTOFQADataMakerRec& qadm) :
17f2cd01 127 AliQADataMakerRec(),
128 fCalibData(qadm.fCalibData),
5f144062 129 fEnableNoiseFiltering(qadm.fEnableNoiseFiltering),
130 fEnableDqmShifterOpt(qadm.fEnableDqmShifterOpt),
ea8ae424 131 fProcessedRawEventN(qadm.fProcessedRawEventN),
724eb92e 132 fIsSOC(qadm.fIsSOC),
ea8ae424 133 fLineExpTimeMin(qadm.fLineExpTimeMin),
134 fLineExpTimeMax(qadm.fLineExpTimeMax),
135 fLineExpTotMin(qadm.fLineExpTotMin),
97430dfe 136 fLineExpTotMax(qadm.fLineExpTotMax),
724eb92e 137 fTOFRawStream(qadm.fTOFRawStream),
138 fDecoderSummary(qadm.fDecoderSummary)
04236e67 139{
140 //
141 //copy ctor
142 //
143 SetName((const char*)qadm.GetName()) ;
144 SetTitle((const char*)qadm.GetTitle());
ea8ae424 145
724eb92e 146 for (Int_t sm=0;sm<17;sm++){
147 fLineSMid[sm]=qadm.fLineSMid[sm];
ea8ae424 148 }
724eb92e 149
150 // for (Int_t trm=0;trm<10;trm++){
151 // fTRMNoisyArray[trm]=qadm.fTRMNoisyArray[trm];
152 // fTRMHwOkArray[trm]=qadm.fTRMHwOkArray[trm];
153 // fTRMEnabledArray[trm]=qadm.fTRMEnabledArray[trm];
154 // }
155
04236e67 156}
157
158//__________________________________________________________________
159AliTOFQADataMakerRec& AliTOFQADataMakerRec::operator = (const AliTOFQADataMakerRec& qadm )
160{
161 //
162 // assignment operator.
163 //
164 this->~AliTOFQADataMakerRec();
165 new(this) AliTOFQADataMakerRec(qadm);
166 return *this;
167}
168
17f2cd01 169//----------------------------------------------------------------------------
97430dfe 170AliTOFQADataMakerRec::~AliTOFQADataMakerRec()
171{
172
173 fTOFRawStream.Clear();
e648d82d 174 delete fLineExpTimeMin;
175 delete fLineExpTimeMax;
176 delete fLineExpTotMin;
177 delete fLineExpTotMax;
178 for (Int_t sm=0;sm<10;sm++){
724eb92e 179 delete fLineSMid[sm];
180 }
181 if (fDecoderSummary)
182 delete fDecoderSummary;
97430dfe 183}
184//----------------------------------------------------------------------------
17f2cd01 185AliTOFChannelOnlineStatusArray* AliTOFQADataMakerRec::GetCalibData() const
186{
32bd8225 187 //
188 // Retrive TOF calib objects from OCDB
189 //
724eb92e 190 AliCDBManager *man = AliCDBManager::Instance();
191 AliCDBEntry *cdbe=0;
192
193 cdbe = man->Get("TOF/Calib/Status",fRun);
194 if(!cdbe){
195 AliWarning("Load of calibration data from default storage failed!");
196 AliWarning("Calibration data will be loaded from local storage ($ALICE_ROOT)");
197 man->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
17f2cd01 198 cdbe = man->Get("TOF/Calib/Status",fRun);
724eb92e 199 }
200 // Retrieval of data in directory TOF/Calib/Data:
201
202 AliTOFChannelOnlineStatusArray * array = 0;
203 if (cdbe) array = (AliTOFChannelOnlineStatusArray *)cdbe->GetObject();
204 if (!array) AliFatal("No calibration data from calibration database !");
205
206 return array;
17f2cd01 207}
208
04236e67 209//____________________________________________________________________________
210void AliTOFQADataMakerRec::InitRaws()
211{
212 //
213 // create Raws histograms in Raws subdir
214 //
7d297381 215 const Bool_t expert = kTRUE ;
216 const Bool_t saveCorr = kTRUE ;
217 const Bool_t image = kTRUE ;
04236e67 218
724eb92e 219 TH1I * h0 = new TH1I("hTOFRaws", "TOF raw hit multiplicity; TOF raw hits number; Events ",200, 0, 200) ;
5f144062 220
724eb92e 221 TH1I * h1 = new TH1I("hTOFRawsIA", "TOF raw hit multiplicity - I/A side; TOF raw hits number ;Events ",200, 0, 200) ;
222 TH1I * h2 = new TH1I("hTOFRawsOA", "TOF raw hit multiplicity - O/A side; TOF raw hits number ;Events ",200, 0, 200) ;
223 TH1I * h3 = new TH1I("hTOFRawsIC", "TOF raw hit multiplicity - I/C side; TOF raw hits number ;Events ",200, 0, 200) ;
224 TH1I * h4 = new TH1I("hTOFRawsOC", "TOF raw hit multiplicity - O/C side; TOF raw hits number ;Events ",200, 0, 200) ;
5f144062 225
724eb92e 226 TH1F * h5 = new TH1F("hTOFRawsTime", "TOF Raws - Hit time (ns);Measured Hit time [ns];Hits", 250,0. ,610.) ;
227 TH1F * h6 = new TH1F("hTOFRawsTimeIA", "TOF Raws - Hit time (ns) - I/A side;Measured Hit time [ns];Hits", 250,0. ,610.) ;
228 TH1F * h7 = new TH1F("hTOFRawsTimeOA", "TOF Raws - Hit time (ns) - O/A side;Measured Hit time [ns];Hits", 250,0. ,610.) ;
229 TH1F * h8 = new TH1F("hTOFRawsTimeIC", "TOF Raws - Hit time (ns) - I/C side;Measured Hit time [ns];Hits", 250,0. ,610.) ;
230 TH1F * h9 = new TH1F("hTOFRawsTimeOC", "TOF Raws - Hit time (ns) - O/C side;Measured Hit time [ns];Hits", 250,0. ,610.) ;
231
232 TH1F * h10 = new TH1F("hTOFRawsToT", "TOF Raws - Hit ToT (ns);Measured Hit ToT (ns);Hits", 100, 0., 48.8) ;
233
234 TH1F * h11 = new TH1F("hTOFRawsToTIA", "TOF Raws - Hit ToT (ns) - I/A side;Measured Hit ToT (ns);Hits", 100, 0., 48.8) ;
235 TH1F * h12 = new TH1F("hTOFRawsToTOA", "TOF Raws - Hit ToT (ns) - O/A side;Measured Hit ToT (ns);Hits", 100, 0., 48.8) ;
236 TH1F * h13 = new TH1F("hTOFRawsToTIC", "TOF Raws - Hit ToT (ns) - I/C side;Measured Hit ToT (ns);Hits", 100, 0., 48.8) ;
237 TH1F * h14 = new TH1F("hTOFRawsToTOC", "TOF Raws - Hit ToT (ns) - O/C side;Measured Hit ToT (ns);Hits", 100, 0., 48.8) ;
238
5b4ed716 239 TH1F * h15 = new TH1F("hTOFRawsLTMHits", "LTMs OR signals; Crate; Counts", 72, 0., 72.);
724eb92e 240 TH2F * h16 = new TH2F("hTOFrefMap", "TOF enabled channel reference map;sector;strip", 72, 0., 18., 91, 0., 91.);
241 TH2F * h17 = new TH2F("hTOFRawHitMap","TOF raw hit map;sector;strip", 72, 0., 18., 91, 0., 91.);
242 TH2I * h18 = new TH2I("hTOFDecodingErrors","Decoding error monitoring; DDL; Error ", 72, 0, 72, 13,1,14);
32bd8225 243
724eb92e 244 h18->GetYaxis()->SetBinLabel(1,"DRM ");
245 h18->GetYaxis()->SetBinLabel(2,"LTM ");
246 h18->GetYaxis()->SetBinLabel(3,"TRM 3 ");
247 h18->GetYaxis()->SetBinLabel(4,"TRM 4");
248 h18->GetYaxis()->SetBinLabel(5,"TRM 5");
249 h18->GetYaxis()->SetBinLabel(6,"TRM 6");
250 h18->GetYaxis()->SetBinLabel(7,"TRM 7");
251 h18->GetYaxis()->SetBinLabel(8,"TRM 8");
252 h18->GetYaxis()->SetBinLabel(9,"TRM 9");
253 h18->GetYaxis()->SetBinLabel(10,"TRM 10");
254 h18->GetYaxis()->SetBinLabel(11,"TRM 11");
255 h18->GetYaxis()->SetBinLabel(12,"TRM 12");
256 h18->GetYaxis()->SetBinLabel(13,"recovered");
32bd8225 257
724eb92e 258 TH1F * h19 = new TH1F("hTOFOrphansTime", "TOF Raws - Orphans time (ns);Measured Hit time [ns];Hits", 250, 0. ,610.) ;
5f144062 259 TH2F * h20 = new TH2F("hTOFRawTimeVsTRM035", "TOF raws - Hit time vs TRM - crates 0 to 35; TRM index = DDL*10+TRM(0-9);TOF raw time [ns]", 361, 0., 361., 250, 0., 610.0) ;
ba5613e3 260 TH2F * h21 = new TH2F("hTOFRawTimeVsTRM3671", "TOF raws - Hit time vs TRM - crates 36 to 72; TRM index = DDL**10+TRM(0-9);TOF raw time [ns]", 361, 360., 721., 250, 0., 610.0) ;
724eb92e 261 TH2F * h22 = new TH2F("hTOFTimeVsStrip","TOF Raws - Hit time vs. strip (theta); Strip index;Raws TOF time (ns) ", 91,0.,91, 250, 0., 610.) ;
5f144062 262 h0->Sumw2() ;
263 h1->Sumw2() ;
264 h2->Sumw2() ;
265 h3->Sumw2() ;
266 h4->Sumw2() ;
724eb92e 267 // h5->Sumw2() ;
5f144062 268 h6->Sumw2() ;
269 h7->Sumw2() ;
270 h8->Sumw2() ;
271 h9->Sumw2() ;
724eb92e 272 // h10->Sumw2() ;
5f144062 273 h11->Sumw2() ;
274 h12->Sumw2() ;
275 h13->Sumw2() ;
276 h14->Sumw2() ;
277 h15->Sumw2() ;
278 h16->Sumw2() ;
279 h17->Sumw2() ;
280 h18->Sumw2() ;
281 h19->Sumw2() ;
282 h20->Sumw2() ;
283 h21->Sumw2() ;
284 h22->Sumw2() ;
724eb92e 285
e648d82d 286 //add lines for DQM shifter
287 //fLineExpTimeMin = new TLine(200., 0., 200., 0.);
288 fLineExpTimeMin->SetLineColor(kGreen);
289 fLineExpTimeMin->SetLineWidth(2);
290
291 //fLineExpTimeMax = new TLine(250., 0., 250., 0.);
292 fLineExpTimeMax->SetLineColor(kGreen);
293 fLineExpTimeMax->SetLineWidth(2);
294
295 //fLineExpTotMin = new TLine( 5., 0., 5., 0.);
296 fLineExpTotMin->SetLineColor(kGreen);
297 fLineExpTotMin->SetLineWidth(2);
298
299 //fLineExpTotMax = new TLine(20., 0., 20., 0.);
300 fLineExpTotMax->SetLineColor(kGreen);
301 fLineExpTotMax->SetLineWidth(2);
302
724eb92e 303 for (Int_t sm=0;sm<17;sm++){
304 //fLineSMid[sm] = new TLine( 1+sm, 0., 1+sm, 91.);
305 fLineSMid[sm]->SetLineColor(kMagenta);
306 fLineSMid[sm]->SetLineWidth(2);
e648d82d 307 }
724eb92e 308
a3286ffd 309 h5->GetListOfFunctions()->Add(fLineExpTimeMin);
310 h5->GetListOfFunctions()->Add(fLineExpTimeMax);
311 h10->GetListOfFunctions()->Add(fLineExpTotMin);
312 h10->GetListOfFunctions()->Add(fLineExpTotMax);
313
314 for (Int_t sm=0;sm<17;sm++){
315 h16->GetListOfFunctions()->Add(fLineSMid[sm]);
316 h17->GetListOfFunctions()->Add(fLineSMid[sm]);
317 }
318
319
320 TPaveText *phosHoleBox=new TPaveText(13,38,16,53,"b");
321 phosHoleBox->SetFillStyle(0);
322 phosHoleBox->SetFillColor(kWhite);
323 phosHoleBox->SetLineColor(kMagenta);
324 phosHoleBox->SetLineWidth(2);
325 phosHoleBox->AddText("PHOS");
326 h16->GetListOfFunctions()->Add(phosHoleBox);
327 h17->GetListOfFunctions()->Add(phosHoleBox);
328
329 // h0->SetDrawOption("logy");
330 // h5->SetDrawOption("logy");
331 // h10->SetDrawOption("logy");
332
17f2cd01 333 Add2RawsList(h0, 0, !expert, image, !saveCorr) ;
61740cee 334 Add2RawsList(h1, 1, expert, !image, !saveCorr) ;
335 Add2RawsList(h2, 2, expert, !image, !saveCorr) ;
336 Add2RawsList(h3, 3, expert, !image, !saveCorr) ;
337 Add2RawsList(h4, 4, expert, !image, !saveCorr) ;
17f2cd01 338 Add2RawsList(h5, 5, !expert, image, !saveCorr) ;
61740cee 339 Add2RawsList(h6, 6, expert, !image, !saveCorr) ;
340 Add2RawsList(h7, 7, expert, !image, !saveCorr) ;
341 Add2RawsList(h8, 8, expert, !image, !saveCorr) ;
342 Add2RawsList(h9, 9, expert, !image, !saveCorr) ;
17f2cd01 343 Add2RawsList(h10, 10, !expert, image, !saveCorr) ;
5f144062 344 Add2RawsList(h11, 11, expert, !image, !saveCorr) ;
345 Add2RawsList(h12, 12, expert, !image, !saveCorr) ;
17f2cd01 346 Add2RawsList(h13, 13, expert, !image, !saveCorr) ;
347 Add2RawsList(h14, 14, expert, !image, !saveCorr) ;
5f144062 348 Add2RawsList(h15, 15, !expert, image, !saveCorr) ;
349 Add2RawsList(h16, 16, !expert, image, !saveCorr) ;
350 Add2RawsList(h17, 17, !expert, image, !saveCorr) ;
17f2cd01 351 Add2RawsList(h18, 18, expert, !image, !saveCorr) ;
352 Add2RawsList(h19, 19, expert, !image, !saveCorr) ;
353 Add2RawsList(h20, 20, expert, !image, !saveCorr) ;
354 Add2RawsList(h21, 21, expert, !image, !saveCorr) ;
5f144062 355 Add2RawsList(h22, 22, expert, !image, !saveCorr) ;
44ed7a66 356}
357
358//____________________________________________________________________________
04236e67 359void AliTOFQADataMakerRec::InitRecPoints()
360{
361 //
362 // create RecPoints histograms in RecPoints subdir
363 //
724eb92e 364
32bd8225 365 const Bool_t expert = kTRUE ;
366 const Bool_t image = kTRUE ;
04236e67 367
724eb92e 368 TH1I * h0 = new TH1I("hTOFRecPoints", "TOF RecPoints multiplicity ; TOF RecPoints number;Events",200, 0, 200) ;
5f144062 369
724eb92e 370 TH1F * h1 = new TH1F("hTOFRecPointsTimeIA", "RecPoints Time Spectrum in TOF (ns)- I/A side; Calibrated TOF time [ns];Events", 250, 0., 610.) ;
371 TH1F * h2 = new TH1F("hTOFRecPointsTimeOA", "RecPoints Time Spectrum in TOF (ns)- O/A side; Calibrated TOF time [ns];Events", 250, 0., 610.) ;
372 TH1F * h3 = new TH1F("hTOFRecPointsTimeIC", "RecPoints Time Spectrum in TOF (ns)- I/C side; Calibrated TOF time [ns];Events", 250, 0., 610.) ;
373 TH1F * h4 = new TH1F("hTOFRecPointsTimeOC", "RecPoints Time Spectrum in TOF (ns)- O/C side; Calibrated TOF time [ns];Events", 250, 0., 610.) ;
32bd8225 374
724eb92e 375 TH1F * h5 = new TH1F("hTOFRecPointsRawTimeIA", "RecPoints raw Time Spectrum in TOF (ns)-I/A side; Measured TOF time [ns];Hits", 250, 0., 610.) ;
376 TH1F * h6 = new TH1F("hTOFRecPointsRawTimeOA", "RecPoints raw Time Spectrum in TOF (ns)-O/A side; Measured TOF time [ns];Hits", 250, 0., 610.) ;
377 TH1F * h7 = new TH1F("hTOFRecPointsRawTimeIC", "RecPoints raw Time Spectrum in TOF (ns)-I/C side; Measured TOF time [ns];Hits", 250, 0., 610.) ;
378 TH1F * h8 = new TH1F("hTOFRecPointsRawTimeOC", "RecPoints raw Time Spectrum in TOF (ns)-O/C side; Measured TOF time [ns];Hits", 250, 0., 610.) ;
32bd8225 379
724eb92e 380 TH1F * h9 = new TH1F("hTOFRecPointsToTIA", "RecPoints ToT Spectrum in TOF (ns)-I/A side; Measured TOT [ns];Hits", 100, 0., 48.8 ) ;
381 TH1F * h10 = new TH1F("hTOFRecPointsToTOA", "RecPoints ToT Spectrum in TOF (ns)-O/A side; Measured TOT [ns];Hits", 100, 0., 48.8 ) ;
382 TH1F * h11 = new TH1F("hTOFRecPointsToTIC", "RecPoints ToT Spectrum in TOF (ns)-I/C side; Measured TOT [ns];Hits", 100, 0., 48.8 ) ;
383 TH1F * h12 = new TH1F("hTOFRecPointsToTOC", "RecPoints ToT Spectrum in TOF (ns)-O/C side; Measured TOT [ns];Hits", 100, 0., 48.8 ) ;
384
385 TH2F * h13 = new TH2F("hTOFRecPointsClusMap","RecPoints map; sector ;strip", 72, 0., 18., 91, 0., 91.) ;
386 TH2F * h14 = new TH2F("hTOFRecPointsTimeVsStrip","RecPoints TOF time vs. strip (theta); Strip index; RecPoints TOF time (ns) ",91, 0., 91., 250, 0., 610.) ;
387 TH2F * h15 = new TH2F("hTOFRecPointsTimeVsTRM035","TOF RecPoints time vs TRM - crates 0 to 35; TRM index = DDL*10+TRM(0-9);TOF time [ns]", 361, 0., 361., 250, 0., 610.0) ;
388 TH2F * h16 = new TH2F("hTOFRecPointsTimeVsTRM3671","TOF RecPoints time vs TRM - crates 36 to 72; TRM index = DDL**10+TRM(0-9);TOF time [ns]", 361, 360., 721., 250, 0., 610.0) ;
17f2cd01 389
724eb92e 390 h0->Sumw2() ;
391 h1->Sumw2() ;
392 h2->Sumw2() ;
393 h3->Sumw2() ;
394 h4->Sumw2() ;
395 h5->Sumw2() ;
396 h6->Sumw2() ;
397 h7->Sumw2() ;
398 h8->Sumw2() ;
399 h9->Sumw2() ;
400 h10->Sumw2() ;
401 h11->Sumw2() ;
402 h12->Sumw2() ;
403 h13->Sumw2() ;
404 h14->Sumw2() ;
405 h15->Sumw2() ;
406 h16->Sumw2() ;
407
5f144062 408 Add2RecPointsList(h0, 0, !expert, image) ;
409 Add2RecPointsList(h1, 1, !expert, image) ;
410 Add2RecPointsList(h2, 2, !expert, image) ;
411 Add2RecPointsList(h3, 3, !expert, image) ;
412 Add2RecPointsList(h4, 4, !expert, image) ;
724eb92e 413 Add2RecPointsList(h5, 5, expert, !image) ;
5f144062 414 Add2RecPointsList(h6, 6, expert, !image) ;
415 Add2RecPointsList(h7, 7, expert, !image) ;
416 Add2RecPointsList(h8, 8, expert, !image) ;
724eb92e 417 Add2RecPointsList(h9, 9, !expert, !image) ;
418 Add2RecPointsList(h10, 10, !expert, !image) ;
419 Add2RecPointsList(h11, 11, !expert, !image) ;
420 Add2RecPointsList(h12, 12, !expert, !image) ;
5f144062 421 Add2RecPointsList(h13, 13, expert, !image) ;
724eb92e 422 Add2RecPointsList(h14, 14, expert, image) ;
5f144062 423 Add2RecPointsList(h15, 15, expert, !image) ;
424 Add2RecPointsList(h16, 16, expert, !image) ;
e648d82d 425
04236e67 426}
427
428//____________________________________________________________________________
429void AliTOFQADataMakerRec::InitESDs()
430{
431 //
432 //create ESDs histograms in ESDs subdir
433 //
135306ea 434
5f144062 435 const Bool_t expert = kTRUE ;
436 const Bool_t image = kTRUE ;
04236e67 437
7b81681b 438 TH1I * h0 = new TH1I("hTOFESDs", "Number of matched TOF tracks per event;Number of TOF matched ESD tracks;Counts", 200, 0, 200) ;
724eb92e 439 TH1F * h1 = new TH1F("hTOFESDsTime", "Matched ESDs tracks: TOF Time spectrum; Calibrated TOF time [ns];Counts", 250, 0., 610. ) ;
440 TH1F * h2 = new TH1F("hTOFESDsRawTime", "Matched ESDs tracks: TOF raw Time spectrum;Measured TOF time [ns];Counts", 250, 0., 610.) ;
441 TH1F * h3 = new TH1F("hTOFESDsToT", "Matched ESDs tracks: TOF ToT spectrum; ESDs ToT [ns];Counts",100, 0., 48.8) ;
442 TH1F * h4 = new TH1F("hTOFESDskTOFOUT", "p_{T} distribution of tracks with kTOFout; p_{T} (GeV/c);Counts", 50, 0.20, 5.00) ;
443 TH1F * h5 = new TH1F("hTOFESDskTIME", "p_{T} distribution of tracks with kTOFout && kTIME; p_{T} (GeV/c);Counts", 50, 0.20, 5.00) ;
444 TH1F * h6 = new TH1F("hTOFESDsMatched", "p_{T} distribution of tracks with kTOFout && TOFtime>0; p_{T} (GeV/c);Counts", 50, 0.20, 5.00) ;
445 TH1F * h7 = new TH1F("hTOFESDsMatchingProb", "TPC-TOF track-matching probability;TOF matching probability (%) ;Counts",101, -1.0, 100) ;
446 TH1F * h8 = new TH1F("hTOFESDsDiffTime", "ESDs t_{TOF}-t_{exp,pi} spectrum in TOF (ps); t_{TOF}-t_{exp,pi} [ps];Counts", 200, -2440., 2440.) ;
447 TH1F * h9 = new TH1F("hTOFHitsLength", "Matched ESDs tracks: Length Spectrum; Track length [cm];Counts", 800, 0., 800) ;
448
5f144062 449 h0->Sumw2() ;
04236e67 450 h1->Sumw2() ;
04236e67 451 h2->Sumw2() ;
04236e67 452 h3->Sumw2() ;
5f144062 453 h4->Sumw2() ;
454 h5->Sumw2() ;
455 h6->Sumw2() ;
456 h7->Sumw2() ;
457 h8->Sumw2() ;
458 h9->Sumw2() ;
5f144062 459
460 Add2ESDsList(h0, 0, !expert, image) ;
461 Add2ESDsList(h1, 1, !expert, image) ;
724eb92e 462 Add2ESDsList(h2, 2, expert, !image) ;
463 Add2ESDsList(h3, 3, !expert, !image) ;
5f144062 464 Add2ESDsList(h4, 4, expert, image) ;
465 Add2ESDsList(h5, 5, expert, image) ;
466 Add2ESDsList(h6, 6, expert, image) ;
467 Add2ESDsList(h7, 7, expert, image) ;
724eb92e 468 Add2ESDsList(h8, 8, expert, !image) ;
469 Add2ESDsList(h9, 9, !expert, !image) ;
470
04236e67 471}
472
5f144062 473
04236e67 474//____________________________________________________________________________
475void AliTOFQADataMakerRec::MakeRaws(AliRawReader* rawReader)
476{
477 //
478 // makes data from Raws
479 //
724eb92e 480 if (rawReader->GetType()==7) {
481
482 Double_t tdc2ns=AliTOFGeometry::TdcBinWidth()*1E-3;//in ns
483 Double_t tot2ns=AliTOFGeometry::ToTBinWidth()*1E-3;
484 Int_t ntof[5]; /* 0=tot, 1=IA, 2=OA, 3=IC, 4=OC*/
485 for (Int_t j=0;j<5;j++){ ntof[j]=0;}
486 Int_t equipmentID[5]; //(ddl, trm, chain,tdc,channel)
487 Int_t volumeID[5]; //(sector,plate,strip,padX,padZ)
488 Int_t volumeID2[5]; //(sector,plate,strip,padZ,padX) to use AliTOFGeometry::GetIndex()
489 Int_t chIndex=-1;
490
491 TClonesArray * clonesRawData;
492 fTOFRawStream.SetRawReader(rawReader);
493
494 //uncomment if needed to apply DeltaBC correction
495 //fTOFRawStream.ApplyBCCorrections(kTRUE);
496
497 fDecoderSummary->Reset();
498 for (Int_t iDDL = 0; iDDL < AliTOFGeometry::NDDL()*AliTOFGeometry::NSectors(); iDDL++){
499 rawReader->Reset();
500 fTOFRawStream.LoadRawDataBuffersV2(iDDL);
501
502 //* get decoding error counters
503 fDecoderSummary = ( (AliTOFDecoderV2*) fTOFRawStream.GetDecoderV2() ) ->GetDecoderSummaryData();
504 if ( (fDecoderSummary) && (fDecoderSummary ->GetErrorDetected()) ) {
505 Int_t errorSlotID=(Int_t) fDecoderSummary->GetErrorSlotID();
506 GetRawsData(18)->Fill(iDDL,errorSlotID);
507 if (fDecoderSummary -> GetRecoverError() )
508 GetRawsData(18)->Fill(iDDL,13);
509 }
510
511 clonesRawData = (TClonesArray*)fTOFRawStream.GetRawData();
512 for (Int_t iRawData = 0; iRawData<clonesRawData->GetEntriesFast(); iRawData++) {
513 AliTOFrawData *tofRawDatum = (AliTOFrawData*)clonesRawData->UncheckedAt(iRawData);
f63f6d7e 514
724eb92e 515 if (tofRawDatum->GetTOF()){
516 equipmentID[0]=iDDL;
517 equipmentID[1]=tofRawDatum->GetTRM();
518 equipmentID[2]=tofRawDatum->GetTRMchain();
519 equipmentID[3]=tofRawDatum->GetTDC();
520 equipmentID[4]=tofRawDatum->GetTDCchannel();
521
522 if (CheckEquipID(equipmentID)){
523 fTOFRawStream.EquipmentId2VolumeId(iDDL,
524 tofRawDatum->GetTRM(),
525 tofRawDatum->GetTRMchain(),
526 tofRawDatum->GetTDC(),
527 tofRawDatum->GetTDCchannel(),
528 volumeID);
529 //LTM data
530 if (FilterLTMData(equipmentID)) { //counts LTM hits
531 if (equipmentID[2]==1) { //crate left, A-side or C-side
532 GetRawsData(15)->Fill(equipmentID[0]);
533 } else {
534 if (equipmentID[0]<36) { GetRawsData(15)->Fill(equipmentID[0]-1); }
535 else { GetRawsData(15)->Fill(equipmentID[0]+1); }
536 }
537 continue;
538 }
17f2cd01 539
724eb92e 540 //TRM data
541 if (CheckVolumeID(volumeID)){
542 volumeID2[0]=volumeID[0];
543 volumeID2[1]=volumeID[1];
544 volumeID2[2]=volumeID[2];
545 volumeID2[3]=volumeID[4];
546 volumeID2[4]=volumeID[3];
547 chIndex=AliTOFGeometry::GetIndex(volumeID2);
548
549 if (tofRawDatum->GetTOT()){
550 if (!(fCalibData->GetNoiseStatus(chIndex)==AliTOFChannelOnlineStatusArray::kTOFNoiseBad)
551 && (fCalibData->GetHWStatus(chIndex) == AliTOFChannelOnlineStatusArray::kTOFHWOk)) {//noise and enabled filter
552 ntof[0]++; //counter for tof hits
553
554 //fill global spectra for DQM plots
555 GetRawsData(5)->Fill( tofRawDatum->GetTOF()*tdc2ns) ;//in ns
556 GetRawsData(10)->Fill( tofRawDatum->GetTOT()*tot2ns) ;//in ns
557
558 //fill side-related spectra for experts plots
559 Int_t ddlACside=iDDL/36; // 0 or 1
560 Int_t ddlPerSm=iDDL%4;
561
562 if (volumeID2[0]>4 && volumeID2[0]<14){ //I side
563 if (ddlPerSm<2){ //A side
564 ntof[1]++;
565 GetRawsData(6)->Fill( tofRawDatum->GetTOF()*tdc2ns) ;
566 GetRawsData(11)->Fill( tofRawDatum->GetTOT()*tot2ns) ;
567 } else { //C side
568 ntof[3]++;
569 GetRawsData(8)->Fill( tofRawDatum->GetTOF()*tdc2ns) ;
570 GetRawsData(13)->Fill( tofRawDatum->GetTOT()*tot2ns) ;
571 }
572 } else {
573 if (volumeID2[0]<5 || volumeID2[0]>13){ //O side
574 if (ddlPerSm<2){ //A side
575 ntof[2]++;
576 GetRawsData(7)->Fill( tofRawDatum->GetTOF()*tdc2ns) ;
577 GetRawsData(12)->Fill( tofRawDatum->GetTOT()*tot2ns) ;
578 } else {//C side
579 ntof[4]++;
580 GetRawsData(9)->Fill( tofRawDatum->GetTOF()*tdc2ns) ;
581 GetRawsData(14)->Fill( tofRawDatum->GetTOT()*tot2ns) ;
582 }
583 }
584 }
585
586 //compute TRM offset
587 Int_t trm= iDDL*10+(equipmentID[1]-3);
588 GetRawsData(20+ddlACside)->Fill(trm,tofRawDatum->GetTOF()*tdc2ns);
589 GetRawsData(22)->Fill(GetStripIndex(volumeID),tofRawDatum->GetTOF()*tdc2ns) ;
590 Short_t fea = volumeID2[4]/12;
591 Float_t hitmapx = volumeID2[0] + ((Double_t)(3 - fea) + 0.5) *0.25;
592 GetRawsData(17)->Fill(hitmapx,GetStripIndex(volumeID2));
593 }//noise filter
594 }//end hit selection
595 else { //orphans
596 if (!(fCalibData->GetNoiseStatus(chIndex) == AliTOFChannelOnlineStatusArray::kTOFNoiseBad)
597 && (fCalibData->GetHWStatus(chIndex) == AliTOFChannelOnlineStatusArray::kTOFHWOk))
598 GetRawsData(19)->Fill( tofRawDatum->GetTOF()*tdc2ns) ;//in ns
599 }//end orphans
600 }//end volumeID check
601 }//end equipID check
602 }//end tof check
603 }//loop on raw data
604 clonesRawData->Clear();
605 } // DDL Loop
606
607 for (Int_t j=0;j<5;j++) { GetRawsData(j)->Fill(ntof[j]); }
608 fProcessedRawEventN++;
609 fTOFRawStream.Clear();
610 } else {
611 AliDebug(1,Form("Event of type %d found. Skipping non-physics event for QA.\n", rawReader->GetType()));
612 }
613
614 //fill reference map for DQM shifter only once in a detector cycle
615 if (fIsSOC) {
616 Int_t geoId[5]={-1,-1,-1,-1,-1};// pgeoId=(sm, mod, strip, padZ, padX)
617 Int_t detId[5]={-1,-1,-1,-1,-1};//detID=(ddl,trm,tdc, chain,channel)
618 Int_t trmIndex=-1;
619 for (Int_t ch = 0; ch < fCalibData->GetSize(); ch++) {
620 AliTOFGeometry::GetVolumeIndices(ch,geoId);
621 AliTOFRawStream::Geant2EquipmentId(geoId,detId);
622 if ((detId[1]<0)||(detId[0]<0)) continue;
623 trmIndex=(detId[1]-3)+detId[0]*10;
624
625 //set TRM counters
626 // if (fCalibData->GetNoiseStatus(ch)==AliTOFChannelOnlineStatusArray::kTOFNoiseBad)
627 // fTRMNoisyArray[trmIndex]+=1;
628 // if (fCalibData->GetHWStatus(ch) == AliTOFChannelOnlineStatusArray::kTOFHWOk)
629 // fTRMHwOkArray[trmIndex]+=1;
630
631 if ( (!(fCalibData->GetNoiseStatus(ch)==AliTOFChannelOnlineStatusArray::kTOFNoiseBad))
632 && (fCalibData->GetHWStatus(ch) == AliTOFChannelOnlineStatusArray::kTOFHWOk) ){
633 //fTRMEnabledArray[trmIndex]+=1;
634 //fill reference map with info from OCDB
635 Short_t fea = geoId[4]/12;
636 Float_t hitmapx = geoId[0] + ((Double_t)(3 - fea) + 0.5)*0.25;
637 GetRawsData(16)->Fill(hitmapx, GetStripIndex(geoId));
638 }
f63f6d7e 639 }
724eb92e 640 //printf("Counters for noisy, enabled and good channels in TOF TRMs read from OCDB.\n");
641 fIsSOC=kFALSE;
642 }
a3286ffd 643
724eb92e 644 //enable options for DQM shifter
645 EnableDqmShifterOpt(kTRUE);
44ed7a66 646}
647
44ed7a66 648//____________________________________________________________________________
04236e67 649void AliTOFQADataMakerRec::MakeRecPoints(TTree * clustersTree)
650{
f63f6d7e 651 //
32bd8225 652 // Make data from Clusters
653 //
654
655 Double_t tdc2ns=AliTOFGeometry::TdcBinWidth()*1E-3;
656 Double_t tot2ns=AliTOFGeometry::ToTBinWidth()*1E-3;
724eb92e 657
658 Int_t volumeID2[5];//(sm, plate,strip, padZ,padX)
659 //Int_t volumeID[5];//(sm, plate,strip, padX,padZ)
660
32bd8225 661 TBranch *branch=clustersTree->GetBranch("TOF");
662 if (!branch) {
663 AliError("can't get the branch with the TOF clusters !");
664 return;
665 }
666
667 static TClonesArray dummy("AliTOFcluster",10000);
668 dummy.Clear();
669 TClonesArray *clusters=&dummy;
670 branch->SetAddress(&clusters);
724eb92e 671
32bd8225 672 // Import the tree
673 clustersTree->GetEvent(0);
674
7b81681b 675 GetRecPointsData(0)->Fill((Int_t)clusters->GetEntriesFast()) ;
32bd8225 676
677 TIter next(clusters) ;
678 AliTOFcluster * c ;
679 while ( (c = dynamic_cast<AliTOFcluster *>(next())) ) {
680
724eb92e 681 // volumeID2[0] = c->GetDetInd(0);
682 // volumeID2[1] = c->GetDetInd(1);
683 // volumeID2[2] = c->GetDetInd(2);
684 // volumeID2[3] = c->GetDetInd(4); //padX
685 // volumeID2[4] = c->GetDetInd(3); //padZ
32bd8225 686
687 for (Int_t i=0;i<5;i++){
724eb92e 688 volumeID2[i]=c->GetDetInd(i); //X and Z indeces inverted in RecPoints
32bd8225 689 }
724eb92e 690 //Int_t chIndex=AliTOFGeometry::GetIndex(volumeID2);
32bd8225 691 Int_t iDDL=AliTOFRawStream::Geant2DDL(volumeID2);
5f144062 692 Int_t iTRM=AliTOFRawStream::Geant2TRM(volumeID2);
724eb92e 693 Short_t fea = volumeID2[4]/12;
694 Float_t hitmapx = volumeID2[0] + ((Double_t)(3 - fea) + 0.5) *0.25;
695 Int_t ddlACside=iDDL/36; // 0 or 1
696 Int_t ddlPerSm=iDDL%4;
697
698 if ((c->GetTDCRAW()) && (c->GetTDC()) && (c->GetToT())){
699 if (volumeID2[0]>4 && volumeID2[0]<14){ //I side
700 if (ddlPerSm<2){ //A side
701 GetRecPointsData(1)->Fill( c->GetTDC()*tdc2ns) ;//in ns
702 GetRecPointsData(5)->Fill( c->GetTDCRAW()*tdc2ns) ;//in ns
703 GetRecPointsData(9)->Fill( c->GetToT()*tot2ns) ;//in ns
704 } else {//C side
705 GetRecPointsData(3)->Fill( c->GetTDC()*tdc2ns) ;//in ns
706 GetRecPointsData(7)->Fill( c->GetTDCRAW()*tdc2ns) ;//in ns
707 GetRecPointsData(11)->Fill( c->GetToT()*tot2ns) ;//in ns
5f144062 708 }
724eb92e 709 } else {
710 if (volumeID2[0]<5 || volumeID2[0]>13){ //O side
711 if (ddlPerSm<2){ //A side
712 GetRecPointsData(2)->Fill( c->GetTDC()*tdc2ns) ;//in ns
713 GetRecPointsData(6)->Fill( c->GetTDCRAW()*tdc2ns) ;//in ns
714 GetRecPointsData(10)->Fill( c->GetToT()*tot2ns) ;//in ns
715 } else { //C side
716 GetRecPointsData(4)->Fill( c->GetTDC()*tdc2ns) ;//in ns
717 GetRecPointsData(8)->Fill( c->GetTDCRAW()*tdc2ns) ;//in ns
718 GetRecPointsData(12)->Fill( c->GetToT()*tot2ns) ;//in ns
719 }
5f144062 720 }
724eb92e 721 }
722 GetRecPointsData(13)->Fill(hitmapx,GetStripIndex(volumeID2));
723 GetRecPointsData(14)->Fill(GetStripIndex(volumeID2), c->GetTDC()*tdc2ns) ;
724 Int_t trm= iDDL*10+(iTRM-3);
725 if (ddlACside==0) { //A side
726 GetRecPointsData(15)->Fill(trm,c->GetTDC()*tdc2ns);
727 } else {//C side
728 GetRecPointsData(16)->Fill(trm,c->GetTDC()*tdc2ns);
729 }
5f144062 730 }//hit selection
724eb92e 731 }//end while
5f144062 732 EnableDqmShifterOpt(kFALSE);
04236e67 733}
734
735//____________________________________________________________________________
5f144062 736void AliTOFQADataMakerRec::MakeESDs(AliESDEvent * esd)
04236e67 737{
738 //
739 // make QA data from ESDs
740 //
724eb92e 741 const Double_t speedOfLight = TMath::C()*1E2*1E-12; // cm/ps
742 const Double_t pionMass = 0.13957018; //GeV/c^2
5f144062 743
724eb92e 744 Int_t ntrk = esd->GetNumberOfTracks() ;
745 Int_t ntpc=0;
746 Int_t ntofout=0;
7b81681b 747
724eb92e 748 while (ntrk--) {
749 AliESDtrack *track=esd->GetTrack(ntrk);
750 Double_t tofTime=track->GetTOFsignal();//in ps
751 Double_t tofTimeRaw=track->GetTOFsignalRaw();//in ps
752 Double_t tofToT=track->GetTOFsignalToT(); //in ps
753
754 UInt_t status=track->GetStatus();
755 if (track->IsOn(AliESDtrack::kTPCrefit)) {
756 ntpc++;
757 Double_t y=track->Eta();
758 if (TMath::Abs(y)<0.9) { //select TOF acceptance
759 if ((status&AliESDtrack::kTOFout)!=0) { //define matching
760 ntofout++;
761 GetESDsData(1)->Fill(tofTime*1E-3);
762 GetESDsData(2)->Fill(tofTimeRaw*1E-3);
763 GetESDsData(3)->Fill(tofToT*1E-3);
764 GetESDsData(4)->Fill(track->Pt());
765
766 Double_t length =track->GetIntegratedLength();
767 Double_t mom2=(track->Pt()*track->Pt())+(track->Pz()*track->Pz());
768 Double_t piTexp = TMath::Sqrt(1+(pionMass*pionMass/mom2))*length/speedOfLight; //in ps
769 GetESDsData(8)->Fill(tofTime-piTexp);
770 GetESDsData(9)->Fill(length);
771
772 if ((status&AliESDtrack::kTIME)!=0)
773 GetESDsData(5)->Fill(track->Pt());
774
775 if (tofTime>0)
776 GetESDsData(6)->Fill(track->Pt());
777 } //end check on matched tracks
778 }
779 }//end check on TPCrefit
5f144062 780 }
781
724eb92e 782 GetESDsData(0)->Fill(ntofout) ;
5f144062 783 if(ntpc>0){
724eb92e 784 Float_t ratio = (Float_t)ntofout/(Float_t)ntpc*100.; //matching probability
785 GetESDsData(7)->Fill(ratio) ;
5f144062 786 }
787
788 if(ntofout>0) {
724eb92e 789 Float_t ratio = (Float_t)ntofout/(Float_t)ntpc*100; //matched over propagated to TOF outer radius
5f144062 790 GetESDsData(8)->Fill(ratio) ;
791 }
792 EnableDqmShifterOpt(kFALSE);
04236e67 793}
5f144062 794
04236e67 795//____________________________________________________________________________
796void AliTOFQADataMakerRec::StartOfDetectorCycle()
797{
798 //
799 //Detector specific actions at start of cycle
724eb92e 800 // ResetAllTRMcounters();
17f2cd01 801 fCalibData = GetCalibData();
724eb92e 802 fIsSOC=kTRUE;
803 return;
804}
04236e67 805
806//____________________________________________________________________________
4e25ac79 807void AliTOFQADataMakerRec::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray ** list)
04236e67 808{
809 //Detector specific actions at end of cycle
810 // do the QA checking
e648d82d 811
724eb92e 812 for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
813 if ( !AliQAv1::Instance()->IsEventSpecieSet(specie) )
814 continue ;
815
816 if (fEnableDqmShifterOpt){
817 // Help make the raw qa histogram easier to interpret for the DQM shifter
818 if (!GetRawsData(0) || !GetRawsData(5) || !GetRawsData(10)
819 || !GetRawsData(15) || !GetRawsData(16) || !GetRawsData(17)) {
820 printf("No histogram for DQM found - Possible memory corruption ???. Please check\n") ;
821 continue;
822 }
823 printf("=========>Processed %i physics raw events. \n",fProcessedRawEventN);
824
825 //Double_t monitorPeriodLength=fProcessedRawEventN*600*1E-9;//in s
826
827 if (fCalibData){
828 //set minima and maxima to allow log scale
829 Double_t yTimeMax = GetRawsData(5)->GetMaximum();
830 Double_t yTotMax = GetRawsData(10)->GetMaximum();
831 yTimeMax+=yTimeMax*0.1;
832 yTotMax+=+yTotMax*0.1;
833 fLineExpTimeMin->SetY2(yTimeMax);
834 fLineExpTimeMax->SetY2(yTimeMax);
835 fLineExpTotMin->SetY2(yTotMax);
836 fLineExpTotMax->SetY2(yTotMax);
5f144062 837
724eb92e 838 for (Int_t j=0;j<18;j++){
839 if ((j==0)||(j==5)||(j==10)||(j==15)||(j==16)||(j==17)) {
840 GetRawsData(j)->GetXaxis()->SetLabelOffset(0.005);
841 GetRawsData(j)->GetXaxis()->SetLabelSize(0.05);
842 GetRawsData(j)->GetXaxis()->SetTitleOffset(0.8);
843 GetRawsData(j)->GetXaxis()->SetTitleSize(0.05);
844 GetRawsData(j)->GetYaxis()->SetLabelOffset(0.005);
845 GetRawsData(j)->GetYaxis()->SetLabelSize(0.06);
846 GetRawsData(j)->GetYaxis()->SetTitleOffset(0.8);
847 GetRawsData(j)->GetYaxis()->SetTitleSize(0.06);
848 }
ba5613e3 849 }
724eb92e 850
851 GetRawsData(5)->GetYaxis()->SetRangeUser(0.1, yTimeMax);
852 GetRawsData(10)->GetYaxis()->SetRangeUser(0.1, yTotMax);
724eb92e 853
a3286ffd 854
724eb92e 855 //make up for all histos
856 for(Int_t j=0;j<5;j++){
857 GetRawsData(j)->SetMarkerColor(kBlue);
858 GetRawsData(j)->SetMarkerStyle(8);
859 GetRawsData(j)->SetMarkerSize(0.7);
860 }
861 for(Int_t j=5;j<15;j++){
862 GetRawsData(j)->SetLineColor(kBlue);
863 GetRawsData(j)->SetLineWidth(1);
864 GetRawsData(j)->SetMarkerColor(kBlue);
865 //GetRawsData(j)->SetFillColor(kWhite);
866 //GetRawsData(j)->SetDrawOption("bar");
867 }
868
869 GetRawsData(15)->SetLineColor(kBlue);
870 GetRawsData(15)->SetLineWidth(1);
871 GetRawsData(15)->SetMarkerStyle(8);
872 GetRawsData(15)->SetMarkerSize(0.7);
873 GetRawsData(15)->SetMarkerColor(kBlue);//Option("bar");
874
875 GetRawsData(16)->SetOption("colz");
876 GetRawsData(17)->SetOption("colz");
877 GetRawsData(18)->SetOption("colz");
724eb92e 878 }
879 }//END ENABLE DQM SHIFTER OPT
880 } //end for
881 AliQAChecker::Instance()->Run(AliQAv1::kTOF, task, list) ;
04236e67 882}
883//____________________________________________________________________________
32bd8225 884void AliTOFQADataMakerRec::GetMapIndeces(const Int_t* const in , Int_t* out)
04236e67 885{
886 //
887 //return appropriate indeces for the theta-phi map
888 //
889
890 Int_t npadX = AliTOFGeometry::NpadX();
891 Int_t npadZ = AliTOFGeometry::NpadZ();
892 Int_t nStripA = AliTOFGeometry::NStripA();
893 Int_t nStripB = AliTOFGeometry::NStripB();
894 Int_t nStripC = AliTOFGeometry::NStripC();
895
896 Int_t isector = in[0];
897 Int_t iplate = in[1];
898 Int_t istrip = in[2];
899 Int_t ipadX = in[3];
900 Int_t ipadZ = in[4];
901
902 Int_t stripOffset = 0;
903 switch (iplate) {
904 case 0:
905 stripOffset = 0;
906 break;
907 case 1:
908 stripOffset = nStripC;
909 break;
910 case 2:
911 stripOffset = nStripC+nStripB;
912 break;
913 case 3:
914 stripOffset = nStripC+nStripB+nStripA;
915 break;
916 case 4:
917 stripOffset = nStripC+nStripB+nStripA+nStripB;
918 break;
919 default:
17f2cd01 920 AliDebug(1,Form("Wrong plate number in TOF (%d) !",iplate));
04236e67 921 break;
922 };
923 Int_t zindex=npadZ*(istrip+stripOffset)+(ipadZ+1);
924 Int_t phiindex=npadX*isector+ipadX+1;
925 out[0]=zindex;
926 out[1]=phiindex;
927
928}
5f144062 929
930//---------------------------------------------------------------
931Int_t AliTOFQADataMakerRec::GetStripIndex(const Int_t * const in)
932{
933 /* return tof strip index between 0 and 91 */
934
935 Int_t nStripA = AliTOFGeometry::NStripA();
936 Int_t nStripB = AliTOFGeometry::NStripB();
937 Int_t nStripC = AliTOFGeometry::NStripC();
938
939 // Int_t isector = in[0];
940 Int_t iplate = in[1];
941 Int_t istrip = in[2];
942 //Int_t ipadX = in[3];
943 //Int_t ipadZ = in[4];
944
945 Int_t stripOffset = 0;
946 switch (iplate) {
947 case 0:
948 stripOffset = 0;
949 break;
950 case 1:
951 stripOffset = nStripC;
952 break;
953 case 2:
954 stripOffset = nStripC+nStripB;
955 break;
956 case 3:
957 stripOffset = nStripC+nStripB+nStripA;
958 break;
959 case 4:
960 stripOffset = nStripC+nStripB+nStripA+nStripB;
961 break;
962 default:
963 AliDebug(1,Form("Wrong plate number in TOF (%d) !",iplate));
964 stripOffset=-1;
965 break;
966 };
967
968 if (stripOffset<0 || stripOffset>92) return -1;
969 else
970 return (stripOffset+istrip);
971
972}
17f2cd01 973//---------------------------------------------------------------
32bd8225 974Bool_t AliTOFQADataMakerRec::CheckVolumeID(const Int_t * const volumeID)
17f2cd01 975{
32bd8225 976 //
977 //Checks volume ID validity
978 //
17f2cd01 979
980 for (Int_t j=0;j<5;j++){
981 if (volumeID[j]<0) {
982 AliDebug(1,Form("Invalid detector volume index for volumeID[%i]",j));
983 return kFALSE;
984 }
985 }
986 return kTRUE;
987
988}
989
990//---------------------------------------------------------------
32bd8225 991Bool_t AliTOFQADataMakerRec::CheckEquipID(const Int_t * const equipmentID)
17f2cd01 992{
32bd8225 993 //
994 //Checks equipment ID validity
995
17f2cd01 996 for (Int_t j=0;j<5;j++){
997 if (equipmentID[j]<0) {
17f2cd01 998 AliDebug(1,Form("Invalid equipment volume index for equipmentID[%i]",j));
999 return kFALSE;
1000 }
1001 }
1002 return kTRUE;
1003}
32bd8225 1004//---------------------------------------------------------------
1005Bool_t AliTOFQADataMakerRec::FilterLTMData(const Int_t * const equipmentID) const
1006{
1007 /*It returns kTRUE if data come from LTM.
5f144062 1008 It thus filters trigger-related signals */
32bd8225 1009
1010 Int_t ddl, trm, tdc;
1011 //if (!CheckEquipID(equipmentID)) return kFALSE;
1012 ddl = equipmentID[0];
1013 trm = equipmentID[1];
1014 tdc = equipmentID[3];
1015
1016 if ((ddl%2==1) && (trm==3) && (tdc>11 && tdc<15))
1017 return kTRUE;
1018 else
1019 return kFALSE;
1020
1021}
1022//---------------------------------------------------------------
1023Bool_t AliTOFQADataMakerRec::FilterSpare(const Int_t * const equipmentID) const
1024{
1025 /*It returns kTRUE if data come from spare
1026 equipment ID.
1027 So far only check on TRM 3 crate left is implemented */
1028
1029 Int_t ddl, trm, tdc;
1030 //if (!CheckEquipID(equipmentID)) return kFALSE;
1031 ddl = equipmentID[0];
1032 trm = equipmentID[1];
1033 tdc = equipmentID[3];
1034
1035 if ((ddl%2==1) && (trm==3) && (tdc>2 && tdc<12))
1036 return kTRUE;
1037 else
1038 return kFALSE;
1039
1040}
724eb92e 1041//----------------------------------------------------------------
1042/*void AliTOFQADataMakerRec::ResetAllTRMcounters()
1043{
1044 //resets all TRM counters to 0
1045 for (Int_t trm=0;trm<720;trm++){
1046 fTRMNoisyArray[trm]=-1;
1047 fTRMHwOkArray[trm]=-1;
1048 fTRMEnabledArray[trm]=-1;
1049 }
1050 return;
1051
1052}
1053*/