#include "TROOT.h" #include "TStyle.h" #include "TCanvas.h" #include "TF1.h" #include "TH1.h" #include "TAxis.h" #include "TLine.h" #include "TLatex.h" #include #include #include #include #include #include void init() { gROOT->SetStyle("Plain"); gStyle->SetPadLeftMargin(0.15); gStyle->SetAxisColor(0,"X"); gStyle->SetTickLength(0,"X"); gStyle->SetFrameLineColor(0); gStyle->SetPadTickY(1); gStyle->SetTitleYOffset(1.2); gStyle->SetLabelFont(132,"xyz"); gStyle->SetTitleFont(132,"xyz"); gStyle->SetTitleFont(132,""); gStyle->SetTextFont(132); gStyle->SetLabelSize(0.06,"xyz"); gStyle->SetTitleSize(0.06,"xyz"); gStyle->SetTextSize(0.04); } std::vector widen(Double_t width, std::vector vecin) { std::vector vecout; UInt_t i = 0; while (i < vecin.size()) { UInt_t j; for (j = vecin.size() - 1; j > i; j--) { if ((vecin[j] - vecin[i]) < width * (j-i)) { Double_t center = (vecin[j]+vecin[i])/2.; Double_t lowest = center - width*(j-i)/2.; for (UInt_t k = i; k <= j; k++){ vecout.push_back(lowest + width*(k-i)); } break; } } if (i==j){ vecout.push_back(vecin[i]); } i = j + 1; Int_t ground_state_fixed = 1; if ((ground_state_fixed == 1) && (vecout[0] != vecin[0])) { vecout[0] = vecin[0]; for (UInt_t k = 1; k < vecin.size(); k++) { if ((vecout[k]-vecout[k-1]) < width) { vecout[k] = vecout[k-1] + width; } } } } return vecout; } void plot_levels() { const int ndiv = 2; init(); std::string filename[ndiv]; std::string label[ndiv]; filename[0] = "sdpfm.txt"; filename[1] = "sdpfmu.txt"; label[0] = "SDPF-M"; label[1] = "SDPF-MU"; std::vector ene[ndiv]; std::vector jpistr[ndiv]; std::vector enew[ndiv]; std::vector enestr[ndiv]; for (Int_t i = 0; i < ndiv; i++){ ifstream ifs((filename[i]).c_str()); Double_t readene; std::string readjpi; while (ifs >> readene >> readjpi) { ene[i].push_back(readene); jpistr[i].push_back(readjpi); std::ostringstream oss; oss << std::fixed << std::setw(5) << std::setprecision(2) << readene; enestr[i].push_back(oss.str()); } enew[i] = widen(0.2,ene[i]); } TCanvas *c1 = new TCanvas("c1","c1",10,10,400,400); TH1F* frame = c1->DrawFrame(0,0,1,3.7); frame->SetBins(ndiv,0,1); frame->GetYaxis()->SetTitle("Excitation energy #it{E}_{x} (MeV)"); frame->GetYaxis()->CenterTitle(); for (Int_t i = 0; i < ndiv; i++){ frame->GetXaxis()->SetBinLabel(i+1,label[i].c_str()); } for (Int_t i = 0; i < ndiv; i++){ Double_t xw = 1. / ndiv; Double_t x0 = xw * i; for (UInt_t j = 0; j < ene[i].size();j++) { TLine line; line.DrawLine(x0+xw*0.20,enew[i][j],x0+xw*0.35,enew[i][j]); line.DrawLine(x0+xw*0.35,enew[i][j],x0+xw*0.40,ene[i][j]); line.DrawLine(x0+xw*0.40,ene[i][j], x0+xw*0.60,ene[i][j]); line.DrawLine(x0+xw*0.60,ene[i][j], x0+xw*0.65,enew[i][j]); line.DrawLine(x0+xw*0.65,enew[i][j],x0+xw*0.8,enew[i][j]); TLatex text; text.SetTextAlign(31); text.DrawLatex(x0+xw*0.8,enew[i][j]+0.01,jpistr[i][j].c_str()); text.SetTextAlign(11); text.DrawLatex(x0+xw*0.15,enew[i][j]+0.01,enestr[i][j].c_str()); } } }