1 /**************************************************************************
\r
2 * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
\r
4 * Author: The ALICE Off-line Project. *
\r
5 * Contributors are mentioned in the code where appropriate. *
\r
7 * Permission to use, copy, modify and distribute this software and its *
\r
8 * documentation strictly for non-commercial purposes is hereby granted *
\r
9 * without fee, provided that the above copyright notice appears in all *
\r
10 * copies and that both the copyright notice and this permission notice *
\r
11 * appear in the supporting documentation. The authors make no claims *
\r
12 * about the suitability of this software for any purpose. It is *
\r
13 * provided "as is" without express or implied warranty. *
\r
14 **************************************************************************/
\r
18 // *************************************************************
\r
19 // Checks the quality assurance
\r
20 // by comparing with reference data
\r
21 // contained in a DB
\r
22 // -------------------------------------------------------------
\r
23 // W. Ferrarese + P. Cerello Feb 2008
\r
25 // SSD QA part: P. Christakoglou - NIKHEF/UU
\r
27 // --- ROOT system ---
\r
32 // --- Standard library ---
\r
34 // --- AliRoot header files ---
\r
36 #include "AliITSmodule.h"
\r
37 #include "AliITShit.h"
\r
38 #include "AliITSdigit.h"
\r
39 #include "AliITSpListItem.h"
\r
41 #include "AliITSQADataMakerSim.h"
\r
42 #include "AliITSQASSDDataMakerSim.h"
\r
45 #include "AliQAChecker.h"
\r
46 #include "AliRawReader.h"
\r
48 ClassImp(AliITSQASSDDataMakerSim)
\r
50 //____________________________________________________________________________
\r
51 AliITSQASSDDataMakerSim::AliITSQASSDDataMakerSim(AliITSQADataMakerSim *aliITSQADataMakerSim) :
\r
53 fAliITSQADataMakerSim(aliITSQADataMakerSim),
\r
59 //ctor used to discriminate OnLine-Offline analysis
\r
62 //____________________________________________________________________________
\r
63 AliITSQASSDDataMakerSim::AliITSQASSDDataMakerSim(const AliITSQASSDDataMakerSim& qadm) :
\r
65 fAliITSQADataMakerSim(qadm.fAliITSQADataMakerSim),
\r
66 fSSDhTask(qadm.fSSDhTask),
\r
67 fGenOffsetH(qadm.fGenOffsetH),
\r
68 fGenOffsetS(qadm.fGenOffsetS),
\r
69 fGenOffsetD(qadm.fGenOffsetD)
\r
72 fAliITSQADataMakerSim->SetName((const char*)qadm.fAliITSQADataMakerSim->GetName()) ;
\r
73 fAliITSQADataMakerSim->SetTitle((const char*)qadm.fAliITSQADataMakerSim->GetTitle());
\r
76 //__________________________________________________________________
\r
77 AliITSQASSDDataMakerSim& AliITSQASSDDataMakerSim::operator = (const AliITSQASSDDataMakerSim& qac ) {
\r
79 this->~AliITSQASSDDataMakerSim();
\r
80 new(this) AliITSQASSDDataMakerSim(qac);
\r
84 //____________________________________________________________________________
\r
85 void AliITSQASSDDataMakerSim::StartOfDetectorCycle() {
\r
86 //Detector specific actions at start of cycle
\r
87 AliDebug(1,"AliITSQADM::Start of SSD Cycle\n");
\r
90 //____________________________________________________________________________
\r
91 void AliITSQASSDDataMakerSim::EndOfDetectorCycle(AliQA::TASKINDEX_t task, TObjArray* list) {
\r
92 // launch the QA checking
\r
93 AliDebug(1,"AliITSDM instantiates checker with Run(AliQA::kITS, task, list)\n");
\r
95 AliQAChecker::Instance()->Run( AliQA::kITS , task, list);
\r
98 //____________________________________________________________________________
\r
99 void AliITSQASSDDataMakerSim::InitDigits() {
\r
100 // Initialization for DIGIT data - SSD -
\r
101 fGenOffsetD = (fAliITSQADataMakerSim->fDigitsQAList)->GetEntries();
\r
103 // custom code here
\r
104 TH1F *fHistSSDModule = new TH1F("fHistSSDDigitsModule",
\r
105 ";SSD Module Number;N_{DIGITS}",
\r
106 1698,499.5,2197.5);
\r
107 fAliITSQADataMakerSim->Add2DigitsList(fHistSSDModule,
\r
110 TH2F *fHistSSDModuleStrip = new TH2F("fHistSSDDigitsModuleStrip",
\r
111 ";N_{Strip};N_{Module}",
\r
112 1540,0,1540,1698,499.5,2197.5);
\r
113 fAliITSQADataMakerSim->Add2DigitsList(fHistSSDModuleStrip,
\r
117 AliDebug(1,Form("%d SSD Digits histograms booked\n",fSSDhTask));
\r
121 //____________________________________________________________________________
\r
122 void AliITSQASSDDataMakerSim::MakeDigits(TTree *digits) {
\r
123 // Fill QA for DIGIT - SSD -
\r
124 AliITS *fITS = (AliITS*)gAlice->GetModule("ITS");
\r
125 fITS->SetTreeAddress();
\r
126 TClonesArray *iSSDdigits = fITS->DigitsAddress(2);
\r
127 for(Int_t iModule = 500; iModule < 2198; iModule++) {
\r
128 iSSDdigits->Clear();
\r
129 digits->GetEvent(iModule);
\r
130 Int_t ndigits = iSSDdigits->GetEntries();
\r
131 fAliITSQADataMakerSim->GetDigitsData(fGenOffsetD + 0)->Fill(iModule,ndigits);
\r
133 AliDebug(1,Form("Module: %d - Digits: %d",iModule,ndigits));
\r
135 for (Int_t iDigit = 0; iDigit < ndigits; iDigit++) {
\r
136 AliITSdigit *dig = (AliITSdigit*)iSSDdigits->UncheckedAt(iDigit);
\r
137 Int_t fStripNumber = (dig->GetCoord1() == 0) ? dig->GetCoord2() : dig->GetCoord2() + fgkNumberOfPSideStrips;
\r
138 ((TH2F *)fAliITSQADataMakerSim->GetDigitsData(fGenOffsetD + 1))->Fill(fStripNumber,iModule,dig->GetSignal());
\r
143 //____________________________________________________________________________
\r
144 void AliITSQASSDDataMakerSim::InitSDigits() {
\r
145 // Initialization for SDIGIT data - SSD -
\r
146 fGenOffsetS = (fAliITSQADataMakerSim->fSDigitsQAList)->GetEntries();
\r
148 // custom code here
\r
149 TH1F *fHistSSDModule = new TH1F("fHistSSDSDigitsModule",
\r
150 ";SSD Module Number;N_{SDIGITS}",
\r
151 1698,499.5,2197.5);
\r
152 fAliITSQADataMakerSim->Add2SDigitsList(fHistSSDModule,
\r
156 AliDebug(1,Form("%d SSD SDigits histograms booked\n",fSSDhTask));
\r
159 //____________________________________________________________________________
\r
160 void AliITSQASSDDataMakerSim::MakeSDigits(TTree *sdigits) {
\r
161 // Fill QA for SDIGIT - SSD -
\r
162 static TClonesArray iSSDEmpty("AliITSpListItem",10000);
\r
164 TClonesArray *iSSDsdigits = &iSSDEmpty;
\r
166 AliInfo(Form("Trying to access the sdigits histogram: %d\n",fGenOffsetS));
\r
168 TBranch *brchSDigits = sdigits->GetBranch("ITS");
\r
169 brchSDigits->SetAddress(&iSSDsdigits);
\r
170 for(Int_t iModule = 500; iModule < 2198; iModule++) {
\r
171 iSSDsdigits->Clear();
\r
172 sdigits->GetEvent(iModule);
\r
173 Int_t ndigits = iSSDsdigits->GetEntries();
\r
174 fAliITSQADataMakerSim->GetSDigitsData(fGenOffsetS + 0)->Fill(iModule,ndigits);
\r
176 AliDebug(1,Form("Module: %d - Digits: %d",iModule,ndigits));
\r
178 for (Int_t iDigit = 0; iDigit < ndigits; iDigit++) {
\r
179 AliITSpListItem *dig=(AliITSpListItem*)iSSDsdigits->At(iDigit);
\r
185 //____________________________________________________________________________
\r
186 void AliITSQASSDDataMakerSim::InitHits() {
\r
187 // Initialization for HITS data - SSD -
\r
188 fGenOffsetH = (fAliITSQADataMakerSim->fHitsQAList)->GetEntries();
\r
190 // custom code here
\r
191 TH1F *fHistSSDModule = new TH1F("fHistSSDHitsModule",
\r
192 ";SDD Module Number;N_{HITS}",
\r
193 1698,499.5,2197.5);
\r
194 fAliITSQADataMakerSim->Add2HitsList(fHistSSDModule,
\r
197 TH1F *fHistSSDGlobalX = new TH1F("fHistSSDHitsGlobalX",
\r
200 fAliITSQADataMakerSim->Add2HitsList(fHistSSDGlobalX,
\r
203 TH1F *fHistSSDGlobalY = new TH1F("fHistSSDHitsGlobalY",
\r
206 fAliITSQADataMakerSim->Add2HitsList(fHistSSDGlobalY,
\r
209 TH1F *fHistSSDGlobalZ = new TH1F("fHistSSDHitsGlobalZ",
\r
212 fAliITSQADataMakerSim->Add2HitsList(fHistSSDGlobalZ,
\r
215 TH1F *fHistSSDLocalX = new TH1F("fHistSSDHitsLocalX",
\r
218 fAliITSQADataMakerSim->Add2HitsList(fHistSSDLocalX,
\r
221 TH1F *fHistSSDLocalY = new TH1F("fHistSSDHitsLocalY",
\r
224 fAliITSQADataMakerSim->Add2HitsList(fHistSSDLocalY,
\r
227 TH1F *fHistSSDLocalZ = new TH1F("fHistSSDHitsLocalZ",
\r
230 fAliITSQADataMakerSim->Add2HitsList(fHistSSDLocalZ,
\r
233 TH1F *fHistSSDIonization = new TH1F("fHistSSDHitsIonization",
\r
234 ";log(dE/dx) [KeV];N_{Hits}",
\r
236 fAliITSQADataMakerSim->Add2HitsList(fHistSSDIonization,
\r
239 TH2F *fHistSSDGlobalXY = new TH2F("fHistSSDHitsGlobalXY",
\r
243 fAliITSQADataMakerSim->Add2HitsList(fHistSSDGlobalXY,
\r
247 AliDebug(1,Form("%d SSD Hits histograms booked\n",fSSDhTask));
\r
251 //____________________________________________________________________________
\r
252 void AliITSQASSDDataMakerSim::MakeHits(TTree *hits) {
\r
253 // Fill QA for HITS - SSD -
\r
254 AliITS *fITS = (AliITS*)gAlice->GetModule("ITS");
\r
255 fITS->SetTreeAddress();
\r
257 fITS->InitModules(-1,nmodules);
\r
258 fITS->FillModules(hits,0);
\r
259 for(Int_t iModule = 500; iModule < 2198; iModule++) {
\r
260 AliITSmodule *module = fITS->GetModule(iModule);
\r
261 TObjArray *arrHits = module->GetHits();
\r
262 Int_t nhits = arrHits->GetEntriesFast();
\r
264 AliDebug(1,Form("Module: %d - Hits: %d",iModule,nhits));
\r
265 for (Int_t iHit = 0; iHit < nhits; iHit++) {
\r
266 AliITShit *hit = (AliITShit*) arrHits->At(iHit);
\r
268 fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 0)->Fill(iModule);
\r
269 fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 1)->Fill(hit->GetXG());
\r
270 fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 2)->Fill(hit->GetYG());
\r
271 fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 3)->Fill(hit->GetZG());
\r
272 fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 4)->Fill(hit->GetXL());
\r
273 fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 5)->Fill(hit->GetYL());
\r
274 fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 6)->Fill(hit->GetZL());
\r
275 if(hit->GetIonization())
\r
276 fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 7)->Fill(TMath::Log10(hit->GetIonization()));
\r
277 fAliITSQADataMakerSim->GetHitsData(fGenOffsetH + 8)->Fill(hit->GetXG(),hit->GetYG());
\r