]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AnalyzeSDDGainAllMod.C
HLT mode retrieved from the OCDB and used to set SDD raw data format in simulation...
[u/mrichter/AliRoot.git] / ITS / AnalyzeSDDGainAllMod.C
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
26 void 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
230 void 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 }