00001
00002 const int mxEta=12, mxPhi=60, mxVer=5;
00003 float g[mxVer][mxEta][mxPhi];
00004 float eg[mxVer][mxEta][mxPhi];
00005 TH1F *hX[mxEta];
00006 int sec1=1, sec2=12;
00007 int iphi1=5*(sec1-1);
00008 int iphi2=5*(sec2);
00009
00010 float slFac[mxEta]={-2.26,-2.64,-2.88,-2.92,-3.00,-3.36,
00011 -3.60,-3.64,-3.98,-4.30,-4.44,-4.41};
00012 float iGain[mxEta];
00013 enum { gIdeal=0, gAu200=1, gAu62=2, gFinal=3, gSlpp=4};
00014
00015 plTwCal(int keta=0 ){
00016 memset(g,0,sizeof(g));
00017 memset(eg,0,sizeof(eg));
00018 gStyle->SetOptStat(0);
00019 initHist();
00020 TLine *ln1=new TLine(0,0,60,60); ln1->SetLineColor(kGreen);ln1->SetLineWidth(1);
00021 TLine *lnV=new TLine(1,0,1,20); lnV->SetLineColor(kMagenta);lnV->SetLineWidth(1);
00022
00023
00024
00025
00026
00027 readG(gFinal,"/star/u/wissink/WWW/cal2006/tablesTowers/",'T');
00028
00029 plAllGains(gFinal);
00030
00031 return;
00032
00033
00034
00035 if(!keta) {
00036 c=new TCanvas("aa","aa",600,800); c->Divide(3,4);
00037 c2=new TCanvas("bb","bb",600,800); c2->Divide(3,4);
00038 } else {
00039 c=new TCanvas("aa","aa",400,400); c->Divide(1,1);
00040 c2=new TCanvas("bb","bb",300,300); c2->Divide(1,1);
00041 }
00042
00043 int ieta=1;
00044 for(ieta=0;ieta<12;ieta++) {
00045 if(!keta) c->cd(ieta+1);
00046 else {
00047 if(keta!=ieta+1) continue;
00048 c->cd(1);
00049 }
00050
00051 ln1->Draw();
00052 drawIdeal(ieta);
00053 gPad->SetGrid(1,1);
00054
00055 if(!keta) c2->cd(ieta+1);
00056 else c2->cd(1);
00057 hX[ieta]->Fit("gaus","WQ"); lnV->Draw();
00058
00059 prGainChange(gSlpp,ieta);
00060
00061 }
00062 }
00063
00064
00065
00066
00067 int readG( int iv, char *path, char cT='T') {
00068 char fname[200];
00069
00070
00071 sprintf(fname,"%sgains%c-allSect.dat",path,cT);
00072 printf("reading gains from %s\n",fname);
00073 FILE *fd=fopen(fname, "r"); assert(fd);
00074
00075 bool isSlope= strstr(path,"iter4xx")!=0;
00076
00077 int sec=0;
00078 for(sec=sec1;sec<=sec2;sec++) {
00079
00080
00081 #if 0
00082 char fname[200];
00083 sprintf(fname,"%sgains%02dtower.dat",path,sec);
00084 if(isSlope)sprintf(fname,"%ssect%d.txt",path,sec);
00085 printf("reading gains from %s\n",fname);
00086 FILE *fd=fopen(fname, "r"); assert(fd);
00087 #endif
00088
00089 const int mx=1000;
00090 char buf[mx], name[100];
00091 float gx, egx;
00092
00093 while(1) {
00094 char * ret=fgets(buf,mx,fd);
00095 if(ret==0) break;
00096 if(buf[0]=='#') continue;
00097 if(strlen(buf)<=1) continue;
00098
00099 int n=sscanf(buf,"%s %f %f",name,&gx, &egx);
00100 assert(n==3);
00101 assert(name[2]==cT);
00102 int isec=atoi(name)-1;
00103 int isub=name[3]-'A';
00104 int ieta=atoi(name+4)-1;
00105
00106 int iphi=5*isec+isub;
00107 printf("%s %d %d %d %d\n",name, isec,isub,ieta,iphi);
00108 if(gx==0) continue;
00109 if(isSlope&&0) {
00110 float r=fabs(egx/gx);
00111 gx=slFac[ieta]/gx;
00112 egx=r*gx;
00113 }
00114
00115 g[iv][ieta][iphi]=gx;
00116 eg[iv][ieta][iphi]=egx;
00117 }
00118 }
00119
00120 }
00121
00122
00123
00124
00125 int plAllGains(int v1) {
00126 TGraphErrors *gr=new TGraphErrors;
00127 gr->SetMarkerStyle(21);
00128 gr->SetMarkerColor(kRed);
00129 gr->SetMarkerSize(0.5);
00130 char tit[200];
00131 int ieta=4;
00132
00133 sprintf(tit,"2006 EEMC tower gains from MIPs w/ UxV, day89; eta bin; gain (ch/GeV)");
00134
00135
00136 gr->SetTitle(tit);
00137
00138 TString tt="T"; tt+="-shower";
00139 h=new TH2F(tt,tit,10,0.91,13.1,10,0,60);
00140
00141
00142 c=new TCanvas(tt,tt,900,600);
00143 int iphi;
00144
00145 for(ieta=0; ieta<mxEta;ieta++)
00146 for(iphi=iphi1;iphi<iphi2;iphi++) {
00147 int sec=1+(iphi/5);
00148 char sub='A'+iphi%5;
00149
00150 float g1=g[v1][ieta][iphi];
00151 float eg1=eg[v1][ieta][iphi];
00152 float x=ieta+1.+iphi/60.;
00153 int n=gr->GetN();
00154 gr->SetPoint(n,x,g1);
00155 gr->SetPointError(n,0,eg1);
00156 }
00157
00158
00159 h->Draw(); gr->Draw("P");
00160
00161
00162 for(ieta=0; ieta<mxEta;ieta++) drawIdeal(ieta,1.1, 1);
00163 gPad->SetGridy(0);
00164 gPad->SetGridx(0);
00165
00166 c->Print(tt+".gif");
00167 }
00168
00169
00170
00171
00172
00173 int plGainsRaw(int v1, char cT='X') {
00174 TGraphErrors *gr=new TGraphErrors;
00175 gr->SetMarkerStyle(8);
00176 gr->SetMarkerColor(kRed);
00177 gr->SetMarkerSize(0.5);
00178 char tit[200];
00179 int ieta=4;
00180
00181 sprintf(tit,"Reconstructed %c-shower gains for M-C , INPUT=23000; eta bin; gain (ch/GeV)",cT);
00182
00183 gr->SetTitle(tit);
00184 TString tt=cT; tt+="-shower";
00185 h=new TH2F(tt,tit,10,0.91,13.1,10,0,40000);
00186
00187 c=new TCanvas(tt,tt,500,400);
00188 int iphi;
00189
00190 for(ieta=0; ieta<mxEta;ieta++)
00191 for(iphi=iphi1;iphi<iphi2;iphi++) {
00192 int sec=1+(iphi/5);
00193 char sub='A'+iphi%5;
00194
00195 float g1=g[v1][ieta][iphi];
00196 float eg1=eg[v1][ieta][iphi];
00197 if(g1<=10) continue;
00198 float x=ieta+1.+iphi/60.;
00199 int n=gr->GetN();
00200 gr->SetPoint(n,x,g1);
00201 gr->SetPointError(n,0,eg1);
00202 }
00203
00204
00205 h->Draw(); gr->Draw("P");
00206
00207
00208 gr->Fit("pol1");
00209
00210 ln=new TLine(0,23000,13,23000);
00211 ln->SetLineColor(kRed);
00212 ln->SetLineStyle(2);
00213 ln->Draw();
00214
00215 gPad->SetGridy(0);
00216 gPad->SetGridx(0);
00217 c->Print(tt+".gif");
00218 }
00219
00220
00221
00222 int writeG(char *path, int iv) {
00223
00224 int sec=0;
00225
00226 for(sec=sec1;sec<=sec2;sec++) {
00227 if(drop58 && sec>=5 && sec<=8) continue;
00228 char fname[200];
00229 sprintf(fname,"%sgains%02dtower.dat",path,sec);
00230 printf("write gains from %s\n",fname);
00231 FILE *fd=fopen(fname, "w"); assert(fd);
00232 fprintf(fd,"# gains from slopes pp200 from iter4, scaled to average from sector5-8, sector %d\n# name, gain, error\n",sec);
00233 int ieta,isub;
00234 for(isub=0;isub<5;isub++)
00235 for(ieta=0;ieta<12;ieta++) {
00236 int iphi=5*(sec-1)+isub;
00237 fprintf(fd,"%02dT%c%02d %.2f %.2f\n",sec,'A'+isub,ieta+1,g[iv][ieta][iphi],eg[iv][ieta][iphi]);
00238
00239 }
00240 fclose(fd);
00241 }
00242 }
00243
00244
00245
00246
00247 int doCorr1(int v1, int v2 , int ieta=11) {
00248 TGraphErrors *gr=new TGraphErrors;
00249 gr->SetMarkerStyle(8);
00250 gr->SetMarkerColor(kRed);
00251 gr->SetMarkerSize(0.5);
00252 char tit[200];
00253 sprintf(tit,"etaBin = %d",ieta+1);
00254 gr->SetTitle(tit);
00255 h=new TH2F(tit,tit,10,0,50,10,0,50);
00256
00257 int iphi;
00258 for(iphi=iphi1;iphi<iphi2;iphi++) {
00259 int sec=1+(iphi/5);
00260 char sub='A'+iphi%5;
00261 if(drop58 && sec>=5 && sec<=8) continue;
00262
00263 float g1=g[v1][ieta][iphi];
00264 float g2=g[v2][ieta][iphi];
00265 float eg1=eg[v1][ieta][iphi];
00266 float eg2=eg[v2][ieta][iphi];
00267 if(g1==0 || g2==0) continue;
00268 int n=gr->GetN();
00269 gr->SetPoint(n,g1,g2);
00270 gr->SetPointError(n,eg1,eg2);
00271 float x=g2/g1;
00272 hX[ieta]->Fill(x);
00273
00274
00275 if(fabs(x-1.)>0.3)
00276 printf("** ");
00277 else
00278 printf(" ");
00279
00280 printf("%02dT%c%02d %f %f %f\n",sec,sub,ieta+1,g1,g2,x);
00281
00282 }
00283
00284 h->Draw(); gr->Draw("P");
00285
00286
00287 }
00288
00289
00290
00291 int prGainChange(int v1, int ieta=11) {
00292
00293 int nH=0, nL=0, nOK=0,nD=0, nTot=0;
00294 float eps=0.1;
00295 int iphi;
00296 printf("\n HV tower gain erGain ratio (big) , eta bin=%d, ideal gain(ch/GeV)=%.2f\n",ieta+1, iGain[ieta]);
00297
00298
00299 for(iphi=iphi1;iphi<iphi2;iphi++) {
00300 int sec=1+(iphi/5);
00301 char sub='A'+iphi%5;
00302
00303 if(drop58 && sec>=5 && sec<=8) continue;
00304 nTot++;
00305
00306 float g1=g[v1][ieta][iphi];
00307 float eg1=eg[v1][ieta][iphi];
00308 float r=g1/ iGain[ieta];
00309
00310
00311 if(g1<=0) { printf("# xx "); nD++; }
00312 elseif(r>1+eps) { printf("# + "); nH++; }
00313 elseif(r<1-eps) { printf("# - "); nL++; }
00314 else { printf("# OK "); nOK++; }
00315
00316 printf("%02dT%c%02d %4.1f %.1f %.3f",sec,sub,ieta+1,g1,eg1,r);
00317
00318 if(fabs(r-1.)>0.3)
00319 printf(" ** \n");
00320 else
00321 printf(" \n");
00322
00323 }
00324 printf("nH=%d nL=%d nOK=%d nD=%d nTot=%d\n",nH,nL,nOK,nD,nTot);
00325 printf("<tr><th> x <td>%d <td>%d <td>%d <td>%d \n",nH,nL,nOK,nD);
00326
00327 }
00328
00329
00330
00331 initHist() {
00332 const float maxADC=4095;
00333 const float maxEt=60;
00334 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};
00335
00336 char tit[200], tit2[200];
00337 int ieta;
00338 for(ieta=0;ieta<12;ieta++) {
00339 sprintf(tit,"x%d",ieta+1);
00340 sprintf(tit2,"MIPgain*slope , etaBin=%d",ieta+1);
00341 hX[ieta]=new TH1F(tit,tit2,20,.5,1.5);
00342 iGain[ieta]=maxADC/maxEt/cosh(eta[ieta]);
00343 printf("%.3f ", iGain[ieta]);
00344 }
00345 printf(" <- ideal gains\n");
00346 }
00347
00348
00349
00350 void drawIdeal(int ieta, float fac=1.1, int flag=0) {
00351 float x1=0, x2=60;
00352 if(flag) { x1=ieta+1; x2=x1+1; }
00353 TLine *ln0 =new TLine(x1,iGain[ieta],x2,iGain[ieta]); ln0->SetLineColor(kBlue);ln0->SetLineWidth(1); ln0->Draw();
00354 if(flag) ln0->SetLineWidth(2);
00355
00356 ln0 =new TLine(x1,iGain[ieta]*fac,x2,iGain[ieta]*fac); ln0->SetLineColor(kBlue);ln0->SetLineWidth(1); ln0->Draw();ln0->SetLineStyle(2);
00357
00358 ln0 =new TLine(x1,iGain[ieta]/fac,x2,iGain[ieta]/fac); ln0->SetLineColor(kBlue);ln0->SetLineWidth(1); ln0->Draw();ln0->SetLineStyle(2);
00359
00360
00361 }
00362