1 #if !defined(__CINT__) || defined(__MAKECINT__)
4 #include <TGraphErrors.h>
5 #include <TStopwatch.h>
13 #include "AliRawReader.h"
14 #include "AliRawReaderDate.h"
15 #include "AliRawReaderRoot.h"
16 #include "AliITSOnlineSDDInjectors.h"
17 #include "AliITSRawStreamSDD.h"
18 #include "AliITSDDLModuleMapSDD.h"
21 // Macro for the analysis of PULSER runs (equivalent to ITSSDDINJda.cxx)
22 // Two functions named AnalyzeSDDInjectorsAllModules:
23 // The first is for analyzing a local raw data file and takes as agrument the file name.
24 // The second is for running on ALIEN
25 // All DDLs are analyzed, the argument nDDL selects the DDL to be plotted
26 // Origin: F. Prino (prino@to.infn.it)
29 void AnalyzeSDDInjectorsAllMod(Char_t *datafil, Int_t nDDL, Int_t firstEv=10, Int_t lastEv=15,Int_t jpad=16, Int_t statuscut=7){
31 const Int_t kTotDDL=24;
32 const Int_t kModPerDDL=12;
35 AliITSDDLModuleMapSDD* dmap=new AliITSDDLModuleMapSDD();
38 TH2F** histo = new TH2F*[kTotDDL*kModPerDDL*kSides];
39 Int_t nWrittenEv[kTotDDL*kModPerDDL*kSides];
40 TGraphErrors** gvel = new TGraphErrors*[kTotDDL*kModPerDDL*kSides];
41 AliITSOnlineSDDInjectors **anal=new AliITSOnlineSDDInjectors*[kTotDDL*kModPerDDL*kSides];
42 TH1F** hvdriftl=new TH1F*[260];
43 TH1F** hvdriftr=new TH1F*[260];
45 for(Int_t idet=0; idet<260;idet++){
46 sprintf(hisnam,"vdriftl%03d",idet);
47 hvdriftl[idet]=new TH1F(hisnam,"",500,5.5,8.0);
48 sprintf(hisnam,"vdriftr%03d",idet);
49 hvdriftr[idet]=new TH1F(hisnam,"",500,5.5,8.0);
51 for(Int_t iddl=0; iddl<kTotDDL;iddl++){
52 for(Int_t imod=0; imod<kModPerDDL;imod++){
53 for(Int_t isid=0;isid<kSides;isid++){
54 Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
55 sprintf(hisnam,"h%02dc%02ds%d",iddl,imod,isid);
56 histo[index]=new TH2F(hisnam,"",256,-0.5,255.5,256,-0.5,255.5);
57 anal[index]=new AliITSOnlineSDDInjectors(iddl,imod,isid);
58 /* Uncomment these lines for analysis of runs with 40 MHz sapling */
59 // anal[index]->SetInjLineRange(0,20,50);
60 // anal[index]->SetInjLineRange(1,90,160);
61 // anal[index]->SetInjLineRange(2,170,240);
62 // anal[index]->SetTimeStep(25.);
63 /* END of lines to be uncommented */
68 TGraphErrors *gvvsmod0=new TGraphErrors(0);
69 TGraphErrors *gvvsmod1=new TGraphErrors(0);
70 TGraphErrors *gtvsmod0=new TGraphErrors(0);
71 TGraphErrors *gtvsmod1=new TGraphErrors(0);
72 Float_t gvmin=6.0, gvmax=7.5;
73 Float_t gtmin=288., gtmax=308.;
74 TH1F* hanst=new TH1F("hanst","",8,-0.5,7.5);
75 TH1F* hpad7l=new TH1F("hpad7l","",33,-0.5,32.5);
76 TH1F* hpad7r=new TH1F("hpad7r","",33,-0.5,32.5);
78 TCanvas* c0 = new TCanvas("c0","Event display",900,900);
79 gStyle->SetPalette(1);
80 TCanvas* c1 = new TCanvas("c1","Drift Speed vs. anode",900,900);
85 if(strstr(datafil,".root")!=0){
86 rd=new AliRawReaderRoot(datafil,iev);
88 rd=new AliRawReaderDate(datafil,iev);
92 TF1 *funz=new TF1("funz","[0]+[1]*x+[2]*x*x+[3]*x*x*x",0.,255.);
93 TLatex *t0=new TLatex();
95 t0->SetTextSize(0.06);
100 c0->Divide(4,6,0.001,0.001);
102 c1->Divide(4,6,0.001,0.001);
103 printf("Event # %d\n",iev);
104 UInt_t timeSt=rd->GetTimestamp();
106 for(Int_t iddl=0; iddl<kTotDDL;iddl++){
107 for(Int_t imod=0; imod<kModPerDDL;imod++){
108 for(Int_t isid=0;isid<kSides;isid++){
109 Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
110 histo[index]->Reset();
115 AliITSRawStreamSDD s(rd);
117 Int_t iDDL=rd->GetDDLID();
118 Int_t iCarlos=s.GetCarlosId();
119 if(s.IsCompletedModule()) continue;
120 if(s.IsCompletedDDL()) continue;
121 if(iDDL>=0 && iDDL<kTotDDL){
122 Int_t index=kSides*(kModPerDDL*iDDL+iCarlos)+s.GetChannel();
123 histo[index]->Fill(s.GetCoord2(),s.GetCoord1(),s.GetSignal());
127 for(Int_t iddl=0; iddl<kTotDDL;iddl++){
128 for(Int_t imod=0; imod<kModPerDDL;imod++){
129 for(Int_t isid=0;isid<kSides;isid++){
130 Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
131 anal[index]->AnalyzeEvent(histo[index]);
132 anal[index]->WriteToASCII(iev,timeSt,nWrittenEv[index]);
134 Int_t iMod=dmap->GetModuleNumber(iddl,imod);
136 for(Int_t ipad=0;ipad<33;ipad++){
137 Int_t st=anal[index]->GetInjPadStatus(ipad);
139 if(anal[index]->GetInjPadStatus(ipad)>=statuscut){
140 if(isid==0) hpad7l->Fill(ipad);
141 if(isid==1) hpad7r->Fill(ipad);
144 if(anal[index]->GetInjPadStatus(jpad)>=statuscut){
145 Float_t vel=anal[index]->GetDriftSpeed(jpad);
146 if(isid==0) hvdriftl[iMod-240]->Fill(vel);
147 if(isid==1) hvdriftr[iMod-240]->Fill(vel);
151 Int_t index2=kSides*imod+isid;
153 histo[index]->SetMaximum(100.);
154 histo[index]->DrawCopy("colz");
155 sprintf(text,"DDL %d channel %d Side %d",nDDL,imod,isid);
156 t0->DrawLatex(0.15,0.92,text);
159 gvel[index]=anal[index]->GetDriftSpeedGraph();
160 gvel[index]->SetMarkerStyle(20);
161 gvel[index]->SetTitle("");
162 sprintf(gname,"gvel%dev%d",index,iev);
163 gvel[index]->SetName(gname);
164 // gvel[index]->SetMinimum(0);
165 //gvel[index]->SetMaximum(200);
167 gvel[index]->GetXaxis()->SetLimits(0,256);
168 gvel[index]->GetXaxis()->SetTitle("Anode");
169 gvel[index]->GetYaxis()->SetTitle("Drift vel.");
170 gvel[index]->GetXaxis()->SetTitleSize(0.07);
171 gvel[index]->GetYaxis()->SetTitleSize(0.07);
172 gvel[index]->GetXaxis()->SetTitleOffset(0.6);
173 gvel[index]->GetYaxis()->SetTitleOffset(0.6);
174 if(gvel[index]->GetN()>0) gvel[index]->Draw("AP");
175 Float_t *param=anal[index]->GetDriftSpeedFitParam();
176 funz->SetParameters(param[0],param[1],param[2],param[3]);
177 funz->SetLineColor(2);
178 funz->DrawCopy("LSAME");
179 t0->DrawLatex(0.15,0.92,text);
188 }while(rd->NextEvent()&&iev<=lastEv);
189 printf("Total number of events = %d\n",readEv);
190 Float_t nfac=1./(Float_t)readEv/33./520.;
192 nfac=1./(Float_t)readEv;
196 Int_t ipt0=0, ipt1=0;
197 Float_t Edrift=(1800-45)/291/0.012;
198 TFile *outfil=new TFile("DriftSpeedHistos.root","recreate");
199 for(Int_t iMod=0; iMod<260; iMod++){
201 hvdriftl[iMod]->Write();
202 hvdriftr[iMod]->Write();
203 Float_t modid=iMod+240;
204 if(hvdriftl[iMod]->GetEntries()>0){
205 Float_t avevell=hvdriftl[iMod]->GetMean();
206 Float_t rmsvell=hvdriftl[iMod]->GetRMS();
207 if(avevell > 5.5 && avevell < 8.5){
208 gvvsmod0->SetPoint(ipt0,modid,avevell);
209 gvvsmod0->SetPointError(ipt0,0,rmsvell);
210 Float_t mob=avevell*1.E5/Edrift;
211 Float_t temper=293.15*TMath::Power((mob/1350.),-1/2.4);
212 gtvsmod0->SetPoint(ipt0,modid,temper);
216 if(hvdriftr[iMod]->GetEntries()>0){
217 Float_t avevelr=hvdriftr[iMod]->GetMean();
218 Float_t rmsvelr=hvdriftr[iMod]->GetRMS();
219 if(avevelr > 5.5 && avevelr < 8.5){
220 gvvsmod1->SetPoint(ipt1,modid,avevelr);
221 gvvsmod1->SetPointError(ipt1,0,rmsvelr);
222 Float_t mob=avevelr*1.E5/Edrift;
223 Float_t temper=293.15*TMath::Power((mob/1350.),-1./2.4);
224 gtvsmod1->SetPoint(ipt1,modid,temper);
229 gvvsmod0->SetName("gvvsmod0");
230 gvvsmod1->SetName("gvvsmod1");
231 gtvsmod0->SetName("gtvsmod0");
232 gtvsmod1->SetName("gtvsmod1");
240 TCanvas* c8=new TCanvas("c8","Drift Speed vs. mod");
241 gvvsmod0->SetTitle("");
242 gvvsmod1->SetTitle("");
243 gvvsmod0->SetMarkerStyle(20);
244 gvvsmod1->SetMarkerStyle(21);
245 gvvsmod1->SetMarkerColor(2);
246 gvvsmod0->Draw("AP");
247 gvvsmod0->SetMinimum(gvmin);
248 gvvsmod0->SetMaximum(gvmax);
249 gvvsmod0->GetXaxis()->SetTitle("Module Number");
251 sprintf(title,"Vdrift at injector pad %d",jpad);
252 gvvsmod0->GetYaxis()->SetTitle(title);
253 gvvsmod1->Draw("PSAME");
254 TLatex* tleft=new TLatex(0.7,0.82,"Side 0");
256 tleft->SetTextColor(1);
258 TLatex* tright=new TLatex(0.7,0.75,"Side 1");
260 tright->SetTextColor(2);
263 TLine *lin=new TLine(323,gvmin,323,gvmax);
264 lin->SetLineColor(4);
267 c8->SaveAs("VdriftVsMod.gif");
269 TCanvas* c8t=new TCanvas("c8t","Temeprature vs. mod");
270 gtvsmod0->SetTitle("");
271 gtvsmod1->SetTitle("");
272 gtvsmod0->SetMarkerStyle(20);
273 gtvsmod1->SetMarkerStyle(21);
274 gtvsmod1->SetMarkerColor(2);
275 gtvsmod0->Draw("AP");
276 gtvsmod0->SetMinimum(gtmin);
277 gtvsmod0->SetMaximum(gtmax);
278 gtvsmod0->GetXaxis()->SetTitle("Module Number");
279 sprintf(title,"Estimated Temperature (K)");
280 gtvsmod0->GetYaxis()->SetTitle(title);
281 gtvsmod1->Draw("PSAME");
284 TLine *lint=new TLine(323,gtmin,323,gtmax);
285 lint->SetLineColor(4);
288 c8t->SaveAs("TempVsMod.gif");
290 TCanvas* c9=new TCanvas("c9","Injector status");
293 hanst->GetXaxis()->SetTitle("Injector pad status");
294 hanst->GetXaxis()->CenterTitle();
295 c9->SaveAs("InjStatus.gif");
297 // TCanvas* c10=new TCanvas("c10","Pad status 7",1200,600);
298 // hpad7l->SetStats(0);
299 // hpad7r->SetStats(0);
303 // hpad7l->GetXaxis()->SetTitle("Side Left -- Pad number");
304 // hpad7l->GetXaxis()->CenterTitle();
305 // hpad7l->GetYaxis()->SetTitle("Number of status 7");
308 // hpad7r->GetXaxis()->SetTitle("Side Right -- Pad number");
309 // hpad7r->GetXaxis()->CenterTitle();
310 // hpad7r->GetYaxis()->SetTitle("Number of status 7");
311 // printf("Side 0, maximum pad=%d\n",hpad7l->GetMaximumBin());
312 // printf("Side 1, maximum pad=%d\n",hpad7r->GetMaximumBin());
317 void AnalyzeSDDInjectorsAllMod(Int_t nrun, Int_t n2, Char_t* dir="LHC08d_SDD", Int_t nDDL=0, Int_t firstEv=15, Int_t lastEv=15){
318 TGrid::Connect("alien:",0,0,"t");
320 sprintf(filnam,"alien:///alice/data/2008/%s/%09d/raw/08%09d%03d.10.root",dir,nrun,nrun,n2);
321 printf("Open file %s\n",filnam);
322 AnalyzeSDDInjectorsAllMod(filnam,nDDL,firstEv,lastEv);