]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITSQASSDDataMakerRec.cxx
Added QA for digits during reconstruction (Yves)
[u/mrichter/AliRoot.git] / ITS / AliITSQASSDDataMakerRec.cxx
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  **************************************************************************/
15 /* $Id$    */
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
24 // --- ROOT system ---
25 #include <TH2D.h>
26 #include <TTree.h>
27 #include <TMath.h>
28 #include <TString.h>
29 #include <TSystem.h>
30
31 // --- Standard library ---
32
33 // --- AliRoot header files ---
34 #include "AliITSQASSDDataMakerRec.h"
35 #include "AliQADataMakerRec.h"
36 #include "AliLog.h"
37 #include "AliQAv1.h"
38 #include "AliQAChecker.h"
39 #include "AliRawReader.h"
40 #include "AliRawReaderRoot.h"
41 #include "AliITSRawStreamSSD.h"
42 #include "AliITSgeomTGeo.h"
43 #include "AliRawEventHeaderBase.h"
44 #include "AliITSRecPoint.h"
45 #include "AliITSDigit.h"
46 #include "AliITSBadChannelsSSDv2.h"
47
48 #include "AliCDBManager.h"
49 #include "AliCDBEntry.h"
50
51 ClassImp(AliITSQASSDDataMakerRec)
52
53 AliITSQASSDDataMakerRec::AliITSQASSDDataMakerRec(AliITSQADataMakerRec *aliITSQADataMakerRec, Bool_t kMode, Int_t ldc) :
54 TObject(),
55 fAliITSQADataMakerRec(aliITSQADataMakerRec),
56 fSSDEvent(0),
57 fSSDEventPerCycle(0),
58 fkOnline(kMode),
59 fLDC(ldc),
60 fSSDRawsOffset(0), fSSDRawsDAOffset(0),
61 fSSDRawsCommonLevelOffset(0),
62 fSSDhRawsTask(0),
63 fSSDhDigitsTask(0),
64 fSSDhRecPointsTask(0),
65 fGenRawsOffset(0),
66 fGenDigitsOffset(0),
67 fGenRecPointsOffset(0),
68 fCDBManager(0) {
69   // Default constructor   
70   //initilize the raw signal vs strip number histograms
71   if(fkOnline) {
72     fCDBManager = AliCDBManager::Instance();
73     //fCDBManager->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
74     fCDBManager->SetDefaultStorage(gSystem->Getenv("AMORE_CDB_URI"));
75     Int_t runNumber = atoi(gSystem->Getenv("DATE_RUN_NUMBER"));
76     if(!runNumber) 
77       AliWarning("DATE_RUN_NUMBER not defined!!!\n");
78     
79     fCDBManager->SetRun(runNumber);
80     AliCDBEntry *geomGRP = fCDBManager->Get("GRP/Geometry/Data");
81     if(!geomGRP) AliWarning("GRP geometry not found!!!\n");
82     
83     Int_t gLayer = 0,gLadder = 0, gModule = 0;
84     Int_t gHistCounter = 0;
85     TString gTitle; 
86
87     for(Int_t iModule = 500; iModule < fgkSSDMODULES + 500; iModule++) {
88       AliITSgeomTGeo::GetModuleId(iModule,gLayer,gLadder,gModule);
89       gTitle = "SSD_RawSignal_Layer"; gTitle += gLayer;
90       gTitle += "_Ladder"; gTitle += gLadder;
91       gTitle += "_Module"; gTitle += gModule;
92       fHistSSDRawSignalModule[gHistCounter] = new TH1D(gTitle.Data(),gTitle.Data(),
93                                                        2*fgkNumberOfPSideStrips,0,2*fgkNumberOfPSideStrips);
94       gHistCounter += 1;
95       
96       for(Int_t iStrip = 0; iStrip < 2*fgkNumberOfPSideStrips; iStrip++)
97         fOccupancyMatrix[iModule-500][iStrip] = 0; 
98     }//module loop
99   }//online flag
100   else {
101     for(Int_t iModule = 0; iModule < fgkSSDMODULES; iModule++) 
102       fHistSSDRawSignalModule[iModule]=NULL;
103     fCDBManager = NULL;
104   }
105 }
106
107 //____________________________________________________________________________ 
108 AliITSQASSDDataMakerRec::AliITSQASSDDataMakerRec(const AliITSQASSDDataMakerRec& qadm) :
109 TObject(),
110 fAliITSQADataMakerRec(qadm.fAliITSQADataMakerRec),
111 fSSDEvent(qadm.fSSDEvent),
112 fSSDEventPerCycle(qadm.fSSDEventPerCycle),
113 fkOnline(qadm.fkOnline),
114 fLDC(qadm.fLDC),
115 fSSDRawsOffset(qadm.fSSDRawsOffset), fSSDRawsDAOffset(qadm.fSSDRawsDAOffset),
116 fSSDRawsCommonLevelOffset(qadm.fSSDRawsCommonLevelOffset),
117 fSSDhRawsTask(qadm.fSSDhRawsTask),
118 fSSDhDigitsTask(qadm.fSSDhDigitsTask),
119 fSSDhRecPointsTask(qadm.fSSDhRecPointsTask),
120 fGenRawsOffset(qadm.fGenRawsOffset),
121 fGenDigitsOffset(qadm.fGenDigitsOffset),
122 fGenRecPointsOffset(qadm.fGenRecPointsOffset),
123 fCDBManager(qadm.fCDBManager) {
124   //copy ctor 
125   fAliITSQADataMakerRec->SetName((const char*)qadm.fAliITSQADataMakerRec->GetName()) ; 
126   fAliITSQADataMakerRec->SetTitle((const char*)qadm.fAliITSQADataMakerRec->GetTitle());
127 }
128
129 //__________________________________________________________________
130 AliITSQASSDDataMakerRec& AliITSQASSDDataMakerRec::operator = (const AliITSQASSDDataMakerRec& qac )
131 {
132   // Equal operator.
133   this->~AliITSQASSDDataMakerRec();
134   new(this) AliITSQASSDDataMakerRec(qac);
135   return *this;
136 }
137
138 //__________________________________________________________________
139 AliITSQASSDDataMakerRec::~AliITSQASSDDataMakerRec() {
140   // destructor
141   for(Int_t iModule = 0; iModule < fgkSSDMODULES; iModule++)
142     if(fHistSSDRawSignalModule[iModule]) delete fHistSSDRawSignalModule[iModule];
143   if(fCDBManager) delete fCDBManager;
144 }
145
146 //____________________________________________________________________________ 
147 void AliITSQASSDDataMakerRec::StartOfDetectorCycle()
148 {
149   if (  fAliITSQADataMakerRec->GetRawsData(0) == NULL ) // Raws not defined
150     return ; 
151
152   //Detector specific actions at start of cycle
153   AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQADM::Start of SSD Cycle\n");    
154
155   //Data size per DDL
156   ((TH1D *)(fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+4)))->Reset();
157   //Data size per LDC
158   ((TH1D *)(fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+22)))->Reset();
159
160   //online part
161   if(fkOnline) {
162     for(Int_t iModule = 500; iModule < fgkSSDMODULES + 500; iModule++) {
163       for(Int_t iStrip = 0; iStrip < 2*fgkNumberOfPSideStrips; iStrip++)
164         fOccupancyMatrix[iModule-500][iStrip] = 0; 
165     }//module loop
166
167     Int_t gHistPositionOccupancyPerLadder = 0;
168     Int_t gLayer = 0, gLadder = 0, gModule = 0;
169     for(Int_t iModule = 0; iModule < fgkSSDMODULES; iModule++) {
170       AliITSgeomTGeo::GetModuleId(iModule+500,gLayer,gLadder,gModule);
171       
172       gHistPositionOccupancyPerLadder = (gLayer == 5) ? 2*(gLadder - 1) : 2*(gLadder - 1 + fgkSSDLADDERSLAYER5);
173       
174       //P-SIDE OCCUPANCY
175       fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+fgkSSDMODULES+gHistPositionOccupancyPerLadder)->Reset();
176       //N-SIDE OCCUPANCY
177       fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+fgkSSDMODULES+gHistPositionOccupancyPerLadder+1)->Reset();
178
179       ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6))->Reset();
180       ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+1))->Reset();
181     }//module loop
182   }//online flag
183 }
184
185 //____________________________________________________________________________ 
186 void AliITSQASSDDataMakerRec::EndOfDetectorCycle(AliQAv1::TASKINDEX_t /*task*/, TObjArray* /*list*/)
187 {
188   // launch the QA checking
189   if (  fAliITSQADataMakerRec->GetRawsData(0) == NULL ) // Raws not defined
190     return ; 
191   // launch the QA checking
192   AliDebug(AliQAv1::GetQADebugLevel(),"AliITSDM instantiates checker with Run(AliQAv1::kITS, task, list)\n"); 
193   AliDebug(AliQAv1::GetQADebugLevel(), Form("Offset: %d\n",fGenRawsOffset));
194   //Data size per DDL
195   for(Int_t i = 0; i < fgkNumOfDDLs; i++) {
196     Double_t gSizePerDDL = TMath::Power(10,(fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+5+i))->GetMean())/1e+06;
197     //cout<<"DDL: "<<i+2<<" - Size: "<<gSizePerDDL<<" - Mean: "<<
198     //(fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+5+i))->GetMean()<<endl;
199     ((TH1D *)(fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+4)))->SetBinContent(i+2,gSizePerDDL);
200   }
201   
202   //Data size per LDC
203   for(Int_t i = 0; i < fgkNumOfLDCs; i++) {
204     Double_t gSizePerLDC = TMath::Power(10,(fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+23+i))->GetMean())/1e+06;
205     ((TH1D *)(fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+22)))->SetBinContent(i+6,gSizePerLDC);
206   }
207
208   //online part
209   if(fkOnline) {
210     //Output of the DA
211     MonitorOCDBObjects();
212
213     Int_t gHistPositionOccupancyPerModule = 0;
214     Int_t gLayer = 0, gLadder = 0, gModule = 0;
215     //occupancy per module
216     for(Int_t iModule = 0; iModule < fgkSSDMODULES; iModule++) {
217       AliITSgeomTGeo::GetModuleId(iModule+500,gLayer,gLadder,gModule);
218
219       gHistPositionOccupancyPerModule = (gLayer == 5) ? ((gLadder - 1)*fgkSSDMODULESPERLADDERLAYER5 + gModule - 1) : ((gLadder - 1)*fgkSSDMODULESPERLADDERLAYER6 + gModule + fgkSSDMODULESLAYER5 - 1);
220       for(Int_t iBins = 1; iBins < fHistSSDRawSignalModule[iModule]->GetXaxis()->GetNbins(); iBins++)
221         fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+gHistPositionOccupancyPerModule)->SetBinContent(iBins,fOccupancyMatrix[iModule][iBins-1]);
222       
223       if(fSSDEventPerCycle != 0)
224         ((TH1F *)(fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+gHistPositionOccupancyPerModule)))->Scale(100./fSSDEventPerCycle);
225     }//module loop
226
227     //occupancy per ladder
228     Int_t gHistPositionOccupancyPerLadder = 0;
229     Int_t lLadderLocationY = 0;
230     Double_t occupancy = 0.0, occupancyThreshold = 0.0, occupancyAverage = 0.0;
231     for(Int_t iModule = 0; iModule < fgkSSDMODULES; iModule++) {
232       AliITSgeomTGeo::GetModuleId(iModule+500,gLayer,gLadder,gModule);
233       
234       gHistPositionOccupancyPerModule = (gLayer == 5) ? ((gLadder - 1)*fgkSSDMODULESPERLADDERLAYER5 + gModule - 1) : ((gLadder - 1)*fgkSSDMODULESPERLADDERLAYER6 + gModule + fgkSSDMODULESLAYER5 - 1);
235       gHistPositionOccupancyPerLadder = (gLayer == 5) ? 2*(gLadder - 1) : 2*(gLadder - 1 + fgkSSDLADDERSLAYER5);
236       
237       //P-SIDE OCCUPANCY
238       occupancy = GetOccupancyModule((TH1 *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+gHistPositionOccupancyPerModule),0,0,0);
239       occupancyThreshold = GetOccupancyModule((TH1 *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+gHistPositionOccupancyPerModule),0,1,3);
240       occupancyAverage = GetOccupancyModule((TH1 *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+gHistPositionOccupancyPerModule),0,2,0);
241
242       fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+fgkSSDMODULES+gHistPositionOccupancyPerLadder)->Fill(gModule,occupancy);
243       lLadderLocationY = 3*gLadder; // sideP=1 sideN=0 
244       if(gLayer == 5) {
245         //occupancy per module - no threshold
246         ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6))->SetBinContent(gModule,lLadderLocationY,occupancy);
247         //occupancy per module - threshold @ 3%
248         ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+2))->SetBinContent(gModule,lLadderLocationY,occupancyThreshold);
249         //average occupancy per module
250         ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+4))->SetBinContent(gModule,lLadderLocationY,occupancyAverage);
251       }
252       else if(gLayer == 6) {
253         //occupancy per module - no threshold
254         ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+1))->SetBinContent(gModule,lLadderLocationY,occupancy);
255         //occupancy per module - threshold @ 3%
256         ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+3))->SetBinContent(gModule,lLadderLocationY,occupancyThreshold);
257         //average occupancy per module
258         ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+5))->SetBinContent(gModule,lLadderLocationY,occupancyAverage);
259       }
260
261       //N-SIDE OCCUPANCY
262       occupancy = GetOccupancyModule((TH1 *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+gHistPositionOccupancyPerModule),1,0,0);   
263       occupancyThreshold = GetOccupancyModule((TH1 *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+gHistPositionOccupancyPerModule),1,1,3);   
264       occupancyAverage = GetOccupancyModule((TH1 *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+gHistPositionOccupancyPerModule),1,2,0);   
265
266       fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+fgkSSDMODULES+gHistPositionOccupancyPerLadder+1)->Fill(gModule,occupancy);
267       if(gLayer == 5) {
268         //occupancy per module - no threshold
269         ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6))->SetBinContent(gModule,lLadderLocationY-1,occupancy);
270         //occupancy per module - threshold @ 3%
271         ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+2))->SetBinContent(gModule,lLadderLocationY-1,occupancyThreshold);
272         //average occupancy per module
273         ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+4))->SetBinContent(gModule,lLadderLocationY-1,occupancyAverage);
274       }
275       else if(gLayer == 6) {
276         //occupancy per module - no threshold
277         ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+1))->SetBinContent(gModule,lLadderLocationY-1,occupancy);
278         //occupancy per module - threshold @ 3%
279         ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+3))->SetBinContent(gModule,lLadderLocationY-1,occupancyThreshold);
280         //average occupancy per module
281         ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+5))->SetBinContent(gModule,lLadderLocationY-1,occupancyAverage);
282       }
283     }//module loop
284   }//online flag for SSD
285
286   fSSDEventPerCycle = 0;
287   
288  // AliQAChecker::Instance()->Run( AliQAv1::kITS , task, list);
289 }
290
291 //____________________________________________________________________________ 
292 void AliITSQASSDDataMakerRec::InitRaws() {  
293   // Initialization for RAW data - SSD -
294   const Bool_t expert   = kTRUE ; 
295   const Bool_t saveCorr = kTRUE ; 
296   const Bool_t image    = kTRUE ; 
297
298   fGenRawsOffset = (fAliITSQADataMakerRec->fRawsQAList[AliRecoParam::kDefault])->GetEntries();
299
300   if(fkOnline) {
301     AliDebug(AliQAv1::GetQADebugLevel(), "Book Online Histograms for SSD\n");
302   }
303   else {
304     AliDebug(AliQAv1::GetQADebugLevel(), "Book Offline Histograms for SSD\n ");
305   }
306   AliDebug(AliQAv1::GetQADebugLevel(), Form("Number of histograms (SPD+SDD): %d\n",fGenRawsOffset));
307   TString gTitle = 0;
308   //book online-offline QA histos
309   TH1D *fHistSSDEventType = new TH1D("SSD/DataSize/fHistSSDEventType",
310                                      ";Event type;Events",
311                                      31,-1,30);
312   fAliITSQADataMakerRec->Add2RawsList(fHistSSDEventType, 
313                                       fGenRawsOffset+fSSDRawsOffset, expert, !image, !saveCorr);
314   fSSDRawsOffset += 1;
315   TH1D *fHistSSDDataSize = new TH1D("SSD/DataSize/fHistSSDDataSize",
316                                     ";log(SSD data size) [Bytes];Events",
317                                     100,3,8);
318   fAliITSQADataMakerRec->Add2RawsList(fHistSSDDataSize, 
319                                       fGenRawsOffset+fSSDRawsOffset, expert, !image, !saveCorr);
320   fSSDRawsOffset += 1;
321   TH1D *fHistSSDDataSizePercentage = new TH1D("SSD/DataSize/fHistSSDDataSizePercentage",
322                                               ";SSD data size [%];Events",
323                                               100,0,100);
324   fAliITSQADataMakerRec->Add2RawsList(fHistSSDDataSizePercentage, 
325                                       fGenRawsOffset+fSSDRawsOffset, expert, !image, !saveCorr);
326   fSSDRawsOffset += 1;
327   TH1D *fHistSSDDDLId = new TH1D("SSD/DDL/fHistSSDDDLId",
328                                  ";DDL id;Events",20,510.5,530.5);
329   fAliITSQADataMakerRec->Add2RawsList(fHistSSDDDLId, 
330                                       fGenRawsOffset+fSSDRawsOffset, expert, !image, !saveCorr);
331   fSSDRawsOffset += 1;
332   TH1D *fHistSSDDataSizePerDDL = new TH1D("SSD/DataSize/fHistSSDDataSizePerDDL",
333                                           ";DDL id;<SSD data size> [MB]",
334                                           20,510.5,530.5);
335   fAliITSQADataMakerRec->Add2RawsList(fHistSSDDataSizePerDDL, 
336                                       fGenRawsOffset+fSSDRawsOffset, !expert, image, !saveCorr);
337   fSSDRawsOffset += 1;
338   TH1D *fHistSSDDataSizeDDL[fgkNumOfDDLs];
339   for(Int_t i = 1; i < fgkNumOfDDLs+1; i++) {
340     gTitle = "SSD/DDL/fHistSSDDataSizeDDL"; gTitle += i+511;
341     fHistSSDDataSizeDDL[i-1] = new TH1D(gTitle.Data(),
342                                         ";log(SSD data size) [Bytes];Events",
343                                         100,1,8);
344     fAliITSQADataMakerRec->Add2RawsList(fHistSSDDataSizeDDL[i-1], 
345                                         fGenRawsOffset+fSSDRawsOffset, expert, !image, !saveCorr);
346     fSSDRawsOffset += 1;
347   }
348   
349   TH1D *fHistSSDLDCId = new TH1D("SSD/LDC/fHistSSDLDCId",";LDC id;Events",10,0.5,10.5);
350   fAliITSQADataMakerRec->Add2RawsList(fHistSSDLDCId, 
351                                       fGenRawsOffset+fSSDRawsOffset, expert, !image, !saveCorr);
352   fSSDRawsOffset += 1;
353   TH1D *fHistSSDDataSizePerLDC = new TH1D("SSD/DataSize/fHistSSDDataSizePerLDC",
354                                           ";LDC id;<SSD data size> [MB]",
355                                           20,0.5,20.5);
356   fAliITSQADataMakerRec->Add2RawsList(fHistSSDDataSizePerLDC, 
357                                       fGenRawsOffset+fSSDRawsOffset, !expert, image, !saveCorr);
358   fSSDRawsOffset += 1;
359   TH1D *fHistSSDDataSizeLDC[fgkNumOfLDCs];
360   for(Int_t i = 1; i < fgkNumOfLDCs+1; i++) {
361     gTitle = "SSD/LDC/fHistSSDDataSizeLDC"; 
362     if(i == 1) gTitle += "082";
363     if(i == 2) gTitle += "086";
364     if(i == 3) gTitle += "085";
365     fHistSSDDataSizeLDC[i-1] = new TH1D(gTitle.Data(),
366                                         ";log(SSD data size) [Bytes];Events",
367                                         100,1,8);
368     fAliITSQADataMakerRec->Add2RawsList(fHistSSDDataSizeLDC[i-1], 
369                                         fGenRawsOffset+fSSDRawsOffset, expert, !image, !saveCorr);
370     fSSDRawsOffset += 1;
371   }
372   fSSDRawsCommonLevelOffset = fSSDRawsOffset;
373
374   if(fkOnline) {
375     Int_t gLayer = 0, gLadder = 0, gModule = 0;
376     //occupancy per SSD module
377     TH1D *fHistSSDOccupancyModule[fgkSSDMODULES]; 
378     for(Int_t i = 500; i < fgkSSDMODULES + 500; i++) {
379       AliITSgeomTGeo::GetModuleId(i,gLayer,gLadder,gModule);
380       gTitle = "SSD/Occupancy/Layer"; gTitle += gLayer;
381       gTitle += "/Ladder"; 
382       if(gLayer == 5) {
383         gTitle +=  499+gLadder;
384         gTitle += "/fHistSSD_Occupancy_Layer"; gTitle += gLayer;
385         gTitle += "_Ladder"; 
386         gTitle += 499+gLadder;
387       }
388       if(gLayer == 6) {
389         gTitle += 599+gLadder;
390         gTitle += "/fHistSSD_Occupancy_Layer"; gTitle += gLayer;
391         gTitle += "_Ladder"; 
392         gTitle += 599+gLadder;
393       }
394       gTitle += "_Module"; gTitle += gModule; 
395       fHistSSDOccupancyModule[i-500] = new TH1D(gTitle.Data(),gTitle.Data(),
396                                                 2*fgkNumberOfPSideStrips,0,2*fgkNumberOfPSideStrips);
397       fHistSSDOccupancyModule[i-500]->GetXaxis()->SetTitleColor(1);
398       fHistSSDOccupancyModule[i-500]->GetXaxis()->SetTitle("N_{strip}");
399       fHistSSDOccupancyModule[i-500]->GetYaxis()->SetTitle("Occupancy [%]");
400       fAliITSQADataMakerRec->Add2RawsList(fHistSSDOccupancyModule[i-500], 
401                                           fGenRawsOffset+fSSDRawsOffset, expert, !image, !saveCorr);
402       fSSDRawsOffset += 1;
403     }
404
405     //Occupancy per SSD ladder
406     Int_t occupancyCounter = 0;
407     TH1D *fHistSSDOccupancyLadder[2*(fgkSSDLADDERSLAYER5 + fgkSSDLADDERSLAYER6)];
408     for(Int_t iLayer = 5; iLayer < 7; iLayer++) {
409       for(Int_t iLadder = 1; iLadder < AliITSgeomTGeo::GetNLadders(iLayer) + 1; iLadder++) {
410         //P-side occupancy plots
411         gTitle = "SSD/Occupancy/Layer"; gTitle += iLayer;
412         gTitle += "/Ladder";
413         if(iLayer == 5) {
414           gTitle += 499+iLadder;
415           gTitle += "/fHistSSD_Occupancy_Layer"; gTitle += iLayer;
416           gTitle += "_Ladder"; 
417           gTitle += 499+iLadder;
418         }
419         if(iLayer == 6) {
420           gTitle += 599+iLadder;
421           gTitle += "/fHistSSD_Occupancy_Layer"; gTitle += iLayer;
422           gTitle += "_Ladder"; 
423           gTitle += 599+iLadder;
424         }
425         gTitle += "_PSide";
426         fHistSSDOccupancyLadder[occupancyCounter] = new TH1D(gTitle.Data(),
427                                                              gTitle.Data(),
428                                                              AliITSgeomTGeo::GetNDetectors(iLayer),
429                                                              0.5,AliITSgeomTGeo::GetNDetectors(iLayer)+0.5);
430         fHistSSDOccupancyLadder[occupancyCounter]->GetXaxis()->SetTitleColor(1);
431         fHistSSDOccupancyLadder[occupancyCounter]->GetXaxis()->SetTitle("Module number");
432         fHistSSDOccupancyLadder[occupancyCounter]->GetYaxis()->SetTitle("Occupancy [%]");
433         fAliITSQADataMakerRec->Add2RawsList(fHistSSDOccupancyLadder[occupancyCounter], 
434                                             fGenRawsOffset+fSSDRawsOffset, expert, !image, !saveCorr);
435         occupancyCounter += 1; fSSDRawsOffset += 1;
436         //N-side occupancy plots
437         gTitle = "SSD/Occupancy/Layer"; gTitle += iLayer;
438         gTitle += "/Ladder";
439         if(iLayer == 5) {
440           gTitle += 499+iLadder;
441           gTitle += "/fHistSSD_Occupancy_Layer"; gTitle += iLayer;
442           gTitle += "_Ladder"; 
443           gTitle += 499+iLadder;
444         }
445         if(iLayer == 6) {
446           gTitle += 599+iLadder;
447           gTitle += "/fHistSSD_Occupancy_Layer"; gTitle += iLayer;
448           gTitle += "_Ladder"; 
449           gTitle += 599+iLadder;
450         }
451         gTitle += "_NSide";
452         fHistSSDOccupancyLadder[occupancyCounter] = new TH1D(gTitle.Data(),
453                                                              gTitle.Data(),
454                                                              AliITSgeomTGeo::GetNDetectors(iLayer),
455                                                              0.5,AliITSgeomTGeo::GetNDetectors(iLayer)+0.5);
456         fHistSSDOccupancyLadder[occupancyCounter]->GetXaxis()->SetTitleColor(1);
457         fHistSSDOccupancyLadder[occupancyCounter]->GetXaxis()->SetTitle("Module number");
458         fHistSSDOccupancyLadder[occupancyCounter]->GetYaxis()->SetTitle("Occupancy [%]");
459         fAliITSQADataMakerRec->Add2RawsList(fHistSSDOccupancyLadder[occupancyCounter], 
460                                             fGenRawsOffset+fSSDRawsOffset, expert, !image, !saveCorr);
461         occupancyCounter += 1; fSSDRawsOffset += 1;
462       }//ladder loop
463     }//layer loop
464
465     //top level occupancy plots
466     //occupancy per module - no threshold
467     TH2D *fHistSSDOccupancyLayer5 = new TH2D("SSD/Occupancy/Layer5/fHistSSDOccupancyLayer5",
468                                              ";N_{modules};N_{Ladders}",
469                                              fgkSSDMODULESPERLADDERLAYER5,
470                                              0,fgkSSDMODULESPERLADDERLAYER5,
471                                              3*fgkSSDLADDERSLAYER5,
472                                              5000,500+fgkSSDLADDERSLAYER5);  
473     fHistSSDOccupancyLayer5->SetTitle("Occupancy per module (Layer 5) - No threshold");
474     fHistSSDOccupancyLayer5->GetZaxis()->SetRangeUser(0.0,100.0);
475     Char_t fLabel[3];
476     for(Int_t iBin = 1; iBin < fgkSSDMODULESPERLADDERLAYER5 + 1; iBin++){
477       sprintf(fLabel,"%d",iBin);
478       fHistSSDOccupancyLayer5->GetXaxis()->SetBinLabel(iBin,fLabel);
479     }
480     fAliITSQADataMakerRec->Add2RawsList(fHistSSDOccupancyLayer5, 
481                                         fGenRawsOffset+fSSDRawsOffset, expert, !image, !saveCorr);
482     fSSDRawsOffset += 1;
483     TH2D *fHistSSDOccupancyLayer6 = new TH2D("SSD/Occupancy/Layer6/fHistSSDOccupancyLayer6",
484                                              ";N_{modules};N_{Ladders}",
485                                              fgkSSDMODULESPERLADDERLAYER6,
486                                              0,fgkSSDMODULESPERLADDERLAYER6,
487                                              3*fgkSSDLADDERSLAYER6,
488                                              600,600+fgkSSDLADDERSLAYER6);
489     fHistSSDOccupancyLayer6->SetTitle("Occupancy per module (Layer 6) - No threshold");
490     fHistSSDOccupancyLayer6->GetZaxis()->SetRangeUser(0.0,100.0);
491     for(Int_t iBin = 1; iBin < fgkSSDMODULESPERLADDERLAYER6 + 1; iBin++){
492       sprintf(fLabel,"%d",iBin);
493       fHistSSDOccupancyLayer6->GetXaxis()->SetBinLabel(iBin,fLabel);
494     }
495     fAliITSQADataMakerRec->Add2RawsList(fHistSSDOccupancyLayer6, 
496                                         fGenRawsOffset+fSSDRawsOffset, expert, !image, !saveCorr);
497     fSSDRawsOffset += 1;
498
499     //occupancy per module - threshold @ 3%
500     TH2D *fHistSSDOccupancyThresholdLayer5 = new TH2D("SSD/Occupancy/Layer5/fHistSSDOccupancyThresholdLayer5",
501                                              ";N_{modules};N_{Ladders}",
502                                              fgkSSDMODULESPERLADDERLAYER5,
503                                              0,fgkSSDMODULESPERLADDERLAYER5,
504                                              3*fgkSSDLADDERSLAYER5,
505                                              500,500+fgkSSDLADDERSLAYER5);  
506     fHistSSDOccupancyThresholdLayer5->SetTitle("Occupancy per module (Layer 5) - Threshold 3%");
507     fHistSSDOccupancyThresholdLayer5->GetZaxis()->SetRangeUser(3.0,10.0);
508     for(Int_t iBin = 1; iBin < fgkSSDMODULESPERLADDERLAYER5 + 1; iBin++){
509       sprintf(fLabel,"%d",iBin);
510       fHistSSDOccupancyThresholdLayer5->GetXaxis()->SetBinLabel(iBin,fLabel);
511      }
512      fAliITSQADataMakerRec->Add2RawsList(fHistSSDOccupancyThresholdLayer5, 
513                                          fGenRawsOffset+fSSDRawsOffset, expert, !image, !saveCorr);
514     fSSDRawsOffset += 1;
515     TH2D *fHistSSDOccupancyThresholdLayer6 = new TH2D("SSD/Occupancy/Layer6/fHistSSDOccupancyThresholdLayer6",
516                                              ";N_{modules};N_{Ladders}",
517                                              fgkSSDMODULESPERLADDERLAYER6,
518                                              0,fgkSSDMODULESPERLADDERLAYER6,
519                                              3*fgkSSDLADDERSLAYER6,
520                                              600,600+fgkSSDLADDERSLAYER6);
521     fHistSSDOccupancyThresholdLayer6->SetTitle("Occupancy per module (Layer 6) - Threshold 3%");
522     fHistSSDOccupancyThresholdLayer6->GetZaxis()->SetRangeUser(3.0,10.0);
523     for(Int_t iBin = 1; iBin < fgkSSDMODULESPERLADDERLAYER6 + 1; iBin++){
524       sprintf(fLabel,"%d",iBin);
525       fHistSSDOccupancyThresholdLayer6->GetXaxis()->SetBinLabel(iBin,fLabel);
526     }
527     fAliITSQADataMakerRec->Add2RawsList(fHistSSDOccupancyThresholdLayer6, 
528                                         fGenRawsOffset+fSSDRawsOffset, expert, !image, !saveCorr);
529     fSSDRawsOffset += 1;
530
531     //Average occupancy per module
532     TH2D *fHistSSDAverageOccupancyLayer5 = new TH2D("SSD/Occupancy/Layer5/fHistSSDAverageOccupancyLayer5",
533                                              ";N_{modules};N_{Ladders}",
534                                              fgkSSDMODULESPERLADDERLAYER5,
535                                              0,fgkSSDMODULESPERLADDERLAYER5,
536                                              3*fgkSSDLADDERSLAYER5,
537                                              500,500+fgkSSDLADDERSLAYER5);  
538     fHistSSDAverageOccupancyLayer5->SetTitle("Average occupancy per module (Layer 5)");
539     fHistSSDAverageOccupancyLayer5->GetZaxis()->SetRangeUser(0.0,5.0);
540     for(Int_t iBin = 1; iBin < fgkSSDMODULESPERLADDERLAYER5 + 1; iBin++){
541       sprintf(fLabel,"%d",iBin);
542       fHistSSDAverageOccupancyLayer5->GetXaxis()->SetBinLabel(iBin,fLabel);
543     }
544     fAliITSQADataMakerRec->Add2RawsList(fHistSSDAverageOccupancyLayer5, 
545                                         fGenRawsOffset+fSSDRawsOffset);
546     fSSDRawsOffset += 1;
547     TH2D *fHistSSDAverageOccupancyLayer6 = new TH2D("SSD/Occupancy/Layer6/fHistSSDAverageOccupancyLayer6",
548                                              ";N_{modules};N_{Ladders}",
549                                              fgkSSDMODULESPERLADDERLAYER6,
550                                              0,fgkSSDMODULESPERLADDERLAYER6,
551                                              3*fgkSSDLADDERSLAYER6,
552                                              600,600+fgkSSDLADDERSLAYER6);
553     fHistSSDAverageOccupancyLayer6->SetTitle("Average occupancy per module (Layer 6)");
554     fHistSSDAverageOccupancyLayer6->GetZaxis()->SetRangeUser(0.0,5.0);
555     for(Int_t iBin = 1; iBin < fgkSSDMODULESPERLADDERLAYER6 + 1; iBin++){
556       sprintf(fLabel,"%d",iBin);
557       fHistSSDAverageOccupancyLayer6->GetXaxis()->SetBinLabel(iBin,fLabel);
558     }
559     fAliITSQADataMakerRec->Add2RawsList(fHistSSDAverageOccupancyLayer6, 
560                                         fGenRawsOffset+fSSDRawsOffset, !expert, image, !saveCorr);
561     fSSDRawsOffset += 1;
562
563     //Output of the DA
564     TH2D *fHistPSideBadChannelMapLayer5 = new TH2D("SSD/BadChannels/fHistPSideBadChannelMapLayer5",
565                                                    "Layer 5;N_{module};N_{ladder}",
566                                                    22,1,23,
567                                                    34,500,534);
568     fHistPSideBadChannelMapLayer5->GetXaxis()->SetTitleColor(1);
569     fHistPSideBadChannelMapLayer5->SetStats(kFALSE);
570     fHistPSideBadChannelMapLayer5->GetYaxis()->SetTitleOffset(1.8);
571     fHistPSideBadChannelMapLayer5->GetXaxis()->SetNdivisions(22);
572     fHistPSideBadChannelMapLayer5->GetYaxis()->SetNdivisions(34);
573     fHistPSideBadChannelMapLayer5->GetXaxis()->SetLabelSize(0.03);
574     fHistPSideBadChannelMapLayer5->GetYaxis()->SetLabelSize(0.03);
575     fHistPSideBadChannelMapLayer5->GetZaxis()->SetTitleOffset(1.6);
576     fHistPSideBadChannelMapLayer5->GetZaxis()->SetTitle("Bad channels (p-side)[%]");
577     fAliITSQADataMakerRec->Add2RawsList(fHistPSideBadChannelMapLayer5, 
578                                         fGenRawsOffset+fSSDRawsOffset, expert, !image, !saveCorr);
579     fSSDRawsOffset += 1; fSSDRawsDAOffset += 1;
580
581     TH2D *fHistNSideBadChannelMapLayer5 = new TH2D("SSD/BadChannels/fHistNSideBadChannelMapLayer5",
582                                                    "Layer 5;N_{module};N_{ladder}",
583                                                    22,1,23,
584                                                    34,500,534);
585     fHistNSideBadChannelMapLayer5->GetXaxis()->SetTitleColor(1);
586     fHistNSideBadChannelMapLayer5->SetStats(kFALSE);
587     fHistNSideBadChannelMapLayer5->GetYaxis()->SetTitleOffset(1.8);
588     fHistNSideBadChannelMapLayer5->GetXaxis()->SetNdivisions(22);
589     fHistNSideBadChannelMapLayer5->GetYaxis()->SetNdivisions(34);
590     fHistNSideBadChannelMapLayer5->GetXaxis()->SetLabelSize(0.03);
591     fHistNSideBadChannelMapLayer5->GetYaxis()->SetLabelSize(0.03);
592     fHistNSideBadChannelMapLayer5->GetZaxis()->SetTitleOffset(1.6);
593     fHistNSideBadChannelMapLayer5->GetZaxis()->SetTitle("Bad channels (n-side)[%]");
594     fAliITSQADataMakerRec->Add2RawsList(fHistNSideBadChannelMapLayer5, 
595                                         fGenRawsOffset+fSSDRawsOffset, expert, !image, !saveCorr);
596     fSSDRawsOffset += 1; fSSDRawsDAOffset += 1;
597
598     TH2D *fHistPSideBadChannelMapLayer6 = new TH2D("SSD/BadChannels/fHistPSideBadChannelMapLayer6",
599                                                    "Layer 6;N_{module};N_{ladder}",
600                                                    25,1,26,
601                                                    38,600,638);
602     fHistPSideBadChannelMapLayer6->GetXaxis()->SetTitleColor(1);
603     fHistPSideBadChannelMapLayer6->SetStats(kFALSE);
604     fHistPSideBadChannelMapLayer6->GetYaxis()->SetTitleOffset(1.8);
605     fHistPSideBadChannelMapLayer6->GetXaxis()->SetNdivisions(25);
606     fHistPSideBadChannelMapLayer6->GetYaxis()->SetNdivisions(38);
607     fHistPSideBadChannelMapLayer6->GetXaxis()->SetLabelSize(0.03);
608     fHistPSideBadChannelMapLayer6->GetYaxis()->SetLabelSize(0.03);
609     fHistPSideBadChannelMapLayer6->GetZaxis()->SetTitleOffset(1.6);
610     fHistPSideBadChannelMapLayer6->GetZaxis()->SetTitle("Bad channels (p-side)[%]");
611     fAliITSQADataMakerRec->Add2RawsList(fHistPSideBadChannelMapLayer6, 
612                                         fGenRawsOffset+fSSDRawsOffset, expert, !image, !saveCorr);
613     fSSDRawsOffset += 1; fSSDRawsDAOffset += 1;
614
615     TH2D *fHistNSideBadChannelMapLayer6 = new TH2D("SSD/BadChannels/fHistNSideBadChannelMapLayer6",
616                                                    "Layer 6;N_{module};N_{ladder}",
617                                                    25,1,26,
618                                                    38,600,638);
619     fHistNSideBadChannelMapLayer6->GetXaxis()->SetTitleColor(1);
620     fHistNSideBadChannelMapLayer6->SetStats(kFALSE);
621     fHistNSideBadChannelMapLayer6->GetYaxis()->SetTitleOffset(1.8);
622     fHistNSideBadChannelMapLayer6->GetXaxis()->SetNdivisions(25);
623     fHistNSideBadChannelMapLayer6->GetYaxis()->SetNdivisions(38);
624     fHistNSideBadChannelMapLayer6->GetXaxis()->SetLabelSize(0.03);
625     fHistNSideBadChannelMapLayer6->GetYaxis()->SetLabelSize(0.03);
626     fHistNSideBadChannelMapLayer6->GetZaxis()->SetTitleOffset(1.6);
627     fHistNSideBadChannelMapLayer6->GetZaxis()->SetTitle("Bad channels (n-side)[%]");
628     fAliITSQADataMakerRec->Add2RawsList(fHistNSideBadChannelMapLayer6, 
629                                         fGenRawsOffset+fSSDRawsOffset, expert, !image, !saveCorr);
630     fSSDRawsOffset += 1; fSSDRawsDAOffset += 1;
631   }//online flag
632
633   fSSDhRawsTask = fSSDRawsOffset;
634   AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SSD Raws histograms booked\n",fSSDhRawsTask));
635   AliDebug(AliQAv1::GetQADebugLevel(), Form("Number of histograms (SPD+SDD+SSD): %d\n",fGenRawsOffset+fSSDhRawsTask));  
636   AliDebug(AliQAv1::GetQADebugLevel(),Form("Number of histograms (SPD+SDD+SSD): %d\n",fGenRawsOffset+fSSDRawsOffset));
637   
638   /*
639   fSSDhTask = fSSDRawsOffset;
640   AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SSD Raws histograms booked\n",fSSDhTask));
641   AliDebug(AliQAv1::GetQADebugLevel(), Form("Number of histograms (SPD+SDD+SSD): %d\n",fGenRawsOffset+fSSDhTask));  
642   AliDebug(AliQAv1::GetQADebugLevel(),Form("Number of histograms (SPD+SDD+SSD): %d\n",fGenRawsOffset+fSSDRawsOffset));
643   */
644 }
645
646 //____________________________________________________________________________
647 void AliITSQASSDDataMakerRec::MakeRaws(AliRawReader* rawReader) { 
648   // Fill QA for RAW - SSD -
649   Int_t gStripNumber;
650   Int_t gHistPosition;
651   Int_t gLayer = 0,gLadder = 0, gModule = 0;
652   
653   Double_t gSizePerDDL[fgkNumOfDDLs] = {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};
654   Double_t gSizePerLDC[fgkNumOfLDCs] = {0.,0.,0.};
655   Double_t sumSSDDataSize = 0.0;
656   Double_t eventSize = -1.0;
657
658   if(fkOnline) {
659     //reset the signal vs strip number histograms
660     for(Int_t iModule = 0; iModule < fgkSSDMODULES; iModule++)
661       fHistSSDRawSignalModule[iModule]->Reset();
662   }//online flag
663
664   rawReader->Select("ITSSSD",-1,-1);  
665   rawReader->Reset(); //rawReader->NextEvent();   
666   (fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset))->Fill(rawReader->GetType());
667   if(rawReader->GetType() == 7) {
668     fSSDEvent += 1;
669     fSSDEventPerCycle += 1;
670   }
671
672   AliITSRawStreamSSD gSSDStream(rawReader);    
673   AliRawReaderRoot *rootReader = (AliRawReaderRoot *)rawReader;
674   if(rootReader) {
675     const AliRawEventHeaderBase *header = rootReader->GetEventHeader();
676     if(header)
677       eventSize = header->GetEventSize();
678   }
679   while (gSSDStream.Next()) {
680     if(gSSDStream.GetModuleID() < 0) continue;
681     /*cout<<"DDL: "<<rawReader->GetDDLID()<<
682       " - LDC: "<<rawReader->GetLDCId()<<
683       " - Size: "<<rawReader->GetDataSize()<<
684       " - Equipment size: "<<rawReader->GetEquipmentSize()<<endl;*/
685     gSizePerDDL[rawReader->GetDDLID()] = rawReader->GetDataSize();
686     gSizePerLDC[rawReader->GetLDCId()-6] = rawReader->GetDataSize();
687     AliITSgeomTGeo::GetModuleId(gSSDStream.GetModuleID(),gLayer,gLadder,gModule);
688     if(gSSDStream.GetStrip() < 0) continue;
689     gStripNumber = (gSSDStream.GetSideFlag() == 0) ? gSSDStream.GetStrip() : -gSSDStream.GetStrip() + 2*fgkNumberOfPSideStrips;
690     gHistPosition = (gLayer == 5) ? ((gLadder - 1)*fgkSSDMODULESPERLADDERLAYER5 + gModule - 1) : ((gLadder - 1)*fgkSSDMODULESPERLADDERLAYER6 + gModule + fgkSSDMODULESLAYER5 - 1);
691     //AliDebug(AliQAv1::GetQADebugLevel(), Form("ModulePosition: %d - Layer: %d - Ladder: %d - Module: %d\n",gHistPosition,gLayer,gLadder,gModule));
692     if(fkOnline)
693       fHistSSDRawSignalModule[gHistPosition]->Fill(gStripNumber,gSSDStream.GetSignal());
694     //fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+gHistPosition+fSSDRawsCommonLevelOffset)->Fill(gStripNumber,gSSDStream.GetSignal());
695   }//streamer loop   
696   
697   //event size calculation and filling info
698   for(Int_t i = 0; i < fgkNumOfDDLs; i++) {
699     sumSSDDataSize += gSizePerDDL[i];
700     if(gSizePerDDL[i] > 0) {
701       (fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+3))->Fill(i+512);
702       (fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+5+i))->Fill(TMath::Log10(gSizePerDDL[i]));
703     }
704     //(fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+4))->Fill(i+512,gSizePerDDL[i]/1e+06);
705   }
706   for(Int_t i = 0; i < fgkNumOfLDCs; i++) {
707     if(gSizePerLDC[i] > 0) {
708       (fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+21))->Fill(i+6);
709       //LDC 082
710       if(i == 0)
711         gSizePerLDC[i] = gSizePerDDL[8] + gSizePerDDL[9] + gSizePerDDL[10] +
712           gSizePerDDL[11] + gSizePerDDL[12] + gSizePerDDL[13];
713       //LDC 086
714       if(i == 1)
715         gSizePerLDC[i] = gSizePerDDL[3] + gSizePerDDL[4] + gSizePerDDL[5] +
716           gSizePerDDL[6] + gSizePerDDL[7];
717       //LDC 085
718       if(i == 2)
719         gSizePerLDC[i] = gSizePerDDL[0] + gSizePerDDL[1] + gSizePerDDL[2] +
720           gSizePerDDL[14] + gSizePerDDL[15];
721       (fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+23+i))->Fill(TMath::Log10(gSizePerLDC[i]));
722       //cout<<"Event: "<<fSSDEventPerCycle<<" - LDC: "<<i+6<<
723       //" - Data size: "<<gSizePerLDC[i]<<endl;
724     }
725     //(fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+22))->Fill(i+6,gSizePerLDC[i]/1e+06);
726   }
727   if(sumSSDDataSize) 
728     (fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+1))->Fill(TMath::Log10(sumSSDDataSize));
729   if(eventSize)
730     (fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+2))->Fill(100.*sumSSDDataSize/eventSize);
731
732   //Occupancy calculation
733   if(fkOnline) {
734     for(Int_t iModule = 0; iModule < fgkSSDMODULES; iModule++) {
735       GetOccupancyStrip(fHistSSDRawSignalModule[iModule],fOccupancyMatrix[iModule]);
736       //if(iModule == 156) {    
737         //cout<<"========================================"<<endl;
738         //AliITSgeomTGeo::GetModuleId(656,gLayer,gLadder,gModule);
739         /*for(Int_t iBin = 1; iBin < fHistSSDRawSignalModule[iModule]->GetXaxis()->GetNbins(); iBin++) {
740           if((iBin >= 750)&&(iBin <= 780))
741           cout<<"Event: "<<fSSDEventPerCycle<<" - Ladder: "<<gLadder+499<<
742           " - Module: "<<gModule<<" - Strip: "<<iBin<<
743           " - Signal: "<<fHistSSDRawSignalModule[iModule]->GetBinContent(iBin)<<endl;
744           }*///strip loop --> to be removed
745       //}//module cut --> to be removed
746     }//module loop
747   }//online flag for SSD
748 }
749
750 //____________________________________________________________________________ //
751 void AliITSQASSDDataMakerRec::GetOccupancyStrip(TH1 *lHisto, Int_t *occupancyMatrix) { 
752   //Increments the entries in the occupancy matrix based 
753   //on whether the signal for each strip is larger than the cutoff
754   //Currently the cutoff is at 0 which means that if ZS
755   //works, whatever comes from the FEROM is considered as "signal"
756   //Double_t cutoff = 0.0;
757   TString histname = lHisto->GetName();
758   //cout<<histname.Data()<<endl;
759   //if(histname.Contains("Layer5_Ladder8_Module3")) {
760   for(Int_t iBin = 1; iBin < lHisto->GetXaxis()->GetNbins(); iBin++) {
761     Double_t y = lHisto->GetBinContent(iBin);
762     if(y) {
763       occupancyMatrix[iBin-1] += 1;
764     }
765     //if((iBin >= 750)&&(iBin <= 780))
766     //cout<<"Strip: "<<iBin<<
767     //" - Signal: "<<y<<
768     //" - Occupancy: "<<occupancyMatrix[iBin-1]<<endl;
769     
770   }
771   //}
772 }
773
774 //____________________________________________________________________________ 
775 Double_t AliITSQASSDDataMakerRec::GetOccupancyModule(TH1 *lHisto, 
776                                                      Int_t stripside,
777                                                      Int_t mode,
778                                                      Double_t threshold) {
779   //Mode 0: calculates the occupancy of a module 
780   //        without a threshold in the strip occupancy
781   //Mode 1: calculates the occupancy of a module 
782   //        with the set threshold in the strip occupancy
783   //Mode 2: calculates the average occupancy of a module 
784
785   // bo: TDC >0 or # of sigmas wrt noise ?
786   //stripside == 0 --> P-side
787   //stripside == 1 --> N-side
788   Int_t lNumFiredBins = 0;
789   Double_t sumOccupancy = 0.0;
790   TString histname = lHisto->GetName();
791   for(Int_t iBin = 1 + stripside*fgkNumberOfPSideStrips; iBin < fgkNumberOfPSideStrips*(1 + stripside); iBin++){
792     /*if(histname.Contains("Layer5_Ladder507_Module3")) {
793       cout<<lHisto->GetName()<<
794       " - Strip: "<<iBin<<
795       " - Bin content: "<<lHisto->GetBinContent(iBin)<<endl;
796       }*/
797     if (lHisto->GetBinContent(iBin) > threshold) {
798       lNumFiredBins++; 
799       sumOccupancy = lHisto->GetBinContent(iBin);
800     }
801   }
802   
803   Double_t lOccupancy = 0.0;
804   if((mode == 0)||(mode == 1))
805     lOccupancy = (100.*lNumFiredBins)/fgkNumberOfPSideStrips; // percentage  
806   else if(mode == 2)
807     lOccupancy = 100.*sumOccupancy/fgkNumberOfPSideStrips;
808
809   /*if(histname.Contains("Layer5_Ladder507_Module3"))
810     cout<<"Fired strips: "<<lNumFiredBins<<
811     " - Occupancy: "<<lOccupancy<<endl;*/
812   //AliDebug(AliQAv1::GetQADebugLevel(), Form("Fired strips: %d - Total strips: %d - Occupancy :%lf\n",lNumFiredBins,lHisto->GetNbinsX(),lOccupancy));
813   
814   return lOccupancy;
815 }
816
817 //____________________________________________________________________________
818 void AliITSQASSDDataMakerRec::MonitorOCDBObjects() { 
819   //Monitor in AMORE the output of the DA
820   //Currently only the bad channel list is monitored
821   //Todo: Noise - Pedestal
822   ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsOffset-fSSDRawsDAOffset))->Reset();
823   ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsOffset-fSSDRawsDAOffset+1))->Reset();
824   ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsOffset-fSSDRawsDAOffset+2))->Reset();
825   ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsOffset-fSSDRawsDAOffset+3))->Reset();
826
827   AliCDBEntry *entryBadChannelsSSD = fCDBManager->Get("ITS/Calib/BadChannelsSSD");
828   if(!entryBadChannelsSSD) 
829     AliError("OCDB entry for the bad channel list is not valid!"); 
830   AliITSBadChannelsSSDv2 *badchannelsSSD = (AliITSBadChannelsSSDv2 *)entryBadChannelsSSD->GetObject();
831   if(!badchannelsSSD)
832     AliError("Bad channel list object is not a valid AliITSBadChannelsSSD object!");
833
834   //_____________________________________________________________________________//                       
835   Int_t nBadPSideChannels = 0, nBadNSideChannels = 0;
836   Int_t layer = 0, ladder = 0, module = 0;
837   Int_t nPSideChannelsLayer5 = 0, nNSideChannelsLayer5 = 0;
838   Int_t nPSideChannelsLayer6 = 0, nNSideChannelsLayer6 = 0;
839   //_____________________________________________________________________________//                      
840
841   for(Int_t i = 0; i < fgkSSDMODULES; i++) {
842     AliITSgeomTGeo::GetModuleId(i+500,layer,ladder,module);
843     nBadPSideChannels = 0, nBadNSideChannels = 0;
844     nPSideChannelsLayer5 = 0, nNSideChannelsLayer5 = 0;
845     nPSideChannelsLayer6 = 0, nNSideChannelsLayer6 = 0;
846
847     Int_t badChannel = 0;
848     for(Int_t j = 0; j < fgkNumberOfPSideStrips; j++) {
849       badChannel = (Int_t)(badchannelsSSD->GetBadChannelP(i,j));
850       if(badChannel != 0) {
851         if(layer == 5)
852           nPSideChannelsLayer5 += 1;
853         if(layer == 6)
854           nPSideChannelsLayer6 += 1;
855         nBadPSideChannels += 1;
856       }//badchannel flag != 0
857       badChannel = (Int_t)(badchannelsSSD->GetBadChannelN(i,j));
858       if(badChannel != 0) {
859         if(layer == 5)
860           nNSideChannelsLayer5 += 1;
861         if(layer == 6)
862           nNSideChannelsLayer6 += 1;
863         nBadNSideChannels += 1;
864       }//badchannel flag != 0
865     }//loop over strips
866     if(layer == 5) {
867       if(nPSideChannelsLayer5 > 0)
868         ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsOffset-fSSDRawsDAOffset))->Fill(module,499+ladder,
869                                                                             100.*nPSideChannelsLayer5/fgkNumberOfPSideStrips);
870       else ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsOffset-fSSDRawsDAOffset))->Fill(module,499+ladder,0.0001);
871       if(nNSideChannelsLayer5 > 0)
872         ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsOffset-fSSDRawsDAOffset+1))->Fill(module,499+ladder,
873                                                                             100.*nNSideChannelsLayer5/fgkNumberOfPSideStrips);
874       else ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsOffset-fSSDRawsDAOffset+1))->Fill(module,499+ladder,0.0001);
875     }//layer 5                                                                                                                      
876     if(layer == 6) {
877       if(nPSideChannelsLayer6 > 0)
878         ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsOffset-fSSDRawsDAOffset+2))->Fill(module,599+ladder,
879                                                                             100.*nPSideChannelsLayer6/fgkNumberOfPSideStrips);
880       else ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsOffset-fSSDRawsDAOffset+2))->Fill(module,599+ladder,0.0001);
881       if(nNSideChannelsLayer6 > 0)
882         ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsOffset-fSSDRawsDAOffset+3))->Fill(module,599+ladder,
883                                                                             100.*nNSideChannelsLayer6/fgkNumberOfPSideStrips);
884       else ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fGenRawsOffset+fSSDRawsOffset-fSSDRawsDAOffset+3))->Fill(module,599+ladder,0.0001);
885     }//layer 6                                                                                                                      
886   }//module loop
887 }
888
889 //____________________________________________________________________________ 
890 void AliITSQASSDDataMakerRec::InitDigits() { 
891   // Initialization for DIGIT data - SSD -
892   const Bool_t expert   = kTRUE ; 
893   const Bool_t image    = kTRUE ; 
894   
895   fGenDigitsOffset = (fAliITSQADataMakerRec->fDigitsQAList[AliRecoParam::kDefault])->GetEntries();
896   
897   // custom code here
898   TH1F *fHistSSDModule = new TH1F("fHistSSDDigitsModule",
899                                   ";SSD Module Number;N_{DIGITS}",
900                                   1698,499.5,2197.5);  
901   fAliITSQADataMakerRec->Add2DigitsList(fHistSSDModule,
902                                         fGenDigitsOffset + 0, !expert, image);
903   fSSDhDigitsTask += 1;
904   TH2F *fHistSSDModuleStrip = new TH2F("fHistSSDDigitsModuleStrip",
905                                        ";N_{Strip};N_{Module}",
906                                        1540,0,1540,1698,499.5,2197.5);  
907   fAliITSQADataMakerRec->Add2DigitsList(fHistSSDModuleStrip,
908                                         fGenDigitsOffset + 1, !expert, image);
909   fSSDhDigitsTask += 1;
910   
911   AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SSD Digits histograms booked\n",fSSDhDigitsTask));
912   
913 }
914
915 //____________________________________________________________________________
916 void AliITSQASSDDataMakerRec::MakeDigits(TTree *digits) { 
917   // Fill QA for DIGIT - SSD -
918 //  AliITS *fITS  = (AliITS*)gAlice->GetModule("ITS");
919 //  fITS->SetTreeAddress();
920 //  TClonesArray *iSSDdigits  = fITS->DigitsAddress(2);
921   TBranch *branchD = digits->GetBranch("ITS");
922   if (!branchD) { 
923     AliError("can't get the branch with the ITS digits !");
924     return;
925   }
926   static TClonesArray statDigits("AliITSDigit");
927   TClonesArray *iSSDdigits = &statDigits;
928   branchD->SetAddress(&iSSDdigits);  
929   for(Int_t iModule = 500; iModule < 2198; iModule++) {
930     iSSDdigits->Clear();
931     digits->GetEvent(iModule);    
932     Int_t ndigits = iSSDdigits->GetEntries();
933     fAliITSQADataMakerRec->GetDigitsData(fGenDigitsOffset + 0)->Fill(iModule,ndigits);
934     if(ndigits != 0)
935       AliDebug(AliQAv1::GetQADebugLevel(),Form("Module: %d - Digits: %d",iModule,ndigits));
936     
937     for (Int_t iDigit = 0; iDigit < ndigits; iDigit++) {
938       AliITSdigit *dig = (AliITSdigit*)iSSDdigits->UncheckedAt(iDigit);
939       Int_t fStripNumber = (dig->GetCoord1() == 0) ? dig->GetCoord2() : dig->GetCoord2() + fgkNumberOfPSideStrips;
940       ((TH2F *)fAliITSQADataMakerRec->GetDigitsData(fGenDigitsOffset + 1))->Fill(fStripNumber,iModule,dig->GetSignal());
941     }//digit loop
942   }//module loop
943 }
944
945 //____________________________________________________________________________ 
946 void AliITSQASSDDataMakerRec::InitRecPoints()
947 {
948   // Initialization for RECPOINTS - SSD -
949   const Bool_t expert   = kTRUE ; 
950   const Bool_t image    = kTRUE ; 
951   
952   fGenRecPointsOffset = (fAliITSQADataMakerRec->fRecPointsQAList[AliRecoParam::kDefault])->GetEntries();
953   //AliDebug(AliQAv1::GetQADebugLevel(), Form("**-------*-*-*-*-*-*-***************AliITSQASSDataMakerRec::MakeRecpoints offset %d \t %d \n",fGenOffset,fGenRecPointsOffset));
954   Int_t nModuleOffset = 500;
955   Int_t nITSTotalModules = AliITSgeomTGeo::GetNModules();
956
957   TH1F *fHistSSDModuleIdLayer5 = new TH1F("SSD/Statistics/fHistSSDModuleIdLayer5",
958                                        "Module Id - Layer 5;Module Id;Entries",
959                                        fgkSSDMODULESLAYER5,
960                                        nModuleOffset - 0.5,
961                                        nITSTotalModules-fgkSSDMODULESLAYER6+0.5);
962   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDModuleIdLayer5, 
963                                            fGenRecPointsOffset + 0, expert, !image);
964   fSSDhRecPointsTask += 1;
965   TH1F *fHistSSDModuleIdLayer6 = new TH1F("SSD/Statistics/fHistSSDModuleIdLayer6",
966                                        "Module Id - Layer 6;Module Id;Entries",
967                                        fgkSSDMODULESLAYER6,
968                                        nModuleOffset+fgkSSDMODULESLAYER5 - 0.5,
969                                        nITSTotalModules + 0.5);
970   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDModuleIdLayer6, 
971                                            fGenRecPointsOffset + 1, expert, !image);
972   fSSDhRecPointsTask += 1;
973   TH1F *fHistSSDClusterPerEventLayer5 = new TH1F("SSD/Statistics/fHistSSDClusterPerEventLayer5",
974                                               "N_{clusters} - Layer 5;N_{clusters};Entries;",
975                                               100,0.1,5000);
976   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDClusterPerEventLayer5,
977                                            fGenRecPointsOffset + 2, expert, !image);
978   fSSDhRecPointsTask += 1;
979   TH1F *fHistSSDClusterPerEventLayer6 = new TH1F("SSD/Statistics/fHistSSDClusterPerEventLayer6",
980                                               "N_{clusters} - Layer 6;N_{clusters};Entries;",
981                                               100,0.1,5000);
982   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDClusterPerEventLayer6,
983                                            fGenRecPointsOffset + 3, expert, !image);
984   fSSDhRecPointsTask += 1;
985   TH1F *fHistSSDLocalXLayer5 = new TH1F("SSD/Coordinates/fHistSSDLocalXLayer5",
986                                      "Local x coord.- Layer 5;x [cm];Entries;",
987                                      100,-4.,4.);
988   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDLocalXLayer5,
989                                            fGenRecPointsOffset + 4, expert, !image);
990   fSSDhRecPointsTask += 1;
991   TH1F *fHistSSDLocalXLayer6 = new TH1F("SSD/Coordinates/fHistSSDLocalXLayer6",
992                                      "Local x coord.- Layer 6;x [cm];Entries;",
993                                      100,-4.,4.);
994   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDLocalXLayer6, 
995                                            fGenRecPointsOffset + 5, expert, !image);
996   fSSDhRecPointsTask += 1;
997   TH1F *fHistSSDLocalZLayer5 = new TH1F("SSD/Coordinates/fHistSSDLocalZLayer5",
998                                      "Local z coord.- Layer 5;z [cm];Entries;",
999                                      100,-4.,4.);
1000   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDLocalZLayer5, 
1001                                            fGenRecPointsOffset + 6, expert, !image);
1002   fSSDhRecPointsTask += 1;
1003   TH1F *fHistSSDLocalZLayer6 = new TH1F("SSD/Coordinates/fHistSSDLocalZLayer6",
1004                                      "Local z coord.- Layer 6;z [cm];Entries;",
1005                                      100,-4.,4.);
1006   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDLocalZLayer6, 
1007                                            fGenRecPointsOffset + 7, expert, !image);
1008   fSSDhRecPointsTask += 1;
1009   TH1F *fHistSSDGlobalXLayer5 = new TH1F("SSD/Coordinates/fHistSSDGlobalXLayer5",
1010                                       "Global x - Layer 5;x [cm];Entries;",
1011                                       100,-40.,40.);
1012   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDGlobalXLayer5, 
1013                                            fGenRecPointsOffset + 8, expert, !image);
1014   fSSDhRecPointsTask += 1;
1015   TH1F *fHistSSDGlobalXLayer6 = new TH1F("SSD/Coordinates/fHistSSDGlobalXLayer6",
1016                                       "Global x - Layer 6;x [cm];Entries;",
1017                                       100,-45.,45.);
1018   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDGlobalXLayer6, 
1019                                            fGenRecPointsOffset + 9, expert, !image);
1020   fSSDhRecPointsTask += 1;
1021   TH1F *fHistSSDGlobalYLayer5 = new TH1F("SSD/Coordinates/fHistSSDGlobalYLayer5",
1022                                       "Global y - Layer 5;y [cm];Entries;",
1023                                       100,-40.,40);
1024   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDGlobalYLayer5, 
1025                                            fGenRecPointsOffset + 10, expert, !image);
1026   fSSDhRecPointsTask += 1;
1027   TH1F *fHistSSDGlobalYLayer6 = new TH1F("SSD/Coordinates/fHistSSDGlobalYLayer6",
1028                                       "Global y - Layer 6;y [cm];Entries;",
1029                                       100,-45.,45.);
1030   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDGlobalYLayer6, 
1031                                            fGenRecPointsOffset + 11, expert, !image);
1032   fSSDhRecPointsTask += 1;
1033   TH1F *fHistSSDGlobalZLayer5 = new TH1F("SSD/Coordinates/fHistSSDGlobalZLayer5",
1034                                       "Global z - Layer 5;z [cm];Entries;",
1035                                       100,-45.,45);
1036   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDGlobalZLayer5, 
1037                                            fGenRecPointsOffset + 12, expert, !image);
1038   fSSDhRecPointsTask += 1;
1039   TH1F *fHistSSDGlobalZLayer6 = new TH1F("SSD/Coordinates/fHistSSDGlobalZLayer6",
1040                                       "Global z - Layer 6;z [cm];Entries;",
1041                                       100,-55.,55.);
1042   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDGlobalZLayer6, 
1043                                            fGenRecPointsOffset + 13, expert, !image);
1044   fSSDhRecPointsTask += 1;
1045   TH1F *fHistSSDPhiLayer5 = new TH1F("SSD/Coordinates/fHistSSDPhiLayer5",
1046                                   "#phi - Layer 5;#phi [rad];Entries;",
1047                                   100,-TMath::Pi(),TMath::Pi());
1048   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDPhiLayer5, 
1049                                            fGenRecPointsOffset + 14, expert, !image);
1050   fSSDhRecPointsTask += 1;
1051   TH1F *fHistSSDPhiLayer6 = new TH1F("SSD/Coordinates/fHistSSDPhiLayer6",
1052                                   "#phi - Layer 6;#phi [rad];Entries;",
1053                                   100,-TMath::Pi(),TMath::Pi());
1054   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDPhiLayer6, 
1055                                            fGenRecPointsOffset + 15, expert, !image);
1056   fSSDhRecPointsTask += 1;
1057   TH1F *fHistSSDThetaLayer5 = new TH1F("SSD/Coordinates/fHistSSDThetaLayer5",
1058                                     "#theta - Layer 5;#theta [rad];Entries;",
1059                                     100,-TMath::Pi(),TMath::Pi());
1060   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDThetaLayer5, 
1061                                            fGenRecPointsOffset + 16, expert, !image);
1062   fSSDhRecPointsTask += 1;
1063   TH1F *fHistSSDThetaLayer6 = new TH1F("SSD/Coordinates/fHistSSDThetaLayer6",
1064                                     "#theta - Layer 6;#theta [rad];Entries;",
1065                                     100,-TMath::Pi(),TMath::Pi());
1066   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDThetaLayer6, 
1067                                            fGenRecPointsOffset + 17, expert, !image);
1068   fSSDhRecPointsTask += 1;
1069   TH1F *fHistSSDRadiusLayer5 = new TH1F("SSD/Coordinates/fHistSSDRadiusLayer5",
1070                                      "r - Layer 5;r [cm];Entries;",
1071                                      100,35.,50.);
1072   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDRadiusLayer5, 
1073                                            fGenRecPointsOffset + 18, expert, !image);
1074   fSSDhRecPointsTask += 1;
1075   TH1F *fHistSSDRadiusLayer6 = new TH1F("SSD/Coordinates/fHistSSDRadiusLayer6",
1076                                      "r - Layer 6;r [cm];Entries;",
1077                                      100,35.,50.);
1078   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDRadiusLayer6, 
1079                                            fGenRecPointsOffset + 19, expert, !image);
1080   fSSDhRecPointsTask += 1;
1081   TH1F *fHistSSDClusterTypeLayer5 = new TH1F("SSD/ClusterCharge/Layer5/fHistSSDClusterTypeLayer5",
1082                                           "CL type - Layer 5;Cluster type;Entries;",
1083                                           150,0,150);
1084   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDClusterTypeLayer5, 
1085                                            fGenRecPointsOffset + 20, expert, !image);
1086   fSSDhRecPointsTask += 1;
1087   TH1F *fHistSSDClusterTypeLayer6 = new TH1F("SSD/ClusterCharge/Layer6/fHistSSDClusterTypeLayer6",
1088                                           "CL type - Layer 6;Cluster type;Entries;",
1089                                           150,0,150);
1090   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDClusterTypeLayer6, 
1091                                            fGenRecPointsOffset + 21, expert, !image);
1092   fSSDhRecPointsTask += 1;
1093   TH1F *fHistSSDChargeRatioLayer5 = new TH1F("SSD/ClusterCharge/Layer5/fHistSSDChargeRatioLayer5",
1094                                           "Charge ratio - Layer 5;q_{ratio};Entries;",
1095                                           100,-2.0,2.0);
1096   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeRatioLayer5, 
1097                                            fGenRecPointsOffset + 22, expert, !image);
1098   fSSDhRecPointsTask += 1;
1099   TH1F *fHistSSDChargeRatioLayer6 = new TH1F("SSD/ClusterCharge/Layer6/fHistSSDChargeRatioLayer6",
1100                                           "Charge ratio - Layer 6;q_{ratio};Entries;",
1101                                           100,-2.0,2.0);
1102   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeRatioLayer6, 
1103                                            fGenRecPointsOffset + 23, expert, !image);
1104   fSSDhRecPointsTask += 1;
1105   TH1F *fHistSSDChargekeVLayer5 = new TH1F("SSD/ClusterCharge/Layer5/fHistSSDChargekeVLayer5",
1106                                         "Charge - Layer 5;q [keV];Entries;",
1107                                         100,0.,300.);
1108   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargekeVLayer5, 
1109                                            fGenRecPointsOffset + 24, !expert, image);
1110   fSSDhRecPointsTask += 1;
1111   TH1F *fHistSSDChargekeVLayer6 = new TH1F("SSD/ClusterCharge/Layer6/fHistSSDChargekeVLayer6",
1112                                         "Charge - Layer 6;q [keV];Entries;",
1113                                         100,0.,300.);
1114   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargekeVLayer6, 
1115                                            fGenRecPointsOffset + 25, !expert, image);
1116   fSSDhRecPointsTask += 1;
1117   TH1F *fHistSSDChargePSideLayer5 = new TH1F("SSD/ClusterCharge/Layer5/fHistSSDChargePSideLayer5",
1118                                           "Charge P- Layer 5;q_{P} [keV];Entries;",
1119                                           100,0.,300.);
1120   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargePSideLayer5,
1121                                            fGenRecPointsOffset + 26, expert, !image);
1122   fSSDhRecPointsTask += 1;
1123   TH1F *fHistSSDChargePSideLayer6 = new TH1F("SSD/ClusterCharge/Layer6/fHistSSDChargePSideLayer6",
1124                                           "Charge P- Layer 6;q_{P} [keV];Entries;",
1125                                           100,0.,300.);
1126   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargePSideLayer6,
1127                                            fGenRecPointsOffset + 27, expert, !image);
1128   fSSDhRecPointsTask += 1;
1129   TH1F *fHistSSDChargeNSideLayer5 = new TH1F("SSD/ClusterCharge/Layer5/fHistSSDChargeNSideLayer5",
1130                                           "Charge N- Layer 5;q_{N} [keV];Entries;",
1131                                           100,0.,300.);
1132   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeNSideLayer5,
1133                                            fGenRecPointsOffset + 28, expert, !image);
1134   fSSDhRecPointsTask += 1;
1135   TH1F *fHistSSDChargeNSideLayer6 = new TH1F("SSD/ClusterCharge/Layer6/fHistSSDChargeNSideLayer6",
1136                                           "Charge N- Layer 6;q_{N} [keV];Entries;",
1137                                           100,0.,300.);
1138   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeNSideLayer6,
1139                                            fGenRecPointsOffset + 29, expert, !image);
1140   fSSDhRecPointsTask += 1;
1141   TH1F *fHistSSDChargeRatio2Layer5 = new TH1F("SSD/ClusterCharge/Layer5/fHistSSDChargeRatio2Layer5",
1142                                           "Charge Ratio qN/qP - Layer 5;q_{N}/q_{P};Entries;",
1143                                           100,0,2);
1144   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeRatio2Layer5,
1145                                            fGenRecPointsOffset + 30, expert, !image);
1146   fSSDhRecPointsTask += 1;
1147   TH1F *fHistSSDChargeRatio2Layer6 = new TH1F("SSD/ClusterCharge/Layer6/fHistSSDChargeRatio2Layer6",
1148                                            "Charge Ratio qN/qP - Layer 6;q_{N}/q_{P};Entries;",
1149                                            100,0,2);
1150   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeRatio2Layer6,
1151                                            fGenRecPointsOffset + 31, expert, !image);
1152   fSSDhRecPointsTask += 1;
1153   TH2F *fHistSSDChargePNSideLayer5 = new TH2F("SSD/ClusterCharge/Layer5/fHistSSDChargePNSideLayer5",
1154                                            "Charge correlation - Layer 5;q_{P} [keV];q_{N} [keV]",
1155                                            100,0.,300.,
1156                                            100,0.,300.);
1157   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargePNSideLayer5,
1158                                            fGenRecPointsOffset + 32, expert, !image);
1159   fSSDhRecPointsTask += 1;
1160   TH2F *fHistSSDChargePNSideLayer6 = new TH2F("SSD/ClusterCharge/Layer6/fHistSSDChargePNSideLayer6",
1161                                            "Charge correlation - Layer 6;q_{P} [keV];q_{N} [keV]",
1162                                            100,0.,300.,
1163                                            100,0.,300.);
1164   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargePNSideLayer6,
1165                                            fGenRecPointsOffset + 33, expert, !image);
1166   fSSDhRecPointsTask += 1;
1167   TH2F *fHistSSDChargeMapLayer5 = new TH2F("SSD/ClusterCharge/Layer5/fHistSSDChargeMapLayer5",
1168                                         "Charge map;N_{modules};N_{Ladders}",
1169                                         fgkSSDMODULESPERLADDERLAYER5,
1170                                         -0.5,fgkSSDMODULESPERLADDERLAYER5+0.5,
1171                                         3*fgkSSDLADDERSLAYER5,
1172                                         -0.5,fgkSSDLADDERSLAYER5+0.5);
1173   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeMapLayer5, 
1174                                            fGenRecPointsOffset + 34, expert, !image);
1175   fSSDhRecPointsTask += 1;
1176   TH2F *fHistSSDChargeMapLayer6 = new TH2F("SSD/ClusterCharge/Layer6/fHistSSDChargeMapLayer6",
1177                                         "Charge map;N_{modules};N_{Ladders}",
1178                                         fgkSSDMODULESPERLADDERLAYER6,
1179                                         -0.5,fgkSSDMODULESPERLADDERLAYER6+0.5,
1180                                         3*fgkSSDLADDERSLAYER6,
1181                                         -0.5,fgkSSDLADDERSLAYER6+0.5);
1182   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeMapLayer6, 
1183                                            fGenRecPointsOffset + 35, expert, !image);
1184   fSSDhRecPointsTask += 1;
1185   TH2F *fHistSSDClusterMapLayer5 = new TH2F("SSD/Statistics/Layer5/fHistSSDClusterMapLayer5",
1186                                          "Layer 5;N_{module};N_{ladder}",
1187                                          22,1,23,
1188                                          34,500,534);
1189   fHistSSDClusterMapLayer5->GetXaxis()->SetTitleColor(1);
1190   fHistSSDClusterMapLayer5->SetStats(kFALSE);
1191   fHistSSDClusterMapLayer5->GetYaxis()->SetTitleOffset(1.8);
1192   fHistSSDClusterMapLayer5->GetXaxis()->SetNdivisions(22);
1193   fHistSSDClusterMapLayer5->GetYaxis()->SetNdivisions(34);
1194   fHistSSDClusterMapLayer5->GetXaxis()->SetLabelSize(0.03);
1195   fHistSSDClusterMapLayer5->GetYaxis()->SetLabelSize(0.03);
1196   fHistSSDClusterMapLayer5->GetZaxis()->SetTitleOffset(1.4);
1197   fHistSSDClusterMapLayer5->GetZaxis()->SetTitle("N_{clusters}");
1198   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDClusterMapLayer5,
1199                                            fGenRecPointsOffset + 36, !expert, image);
1200   fSSDhRecPointsTask += 1;
1201   TH2F *fHistSSDClusterMapLayer6 = new TH2F("SSD/Statistics/Layer6/fHistSSDClusterMapLayer6",
1202                                          "Layer 6;N_{module};N_{ladder}",
1203                                          25,1,26,
1204                                          38,600,638);
1205   fHistSSDClusterMapLayer6->GetXaxis()->SetTitleColor(1);
1206   fHistSSDClusterMapLayer6->SetStats(kFALSE);
1207   fHistSSDClusterMapLayer6->GetYaxis()->SetTitleOffset(1.8);
1208   fHistSSDClusterMapLayer6->GetXaxis()->SetNdivisions(25);
1209   fHistSSDClusterMapLayer6->GetYaxis()->SetNdivisions(38);
1210   fHistSSDClusterMapLayer6->GetXaxis()->SetLabelSize(0.03);
1211   fHistSSDClusterMapLayer6->GetYaxis()->SetLabelSize(0.03);
1212   fHistSSDClusterMapLayer6->GetZaxis()->SetTitleOffset(1.4);
1213   fHistSSDClusterMapLayer6->GetZaxis()->SetTitle("N_{clusters}");
1214   fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDClusterMapLayer6,
1215                                            fGenRecPointsOffset + 37, !expert, image);
1216   fSSDhRecPointsTask += 1;
1217   //printf ("%d SSD Recs histograms booked\n",fSSDhRecPointsTask);
1218   AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SSD Recs histograms booked\n",fSSDhRecPointsTask));
1219 }
1220
1221 //____________________________________________________________________________ 
1222 void AliITSQASSDDataMakerRec::MakeRecPoints(TTree *clustersTree)
1223 {
1224   // Fill QA for recpoints - SSD -
1225   //printf("*-*-*-*-*-*-*---*-*-*-------*-*-*-*-*-*-***************AliITSQASSDataMakerRec::MakeRecpoints called \n");
1226   Int_t gLayer = 0, gLadder = 0, gModule = 0;
1227   Int_t lLadderLocationY = 0;
1228   TBranch *branchRecP = clustersTree->GetBranch("ITSRecPoints");
1229   if (!branchRecP) { 
1230     AliError("can't get the branch with the ITS clusters !");
1231     return;
1232   }
1233   static TClonesArray statRecpoints("AliITSRecPoint");
1234   TClonesArray *recpoints = &statRecpoints;
1235   branchRecP->SetAddress(&recpoints);
1236   Int_t nClustersLayer5 = 0, nClustersLayer6 = 0;
1237   Int_t npoints = 0;      
1238   Float_t cluglo[3]={0.,0.,0.}; 
1239   //printf("*-*-*-*-*-*-*---*-*-*-------*-*-*-*-*-*-***************AliITSQASSDataMakerRec::MakeRecpoints STEP1 \n");
1240   for(Int_t module = 0; module < clustersTree->GetEntries(); module++){
1241     branchRecP->GetEvent(module);
1242     npoints += recpoints->GetEntries();
1243     AliITSgeomTGeo::GetModuleId(module,gLayer,gLadder,gModule);
1244     //printf("SSDDataMAkerRec:::::::::::::::::::::::gLayer ========== %d \n\n",gLayer);
1245     lLadderLocationY = 3*gLadder;
1246     ////printf("*-*-*-*-*-*-*---*-*-*-------*-*-*-*-*-*-***************AliITSQASSDataMakerRec::MakeRecpoints inside loop \n");
1247     for(Int_t j = 0;j < recpoints->GetEntries(); j++){
1248       ////printf("*-*-*-*-*-*-*---*-*-*-------*-*-*-*-*-*-***************AliITSQASSDataMakerRec::MakeRecpoints inside loop 2\n");
1249       AliITSRecPoint *recp = (AliITSRecPoint*)recpoints->At(j);    
1250       Int_t layer = recp->GetLayer();
1251       //printf("SSDDataMAkerRec:::::::::::::::::::::::layer ========== %d \n\n",layer);
1252       recp->GetGlobalXYZ(cluglo);
1253       Float_t radius = TMath::Sqrt(cluglo[0]*cluglo[0]+cluglo[1]*cluglo[1]); 
1254       Float_t phi = TMath::ATan2(cluglo[1],cluglo[0]);
1255       Float_t theta = TMath::ATan2(radius,cluglo[2]);
1256       Double_t chargeRatio = recp->GetChargeRatio();
1257       Double_t clusterCharge = recp->GetQ();
1258       Double_t chargePSide = clusterCharge*(1. + chargeRatio);
1259       Double_t chargeNSide = clusterCharge*(1. - chargeRatio);
1260       if(layer == 4) {
1261         //printf("-*-*-*-*-*-***************AliITSQASSDataMakerRec::MakeRecpoints Filling 4 called \n");
1262         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 0)->Fill(module);
1263         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 4)->Fill(recp->GetDetLocalX());
1264         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 6)->Fill(recp->GetDetLocalZ());
1265         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 8)->Fill(cluglo[0]);
1266         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 10)->Fill(cluglo[1]);
1267         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 12)->Fill(cluglo[2]);
1268         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 14)->Fill(phi);
1269         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 16)->Fill(theta);
1270         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 18)->Fill(radius);
1271         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 20)->Fill(recp->GetType());
1272         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 22)->Fill(recp->GetChargeRatio());
1273         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 24)->Fill(recp->GetQ());
1274         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 26)->Fill(chargePSide);
1275         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 28)->Fill(chargeNSide);
1276         if(chargePSide != 0.) fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 30)->Fill(chargeNSide/chargePSide);
1277         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 32)->Fill(chargePSide,chargeNSide);
1278         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 34)->SetBinContent(gModule,lLadderLocationY,recp->GetQ());
1279         ((TH2F *)fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 36))->Fill(gModule,499+gLadder,1);
1280         nClustersLayer5 += 1;
1281       }//layer 5 histograms
1282       if(layer == 5) {
1283         //printf("-*-*-*-*-*-***************AliITSQASSDataMakerRec::MakeRecpoints Filling 5 called \n");
1284         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 1)->Fill(module);
1285         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 5)->Fill(recp->GetDetLocalX());
1286         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 7)->Fill(recp->GetDetLocalZ());
1287         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 9)->Fill(cluglo[0]);
1288         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 11)->Fill(cluglo[1]);
1289         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 13)->Fill(cluglo[2]);
1290         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 15)->Fill(phi);
1291         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 17)->Fill(theta);
1292         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 19)->Fill(radius);
1293         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 21)->Fill(recp->GetType());
1294         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 23)->Fill(recp->GetChargeRatio());
1295         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 25)->Fill(recp->GetQ());
1296         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 27)->Fill(chargePSide);
1297         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 29)->Fill(chargeNSide);
1298         if(chargePSide != 0.) fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 31)->Fill(chargeNSide/chargePSide);
1299         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 33)->Fill(chargePSide,chargeNSide);
1300         fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 35)->SetBinContent(gModule,lLadderLocationY,recp->GetQ());
1301         ((TH2F *)fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 37))->Fill(gModule,599+gLadder,1);
1302         nClustersLayer6 += 1;
1303       }//layer 6 histograms
1304     }//rec. points loop
1305   }//module loop
1306   
1307   //printf("-*-*-*-*-*-***************AliITSQASSDataMakerRec::MakeRecpoints Filling called \n");
1308   fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 2)->Fill(nClustersLayer5);
1309   fAliITSQADataMakerRec->GetRecPointsData(fGenRecPointsOffset + 3)->Fill(nClustersLayer6);
1310
1311   statRecpoints.Clear();
1312 }
1313
1314 //____________________________________________________________________________ 
1315 Int_t AliITSQASSDDataMakerRec::GetOffset(AliQAv1::TASKINDEX_t task) {
1316   // Returns offset number according to the specified task 
1317   Int_t offset=0;
1318   if( task == AliQAv1::kRAWS ) {
1319     offset=fGenRawsOffset;  
1320   }
1321   else if( task == AliQAv1::kRECPOINTS ) {
1322     offset=fGenRecPointsOffset;   
1323   }
1324   else {
1325     AliWarning("No task has been selected. Offset set to zero.\n");
1326   }
1327
1328   return offset;
1329 }
1330
1331 //____________________________________________________________________________ 
1332 Int_t AliITSQASSDDataMakerRec::GetTaskHisto(AliQAv1::TASKINDEX_t task) {
1333   // Returns the number of histograms associated to the specified task
1334   Int_t histotot=0;
1335
1336   if( task == AliQAv1::kRAWS ) {
1337     histotot=fSSDhRawsTask;  
1338   }
1339   else if( task == AliQAv1::kRECPOINTS ){
1340     histotot=fSSDhRecPointsTask;   
1341   }
1342   else { 
1343     AliWarning("No task has been selected. TaskHisto set to zero.\n");
1344   }
1345
1346   return histotot;
1347 }