Merge branch 'devel'
[u/mrichter/AliRoot.git] / ITS / AliITSQASPDDataMakerRec.cxx
CommitLineData
096292ae 1/**************************************************************************
2 * Copyright(c) 2007-2009, 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 **************************************************************************/
3f905799 15/* $Id$ */
096292ae 16// *************************************************************
17// Checks the quality assurance
18// by comparing with reference data
19// contained in a DB
20// -------------------------------------------------------------
21// W. Ferrarese + P. Cerello Feb 2008
22// INFN Torino
23// M. Nicassio D. Elia INFN Bari March 2008
24// maria.nicassio@ba.infn.it
25
26
27// --- ROOT system ---
28#include <TTree.h>
29#include <TH1.h>
30#include <TH2.h>
31#include <TMath.h>
32// --- Standard library ---
33
34// --- AliRoot header files ---
35#include "AliITSQADataMakerRec.h"
36#include "AliITSQASPDDataMakerRec.h"
37#include "AliLog.h"
4e25ac79 38#include "AliQAv1.h"
096292ae 39#include "AliRawReader.h"
379510c2 40#include "AliITSRawStreamSPD.h"
41#include "AliITSRawStreamSPDErrorLog.h"
33626263 42#include "AliITSdigitSPD.h"
096292ae 43#include "AliITSRecPoint.h"
e62fe478 44#include "AliITSRecPointContainer.h"
379510c2 45
096292ae 46ClassImp(AliITSQASPDDataMakerRec)
47
48//____________________________________________________________________________
379510c2 49AliITSQASPDDataMakerRec::AliITSQASPDDataMakerRec(AliITSQADataMakerRec *aliITSQADataMakerRec, Bool_t kMode, Short_t ldc, AliITSRawStreamSPDErrorLog *aliITSRawStreamSPDErrorLog) :
096292ae 50TObject(),
51fAliITSQADataMakerRec(aliITSQADataMakerRec),
52fkOnline(kMode),
53fLDC(ldc),
7a0e5776 54fSPDhRawsTask(0),
44ed7a66 55fSPDhDigitsTask(0),
7a0e5776 56fSPDhRecPointsTask(0),
57fGenRawsOffset(0),
44ed7a66 58fGenDigitsOffset(0),
7a0e5776 59fGenRecPointsOffset(0),
379510c2 60fAdvLogger(aliITSRawStreamSPDErrorLog)
096292ae 61{
62 //ctor used to discriminate OnLine-Offline analysis
8b7e858c 63 //AliInfo(Form("AliRecoParam::kNSpecies %d\n",AliRecoParam::kNSpecies));
64 fGenRawsOffset = new Int_t[AliRecoParam::kNSpecies];
65 fGenRecPointsOffset = new Int_t[AliRecoParam::kNSpecies];
4a903927 66 fGenDigitsOffset = new Int_t[AliRecoParam::kNSpecies];
8b7e858c 67 for(Int_t i=0; i<AliRecoParam::kNSpecies;i++) {
68 fGenRawsOffset[i] = 0;
69 fGenRecPointsOffset[i] = 0;
4a903927 70 fGenDigitsOffset[i]=0;
8b7e858c 71 }
096292ae 72}
73
74//____________________________________________________________________________
75AliITSQASPDDataMakerRec::AliITSQASPDDataMakerRec(const AliITSQASPDDataMakerRec& qadm) :
76TObject(),
77fAliITSQADataMakerRec(qadm.fAliITSQADataMakerRec),
78fkOnline(qadm.fkOnline),
79fLDC(qadm.fLDC),
7a0e5776 80fSPDhRawsTask(qadm.fSPDhRawsTask),
44ed7a66 81fSPDhDigitsTask(qadm.fSPDhDigitsTask),
7a0e5776 82fSPDhRecPointsTask(qadm.fSPDhRecPointsTask),
83fGenRawsOffset(qadm.fGenRawsOffset),
44ed7a66 84fGenDigitsOffset(qadm.fGenDigitsOffset),
7a0e5776 85fGenRecPointsOffset(qadm.fGenRecPointsOffset),
379510c2 86fAdvLogger(qadm.fAdvLogger)
096292ae 87{
88 //copy ctor
89 fAliITSQADataMakerRec->SetName((const char*)qadm.fAliITSQADataMakerRec->GetName()) ;
90 fAliITSQADataMakerRec->SetTitle((const char*)qadm.fAliITSQADataMakerRec->GetTitle());
91 }
92
93//__________________________________________________________________
94AliITSQASPDDataMakerRec::~AliITSQASPDDataMakerRec(){
95 // destructor
379510c2 96// delete fAdvLogger;
096292ae 97}
98//__________________________________________________________________
99
100AliITSQASPDDataMakerRec& AliITSQASPDDataMakerRec::operator = (const AliITSQASPDDataMakerRec& qac )
101{
102 // Equal operator.
103 this->~AliITSQASPDDataMakerRec();
104 new(this) AliITSQASPDDataMakerRec(qac);
105 return *this;
106}
107
108//____________________________________________________________________________
109void AliITSQASPDDataMakerRec::StartOfDetectorCycle()
110{
111 //Detector specific actions at start of cycle
5379c4a3 112 AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQADM::Start of SPD Cycle\n");
096292ae 113}
114
115//____________________________________________________________________________
66133c2f 116void AliITSQASPDDataMakerRec::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray* /*list*/)
096292ae 117{
118 // launch the QA checking
5379c4a3 119 AliDebug(AliQAv1::GetQADebugLevel(),"AliITSDM instantiates checker with Run(AliQAv1::kITS, task, list)\n");
096292ae 120
66133c2f 121 Int_t shift = fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()];
122
123 if(task == AliQAv1::kRAWS) {
124 if(fAliITSQADataMakerRec->GetRawsData(1+shift)){ // check if the fired chip histograms is available
125 fAliITSQADataMakerRec->GetRawsData(5+shift)->Divide(fAliITSQADataMakerRec->GetRawsData(0+shift),fAliITSQADataMakerRec->GetRawsData(1+shift)); // FO efficiency
126 fAliITSQADataMakerRec->GetRawsData(6+shift)->Divide(fAliITSQADataMakerRec->GetRawsData(2+shift),fAliITSQADataMakerRec->GetRawsData(1+shift)); // mising FO
127 fAliITSQADataMakerRec->GetRawsData(7+shift)->Divide(fAliITSQADataMakerRec->GetRawsData(3+shift),fAliITSQADataMakerRec->GetRawsData(1+shift)); // Noisy FO
128 }
129 }
4e25ac79 130 //AliQAChecker::Instance()->Run( AliQAv1::kITS , task, list);
096292ae 131}
132
133//____________________________________________________________________________
eca4fa66 134Int_t AliITSQASPDDataMakerRec::InitRaws()
096292ae 135{
136 // Initialization for RAW data - SPD -
7d297381 137 const Bool_t expert = kTRUE ;
138 const Bool_t saveCorr = kTRUE ;
139 const Bool_t image = kTRUE ;
eca4fa66 140 Int_t rv = 0 ;
141// fGenRawsOffset = (fAliITSQADataMakerRec->fRawsQAList[AliRecoParam::kDefault])->GetEntries();
66133c2f 142
8bab7823 143 if(!fAdvLogger) fAdvLogger = new AliITSRawStreamSPDErrorLog();
5379c4a3 144 AliDebug(AliQAv1::GetQADebugLevel(), "Book Offline Histograms for SPD\n ");
439e7a8a 145
379510c2 146 Char_t name[50];
147 Char_t title[50];
66133c2f 148 // offset for online histogram numbering
149 Int_t shift = fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()];
150
151
152 Float_t range[2] = {-0.5,1199.};
096292ae 153
66133c2f 154// ********** online histo booking (shift is added) *********************
155
156 // 0
157 TH1F *hFastOrFiredChips = new TH1F("SPDFastOrFiredChips_SPD","FastOr-Fired Chips (if pixel hit present) - SPD",fgkSPDchips,range[0],range[1]);
158 hFastOrFiredChips->GetXaxis()->SetTitle("chip index (eq*60 + hs*10 + chip)");
159 hFastOrFiredChips->GetYaxis()->SetTitle("FastOr-Fired Chip yield");
160 rv = fAliITSQADataMakerRec->Add2RawsList(hFastOrFiredChips, 0+shift, expert, !image, !saveCorr);
161 fSPDhRawsTask++;
162// 1
163 TH1F *hFiredChips = new TH1F("SPDFiredChips_SPD","FiredChips - SPD",fgkSPDchips,range[0],range[1]);
164 hFiredChips->GetXaxis()->SetTitle("chip index (eq*60 + hs*10 + chip)");
165 hFiredChips->GetYaxis()->SetTitle("Fired Chip yield");
166 rv = fAliITSQADataMakerRec->Add2RawsList(hFiredChips, 1+shift, expert, !image, !saveCorr);
167 fSPDhRawsTask++;
168// 2
169 TH1F *hFastOrMissing = new TH1F("SPDFastOrMissing_SPD","Missing FastOr signal - SPD",fgkSPDchips,range[0],range[1]);
170 hFastOrMissing->GetXaxis()->SetTitle("chip index (eq*60 + hs*10 + chip)");
171 hFastOrMissing->GetYaxis()->SetTitle("Missing Fast Or yield");
172 rv = fAliITSQADataMakerRec->Add2RawsList(hFastOrMissing, 2+shift, expert, !image, !saveCorr);
173 fSPDhRawsTask++;
174// 3
175 TH1F *hFastOrNoisy = new TH1F("SPDFastOrNoisy_SPD","Noisy (no pixel hit present) FastOr signal - SPD",fgkSPDchips,range[0],range[1]);
176 hFastOrNoisy->GetXaxis()->SetTitle("chipkey");
177 hFastOrNoisy->GetYaxis()->SetTitle("Noisy Fast Or");
178 rv = fAliITSQADataMakerRec->Add2RawsList(hFastOrNoisy, 3+shift, expert, !image, !saveCorr);
179 fSPDhRawsTask++;
180// 4
181 TH2F *hFastOrCorrelation = new TH2F("SPDFastOrCorrelation_SPD","Fast Or multiplicity correlation - SPD",100,0.,100.,100,0,100);
182 hFastOrCorrelation->GetXaxis()->SetTitle("Layer 1");
183 hFastOrCorrelation->GetYaxis()->SetTitle("Layer 2");
184 rv = fAliITSQADataMakerRec->Add2RawsList(hFastOrCorrelation, 4+shift, expert, !image, !saveCorr);
185 fSPDhRawsTask++;
186// 5
187 TH1F *hFastOrEfficiency = new TH1F("SPDFastOrEfficiency_SPD","Fast Or Efficiency : Good FastOr / fired chips (per event) - SPD",fgkSPDchips,range[0],range[1]);
188 hFastOrEfficiency->SetMaximum(1.05);
189 hFastOrEfficiency->GetXaxis()->SetTitle("chip index");
190 hFastOrEfficiency->GetYaxis()->SetTitle("FastOr efficiency");
191 rv = fAliITSQADataMakerRec->Add2RawsList(hFastOrEfficiency, 5+shift, expert, !image, !saveCorr);
192 fSPDhRawsTask++;
193// 6
194 TH1F *hFastOrMissingRatio = new TH1F("SPDFastOrMissingRatio_SPD"," Missing Fast Or / fired chips (per event) - SPD",fgkSPDchips,range[0],range[1]);
195 hFastOrMissingRatio->SetMaximum(1.05);
196 hFastOrMissingRatio->GetXaxis()->SetTitle("Layer 1");
197 hFastOrMissingRatio->GetYaxis()->SetTitle("Layer 2");
198 rv = fAliITSQADataMakerRec->Add2RawsList(hFastOrMissingRatio, 6+shift, expert, !image, !saveCorr);
199 fSPDhRawsTask++;
200// 7
201 TH1F *hFastOrNoisyRatio = new TH1F("SPDFastOrNoisyRatio_SPD","Noisy Fast Or / fired chips (per event) - SPD",fgkSPDchips,range[0],range[1]);
202 hFastOrNoisyRatio->SetMaximum(1.05);
203 hFastOrNoisyRatio->GetXaxis()->SetTitle("Layer 1");
204 hFastOrNoisyRatio->GetYaxis()->SetTitle("Layer 2");
205 rv = fAliITSQADataMakerRec->Add2RawsList(hFastOrNoisyRatio, 7+shift, expert, !image, !saveCorr);
206 fSPDhRawsTask++;
207// 8
208 TH1F *herrorsAll = new TH1F("SPDErrorsAll_SPD","Error codes - SPD",20,0.,20.);
209 herrorsAll->GetXaxis()->SetTitle("DDL");
210 herrorsAll->GetYaxis()->SetTitle("Entries");
211 rv = fAliITSQADataMakerRec->Add2RawsList(herrorsAll, kAmoreFoOffset+shift, !expert, image, !saveCorr);
212 fSPDhRawsTask++;
213
214//9-28
215 TH1F **herrors = new TH1F*[20];
216 for (Int_t iEq=0; iEq<20; iEq++) {
217 sprintf(name,"SPDErrors_SPD_Eq%d",iEq+1);
218 sprintf(title,"Error codes - SPD Eq %d",iEq+1);
219 herrors[iEq] = new TH1F (name,title,fAdvLogger->GetNrErrorCodes(),0,fAdvLogger->GetNrErrorCodes());
220 herrors[iEq]->SetXTitle("Error Code");
221 herrors[iEq]->SetYTitle("Nr of errors");
222 rv = fAliITSQADataMakerRec->Add2RawsList(herrors[iEq], (kAmoreFoOffset+1)+iEq+shift, expert, !image, !saveCorr);
223 fSPDhRawsTask++;
224 }
225
226// ********* offline histo booking (offset is added) ****************************
227
228 // offset for offline histogram numbering
229 Int_t offset = fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + kAmoreFoOffset + kAmoreErrorsOffset;
230// 0
26ee9565 231 TH1F *hlayer = new TH1F("SPDLayPattern_SPD","Layer map - SPD",6,0.,6.);
379510c2 232 hlayer->GetXaxis()->SetTitle("Layer number");
233 hlayer->GetYaxis()->SetTitle("Entries");
66133c2f 234 rv = fAliITSQADataMakerRec->Add2RawsList(hlayer, 0+offset, expert, !image, !saveCorr);
7a0e5776 235 fSPDhRawsTask++;
379510c2 236
237 TH1F **hmod = new TH1F*[2];
238 TH2F **hhitMap = new TH2F*[20];
66133c2f 239
240
241// 1-2
379510c2 242 for (Int_t iLay=0; iLay<2; iLay++) {
26ee9565 243 sprintf(name,"SPDModPattern_SPD%d",iLay+1);
379510c2 244 sprintf(title,"Module map - SPD Layer %d",iLay+1);
245 hmod[iLay]=new TH1F(name,title,fgknSPDmodules,0,fgknSPDmodules);
246 hmod[iLay]->GetXaxis()->SetTitle("Module number");
247 hmod[iLay]->GetYaxis()->SetTitle("Entries");
66133c2f 248 rv = fAliITSQADataMakerRec->Add2RawsList(hmod[iLay], 1+iLay+offset, expert, !image, !saveCorr);
7a0e5776 249 fSPDhRawsTask++;
379510c2 250 }
66133c2f 251// 3
8ec28eb2 252 TH2F *hHitMapHalfStaveChipSideA
253 = new TH2F("SPDHitMapHalfStaveChipSideA_SPD","Hit map per HalfStave per Chip Side A - SPD",60,0.,60.,10,0.,10.);
254 hHitMapHalfStaveChipSideA->GetXaxis()->SetTitle("HalfStave");
255 hHitMapHalfStaveChipSideA->GetYaxis()->SetTitle("Chip");
66133c2f 256 rv = fAliITSQADataMakerRec->Add2RawsList(hHitMapHalfStaveChipSideA, 3+offset, expert, !image, !saveCorr);
8ec28eb2 257 fSPDhRawsTask++;
66133c2f 258// 4
8ec28eb2 259 TH2F *hHitMapHalfStaveChipSideC
260 = new TH2F("SPDHitMapHalfStaveChipSideC_SPD","Hit map per HalfStave per Chip Side C - SPD",60,0.,60.,10,0.,10.);
261 hHitMapHalfStaveChipSideC->GetXaxis()->SetTitle("HalfStave");
262 hHitMapHalfStaveChipSideC->GetYaxis()->SetTitle("Chip");
66133c2f 263 rv = fAliITSQADataMakerRec->Add2RawsList(hHitMapHalfStaveChipSideC, 4+offset, expert, !image, !saveCorr);
8ec28eb2 264 fSPDhRawsTask++;
66133c2f 265 //5-24
379510c2 266 for (Int_t iDDL=0; iDDL<20; iDDL++) {
26ee9565 267 sprintf(name,"SPDHitMap_SPD_DDL%d",iDDL+1);
379510c2 268 sprintf(title,"Hit map - SPD DDL %d",iDDL+1);
269 hhitMap[iDDL]=new TH2F(name,title,320,0,10*32,1536,0,6*256);
270 hhitMap[iDDL]->GetXaxis()->SetTitle("Column");
271 hhitMap[iDDL]->GetYaxis()->SetTitle("Row");
66133c2f 272 rv = fAliITSQADataMakerRec->Add2RawsList(hhitMap[iDDL], 5+iDDL+offset, expert, !image, !saveCorr);
7a0e5776 273 fSPDhRawsTask++;
66133c2f 274 }
275// 25-26
379510c2 276 TH1F** hMultSPDhits = new TH1F*[2];
277 for (Int_t iLay=0; iLay<2; iLay++) {
26ee9565 278 sprintf(name,"SPDHitsMultiplicity_SPD%d",iLay+1);
379510c2 279 sprintf(title,"Hit multiplicity - SPD Layer %d",iLay+1);
280 hMultSPDhits[iLay]=new TH1F(name,title,200,0.,200.);
281 hMultSPDhits[iLay]->GetXaxis()->SetTitle("Hit multiplicity");
282 hMultSPDhits[iLay]->GetYaxis()->SetTitle("Entries");
66133c2f 283 rv = fAliITSQADataMakerRec->Add2RawsList(hMultSPDhits[iLay], 25+iLay+offset, expert, !image, !saveCorr);
7a0e5776 284 fSPDhRawsTask++;
379510c2 285 }
66133c2f 286// 27
954ef57a 287 TH2F *hMultSPDhits2MultSPDhits1
26ee9565 288 = new TH2F("SPDHitMultCorrelation_SPD","Hit multiplicity correlation - SPD",200,0.,200.,200,0.,200.);
379510c2 289 hMultSPDhits2MultSPDhits1->GetXaxis()->SetTitle("Hit multiplicity (Layer 1)");
290 hMultSPDhits2MultSPDhits1->GetYaxis()->SetTitle("Hit multiplicity (Layer 2)");
66133c2f 291 rv = fAliITSQADataMakerRec->Add2RawsList(hMultSPDhits2MultSPDhits1, 27+offset, !expert, image, !saveCorr);
8ec28eb2 292 fSPDhRawsTask++;
66133c2f 293// 28
8ec28eb2 294 TH2F *hFastOrMapHalfStaveChip
295 = new TH2F("SPDFastOrMapHalfStaveChip_SPD","FastOr map per HalfStave per Chip - SPD",120,0.,120.,10,0.,10.);
296 hFastOrMapHalfStaveChip->GetXaxis()->SetTitle("HalfStave");
297 hFastOrMapHalfStaveChip->GetYaxis()->SetTitle("Chip");
66133c2f 298 rv = fAliITSQADataMakerRec->Add2RawsList(hFastOrMapHalfStaveChip, 28+offset, !expert, image, !saveCorr);
8ec28eb2 299 fSPDhRawsTask++;
66133c2f 300// 29
8ec28eb2 301 TH1F *hFastOrFiredMap = new TH1F("SPDFastOrPattern_SPD","FastOrFiredChip map - SPD",1200,0.,1200.);
302 hFastOrFiredMap->GetXaxis()->SetTitle("Chip number");
303 hFastOrFiredMap->GetYaxis()->SetTitle("Entries");
66133c2f 304 rv = fAliITSQADataMakerRec->Add2RawsList(hFastOrFiredMap, 29+offset, expert, !image, !saveCorr);
8ec28eb2 305 fSPDhRawsTask++;
66133c2f 306// 30
8ec28eb2 307 TH2F *hHitMapHalfStaveChipInner
308 = new TH2F("SPDHitMapHalfStaveChipInner_SPD","Hit map per HalfStave per Chip Inner - SPD",20,0.,20.,20,0.,20.);
309 hHitMapHalfStaveChipInner->GetXaxis()->SetTitle("Chip");
310 hHitMapHalfStaveChipInner->GetYaxis()->SetTitle("HalfStave");
66133c2f 311 rv = fAliITSQADataMakerRec->Add2RawsList(hHitMapHalfStaveChipInner, 30+offset, !expert, image, !saveCorr);
8ec28eb2 312 fSPDhRawsTask++;
66133c2f 313// 31
8ec28eb2 314 TH2F *hHitMapHalfStaveChipOuter
315 = new TH2F("SPDHitMapHalfStaveChipOuter_SPD","Hit map per HalfStave per Chip Outer - SPD",20,0.,20.,40,0.,40.);
316 hHitMapHalfStaveChipOuter->GetXaxis()->SetTitle("Chip");
317 hHitMapHalfStaveChipOuter->GetYaxis()->SetTitle("HalfStave");
66133c2f 318 rv = fAliITSQADataMakerRec->Add2RawsList(hHitMapHalfStaveChipOuter, 31+offset, !expert, image, !saveCorr);
8ec28eb2 319 fSPDhRawsTask++;
66133c2f 320// 32
8ec28eb2 321 TH1F *hHitMapChipInnerZ = new TH1F("SPDHitMapChipInnerZ_SPD","Hit map per ChipZ Inner - SPD",20,0.,20.);
322 hHitMapChipInnerZ->GetXaxis()->SetTitle("Chip");
323 hHitMapChipInnerZ->GetYaxis()->SetTitle("Entries");
66133c2f 324 rv = fAliITSQADataMakerRec->Add2RawsList(hHitMapChipInnerZ, 32+offset, !expert, image, !saveCorr);
8ec28eb2 325 fSPDhRawsTask++;
66133c2f 326// 33
8ec28eb2 327 TH1F *hHitMapChipOuterZ = new TH1F("SPDHitMapChipOuterZ_SPD","Hit map per ChipZ Outer - SPD",20,0.,20.);
328 hHitMapChipOuterZ->GetXaxis()->SetTitle("Chip");
329 hHitMapChipOuterZ->GetYaxis()->SetTitle("Entries");
66133c2f 330 rv = fAliITSQADataMakerRec->Add2RawsList(hHitMapChipOuterZ, 33+offset, !expert, image, !saveCorr);
8ec28eb2 331 fSPDhRawsTask++;
66133c2f 332// 34
8ec28eb2 333 TH1F *hHitMapHalfStaveInnerPhi = new TH1F("SPDHitMapChipInnerPhi_SPD","Hit map per HalfStavePhi Inner - SPD",20,0.,20.);
334 hHitMapHalfStaveInnerPhi->GetXaxis()->SetTitle("HalfStave");
335 hHitMapHalfStaveInnerPhi->GetYaxis()->SetTitle("Entries");
66133c2f 336 rv = fAliITSQADataMakerRec->Add2RawsList(hHitMapHalfStaveInnerPhi, 34+offset, !expert, image, !saveCorr);
8ec28eb2 337 fSPDhRawsTask++;
66133c2f 338// 35
8ec28eb2 339 TH1F *hHitMapHalfStaveOuterPhi = new TH1F("SPDHitMapChipOuterPhi_SPD","Hit map per HalfStavePhi Outer - SPD",40,0.,40.);
340 hHitMapHalfStaveOuterPhi->GetXaxis()->SetTitle("HalfStave");
341 hHitMapHalfStaveOuterPhi->GetYaxis()->SetTitle("Entries");
66133c2f 342 rv = fAliITSQADataMakerRec->Add2RawsList(hHitMapHalfStaveOuterPhi, 35+offset, !expert, image, !saveCorr);
8ec28eb2 343 fSPDhRawsTask++;
66133c2f 344
5379c4a3 345 AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SPD Raws histograms booked\n",fSPDhRawsTask));
eca4fa66 346 return rv ;
096292ae 347}
348
096292ae 349//____________________________________________________________________________
eca4fa66 350Int_t AliITSQASPDDataMakerRec::MakeRaws(AliRawReader* rawReader)
096292ae 351{
352 // Fill QA for RAW - SPD -
eca4fa66 353 Int_t rv = 0 ;
eca4fa66 354
379510c2 355 rawReader->Reset();
66eae3f0 356 AliITSRawStreamSPD rawStreamSPD(rawReader);
357 rawStreamSPD.ActivateAdvancedErrorLog(kTRUE,fAdvLogger);
66133c2f 358
359 // shift for online histos
360 Int_t shift = fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()];
361
362 // shift for online histos
363 Int_t offset = fGenRawsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + kAmoreFoOffset+kAmoreErrorsOffset;
379510c2 364
365 Int_t nDigitsL1 = 0;
366 Int_t nDigitsL2 = 0;
367 Int_t iEq;
368 Int_t iLayer;
369 Int_t iHalfStave, iChip;
8bab7823 370 Int_t chipKey;
379510c2 371 Int_t col, row;
372 UInt_t module, colM, rowM;
8ec28eb2 373 Bool_t isFiredChip[1200];
374 for(Int_t ichK=0; ichK<1200; ichK++) isFiredChip[ichK] = kFALSE;
66133c2f 375 Bool_t isOnlineFiredChip[1200];
376 for(Int_t iOnlineKey=0; iOnlineKey<1200; iOnlineKey++) isOnlineFiredChip[iOnlineKey] = kFALSE;
377 UInt_t nFastOr[2]={0,0};
8ec28eb2 378
66eae3f0 379 while(rawStreamSPD.Next()) {
379510c2 380
381 iEq = rawReader->GetDDLID();
382 if (iEq>=0 && iEq<20) {
66eae3f0 383 iHalfStave = rawStreamSPD.GetHalfStaveNr();
384 iChip = rawStreamSPD.GetChipAddr();
66133c2f 385 col = rawStreamSPD.GetChipCol();
386 row = rawStreamSPD.GetChipRow();
387 isOnlineFiredChip[iEq*60+iHalfStave*10+iChip] = kTRUE;
8ec28eb2 388 chipKey = rawStreamSPD.GetOfflineChipKeyFromOnline(iEq,iHalfStave,iChip);
389 isFiredChip[chipKey] = kTRUE;
390
66eae3f0 391 rawStreamSPD.OnlineToOffline(iEq, iHalfStave, iChip, col, row, module, colM, rowM);
379510c2 392
393 if (iHalfStave>=0 && iHalfStave<2) iLayer=0;
394 else iLayer=1;
395
66133c2f 396 fAliITSQADataMakerRec->GetRawsData(0+offset)->Fill(iLayer);
379510c2 397 if (iLayer==0) {
66133c2f 398 fAliITSQADataMakerRec->GetRawsData(1+offset)->Fill(module);
379510c2 399 nDigitsL1++;
400 } else {
66133c2f 401 fAliITSQADataMakerRec->GetRawsData(2+offset)->Fill(module);
379510c2 402 nDigitsL2++;
403 }
404
8ec28eb2 405 if(iEq<10) {
66133c2f 406 fAliITSQADataMakerRec->GetRawsData(3+offset)->Fill(iHalfStave+iEq*6,iChip);
8ec28eb2 407 }
408 else {
66133c2f 409 fAliITSQADataMakerRec->GetRawsData(4+offset)->Fill(iHalfStave+(iEq-10)*6,iChip);
8ec28eb2 410 }
8bab7823 411
8ec28eb2 412 if(iLayer==0) {
413 if(iEq<10) {
66133c2f 414 fAliITSQADataMakerRec->GetRawsData(30+offset)->Fill(19-iChip,1-iHalfStave+iEq*2);
415 fAliITSQADataMakerRec->GetRawsData(32+offset)->Fill(19-iChip);
416 fAliITSQADataMakerRec->GetRawsData(34+offset)->Fill(1-iHalfStave+iEq*2);
8ec28eb2 417 }
418 else {
66133c2f 419 fAliITSQADataMakerRec->GetRawsData(30+offset)->Fill(iChip,1-iHalfStave+(iEq-10)*2);
420 fAliITSQADataMakerRec->GetRawsData(32+offset)->Fill(iChip);
421 fAliITSQADataMakerRec->GetRawsData(34+offset)->Fill(1-iHalfStave+(iEq-10)*2);
8ec28eb2 422 }
423 }
424 else {
425 if(iEq<10) {
66133c2f 426 fAliITSQADataMakerRec->GetRawsData(31+offset)->Fill(19-iChip,iHalfStave-2+iEq*4);
427 fAliITSQADataMakerRec->GetRawsData(33+offset)->Fill(19-iChip);
428 fAliITSQADataMakerRec->GetRawsData(35+offset)->Fill(iHalfStave-2+iEq*4);
8ec28eb2 429 }
430 else {
66133c2f 431 fAliITSQADataMakerRec->GetRawsData(31+offset)->Fill(iChip,iHalfStave-2+(iEq-10)*4);
432 fAliITSQADataMakerRec->GetRawsData(33+offset)->Fill(iChip);
433 fAliITSQADataMakerRec->GetRawsData(35+offset)->Fill(iHalfStave-2+(iEq-10)*4);
8ec28eb2 434 }
435 }
66133c2f 436 fAliITSQADataMakerRec->GetRawsData(5+iEq+offset)->Fill(colM+(module%2)*160,rowM+iHalfStave*256);
379510c2 437 }
379510c2 438 }
8bab7823 439
8ec28eb2 440 UInt_t nErrorsDDL[20];
66133c2f 441
8b7e858c 442 for (Int_t ieq=0; ieq<20; ieq++) {
8ec28eb2 443 nErrorsDDL[ieq] = 0;
66133c2f 444
8ec28eb2 445 for (UInt_t ierr=0; ierr<fAdvLogger->GetNrErrorCodes(); ierr++) {
66133c2f 446 fAliITSQADataMakerRec->GetRawsData(ieq+(kAmoreFoOffset+1)+shift)->Fill(ierr,fAdvLogger->GetNrErrors(ierr,ieq));
8ec28eb2 447 if(ierr>0) nErrorsDDL[ieq] = nErrorsDDL[ieq] + fAdvLogger->GetNrErrors(ierr,ieq);
448 }
66133c2f 449 fAliITSQADataMakerRec->GetRawsData(8+shift)->Fill(ieq,nErrorsDDL[ieq]);
8bab7823 450
451 for (Int_t ihs=0; ihs<6; ihs++) {
452 for (Int_t ichip=0; ichip<10; ichip++) {
66133c2f 453 if(isOnlineFiredChip[ieq*60+ihs*10+ichip]) fAliITSQADataMakerRec->GetRawsData(1+shift)->Fill(ieq*60+ihs*10+ichip); // online
454 if(rawStreamSPD.GetFastOrSignal(ieq,ihs,ichip) && isOnlineFiredChip[ieq*60+ihs*10+ichip]) fAliITSQADataMakerRec->GetRawsData(0+shift)->Fill(ieq*60+ihs*10+ichip); // online
455 if(!rawStreamSPD.GetFastOrSignal(ieq,ihs,ichip) && isOnlineFiredChip[ieq*60+ihs*10+ichip]) fAliITSQADataMakerRec->GetRawsData(2+shift)->Fill(ieq*60+ihs*10+ichip); // online
456 if(rawStreamSPD.GetFastOrSignal(ieq,ihs,ichip) && !isOnlineFiredChip[ieq*60+ihs*10+ichip]) fAliITSQADataMakerRec->GetRawsData(3+shift)->Fill(ieq*60+ihs*10+ichip); // online
457
8ec28eb2 458 chipKey = rawStreamSPD.GetOfflineChipKeyFromOnline(ieq,ihs,ichip);
66133c2f 459
66eae3f0 460 if(rawStreamSPD.GetFastOrSignal(ieq,ihs,ichip)) {
66133c2f 461 if(ihs <2) nFastOr[0]++; // online
462 else nFastOr[1]++; // online
463 fAliITSQADataMakerRec->GetRawsData(28+offset)->Fill(ihs+ieq*6,ichip);
464 fAliITSQADataMakerRec->GetRawsData(29+offset)->Fill(chipKey);
8bab7823 465 }
466 }
467 }
66133c2f 468
469
8bab7823 470 }
379510c2 471
66133c2f 472 fAliITSQADataMakerRec->GetRawsData(4+shift)->Fill(nFastOr[0],nFastOr[1]); // online
473
379510c2 474 fAdvLogger->Reset();
66133c2f 475 fAliITSQADataMakerRec->GetRawsData(25+offset)->Fill(nDigitsL1);
476 fAliITSQADataMakerRec->GetRawsData(26+offset)->Fill(nDigitsL2);
477 fAliITSQADataMakerRec->GetRawsData(27+offset)->Fill(nDigitsL1,nDigitsL2);
379510c2 478
5379c4a3 479 AliDebug(AliQAv1::GetQADebugLevel(),Form("Event completed, %d raw digits read",nDigitsL1+nDigitsL2));
eca4fa66 480 return rv ;
096292ae 481}
482
483//____________________________________________________________________________
eca4fa66 484Int_t AliITSQASPDDataMakerRec::InitDigits()
44ed7a66 485{
486 // Initialization for DIGIT data - SPD -
487 const Bool_t expert = kTRUE ;
488 const Bool_t image = kTRUE ;
eca4fa66 489 Int_t rv = 0 ;
490// fGenDigitsOffset = (fAliITSQADataMakerRec->fDigitsQAList[AliRecoParam::kDefault])->GetEntries();
44ed7a66 491 //fSPDhDigitsTask must be incremented by one unit every time a histogram is ADDED to the QA List
492
493 Char_t name[50];
494 Char_t title[50];
495
496 TH1F *hlayer = new TH1F("SPDLayPattern_SPD","Layer map - SPD",6,0.,6.);
497 hlayer->GetXaxis()->SetTitle("Layer number");
498 hlayer->GetYaxis()->SetTitle("Entries");
4a903927 499 rv = fAliITSQADataMakerRec->Add2DigitsList(hlayer,fGenDigitsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image);
44ed7a66 500 fSPDhDigitsTask++;
501
502 TH1F **hmod = new TH1F*[2];
503 for (Int_t iLay=0; iLay<2; iLay++) {
504 sprintf(name,"SPDModPattern_SPD%d",iLay+1);
505 sprintf(title,"Module map - SPD Layer %d",iLay+1);
506 hmod[iLay]=new TH1F(name,title,240,0,240);
507 hmod[iLay]->GetXaxis()->SetTitle("Module number");
508 hmod[iLay]->GetYaxis()->SetTitle("Entries");
4a903927 509 rv = fAliITSQADataMakerRec->Add2DigitsList(hmod[iLay],1+iLay+fGenDigitsOffset[fAliITSQADataMakerRec->GetEventSpecie()], !expert, image);
44ed7a66 510 fSPDhDigitsTask++;
511 }
512
513 TH1F *hcolumns = new TH1F("SPDColumns_SPD","Columns - SPD",160,0.,160.);
514 hcolumns->GetXaxis()->SetTitle("Column number");
515 hcolumns->GetYaxis()->SetTitle("Entries");
4a903927 516 rv = fAliITSQADataMakerRec->Add2DigitsList(hcolumns,3+fGenDigitsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image);
44ed7a66 517 fSPDhDigitsTask++;
518
519 TH1F *hrows = new TH1F("SPDRows_SPD","Rows - SPD",256,0.,256.);
520 hrows->GetXaxis()->SetTitle("Row number");
521 hrows->GetYaxis()->SetTitle("Entries");
4a903927 522 rv = fAliITSQADataMakerRec->Add2DigitsList(hrows,4+fGenDigitsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image);
44ed7a66 523 fSPDhDigitsTask++;
524
525 TH1F** hMultSPDdigits = new TH1F*[2];
526 for (Int_t iLay=0; iLay<2; ++iLay) {
527 sprintf(name,"SPDDigitMultiplicity_SPD%d",iLay+1);
528 sprintf(title,"Digit multiplicity - SPD Layer %d",iLay+1);
529 hMultSPDdigits[iLay]=new TH1F(name,title,200,0.,200.);
530 hMultSPDdigits[iLay]->GetXaxis()->SetTitle("Digit multiplicity");
531 hMultSPDdigits[iLay]->GetYaxis()->SetTitle("Entries");
4a903927 532 rv = fAliITSQADataMakerRec->Add2DigitsList(hMultSPDdigits[iLay], 5+iLay+fGenDigitsOffset[fAliITSQADataMakerRec->GetEventSpecie()], !expert, image);
44ed7a66 533 fSPDhDigitsTask++;
534 }
535
536 TH2F *hMultSPDdig2MultSPDdig1
537 = new TH2F("SPDDigitMultCorrelation_SPD","Digit multiplicity correlation - SPD",200,0.,200.,200,0.,200.);
538 hMultSPDdig2MultSPDdig1->GetXaxis()->SetTitle("Digit multiplicity (Layer 1)");
539 hMultSPDdig2MultSPDdig1->GetYaxis()->SetTitle("Digit multiplicity (Layer 2)");
4a903927 540 rv = fAliITSQADataMakerRec->Add2DigitsList(hMultSPDdig2MultSPDdig1,7+fGenDigitsOffset[fAliITSQADataMakerRec->GetEventSpecie()], !expert, image);
44ed7a66 541 fSPDhDigitsTask++;
542
543 AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SPD Digits histograms booked\n",fSPDhDigitsTask));
eca4fa66 544 return rv ;
44ed7a66 545}
546
547//____________________________________________________________________________
eca4fa66 548Int_t AliITSQASPDDataMakerRec::MakeDigits(TTree *digits)
44ed7a66 549{
550 // Fill QA for DIGIT - SPD -
eca4fa66 551 Int_t rv = 0 ;
eca4fa66 552
44ed7a66 553// AliITS *fITS = (AliITS*)gAlice->GetModule("ITS");
554// fITS->SetTreeAddress();
555// TClonesArray *iITSdigits = fITS->DigitsAddress(0); // 0->SPD
33626263 556 TBranch *branchD = digits->GetBranch("ITSDigitsSPD");
44ed7a66 557 if (!branchD) {
33626263 558 AliError("can't get the branch with the SPD ITS digits !");
eca4fa66 559 return rv;
44ed7a66 560 }
33626263 561 static TClonesArray statDigits("AliITSdigitSPD");
44ed7a66 562 TClonesArray *iITSdigits = &statDigits;
563 branchD->SetAddress(&iITSdigits);
564 Int_t nDigitsL1=0;
565 Int_t nDigitsL2=0;
566
567 for (Int_t imod=0; imod<240; ++imod){
568 digits->GetEvent(imod);
569 Int_t ndigits = iITSdigits->GetEntries();
570 if (imod<80) {
4a903927 571 fAliITSQADataMakerRec->GetDigitsData(0+fGenDigitsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(0.5,ndigits);
572 fAliITSQADataMakerRec->GetDigitsData(1+fGenDigitsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(imod,ndigits);
44ed7a66 573 nDigitsL1+=ndigits;
574 }
575 else {
4a903927 576 fAliITSQADataMakerRec->GetDigitsData(0+fGenDigitsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(1,ndigits);
577 fAliITSQADataMakerRec->GetDigitsData(2+fGenDigitsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(imod,ndigits);
44ed7a66 578 nDigitsL2+=ndigits;
579 }
580 for (Int_t idig=0; idig<ndigits; ++idig) {
581 AliITSdigit *dig=(AliITSdigit*)iITSdigits->UncheckedAt(idig);
582 Int_t col=dig->GetCoord1(); // cell number z
583 Int_t row=dig->GetCoord2(); // cell number x
4a903927 584 fAliITSQADataMakerRec->GetDigitsData(3+fGenDigitsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(col);
585 fAliITSQADataMakerRec->GetDigitsData(4+fGenDigitsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(row);
44ed7a66 586 }
587 }
4a903927 588 fAliITSQADataMakerRec->GetDigitsData(5+fGenDigitsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(nDigitsL1);
589 fAliITSQADataMakerRec->GetDigitsData(6+fGenDigitsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(nDigitsL2);
590 fAliITSQADataMakerRec->GetDigitsData(7+fGenDigitsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(nDigitsL1,nDigitsL2);
eca4fa66 591 return rv ;
44ed7a66 592}
593
594//____________________________________________________________________________
eca4fa66 595Int_t AliITSQASPDDataMakerRec::InitRecPoints()
096292ae 596{
597 // Initialization for RECPOINTS - SPD -
7d297381 598 const Bool_t expert = kTRUE ;
599 const Bool_t image = kTRUE ;
eca4fa66 600 Int_t rv = 0 ;
8b7e858c 601 //AliInfo(Form("fAliITSQADataMakerRec->GetEventSpecie() %d\n",fAliITSQADataMakerRec->GetEventSpecie()));
602 //AliInfo(Form("fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] %d\n",fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]));
eca4fa66 603// fGenRecPointsOffset = (fAliITSQADataMakerRec->fRecPointsQAList[AliRecoParam::kDefault])->GetEntries();
26ee9565 604 TH1F* hlayer= new TH1F("SPDLayPattern_SPD","Layer map - SPD",6,0.,6.);
096292ae 605 hlayer->GetXaxis()->SetTitle("Layer number");
606 hlayer->GetYaxis()->SetTitle("Entries");
8b7e858c 607 rv = fAliITSQADataMakerRec->Add2RecPointsList(hlayer, 0+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image);
7a0e5776 608 fSPDhRecPointsTask++;
096292ae 609
610 TH1F** hmod = new TH1F*[2];
611 TH1F** hxl = new TH1F*[2];
612 TH1F** hzl = new TH1F*[2];
613 TH1F** hxg = new TH1F*[2];
614 TH1F** hyg = new TH1F*[2];
615 TH1F** hzg = new TH1F*[2];
616 TH1F** hr = new TH1F*[2];
617 TH1F** hphi = new TH1F*[2];
618 TH1F** hMultSPDcl = new TH1F*[2];
8bab7823 619 TH2F** hNyNz = new TH2F*[2]; // y and z cluster length
620 TH1F** hNpixels = new TH1F*[2]; // cluster size in number of pixels
621 TH1F** hType = new TH1F*[2]; // cluster type according to conventional table
622 TH2F** hPhiZ = new TH2F*[2];
096292ae 623
624 Float_t xlim[2]={4.5,8.};
625 Float_t zlim[2]={15.,15.};
626
627 Char_t name[50];
628 Char_t title[50];
629 for (Int_t iLay=0;iLay<2;iLay++) {
26ee9565 630 sprintf(name,"SPDModPattern_SPD%d",iLay+1);
096292ae 631 sprintf(title,"Module map - SPD Layer %d",iLay+1);
632 hmod[iLay]=new TH1F(name,title,fgknSPDmodules,0,fgknSPDmodules);
633 hmod[iLay]->GetXaxis()->SetTitle("Module number");
634 hmod[iLay]->GetYaxis()->SetTitle("Entries");
8bab7823 635 rv = fAliITSQADataMakerRec->Add2RecPointsList(hmod[iLay], 1+(12*iLay)+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image);
7a0e5776 636 fSPDhRecPointsTask++;
096292ae 637
26ee9565 638 sprintf(name,"SPDxLoc_SPD%d",iLay+1);
096292ae 639 sprintf(title,"Local x coordinate - SPD Layer %d",iLay+1);
640 hxl[iLay]=new TH1F(name,title,100,-4.,4.);
641 hxl[iLay]->GetXaxis()->SetTitle("Local x [cm]");
642 hxl[iLay]->GetYaxis()->SetTitle("Entries");
8bab7823 643 rv = fAliITSQADataMakerRec->Add2RecPointsList(hxl[iLay], 2+(12*iLay)+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image);
7a0e5776 644 fSPDhRecPointsTask++;
096292ae 645
26ee9565 646 sprintf(name,"SPDzLoc_SPD%d",iLay+1);
096292ae 647 sprintf(title,"Local z coordinate - SPD Layer %d",iLay+1);
648 hzl[iLay]=new TH1F(name,title,100,-4.,4.);
649 hzl[iLay]->GetXaxis()->SetTitle("Local z [cm]");
650 hzl[iLay]->GetYaxis()->SetTitle("Entries");
8bab7823 651 rv = fAliITSQADataMakerRec->Add2RecPointsList(hzl[iLay], 3+(12*iLay)+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image);
7a0e5776 652 fSPDhRecPointsTask++;
096292ae 653
26ee9565 654 sprintf(name,"SPDxGlob_SPD%d",iLay+1);
096292ae 655 sprintf(title,"Global x coordinate - SPD Layer %d",iLay+1);
656 hxg[iLay]=new TH1F(name,title,100,-xlim[iLay],xlim[iLay]);
657 hxg[iLay]->GetXaxis()->SetTitle("Global x [cm]");
658 hxg[iLay]->GetYaxis()->SetTitle("Entries");
8bab7823 659 rv = fAliITSQADataMakerRec->Add2RecPointsList(hxg[iLay],4+(12*iLay)+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image);
7a0e5776 660 fSPDhRecPointsTask++;
096292ae 661
26ee9565 662 sprintf(name,"SPDyGlob_SPD%d",iLay+1);
096292ae 663 sprintf(title,"Global y coordinate - SPD Layer %d",iLay+1);
664 hyg[iLay]=new TH1F(name,title,100,-xlim[iLay],xlim[iLay]);
665 hyg[iLay]->GetXaxis()->SetTitle("Global y [cm]");
666 hyg[iLay]->GetYaxis()->SetTitle("Entries");
8bab7823 667 rv = fAliITSQADataMakerRec->Add2RecPointsList(hyg[iLay], 5+(12*iLay)+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image);
7a0e5776 668 fSPDhRecPointsTask++;
096292ae 669
26ee9565 670 sprintf(name,"SPDzGlob_SPD%d",iLay+1);
096292ae 671 sprintf(title,"Global z coordinate - SPD Layer %d",iLay+1);
672 hzg[iLay]=new TH1F(name,title,150,-zlim[iLay],zlim[iLay]);
673 hzg[iLay]->GetXaxis()->SetTitle("Global z [cm]");
674 hzg[iLay]->GetYaxis()->SetTitle("Entries");
8bab7823 675 rv = fAliITSQADataMakerRec->Add2RecPointsList(hzg[iLay], 6+(12*iLay)+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image);
7a0e5776 676 fSPDhRecPointsTask++;
096292ae 677
26ee9565 678 sprintf(name,"SPDr_SPD%d",iLay+1);
096292ae 679 sprintf(title,"Radius - SPD Layer %d",iLay+1);
680 hr[iLay]=new TH1F(name,title,100,0.,10.);
681 hr[iLay]->GetXaxis()->SetTitle("r [cm]");
682 hr[iLay]->GetYaxis()->SetTitle("Entries");
8bab7823 683 rv = fAliITSQADataMakerRec->Add2RecPointsList(hr[iLay], 7+(12*iLay)+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image);
7a0e5776 684 fSPDhRecPointsTask++;
096292ae 685
26ee9565 686 sprintf(name,"SPDphi_SPD%d",iLay+1);
096292ae 687 sprintf(title,"#varphi - SPD Layer %d",iLay+1);
439e7a8a 688 hphi[iLay]=new TH1F(name,title,1000,0.,2*TMath::Pi());
096292ae 689 hphi[iLay]->GetXaxis()->SetTitle("#varphi [rad]");
690 hphi[iLay]->GetYaxis()->SetTitle("Entries");
8bab7823 691 rv = fAliITSQADataMakerRec->Add2RecPointsList(hphi[iLay], 8+(12*iLay)+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image);
7a0e5776 692 fSPDhRecPointsTask++;
096292ae 693
26ee9565 694 sprintf(name,"SPDSizeYvsZ_SPD%d",iLay+1);
096292ae 695 sprintf(title,"Cluster dimension - SPD Layer %d",iLay+1);
696 hNyNz[iLay]=new TH2F(name,title,100,0.,100.,100,0.,100.);
697 hNyNz[iLay]->GetXaxis()->SetTitle("z length");
698 hNyNz[iLay]->GetYaxis()->SetTitle("y length");
8bab7823 699 rv = fAliITSQADataMakerRec->Add2RecPointsList(hNyNz[iLay], 9+(12*iLay)+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image);
700 fSPDhRecPointsTask++;
701
702 sprintf(name,"SPDSizeTot_SPD%d",iLay+1);
703 sprintf(title,"Cluster size - SPD Layer %d",iLay+1);
704 hNpixels[iLay]=new TH1F(name,title,100,0.,100.);
705 hNpixels[iLay]->GetXaxis()->SetTitle("Cluster size");
706 hNpixels[iLay]->GetYaxis()->SetTitle("Entries");
707 rv = fAliITSQADataMakerRec->Add2RecPointsList(hNpixels[iLay], 10+(12*iLay)+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image);
708 fSPDhRecPointsTask++;
709
710 sprintf(name,"SPDType_SPD%d",iLay+1);
711 sprintf(title,"Cluster type - SPD Layer %d",iLay+1);
712 hType[iLay]=new TH1F(name,title,20,0.,20.);
713 hType[iLay]->GetXaxis()->SetTitle("Cluster type");
714 hType[iLay]->GetYaxis()->SetTitle("Entries");
715 rv = fAliITSQADataMakerRec->Add2RecPointsList(hType[iLay], 11+(12*iLay)+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], !expert, image);
7a0e5776 716 fSPDhRecPointsTask++;
096292ae 717
26ee9565 718 sprintf(name,"SPDphi_z_SPD%d",iLay+1);
096292ae 719 sprintf(title,"#varphi vs z - SPD Layer %d",iLay+1);
439e7a8a 720 hPhiZ[iLay]=new TH2F(name,title,150,-zlim[iLay],zlim[iLay],200,0.,2*TMath::Pi());
096292ae 721 hPhiZ[iLay]->GetXaxis()->SetTitle("Global z [cm]");
722 hPhiZ[iLay]->GetYaxis()->SetTitle("#varphi [rad]");
8bab7823 723 rv = fAliITSQADataMakerRec->Add2RecPointsList(hPhiZ[iLay], 12+(12*iLay)+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], !expert, image);
7a0e5776 724 fSPDhRecPointsTask++;
096292ae 725
726 }
727
26ee9565 728 TH2F *hrPhi=new TH2F("SPDr_phi_SPD","#varphi vs r - SPD",100,0.,10.,100,0.,2*TMath::Pi());
096292ae 729 hrPhi->GetXaxis()->SetTitle("r [cm]");
730 hrPhi->GetYaxis()->SetTitle("#varphi [rad]");
8bab7823 731 rv = fAliITSQADataMakerRec->Add2RecPointsList(hrPhi, 25+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], expert, !image);
7a0e5776 732 fSPDhRecPointsTask++;
096292ae 733
26ee9565 734 TH2F *hxy=new TH2F("SPDx_y_SPD","Global y vs x - SPD",200,-10.,10.,200,-10.,10.);
096292ae 735 hxy->GetXaxis()->SetTitle("Global x [cm]");
736 hxy->GetYaxis()->SetTitle("Global y [cm]");
8bab7823 737 rv = fAliITSQADataMakerRec->Add2RecPointsList(hxy, 26+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], !expert, image);
7a0e5776 738 fSPDhRecPointsTask++;
096292ae 739
740 for (Int_t iLay=0;iLay<2;iLay++) {
26ee9565 741 sprintf(name,"SPDMultiplicity_SPD%d",iLay+1);
096292ae 742 sprintf(title,"Cluster multiplicity - SPD Layer %d",iLay+1);
743 hMultSPDcl[iLay]=new TH1F(name,title,200,0.,200.);
744 hMultSPDcl[iLay]->GetXaxis()->SetTitle("Cluster multiplicity");
745 hMultSPDcl[iLay]->GetYaxis()->SetTitle("Entries");
8bab7823 746 rv = fAliITSQADataMakerRec->Add2RecPointsList(hMultSPDcl[iLay], 27+iLay+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], !expert, image);
7a0e5776 747 fSPDhRecPointsTask++;
096292ae 748 }
749
750 TH2F *hMultSPDcl2MultSPDcl1 =
26ee9565 751 new TH2F("SPDMultCorrelation_SPD","Cluster multiplicity correlation - SPD",200,0.,200.,200,0.,200.);
096292ae 752 hMultSPDcl2MultSPDcl1->GetXaxis()->SetTitle("Clusters multiplicity (Layer 1)");
753 hMultSPDcl2MultSPDcl1->GetYaxis()->SetTitle("Clusters multiplicity (Layer 2)");
8bab7823 754 rv = fAliITSQADataMakerRec->Add2RecPointsList(hMultSPDcl2MultSPDcl1, 29+fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()], !expert, image);
7a0e5776 755 fSPDhRecPointsTask++;
096292ae 756
5379c4a3 757 AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SPD Recs histograms booked\n",fSPDhRecPointsTask));
096292ae 758
eca4fa66 759 return rv ;
096292ae 760}
761
762//____________________________________________________________________________
eca4fa66 763Int_t AliITSQASPDDataMakerRec::MakeRecPoints(TTree * clusterTree)
096292ae 764{
765 // Fill QA for RecPoints - SPD -
8ec28eb2 766 Int_t rv = 0 ;
e62fe478 767 AliITSRecPointContainer* rpcont=AliITSRecPointContainer::Instance();
8ec28eb2 768 TClonesArray *recpoints = rpcont->FetchClusters(0,clusterTree);
e62fe478 769 if(!rpcont->GetStatusOK() || !rpcont->IsSPDActive()){
770 AliError("can't get SPD clusters !");
eca4fa66 771 return rv;
3647765c 772 }
8ec28eb2 773
8b7e858c 774 //AliInfo(Form("fAliITSQADataMakerRec->GetEventSpecie() %d\n",fAliITSQADataMakerRec->GetEventSpecie()));
775 //AliInfo(Form("fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] %d\n",fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()]));
e62fe478 776 Int_t nSPDmod = AliITSgeomTGeo::GetModuleIndex(3,1,1);
8ec28eb2 777
3647765c 778 Float_t cluGlo[3] = {0.,0.,0.};
779 Int_t nClusters[2] = {0,0};
8ec28eb2 780
e62fe478 781 for (Int_t iIts=0; iIts < nSPDmod; iIts++) {
782 recpoints = rpcont->UncheckedGetClusters(iIts);
783 Int_t nCluster = recpoints->GetEntriesFast();
784 if(nCluster == 0)continue;
3647765c 785 // loop over clusters
786 while(nCluster--) {
8ec28eb2 787 AliITSRecPoint* cluster =
e62fe478 788 (AliITSRecPoint*)recpoints->UncheckedAt(nCluster);
789 if (cluster->GetLayer()>1)continue;
3647765c 790 Int_t lay=cluster->GetLayer();
8b7e858c 791 fAliITSQADataMakerRec->GetRecPointsData(0 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(lay);
3647765c 792 cluster->GetGlobalXYZ(cluGlo);
793 Float_t rad=TMath::Sqrt(cluGlo[0]*cluGlo[0]+cluGlo[1]*cluGlo[1]);
096292ae 794 Float_t phi= TMath::Pi() + TMath::ATan2(-cluGlo[1],-cluGlo[0]);
795 if (lay==0) {
8ec28eb2 796 fAliITSQADataMakerRec->GetRecPointsData(1 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(iIts);
797 fAliITSQADataMakerRec->GetRecPointsData(2 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluster->GetDetLocalX());
798 fAliITSQADataMakerRec->GetRecPointsData(3 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluster->GetDetLocalZ());
799 fAliITSQADataMakerRec->GetRecPointsData(4 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluGlo[0]);
800 fAliITSQADataMakerRec->GetRecPointsData(5 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluGlo[1]);
801 fAliITSQADataMakerRec->GetRecPointsData(6 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluGlo[2]);
802 fAliITSQADataMakerRec->GetRecPointsData(7 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(rad);
803 fAliITSQADataMakerRec->GetRecPointsData(8 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(phi);
804 fAliITSQADataMakerRec->GetRecPointsData(9 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluster->GetNz(),cluster->GetNy());
805 fAliITSQADataMakerRec->GetRecPointsData(10 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluster->GetNpixels());
806 fAliITSQADataMakerRec->GetRecPointsData(11 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluster->GetSPDclusterType());
807 fAliITSQADataMakerRec->GetRecPointsData(12 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluGlo[2],phi);
808 } else {
8bab7823 809 fAliITSQADataMakerRec->GetRecPointsData(13 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(iIts);
810 fAliITSQADataMakerRec->GetRecPointsData(14 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluster->GetDetLocalX());
811 fAliITSQADataMakerRec->GetRecPointsData(15 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluster->GetDetLocalZ());
812 fAliITSQADataMakerRec->GetRecPointsData(16 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluGlo[0]);
813 fAliITSQADataMakerRec->GetRecPointsData(17 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluGlo[1]);
814 fAliITSQADataMakerRec->GetRecPointsData(18 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluGlo[2]);
815 fAliITSQADataMakerRec->GetRecPointsData(19 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(rad);
816 fAliITSQADataMakerRec->GetRecPointsData(20 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(phi);
817 fAliITSQADataMakerRec->GetRecPointsData(21 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluster->GetNz(),cluster->GetNy());
818 fAliITSQADataMakerRec->GetRecPointsData(22 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluster->GetNpixels());
819 fAliITSQADataMakerRec->GetRecPointsData(23 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluster->GetSPDclusterType());
820 fAliITSQADataMakerRec->GetRecPointsData(24 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluGlo[2],phi);
096292ae 821 }
8bab7823 822 fAliITSQADataMakerRec->GetRecPointsData(25 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(rad,phi);
823 fAliITSQADataMakerRec->GetRecPointsData(26 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(cluGlo[0],cluGlo[1]);
8ec28eb2 824
825 nClusters[lay]++;
3647765c 826 } // end of cluster loop
827 } // end of its "subdetector" loop
8ec28eb2 828
3647765c 829 for (Int_t iLay=0; iLay<2; iLay++)
8bab7823 830 fAliITSQADataMakerRec->GetRecPointsData(27 +iLay +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(nClusters[iLay]);
8ec28eb2 831
8bab7823 832 fAliITSQADataMakerRec->GetRecPointsData(29 +fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])->Fill(nClusters[0],nClusters[1]);
8ec28eb2 833
eca4fa66 834 return rv ;
096292ae 835}
7a0e5776 836
837
838
839//_______________________________________________________________
840
80b9610c 841Int_t AliITSQASPDDataMakerRec::GetOffset(AliQAv1::TASKINDEX_t task,Int_t specie) {
7a0e5776 842 // Returns offset number according to the specified task
843 Int_t offset=0;
4e25ac79 844 if( task == AliQAv1::kRAWS ) {
80b9610c 845 offset=fGenRawsOffset[specie];
7a0e5776 846 }
eca4fa66 847 else if( task == AliQAv1::kDIGITSR ) {
80b9610c 848 offset=fGenDigitsOffset[specie];
eca4fa66 849 }
4e25ac79 850 else if( task == AliQAv1::kRECPOINTS ) {
80b9610c 851 offset=fGenRecPointsOffset[specie];
7a0e5776 852 }
7a0e5776 853
854 return offset;
855}
856
857//_______________________________________________________________
858
8b7e858c 859void AliITSQASPDDataMakerRec::SetOffset(AliQAv1::TASKINDEX_t task, Int_t offset, Int_t specie) {
eca4fa66 860 // Returns offset number according to the specified task
861 if( task == AliQAv1::kRAWS ) {
8b7e858c 862 fGenRawsOffset[specie]=offset;
eca4fa66 863 }
864 else if( task == AliQAv1::kDIGITSR ) {
4a903927 865 fGenDigitsOffset[specie]=offset;
eca4fa66 866 }
867 else if( task == AliQAv1::kRECPOINTS ) {
8b7e858c 868 fGenRecPointsOffset[specie]=offset;
eca4fa66 869 }
870}
871
872//_______________________________________________________________
873
4e25ac79 874Int_t AliITSQASPDDataMakerRec::GetTaskHisto(AliQAv1::TASKINDEX_t task) {
7a0e5776 875 // Returns the number of histograms associated to the specified task
eca4fa66 876
7a0e5776 877 Int_t histotot=0;
878
4e25ac79 879 if( task == AliQAv1::kRAWS ) {
7a0e5776 880 histotot=fSPDhRawsTask;
881 }
eca4fa66 882 else if( task == AliQAv1::kDIGITSR ) {
883 histotot=fSPDhDigitsTask;
884 }
4e25ac79 885 else if( task == AliQAv1::kRECPOINTS ){
7a0e5776 886 histotot=fSPDhRecPointsTask;
887 }
4a903927 888
a1287af5 889 return histotot;
7a0e5776 890}