Mercurial > repos > astroteam > crbeam_astro_tool
diff spec_plot.py @ 0:f40d05521dca draft default tip
planemo upload for repository https://github.com/esg-epfl-apc/tools-astro/tree/main/tools commit de01e3c02a26cd6353a6b9b6f8d1be44de8ccd54
author | astroteam |
---|---|
date | Fri, 25 Apr 2025 19:33:20 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/spec_plot.py Fri Apr 25 19:33:20 2025 +0000 @@ -0,0 +1,48 @@ +import matplotlib.pyplot as plt +import numpy as np + + +def plot_spec(spec_file, title="", Emin=0, Emax=0, ext="pdf", show=True, logscale=True): + data = np.loadtxt(spec_file) + if Emin > 0: + data = data[Emin <= data[:, 0]] + else: + Emin = 10 ** np.floor(np.log10(np.min(data[:, 0]))) + if Emax > 0: + data = data[data[:, 0] <= Emax] + else: + Emax = 10 ** np.ceil(np.log10(np.max(data[:, 0]))) + + ymin = np.min(data[:, 1] - data[:, 1] / np.sqrt(data[:, 2])) + ymax = np.max(data[:, 1] + data[:, 1] / np.sqrt(data[:, 2])) + + if title: + plt.title(title) + if logscale: + plt.xscale("log") + plt.yscale("log") + if ymin <= 0: + ymin = data[:, 1] - data[:, 1] / np.sqrt(data[:, 2]) + ymin = ymin[ymin > 0] + if len(ymin) > 0: + ymin = np.min(ymin) + else: + ymin = 0 + if ymin > 0: + ymin = 10 ** np.floor(np.log10(ymin)) + ymax = 10 ** np.ceil(np.log10(ymax)) + plt.ylim(ymin, ymax) + else: + plt.ylim(ymin - 0.1 * (ymax - ymin), ymax + 0.1 * (ymax - ymin)) + + plt.xlim(Emin, Emax) + + # plt.plot(data[:,2]) + plt.errorbar( + data[:, 0], data[:, 1], yerr=data[:, 1] / np.sqrt(data[:, 2]), fmt="-o" + ) + out_file = spec_file + "." + ext + plt.savefig(out_file) + if show: + plt.show() + return out_file