42 if (!g1) printf(
"**myTGraphErrorsDivide: g1 does not exist ! \n");
43 if (!g2) printf(
"**myTGraphErrorsDivide: g2 does not exist ! \n");
50 printf(
"**myTGraphErrorsDivide: vector do not have same number of entries ! \n");
53 TGraphErrors* g3=
new TGraphErrors();
55 Double_t x1=0., y1=0., x2=0., y2=0.;
56 Double_t dx1=0.,dy1=0., dy2=0.;
59 for (Int_t i1=0; i1<n1; i1++) {
60 for (Int_t i2=0; i2<n2; i2++) {
63 g1->GetPoint(i1,x1,y1);
64 g2->GetPoint(i2,x2,y2);
69 dx1 = g1->GetErrorX(i1);
70 if (y1!=0) dy1 = g1->GetErrorY(i1)/y1;
71 if (y2!=0) dy2 = g2->GetErrorY(i2)/y2;
74 printf(
"**myTGraphErrorsDivide: %d x1=%f x2=%f y1=%f y2=%f \n",iv,x1,x2,y1,y2);
76 if (y2!=0.) g3->SetPoint(iv, x1,y1/y2);
77 else g3->SetPoint(iv, x1,y2);
80 if (y1!=0 && y2!=0) e=std::sqrt(dy1*dy1+dy2*dy2)*(y1/y2);
81 g3->SetPointError(iv,dx1,e);
104 TGraphAsymmErrors* g3=
new TGraphAsymmErrors();
109 printf(
" vectors do not have same number of entries ! \n");
113 Double_t x1=0., y1=0., x2=0., y2=0.;
114 Double_t dx1h=0., dx1l=0.;
115 Double_t dy1h=0., dy1l=0.;
116 Double_t dy2h=0., dy2l=0.;
118 Double_t* X1 = g1->GetX();
119 Double_t* Y1 = g1->GetY();
120 Double_t* EXhigh1 = g1->GetEXhigh();
121 Double_t* EXlow1 = g1->GetEXlow();
122 Double_t* EYhigh1 = g1->GetEYhigh();
123 Double_t* EYlow1 = g1->GetEYlow();
125 Double_t* X2 = g2->GetX();
126 Double_t* Y2 = g2->GetY();
127 Double_t* EXhigh2 = g2->GetEXhigh();
128 Double_t* EXlow2 = g2->GetEXlow();
129 Double_t* EYhigh2 = g2->GetEYhigh();
130 Double_t* EYlow2 = g2->GetEYlow();
132 for (Int_t i=0; i<g1->GetN(); i++) {
133 g1->GetPoint(i,x1,y1);
134 g2->GetPoint(i,x2,y2);
137 if (y1!=0.) dy1h = EYhigh1[i]/y1;
139 if (y2!=0.) dy2h = EYhigh2[i]/y2;
141 if (y1!=0.) dy1l = EYlow1 [i]/y1;
143 if (y2!=0.) dy2l = EYlow2 [i]/y2;
149 printf(
"%d dy1=%f %f dy2=%f %f sqrt= %f %f \n",i,dy1l,dy1h,dy2l,dy2h,
150 sqrt(dy1l*dy1l+dy2l*dy2l),sqrt(dy1h*dy1h+dy2h*dy2h));
152 if (y2!=0.) g3->SetPoint(i, x1,y1/y2);
153 else g3->SetPoint(i, x1,y2);
154 Double_t el=0.; Double_t eh=0.;
156 if (y1!=0. && y2!=0.) el=sqrt(dy1l*dy1l+dy2l*dy2l)*(y1/y2);
157 if (y1!=0. && y2!=0.) eh=sqrt(dy1h*dy1h+dy2h*dy2h)*(y1/y2);
159 if (
debug) printf(
"dx1h=%f dx1l=%f el=%f eh=%f \n",dx1h,dx1l,el,eh);
160 g3->SetPointError(i,dx1h,dx1l,el,eh);
169inline TGraphAsymmErrors*
myMakeBand(TGraphErrors* g0, TGraphErrors* g1,TGraphErrors* g2) {
173 TGraphAsymmErrors* g3=
new TGraphAsymmErrors();
175 Double_t x1=0., y1=0., x2=0., y2=0., y0=0, x3=0.;
178 for (Int_t i=0; i<g1->GetN(); i++) {
179 g0->GetPoint(i, x1,y0);
180 g1->GetPoint(i, x1,y1);
181 g2->GetPoint(i, x1,y2);
186 if (i==g1->GetN()-1) x2=x1;
187 else g2->GetPoint(i+1,x2,dum);
190 else g2->GetPoint(i-1,x3,dum);
193 if (y1<y2) {y2=y1; y1=tmp;}
196 g3->SetPoint(i,x1,y3);
198 Double_t binwl=(x1-x3)/2.;
199 Double_t binwh=(x2-x1)/2.;
200 if (binwl==0.) binwl= binwh;
201 if (binwh==0.) binwh= binwl;
202 g3->SetPointError(i,binwl,binwh,(y3-y2),(y1-y3));
213 Double_t x1=0., y1=0., y2=0., y0=0;
217 if (g1->GetN()!=g2->GetN())
218 std::cout <<
" graphs have not the same # of elements " << std::endl;
220 Double_t* EYhigh = g2-> GetEYhigh();
221 Double_t* EYlow = g2-> GetEYlow();
223 for (Int_t i=0; i<g1->GetN(); i++) {
224 g1->GetPoint(i, x1,y1);
225 g2->GetPoint(i, x1,y2);
235 Double_t eyh=0., eyl=0.;
245 eyh=sqrt(eyh*eyh+y0*y0);
247 g2->SetPointEYhigh(i,eyh);
250 eyl=sqrt(eyl*eyl+y0*y0);
252 g2->SetPointEYlow (i,eyl);
301inline void myBoxText(Double_t
x, Double_t
y,Double_t boxsize,Int_t mcolor,
char *text) {
305 TLatex l; l.SetTextAlign(12);
307 l.DrawLatex(
x,
y,text);
309 Double_t y1=
y-0.25*tsize;
310 Double_t y2=
y+0.25*tsize;
311 Double_t x2=
x-0.3*tsize;
312 Double_t x1=x2-boxsize;
314 printf(
"x1= %f x2= %f y1= %f y2= %f \n",x1,x2,y1,y2);
316 TPave *mbox=
new TPave(x1,y1,x2,y2,0,
"NDC");
318 mbox->SetFillColor(mcolor);
319 mbox->SetFillStyle(1001);
323 mline.SetLineWidth(4);
324 mline.SetLineColor(1);
325 mline.SetLineStyle(1);
326 Double_t ytmp=(y1+y2)/2.;
327 mline.DrawLineNDC(x1,ytmp,x2,
y);