1 #if !defined(__CINT__) || defined(__MAKECINT__)
4 #include <TStopwatch.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"
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)
26 void AnalyzeSDDGainAllMod(Char_t *datafil, Int_t nDDL, Int_t firstEv=10, Int_t lastEv=16, Float_t pascalDAC=100){
28 const Int_t kTotDDL=24;
29 const Int_t kModPerDDL=12;
33 TH2F** histo = new TH2F*[kTotDDL*kModPerDDL*kSides];
34 AliITSOnlineSDDTP **anal=new AliITSOnlineSDDTP*[kTotDDL*kModPerDDL*kSides];
35 Bool_t isFilled[kTotDDL*kModPerDDL*kSides];
38 for(Int_t iddl=0; iddl<kTotDDL;iddl++){
39 for(Int_t imod=0; imod<kModPerDDL;imod++){
40 for(Int_t isid=0;isid<kSides;isid++){
41 Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
42 anal[index]=new AliITSOnlineSDDTP(iddl,imod,isid,pascalDAC);
43 sprintf(hisnam,"h%02dc%02ds%d",iddl,imod,isid);
44 histo[index]=new TH2F(hisnam,"",256,-0.5,255.5,256,-0.5,255.5);
50 TCanvas* c0 = new TCanvas("c0","Ev Display",900,900);
51 gStyle->SetPalette(1);
56 if(strstr(datafil,".root")!=0){
57 rd=new AliRawReaderRoot(datafil,iev);
59 rd=new AliRawReaderDate(datafil,iev);
61 TLatex *t0=new TLatex();
63 t0->SetTextSize(0.06);
68 c0->Divide(4,6,0.001,0.001);
69 printf("Event # %d\n",iev);
71 for(Int_t iddl=0; iddl<kTotDDL;iddl++){
72 for(Int_t imod=0; imod<kModPerDDL;imod++){
73 for(Int_t isid=0;isid<kSides;isid++){
74 Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
75 histo[index]->Reset();
79 AliITSRawStreamSDD s(rd);
81 Int_t iDDL=rd->GetDDLID();
82 Int_t iCarlos=s.GetCarlosId();
83 if(s.IsCompletedModule()) continue;
84 if(s.IsCompletedDDL()) continue;
85 if(iDDL>=0 && iDDL<kTotDDL){
86 Int_t index=kSides*(kModPerDDL*iDDL+iCarlos)+s.GetChannel();
87 histo[index]->Fill(s.GetCoord2(),s.GetCoord1(),s.GetSignal());
92 for(Int_t iddl=0; iddl<kTotDDL;iddl++){
93 for(Int_t imod=0; imod<kModPerDDL;imod++){
94 for(Int_t isid=0;isid<kSides;isid++){
95 Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
96 anal[index]->AddEvent(histo[index]);
98 Int_t index2=kSides*imod+isid;
100 histo[index]->DrawCopy("colz");
101 sprintf(text,"DDL %d channel %d Side %d",nDDL,imod,isid);
102 t0->DrawLatex(0.15,0.92,text);
109 }while(rd->NextEvent()&&iev<=lastEv);
111 TH1F *htotgain=new TH1F("htotgain","",100,0.2,4.2);
112 TH1F *htotpeakpos=new TH1F("htotpeakpos","",256,-0.5,255.5);
113 TH1F *hstatus=new TH1F("hstatus","",2,-0.5,1.5);
115 TFile *outfil=new TFile("SDDgain-results.root","recreate");
116 for(Int_t iddl=0; iddl<kTotDDL;iddl++){
117 for(Int_t imod=0; imod<kModPerDDL;imod++){
118 for(Int_t isid=0;isid<kSides;isid++){
119 Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
121 anal[index]->ValidateAnodes();
122 anal[index]->WriteToASCII();
123 anal[index]->WriteToROOT(outfil);
124 for(Int_t ian=0; ian<256;ian++){
125 Float_t gain=anal[index]->GetChannelGain(ian);
126 Float_t ppos=anal[index]->GetTimeBinTPPeak(ian);
127 Int_t anstatus=anal[index]->IsAnodeGood(ian);
128 hstatus->Fill(anstatus);
129 htotgain->Fill(gain);
130 htotpeakpos->Fill(ppos);
138 // Draw Statistics of baselines and noise
139 TCanvas *call=new TCanvas("call","General stats",700,700);
143 htotpeakpos->GetXaxis()->SetTitle("TP peak position (Time Bin)");
144 htotpeakpos->GetXaxis()->SetTitleSize(0.07);
145 htotpeakpos->GetXaxis()->SetTitleOffset(0.6);
148 htotgain->GetXaxis()->SetTitle("Gain (ADC/DAC)");
149 htotgain->GetXaxis()->SetTitleSize(0.07);
150 htotgain->GetXaxis()->SetTitleOffset(0.6);
153 hstatus->GetXaxis()->SetTitle("Anode Status (0=bad 1=good)");
154 hstatus->GetXaxis()->SetTitleSize(0.07);
155 hstatus->GetXaxis()->SetTitleOffset(0.6);
157 call->SaveAs("GenStatsPulser.gif");
159 // Draw baselines and noisegain and TestPulse time bin for all modules
161 TH1F** hgain = new TH1F*[kModPerDDL*kSides];
162 TH1F** htptb = new TH1F*[kModPerDDL*kSides];
164 TCanvas *c1=new TCanvas("c1","DDL: TP position",900,900);
165 c1->SetBottomMargin(0.14);
166 c1->Divide(4,6,0.001,0.001);
167 TCanvas *c2=new TCanvas("c2","DDL: gain",900,900);
168 c2->SetBottomMargin(0.14);
169 c2->Divide(4,6,0.001,0.001);
171 for(Int_t imod=0; imod<kModPerDDL;imod++){
172 for(Int_t isid=0;isid<kSides;isid++){
173 Int_t index1=kSides*(kModPerDDL*nDDL+imod)+isid;
174 Int_t index2=kSides*imod+isid;
175 sprintf(text,"DDL %d channel %d Side %d",nDDL,imod,isid);
177 TLatex *t3=new TLatex(0.15,0.92,text);
179 t3->SetTextSize(0.06);
181 sprintf(hisnam,"hgain%ds%d",imod,isid);
182 hgain[index2]=new TH1F(hisnam,"",256,-0.5,255.5);
183 sprintf(hisnam,"htptb%ds%d",imod,isid);
184 htptb[index2]=new TH1F(hisnam,"",256,-0.5,255.5);
185 for(Int_t ian=0;ian<256;ian++){
186 hgain[index2]->SetBinContent(ian+1,anal[index1]->GetChannelGain(ian));
187 htptb[index2]->SetBinContent(ian+1,anal[index1]->GetTimeBinTPPeak(ian));
191 htptb[index2]->Draw();
192 // htptb[imod]->SetMinimum(0);
193 // htptb[imod]->SetMaximum(75);
194 htptb[index2]->GetXaxis()->SetTitle("Anode");
195 htptb[index2]->GetYaxis()->SetTitle("TP position (Time Bin)");
196 htptb[index2]->GetXaxis()->SetTitleSize(0.07);
197 htptb[index2]->GetYaxis()->SetTitleSize(0.07);
198 htptb[index2]->GetXaxis()->SetTitleOffset(0.6);
199 htptb[index2]->GetYaxis()->SetTitleOffset(0.7);
205 hgain[index2]->SetMinimum(0.);
206 hgain[index2]->SetMaximum(4.);
207 hgain[index2]->Draw();
208 hgain[index2]->GetXaxis()->SetTitle("Anode");
209 hgain[index2]->GetYaxis()->SetTitle("Gain");
210 hgain[index2]->GetXaxis()->SetTitleSize(0.07);
211 hgain[index2]->GetYaxis()->SetTitleSize(0.07);
212 hgain[index2]->GetXaxis()->SetTitleOffset(0.6);
213 hgain[index2]->GetYaxis()->SetTitleOffset(0.7);
214 hgain[index2]->SetStats(0);
220 c1->SaveAs("TPtimebin.gif");
221 c2->SaveAs("Gain.gif");
225 void AnalyzeSDDGainAllMod(Int_t nrun, Int_t n2, Char_t* dir="LHC08d_SDD", Int_t nDDL=0, Int_t firstEv=15, Int_t lastEv=20, Float_t pascalDAC=100){
226 TGrid::Connect("alien:",0,0,"t");
228 sprintf(filnam,"alien:///alice/data/2008/%s/%09d/raw/08%09d%03d.10.root",dir,nrun,nrun,n2);
229 printf("Open file %s\n",filnam);
230 AnalyzeSDDGainAllMod(filnam,nDDL,firstEv,lastEv,pascalDAC);