StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
plPRL_AL.C
1 const int mxTheo=4, mxPN=2;
2 TString theoNameA[mxTheo]={"dns_k", "dns_kkp","dssv08","dssv08/mrst02"};
3 TString pnS[mxPN]={"+","-"};
4 TString pnL[mxPN]={"p","n"};
5 TH1F *hTheoA[mxPN][mxTheo];
6 int theoCol[mxTheo]={kBlue,kRed, kBlack,kMagenta};
7 TGraphErrors *grP[mxPN]; // STAR data point(s)
8 TString iPath="asyWALfinalPRL/";
9 
10 int justTheo=0; // defalut=0: show theory& data, 2 theory w/ scale error
11 
12 void plPRL_AL(TString cCore="WAL_PRL_AL") {
13  gStyle->SetOptStat(0);
14  gStyle->SetLineStyleString(2,"15 14");
15  gStyle->SetLineStyleString(3,"4 9");
16  gStyle->SetLineStyleString(4,"10 10 4 10");
17 
18  const Char_t *title="Longitudinal single-spin asymmetry A_L for W boson production at midrapidity";
19  c=new TCanvas(cCore,title,500,550);
20  setPadPaperSize(245.0); // column width, approx. 3.4 in = 245 pt
21  setPadMarginWidthPoint(gPad, 27, 1, 2, (2.0*12.0) + 2, gPad);
22  setPadLineWidthPoint(gPad, 0.5);
23 
24 
25  h0=new TH1F("bb", ";Lepton #eta",10,-2,2);
26  h0->SetMaximum(0.59);
27  h0->SetMinimum(-0.59);
28  h0->GetXaxis()->SetNdivisions(5);
29  h0->GetXaxis()->CenterTitle(true);
30  stripCmdHist(h0);
31  setHistFontSize(h0, 10.0);
32  setLineWidthPoint(h0, 0.5);
33  setMarkerSizePoint(h0, 3.5);
34  setHistTickLength(h0, 4.0, 4.0);
35  setHistTitleLabelOffset(h0, 2.0*12.0 - 2.0, 28, 12.0 - 2.0, 4.5 - 2.0);
36  h0->Draw();
37  if(justTheo){
38  ln=new TLine(-1,-0.59,-1,0.3); ln->Draw(); ln->SetLineStyle(3);
39  ln=new TLine(1,-0.59,1,0.4); ln->Draw(); ln->SetLineStyle(3);
40  }
41  uploadData();
42 
43 
44  uploadTheoryRhicbos();
45  uploadTheoryDeFlor();
46  plotTheory();
47  if(!justTheo) plotSysErr();
48  if(!justTheo) plotData();
49  plotMiscText();
50 
51 }
52 
53 
54 //====================================================
55 //====================================================
56 //====================================================
57 
58 void plotMiscText() {
59 
60  // STAR description
61  float x0=0.14, y0=0.93;
62  tlx=new TLatex(x0,y0,"#font[82]{STAR} 2009 " + SYMBOL_sqrts + "_{_{ }}#font[122]{=}_{ }_{_{ }}500 " + SYMBOL_GeV);
63  tlx->SetNDC();
64  stripCmdLatex(tlx);
65  setTextFontSize(tlx, 10.0);
66  if(!justTheo) tlx->Draw();
67 
68  tlx=new TLatex(x0+0.05,y0-0.06,SYMBOL_parrowplusp + "_{ }#rightarrow_{ }#font[12]{W}^{#pm}^{ }#rightarrow_{ }#font[12]{e}^{^{ }#pm}^{ }#font[122]{+}_{ }#nu");
69  tlx->Draw();
70  tlx->SetNDC();
71  stripCmdLatex(tlx);
72  setTextFontSize(tlx, 10.0);
73 
74  tlx=new TLatex(x0+0.05,y0-0.11,SYMBOL_ET + "^{^{ }#font[12]{e}} > 25 " + SYMBOL_GeV);
75  tlx->Draw();
76  tlx->SetNDC();
77  stripCmdLatex(tlx);
78  setTextFontSize(tlx, 10.0);
79 
80  // Ws labels
81  tlx=new TLatex(0.4,0.75,"#font[12]{W}^{#font[122]{-}}");
82  tlx->Draw();
83  tlx->SetNDC();
84  stripCmdLatex(tlx);
85  setTextFontSize(tlx, 10.0);
86  tlx=new TLatex(0.4,0.22,"#font[12]{W}^{#font[122]{+}}");
87  tlx->Draw();
88  tlx->SetNDC();
89  stripCmdLatex(tlx);
90  setTextFontSize(tlx, 10.0);
91 
92  // Yaxis labels
93  tlx=new TLatex(0.025,.92,"#font[12]{A_{L}}");
94  tlx->Draw();
95  tlx->SetNDC();
96  stripCmdLatex(tlx);
97  setTextFontSize(tlx, 10.0);
98 
99  // Yaxis labels
100  tlx=new TLatex(0.73,.59,"#font[12]{A_{L}}_{ }#font[122]{=} #frac{ " + SYMBOL_sigmaplus + "_{ }#font[122]{-}_{ }" + SYMBOL_sigmaminus + "}{ #shifty[0.1]{" + SYMBOL_sigmaplus + "_{ }#font[122]{+}_{ }" + SYMBOL_sigmaminus + "}}");
101  tlx->Draw();
102  tlx->SetNDC();
103  stripCmdLatex(tlx);
104  setLineWidthPoint(tlx, 0.5);
105  setTextFontSize(tlx, 10.0);
106 
107 
108  //........
109  if(justTheo==2) {
110  TLatex *lat3 = new TLatex(0.25,0.87,"Theory scaled by #pm 4.7%, #sqrt{s}=500 GeV");
111  lat3->SetNDC();
112  lat3->Draw("same");
113  lat3->SetTextColor(12);
114  stripCmdLatex(lat3);
115  setTextFontSize(lat3, 10.0);
116  }
117 
118  return; // no printing date
119  TDatime dt;
120  tx=new TLatex(-2,-0.72,dt.AsString());
121  stripCmdLatex(tx);
122  setTextFontSize(tx, 10.0);
123  if(!justTheo) tx->Draw();
124 }
125 
126 //---------------------------------------------------
127 //---------------------------------------------------
128 //---------------------------------------------------
129 
130 
131 void plotTheory() {
132 
133  float x0=0.655, y0=0.508;
134  tlx=new TLatex(x0,y0," #font[12]{W}^{#font[122]{-}} _{_{ }}#font[12]{W}^{#font[122]{+}} _{_{ }}#font[82]{RHICBOS:}");
135  tlx->Draw();
136  tlx->SetNDC();
137  stripCmdLatex(tlx);
138  setTextFontSize(tlx, 8.0);
139  TLegend *thLg[mxPN*2];
140  float x,y,dy=0.14;
141  x=x0+0.06; y=y0-0.095;
142  thLg[0]=new TLegend(x,y,x+0.27,y+0.09);
143  thLg[2]=new TLegend(x,y0-dy,x+0.27,y0-dy); //deFlor W+
144  x=x-0.07; thLg[1]=new TLegend(x,y,x+0.27,y+0.09);
145  thLg[3]=new TLegend(x,y0-dy,x+0.27,y0-dy); //deFlor W-
146 
147  for( int iPN=0; iPN<mxPN*2;iPN++) {
148  TLegend *lg=thLg[iPN];
149  lg->SetFillColor(kWhite);
150  lg->SetLineColor(kWhite);
151  lg->SetShadowColor(kWhite);
152  }
153 
154  char *theoL[mxTheo]={" #font[82]{DNS}#shiftx[0.2]{-}K"," #shifty[0.13]{#font[82]{DNS}#shiftx[0.2]{-}#font[82]{KKP}}"," #font[82]{DSSV}08"," #font[82]{DSSV}08"};
155  for( int iPN=0; iPN<mxPN;iPN++) {
156  for (int ith=0;ith<mxTheo; ith++){
157  TH1F *hTheo=hTheoA[iPN][ith];
158  if(justTheo==2) plotOneBandTheory(hTheo,ith);// add scaling of theory
159  hTheo->Draw("same");
160  int ko=0; if(ith==3) ko=2;
161  if(iPN==0)
162  thLg[iPN+ko]->AddEntry(hTheo,theoL[ith],"l");
163  else
164  thLg[iPN+ko]->AddEntry(hTheo," ","l");
165  stripCmdLegend(thLg[iPN+ko]);
166  setTextFontSize(thLg[iPN+ko], 8.0);
167  // break;
168  }
169  gPad->SetGrid(0,0);
170  }
171  thLg[1]->Draw();
172  thLg[0]->Draw();
173  thLg[3]->Draw();
174  thLg[2]->Draw();
175  tlx=new TLatex(x0+.142,y0-dy+0.019,"#font[82]{CHE:}");
176  tlx->Draw();
177  tlx->SetNDC();
178  stripCmdLatex(tlx);
179  setTextFontSize(tlx, 8.0);
180 
181  // fix the right edge
182  ln=new TLine(2,-0.4,2,0); ln->Draw();
183  // add box for legende
184  // tb=new TBox(0.39,-0.265,1.96,-0.01); tb->Draw();
185  //tb->SetFillStyle(0); tb->SetLineColor(12);
186 
187 }
188 
189 //---------------------------------------------------
190 //---------------------------------------------------
191 //---------------------------------------------------
192 void uploadData() {
193 // read data
194 
195  TString inpCore="run9setP1234";
196  TString fullInpName=iPath; fullInpName+=inpCore;
197  fullInpName+=".wasy.hist.root";
198  fdd=new TFile(fullInpName);
199  if(! fdd->IsOpen()) {
200  printf("EROR: input histo file not found, quit\n",fullInpName.Data());
201  return;
202  } else {
203  printf("Opened: %s\n",fullInpName.Data());
204  }
205 
206 
207  for(int iq=0;iq<mxPN;iq++) {
208  TGraphErrors *gr=new TGraphErrors;
209  gr->SetMarkerStyle(21-iq);
210  setMarkerSizePoint(gr, 3.5);
211  gr->SetMarkerColor(kBlack);
212  setLineWidthPoint(gr, 1);
213  gr->SetLineColor(kBlack);
214 
215  char *tt1="hAsyP";
216  if(iq==1) tt1="hAsyN";
217  TH1F *hAsy=(TH1F *)fdd->Get(tt1); assert( hAsy);
218 
219  double asy=hAsy->GetBinContent(3);
220  double asyEr=hAsy->GetBinError(3);
221  printf("W %s AL=%.3f +/- %.3f nSig=%.1f\n", pnS[iq].Data(),asy,asyEr,asy/asyEr);
222  gr->Clear();
223  gr->SetPoint(0,0,asy);
224  gr->SetPointError(0,1.,asyEr);
225 
226  grP[iq]=gr;
227 
228  }
229 }
230 
231 //---------------------------------------------------
232 //---------------------------------------------------
233 //---------------------------------------------------
234 void plotData(){
235 
236  for(int iq=0;iq<mxPN;iq++) {
237  grP[iq]->Draw("p");
238 
239  }
240 
241 
242 
243 }
244 //---------------------------------------------------
245 //---------------------------------------------------
246 //---------------------------------------------------
247 void plotSysErr() {
248 
249 
250  float dx=0.08;
251  for(int iq=0;iq<mxPN;iq++) {
252  float x=grP[iq]->GetX()[0];
253  float y=grP[iq]->GetY()[0];
254 
255 
256  float facYup=0.88, facYdw=1.12; // W+ , hardcoded
257  if(iq==1) facYup=1.16, facYdw=0.84; // W- , hardcoded
258 
259  bx=new TBox(x-dx,y*facYdw,x+dx,y*facYup);
260  bx->Draw(); bx->SetFillColor(16);
261  //bx->SetFillStyle(3001);
262  }
263 
264  float x0=-1.8,y0=-0.57;
265  bx=new TBox(x0,y0,x0+2*dx,y0+0.08);
266  bx->Draw(); bx->SetFillColor(16);
267  //bx->SetFillStyle(3001);
268  tlx=new TLatex(x0+0.2,y0+.05,"Syst. uncertainty due to abs. ");
269  tlx->Draw();
270  stripCmdLatex(tlx);
271  setTextFontSize(tlx, 8.0);
272  tlx=new TLatex(x0+0.2,y0+.01,"polarization and background");
273  tlx->Draw();
274  stripCmdLatex(tlx);
275  setTextFontSize(tlx, 8.0);
276 
277 }
278 
279 //---------------------------------------------------
280 //---------------------------------------------------
281 //---------------------------------------------------
282 
283 
284 
285 //======================
286 void uploadTheoryRhicbos(){
287  for( int iPN=0; iPN<mxPN;iPN++) {
288  TString nameUn="rb400_w"+pnL[iPN]+"_unp_ct5m_pt25.root";
289  funp=new TFile( iPath+nameUn); assert(funp->IsOpen());
290  hunp= (TH1F*)funp->Get("h3"); assert(hunp);
291 
292 
293  for (int ith=0;ith<mxTheo-1; ith++){
294  TString namePol="rb400_w"+pnL[iPN]+"_pol_"+theoNameA[ith]+"_pt25.root";
295 
296  fpol=new TFile( iPath+namePol); assert(fpol->IsOpen());
297  TH1F* hpol=(TH1F*) fpol->Get("h3"); assert(hpol);
298 
299  hal=(TH1F*) hpol->Clone();
300  hal->Divide(hunp);
301  TString hName="w"+pnL[iPN]+"_"+theoNameA[ith];
302  TString hTitle="W"+pnS[iPN]+" "+theoNameA[ith]+"; lepton #eta";
303 
304  hal->SetNameTitle(hName,hTitle);
305 
306 
307  hTheoA[iPN][ith]=hal;
308  hal->SetLineColor( theoCol[ith]);
309  if(iPN) hal->SetLineStyle(2+ith);
310  setLineWidthPoint(hal, 0.5);
311 
312 
313  continue;
314 
315  c=new TCanvas();
316  c->Divide(2,2);
317  c->cd(1);hunp->Draw();
318  c->cd(2);hpol->Draw();
319 
320  c->cd(3);hal->Draw(); hal->SetLineColor(kRed);;
321  hal->SetMaximum(0.6); hal->SetMinimum(-0.6);
322 
323  }
324  }
325  return;
326 }
327 
328 
329 
330 
331 //======================
332 void uploadTheoryDeFlor(){
333  for( int iPN=0; iPN<mxPN;iPN++) {
334  TString nameUn="deFlor_w"+pnL[iPN]+"_unp_mrst02_pt25_full.root";
335  funp=new TFile( iPath+nameUn); assert(funp->IsOpen());
336  hunp= (TH1F*)funp->Get("h3"); assert(hunp);
337 
338  char * theoName="dssv08";
339  int ith=mxTheo-1;
340  TString namePol="deFlor_w"+pnL[iPN]+"_pol_"+theoName+"_pt25_full.root";
341  fpol=new TFile( iPath+namePol); assert(fpol->IsOpen());
342  TH1F* hpol=(TH1F*) fpol->Get("h3"); assert(hpol);
343 
344  hal=(TH1F*) hpol->Clone();
345  hal->Divide(hunp);
346  TString hName="w"+pnL[iPN]+"_deFlor_dssv";
347  TString hTitle="W"+pnS[iPN]+" deFlor dssv; lepton #eta";
348 
349  hal->SetNameTitle(hName,hTitle);
350 
351 
352  hTheoA[iPN][ith]=hal;
353  hal->SetLineColor( theoCol[ith]);
354  if(iPN) hal->SetLineStyle(2);
355  setLineWidthPoint(hal, 0.5);
356  // hal->Draw(); break;
357  }
358 }
359 
360 
361 //---------------------------------------------------
362 //---------------------------------------------------
363 //---------------------------------------------------
364 
365 
366 void plotOneBandTheory(TH1F*hIn , int it) {
367  //if(iq)return;
368  float sysErr=.047;
369  for(int ib=0;ib<2;ib++){
370  TH1F * hu=(TH1F*) hIn->Clone();
371  // hu->SetLineColor(0);
372  hu->Draw("same e3");
373  TAxis *ax=hu->GetXaxis();
374  for(ib=1;ib<=ax->GetNbins();ib++){
375  float y= hu->GetBinContent(ib);
376  hu->SetBinError(ib,y*sysErr);
377  }
378  hu->SetFillStyle(3003+it);
379 
380  hu->SetFillColor( hu->GetLineColor());
381  }
382 }
383