00001
00002 int DEBUG=0;
00003
00004 TGraphErrors* ua1Data200();
00005
00006 TF1* ua1Fit130(scale=1);
00007
00008 void
00009 scale(TGraphAsymmErrors* graph,double scale);
00010
00011 void
00012 scale(TGraphErrors* graph,double scale);
00013
00014
00015 void
00016 divide(TGraphASymmErrors* graph, double div, double divErr=0);
00017
00018
00019
00020 TGraphAsymmErrors*
00021 makeUA1(const TGraphAsymmErrors* graph, int type=0);
00022
00023 TGraphAsymmErrors*
00024 divide(TGraphAsymmErrors* graphA,TGraphAsymmErrors* graphB);
00025
00026
00027
00028 TGraphAsymmErrors*
00029 makeUA1Ratio(TGraphAsymmErrors* gSTAR,
00030 int type, double scale);
00031
00032
00033 TGraphAsymmErrors*
00034 makeUA1RatioDiv(TGraphAsymmErrors* gSTAR,
00035 double TAA, double TAAErr=0);
00036
00037
00038 TH1D*
00039 makeUA1TAAHistError(TGraphAsymmErrors* gSTAR,
00040 double TAA, double TAAError);
00041
00042
00043 TGraphAsymmErrors*
00044 makeUA1ScaleError(TGraphAsymmErrors* gSTAR,
00045 float scale, float scaleLow,float scaleHigh);
00046
00047
00048 TGraphAsymmErrors*
00049 makeHMinus();
00050
00051
00052 TGraphAsymmErrors*
00053 removeXErrors(TGraphAsymmErrors* g);
00054
00055
00056 void
00057 kludgeBackground(TGraphAsymmErrors* graph,float val)
00058 {
00059 double* xValues = graph->GetX();
00060 double* yValues = graph->GetY();
00061 double* errXLow = graph->GetEXlow();
00062 double* errXHigh = graph->GetEXhigh();
00063
00064 double* errYLow = graph->GetEYlow();
00065 double* errYHigh = graph->GetEYhigh();
00066
00067 for(int i=0; i<graph->GetN(); i++){
00068 double y=yValues[i]*(1-val);
00069 double yErr=errYLow[i]*(1-val);
00070
00071 graph->SetPoint(i,xValues[i],y);
00072 graph->SetPointError(i,errXLow[i],errXHigh[i],
00073 yErr,yErr);
00074
00075 }
00076 }
00077
00078
00079 void
00080 kludgeSystematics(TGraphAsymmErrors* graph)
00081 {
00082
00083
00084
00085 double* xValues = graph->GetX();
00086 double* yValues = graph->GetY();
00087 double* errXLow = graph->GetEXlow();
00088 double* errXHigh = graph->GetEXhigh();
00089
00090 double* errYLow = graph->GetEYlow();
00091 double* errYHigh = graph->GetEYhigh();
00092
00093 int n=graph->GetN();
00094 for(int i=0; i<n; i++){
00095 double yErr;
00096
00097 if(i==(n-2)) yErr=yValues[i]*.10;
00098 else if(i==(n-1)) yErr=yValues[i]*.15;
00099 else yErr=yValues[i]*.08;
00100
00101 yErr += errYHigh[i];
00102
00103 graph->SetPointError(i,errXLow[i],errXHigh[i],
00104 yErr,yErr);
00105
00106 }
00107
00108
00109 }
00110
00111
00112
00113
00114
00115
00116 void
00117 scale(TGraphAsymmErrors* graph,double scale)
00118 {
00119 if(DEBUG)printf("SCALE=%.2e\n (1/SCALE=%.2e)\n",scale,1./scale);
00120 double* xValues = graph->GetX();
00121 double* yValues = graph->GetY();
00122 double* errXLow = graph->GetEXlow();
00123 double* errXHigh = graph->GetEXhigh();
00124
00125 double* errYLow = graph->GetEYlow();
00126 double* errYHigh = graph->GetEYhigh();
00127
00128 for(int i=0; i<graph->GetN(); i++){
00129 double y=yValues[i], eYLow=errYLow[i], eYHigh=errYHigh[i];
00130 double yScaled=yValues[i]*scale;
00131 double eYLowScaled = errYLow[i]*scale;
00132 double eYHighScaled =errYHigh[i]*scale;
00133
00134 graph->SetPoint(i,xValues[i],yScaled);
00135 graph->SetPointError(i,errXLow[i],errXHigh[i],
00136 eYLowScaled,eYHighScaled);
00137 if(DEBUG)
00138 printf("\tbin=%d : %.2f<%.2f<%.2f: y=%.2e, yScaled=%.2e\n\t\t yErrLow=%.2e, yErrLowScaled=%.2e\n",
00139 i,xValues[i]-errXLow[i],xValues[i],xValues[i]+errXHigh[i],
00140 y,yScaled,eYLow,eYLowScaled);
00141
00142 }
00143 }
00144
00145
00146
00147
00148
00149 void
00150 divide(TGraphAsymmErrors* graph, double div, double divErr)
00151 {
00152 if(DEBUG)printf("DIVIDE=%.2e, err=%.2e\n",div,divErr);
00153 double* xValues = graph->GetX();
00154 double* yValues = graph->GetY();
00155 double* errXLow = graph->GetEXlow();
00156 double* errXHigh = graph->GetEXhigh();
00157
00158 double* errYLow = graph->GetEYlow();
00159 double* errYHigh = graph->GetEYhigh();
00160
00161 for(int i=0; i<graph->GetN(); i++){
00162 double y=yValues[i], eYLow=errYLow[i], eYHigh=errYHigh[i];
00163 double yDiv=yValues[i]/div;
00164 double eY = errYLow[i];
00165 double eYDiv = errYLow[i]/div;
00166
00167 if(divErr>0){
00168 eYDiv=yDiv*sqrt((eY/y)*(eY/y) + (divErr/div)*(divErr/div));
00169 }
00170
00171
00172 graph->SetPoint(i,xValues[i],yDiv);
00173 graph->SetPointError(i,errXLow[i],errXHigh[i],
00174 eYDiv,eYDiv);
00175 if(DEBUG)
00176 printf("\tbin=%d : %.2f<%.2f<%.2f: y=%.2e, yScaled=%.2e\n\t\t yErrLow=%.2e, yErrLowScaled=%.2e\n",
00177 i,xValues[i]-errXLow[i],xValues[i],xValues[i]+errXHigh[i],
00178 y,yDiv,eY,eYDiv);
00179
00180 }
00181
00182 }
00183
00184
00185
00186
00187
00188 void
00189 scale(TGraphErrors* graph,double scale)
00190 {
00191 if(DEBUG)printf("SCALE=%.2e\n (1/SCALE=%.2e)\n",scale,1./scale);
00192 double* xValues = graph->GetX();
00193 double* yValues = graph->GetY();
00194 double* errX = graph->GetEX();
00195 double* errY = graph->GetEY();
00196
00197 for(int i=0; i<graph->GetN(); i++){
00198 double y=yValues[i],eY=errY[i];
00199 double yScaled=yValues[i]*scale;
00200
00201 double eYScaled = errY[i]*scale;
00202
00203 graph->SetPoint(i,xValues[i],yScaled);
00204 graph->SetPointError(i,errX[i],eYScaled);
00205
00206
00207
00208
00209
00210
00211
00212 }
00213 }
00214
00215
00216 TGraphErrors* ua1Data200()
00217 {
00218 TGraphErrors* g=new TGraphErrors;
00219 g->SetName("gUA1Data200GeV");
00220
00221 const int n=40;
00222 double ex[n]={0};
00223 double x[n],y[n],ey[n];
00224
00225
00226 x[0] = 0.25; y[0] = 62.0; ey[0] = 3.1;
00227 x[1] = 0.35; y[1] = 36.2; ey[1] = 1.8;
00228 x[2] = 0.45; y[2] = 20.8; ey[2] = 1.0;
00229 x[3] = 0.55; y[3] = 12.32; ey[3] = 0.62;
00230 x[4] = 0.65; y[4] = 7.33; ey[4] = 0.37;
00231 x[5] = 0.75; y[5] = 4.54; ey[5] = 0.23;
00232 x[6] = 0.85; y[6] = 2.77; ey[6] = 0.14;
00233 x[7] = 0.95; y[7] = 1.724; ey[7] = 0.088;
00234 x[8] = 1.05; y[8] = 1.162; ey[8] = 0.060;
00235 x[9] = 1.15; y[9] = 0.769; ey[9] = 0.040;
00236 x[10] = 1.25; y[10] = 0.521; ey[10] = 0.028;
00237 x[11] = 1.35; y[11] = 0.344; ey[11] = 0.019;
00238 x[12] = 1.45; y[12] = 0.240; ey[12] = 0.013;
00239 x[13] = 1.55; y[13] = 0.1680; ey[13] = 0.0095;
00240 x[14] = 1.65; y[14] = 0.1180; ey[14] = 0.0069;
00241 x[15] = 1.75; y[15] = 0.0861; ey[15] = 0.0053;
00242 x[16] = 1.85; y[16] = 0.0579; ey[16] = 0.0038;
00243 x[17] = 1.95; y[17] = 0.0440; ey[17] = 0.0030;
00244 x[18] = 2.05; y[18] = 0.0308; ey[18] = 0.0023;
00245 x[19] = 2.15; y[19] = 0.0223; ey[19] = 0.0018;
00246 x[20] = 2.25; y[20] = 0.0167; ey[20] = 0.0014;
00247 x[21] = 2.35; y[21] = 0.0143; ey[21] = 0.0013;
00248 x[22] = 2.45; y[22] = 0.0092; ey[22] = 0.0010;
00249 x[23] = 2.55; y[23] = 0.00575; ey[23] = 0.00071;
00250 x[24] = 2.65; y[24] = 0.00558; ey[24] = 0.00069;
00251 x[25] = 2.75; y[25] = 0.00376; ey[25] = 0.00054;
00252 x[26] = 2.85; y[26] = 0.00362; ey[26] = 0.00052;
00253 x[27] = 2.95; y[27] = 0.00322; ey[27] = 0.00048;
00254 x[28] = 3.05; y[28] = 0.00191; ey[28] = 0.00035;
00255 x[29] = 3.15; y[29] = 0.00179; ey[29] = 0.00034;
00256 x[30] = 3.25; y[30] = 0.00126; ey[30] = 0.00028;
00257 x[31] = 3.35; y[31] = 0.00155; ey[31] = 0.00030;
00258 x[32] = 3.45; y[32] = 0.00072; ey[32] = 0.00020;
00259 x[33] = 3.55; y[33] = 0.00060; ey[33] = 0.00018;
00260 x[34] = 3.65; y[34] = 0.000286; ey[34] = 0.000086;
00261 x[35] = 3.85; y[35] = 0.000389; ey[35] = 0.000098;
00262 x[36] = 4.10; y[36] = 0.000172; ey[36] = 0.000051;
00263 x[37] = 4.50; y[37] = 0.000114; ey[37] = 0.000035;
00264 x[38] = 5.70; y[38] = 0.0000135; ey[38] = 0.0000067;
00265 x[39] = 6.70; y[39] = 0.0000066; ey[39] = 0.0000043;
00266
00267
00268 for(int i=0; i<n; i++){
00269 g->SetPoint(i,x[i],y[i]);
00270 g->SetPointError(i,ex[i],ey[i]);
00271 }
00272 return g;
00273 }
00274
00275
00276
00277 TF1* ua1Fit130(double scale)
00278 {
00279 double A = 266.6; double p0 = 1.895; double n = 12.98;
00280 const char* fcn = "[3]*[0]*(1+x/[1])^-[2]";
00281
00282 fUA1 = new TF1("fUA1)130",fcn,lowPt,highPt);
00283 fUA1->SetParameter(0,A);
00284 fUA1->SetParameter(1,p0);
00285 fUA1->SetParameter(2,n);
00286 fUA1->SetParameter(3,scale);
00287
00288 return fUA1;
00289 }
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305 TGraphAsymmErrors*
00306 makeUA1(const TGraphAsymmErrors* graph, int type)
00307 {
00308 if(DEBUG)printf("MAKEUA1 type=%d (2piA(1=pt/p0)^-n)\n",type);
00309
00310
00311
00312 const int nBin = graph->GetN();
00313 double* xValues = graph->GetX();
00314 double* yValues = graph->GetY();
00315 double* errXLow = graph->GetEXlow();
00316 double* errXHigh = graph->GetEXhigh();
00317
00318 TGraphAsymmErrors* gUA1=new TGraphAsymmErrors;
00319 gUA1->SetName("ua1");
00320
00321
00322
00323 double A,p0,n;
00324
00325 switch(type){
00326 case 0:
00327 A = 266.6; p0 = 1.895; n = 12.98; break;
00328 case 1:
00329 A = 260.6; p0 = 2.0701; n = 13.9; break;
00330 case 2:
00331 A = 270.5; p0 = 1.8053; n = 12.514; break;
00332 default:
00333 cout << "wrong type=" << type << endl; exit(1);
00334 }
00335
00336 double lowPt=0, highPt=6;
00337
00338
00339 const char* fcn = "2*pi*[0]*(1+x/[1])^-[2]";
00340 TF1* fUA1;
00341 fUA1 = new TF1("fUA1",fcn,lowPt,highPt);
00342 fUA1->SetParameter(0,A);
00343 fUA1->SetParameter(1,p0);
00344 fUA1->SetParameter(2,n);
00345
00346
00347 for(int i=0;i<nBin; i++){
00348
00349
00350
00351 double lowEdge = xValues[i]-errXLow[i];
00352 double highEdge = xValues[i]+errXHigh[i];
00353 double binWidth = highEdge-lowEdge;
00354
00355 double value = fUA1->Integral(lowEdge,highEdge)/binWidth;
00356
00357 if(DEBUG)
00358 printf("\tbin=%d : %.2f<%.2f<%.2f : val=%.4e\n",
00359 i,lowEdge,xValues[i],highEdge,value);
00360
00361 gUA1->SetPoint(i,xValues[i],value);
00362 gUA1->SetPointError(i,errXLow[i],errXHigh[i],0,0);
00363
00364 }
00365 return gUA1;
00366 }
00367
00368
00369
00370
00371
00372
00373 TGraphAsymmErrors*
00374 divide(TGraphAsymmErrors* graphA,TGraphAsymmErrors* graphB)
00375 {
00376 if(DEBUG)printf("DIVIDE\n");
00377
00378 const int nBin = graphA->GetN();
00379 if(nBin != graphB->GetN()){
00380 cout << "divide(..) :different bins sizes" << endl; exit(1);
00381 }
00382
00383 double* xValuesA = graphA->GetX();
00384 double* yValuesA = graphA->GetY();
00385 double* errXLowA = graphA->GetEXlow();
00386 double* errXHighA = graphA->GetEXhigh();
00387 double* errYA = graphA->GetEYhigh();
00388
00389
00390 double* xValuesB = graphB->GetX();
00391 double* yValuesB = graphB->GetY();
00392 double* errYB = graphB->GetEYhigh();
00393
00394 TGraphAsymmErrors* gRatio = new TGraphAsymmErrors;
00395 gRatio->SetName("gRatio"); gRatio->SetTitle("gRatio");
00396
00397 for(int i=0; i<nBin; i++){
00398 if(yValuesB[i]==static_cast<double>(0)) {
00399 cout << "divide: cant divide by 0" << endl;
00400 }
00401 double yRatio = yValuesA[i]/yValuesB[i];
00402
00403 double errY =
00404 sqrt(yRatio*yRatio*(
00405 errYA[i]*errYA[i]/(yValuesA[i]*yValuesA[i])+
00406 errYB[i]*errYB[i]/(yValuesB[i]*yValuesB[i])
00407 )
00408 );
00409 gRatio->SetPoint(i,xValuesA[i],yRatio);
00410 gRatio->SetPointError(i,errXLowA[i],errXHighA[i],
00411 errY,errY);
00412 double low=xValuesA[i]-errXLowA[i];
00413 double high=xValuesA[i]+errXHighA[i];
00414 if(DEBUG)
00415 printf("\tbin=%d : %.2f<%.2f<%.2f : \n\t\tvalA=%.2e, valB=%.2e, A/B=%.2e\n\t\t errA=%.2e, errB=%.2e, errA/B=%.2e\n",
00416 i,low,xValuesA[i],high,yValuesA[i],yValuesB[i],
00417 yRatio,errYA[i],errYB[i],errY);
00418
00419 }
00420 return gRatio;
00421 }
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431 TGraphAsymmErrors*
00432 makeUA1Ratio(TGraphAsymmErrors* gSTAR,
00433 int type, double scale)
00434 {
00435 TGraphAsymmErrors* gUA1=makeUA1(gSTAR,type);
00436 TGraphAsymmErrors* gRatio=divide(gSTAR,gUA1);
00437 double *y=gRatio->GetY();
00438 scale(gRatio,scale);
00439 return gRatio;
00440
00441 }
00442
00443
00444
00445 TGraphAsymmErrors*
00446 makeUA1RatioDiv(TGraphAsymmErrors* gSTAR,
00447 double TAA, double TAAErr)
00448 {
00449 TGraphAsymmErrors* gUA1=makeUA1(gSTAR,0);
00450 TGraphAsymmErrors* gRatio=divide(gSTAR,gUA1);
00451 divide(gRatio,TAA,TAAErr);
00452 return gRatio;
00453 }
00454
00455
00456 TH1D*
00457 makeUA1TAAHistError(TGraphAsymmErrors* gSTAR,
00458 double TAA, double TAAErr)
00459 {
00460 if(DEBUG)printf("makeUA1TAAHistError\n");
00461
00462
00463
00464 TGraphAsymmErrors* gRatioErr=makeUA1RatioDiv(gSTAR,TAA,TAAErr);
00465
00466 double* xValues = gRatioErr->GetX();
00467 double* yValues = gRatioErr->GetY();
00468 double* errXLow = gRatioErr->GetEXlow();
00469 double* errXHigh = gRatioErr->GetEXhigh();
00470
00471 double* errYLow = gRatioErr->GetEYlow();
00472 double* errYHigh = gRatioErr->GetEYhigh();
00473
00474
00475 const int nAry=gRatioErr->GetN()+1;
00476 const int nBin=nAry-1;
00477 double* xAry=new double[nAry];
00478 double* yAry=new double[nBin];
00479 double* yErr=new double[nBin];
00480
00481 for(int i=0;i<nBin;i++){
00482 float lowEdge=xValues[i]-errXLow[i];
00483 xAry[i]=lowEdge;
00484 yAry[i]=yValues[i];
00485 yErr[i]=errYLow[i];
00486 }
00487
00488 xAry[nAry-1]=xValues[gRatioErr->GetN()-1]+errXHigh[gRatioErr->GetN()-1];
00489
00490
00491 TH1D* h=new TH1D("h","h",nBin,xAry);
00492 for(int i=0;i<nBin;i++){
00493
00494
00495 h->SetBinContent(i+1,yAry[i]);
00496 h->SetBinError(i+1,yErr[i]);
00497 }
00498 if(DEBUG) dump(h);
00499 h->SetFillColor(17);
00500
00501
00502 return h;
00503
00504 }
00505
00506
00507
00508
00509
00510
00511
00512
00513 TGraphAsymmErrors*
00514 makeUA1ScaleError(TGraphAsymmErrors* gSTAR,
00515 float scale, float scaleLow,float scaleHigh)
00516 {
00517 if(DEBUG)printf("ERROR\n");
00518 if(DEBUG)printf("BEST\n");
00519 TGraphAsymmErrors* gBestRatio=makeUA1Ratio(gSTAR,0,scale);
00520
00521
00522
00523
00524 if(DEBUG)printf("LOW RATIO\n");
00525 TGraphAsymmErrors* gLowRatio=makeUA1Ratio(gSTAR,2,scaleLow);
00526 if(DEBUG)printf("HIGH RATIO\n");
00527 TGraphAsymmErrors* gHighRatio=makeUA1Ratio(gSTAR,1,scaleHigh);
00528
00529
00530
00531
00532
00533
00534
00535 TGraphAsymmErrors* gError=
00536 (TGraphAsymmErrors*)gBestRatio->Clone();
00537 gError->SetName("gError");gError->SetTitle("gError");
00538
00539
00540 double* eYBest=gBestRatio->GetEYlow();
00541
00542
00543 double* yValuesBest=gBestRatio->GetY();
00544 double* yValuesLow=gLowRatio->GetY();
00545 double* yValuesHigh=gHighRatio->GetY();
00546
00547
00548 double* xValues=gBestRatio->GetX();
00549 double* eXHigh=gBestRatio->GetEXhigh();
00550 double* eXLow=gBestRatio->GetEXlow();
00551
00552 if(DEBUG)printf("SET ERRORS\n");
00553
00554 for(int i=0; i<gBestRatio->GetN(); i++){
00555
00556 double eYHigh=yValuesHigh[i]-yValuesBest[i];
00557 double eYLow=yValuesBest[i]-yValuesLow[i];
00558 gError->SetPointError(i,0,0,eYLow+eYBest[i],eYHigh+eYBest[i]);
00559
00560 if(DEBUG)
00561 printf("\tbin=%d : %.2f<%.2f<%.2f : yBest=%.2e\n\t\teYhigh=%.2e, eYlow=%.2e, eYbest=%.2e\n",
00562 i,xValues[i]-eXLow[i],xValues[i],xValues[i]+eXHigh[i],
00563 yValuesBest[i],eYHigh,eYLow,eYBest[i]);
00564
00565 }
00566 return gError;
00567
00568 }
00569
00570
00571
00572
00573
00574
00575
00576
00577 TGraphAsymmErrors*
00578 makeHMinus(int cent)
00579 {
00580 cout << "###makeHMinus : " << cent << endl;
00581
00582 char* fname="~/afs/real/PJacobs.root";
00583
00584 TFile* frank = new TFile(fname);
00585 if(!frank ||!frank->IsOpen()) exit(1);
00586
00587 TGraphAsymmErrors* gHMinus = new TGraphAsymmErrors;
00588 gHMinus->SetName("hMinus");
00589
00590 char buf[100]; char* basename="hPlusMinus";
00591 TH1* hMinus, *hMinusb;
00592
00593
00594 switch(cent){
00595 case 0:
00596 sprintf(buf,"%s_00",basename);
00597 hMinus=(TH1*)frank->Get(buf);
00598 break;
00599 case 1:
00600 sprintf(buf,"%s_02",basename);
00601 hMinus=(TH1*)frank->Get(buf);
00602 sprintf(buf,"%s_03",basename);
00603 hMinusb=(TH1*)frank->Get(buf);
00604 hMinus->Add(hMinusb); hMinus->Scale(0.5);
00605 break;
00606 case 2:
00607 sprintf(buf,"%s_10",basename);
00608 hMinus=(TH1*)frank->Get(buf);
00609 break;
00610 case 3:
00611 sprintf(buf,"%s_08",basename);
00612 hMinus=(TH1*)frank->Get(buf);
00613 break;
00614 case 4:
00615 sprintf(buf,"%s_07",basename);
00616 hMinus=(TH1*)frank->Get(buf);
00617 break;
00618 case 5:
00619 sprintf(buf,"%s_06",basename);
00620 hMinus=(TH1*)frank->Get(buf);
00621 break;
00622 case 6:
00623 sprintf(buf,"%s_05",basename);
00624 hMinus=(TH1*)frank->Get(buf);
00625 sprintf(buf,"%s_04",basename);
00626 hMinusb=(TH1*)frank->Get(buf);
00627 hMinus->Add(hMinusb); hMinus->Scale(0.5);
00628 break;
00629 default:
00630 cout << "Unknown cent = " << cent << endl; exit(1);
00631 }
00632 float lastpt=2.0;
00633 int firstbin=2;
00634
00635
00636
00637 for(int i=firstbin; i<=hMinus->GetNbinsX(); i++){
00638 double y=hMinus->GetBinContent(i);
00639 double yerr=hMinus->GetBinError(i);
00640 double x =hMinus->GetBinCenter(i);
00641 double xerr=hMinus->GetBinWidth(i)/2.;
00642
00643 if(x>lastpt) break;
00644 gHMinus->SetPoint(i-firstbin,x,y);
00645 gHMinus->SetPointError(i-firstbin,xerr,xerr,yerr,yerr);
00646
00647 }
00648
00649
00650
00651
00652
00653
00654
00655
00656
00657
00658
00659
00660
00661
00662
00663
00664
00665
00666
00667
00668
00669 return gHMinus;
00670 }
00671
00672 TGraphAsymmErrors*
00673 removeXErrors(TGraphAsymmErrors* g)
00674 {
00675 TGraphAsymmErrors* gClone=(TGraphAsymmErrors*)g->Clone();
00676
00677 double* eYHigh=gClone->GetEYhigh();
00678 double* eYLow=gClone->GetEYlow();
00679
00680 for(int i=0;i<g->GetN(); i++){
00681 gClone->SetPointError(i,0,0,eYLow[i],eYHigh[i]);
00682 }
00683 return gClone;
00684 }
00685
00686 void drawAxisBins(TGraphAsymmErrors* g,float size,float yMax)
00687 {
00688
00689 TLine* li=new TLine; li->SetLineWidth(1);
00690
00691 double* x=g->GetX();
00692 double* eXLow=g->GetEXlow();
00693 double* eXHigh=g->GetEXhigh();
00694
00695
00696 for(int i=0; i<g->GetN(); i++){
00697 double low = x[i]-eXLow[i];
00698 double high= x[i]+eXHigh[i];
00699
00700
00701
00702 li->DrawLine(low,yMax-size,low,yMax);
00703 li->DrawLine(high,yMax-size,high,yMax);
00704 }
00705
00706 }