fixed the tainted variables
[u/mrichter/AliRoot.git] / ITS / ShowCalibrationSDD.C
CommitLineData
40b3a8c7 1#if !defined(__CINT__) || defined(__MAKECINT__)
2#include <TFile.h>
3#include <TH1F.h>
3615e762 4#include <TH2I.h>
40b3a8c7 5#include <TGraph.h>
e34418c7 6#include <TExec.h>
40b3a8c7 7#include <TStyle.h>
551eb942 8#include <TString.h>
9#include <TSystem.h>
40b3a8c7 10#include <TGrid.h>
3615e762 11#include <TLine.h>
40b3a8c7 12#include <TCanvas.h>
13#include <TObjArray.h>
14#include "AliCDBEntry.h"
15#include "AliITSCalibrationSDD.h"
3615e762 16#include "AliITSgeomTGeo.h"
40b3a8c7 17#endif
18
19// Macro to plot the calibration parameters from the OCDB file
20// created from PEDESTAL and PULSER runs (OCDB/ITS/Calib/CalibSDD)
21// Two methods ShowCalibrationSDD:
22// - the first takes the name of the file to be displayed
23// - the second builds the alien path+name from run number and file version
24//
25// Origin: F. Prino (prino@to.infn.it)
26
e34418c7 27void MakePalette(){
28 Int_t palette[3]={kGray,2,3};
29 gStyle->SetPalette(3,palette);
30}
31
551eb942 32void ShowCalibrationSDD(Char_t *filnam="$ALICE_ROOT/OCDB/ITS/Calib/CalibSDD/Run0_9999999_v0_s0.root", Int_t iMod=0){
40b3a8c7 33
34
35 TFile *f=TFile::Open(filnam);
36 AliCDBEntry *ent=(AliCDBEntry*)f->Get("AliCDBEntry");
296ee458 37 TH2I* hlay3=new TH2I("hlay3","Layer 3",12,-0.5,5.5,14,-0.5,13.5);
3615e762 38 hlay3->GetXaxis()->SetTitle("Detector");
39 hlay3->GetYaxis()->SetTitle("Ladder");
40 hlay3->GetXaxis()->SetTickLength(0);
41 hlay3->GetYaxis()->SetTickLength(0);
42 hlay3->SetStats(0);
43 hlay3->SetMinimum(-1);
296ee458 44 TH2I* hlay4=new TH2I("hlay4","Layer 4",16,-0.5,7.5,22,-0.5,21.5);
3615e762 45 hlay4->GetXaxis()->SetTitle("Detector");
46 hlay4->GetYaxis()->SetTitle("Ladder");
47 hlay4->GetXaxis()->SetTickLength(0);
48 hlay4->GetYaxis()->SetTickLength(0);
49 hlay4->GetYaxis()->SetTitle("Ladder");
50 hlay4->SetStats(0);
51 hlay4->SetMinimum(-1);
9c3758ab 52 TH2I* hdeadlay3=new TH2I("hdlay3","Layer 3",6,-0.5,5.5,14,-0.5,13.5);
e34418c7 53 hdeadlay3->GetXaxis()->SetTitle("Detector");
54 hdeadlay3->GetYaxis()->SetTitle("Ladder");
55 hdeadlay3->GetXaxis()->SetTickLength(0);
56 hdeadlay3->GetYaxis()->SetTickLength(0);
57 hdeadlay3->SetStats(0);
58 hdeadlay3->SetMinimum(-1.);
9c3758ab 59 TH2I* hdeadlay4=new TH2I("hdlay4","Layer 4",8,-0.5,7.5,22,-0.5,21.5);
e34418c7 60 hdeadlay4->GetXaxis()->SetTitle("Detector");
61 hdeadlay4->GetYaxis()->SetTitle("Ladder");
62 hdeadlay4->GetXaxis()->SetTickLength(0);
63 hdeadlay4->GetYaxis()->SetTickLength(0);
64 hdeadlay4->GetYaxis()->SetTitle("Ladder");
65 hdeadlay4->SetStats(0);
66 hdeadlay4->SetMinimum(-1.);
3615e762 67
40b3a8c7 68 TObjArray *calSDD = (TObjArray *)ent->GetObject();
69 printf("Entries in array=%d\n",calSDD->GetEntriesFast());
70 TH1F* hmodstatus=new TH1F("hmodstatus","",260,0.5,260.5);
71 TH1F* hnbadch=new TH1F("hnbadch","",260,0.5,260.5);
72 TH1F* hbase=new TH1F("hbase","",60,0.5,120.5);
aa5cbbc5 73 TH2F* hbasemod=new TH2F("hbasemod","",260,239.5,499.5,50,0.,100.);
40b3a8c7 74 TH1F* hnoise=new TH1F("hnoise","",100,0.,7.);
aa5cbbc5 75 TH2F* hnoisemod=new TH2F("hnoisemod","",260,239.5,499.5,50,0.,10.);
40b3a8c7 76 TH1F* hgain=new TH1F("hgain","",100,0.,4.);
aa5cbbc5 77 TH2F* hgainmod=new TH2F("hgainmod","",260,239.5,499.5,50,0.,4.);
40b3a8c7 78 TH1F* hchstatus=new TH1F("hchstatus","",2,-0.5,1.5);
aa5cbbc5 79
80
40b3a8c7 81 AliITSCalibrationSDD *cal;
b3ba5bd1 82 Int_t badModCounter3=0;
83 Int_t badModCounter4=0;
8b452ac7 84 Int_t badHybridCounter3=0;
85 Int_t badHybridCounter4=0;
b3ba5bd1 86 Int_t badAnodeCounter3=0;
87 Int_t badAnodeCounter4=0;
88 Int_t badAnodeCounterGoodMod3=0;
89 Int_t badAnodeCounterGoodMod4=0;
8b452ac7 90 Int_t badAnodeCounterGoodHybrid3=0;
91 Int_t badAnodeCounterGoodHybrid4=0;
b3ba5bd1 92 Int_t badAnodeCounterGoodModAndChip3=0;
93 Int_t badAnodeCounterGoodModAndChip4=0;
94 Int_t badChipCounter3=0;
95 Int_t badChipCounter4=0;
40b3a8c7 96 for(Int_t i=0; i<260; i++){
97 cal=(AliITSCalibrationSDD*)calSDD->At(i);
98 if(cal==0) continue;
99 printf("Module %d (%d) status = ",i,i+240);
3615e762 100 Int_t lay,lad,det;
101 AliITSgeomTGeo::GetModuleId(i+240,lay,lad,det);
296ee458 102 Int_t index=1+(det-1)*2;
b3ba5bd1 103 if(cal->IsBad()){
104 printf("BAD\t");
3615e762 105 if(lay==3){
106 badModCounter3++;
8b452ac7 107 badHybridCounter3+=2;
296ee458 108 hlay3->SetBinContent(index,lad,0);
109 hlay3->SetBinContent(index+1,lad,0);
3615e762 110 }else if(lay==4){
111 badModCounter4++;
8b452ac7 112 badHybridCounter4+=2;
296ee458 113 hlay4->SetBinContent(index,lad,0);
114 hlay4->SetBinContent(index+1,lad,0);
3615e762 115 }
b3ba5bd1 116 hmodstatus->SetBinContent(i+1,0);
3615e762 117 }else{
b3ba5bd1 118 printf("OK\t");
119 hmodstatus->SetBinContent(i+1,1);
3615e762 120 if(lay==3){
121 badAnodeCounterGoodMod3+=cal->GetDeadChannels();
296ee458 122 if(cal->IsChipBad(0) && cal->IsChipBad(1) && cal->IsChipBad(2) && cal->IsChipBad(3)){
123 hlay3->SetBinContent(index,lad,0);
8b452ac7 124 badHybridCounter3++;
296ee458 125 }else{
126 hlay3->SetBinContent(index,lad,1);
8b452ac7 127 for(Int_t iAn=0; iAn<256; iAn++){
128 if(cal->IsBadChannel(iAn)) badAnodeCounterGoodHybrid3++;
129 }
296ee458 130 }
131 if(cal->IsChipBad(4) && cal->IsChipBad(5) && cal->IsChipBad(6) && cal->IsChipBad(7)){
132 hlay3->SetBinContent(index+1,lad,0);
8b452ac7 133 badHybridCounter3++;
296ee458 134 }else{
135 hlay3->SetBinContent(index+1,lad,1);
8b452ac7 136 for(Int_t iAn=256; iAn<512; iAn++){
137 if(cal->IsBadChannel(iAn)) badAnodeCounterGoodHybrid3++;
138 }
296ee458 139 }
3615e762 140 }else{
141 badAnodeCounterGoodMod4+=cal->GetDeadChannels();
296ee458 142 if(cal->IsChipBad(0) && cal->IsChipBad(1) && cal->IsChipBad(2) && cal->IsChipBad(3)){
143 hlay4->SetBinContent(index,lad,0);
8b452ac7 144 badHybridCounter4++;
296ee458 145 }else{
146 hlay4->SetBinContent(index,lad,1);
8b452ac7 147 for(Int_t iAn=0; iAn<256; iAn++){
148 if(cal->IsBadChannel(iAn)) badAnodeCounterGoodHybrid4++;
149 }
296ee458 150 }
151 if(cal->IsChipBad(4) && cal->IsChipBad(5) && cal->IsChipBad(6) && cal->IsChipBad(7)){
152 hlay4->SetBinContent(index+1,lad,0);
8b452ac7 153 badHybridCounter4++;
296ee458 154 }else{
155 hlay4->SetBinContent(index+1,lad,1);
8b452ac7 156 for(Int_t iAn=256; iAn<512; iAn++){
157 if(cal->IsBadChannel(iAn)) badAnodeCounterGoodHybrid4++;
158 }
296ee458 159 }
3615e762 160 }
8b452ac7 161 }
40b3a8c7 162 printf(" Chip Status (0=OK, 1=BAD): ");
b3ba5bd1 163 for(Int_t ic=0; ic<8;ic++){
164 printf("%d ",cal->IsChipBad(ic));
165 if(cal->IsChipBad(ic) && !cal->IsBad()){
166 if(i<84) badChipCounter3++;
167 else badChipCounter4++;
168 }
169 }
bc031ee2 170 printf(" # bad anodes = %d ",cal->GetDeadChannels());
40b3a8c7 171 if(cal->IsAMAt20MHz()) printf(" 20 MHz sampling");
172 else printf(" 40 MHz sampling");
aa5cbbc5 173 printf(" Threshold L %d %d H %d %d\n",cal->GetZSLowThreshold(0),cal->GetZSLowThreshold(1),cal->GetZSHighThreshold(0),cal->GetZSHighThreshold(1));
b3ba5bd1 174 if(i<84) badAnodeCounter3+=cal->GetDeadChannels();
175 else badAnodeCounter4+=cal->GetDeadChannels();
40b3a8c7 176 hnbadch->SetBinContent(i+1,cal->GetDeadChannels());
e34418c7 177 if(lay==3) hdeadlay3->SetBinContent(det,lad,cal->GetDeadChannels());
178 if(lay==4) hdeadlay4->SetBinContent(det,lad,cal->GetDeadChannels());
40b3a8c7 179 for(Int_t iAn=0; iAn<512; iAn++){
b3ba5bd1 180 Int_t ic=cal->GetChip(iAn);
181 if(!cal->IsChipBad(ic) && !cal->IsBad() && cal->IsBadChannel(iAn)){
182 if(i<84) badAnodeCounterGoodModAndChip3++;
183 else badAnodeCounterGoodModAndChip4++;
184 }
40b3a8c7 185 Float_t base=cal->GetBaseline(iAn);
186 Float_t noise=cal->GetNoiseAfterElectronics(iAn);
187 Float_t gain=cal->GetChannelGain(iAn);
188 if(cal->IsBadChannel(iAn)) hchstatus->Fill(0);
266a4b47 189 if(!cal->IsBadChannel(iAn) && !cal->IsChipBad(ic) && !cal->IsBad() ){
40b3a8c7 190 hbase->Fill(base);
aa5cbbc5 191 hbasemod->Fill(i+240,base);
40b3a8c7 192 hchstatus->Fill(1);
193 hnoise->Fill(noise);
aa5cbbc5 194 hnoisemod->Fill(i+240,noise);
40b3a8c7 195 hgain->Fill(gain);
aa5cbbc5 196 hgainmod->Fill(i+240,gain);
40b3a8c7 197 }
198 }
199 }
b3ba5bd1 200 Int_t totbad3=badModCounter3*512+badChipCounter3*64+badAnodeCounterGoodModAndChip3;
201 Int_t tot3=6*14*512;
202 Float_t fracbad3=(Float_t)totbad3/(Float_t)tot3;
aa5cbbc5 203 Float_t fracgm3=(Float_t)(84.-badModCounter3)/84.;
204 Float_t fracgm4=(Float_t)(176.-badModCounter4)/176.;
8b452ac7 205 Float_t fracgh3=(Float_t)(84.*2.-badHybridCounter3)/84./2.;
206 Float_t fracgh4=(Float_t)(176.*2-badHybridCounter4)/176./2.;
aa5cbbc5 207 Float_t fraccgm3=1.-(Float_t)(badAnodeCounterGoodModAndChip3+badChipCounter3*64)/(512.*(Float_t)(84.-badModCounter3));
208 Float_t fraccgm4=1.-(Float_t)(badAnodeCounterGoodModAndChip4+badChipCounter4*64)/(512.*(Float_t)(176.-badModCounter4));
8b452ac7 209 Float_t fraccgh3=1.-(Float_t)badAnodeCounterGoodHybrid3/(256.*(84.*2.-badHybridCounter3));
210 Float_t fraccgh4=1.-(Float_t)badAnodeCounterGoodHybrid4/(256.*(176.*2.-badHybridCounter4));
b3ba5bd1 211 Int_t totbad4=badModCounter4*512+badChipCounter4*64+badAnodeCounterGoodModAndChip4;
212 Int_t tot4=8*22*512;
213 Float_t fracbad4=(Float_t)totbad4/(Float_t)tot4;
214 Float_t fractot=(Float_t)(totbad3+totbad4)/(Float_t)(tot3+tot4);
215 printf("----------------------Summary----------------------\n");
216 printf("---- Layer 3 ----\n");
217 printf("# of bad modules = %d\n",badModCounter3);
218 printf("# of bad chips in good modules = %d\n",badChipCounter3);
8b452ac7 219 printf("# of bad hybrids = %d\n",badHybridCounter3);
220 printf("# of bad anodes in good hybrids = %d\n",badAnodeCounterGoodHybrid3);
aa5cbbc5 221 printf("Fraction of Good modules=%f\n",fracgm3);
8b452ac7 222 printf("Fraction of Good hybrids=%f\n",fracgh3);
223 printf("Fraction of good anodes in good modules = %f\n",fraccgm3);
224 printf("Fraction of good anodes in good hybrids = %f\n",fraccgh3);
225 printf("Fraction of bads (anodes+chips+mod) = %f\n",fracbad3);
b3ba5bd1 226 printf("---- Layer 4 ----\n");
227 printf("# of bad modules = %d\n",badModCounter4);
228 printf("# of bad chips in good modules = %d\n",badChipCounter4);
8b452ac7 229 printf("# of bad hybrids = %d\n",badHybridCounter4);
230 printf("# of bad anodes in good hybrids = %d\n",badAnodeCounterGoodHybrid4);
aa5cbbc5 231 printf("Fraction of Good modules=%f\n",fracgm4);
8b452ac7 232 printf("Fraction of Good hybrids=%f\n",fracgh4);
233 printf("Fraction of good anodes in good modules = %f\n",fraccgm4);
234 printf("Fraction of good anodes in good hybrids = %f\n",fraccgh4);
235 printf("Fraction of bads (anodes+chips+mod) = %f\n",fracbad4);
b3ba5bd1 236 printf("---- Total ----\n");
237 printf("# of bad modules = %d\n",badModCounter3+badModCounter4);
238 printf("# of bad chips in good modules = %d\n",badChipCounter3+badChipCounter4);
239 printf("# of bad anodes in good modules+chips = %d\n",badAnodeCounterGoodModAndChip3+badAnodeCounterGoodModAndChip4);
240 printf("Fraction of bads (anodes+chips+mod) = %f\n",fractot);
241 printf("---------------------------------------------------\n");
242
243
e34418c7 244 TLine* lin=new TLine(0,0,0,23);
245 TExec *ex1 = new TExec("ex1","MakePalette();");
246 TExec *ex2 = new TExec("ex2","gStyle->SetPalette(1);");
247
248 TCanvas* clay=new TCanvas("clay","Layer status",900,600);
249 clay->Divide(2,1);
250 clay->cd(1);
251 hlay3->Draw("col");
252 ex1->Draw();
253 hlay3->DrawCopy("col same");
254 for(Int_t i=0;i<6;i++){
255 lin->SetY1(-0.5);
256 lin->SetY2(13.5);
257 lin->SetX1(i+0.5);
258 lin->SetX2(i+0.5);
259 lin->DrawClone();
260 }
261 for(Int_t i=0;i<14;i++){
262 lin->SetX1(-0.5);
263 lin->SetX2(5.5);
264 lin->SetY1(i+0.5);
265 lin->SetY2(i+0.5);
266 lin->DrawClone();
267 }
268 clay->cd(2);
269 hlay4->DrawCopy("col");
270 for(Int_t i=0;i<8;i++){
271 lin->SetY1(-0.5);
272 lin->SetY2(21.5);
273 lin->SetX1(i+0.5);
274 lin->SetX2(i+0.5);
275 lin->DrawClone();
276 }
277 for(Int_t i=0;i<22;i++){
278 lin->SetX1(-0.5);
279 lin->SetX2(7.5);
280 lin->SetY1(i+0.5);
281 lin->SetY2(i+0.5);
282 lin->DrawClone();
283 }
284
e34418c7 285
286
287
288 TCanvas *c0b=new TCanvas("c0b","Bad Channels",900,600);
289 c0b->Divide(2,1);
290 c0b->cd(1);
291 hdeadlay3->DrawCopy("colz");
292 ex2->Draw();
293 hdeadlay3->DrawCopy("colz same");
3615e762 294 for(Int_t i=0;i<6;i++){
295 lin->SetY1(-0.5);
296 lin->SetY2(13.5);
297 lin->SetX1(i+0.5);
298 lin->SetX2(i+0.5);
299 lin->DrawClone();
300 }
301 for(Int_t i=0;i<14;i++){
302 lin->SetX1(-0.5);
303 lin->SetX2(5.5);
304 lin->SetY1(i+0.5);
305 lin->SetY2(i+0.5);
306 lin->DrawClone();
307 }
e34418c7 308 c0b->cd(2);
309 hdeadlay4->DrawCopy("colz");
310 ex2->Draw();
311 hdeadlay4->DrawCopy("colz same");
3615e762 312 for(Int_t i=0;i<8;i++){
313 lin->SetY1(-0.5);
314 lin->SetY2(21.5);
315 lin->SetX1(i+0.5);
316 lin->SetX2(i+0.5);
317 lin->DrawClone();
318 }
319 for(Int_t i=0;i<22;i++){
320 lin->SetX1(-0.5);
321 lin->SetX2(7.5);
322 lin->SetY1(i+0.5);
323 lin->SetY2(i+0.5);
324 lin->DrawClone();
325 }
326
327
e34418c7 328
329 TCanvas *c1=new TCanvas("c1","Anode calibration",800,800);
330 c1->Divide(2,2);
331 c1->cd(1);
332 hbase->Draw();
333 hbase->GetXaxis()->SetTitle("Baseline after equalization");
334 hbase->GetXaxis()->CenterTitle();
335 c1->cd(2);
336 hnoise->Draw();
337 hnoise->GetXaxis()->SetTitle("Noise");
338 hnoise->GetXaxis()->CenterTitle();
339 c1->cd(3);
340 hgain->Draw();
341 hgain->GetXaxis()->SetTitle("Gain");
342 hgain->GetXaxis()->CenterTitle();
343 c1->cd(4);
344 hchstatus->Draw();
345 hchstatus->GetXaxis()->SetTitle("Anode status (0=bad, 1=OK)");
346 hchstatus->GetXaxis()->CenterTitle();
347
aa5cbbc5 348 TCanvas *c1m=new TCanvas("c1m","Calib. vs. mod",1000,800);
349 c1m->Divide(2,2);
350 c1m->cd(1);
351 gPad->SetRightMargin(0.14);
352 hbasemod->SetStats(0);
353 hbasemod->Draw("colz");
354 hbasemod->GetXaxis()->SetTitle("Module Number");
355 hbasemod->GetYaxis()->SetTitle("Baseline");
356 c1m->cd(2);
357 gPad->SetRightMargin(0.14);
358 hnoisemod->SetStats(0);
359 hnoisemod->Draw("colz");
360 hnoisemod->GetXaxis()->SetTitle("Module Number");
361 hnoisemod->GetYaxis()->SetTitle("Noise");
362 c1m->cd(3);
363 gPad->SetRightMargin(0.14);
364 hgainmod->SetStats(0);
365 hgainmod->Draw("colz");
366 hgainmod->GetXaxis()->SetTitle("Module Number");
367 hgainmod->GetYaxis()->SetTitle("Gain");
368 c1m->cd(4);
369 hnbadch->Scale(1/512.);
370 hnbadch->SetMarkerStyle(20);
371 hnbadch->SetMarkerSize(0.8);
372 hnbadch->SetStats(0);
373 hnbadch->Draw("P");
374 hnbadch->GetXaxis()->SetTitle("Module number");
375 hnbadch->GetYaxis()->SetTitle("Fraction of bad anodes");
e34418c7 376
377
378
379
380
381
40b3a8c7 382
b3ba5bd1 383
384 // Plot quantities for specified module
385
40b3a8c7 386 cal=(AliITSCalibrationSDD*)calSDD->At(iMod);
387 if(cal==0) return;
388 printf("-----------------------------------\n");
389 printf("Module %d status = ",iMod);
390 if(cal->IsBad()) printf("BAD\n");
391 else printf("OK\n");
392 printf(" Chip Status (0=OK, 1=BAD): ");
393 for(Int_t ic=0; ic<8;ic++) printf("%d ",cal->IsChipBad(ic));
394 printf("\n");
b3ba5bd1 395 printf(" Number of bad anodes =%d\n",cal->GetDeadChannels());
40b3a8c7 396 printf("-----------------------------------\n");
397 Int_t ipt=0;
398 TGraph *gbad=new TGraph(0);
399 gbad->SetTitle("Bad Channels");
400 TGraph *gbase=new TGraph(0);
401 gbase->SetTitle("Baselines");
402 TGraph *gnoi=new TGraph(0);
403 gnoi->SetTitle("Noise");
404 TGraph *ggain=new TGraph(0);
405 ggain->SetTitle("Gain");
406 for(Int_t iAn=0; iAn<512; iAn++){
407 Float_t bad=1;
408 if(cal->IsBadChannel(iAn)) bad=0;
409 Float_t base=cal->GetBaseline(iAn);
410 Float_t noise=cal->GetNoiseAfterElectronics(iAn);
411 Float_t gain=cal->GetChannelGain(iAn);
412 gbad->SetPoint(ipt,(Float_t)iAn,bad);
413 gbase->SetPoint(ipt,(Float_t)iAn,base);
414 ggain->SetPoint(ipt,(Float_t)iAn,gain);
415 gnoi->SetPoint(ipt,(Float_t)iAn,noise);
416 ipt++;
417 }
418 Char_t ctit[100];
419 sprintf(ctit,"Module %d",iMod);
420
421 TCanvas *c2=new TCanvas("c2",ctit,1200,800);
422 c2->Divide(2,2);
423
424 c2->cd(1);
425 gbase->SetMarkerStyle(7);
426 gbase->Draw("AP");
427 gbase->GetXaxis()->SetTitle("Anode Number");
428 gbase->GetYaxis()->SetTitle("Baseline after equalization");
429 c2->cd(2);
430 gnoi->SetMarkerStyle(7);
431 gnoi->Draw("AP");
432 gnoi->GetXaxis()->SetTitle("Anode Number");
433 gnoi->GetYaxis()->SetTitle("Noise");
434 c2->cd(3);
435 ggain->SetMarkerStyle(7);
436 ggain->Draw("AP");
437 ggain->GetXaxis()->SetTitle("Anode Number");
438 ggain->GetYaxis()->SetTitle("Gain");
439 c2->cd(4);
440 gbad->SetMarkerStyle(7);
441 gbad->Draw("AP");
442 gbad->SetMinimum(-0.1);
443 gbad->GetXaxis()->SetTitle("Anode Number");
444 gbad->GetYaxis()->SetTitle("Anode Status (1=OK, 0=bad)");
445}
446
2420973e 447void ShowCalibrationSDD(Int_t nrun, Int_t year=2010, Int_t nmod=0){
40b3a8c7 448 TGrid::Connect("alien:",0,0,"t");
551eb942 449 TString cmd=Form("gbbox find \"/alice/data/%d/OCDB/ITS/Calib/CalibSDD\" \"Run%d*.root\" > run.txt",year,nrun);
450 gSystem->Exec(cmd.Data());
451 Char_t filnam[200],filnamalien[200];
452 FILE* runtxt=fopen("run.txt","r");
453 fscanf(runtxt,"%s\n",filnam);
454 if(!strstr(filnam,"/alice/data/")){
455 printf("Bad run number\n");
456 gSystem->Exec("rm run.txt");
457 return;
458 }
459 sprintf(filnamalien,"alien://%s",filnam);
460
461 printf("Open file: %s\n",filnamalien);
462 ShowCalibrationSDD(filnamalien,nmod);
463 fclose(runtxt);
464 gSystem->Exec("rm run.txt");
40b3a8c7 465}