Added two missing includes to allow macro compilation (thanks to Laurent for remarkin...
[u/mrichter/AliRoot.git] / ITS / AnalyzeSDDGainAllMod.C
CommitLineData
91282711 1#if !defined(__CINT__) || defined(__MAKECINT__)
2#include <TH2F.h>
3#include <TCanvas.h>
4#include <TStopwatch.h>
5#include <TStyle.h>
6#include <TLatex.h>
7#include <TFile.h>
8#include <TGrid.h>
9#include "AliRawReader.h"
10#include "AliRawReaderDate.h"
11#include "AliRawReaderRoot.h"
12#include "AliITSOnlineSDDBase.h"
13#include "AliITSOnlineSDDCMN.h"
14#include "AliITSOnlineSDDTP.h"
15#include "AliITSRawStreamSDD.h"
a8cd2ab2 16#include "AliITSRawStreamSDDCompressed.h"
91282711 17#endif
18
19// Macro for the analysis of PULSER runs (equivalent to ITSSDDGAINda.cxx)
20// Two functions named AnalyzeSDDGainAllModules:
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)
25
26
a8cd2ab2 27void AnalyzeSDDGainAllMod(Char_t *datafil,
28 Int_t adcfreq=20,
29 Int_t nDDL=0,
e5b2f7f2 30 Int_t firstEv=18,
31 Int_t lastEv=22,
32 Float_t pascalDAC=100){
91282711 33
91282711 34 const Int_t kTotDDL=24;
35 const Int_t kModPerDDL=12;
36 const Int_t kSides=2;
e5b2f7f2 37 Bool_t writtenoutput=kFALSE;
91282711 38
39
40 TH2F** histo = new TH2F*[kTotDDL*kModPerDDL*kSides];
41 AliITSOnlineSDDTP **anal=new AliITSOnlineSDDTP*[kTotDDL*kModPerDDL*kSides];
42 Bool_t isFilled[kTotDDL*kModPerDDL*kSides];
43
44 Char_t hisnam[20];
45 for(Int_t iddl=0; iddl<kTotDDL;iddl++){
46 for(Int_t imod=0; imod<kModPerDDL;imod++){
47 for(Int_t isid=0;isid<kSides;isid++){
48 Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
49 anal[index]=new AliITSOnlineSDDTP(iddl,imod,isid,pascalDAC);
b255f56d 50 if(adcfreq==40) anal[index]->SetLastGoodTB(254);
51 else anal[index]->SetLastGoodTB(126);
91282711 52 sprintf(hisnam,"h%02dc%02ds%d",iddl,imod,isid);
53 histo[index]=new TH2F(hisnam,"",256,-0.5,255.5,256,-0.5,255.5);
54 isFilled[index]=0;
55 }
56 }
57 }
58
59 TCanvas* c0 = new TCanvas("c0","Ev Display",900,900);
60 gStyle->SetPalette(1);
61 Char_t text[50];
62
63 Int_t iev=firstEv;
64 AliRawReader *rd;
65 if(strstr(datafil,".root")!=0){
66 rd=new AliRawReaderRoot(datafil,iev);
67 }else{
68 rd=new AliRawReaderDate(datafil,iev);
69 }
70 TLatex *t0=new TLatex();
71 t0->SetNDC();
72 t0->SetTextSize(0.06);
73 t0->SetTextColor(4);
74
75 do{
76 c0->Clear();
77 c0->Divide(4,6,0.001,0.001);
78 printf("Event # %d\n",iev);
91282711 79 rd->Reset();
80 for(Int_t iddl=0; iddl<kTotDDL;iddl++){
81 for(Int_t imod=0; imod<kModPerDDL;imod++){
82 for(Int_t isid=0;isid<kSides;isid++){
83 Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
84 histo[index]->Reset();
85 }
86 }
87 }
e5b2f7f2 88
89 UChar_t cdhAttr=AliITSRawStreamSDD::ReadBlockAttributes(rd);
90 UInt_t amSamplFreq=AliITSRawStreamSDD::ReadAMSamplFreqFromCDH(cdhAttr);
91 AliITSRawStream* s=AliITSRawStreamSDD::CreateRawStreamSDD(rd,cdhAttr);
92 if(!writtenoutput){
93 printf("Use %s raw stream, sampling frequency %d MHz\n",s->ClassName(),amSamplFreq);
94 writtenoutput=kTRUE;
a8cd2ab2 95 }
96 while(s->Next()){
91282711 97 Int_t iDDL=rd->GetDDLID();
a8cd2ab2 98 Int_t iCarlos=s->GetCarlosId();
99 if(s->IsCompletedModule()) continue;
100 if(s->IsCompletedDDL()) continue;
de075dae 101 if(iDDL>=0 && iDDL<kTotDDL){
a8cd2ab2 102 Int_t index=kSides*(kModPerDDL*iDDL+iCarlos)+s->GetChannel();
103 histo[index]->Fill(s->GetCoord2(),s->GetCoord1(),s->GetSignal());
91282711 104 isFilled[index]=1;
105 }
106 }
a8cd2ab2 107 delete s;
91282711 108 iev++;
109 for(Int_t iddl=0; iddl<kTotDDL;iddl++){
110 for(Int_t imod=0; imod<kModPerDDL;imod++){
111 for(Int_t isid=0;isid<kSides;isid++){
112 Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
113 anal[index]->AddEvent(histo[index]);
114 if(iddl==nDDL){
115 Int_t index2=kSides*imod+isid;
116 c0->cd(index2+1);
117 histo[index]->DrawCopy("colz");
118 sprintf(text,"DDL %d channel %d Side %d",nDDL,imod,isid);
119 t0->DrawLatex(0.15,0.92,text);
120 c0->Update();
121 }
122 }
123 }
124 }
125 printf(" --- OK\n");
126 }while(rd->NextEvent()&&iev<=lastEv);
127
de075dae 128 TH1F *htotgain=new TH1F("htotgain","",100,0.2,4.2);
91282711 129 TH1F *htotpeakpos=new TH1F("htotpeakpos","",256,-0.5,255.5);
130 TH1F *hstatus=new TH1F("hstatus","",2,-0.5,1.5);
131
132 TFile *outfil=new TFile("SDDgain-results.root","recreate");
133 for(Int_t iddl=0; iddl<kTotDDL;iddl++){
134 for(Int_t imod=0; imod<kModPerDDL;imod++){
135 for(Int_t isid=0;isid<kSides;isid++){
136 Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
137 if(isFilled[index]){
138 anal[index]->ValidateAnodes();
139 anal[index]->WriteToASCII();
140 anal[index]->WriteToROOT(outfil);
141 for(Int_t ian=0; ian<256;ian++){
142 Float_t gain=anal[index]->GetChannelGain(ian);
143 Float_t ppos=anal[index]->GetTimeBinTPPeak(ian);
144 Int_t anstatus=anal[index]->IsAnodeGood(ian);
145 hstatus->Fill(anstatus);
146 htotgain->Fill(gain);
147 htotpeakpos->Fill(ppos);
148 }
149 }
150 }
151 }
152 }
153 outfil->Close();
154
155 // Draw Statistics of baselines and noise
156 TCanvas *call=new TCanvas("call","General stats",700,700);
157 call->Divide(2,2);
158 call->cd(1);
159 htotpeakpos->Draw();
160 htotpeakpos->GetXaxis()->SetTitle("TP peak position (Time Bin)");
161 htotpeakpos->GetXaxis()->SetTitleSize(0.07);
162 htotpeakpos->GetXaxis()->SetTitleOffset(0.6);
163 call->cd(2);
164 htotgain->Draw();
165 htotgain->GetXaxis()->SetTitle("Gain (ADC/DAC)");
166 htotgain->GetXaxis()->SetTitleSize(0.07);
167 htotgain->GetXaxis()->SetTitleOffset(0.6);
168 call->cd(3);
169 hstatus->Draw();
170 hstatus->GetXaxis()->SetTitle("Anode Status (0=bad 1=good)");
171 hstatus->GetXaxis()->SetTitleSize(0.07);
172 hstatus->GetXaxis()->SetTitleOffset(0.6);
173 call->Update();
174 call->SaveAs("GenStatsPulser.gif");
175
176 // Draw baselines and noisegain and TestPulse time bin for all modules
177
178 TH1F** hgain = new TH1F*[kModPerDDL*kSides];
179 TH1F** htptb = new TH1F*[kModPerDDL*kSides];
180
181 TCanvas *c1=new TCanvas("c1","DDL: TP position",900,900);
182 c1->SetBottomMargin(0.14);
183 c1->Divide(4,6,0.001,0.001);
184 TCanvas *c2=new TCanvas("c2","DDL: gain",900,900);
185 c2->SetBottomMargin(0.14);
186 c2->Divide(4,6,0.001,0.001);
187
188 for(Int_t imod=0; imod<kModPerDDL;imod++){
189 for(Int_t isid=0;isid<kSides;isid++){
190 Int_t index1=kSides*(kModPerDDL*nDDL+imod)+isid;
191 Int_t index2=kSides*imod+isid;
192 sprintf(text,"DDL %d channel %d Side %d",nDDL,imod,isid);
193
194 TLatex *t3=new TLatex(0.15,0.92,text);
195 t3->SetNDC();
196 t3->SetTextSize(0.06);
197 t3->SetTextColor(4);
198 sprintf(hisnam,"hgain%ds%d",imod,isid);
199 hgain[index2]=new TH1F(hisnam,"",256,-0.5,255.5);
200 sprintf(hisnam,"htptb%ds%d",imod,isid);
201 htptb[index2]=new TH1F(hisnam,"",256,-0.5,255.5);
202 for(Int_t ian=0;ian<256;ian++){
203 hgain[index2]->SetBinContent(ian+1,anal[index1]->GetChannelGain(ian));
204 htptb[index2]->SetBinContent(ian+1,anal[index1]->GetTimeBinTPPeak(ian));
205 }
206
207 c1->cd(index2+1);
208 htptb[index2]->Draw();
209 // htptb[imod]->SetMinimum(0);
210 // htptb[imod]->SetMaximum(75);
211 htptb[index2]->GetXaxis()->SetTitle("Anode");
212 htptb[index2]->GetYaxis()->SetTitle("TP position (Time Bin)");
213 htptb[index2]->GetXaxis()->SetTitleSize(0.07);
214 htptb[index2]->GetYaxis()->SetTitleSize(0.07);
215 htptb[index2]->GetXaxis()->SetTitleOffset(0.6);
216 htptb[index2]->GetYaxis()->SetTitleOffset(0.7);
217 t3->Draw();
218 c1->Update();
219
220
221 c2->cd(index2+1);
222 hgain[index2]->SetMinimum(0.);
223 hgain[index2]->SetMaximum(4.);
224 hgain[index2]->Draw();
225 hgain[index2]->GetXaxis()->SetTitle("Anode");
226 hgain[index2]->GetYaxis()->SetTitle("Gain");
227 hgain[index2]->GetXaxis()->SetTitleSize(0.07);
228 hgain[index2]->GetYaxis()->SetTitleSize(0.07);
229 hgain[index2]->GetXaxis()->SetTitleOffset(0.6);
230 hgain[index2]->GetYaxis()->SetTitleOffset(0.7);
231 hgain[index2]->SetStats(0);
232 t3->Draw();
233 c2->Update();
234 }
235 }
236
237 c1->SaveAs("TPtimebin.gif");
238 c2->SaveAs("Gain.gif");
239
240}
241
e5b2f7f2 242void AnalyzeSDDGainAllMod(Int_t nrun, Int_t n2, Int_t year=2009, Char_t* dir="LHC09b_SDD",
a8cd2ab2 243 Int_t adcfreq=20,
244 Int_t nDDL=0,
e5b2f7f2 245 Int_t firstEv=18,
246 Int_t lastEv=22,
247 Float_t pascalDAC=100){
248
a8cd2ab2 249
91282711 250 TGrid::Connect("alien:",0,0,"t");
251 Char_t filnam[200];
e5b2f7f2 252 sprintf(filnam,"alien:///alice/data/%d/%s/%09d/raw/%02d%09d%03d.10.root",year,dir,nrun,year-2000,nrun,n2);
91282711 253 printf("Open file %s\n",filnam);
e5b2f7f2 254 AnalyzeSDDGainAllMod(filnam,adcfreq,nDDL,firstEv,lastEv,pascalDAC);
91282711 255}