]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/AnalyzeSDDGainAllMod.C
Parameters of AliITSVertexer3D added in AliITSRecoParam (F.Prino)
[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"
16#endif
17
18// Macro for the analysis of PULSER runs (equivalent to ITSSDDGAINda.cxx)
19// Two functions named AnalyzeSDDGainAllModules:
20// The first is for analyzing a local raw data file and takes as agrument the file name.
21// The second is for running on ALIEN
22// All DDLs are analyzed, the argument nDDL selects the DDL to be plotted
23// Origin: F. Prino (prino@to.infn.it)
24
25
26void AnalyzeSDDGainAllMod(Char_t *datafil, Int_t nDDL, Int_t firstEv=10, Int_t lastEv=16, Float_t pascalDAC=100){
27
28 Int_t eqOffset = 256;
29 Int_t DDLid_range = 24;
30 // Int_t eqOffset = 100;
31 // Int_t DDLid_range = 1;
32 const Int_t kTotDDL=24;
33 const Int_t kModPerDDL=12;
34 const Int_t kSides=2;
35
36
37 TH2F** histo = new TH2F*[kTotDDL*kModPerDDL*kSides];
38 AliITSOnlineSDDTP **anal=new AliITSOnlineSDDTP*[kTotDDL*kModPerDDL*kSides];
39 Bool_t isFilled[kTotDDL*kModPerDDL*kSides];
40
41 Char_t hisnam[20];
42 for(Int_t iddl=0; iddl<kTotDDL;iddl++){
43 for(Int_t imod=0; imod<kModPerDDL;imod++){
44 for(Int_t isid=0;isid<kSides;isid++){
45 Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
46 anal[index]=new AliITSOnlineSDDTP(iddl,imod,isid,pascalDAC);
47 sprintf(hisnam,"h%02dc%02ds%d",iddl,imod,isid);
48 histo[index]=new TH2F(hisnam,"",256,-0.5,255.5,256,-0.5,255.5);
49 isFilled[index]=0;
50 }
51 }
52 }
53
54 TCanvas* c0 = new TCanvas("c0","Ev Display",900,900);
55 gStyle->SetPalette(1);
56 Char_t text[50];
57
58 Int_t iev=firstEv;
59 AliRawReader *rd;
60 if(strstr(datafil,".root")!=0){
61 rd=new AliRawReaderRoot(datafil,iev);
62 }else{
63 rd=new AliRawReaderDate(datafil,iev);
64 }
65 TLatex *t0=new TLatex();
66 t0->SetNDC();
67 t0->SetTextSize(0.06);
68 t0->SetTextColor(4);
69
70 do{
71 c0->Clear();
72 c0->Divide(4,6,0.001,0.001);
73 printf("Event # %d\n",iev);
74 //rd->SelectEvents(7);
75 rd->SelectEquipment(17,eqOffset,eqOffset+DDLid_range);
76 rd->Reset();
77 for(Int_t iddl=0; iddl<kTotDDL;iddl++){
78 for(Int_t imod=0; imod<kModPerDDL;imod++){
79 for(Int_t isid=0;isid<kSides;isid++){
80 Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
81 histo[index]->Reset();
82 }
83 }
84 }
85 AliITSRawStreamSDD s(rd);
86 rd->SelectEquipment(17,eqOffset,eqOffset+DDLid_range);
87 while(s.Next()){
88 Int_t iDDL=rd->GetDDLID();
89 Int_t iCarlos=s.GetCarlosId();
90 if(iDDL>=0 && iDDL<kTotDDL && s.IsCompletedModule()==kFALSE){
91 Int_t index=kSides*(kModPerDDL*iDDL+iCarlos)+s.GetChannel();
92 histo[index]->Fill(s.GetCoord2(),s.GetCoord1(),s.GetSignal());
93 isFilled[index]=1;
94 }
95 }
96 iev++;
97 for(Int_t iddl=0; iddl<kTotDDL;iddl++){
98 for(Int_t imod=0; imod<kModPerDDL;imod++){
99 for(Int_t isid=0;isid<kSides;isid++){
100 Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
101 anal[index]->AddEvent(histo[index]);
102 if(iddl==nDDL){
103 Int_t index2=kSides*imod+isid;
104 c0->cd(index2+1);
105 histo[index]->DrawCopy("colz");
106 sprintf(text,"DDL %d channel %d Side %d",nDDL,imod,isid);
107 t0->DrawLatex(0.15,0.92,text);
108 c0->Update();
109 }
110 }
111 }
112 }
113 printf(" --- OK\n");
114 }while(rd->NextEvent()&&iev<=lastEv);
115
116 TH1F *htotgain=new TH1F("htotgain","",100,0.,5.);
117 TH1F *htotpeakpos=new TH1F("htotpeakpos","",256,-0.5,255.5);
118 TH1F *hstatus=new TH1F("hstatus","",2,-0.5,1.5);
119
120 TFile *outfil=new TFile("SDDgain-results.root","recreate");
121 for(Int_t iddl=0; iddl<kTotDDL;iddl++){
122 for(Int_t imod=0; imod<kModPerDDL;imod++){
123 for(Int_t isid=0;isid<kSides;isid++){
124 Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
125 if(isFilled[index]){
126 anal[index]->ValidateAnodes();
127 anal[index]->WriteToASCII();
128 anal[index]->WriteToROOT(outfil);
129 for(Int_t ian=0; ian<256;ian++){
130 Float_t gain=anal[index]->GetChannelGain(ian);
131 Float_t ppos=anal[index]->GetTimeBinTPPeak(ian);
132 Int_t anstatus=anal[index]->IsAnodeGood(ian);
133 hstatus->Fill(anstatus);
134 htotgain->Fill(gain);
135 htotpeakpos->Fill(ppos);
136 }
137 }
138 }
139 }
140 }
141 outfil->Close();
142
143 // Draw Statistics of baselines and noise
144 TCanvas *call=new TCanvas("call","General stats",700,700);
145 call->Divide(2,2);
146 call->cd(1);
147 htotpeakpos->Draw();
148 htotpeakpos->GetXaxis()->SetTitle("TP peak position (Time Bin)");
149 htotpeakpos->GetXaxis()->SetTitleSize(0.07);
150 htotpeakpos->GetXaxis()->SetTitleOffset(0.6);
151 call->cd(2);
152 htotgain->Draw();
153 htotgain->GetXaxis()->SetTitle("Gain (ADC/DAC)");
154 htotgain->GetXaxis()->SetTitleSize(0.07);
155 htotgain->GetXaxis()->SetTitleOffset(0.6);
156 call->cd(3);
157 hstatus->Draw();
158 hstatus->GetXaxis()->SetTitle("Anode Status (0=bad 1=good)");
159 hstatus->GetXaxis()->SetTitleSize(0.07);
160 hstatus->GetXaxis()->SetTitleOffset(0.6);
161 call->Update();
162 call->SaveAs("GenStatsPulser.gif");
163
164 // Draw baselines and noisegain and TestPulse time bin for all modules
165
166 TH1F** hgain = new TH1F*[kModPerDDL*kSides];
167 TH1F** htptb = new TH1F*[kModPerDDL*kSides];
168
169 TCanvas *c1=new TCanvas("c1","DDL: TP position",900,900);
170 c1->SetBottomMargin(0.14);
171 c1->Divide(4,6,0.001,0.001);
172 TCanvas *c2=new TCanvas("c2","DDL: gain",900,900);
173 c2->SetBottomMargin(0.14);
174 c2->Divide(4,6,0.001,0.001);
175
176 for(Int_t imod=0; imod<kModPerDDL;imod++){
177 for(Int_t isid=0;isid<kSides;isid++){
178 Int_t index1=kSides*(kModPerDDL*nDDL+imod)+isid;
179 Int_t index2=kSides*imod+isid;
180 sprintf(text,"DDL %d channel %d Side %d",nDDL,imod,isid);
181
182 TLatex *t3=new TLatex(0.15,0.92,text);
183 t3->SetNDC();
184 t3->SetTextSize(0.06);
185 t3->SetTextColor(4);
186 sprintf(hisnam,"hgain%ds%d",imod,isid);
187 hgain[index2]=new TH1F(hisnam,"",256,-0.5,255.5);
188 sprintf(hisnam,"htptb%ds%d",imod,isid);
189 htptb[index2]=new TH1F(hisnam,"",256,-0.5,255.5);
190 for(Int_t ian=0;ian<256;ian++){
191 hgain[index2]->SetBinContent(ian+1,anal[index1]->GetChannelGain(ian));
192 htptb[index2]->SetBinContent(ian+1,anal[index1]->GetTimeBinTPPeak(ian));
193 }
194
195 c1->cd(index2+1);
196 htptb[index2]->Draw();
197 // htptb[imod]->SetMinimum(0);
198 // htptb[imod]->SetMaximum(75);
199 htptb[index2]->GetXaxis()->SetTitle("Anode");
200 htptb[index2]->GetYaxis()->SetTitle("TP position (Time Bin)");
201 htptb[index2]->GetXaxis()->SetTitleSize(0.07);
202 htptb[index2]->GetYaxis()->SetTitleSize(0.07);
203 htptb[index2]->GetXaxis()->SetTitleOffset(0.6);
204 htptb[index2]->GetYaxis()->SetTitleOffset(0.7);
205 t3->Draw();
206 c1->Update();
207
208
209 c2->cd(index2+1);
210 hgain[index2]->SetMinimum(0.);
211 hgain[index2]->SetMaximum(4.);
212 hgain[index2]->Draw();
213 hgain[index2]->GetXaxis()->SetTitle("Anode");
214 hgain[index2]->GetYaxis()->SetTitle("Gain");
215 hgain[index2]->GetXaxis()->SetTitleSize(0.07);
216 hgain[index2]->GetYaxis()->SetTitleSize(0.07);
217 hgain[index2]->GetXaxis()->SetTitleOffset(0.6);
218 hgain[index2]->GetYaxis()->SetTitleOffset(0.7);
219 hgain[index2]->SetStats(0);
220 t3->Draw();
221 c2->Update();
222 }
223 }
224
225 c1->SaveAs("TPtimebin.gif");
226 c2->SaveAs("Gain.gif");
227
228}
229
230void AnalyzeSDDGainAllMod(Int_t nrun, Int_t n2, Int_t nDDL=0, Int_t firstEv=10, Int_t lastEv=18, Float_t pascalDAC=100){
231 TGrid::Connect("alien:",0,0,"t");
232 Char_t filnam[200];
233 sprintf(filnam,"alien:///alice/data/2008/LHC08c_SDD/%09d/raw/08%09d%03d.10.root",nrun,nrun,n2);
234 printf("Open file %s\n",filnam);
235 AnalyzeSDDGainAllMod(filnam,nDDL,firstEv,lastEv,pascalDAC);
236}