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