00001 void divideGraphWithFunction(TGraphErrors *graph,TF1 *func)
00002 {
00003 for(int i=0;i<graph->GetN();i++){
00004 double x=0.;
00005 double y=0.;
00006 graph->GetPoint(i,x,y);
00007 double ey=graph->GetErrorY(i);
00008 graph->SetPoint(i,x,y/func->Eval(x));
00009 graph->SetPointError(i,0.,ey/func->Eval(x));
00010 }
00011 }
00012 void divideGraphs(TGraphErrors *g1,TGraphErrors *g2)
00013 {
00014 for(int i=0;i<g1->GetN();i++){
00015 double x=0.;
00016 double y=1.;
00017 double ex=0.;
00018 double ey=0;
00019 double y2=1.;
00020 double ey2=0.;
00021 g1->GetPoint(i,x,y);
00022 ey=g1->GetErrorY(i);
00023 g2->GetPoint(i,x,y2);
00024 ey2=0.;
00025
00026 double xn=x;
00027 double exn=0.;
00028 double yn=y/y2;
00029 double eyn=(ey*ey/(y*y) + ey2*ey2/(y2*y2));
00030 eyn=sqrt(eyn)*yn;
00031 yn+=-1.;
00032 g1->SetPoint(i,xn,yn);
00033 g1->SetPointError(i,exn,eyn);
00034 }
00035
00036 }
00037 void doYieldError(char *nom,char *left,char *right,char *mid)
00038 {
00039 TF1 *err_mb_hi=new TF1("err_mb_hi","0.035",1.,5.);
00040 TF1 *err_mb_lo=new TF1("err_mb_hi","-0.035",1.,5.);
00041 TF1 *err_ht_hi=new TF1("err_mb_hi","0.05",4.,15.);
00042 TF1 *err_ht_lo=new TF1("err_mb_hi","-0.05",4.,15.);
00043
00044 bool isPP05=false;
00045 TPad *p_c;
00046 int i_mb=0;
00047 int i_ht1=1;
00048 int i_ht2=2;
00049
00050 TFile *f_nom=new TFile(nom,"OPEN");
00051 TCanvas *c_nom=f_nom->Get("compare");
00052 c_nom->Draw();
00053 if(isPP05){
00054 i_mb=3;
00055 i_ht1=4;
00056 i_ht2=5;
00057 p_c=(TPad*)gPad->FindObject("padt");
00058 p_c->cd();
00059 }
00060 TMultiGraph *m_nom=gPad->FindObject("m_pions")->Clone();
00061 TGraphErrors *mb_nom=m_nom->GetListOfGraphs()->At(i_mb)->Clone();
00062 mb_nom->SetName("mb_nom");
00063 TGraphErrors *ht1_nom=m_nom->GetListOfGraphs()->At(i_ht1)->Clone();
00064 ht1_nom->SetName("ht1_nom");
00065 TGraphErrors *ht2_nom=m_nom->GetListOfGraphs()->At(i_ht2)->Clone();
00066 ht2_nom->SetName("ht2_nom");
00067 delete c_nom;
00068 delete m_nom;
00069
00070
00071 TFile *f_left=new TFile(left,"OPEN");
00072 TCanvas *c_left=f_left->Get("compare");
00073 c_left->Draw();
00074 if(isPP05){
00075 p_c=(TPad*)gPad->FindObject("padt");
00076 p_c->cd();
00077 }
00078 TMultiGraph *m_left=gPad->FindObject("m_pions")->Clone();
00079 TGraphErrors *mb_left=m_left->GetListOfGraphs()->At(i_mb)->Clone();
00080 mb_left->SetName("mb_left");
00081 TGraphErrors *ht1_left=m_left->GetListOfGraphs()->At(i_ht1)->Clone();
00082 ht1_left->SetName("ht1_left");
00083 TGraphErrors *ht2_left=m_left->GetListOfGraphs()->At(i_ht2)->Clone();
00084 ht2_left->SetName("ht2_left");
00085 delete c_left;
00086 delete m_left;
00087
00088
00089 TFile *f_right=new TFile(right,"OPEN");
00090 TCanvas *c_right=f_right->Get("compare");
00091 c_right->Draw();
00092 if(isPP05){
00093 p_c=(TPad*)gPad->FindObject("padt");
00094 p_c->cd();
00095 }
00096 TMultiGraph *m_right=gPad->FindObject("m_pions")->Clone();
00097 TGraphErrors *mb_right=m_right->GetListOfGraphs()->At(i_mb)->Clone();
00098 mb_right->SetName("mb_right");
00099 TGraphErrors *ht1_right=m_right->GetListOfGraphs()->At(i_ht1)->Clone();
00100 ht1_right->SetName("ht1_right");
00101 TGraphErrors *ht2_right=m_right->GetListOfGraphs()->At(i_ht2)->Clone();
00102 ht2_right->SetName("ht2_right");
00103 delete c_right;
00104 delete m_right;
00105
00106
00107 TFile *f_mid=new TFile(mid,"OPEN");
00108 TCanvas *c_mid=f_mid->Get("compare");
00109 c_mid->Draw();
00110 if(isPP05){
00111 p_c=(TPad*)gPad->FindObject("padt");
00112 p_c->cd();
00113 }
00114 TMultiGraph *m_mid=gPad->FindObject("m_pions")->Clone();
00115 TGraphErrors *mb_mid=m_mid->GetListOfGraphs()->At(i_mb)->Clone();
00116 mb_mid->SetName("mb_mid");
00117 TGraphErrors *ht1_mid=m_mid->GetListOfGraphs()->At(i_ht1)->Clone();
00118 ht1_mid->SetName("ht1_mid");
00119 TGraphErrors *ht2_mid=m_mid->GetListOfGraphs()->At(i_ht2)->Clone();
00120 ht2_mid->SetName("ht2_mid");
00121 delete c_mid;
00122 delete m_mid;
00123 f_mid->Close();
00124
00125
00126 divideGraphs(mb_left,mb_nom);
00127 divideGraphs(ht1_left,ht1_nom);
00128 divideGraphs(ht2_left,ht2_nom);
00129
00130 divideGraphs(mb_right,mb_nom);
00131 divideGraphs(ht1_right,ht1_nom);
00132 divideGraphs(ht2_right,ht2_nom);
00133
00134 divideGraphs(mb_mid,mb_nom);
00135 divideGraphs(ht1_mid,ht1_nom);
00136 divideGraphs(ht2_mid,ht2_nom);
00137
00138 divideGraphs(mb_nom,mb_nom);
00139 divideGraphs(ht1_nom,ht1_nom);
00140 divideGraphs(ht2_nom,ht2_nom);
00141
00142
00143 TCanvas *c=new TCanvas("c","c",400,300);
00144 TMultiGraph *m=new TMultiGraph();
00145
00146
00147
00148
00149 m->Add(mb_left);
00150 m->Add(ht1_left);
00151 m->Add(ht2_left);
00152 m->Add(mb_right);
00153 m->Add(ht1_right);
00154 m->Add(ht2_right);
00155 m->Add(mb_mid);
00156 m->Add(ht1_mid);
00157 m->Add(ht2_mid);
00158
00159 m->SetMinimum(-0.5);
00160 m->SetMaximum(0.5);
00161
00162
00163 TLegend *leg=new TLegend(0.5,0.5,0.7,0.7);
00164
00165 leg->AddEntry(mb_left,"{-3#sigma,2#sigma}","p");
00166 leg->AddEntry(mb_right,"{-2#sigma,3#sigma}","p");
00167 leg->AddEntry(mb_mid,"{-2#sigma,2#sigma}","p");
00168
00169 m->Draw("ape");
00170 err_mb_hi->Draw("same");
00171 err_mb_lo->Draw("same");
00172 err_ht_hi->Draw("same");
00173 err_ht_lo->Draw("same");
00174
00175 leg->Draw();
00176
00177 if(isPP05){
00178 c->SaveAs("error_yield_pp.eps");
00179 c->SaveAs("error_yield_pp.root");
00180 }
00181 else{
00182 c->SaveAs("error_yield_dau.eps");
00183 c->SaveAs("error_yield_dau.root");
00184 }
00185 }