]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TOF/AliTOFQADataMakerRec.cxx
Revert from previous commit changes in destructors
[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),
92664bc8 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),
92664bc8 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
97430dfe 169//----------------------------------------------------------------------------
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}
17f2cd01 184//----------------------------------------------------------------------------
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) ;
92664bc8 356 //
357 ClonePerTrigClass(AliQAv1::kRAWS); // this should be the last line
44ed7a66 358}
359
04236e67 360//____________________________________________________________________________
361void AliTOFQADataMakerRec::InitRecPoints()
362{
363 //
364 // create RecPoints histograms in RecPoints subdir
365 //
724eb92e 366
32bd8225 367 const Bool_t expert = kTRUE ;
368 const Bool_t image = kTRUE ;
04236e67 369
724eb92e 370 TH1I * h0 = new TH1I("hTOFRecPoints", "TOF RecPoints multiplicity ; TOF RecPoints number;Events",200, 0, 200) ;
5f144062 371
724eb92e 372 TH1F * h1 = new TH1F("hTOFRecPointsTimeIA", "RecPoints Time Spectrum in TOF (ns)- I/A side; Calibrated TOF time [ns];Events", 250, 0., 610.) ;
373 TH1F * h2 = new TH1F("hTOFRecPointsTimeOA", "RecPoints Time Spectrum in TOF (ns)- O/A side; Calibrated TOF time [ns];Events", 250, 0., 610.) ;
374 TH1F * h3 = new TH1F("hTOFRecPointsTimeIC", "RecPoints Time Spectrum in TOF (ns)- I/C side; Calibrated TOF time [ns];Events", 250, 0., 610.) ;
375 TH1F * h4 = new TH1F("hTOFRecPointsTimeOC", "RecPoints Time Spectrum in TOF (ns)- O/C side; Calibrated TOF time [ns];Events", 250, 0., 610.) ;
32bd8225 376
724eb92e 377 TH1F * h5 = new TH1F("hTOFRecPointsRawTimeIA", "RecPoints raw Time Spectrum in TOF (ns)-I/A side; Measured TOF time [ns];Hits", 250, 0., 610.) ;
378 TH1F * h6 = new TH1F("hTOFRecPointsRawTimeOA", "RecPoints raw Time Spectrum in TOF (ns)-O/A side; Measured TOF time [ns];Hits", 250, 0., 610.) ;
379 TH1F * h7 = new TH1F("hTOFRecPointsRawTimeIC", "RecPoints raw Time Spectrum in TOF (ns)-I/C side; Measured TOF time [ns];Hits", 250, 0., 610.) ;
380 TH1F * h8 = new TH1F("hTOFRecPointsRawTimeOC", "RecPoints raw Time Spectrum in TOF (ns)-O/C side; Measured TOF time [ns];Hits", 250, 0., 610.) ;
32bd8225 381
724eb92e 382 TH1F * h9 = new TH1F("hTOFRecPointsToTIA", "RecPoints ToT Spectrum in TOF (ns)-I/A side; Measured TOT [ns];Hits", 100, 0., 48.8 ) ;
383 TH1F * h10 = new TH1F("hTOFRecPointsToTOA", "RecPoints ToT Spectrum in TOF (ns)-O/A side; Measured TOT [ns];Hits", 100, 0., 48.8 ) ;
384 TH1F * h11 = new TH1F("hTOFRecPointsToTIC", "RecPoints ToT Spectrum in TOF (ns)-I/C side; Measured TOT [ns];Hits", 100, 0., 48.8 ) ;
385 TH1F * h12 = new TH1F("hTOFRecPointsToTOC", "RecPoints ToT Spectrum in TOF (ns)-O/C side; Measured TOT [ns];Hits", 100, 0., 48.8 ) ;
386
387 TH2F * h13 = new TH2F("hTOFRecPointsClusMap","RecPoints map; sector ;strip", 72, 0., 18., 91, 0., 91.) ;
388 TH2F * h14 = new TH2F("hTOFRecPointsTimeVsStrip","RecPoints TOF time vs. strip (theta); Strip index; RecPoints TOF time (ns) ",91, 0., 91., 250, 0., 610.) ;
389 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) ;
390 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 391
724eb92e 392 h0->Sumw2() ;
393 h1->Sumw2() ;
394 h2->Sumw2() ;
395 h3->Sumw2() ;
396 h4->Sumw2() ;
397 h5->Sumw2() ;
398 h6->Sumw2() ;
399 h7->Sumw2() ;
400 h8->Sumw2() ;
401 h9->Sumw2() ;
402 h10->Sumw2() ;
403 h11->Sumw2() ;
404 h12->Sumw2() ;
405 h13->Sumw2() ;
406 h14->Sumw2() ;
407 h15->Sumw2() ;
408 h16->Sumw2() ;
409
5f144062 410 Add2RecPointsList(h0, 0, !expert, image) ;
411 Add2RecPointsList(h1, 1, !expert, image) ;
412 Add2RecPointsList(h2, 2, !expert, image) ;
413 Add2RecPointsList(h3, 3, !expert, image) ;
414 Add2RecPointsList(h4, 4, !expert, image) ;
724eb92e 415 Add2RecPointsList(h5, 5, expert, !image) ;
5f144062 416 Add2RecPointsList(h6, 6, expert, !image) ;
417 Add2RecPointsList(h7, 7, expert, !image) ;
418 Add2RecPointsList(h8, 8, expert, !image) ;
724eb92e 419 Add2RecPointsList(h9, 9, !expert, !image) ;
420 Add2RecPointsList(h10, 10, !expert, !image) ;
421 Add2RecPointsList(h11, 11, !expert, !image) ;
422 Add2RecPointsList(h12, 12, !expert, !image) ;
5f144062 423 Add2RecPointsList(h13, 13, expert, !image) ;
724eb92e 424 Add2RecPointsList(h14, 14, expert, image) ;
5f144062 425 Add2RecPointsList(h15, 15, expert, !image) ;
426 Add2RecPointsList(h16, 16, expert, !image) ;
92664bc8 427 //
428 ClonePerTrigClass(AliQAv1::kRECPOINTS); // this should be the last line
04236e67 429}
430
431//____________________________________________________________________________
432void AliTOFQADataMakerRec::InitESDs()
433{
434 //
435 //create ESDs histograms in ESDs subdir
436 //
135306ea 437
5f144062 438 const Bool_t expert = kTRUE ;
439 const Bool_t image = kTRUE ;
04236e67 440
7b81681b 441 TH1I * h0 = new TH1I("hTOFESDs", "Number of matched TOF tracks per event;Number of TOF matched ESD tracks;Counts", 200, 0, 200) ;
724eb92e 442 TH1F * h1 = new TH1F("hTOFESDsTime", "Matched ESDs tracks: TOF Time spectrum; Calibrated TOF time [ns];Counts", 250, 0., 610. ) ;
443 TH1F * h2 = new TH1F("hTOFESDsRawTime", "Matched ESDs tracks: TOF raw Time spectrum;Measured TOF time [ns];Counts", 250, 0., 610.) ;
444 TH1F * h3 = new TH1F("hTOFESDsToT", "Matched ESDs tracks: TOF ToT spectrum; ESDs ToT [ns];Counts",100, 0., 48.8) ;
445 TH1F * h4 = new TH1F("hTOFESDskTOFOUT", "p_{T} distribution of tracks with kTOFout; p_{T} (GeV/c);Counts", 50, 0.20, 5.00) ;
446 TH1F * h5 = new TH1F("hTOFESDskTIME", "p_{T} distribution of tracks with kTOFout && kTIME; p_{T} (GeV/c);Counts", 50, 0.20, 5.00) ;
447 TH1F * h6 = new TH1F("hTOFESDsMatched", "p_{T} distribution of tracks with kTOFout && TOFtime>0; p_{T} (GeV/c);Counts", 50, 0.20, 5.00) ;
448 TH1F * h7 = new TH1F("hTOFESDsMatchingProb", "TPC-TOF track-matching probability;TOF matching probability (%) ;Counts",101, -1.0, 100) ;
449 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.) ;
450 TH1F * h9 = new TH1F("hTOFHitsLength", "Matched ESDs tracks: Length Spectrum; Track length [cm];Counts", 800, 0., 800) ;
451
5f144062 452 h0->Sumw2() ;
04236e67 453 h1->Sumw2() ;
04236e67 454 h2->Sumw2() ;
04236e67 455 h3->Sumw2() ;
5f144062 456 h4->Sumw2() ;
457 h5->Sumw2() ;
458 h6->Sumw2() ;
459 h7->Sumw2() ;
460 h8->Sumw2() ;
461 h9->Sumw2() ;
5f144062 462
463 Add2ESDsList(h0, 0, !expert, image) ;
464 Add2ESDsList(h1, 1, !expert, image) ;
724eb92e 465 Add2ESDsList(h2, 2, expert, !image) ;
466 Add2ESDsList(h3, 3, !expert, !image) ;
5f144062 467 Add2ESDsList(h4, 4, expert, image) ;
468 Add2ESDsList(h5, 5, expert, image) ;
469 Add2ESDsList(h6, 6, expert, image) ;
470 Add2ESDsList(h7, 7, expert, image) ;
724eb92e 471 Add2ESDsList(h8, 8, expert, !image) ;
472 Add2ESDsList(h9, 9, !expert, !image) ;
92664bc8 473 //
474 ClonePerTrigClass(AliQAv1::kESDS); // this should be the last line
04236e67 475}
476
5f144062 477
04236e67 478//____________________________________________________________________________
479void AliTOFQADataMakerRec::MakeRaws(AliRawReader* rawReader)
480{
481 //
482 // makes data from Raws
483 //
724eb92e 484 if (rawReader->GetType()==7) {
485
486 Double_t tdc2ns=AliTOFGeometry::TdcBinWidth()*1E-3;//in ns
487 Double_t tot2ns=AliTOFGeometry::ToTBinWidth()*1E-3;
488 Int_t ntof[5]; /* 0=tot, 1=IA, 2=OA, 3=IC, 4=OC*/
489 for (Int_t j=0;j<5;j++){ ntof[j]=0;}
490 Int_t equipmentID[5]; //(ddl, trm, chain,tdc,channel)
491 Int_t volumeID[5]; //(sector,plate,strip,padX,padZ)
492 Int_t volumeID2[5]; //(sector,plate,strip,padZ,padX) to use AliTOFGeometry::GetIndex()
493 Int_t chIndex=-1;
494
495 TClonesArray * clonesRawData;
496 fTOFRawStream.SetRawReader(rawReader);
497
498 //uncomment if needed to apply DeltaBC correction
499 //fTOFRawStream.ApplyBCCorrections(kTRUE);
500
501 fDecoderSummary->Reset();
502 for (Int_t iDDL = 0; iDDL < AliTOFGeometry::NDDL()*AliTOFGeometry::NSectors(); iDDL++){
503 rawReader->Reset();
504 fTOFRawStream.LoadRawDataBuffersV2(iDDL);
505
506 //* get decoding error counters
acfd6c93 507 fDecoderSummary = ( (AliTOFDecoderV2*) fTOFRawStream.GetDecoderV2() )->GetDecoderSummaryData();
724eb92e 508 if ( (fDecoderSummary) && (fDecoderSummary ->GetErrorDetected()) ) {
509 Int_t errorSlotID=(Int_t) fDecoderSummary->GetErrorSlotID();
92664bc8 510 FillRawsData(18,iDDL,errorSlotID);
724eb92e 511 if (fDecoderSummary -> GetRecoverError() )
92664bc8 512 FillRawsData(18,iDDL,13);
724eb92e 513 }
514
515 clonesRawData = (TClonesArray*)fTOFRawStream.GetRawData();
516 for (Int_t iRawData = 0; iRawData<clonesRawData->GetEntriesFast(); iRawData++) {
517 AliTOFrawData *tofRawDatum = (AliTOFrawData*)clonesRawData->UncheckedAt(iRawData);
f63f6d7e 518
724eb92e 519 if (tofRawDatum->GetTOF()){
520 equipmentID[0]=iDDL;
521 equipmentID[1]=tofRawDatum->GetTRM();
522 equipmentID[2]=tofRawDatum->GetTRMchain();
523 equipmentID[3]=tofRawDatum->GetTDC();
524 equipmentID[4]=tofRawDatum->GetTDCchannel();
525
526 if (CheckEquipID(equipmentID)){
527 fTOFRawStream.EquipmentId2VolumeId(iDDL,
528 tofRawDatum->GetTRM(),
529 tofRawDatum->GetTRMchain(),
530 tofRawDatum->GetTDC(),
531 tofRawDatum->GetTDCchannel(),
532 volumeID);
533 //LTM data
534 if (FilterLTMData(equipmentID)) { //counts LTM hits
535 if (equipmentID[2]==1) { //crate left, A-side or C-side
92664bc8 536 FillRawsData(15,equipmentID[0]);
724eb92e 537 } else {
92664bc8 538 if (equipmentID[0]<36) { FillRawsData(15,equipmentID[0]-1); }
539 else { FillRawsData(15,equipmentID[0]+1); }
724eb92e 540 }
541 continue;
542 }
17f2cd01 543
724eb92e 544 //TRM data
545 if (CheckVolumeID(volumeID)){
546 volumeID2[0]=volumeID[0];
547 volumeID2[1]=volumeID[1];
548 volumeID2[2]=volumeID[2];
549 volumeID2[3]=volumeID[4];
550 volumeID2[4]=volumeID[3];
551 chIndex=AliTOFGeometry::GetIndex(volumeID2);
552
553 if (tofRawDatum->GetTOT()){
acfd6c93 554 if (!(fCalibData->GetNoiseStatus(chIndex)==AliTOFChannelOnlineStatusArray::kTOFNoiseBad)
724eb92e 555 && (fCalibData->GetHWStatus(chIndex) == AliTOFChannelOnlineStatusArray::kTOFHWOk)) {//noise and enabled filter
556 ntof[0]++; //counter for tof hits
557
558 //fill global spectra for DQM plots
92664bc8 559 FillRawsData(5, tofRawDatum->GetTOF()*tdc2ns) ;//in ns
560 FillRawsData(10, tofRawDatum->GetTOT()*tot2ns) ;//in ns
724eb92e 561
562 //fill side-related spectra for experts plots
563 Int_t ddlACside=iDDL/36; // 0 or 1
564 Int_t ddlPerSm=iDDL%4;
565
acfd6c93 566 if (volumeID2[0]>4 && volumeID2[0]<14){ //O side
724eb92e 567 if (ddlPerSm<2){ //A side
568 ntof[1]++;
92664bc8 569 FillRawsData(6, tofRawDatum->GetTOF()*tdc2ns) ;
570 FillRawsData(11, tofRawDatum->GetTOT()*tot2ns) ;
724eb92e 571 } else { //C side
572 ntof[3]++;
92664bc8 573 FillRawsData(8, tofRawDatum->GetTOF()*tdc2ns) ;
574 FillRawsData(13, tofRawDatum->GetTOT()*tot2ns) ;
724eb92e 575 }
576 } else {
acfd6c93 577 if (volumeID2[0]<5 || volumeID2[0]>13){ //I side
724eb92e 578 if (ddlPerSm<2){ //A side
579 ntof[2]++;
92664bc8 580 FillRawsData(7, tofRawDatum->GetTOF()*tdc2ns) ;
581 FillRawsData(12, tofRawDatum->GetTOT()*tot2ns) ;
724eb92e 582 } else {//C side
583 ntof[4]++;
92664bc8 584 FillRawsData(9, tofRawDatum->GetTOF()*tdc2ns) ;
585 FillRawsData(14, tofRawDatum->GetTOT()*tot2ns) ;
724eb92e 586 }
587 }
588 }
589
590 //compute TRM offset
591 Int_t trm= iDDL*10+(equipmentID[1]-3);
92664bc8 592 FillRawsData(20+ddlACside,trm,tofRawDatum->GetTOF()*tdc2ns);
593 FillRawsData(22,GetStripIndex(volumeID),tofRawDatum->GetTOF()*tdc2ns) ;
724eb92e 594 Short_t fea = volumeID2[4]/12;
595 Float_t hitmapx = volumeID2[0] + ((Double_t)(3 - fea) + 0.5) *0.25;
92664bc8 596 FillRawsData(17,hitmapx,GetStripIndex(volumeID2));
724eb92e 597 }//noise filter
598 }//end hit selection
599 else { //orphans
600 if (!(fCalibData->GetNoiseStatus(chIndex) == AliTOFChannelOnlineStatusArray::kTOFNoiseBad)
601 && (fCalibData->GetHWStatus(chIndex) == AliTOFChannelOnlineStatusArray::kTOFHWOk))
92664bc8 602 FillRawsData(19, tofRawDatum->GetTOF()*tdc2ns) ;//in ns
724eb92e 603 }//end orphans
604 }//end volumeID check
605 }//end equipID check
606 }//end tof check
607 }//loop on raw data
608 clonesRawData->Clear();
609 } // DDL Loop
610
92664bc8 611 for (Int_t j=0;j<5;j++) FillRawsData(j,ntof[j]);
612 // fProcessedRawEventN++; // RS Now the framework conters are use
724eb92e 613 fTOFRawStream.Clear();
614 } else {
615 AliDebug(1,Form("Event of type %d found. Skipping non-physics event for QA.\n", rawReader->GetType()));
616 }
617
618 //fill reference map for DQM shifter only once in a detector cycle
619 if (fIsSOC) {
620 Int_t geoId[5]={-1,-1,-1,-1,-1};// pgeoId=(sm, mod, strip, padZ, padX)
621 Int_t detId[5]={-1,-1,-1,-1,-1};//detID=(ddl,trm,tdc, chain,channel)
622 Int_t trmIndex=-1;
623 for (Int_t ch = 0; ch < fCalibData->GetSize(); ch++) {
624 AliTOFGeometry::GetVolumeIndices(ch,geoId);
625 AliTOFRawStream::Geant2EquipmentId(geoId,detId);
626 if ((detId[1]<0)||(detId[0]<0)) continue;
627 trmIndex=(detId[1]-3)+detId[0]*10;
628
629 //set TRM counters
630 // if (fCalibData->GetNoiseStatus(ch)==AliTOFChannelOnlineStatusArray::kTOFNoiseBad)
631 // fTRMNoisyArray[trmIndex]+=1;
632 // if (fCalibData->GetHWStatus(ch) == AliTOFChannelOnlineStatusArray::kTOFHWOk)
633 // fTRMHwOkArray[trmIndex]+=1;
634
635 if ( (!(fCalibData->GetNoiseStatus(ch)==AliTOFChannelOnlineStatusArray::kTOFNoiseBad))
636 && (fCalibData->GetHWStatus(ch) == AliTOFChannelOnlineStatusArray::kTOFHWOk) ){
637 //fTRMEnabledArray[trmIndex]+=1;
638 //fill reference map with info from OCDB
639 Short_t fea = geoId[4]/12;
640 Float_t hitmapx = geoId[0] + ((Double_t)(3 - fea) + 0.5)*0.25;
92664bc8 641 FillRawsData(16,hitmapx, GetStripIndex(geoId));
724eb92e 642 }
f63f6d7e 643 }
724eb92e 644 //printf("Counters for noisy, enabled and good channels in TOF TRMs read from OCDB.\n");
645 fIsSOC=kFALSE;
646 }
a3286ffd 647
724eb92e 648 //enable options for DQM shifter
649 EnableDqmShifterOpt(kTRUE);
92664bc8 650 //
651 IncEvCountCycleRaws();
652 IncEvCountTotalRaws();
653 //
44ed7a66 654}
655
44ed7a66 656//____________________________________________________________________________
04236e67 657void AliTOFQADataMakerRec::MakeRecPoints(TTree * clustersTree)
658{
f63f6d7e 659 //
32bd8225 660 // Make data from Clusters
661 //
662
663 Double_t tdc2ns=AliTOFGeometry::TdcBinWidth()*1E-3;
664 Double_t tot2ns=AliTOFGeometry::ToTBinWidth()*1E-3;
724eb92e 665
666 Int_t volumeID2[5];//(sm, plate,strip, padZ,padX)
667 //Int_t volumeID[5];//(sm, plate,strip, padX,padZ)
668
32bd8225 669 TBranch *branch=clustersTree->GetBranch("TOF");
670 if (!branch) {
671 AliError("can't get the branch with the TOF clusters !");
672 return;
673 }
674
675 static TClonesArray dummy("AliTOFcluster",10000);
676 dummy.Clear();
677 TClonesArray *clusters=&dummy;
678 branch->SetAddress(&clusters);
724eb92e 679
32bd8225 680 // Import the tree
681 clustersTree->GetEvent(0);
682
92664bc8 683 FillRecPointsData(0,(Int_t)clusters->GetEntriesFast()) ;
32bd8225 684
685 TIter next(clusters) ;
686 AliTOFcluster * c ;
687 while ( (c = dynamic_cast<AliTOFcluster *>(next())) ) {
688
724eb92e 689 // volumeID2[0] = c->GetDetInd(0);
690 // volumeID2[1] = c->GetDetInd(1);
691 // volumeID2[2] = c->GetDetInd(2);
692 // volumeID2[3] = c->GetDetInd(4); //padX
693 // volumeID2[4] = c->GetDetInd(3); //padZ
32bd8225 694
695 for (Int_t i=0;i<5;i++){
724eb92e 696 volumeID2[i]=c->GetDetInd(i); //X and Z indeces inverted in RecPoints
32bd8225 697 }
724eb92e 698 //Int_t chIndex=AliTOFGeometry::GetIndex(volumeID2);
32bd8225 699 Int_t iDDL=AliTOFRawStream::Geant2DDL(volumeID2);
5f144062 700 Int_t iTRM=AliTOFRawStream::Geant2TRM(volumeID2);
724eb92e 701 Short_t fea = volumeID2[4]/12;
702 Float_t hitmapx = volumeID2[0] + ((Double_t)(3 - fea) + 0.5) *0.25;
703 Int_t ddlACside=iDDL/36; // 0 or 1
704 Int_t ddlPerSm=iDDL%4;
705
706 if ((c->GetTDCRAW()) && (c->GetTDC()) && (c->GetToT())){
707 if (volumeID2[0]>4 && volumeID2[0]<14){ //I side
708 if (ddlPerSm<2){ //A side
92664bc8 709 FillRecPointsData(1, c->GetTDC()*tdc2ns) ;//in ns
710 FillRecPointsData(5, c->GetTDCRAW()*tdc2ns) ;//in ns
711 FillRecPointsData(9, c->GetToT()*tot2ns) ;//in ns
724eb92e 712 } else {//C side
92664bc8 713 FillRecPointsData(3, c->GetTDC()*tdc2ns) ;//in ns
714 FillRecPointsData(7, c->GetTDCRAW()*tdc2ns) ;//in ns
715 FillRecPointsData(11, c->GetToT()*tot2ns) ;//in ns
5f144062 716 }
724eb92e 717 } else {
718 if (volumeID2[0]<5 || volumeID2[0]>13){ //O side
719 if (ddlPerSm<2){ //A side
92664bc8 720 FillRecPointsData(2, c->GetTDC()*tdc2ns) ;//in ns
721 FillRecPointsData(6, c->GetTDCRAW()*tdc2ns) ;//in ns
722 FillRecPointsData(10, c->GetToT()*tot2ns) ;//in ns
724eb92e 723 } else { //C side
92664bc8 724 FillRecPointsData(4, c->GetTDC()*tdc2ns) ;//in ns
725 FillRecPointsData(8, c->GetTDCRAW()*tdc2ns) ;//in ns
726 FillRecPointsData(12, c->GetToT()*tot2ns) ;//in ns
724eb92e 727 }
5f144062 728 }
724eb92e 729 }
92664bc8 730 FillRecPointsData(13,hitmapx,GetStripIndex(volumeID2));
731 FillRecPointsData(14,GetStripIndex(volumeID2), c->GetTDC()*tdc2ns) ;
724eb92e 732 Int_t trm= iDDL*10+(iTRM-3);
733 if (ddlACside==0) { //A side
92664bc8 734 FillRecPointsData(15,trm,c->GetTDC()*tdc2ns);
724eb92e 735 } else {//C side
92664bc8 736 FillRecPointsData(16,trm,c->GetTDC()*tdc2ns);
724eb92e 737 }
5f144062 738 }//hit selection
724eb92e 739 }//end while
5f144062 740 EnableDqmShifterOpt(kFALSE);
92664bc8 741 //
742 IncEvCountCycleRecPoints();
743 IncEvCountTotalRecPoints();
744 //
04236e67 745}
746
747//____________________________________________________________________________
5f144062 748void AliTOFQADataMakerRec::MakeESDs(AliESDEvent * esd)
04236e67 749{
750 //
751 // make QA data from ESDs
752 //
724eb92e 753 const Double_t speedOfLight = TMath::C()*1E2*1E-12; // cm/ps
754 const Double_t pionMass = 0.13957018; //GeV/c^2
5f144062 755
724eb92e 756 Int_t ntrk = esd->GetNumberOfTracks() ;
757 Int_t ntpc=0;
758 Int_t ntofout=0;
7b81681b 759
724eb92e 760 while (ntrk--) {
761 AliESDtrack *track=esd->GetTrack(ntrk);
762 Double_t tofTime=track->GetTOFsignal();//in ps
763 Double_t tofTimeRaw=track->GetTOFsignalRaw();//in ps
764 Double_t tofToT=track->GetTOFsignalToT(); //in ps
765
766 UInt_t status=track->GetStatus();
767 if (track->IsOn(AliESDtrack::kTPCrefit)) {
768 ntpc++;
769 Double_t y=track->Eta();
770 if (TMath::Abs(y)<0.9) { //select TOF acceptance
771 if ((status&AliESDtrack::kTOFout)!=0) { //define matching
772 ntofout++;
92664bc8 773 FillESDsData(1,tofTime*1E-3);
774 FillESDsData(2,tofTimeRaw*1E-3);
775 FillESDsData(3,tofToT*1E-3);
776 FillESDsData(4,track->Pt());
724eb92e 777
778 Double_t length =track->GetIntegratedLength();
779 Double_t mom2=(track->Pt()*track->Pt())+(track->Pz()*track->Pz());
780 Double_t piTexp = TMath::Sqrt(1+(pionMass*pionMass/mom2))*length/speedOfLight; //in ps
92664bc8 781 FillESDsData(8,tofTime-piTexp);
782 FillESDsData(9,length);
724eb92e 783
784 if ((status&AliESDtrack::kTIME)!=0)
92664bc8 785 FillESDsData(5,track->Pt());
724eb92e 786
787 if (tofTime>0)
92664bc8 788 FillESDsData(6,track->Pt());
724eb92e 789 } //end check on matched tracks
790 }
791 }//end check on TPCrefit
5f144062 792 }
793
92664bc8 794 FillESDsData(0,ntofout) ;
5f144062 795 if(ntpc>0){
724eb92e 796 Float_t ratio = (Float_t)ntofout/(Float_t)ntpc*100.; //matching probability
92664bc8 797 FillESDsData(7,ratio) ;
5f144062 798 }
799
800 if(ntofout>0) {
724eb92e 801 Float_t ratio = (Float_t)ntofout/(Float_t)ntpc*100; //matched over propagated to TOF outer radius
92664bc8 802 FillESDsData(8,ratio) ;
5f144062 803 }
804 EnableDqmShifterOpt(kFALSE);
92664bc8 805 //
806 IncEvCountCycleESDs();
807 IncEvCountTotalESDs();
808 //
04236e67 809}
5f144062 810
04236e67 811//____________________________________________________________________________
812void AliTOFQADataMakerRec::StartOfDetectorCycle()
813{
814 //
815 //Detector specific actions at start of cycle
724eb92e 816 // ResetAllTRMcounters();
17f2cd01 817 fCalibData = GetCalibData();
724eb92e 818 fIsSOC=kTRUE;
819 return;
820}
04236e67 821
822//____________________________________________________________________________
4e25ac79 823void AliTOFQADataMakerRec::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray ** list)
04236e67 824{
825 //Detector specific actions at end of cycle
826 // do the QA checking
92664bc8 827 ResetEventTrigClasses();
828 //
724eb92e 829 for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
92664bc8 830 if ( !AliQAv1::Instance()->IsEventSpecieSet(specie) ) continue ;
831 //
832 SetEventSpecie(AliRecoParam::ConvertIndex(specie)); // RS: the specie is not set, why?
833 //
834 for (int itc=-1;itc<GetNTrigClasses();itc++) { // RS: loop over eventual clones per trigger class
835 //
836 if (fEnableDqmShifterOpt) {
837 //
838 // RS: fetch the histograms for given trigger class
839 TObjArray& arrRW = *GetRawsDataOfTrigClass(itc);
840
841 // Help make the raw qa histogram easier to interpret for the DQM shifter
842 if (!arrRW[ 0] || !arrRW[ 5] || !arrRW[10] || !arrRW[15] || !arrRW[16] || !arrRW[17]) continue;
843 //printf("No histogram for DQM found - Possible memory corruption ???. Please check\n") ;
844 printf("=========>Processed %i physics raw of specie %s with TrigGlass %d\n",
845 GetEvCountCycleRaws(itc),AliRecoParam::GetEventSpecieName(specie), itc);
5f144062 846
92664bc8 847 //Double_t monitorPeriodLength=fProcessedRawEventN*600*1E-9;//in s
848
849 if (fCalibData){
850 //set minima and maxima to allow log scale
851 Double_t yTimeMax = ((TH1*)arrRW[5])->GetMaximum()*1.05;
852 Double_t yTotMax = ((TH1*)arrRW[10])->GetMaximum()*1.05;
853 fLineExpTimeMin->SetY2(yTimeMax);
854 fLineExpTimeMax->SetY2(yTimeMax);
855 fLineExpTotMin->SetY2(yTotMax);
856 fLineExpTotMax->SetY2(yTotMax);
857 //
858 for (Int_t j=0;j<18;j++){
859 if ((j==0)||(j==5)||(j==10)||(j==15)||(j==16)||(j==17)) {
860 TH1* htmp = (TH1*)arrRW[j];
861 htmp->GetXaxis()->SetLabelOffset(0.005);
862 htmp->GetXaxis()->SetLabelSize(0.05);
863 htmp->GetXaxis()->SetTitleOffset(0.8);
864 htmp->GetXaxis()->SetTitleSize(0.05);
865 htmp->GetYaxis()->SetLabelOffset(0.005);
866 htmp->GetYaxis()->SetLabelSize(0.06);
867 htmp->GetYaxis()->SetTitleOffset(0.8);
868 htmp->GetYaxis()->SetTitleSize(0.06);
869 }
724eb92e 870 }
92664bc8 871 //make up for all histos
872 for(Int_t j=0;j<5;j++) {
873 TH1* htmp = (TH1*)arrRW[j];
874 if (!htmp) continue;
875 htmp->SetMarkerColor(kBlue);
876 htmp->SetMarkerStyle(8);
877 htmp->SetMarkerSize(0.7);
878 }
879 for(Int_t j=5;j<15;j++) {
880 TH1* htmp = (TH1*)arrRW[j];
881 if (!htmp) continue;
882 htmp->SetLineColor(kBlue);
883 htmp->SetLineWidth(1);
884 htmp->SetMarkerColor(kBlue);
885 //htmp->SetFillColor(kWhite);
886 //htmp->SetDrawOption("bar");
887 }
888 //
889 TH1* htmp = (TH1*)arrRW[15];
890 htmp->SetLineColor(kBlue);
891 htmp->SetLineWidth(1);
892 htmp->SetMarkerStyle(8);
893 htmp->SetMarkerSize(0.7);
894 htmp->SetMarkerColor(kBlue);//Option("bar");
895 //
896 if ( (htmp=(TH1*)arrRW[16]) ) htmp->SetOption("colz");
897 if ( (htmp=(TH1*)arrRW[17]) ) htmp->SetOption("colz");
898 if ( (htmp=(TH1*)arrRW[18]) ) htmp->SetOption("colz");
ba5613e3 899 }
92664bc8 900 }//END ENABLE DQM SHIFTER OPT
901 } // RS: loop over trigger classes
724eb92e 902 } //end for
92664bc8 903 //
724eb92e 904 AliQAChecker::Instance()->Run(AliQAv1::kTOF, task, list) ;
92664bc8 905 //
04236e67 906}
907//____________________________________________________________________________
32bd8225 908void AliTOFQADataMakerRec::GetMapIndeces(const Int_t* const in , Int_t* out)
04236e67 909{
910 //
911 //return appropriate indeces for the theta-phi map
912 //
913
914 Int_t npadX = AliTOFGeometry::NpadX();
915 Int_t npadZ = AliTOFGeometry::NpadZ();
916 Int_t nStripA = AliTOFGeometry::NStripA();
917 Int_t nStripB = AliTOFGeometry::NStripB();
918 Int_t nStripC = AliTOFGeometry::NStripC();
919
920 Int_t isector = in[0];
921 Int_t iplate = in[1];
922 Int_t istrip = in[2];
923 Int_t ipadX = in[3];
924 Int_t ipadZ = in[4];
925
926 Int_t stripOffset = 0;
927 switch (iplate) {
928 case 0:
929 stripOffset = 0;
930 break;
931 case 1:
932 stripOffset = nStripC;
933 break;
934 case 2:
935 stripOffset = nStripC+nStripB;
936 break;
937 case 3:
938 stripOffset = nStripC+nStripB+nStripA;
939 break;
940 case 4:
941 stripOffset = nStripC+nStripB+nStripA+nStripB;
942 break;
943 default:
17f2cd01 944 AliDebug(1,Form("Wrong plate number in TOF (%d) !",iplate));
04236e67 945 break;
946 };
947 Int_t zindex=npadZ*(istrip+stripOffset)+(ipadZ+1);
948 Int_t phiindex=npadX*isector+ipadX+1;
949 out[0]=zindex;
950 out[1]=phiindex;
951
5f144062 952}
953
954//---------------------------------------------------------------
955Int_t AliTOFQADataMakerRec::GetStripIndex(const Int_t * const in)
956{
957 /* return tof strip index between 0 and 91 */
958
959 Int_t nStripA = AliTOFGeometry::NStripA();
960 Int_t nStripB = AliTOFGeometry::NStripB();
961 Int_t nStripC = AliTOFGeometry::NStripC();
962
963 // Int_t isector = in[0];
964 Int_t iplate = in[1];
965 Int_t istrip = in[2];
966 //Int_t ipadX = in[3];
967 //Int_t ipadZ = in[4];
968
969 Int_t stripOffset = 0;
970 switch (iplate) {
971 case 0:
972 stripOffset = 0;
973 break;
974 case 1:
975 stripOffset = nStripC;
976 break;
977 case 2:
978 stripOffset = nStripC+nStripB;
979 break;
980 case 3:
981 stripOffset = nStripC+nStripB+nStripA;
982 break;
983 case 4:
984 stripOffset = nStripC+nStripB+nStripA+nStripB;
985 break;
986 default:
987 AliDebug(1,Form("Wrong plate number in TOF (%d) !",iplate));
988 stripOffset=-1;
989 break;
990 };
991
992 if (stripOffset<0 || stripOffset>92) return -1;
993 else
994 return (stripOffset+istrip);
995
04236e67 996}
17f2cd01 997//---------------------------------------------------------------
32bd8225 998Bool_t AliTOFQADataMakerRec::CheckVolumeID(const Int_t * const volumeID)
17f2cd01 999{
32bd8225 1000 //
1001 //Checks volume ID validity
1002 //
17f2cd01 1003
1004 for (Int_t j=0;j<5;j++){
1005 if (volumeID[j]<0) {
1006 AliDebug(1,Form("Invalid detector volume index for volumeID[%i]",j));
1007 return kFALSE;
1008 }
1009 }
1010 return kTRUE;
1011
1012}
1013
1014//---------------------------------------------------------------
32bd8225 1015Bool_t AliTOFQADataMakerRec::CheckEquipID(const Int_t * const equipmentID)
17f2cd01 1016{
32bd8225 1017 //
1018 //Checks equipment ID validity
1019
17f2cd01 1020 for (Int_t j=0;j<5;j++){
1021 if (equipmentID[j]<0) {
17f2cd01 1022 AliDebug(1,Form("Invalid equipment volume index for equipmentID[%i]",j));
1023 return kFALSE;
1024 }
1025 }
1026 return kTRUE;
1027}
32bd8225 1028//---------------------------------------------------------------
1029Bool_t AliTOFQADataMakerRec::FilterLTMData(const Int_t * const equipmentID) const
1030{
1031 /*It returns kTRUE if data come from LTM.
5f144062 1032 It thus filters trigger-related signals */
32bd8225 1033
1034 Int_t ddl, trm, tdc;
1035 //if (!CheckEquipID(equipmentID)) return kFALSE;
1036 ddl = equipmentID[0];
1037 trm = equipmentID[1];
1038 tdc = equipmentID[3];
1039
1040 if ((ddl%2==1) && (trm==3) && (tdc>11 && tdc<15))
1041 return kTRUE;
1042 else
1043 return kFALSE;
1044
1045}
1046//---------------------------------------------------------------
1047Bool_t AliTOFQADataMakerRec::FilterSpare(const Int_t * const equipmentID) const
1048{
1049 /*It returns kTRUE if data come from spare
1050 equipment ID.
1051 So far only check on TRM 3 crate left is implemented */
1052
1053 Int_t ddl, trm, tdc;
1054 //if (!CheckEquipID(equipmentID)) return kFALSE;
1055 ddl = equipmentID[0];
1056 trm = equipmentID[1];
1057 tdc = equipmentID[3];
1058
1059 if ((ddl%2==1) && (trm==3) && (tdc>2 && tdc<12))
1060 return kTRUE;
1061 else
1062 return kFALSE;
1063
1064}
724eb92e 1065//----------------------------------------------------------------
1066/*void AliTOFQADataMakerRec::ResetAllTRMcounters()
1067{
1068 //resets all TRM counters to 0
1069 for (Int_t trm=0;trm<720;trm++){
1070 fTRMNoisyArray[trm]=-1;
1071 fTRMHwOkArray[trm]=-1;
1072 fTRMEnabledArray[trm]=-1;
1073 }
1074 return;
1075
1076}
1077*/