StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
plTwCal.C
1 // compares gains from various calibrations for fixed eta bin
2 const int mxEta=12, mxPhi=60, mxVer=5;
3 float g[mxVer][mxEta][mxPhi];
4 float eg[mxVer][mxEta][mxPhi];
5 TH1F *hX[mxEta];
6 int sec1=1, sec2=12;
7 int iphi1=5*(sec1-1);
8 int iphi2=5*(sec2);
9 
10 float slFac[mxEta]={-2.26,-2.64,-2.88,-2.92,-3.00,-3.36,
11  -3.60,-3.64,-3.98,-4.30,-4.44,-4.41};
12 float iGain[mxEta];
13 enum { gIdeal=0, gAu200=1, gAu62=2, gFinal=3, gSlpp=4};
14 
15 plTwCal(int keta=0 ){
16  memset(g,0,sizeof(g));
17  memset(eg,0,sizeof(eg));
18  gStyle->SetOptStat(0);
19  initHist();
20  TLine *ln1=new TLine(0,0,60,60); ln1->SetLineColor(kGreen);ln1->SetLineWidth(1);
21  TLine *lnV=new TLine(1,0,1,20); lnV->SetLineColor(kMagenta);lnV->SetLineWidth(1);
22 
23  // readG(gIdeal,"../iterIdeal/");
24  // readG(gFinal,"/star/u/balewski/WWW/tmp-iter12-mc/",'T');
25  //..... patch for per/post gains
26  // readG(gFinal,"/star/u/balewski/WWW-E/calibration/run5/absMipCal/iter6-mc-sec1to3/",'R');
27  readG(gFinal,"/star/u/wissink/WWW/cal2006/tablesTowers/",'T');
28  // plGainsRaw(gFinal,'T');
29  plAllGains(gFinal);
30 
31  return;
32 
33  // writeG("./",gSlpp); return;// be carefull
34 
35  if(!keta) {
36  c=new TCanvas("aa","aa",600,800); c->Divide(3,4);
37  c2=new TCanvas("bb","bb",600,800); c2->Divide(3,4);
38  } else {
39  c=new TCanvas("aa","aa",400,400); c->Divide(1,1);
40  c2=new TCanvas("bb","bb",300,300); c2->Divide(1,1);
41  }
42 
43  int ieta=1;
44  for(ieta=0;ieta<12;ieta++) {
45  if(!keta) c->cd(ieta+1);
46  else {
47  if(keta!=ieta+1) continue;
48  c->cd(1);
49  }
50  //doCorr1(gSlpp,gFinal,ieta);
51  ln1->Draw();
52  drawIdeal(ieta);
53  gPad->SetGrid(1,1);
54  // continue;
55  if(!keta) c2->cd(ieta+1);
56  else c2->cd(1);
57  hX[ieta]->Fit("gaus","WQ"); lnV->Draw();
58  //if(ieta>1) break;
59  prGainChange(gSlpp,ieta);
60 
61  }
62 }
63 
64 
65 //========================
66 //========================
67 int readG( int iv, char *path, char cT='T') {
68  char fname[200];
69 
70  // use one common file for input
71  sprintf(fname,"%sgains%c-allSect.dat",path,cT);
72  printf("reading gains from %s\n",fname);
73  FILE *fd=fopen(fname, "r"); assert(fd);
74 
75  bool isSlope= strstr(path,"iter4xx")!=0;
76 
77  int sec=0;
78  for(sec=sec1;sec<=sec2;sec++) {
79  //if(isMipUxV && (sec<5 || sec>8) ) continue;
80 
81 #if 0
82  char fname[200];
83  sprintf(fname,"%sgains%02dtower.dat",path,sec);
84  if(isSlope)sprintf(fname,"%ssect%d.txt",path,sec);
85  printf("reading gains from %s\n",fname);
86  FILE *fd=fopen(fname, "r"); assert(fd);
87 #endif
88 
89  const int mx=1000;
90  char buf[mx], name[100];
91  float gx, egx;
92 
93  while(1) {
94  char * ret=fgets(buf,mx,fd);
95  if(ret==0) break;
96  if(buf[0]=='#') continue;
97  if(strlen(buf)<=1) continue;
98  //printf("=%s=\n",buf);
99  int n=sscanf(buf,"%s %f %f",name,&gx, &egx);
100  assert(n==3);
101  assert(name[2]==cT);
102  int isec=atoi(name)-1;
103  int isub=name[3]-'A';
104  int ieta=atoi(name+4)-1;
105 
106  int iphi=5*isec+isub;
107  printf("%s %d %d %d %d\n",name, isec,isub,ieta,iphi);
108  if(gx==0) continue;
109  if(isSlope&&0) {// not used any more
110  float r=fabs(egx/gx);
111  gx=slFac[ieta]/gx;
112  egx=r*gx;
113  }
114 
115  g[iv][ieta][iphi]=gx;
116  eg[iv][ieta][iphi]=egx;
117  }// loop over towers
118  }// loop over sectors
119 
120 }
121 
122 
123 //========================
124 //========================
125 int plAllGains(int v1) {
126  TGraphErrors *gr=new TGraphErrors;
127  gr->SetMarkerStyle(21);
128  gr->SetMarkerColor(kRed);
129  gr->SetMarkerSize(0.5);
130  char tit[200];
131  int ieta=4;
132 
133  sprintf(tit,"2006 EEMC tower gains from MIPs w/ UxV, day89; eta bin; gain (ch/GeV)");
134  //sprintf(tit,"Reco EEMC tower gains from M-C, SF=5%; eta bin; gain (ch/GeV)");
135 
136  gr->SetTitle(tit);
137  // line below added - sww 3/8/07
138  TString tt="T"; tt+="-shower";
139  h=new TH2F(tt,tit,10,0.91,13.1,10,0,60);
140 
141  // line below added - sww 3/8/07
142  c=new TCanvas(tt,tt,900,600);
143  int iphi;
144 
145  for(ieta=0; ieta<mxEta;ieta++)
146  for(iphi=iphi1;iphi<iphi2;iphi++) {
147  int sec=1+(iphi/5);
148  char sub='A'+iphi%5;
149 
150  float g1=g[v1][ieta][iphi];
151  float eg1=eg[v1][ieta][iphi];
152  float x=ieta+1.+iphi/60.;
153  int n=gr->GetN();
154  gr->SetPoint(n,x,g1);
155  gr->SetPointError(n,0,eg1);
156  }
157  // gr->Print();
158 
159  h->Draw(); gr->Draw("P");
160  //gr->Draw("PA");
161 
162  for(ieta=0; ieta<mxEta;ieta++) drawIdeal(ieta,1.1, 1);
163  gPad->SetGridy(0);
164  gPad->SetGridx(0);
165  // line below added - sww 3/8/07
166  c->Print(tt+".gif");
167 }
168 
169 
170 
171 //========================
172 //========================
173 int plGainsRaw(int v1, char cT='X') {
174  TGraphErrors *gr=new TGraphErrors;
175  gr->SetMarkerStyle(8);
176  gr->SetMarkerColor(kRed);
177  gr->SetMarkerSize(0.5);
178  char tit[200];
179  int ieta=4;
180 
181  sprintf(tit,"Reconstructed %c-shower gains for M-C , INPUT=23000; eta bin; gain (ch/GeV)",cT);
182 
183  gr->SetTitle(tit);
184  TString tt=cT; tt+="-shower";
185  h=new TH2F(tt,tit,10,0.91,13.1,10,0,40000);
186 
187  c=new TCanvas(tt,tt,500,400);
188  int iphi;
189 
190  for(ieta=0; ieta<mxEta;ieta++)
191  for(iphi=iphi1;iphi<iphi2;iphi++) {
192  int sec=1+(iphi/5);
193  char sub='A'+iphi%5;
194 
195  float g1=g[v1][ieta][iphi];
196  float eg1=eg[v1][ieta][iphi];
197  if(g1<=10) continue;
198  float x=ieta+1.+iphi/60.;
199  int n=gr->GetN();
200  gr->SetPoint(n,x,g1);
201  gr->SetPointError(n,0,eg1);
202  }
203  // gr->Print();
204 
205  h->Draw(); gr->Draw("P");
206  //gr->Draw("PA");
207 
208  gr->Fit("pol1");
209 
210  ln=new TLine(0,23000,13,23000);
211  ln->SetLineColor(kRed);
212  ln->SetLineStyle(2);
213  ln->Draw();
214 
215  gPad->SetGridy(0);
216  gPad->SetGridx(0);
217  c->Print(tt+".gif");
218 }
219 
220 //========================
221 //========================
222 int writeG(char *path, int iv) {
223 
224  int sec=0;
225 
226  for(sec=sec1;sec<=sec2;sec++) {
227  if(drop58 && sec>=5 && sec<=8) continue;
228  char fname[200];
229  sprintf(fname,"%sgains%02dtower.dat",path,sec);
230  printf("write gains from %s\n",fname);
231  FILE *fd=fopen(fname, "w"); assert(fd);
232  fprintf(fd,"# gains from slopes pp200 from iter4, scaled to average from sector5-8, sector %d\n# name, gain, error\n",sec);
233  int ieta,isub;
234  for(isub=0;isub<5;isub++)
235  for(ieta=0;ieta<12;ieta++) {
236  int iphi=5*(sec-1)+isub;
237  fprintf(fd,"%02dT%c%02d %.2f %.2f\n",sec,'A'+isub,ieta+1,g[iv][ieta][iphi],eg[iv][ieta][iphi]);
238  //fprintf(fd,"%02dT%c%02d %.2f %.2f\n",sec,'A'+isub,ieta+1,iGain[ieta],0);
239  }
240  fclose(fd);
241  }// loop over sectors
242 }
243 
244 
245 //========================
246 //========================
247 int doCorr1(int v1, int v2 , int ieta=11) {
248  TGraphErrors *gr=new TGraphErrors;
249  gr->SetMarkerStyle(8);
250  gr->SetMarkerColor(kRed);
251  gr->SetMarkerSize(0.5);
252  char tit[200];
253  sprintf(tit,"etaBin = %d",ieta+1);
254  gr->SetTitle(tit);
255  h=new TH2F(tit,tit,10,0,50,10,0,50);
256 
257  int iphi;
258  for(iphi=iphi1;iphi<iphi2;iphi++) {
259  int sec=1+(iphi/5);
260  char sub='A'+iphi%5;
261  if(drop58 && sec>=5 && sec<=8) continue;
262 
263  float g1=g[v1][ieta][iphi];
264  float g2=g[v2][ieta][iphi];
265  float eg1=eg[v1][ieta][iphi];
266  float eg2=eg[v2][ieta][iphi];
267  if(g1==0 || g2==0) continue;
268  int n=gr->GetN();
269  gr->SetPoint(n,g1,g2);
270  gr->SetPointError(n,eg1,eg2);
271  float x=g2/g1;
272  hX[ieta]->Fill(x);
273  // pick outleyers
274 
275  if(fabs(x-1.)>0.3)
276  printf("** ");
277  else
278  printf(" ");
279 
280  printf("%02dT%c%02d %f %f %f\n",sec,sub,ieta+1,g1,g2,x);
281 
282  }
283  // gr->Print();
284  h->Draw(); gr->Draw("P");
285  //gr->Draw("PA");
286 
287 }
288 
289 //========================
290 //========================
291 int prGainChange(int v1, int ieta=11) {
292 
293  int nH=0, nL=0, nOK=0,nD=0, nTot=0;
294  float eps=0.1;
295  int iphi;
296  printf("\n HV tower gain erGain ratio (big) , eta bin=%d, ideal gain(ch/GeV)=%.2f\n",ieta+1, iGain[ieta]);
297 
298 
299  for(iphi=iphi1;iphi<iphi2;iphi++) {
300  int sec=1+(iphi/5);
301  char sub='A'+iphi%5;
302  //printf("%d %d %c\n", iphi,sec, sub);
303  if(drop58 && sec>=5 && sec<=8) continue;
304  nTot++;
305 
306  float g1=g[v1][ieta][iphi];
307  float eg1=eg[v1][ieta][iphi];
308  float r=g1/ iGain[ieta];
309  // pick outleyers
310 
311  if(g1<=0) { printf("# xx "); nD++; }
312  elseif(r>1+eps) { printf("# + "); nH++; }
313  elseif(r<1-eps) { printf("# - "); nL++; }
314  else { printf("# OK "); nOK++; }
315 
316  printf("%02dT%c%02d %4.1f %.1f %.3f",sec,sub,ieta+1,g1,eg1,r);
317 
318  if(fabs(r-1.)>0.3)
319  printf(" ** \n");
320  else
321  printf(" \n");
322 
323  }
324  printf("nH=%d nL=%d nOK=%d nD=%d nTot=%d\n",nH,nL,nOK,nD,nTot);
325  printf("<tr><th> x <td>%d <td>%d <td>%d <td>%d \n",nH,nL,nOK,nD);
326 
327 }
328 
329 //===========================
330 //===========================
331 initHist() {
332  const float maxADC=4095;
333  const float maxEt=60;
334  const float eta[mxEta]={1.95,1.855,1.765,1.675,1.59,1.51,1.435,1.365,1.3,1.235,1.17,1.115};
335 
336  char tit[200], tit2[200];
337  int ieta;
338  for(ieta=0;ieta<12;ieta++) {
339  sprintf(tit,"x%d",ieta+1);
340  sprintf(tit2,"MIPgain*slope , etaBin=%d",ieta+1);
341  hX[ieta]=new TH1F(tit,tit2,20,.5,1.5);
342  iGain[ieta]=maxADC/maxEt/cosh(eta[ieta]);
343  printf("%.3f ", iGain[ieta]);
344  }
345  printf(" <- ideal gains\n");
346 }
347 
348 
349 //=================================
350 void drawIdeal(int ieta, float fac=1.1, int flag=0) {
351  float x1=0, x2=60;
352  if(flag) { x1=ieta+1; x2=x1+1; }
353  TLine *ln0 =new TLine(x1,iGain[ieta],x2,iGain[ieta]); ln0->SetLineColor(kBlue);ln0->SetLineWidth(1); ln0->Draw();
354  if(flag) ln0->SetLineWidth(2);
355 
356  ln0 =new TLine(x1,iGain[ieta]*fac,x2,iGain[ieta]*fac); ln0->SetLineColor(kBlue);ln0->SetLineWidth(1); ln0->Draw();ln0->SetLineStyle(2);
357 
358  ln0 =new TLine(x1,iGain[ieta]/fac,x2,iGain[ieta]/fac); ln0->SetLineColor(kBlue);ln0->SetLineWidth(1); ln0->Draw();ln0->SetLineStyle(2);
359 
360 
361 }
362