Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:11:18

0001 #include "./util_combine.h"
0002 
0003 bool verbose = true;
0004 
0005 bool docombine = true;
0006 std::string comb_fname = "./systematics/combined/combined.root";
0007 std::vector<TGraphAsymmErrors *> v_sphenix_dNdeta;
0008 std::string color_sphenix_combine = "#1A1423";
0009 std::string leg_sphenix_combine = "sPHENIX (Combined)";
0010 int mkstyle_sphenix_combine = 20;
0011 float mksize_sphenix_combine = 0.9;
0012 
0013 std::vector<float> v_sphenix_centralitybin = {0, 3, 6, 10, 15, 20, 25, 30, 35, 40, 45, 50};
0014 int nsphenix = v_sphenix_centralitybin.size() - 1;
0015 std::vector<TH1 *> v_sphenix_dNdeta_cmsapproach_hist;
0016 std::vector<TGraphAsymmErrors *> v_SPHENIX_dNdeta_cmsapproach;
0017 std::vector<std::string> v_SPHENIX_labels = {};
0018 std::string color_sphenix_cmsapproach = "#FF6700";
0019 std::string leg_sphenix_cmsapproach = "The closest-match method";
0020 int mkstyle_sphenix_cmsapproach = 34;
0021 float mksize_sphenix_cmsapproach = 0.9;
0022 
0023 std::vector<TH1 *> v_sphenix_dNdeta_phobosapproach_hist;
0024 std::vector<TGraphAsymmErrors *> v_SPHENIX_dNdeta_phobosapproach;
0025 std::string color_sphenix_phobosapproach = "#228B22";
0026 std::string leg_sphenix_phobosapproach = "The combinatoric method";
0027 int mkstyle_sphenix_phobosapproach = 47;
0028 float mksize_sphenix_phobosapproach = 0.9;
0029 
0030 bool draw_brahms = false;
0031 std::vector<float> v_brahms_centralitybin = {0, 5, 10, 20, 30, 40, 50};
0032 int nbrahms = v_brahms_centralitybin.size() - 1;
0033 std::vector<TGraphAsymmErrors *> v_BRAHMS_dNdeta;
0034 std::vector<std::string> v_BRAHMS_labels = {};
0035 std::string color_brahms = "#7868E6";
0036 std::string leg_brahms = "#splitline{BRAHMS}{[Phys. Rev. Lett. 88, 202301 (2002)]}";
0037 int mkstyle_brahms = 28;
0038 
0039 bool draw_phobos = docombine;
0040 std::vector<float> v_phobos_centralitybin = {0, 3, 6, 10, 15, 20, 25, 30, 35, 40, 45, 50};
0041 int nphobos = v_phobos_centralitybin.size() - 1;
0042 std::vector<TGraphAsymmErrors *> v_PHOBOS_dNdeta;
0043 std::vector<std::string> v_PHOBOS_labels = {};
0044 std::string color_phobos = "#035397";
0045 std::string leg_phobos = "#splitline{PHOBOS}{[Phys. Rev. C 83, 024913 (2011)]}";
0046 // std::string leg_phobos = "PHOBOS [Phys. Rev. C 83, 024913 (2011)]";
0047 int mkstyle_phobos = 25;
0048 float mksize_phobos = 0.9;
0049 
0050 float absxlim = (draw_phobos) ? 1.99 : 1.59;
0051 // std::string prelimtext = "Internal";
0052 std::string prelimtext = "";
0053 
0054 float LeftMargin = 0.25;
0055 float RightMargin = 0.05;
0056 float TopMargin = 0.05;
0057 float BottomMargin = 0.13;
0058 bool logy = true;
0059 float ymax_pad = (logy) ? 1800 : ((docombine) ? 940 : 970);
0060 float ymin_pad = (logy) ? 75 : 60;
0061 float axis_title_size = 0.045;
0062 float axis_label_size = 0.04;
0063 float leg_textsize = 0.04;
0064 float centlabel_textsize = 0.025;
0065 float xticklength = 0.03;
0066 float yticklength = 0.03;
0067 float pad1_legtextscale = 1.1;
0068 float pad1_titletextscale = 1.2;
0069 float pad1_labeltextscale = 1.1;
0070 float pad1_ytitleoffset = 2.2;
0071 float pad2_labeltextscale = 1.4;
0072 float pad2_tickscale = 1.25;
0073 
0074 void PHOBOS_dNdeta()
0075 {
0076     // load PHOBOS measurements
0077     TFile *f = new TFile("./measurements/PHOBOS-PhysRevC.83.024913/auau_200GeV.root", "READ");
0078     f->cd();
0079     for (int i = 0; i < nphobos; i++)
0080     {
0081         TGraphAsymmErrors *g = (TGraphAsymmErrors *)gDirectory->Get(Form("AuAu_200GeV_Centrality_%dto%d", (int)v_phobos_centralitybin[i], (int)v_phobos_centralitybin[i + 1]));
0082         v_PHOBOS_dNdeta.push_back(g);
0083         v_PHOBOS_labels.push_back(Form("%d-%d%%", (int)v_phobos_centralitybin[i], (int)v_phobos_centralitybin[i + 1]));
0084     }
0085     f->Close();
0086 }
0087 
0088 TGraphAsymmErrors *TH1toTGraphAsymmErrors(TH1 *h)
0089 {
0090     int Nbins = h->GetNbinsX();
0091 
0092     std::vector<float> vx, vy, vxerr, vyerr;
0093     vx.clear();
0094     vy.clear();
0095     vxerr.clear();
0096     vyerr.clear();
0097     for (int i = 1; i <= Nbins; i++)
0098     {
0099         if (h->GetBinContent(i) <= 0)
0100             continue;
0101 
0102         if (fabs(h->GetBinCenter(i)) >= 1.1)
0103             continue;
0104 
0105         vx.push_back(h->GetBinCenter(i));
0106         vy.push_back(h->GetBinContent(i));
0107         vxerr.push_back(h->GetBinWidth(i) * 0.49);
0108         vyerr.push_back(h->GetBinError(i));
0109     }
0110 
0111     TGraphAsymmErrors *g = new TGraphAsymmErrors(vx.size(), vx.data(), vy.data(), vxerr.data(), vxerr.data(), vyerr.data(), vyerr.data());
0112     return g;
0113 }
0114 
0115 void SPHENIX_dNdeta()
0116 {
0117     TFile *f_comb = new TFile(comb_fname.c_str(), "READ");
0118 
0119     for (int i = 0; i < nsphenix; i++)
0120     {
0121         int Mbin = GetMbinNum(Form("Centrality%dto%d", (int)v_sphenix_centralitybin[i], (int)v_sphenix_centralitybin[i + 1]));
0122 
0123         // CMS-inspired approach
0124         TFile *f = new TFile(Form("./systematics/Centrality%dto%d_Zvtxm10p0to10p0_noasel/finalhists_systematics_Centrality%dto%d_Zvtxm10p0to10p0_noasel.root", (int)v_sphenix_centralitybin[i], (int)v_sphenix_centralitybin[i + 1], (int)v_sphenix_centralitybin[i], (int)v_sphenix_centralitybin[i + 1]), "READ");
0125         TH1D *h = (TH1D *)f->Get("hM_final");
0126         h->SetDirectory(0);
0127         v_sphenix_dNdeta_cmsapproach_hist.push_back(h);
0128         TGraphAsymmErrors *g_cms = TH1toTGraphAsymmErrors(h);
0129         v_SPHENIX_dNdeta_cmsapproach.push_back(g_cms);
0130         v_SPHENIX_labels.push_back(Form("%d-%d%%", (int)v_sphenix_centralitybin[i], (int)v_sphenix_centralitybin[i + 1]));
0131         f->Close();
0132 
0133         // PHOBOS-inspired approach
0134         TFile *fphobos = new TFile(Form("/sphenix/user/ChengWei/sPH_dNdeta/Run24AuAuMC/Sim_HIJING_MDC2_ana472_20250307/Run7/EvtVtxZ/FinalResult_10cm_Pol2BkgFit_DeltaPhi0p026/completed/vtxZ_-10_10cm_MBin%d/Final_Mbin%d_00054280/Final_Mbin%d_00054280.root", Mbin, Mbin, Mbin), "READ");
0135         TH1D *hphobos = (TH1D *)fphobos->Get("h1D_dNdEta_reco");
0136         hphobos->SetDirectory(0);
0137         v_sphenix_dNdeta_phobosapproach_hist.push_back(hphobos);
0138         TGraphAsymmErrors *g_phobos = TH1toTGraphAsymmErrors(hphobos);
0139         v_SPHENIX_dNdeta_phobosapproach.push_back(g_phobos);
0140         fphobos->Close();
0141 
0142         // combined measurement
0143         TFile *f_comb = new TFile(comb_fname.c_str(), "READ");
0144         TGraphAsymmErrors *g = (TGraphAsymmErrors *)f_comb->Get(Form("tgae_combine_Centrality%dto%d", (int)v_sphenix_centralitybin[i], (int)v_sphenix_centralitybin[i + 1]));
0145         v_sphenix_dNdeta.push_back(g);
0146         f_comb->Close();
0147     }
0148 }
0149 
0150 void draw_dNdetaRHIC_v3()
0151 {
0152     std::string plotdir = "./dNdEtaFinal";
0153     system(Form("mkdir -p %s", plotdir.c_str()));
0154 
0155     SPHENIX_dNdeta();
0156 
0157     if (draw_phobos)
0158         PHOBOS_dNdeta();
0159 
0160     for (int i = 0; i < nsphenix; i++)
0161     {
0162         v_SPHENIX_dNdeta_cmsapproach[i]->SetMarkerStyle(mkstyle_sphenix_cmsapproach);
0163         v_SPHENIX_dNdeta_cmsapproach[i]->SetMarkerSize(mksize_sphenix_cmsapproach);
0164         v_SPHENIX_dNdeta_cmsapproach[i]->SetLineColor(TColor::GetColor(color_sphenix_cmsapproach.c_str()));
0165         v_SPHENIX_dNdeta_cmsapproach[i]->SetLineWidth(1);
0166         v_SPHENIX_dNdeta_cmsapproach[i]->SetMarkerColor(TColor::GetColor(color_sphenix_cmsapproach.c_str()));
0167         v_SPHENIX_dNdeta_cmsapproach[i]->SetFillColorAlpha(TColor::GetColor(color_sphenix_cmsapproach.c_str()), 0.2);
0168 
0169         v_SPHENIX_dNdeta_phobosapproach[i]->SetMarkerStyle(mkstyle_sphenix_phobosapproach);
0170         v_SPHENIX_dNdeta_phobosapproach[i]->SetMarkerSize(mksize_sphenix_phobosapproach);
0171         v_SPHENIX_dNdeta_phobosapproach[i]->SetLineColor(TColor::GetColor(color_sphenix_phobosapproach.c_str()));
0172         v_SPHENIX_dNdeta_phobosapproach[i]->SetLineWidth(1);
0173         v_SPHENIX_dNdeta_phobosapproach[i]->SetMarkerColor(TColor::GetColor(color_sphenix_phobosapproach.c_str()));
0174         v_SPHENIX_dNdeta_phobosapproach[i]->SetFillColorAlpha(TColor::GetColor(color_sphenix_phobosapproach.c_str()), 0.2);
0175 
0176         v_sphenix_dNdeta[i]->SetMarkerStyle(mkstyle_sphenix_combine);
0177         v_sphenix_dNdeta[i]->SetMarkerSize(mksize_sphenix_combine);
0178         v_sphenix_dNdeta[i]->SetLineColor(TColor::GetColor(color_sphenix_combine.c_str()));
0179         v_sphenix_dNdeta[i]->SetLineWidth(1);
0180         v_sphenix_dNdeta[i]->SetMarkerColor(TColor::GetColor(color_sphenix_combine.c_str()));
0181         v_sphenix_dNdeta[i]->SetFillColorAlpha(TColor::GetColor(color_sphenix_combine.c_str()), 0.2);
0182 
0183         // print the points and errors for debugging
0184         if (verbose)
0185         {
0186             // cout << "Centrality: " << v_SPHENIX_labels[i] << endl;
0187             for (int j = 0; j < v_SPHENIX_dNdeta_cmsapproach[i]->GetN(); j++)
0188             {
0189                 double x, y, xerrl, xerru, yerrl, yerru;
0190                 v_SPHENIX_dNdeta_cmsapproach[i]->GetPoint(j, x, y);
0191                 xerrl = v_SPHENIX_dNdeta_cmsapproach[i]->GetErrorXlow(j);
0192                 xerru = v_SPHENIX_dNdeta_cmsapproach[i]->GetErrorXhigh(j);
0193                 yerrl = v_SPHENIX_dNdeta_cmsapproach[i]->GetErrorYlow(j);
0194                 yerru = v_SPHENIX_dNdeta_cmsapproach[i]->GetErrorYhigh(j);
0195                 // cout << "CMS approach: " << x << " " << y << " " << xerrl << " " << xerru << " " << yerrl << " " << yerru << endl;
0196             }
0197             for (int j = 0; j < v_SPHENIX_dNdeta_phobosapproach[i]->GetN(); j++)
0198             {
0199                 double x, y, xerrl, xerru, yerrl, yerru;
0200                 v_SPHENIX_dNdeta_phobosapproach[i]->GetPoint(j, x, y);
0201                 xerrl = v_SPHENIX_dNdeta_phobosapproach[i]->GetErrorXlow(j);
0202                 xerru = v_SPHENIX_dNdeta_phobosapproach[i]->GetErrorXhigh(j);
0203                 yerrl = v_SPHENIX_dNdeta_phobosapproach[i]->GetErrorYlow(j);
0204                 yerru = v_SPHENIX_dNdeta_phobosapproach[i]->GetErrorYhigh(j);
0205                 // cout << "PHOBOS approach: " << x << " " << y << " " << xerrl << " " << xerru << " " << yerrl << " " << yerru << endl;
0206             }
0207         }
0208     }
0209 
0210     if (draw_phobos)
0211     {
0212         for (int i = 0; i < nphobos; i++)
0213         {
0214             v_PHOBOS_dNdeta[i]->SetMarkerStyle(mkstyle_phobos);
0215             v_PHOBOS_dNdeta[i]->SetMarkerSize(mksize_phobos);
0216             v_PHOBOS_dNdeta[i]->SetLineColor(TColor::GetColor(color_phobos.c_str()));
0217             v_PHOBOS_dNdeta[i]->SetLineWidth(1);
0218             v_PHOBOS_dNdeta[i]->SetMarkerColor(TColor::GetColor(color_phobos.c_str()));
0219             v_PHOBOS_dNdeta[i]->SetFillColorAlpha(TColor::GetColor(color_phobos.c_str()), 0.15);
0220             // mg_phobos->Add(v_PHOBOS_dNdeta[i], "3 p");
0221         }
0222     }
0223 
0224     TCanvas *c = new TCanvas("c", "c", 1000, 600);
0225     TPad *pad1 = new TPad("pad1", "pad1", 0, 0.0, 0.56, 1);
0226     TPad *pad2 = new TPad("pad2", "pad2", 0.56, 0.0, 1, 1);
0227     pad1->SetTopMargin(TopMargin);
0228     pad1->SetBottomMargin(BottomMargin);
0229     pad1->SetLeftMargin(LeftMargin);
0230     pad1->SetRightMargin(0);
0231     pad2->SetTopMargin(TopMargin);
0232     pad2->SetBottomMargin(BottomMargin);
0233     pad2->SetRightMargin(RightMargin);
0234     pad2->SetLeftMargin(0);
0235     pad1->Draw();
0236     pad2->Draw();
0237     pad1->cd();
0238     pad1->SetLogy(logy);
0239     // Legend
0240     if (draw_phobos) // will always draw combined sPHENIX
0241     {
0242         // loop over v_PHOBOS_dNdeta and v_sphenix_dNdeta and only draw even indices
0243         for (size_t i = 0; i < v_PHOBOS_dNdeta.size() && i < v_sphenix_dNdeta.size(); i += 2)
0244         {
0245             if (i == 0)
0246             {
0247                 v_PHOBOS_dNdeta[i]->SetMaximum(ymax_pad);
0248                 v_PHOBOS_dNdeta[i]->SetMinimum(ymin_pad);
0249                 // v_PHOBOS_dNdeta[i]->GetYaxis()->SetNdivisions(4, 2, 0);
0250                 v_PHOBOS_dNdeta[i]->GetXaxis()->SetLimits(-absxlim, absxlim);
0251                 if (logy)
0252                     v_PHOBOS_dNdeta[i]->GetYaxis()->SetMoreLogLabels();
0253                 v_PHOBOS_dNdeta[i]->GetXaxis()->SetNdivisions(505);
0254 
0255                 v_PHOBOS_dNdeta[i]->GetYaxis()->SetTitle("dN_{ch}/d#eta");
0256                 // v_PHOBOS_dNdeta[i]->GetYaxis()->CenterTitle(true);
0257                 v_PHOBOS_dNdeta[i]->GetYaxis()->SetTitleOffset(pad1_ytitleoffset);
0258                 v_PHOBOS_dNdeta[i]->GetYaxis()->SetTitleSize(axis_title_size * pad1_titletextscale);
0259                 v_PHOBOS_dNdeta[i]->GetYaxis()->SetLabelSize(axis_label_size * pad1_labeltextscale);
0260                 v_PHOBOS_dNdeta[i]->GetYaxis()->SetTickLength(yticklength);
0261                 v_PHOBOS_dNdeta[i]->GetXaxis()->SetLabelSize(axis_label_size * pad1_labeltextscale);
0262                 v_PHOBOS_dNdeta[i]->GetXaxis()->SetTickLength(xticklength);
0263 
0264                 v_PHOBOS_dNdeta[i]->Draw("A 3 P");
0265                 v_sphenix_dNdeta[i]->Draw("5 P same");
0266             }
0267             else
0268             {
0269                 v_PHOBOS_dNdeta[i]->Draw("3 P same");
0270                 v_sphenix_dNdeta[i]->Draw("5 P same");
0271             }
0272 
0273             double x, y;
0274             x = v_sphenix_dNdeta[i]->GetPointX(v_sphenix_dNdeta[i]->GetN() - 1) + v_sphenix_dNdeta[i]->GetErrorXhigh(v_sphenix_dNdeta[i]->GetN() - 1);
0275             y = v_sphenix_dNdeta[i]->GetPointY(v_sphenix_dNdeta[i]->GetN() - 1) + v_sphenix_dNdeta[i]->GetErrorYhigh(v_sphenix_dNdeta[i]->GetN() - 1);
0276             // print out the first point for debugging
0277             cout << v_sphenix_dNdeta[i]->GetPointX(0) << " " << v_sphenix_dNdeta[i]->GetPointY(0) << " " << v_sphenix_dNdeta[i]->GetErrorYlow(0) << " " << v_sphenix_dNdeta[i]->GetErrorYhigh(0) << endl;
0278             TLatex *l = new TLatex(x, y, v_SPHENIX_labels[i].c_str());
0279             l->SetTextAlign(kHAlignLeft + kVAlignBottom);
0280             l->SetTextSize(centlabel_textsize * pad1_labeltextscale);
0281             // set color to match the graph
0282             l->SetTextColor(TColor::GetColor(color_sphenix_combine.c_str()));
0283             l->Draw();
0284         }
0285     }
0286     else
0287     {
0288         // loop over v_PHOBOS_dNdeta and v_sphenix_dNdeta and only draw even indices
0289         for (size_t i = 0; i < v_SPHENIX_dNdeta_phobosapproach.size() && i < v_SPHENIX_dNdeta_cmsapproach.size(); i += 2)
0290         {
0291             if (i == 0)
0292             {
0293                 v_SPHENIX_dNdeta_phobosapproach[i]->SetMaximum(ymax_pad);
0294                 v_SPHENIX_dNdeta_phobosapproach[i]->SetMinimum(ymin_pad);
0295                 // v_SPHENIX_dNdeta_phobosapproach[i]->GetYaxis()->SetNdivisions(4, 2, 0);
0296                 v_SPHENIX_dNdeta_phobosapproach[i]->GetXaxis()->SetLimits(-absxlim, absxlim);
0297                 if (logy)
0298                     v_SPHENIX_dNdeta_phobosapproach[i]->GetYaxis()->SetMoreLogLabels();
0299                 v_SPHENIX_dNdeta_phobosapproach[i]->GetXaxis()->SetNdivisions(505);
0300 
0301                 v_SPHENIX_dNdeta_phobosapproach[i]->GetYaxis()->SetTitle("dN_{ch}/d#eta");
0302                 // v_SPHENIX_dNdeta_phobosapproach[i]->GetYaxis()->CenterTitle(true);
0303                 v_SPHENIX_dNdeta_phobosapproach[i]->GetYaxis()->SetTitleOffset(pad1_ytitleoffset);
0304                 v_SPHENIX_dNdeta_phobosapproach[i]->GetYaxis()->SetTitleSize(axis_title_size * pad1_titletextscale);
0305                 v_SPHENIX_dNdeta_phobosapproach[i]->GetYaxis()->SetLabelSize(axis_label_size * pad1_labeltextscale);
0306                 v_SPHENIX_dNdeta_phobosapproach[i]->GetYaxis()->SetTickLength(yticklength);
0307                 v_SPHENIX_dNdeta_phobosapproach[i]->GetXaxis()->SetTickLength(xticklength);
0308 
0309                 v_SPHENIX_dNdeta_phobosapproach[i]->Draw("A 5 P");
0310                 v_SPHENIX_dNdeta_cmsapproach[i]->Draw("5 P same");
0311             }
0312             else
0313             {
0314                 v_SPHENIX_dNdeta_phobosapproach[i]->Draw("5 P same");
0315                 v_SPHENIX_dNdeta_cmsapproach[i]->Draw("5 P same");
0316             }
0317 
0318             // draw labels
0319             double x, y;
0320             x = v_SPHENIX_dNdeta_phobosapproach[i]->GetPointX(v_SPHENIX_dNdeta_phobosapproach[i]->GetN() - 1) + v_SPHENIX_dNdeta_phobosapproach[i]->GetErrorXlow(v_SPHENIX_dNdeta_phobosapproach[i]->GetN() - 1);
0321             y = v_SPHENIX_dNdeta_phobosapproach[i]->GetPointY(v_SPHENIX_dNdeta_phobosapproach[i]->GetN() - 1);
0322             cout << "phobos: x=" << x << " y=" << y << endl;
0323             TLatex *lphobos = new TLatex(x + 0.02, y, v_SPHENIX_labels[i].c_str());
0324             lphobos->SetTextAlign(kHAlignLeft + kVAlignCenter);
0325             lphobos->SetTextSize(centlabel_textsize * pad1_labeltextscale);
0326             // set color to match the graph
0327             lphobos->SetTextColor(TColor::GetColor(color_sphenix_phobosapproach.c_str()));
0328             lphobos->Draw();
0329 
0330             x = v_SPHENIX_dNdeta_cmsapproach[i]->GetPointX(0) - v_SPHENIX_dNdeta_cmsapproach[i]->GetErrorXlow(0);
0331             y = v_SPHENIX_dNdeta_cmsapproach[i]->GetPointY(0);
0332             cout << "cms: x=" << x << " y=" << y << endl;
0333             TLatex *lcms = new TLatex(x - 0.02, y, v_SPHENIX_labels[i].c_str());
0334             // set right and center adjusted
0335             lcms->SetTextAlign(kHAlignRight + kVAlignCenter);
0336             lcms->SetTextSize(centlabel_textsize * pad1_labeltextscale);
0337             // set color to match the graph
0338             lcms->SetTextColor(TColor::GetColor(color_sphenix_cmsapproach.c_str()));
0339             lcms->Draw();
0340         }
0341     }
0342     TLegend *sphnxleg = new TLegend(pad1->GetLeftMargin() + 0.04,    //
0343                                     1 - pad1->GetTopMargin() - 0.16, //
0344                                     pad1->GetLeftMargin() + 0.2,     //
0345                                     1 - pad1->GetTopMargin() - 0.05  //
0346     );
0347     sphnxleg->SetLineStyle(1);
0348     sphnxleg->SetLineWidth(1);
0349     sphnxleg->SetLineColor(1);
0350     sphnxleg->SetTextAlign(kHAlignLeft + kVAlignCenter);
0351     sphnxleg->SetTextSize(leg_textsize);
0352     sphnxleg->SetFillStyle(0);
0353     sphnxleg->AddEntry("", Form("#it{#bf{sPHENIX}} %s", prelimtext.c_str()), "");
0354     sphnxleg->AddEntry("", "Au+Au #sqrt{s_{NN}}=200 GeV", "");
0355     sphnxleg->Draw();
0356 
0357     pad2->cd();
0358     pad2->SetLogy(logy);
0359     TLegend *leg = new TLegend((!docombine) ? pad2->GetLeftMargin() + 0.1 : pad2->GetLeftMargin() + 0.07,         //
0360                                (!docombine) ? 1 - pad2->GetTopMargin() - 0.175 : 1 - pad2->GetTopMargin() - 0.115, //
0361                                pad2->GetLeftMargin() + 0.55,                                                      //
0362                                (!docombine) ? 1 - pad2->GetTopMargin() - 0.05 : 1 - pad2->GetTopMargin() - 0.04   //
0363     );
0364     // leg->SetTextAlign(kHAlignLeft + kVAlignCenter);
0365     leg->SetTextSize(leg_textsize);
0366     leg->SetBorderSize(0);
0367     leg->SetFillStyle(0);
0368 
0369     // for phobos
0370     TLegend *leg2 = new TLegend((!docombine) ? pad2->GetLeftMargin() + 0.1 : pad2->GetLeftMargin() + 0.07, //
0371                                 1 - pad2->GetTopMargin() - 0.19,                                           //
0372                                 pad2->GetLeftMargin() + 0.55,                                              //
0373                                 1 - pad2->GetTopMargin() - 0.115                                           //
0374     );
0375     leg2->SetTextAlign(kHAlignLeft + kVAlignTop);
0376     leg2->SetTextSize(leg_textsize);
0377     leg2->SetBorderSize(0);
0378     leg2->SetFillStyle(0);
0379 
0380     if (draw_phobos) // will always draw combined sPHENIX
0381     {
0382         // loop over v_PHOBOS_dNdeta and v_sphenix_dNdeta and only draw even indices
0383         for (size_t i = 1; i < v_PHOBOS_dNdeta.size() && i < v_sphenix_dNdeta.size(); i += 2)
0384         {
0385             if (i == 1)
0386             {
0387                 v_PHOBOS_dNdeta[i]->SetMaximum(ymax_pad);
0388                 v_PHOBOS_dNdeta[i]->SetMinimum(ymin_pad);
0389                 // v_PHOBOS_dNdeta[i]->GetYaxis()->SetNdivisions(4, 2, 0);
0390                 v_PHOBOS_dNdeta[i]->GetXaxis()->SetLimits(-absxlim, absxlim);
0391                 if (logy)
0392                     v_SPHENIX_dNdeta_phobosapproach[i]->GetYaxis()->SetMoreLogLabels();
0393                 v_PHOBOS_dNdeta[i]->GetXaxis()->SetNdivisions(505);
0394 
0395                 v_PHOBOS_dNdeta[i]->GetXaxis()->SetLabelOffset(-0.005);
0396                 v_PHOBOS_dNdeta[i]->GetXaxis()->SetLabelSize(axis_label_size * pad2_labeltextscale);
0397                 v_PHOBOS_dNdeta[i]->GetXaxis()->SetTickLength(xticklength * pad2_tickscale / 1.6);
0398                 v_PHOBOS_dNdeta[i]->GetYaxis()->SetTickLength(yticklength * pad2_tickscale);
0399 
0400                 v_PHOBOS_dNdeta[i]->Draw("A 3 P");
0401                 v_sphenix_dNdeta[i]->Draw("5 P same");
0402             }
0403             else
0404             {
0405                 v_PHOBOS_dNdeta[i]->Draw("3 P same");
0406                 v_sphenix_dNdeta[i]->Draw("5 P same");
0407             }
0408 
0409             double x, y;
0410             x = v_sphenix_dNdeta[i]->GetPointX(v_sphenix_dNdeta[i]->GetN() - 1) + v_sphenix_dNdeta[i]->GetErrorXhigh(v_sphenix_dNdeta[i]->GetN() - 1);
0411             y = v_sphenix_dNdeta[i]->GetPointY(v_sphenix_dNdeta[i]->GetN() - 1) + v_sphenix_dNdeta[i]->GetErrorYhigh(v_sphenix_dNdeta[i]->GetN() - 1);
0412             // print out the first point for debugging
0413             cout << v_sphenix_dNdeta[i]->GetPointX(0) << " " << v_sphenix_dNdeta[i]->GetPointY(0) << " " << v_sphenix_dNdeta[i]->GetErrorYlow(0) << " " << v_sphenix_dNdeta[i]->GetErrorYhigh(0) << endl;
0414             TLatex *l = new TLatex(x, y, v_SPHENIX_labels[i].c_str());
0415             l->SetTextAlign(kHAlignLeft + kVAlignBottom);
0416             l->SetTextSize(centlabel_textsize * pad2_labeltextscale);
0417             // set color to match the graph
0418             l->SetTextColor(TColor::GetColor(color_sphenix_combine.c_str()));
0419             l->Draw();
0420         }
0421 
0422         leg->AddEntry(v_sphenix_dNdeta[0], leg_sphenix_combine.c_str(), "pf");
0423         leg2->AddEntry(v_PHOBOS_dNdeta[0], leg_phobos.c_str(), "pf");
0424     }
0425     else
0426     {
0427         for (size_t i = 1; i < v_SPHENIX_dNdeta_phobosapproach.size() && i < v_SPHENIX_dNdeta_cmsapproach.size(); i += 2)
0428         {
0429             if (i == 1)
0430             {
0431                 v_SPHENIX_dNdeta_phobosapproach[i]->SetMaximum(ymax_pad);
0432                 v_SPHENIX_dNdeta_phobosapproach[i]->SetMinimum(ymin_pad);
0433                 // v_SPHENIX_dNdeta_phobosapproach[i]->GetYaxis()->SetNdivisions(4, 2, 0);
0434                 v_SPHENIX_dNdeta_phobosapproach[i]->GetXaxis()->SetLimits(-absxlim, absxlim);
0435                 if (logy)
0436                     v_SPHENIX_dNdeta_phobosapproach[i]->GetYaxis()->SetMoreLogLabels();
0437                 v_SPHENIX_dNdeta_phobosapproach[i]->GetXaxis()->SetNdivisions(505);
0438 
0439                 v_SPHENIX_dNdeta_phobosapproach[i]->GetXaxis()->SetLabelOffset(-0.006);
0440                 v_SPHENIX_dNdeta_phobosapproach[i]->GetXaxis()->SetLabelSize(axis_label_size * pad2_labeltextscale);
0441                 v_SPHENIX_dNdeta_phobosapproach[i]->GetXaxis()->SetTickLength(xticklength * pad2_tickscale / 1.6);
0442                 v_SPHENIX_dNdeta_phobosapproach[i]->GetYaxis()->SetTickLength(yticklength * pad2_tickscale);
0443 
0444                 v_SPHENIX_dNdeta_phobosapproach[i]->Draw("A 5 P");
0445                 v_SPHENIX_dNdeta_cmsapproach[i]->Draw("5 P same");
0446             }
0447             else
0448             {
0449 
0450                 v_SPHENIX_dNdeta_phobosapproach[i]->Draw("5 P same");
0451                 v_SPHENIX_dNdeta_cmsapproach[i]->Draw("5 P same");
0452             }
0453 
0454             // draw labels
0455             double x, y;
0456             x = v_SPHENIX_dNdeta_phobosapproach[i]->GetPointX(v_SPHENIX_dNdeta_phobosapproach[i]->GetN() - 1) + v_SPHENIX_dNdeta_phobosapproach[i]->GetErrorXlow(v_SPHENIX_dNdeta_phobosapproach[i]->GetN() - 1);
0457             y = v_SPHENIX_dNdeta_phobosapproach[i]->GetPointY(v_SPHENIX_dNdeta_phobosapproach[i]->GetN() - 1);
0458             cout << "phobos: x=" << x << " y=" << y << endl;
0459             TLatex *lphobos = new TLatex(x + 0.02, y, v_SPHENIX_labels[i].c_str());
0460             lphobos->SetTextAlign(kHAlignLeft + kVAlignCenter);
0461             lphobos->SetTextSize(centlabel_textsize * pad2_labeltextscale);
0462             // set color to match the graph
0463             lphobos->SetTextColor(TColor::GetColor(color_sphenix_phobosapproach.c_str()));
0464             lphobos->Draw();
0465 
0466             x = v_SPHENIX_dNdeta_cmsapproach[i]->GetPointX(0) - v_SPHENIX_dNdeta_cmsapproach[i]->GetErrorXlow(0);
0467             y = v_SPHENIX_dNdeta_cmsapproach[i]->GetPointY(0);
0468             cout << "cms: x=" << x << " y=" << y << endl;
0469             TLatex *lcms = new TLatex(x - 0.02, y, v_SPHENIX_labels[i].c_str());
0470             // set right and center adjusted
0471             lcms->SetTextAlign(kHAlignRight + kVAlignCenter);
0472             lcms->SetTextSize(centlabel_textsize * pad2_labeltextscale);
0473             // set color to match the graph
0474             lcms->SetTextColor(TColor::GetColor(color_sphenix_cmsapproach.c_str()));
0475             lcms->Draw();
0476         }
0477 
0478         leg->AddEntry(v_SPHENIX_dNdeta_phobosapproach[0], leg_sphenix_phobosapproach.c_str(), "pf");
0479         leg->AddEntry(v_SPHENIX_dNdeta_cmsapproach[0], leg_sphenix_cmsapproach.c_str(), "pf");
0480     }
0481     leg->Draw();
0482     if (draw_phobos)
0483         leg2->Draw();
0484 
0485     c->cd();
0486     // use TLatex to draw X-axis title
0487     TLatex *xaxistitle = new TLatex();
0488     xaxistitle->SetTextAlign(kHAlignCenter + kVAlignCenter);
0489     xaxistitle->SetTextSize(0.049);
0490     xaxistitle->DrawLatexNDC(0.56, 0.035, "Pseudorapidity #eta");
0491     c->RedrawAxis();
0492     if (docombine)
0493     {
0494         if (draw_brahms)
0495         {
0496             c->SaveAs(Form("%s/dNdEta_RHIC_combine_wBRAHMS_altCent.pdf", plotdir.c_str()));
0497             c->SaveAs(Form("%s/dNdEta_RHIC_combine_wBRAHMS_altCent.png", plotdir.c_str()));
0498         }
0499         else
0500         {
0501             c->SaveAs(Form("%s/dNdEta_RHIC_combine_woBRAHMS_altCent.pdf", plotdir.c_str()));
0502             c->SaveAs(Form("%s/dNdEta_RHIC_combine_woBRAHMS_altCent.png", plotdir.c_str()));
0503         }
0504     }
0505     else
0506     {
0507         if (draw_brahms)
0508         {
0509             c->SaveAs(Form("%s/dNdEta_RHIC_wBRAHMS_altCent.pdf", plotdir.c_str()));
0510             c->SaveAs(Form("%s/dNdEta_RHIC_wBRAHMS_altCent.png", plotdir.c_str()));
0511         }
0512         else
0513         {
0514             c->SaveAs(Form("%s/dNdEta_RHIC_woBRAHMS_altCent.pdf", plotdir.c_str()));
0515             c->SaveAs(Form("%s/dNdEta_RHIC_woBRAHMS_altCent.png", plotdir.c_str()));
0516         }
0517     }
0518 }