1 #if !defined(__CINT__) || defined(__MAKECINT__)
4 #include <TStopwatch.h>
10 #include "AliRawReader.h"
11 #include "AliRawReaderDate.h"
12 #include "AliRawReaderRoot.h"
13 #include "AliITSOnlineSDDBase.h"
14 #include "AliITSOnlineSDDCMN.h"
15 #include "AliITSRawStreamSDD.h"
16 #include "TPaveStats.h"
19 // Macro for the analysis of PEDESTAL runs (equivalent to ITSSDDBASda.cxx)
20 // Two functions named AnalyzeSDDNoiseAllModules:
21 // The first is for analyzing a local raw data file and takes as agrument the file name.
22 // The second is for running on ALIEN
23 // All DDLs are analyzed, the argument nDDL selects the DDL to be plotted
24 // Origin: F. Prino (prino@to.infn.it)
26 void AnalyzeSDDNoiseAllMod(Char_t *datafil, Int_t nDDL, Int_t firstEv=10, Int_t lastEv=12){
28 Int_t DDLid_range = 24;
29 // Int_t eqOffset = 100;
30 // Int_t DDLid_range = 1;
31 const Int_t kTotDDL=24;
32 const Int_t kModPerDDL=12;
35 AliITSOnlineSDDBase **base=new AliITSOnlineSDDBase*[kTotDDL*kModPerDDL*kSides];
36 TH2F **histo=new TH2F*[kTotDDL*kModPerDDL*kSides];
39 for(Int_t iddl=0; iddl<kTotDDL;iddl++){
40 for(Int_t imod=0; imod<kModPerDDL;imod++){
41 for(Int_t isid=0;isid<kSides;isid++){
42 Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
43 base[index]=new AliITSOnlineSDDBase(iddl,imod,isid);
44 base[index]->SetFirstGoodTB(5);
45 base[index]->SetFirstGoodTB(120);
46 sprintf(hisnam,"h%02dc%02ds%d",iddl,imod,isid);
47 histo[index]=new TH2F(hisnam,"",128,-0.5,127.5,256,-0.5,255.5);
53 TCanvas* c0 = new TCanvas("c0","Ev Display",900,900);
54 gStyle->SetPalette(1);
59 if(strstr(datafil,".root")!=0){
60 rd=new AliRawReaderRoot(datafil,iev);
62 rd=new AliRawReaderDate(datafil,iev);
64 TLatex *t0=new TLatex();
66 t0->SetTextSize(0.06);
71 c0->Divide(4,6,0.001,0.001);
72 printf("Event # %d ",iev);
73 //rd->SelectEvents(7);
74 rd->SelectEquipment(17,eqOffset,eqOffset+DDLid_range);
76 for(Int_t iddl=0; iddl<kTotDDL;iddl++){
77 for(Int_t imod=0; imod<kModPerDDL;imod++){
78 for(Int_t isid=0;isid<kSides;isid++){
79 Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
80 histo[index]->Reset();
84 AliITSRawStreamSDD s(rd);
85 rd->SelectEquipment(17,eqOffset,eqOffset+DDLid_range);
87 Int_t iDDL=rd->GetDDLID();
88 Int_t iCarlos=s.GetCarlosId();
89 if(iDDL>=0 && iDDL<kTotDDL && s.IsCompletedModule()==kFALSE){
90 Int_t index=kSides*(kModPerDDL*iDDL+iCarlos)+s.GetChannel();
91 histo[index]->Fill(s.GetCoord2(),s.GetCoord1(),s.GetSignal());
95 for(Int_t iddl=0; iddl<kTotDDL;iddl++){
96 for(Int_t imod=0; imod<kModPerDDL;imod++){
97 for(Int_t isid=0;isid<kSides;isid++){
98 Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
99 base[index]->AddEvent(histo[index]);
101 Int_t index2=kSides*imod+isid;
103 histo[index]->DrawCopy("colz");
104 sprintf(text,"DDL %d channel %d Side %d",nDDL,imod,isid);
105 t0->DrawLatex(0.15,0.92,text);
112 }while(rd->NextEvent()&&iev<=lastEv);
114 for(Int_t iddl=0; iddl<kTotDDL;iddl++){
115 for(Int_t imod=0; imod<kModPerDDL;imod++){
116 for(Int_t isid=0;isid<kSides;isid++){
117 Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
118 base[index]->ValidateAnodes();
119 base[index]->WriteToASCII(); // fondamentale!!!!!!!!!
127 printf("Start second analysis for Common Mode correction\n");
128 AliITSOnlineSDDCMN **corr=new AliITSOnlineSDDCMN*[kTotDDL*kModPerDDL*kSides];
129 Bool_t isFilled[kTotDDL*kModPerDDL*kSides];
131 for(Int_t iddl=0; iddl<kTotDDL;iddl++){
132 for(Int_t imod=0; imod<kModPerDDL;imod++){
133 for(Int_t isid=0;isid<kSides;isid++){
134 Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
135 corr[index]=new AliITSOnlineSDDCMN(iddl,imod,isid);
143 if(strstr(datafil,".root")!=0){
144 rd2=new AliRawReaderRoot(datafil,iev);
146 rd2=new AliRawReaderDate(datafil,iev);
150 c0->Divide(4,6,0.001,0.001);
151 printf("Event # %d ",iev);
152 rd2->SelectEquipment(17,eqOffset,eqOffset+DDLid_range);
153 // rd2->SelectEvents(7);
155 for(Int_t iddl=0; iddl<kTotDDL;iddl++){
156 for(Int_t imod=0; imod<kModPerDDL;imod++){
157 for(Int_t isid=0;isid<kSides;isid++){
158 Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
159 histo[index]->Reset();
164 AliITSRawStreamSDD s(rd2);
165 rd2->SelectEquipment(17,eqOffset,eqOffset+DDLid_range);
167 Int_t iDDL=rd2->GetDDLID();
168 Int_t iCarlos=s.GetCarlosId();
169 if(iDDL>=0 && iDDL<kTotDDL && s.IsCompletedModule()==kFALSE){
170 Int_t index=kSides*(kModPerDDL*iDDL+iCarlos)+s.GetChannel();
171 histo[index]->Fill(s.GetCoord2(),s.GetCoord1(),s.GetSignal());
176 for(Int_t iddl=0; iddl<kTotDDL;iddl++){
177 for(Int_t imod=0; imod<kModPerDDL;imod++){
178 for(Int_t isid=0;isid<kSides;isid++){
179 Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
180 if(isFilled[index]) corr[index]->AddEvent(histo[index]);
182 Int_t index2=kSides*imod+isid;
184 histo[index]->DrawCopy("colz");
185 sprintf(text,"DDL %d channel %d Side %d",nDDL,imod,isid);
186 t0->DrawLatex(0.15,0.92,text);
193 }while(rd2->NextEvent()&&iev<=lastEv);
195 TH1F *htotbas=new TH1F("htotbas","",100,0.,150.);
196 TH1F *htotbaseq=new TH1F("htotbaseq","",100,0.,150.);
197 TH1F *htotnoise=new TH1F("htotnoise","",100,0.,10.);
198 TH1F *htotnoisecorr=new TH1F("htotnoisecorr","",100,0.,10.);
199 TH1F *hstatus=new TH1F("hstatus","",2,-0.5,1.5);
201 TFile *outfil=new TFile("SDDbase-results.root","recreate");
202 for(Int_t iddl=0; iddl<kTotDDL;iddl++){
203 for(Int_t imod=0; imod<kModPerDDL;imod++){
204 for(Int_t isid=0;isid<kSides;isid++){
205 Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
207 corr[index]->ValidateAnodes();
208 corr[index]->WriteToASCII();
209 corr[index]->WriteToROOT(outfil);
210 for(Int_t ian=0; ian<256;ian++){
211 Float_t basl=corr[index]->GetAnodeBaseline(ian);
212 Float_t basleq=corr[index]->GetAnodeEqualizedBaseline(ian);
213 Float_t noi=corr[index]->GetAnodeRawNoise(ian);
214 Float_t cornoi=corr[index]->GetAnodeCorrNoise(ian);
215 Int_t anstatus=corr[index]->IsAnodeGood(ian);
216 hstatus->Fill(anstatus);
218 htotbaseq->Fill(basleq);
219 htotnoise->Fill(noi);
220 htotnoisecorr->Fill(cornoi);
227 // Draw Statistics of baselines and noise
228 TCanvas *call=new TCanvas("call","General stats",700,700);
232 htotbas->GetXaxis()->SetTitle("Baselines");
233 htotbas->GetXaxis()->SetTitleSize(0.07);
234 htotbas->GetXaxis()->SetTitleOffset(0.6);
237 htotbaseq->GetXaxis()->SetTitle("Baselines after equalization");
238 htotbaseq->GetXaxis()->SetTitleSize(0.07);
239 htotbaseq->GetXaxis()->SetTitleOffset(0.6);
241 htotnoisecorr->SetLineColor(2);
242 htotnoisecorr->Draw();
244 TPaveStats *st1=(TPaveStats*)htotnoisecorr->GetListOfFunctions()->FindObject("stats");
247 htotnoisecorr->GetXaxis()->SetTitle("Noise");
248 htotnoisecorr->GetXaxis()->SetTitleSize(0.07);
249 htotnoisecorr->GetXaxis()->SetTitleOffset(0.6);
250 htotnoise->Draw("SAMES");
252 TPaveStats *st2=(TPaveStats*)htotnoise->GetListOfFunctions()->FindObject("stats");
258 hstatus->GetXaxis()->SetTitle("Anode Status (0=bad 1=good)");
259 hstatus->GetXaxis()->SetTitleSize(0.07);
260 hstatus->GetXaxis()->SetTitleOffset(0.6);
262 call->SaveAs("GenStatsPedestal.gif");
264 // Draw baselines and noise for all modules of the selected DDL
266 TH1F** hbas = new TH1F*[kSides*kModPerDDL];
267 TH1F** hrawn = new TH1F*[kSides*kModPerDDL];
268 TH1F** hcorrn = new TH1F*[kSides*kModPerDDL];
269 TH1F** hdbas = new TH1F*[kSides*kModPerDDL];
270 TH1F** hdrawn = new TH1F*[kSides*kModPerDDL];
271 TH1F** hdcorrn = new TH1F*[kSides*kModPerDDL];
272 TCanvas *c1=new TCanvas("c1","DDL: Baselines vs anode",900,900);
273 c1->SetBottomMargin(0.14);
274 c1->Divide(4,6,0.001,0.001);
275 TCanvas *c2=new TCanvas("c2","DDL: Noise vs anode",900,900);
276 c2->SetBottomMargin(0.14);
277 c2->Divide(4,6,0.001,0.001);
278 TCanvas *c3=new TCanvas("c3","DDL: Baselines distr",900,900);
279 c3->SetBottomMargin(0.14);
280 c3->Divide(4,6,0.001,0.001);
281 TCanvas *c4=new TCanvas("c4","DDL: Noise Distr",900,900);
282 c4->SetBottomMargin(0.14);
283 c4->Divide(4,6,0.001,0.001);
284 TLatex *t1=new TLatex(0.15,0.2,"Raw Noise");
286 t1->SetTextSize(0.05);
287 TLatex *t2=new TLatex(0.4,0.2,"Corrected Noise");
289 t2->SetTextSize(0.05);
291 TLatex *t3=new TLatex();
293 t3->SetTextSize(0.06);
296 for(Int_t imod=0; imod<kModPerDDL;imod++){
297 for(Int_t isid=0;isid<kSides;isid++){
298 Int_t index1=kSides*(kModPerDDL*nDDL+imod)+isid;
299 Int_t index2=kSides*imod+isid;
300 sprintf(text,"DDL %d channel %d Side %d",nDDL,imod,isid);
301 hbas[index2]=corr[index1]->GetBaselineAnodeHisto();
302 hrawn[index2]=corr[index1]->GetRawNoiseAnodeHisto();
303 hcorrn[index2]=corr[index1]->GetCorrNoiseAnodeHisto();
304 hdbas[index2]=corr[index1]->GetBaselineHisto();
305 hdrawn[index2]=corr[index1]->GetRawNoiseHisto();
306 hdcorrn[index2]=corr[index1]->GetCorrNoiseHisto();
308 hbas[index2]->Draw();
309 hbas[index2]->SetMinimum(0);
310 hbas[index2]->SetMaximum(75);
311 hbas[index2]->GetXaxis()->SetTitle("Anode");
312 hbas[index2]->GetYaxis()->SetTitle("Baseline");
313 hbas[index2]->GetXaxis()->SetTitleSize(0.07);
314 hbas[index2]->GetYaxis()->SetTitleSize(0.07);
315 hbas[index2]->GetXaxis()->SetTitleOffset(0.6);
316 hbas[index2]->GetYaxis()->SetTitleOffset(0.7);
317 t3->DrawLatex(0.15,0.92,text);
322 hrawn[index2]->SetMinimum(1.);
323 hrawn[index2]->SetMaximum(6.);
324 hrawn[index2]->Draw();
325 hrawn[index2]->GetXaxis()->SetTitle("Anode");
326 hrawn[index2]->GetYaxis()->SetTitle("Noise");
327 hrawn[index2]->GetXaxis()->SetTitleSize(0.07);
328 hrawn[index2]->GetYaxis()->SetTitleSize(0.07);
329 hrawn[index2]->GetXaxis()->SetTitleOffset(0.6);
330 hrawn[index2]->GetYaxis()->SetTitleOffset(0.7);
331 gStyle->SetOptStat(0);
332 hrawn[index2]->SetStats(0);
333 hcorrn[index2]->SetLineColor(2);
334 hcorrn[index2]->Draw("SAME");
337 t3->DrawLatex(0.15,0.92,text);
341 hdbas[index2]->Draw();
342 hdbas[index2]->GetXaxis()->SetTitle("Baseline");
343 hdbas[index2]->GetXaxis()->SetTitleSize(0.07);
344 hdbas[index2]->GetXaxis()->SetTitleOffset(0.6);
345 t3->DrawLatex(0.15,0.92,text);
349 hdrawn[index2]->Draw();
350 hdrawn[index2]->GetXaxis()->SetTitle("Noise");
351 hdrawn[index2]->GetXaxis()->SetTitleSize(0.07);
352 hdrawn[index2]->GetXaxis()->SetTitleOffset(0.6);
353 hdcorrn[index2]->SetLineColor(2);
354 hdcorrn[index2]->Draw("SAME");
357 t3->DrawLatex(0.15,0.92,text);
362 c1->SaveAs("Baselines.gif");
363 c2->SaveAs("Noise.gif");
364 c3->SaveAs("BaselinesDist.gif");
365 c4->SaveAs("NoiseDist.gif");
368 for(Int_t iddl=0; iddl<kTotDDL;iddl++){
369 for(Int_t imod=0; imod<kModPerDDL;imod++){
370 for(Int_t isid=0;isid<kSides;isid++){
371 sprintf(delfil,"rm SDDbase_step1_ddl%02dc%02d_sid%d.data",iddl,imod,isid);
372 gSystem->Exec(delfil);
379 void AnalyzeSDDNoiseAllMod(Int_t nrun, Int_t n2, Int_t nDDL=0, Int_t firstEv=10, Int_t lastEv=15){
380 TGrid::Connect("alien:",0,0,"t");
382 sprintf(filnam,"alien:///alice/data/2008/LHC08c_SDD/%09d/raw/08%09d%03d.10.root",nrun,nrun,n2);
383 printf("Open file %s\n",filnam);
384 AnalyzeSDDNoiseAllMod(filnam,nDDL,firstEv,lastEv);