-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplot_lifetime.py
131 lines (102 loc) · 4.02 KB
/
plot_lifetime.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import numpy as np
import pyfits
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import AxesGrid as AG
from matplotlib import rc
from matplotlib.backends.backend_pdf import PdfPages as PDF
from datetime import datetime
# Originally lived in /d/monk/eigenbrot/MANGA/lifetime
#
def plot_lifetime(output,title,origfits,lifefits,arfits=False):
pp = PDF(output)
rc('text', usetex=False)
rc('font', family='serif')
rc('font', size=9.0)
rc('axes', linewidth=0.4)
orig_dict = sort_data(origfits)
life_dict = sort_data(lifefits)
AR = False
if arfits:
ar_dict = sort_data(arfits)
AR = True
hi = 0
fig = plt.figure()
grid = AG(fig,111,
nrows_ncols = (4,5),
axes_pad = 0.0,
label_mode = 'L',
aspect = False,
share_all = False)
for (ax,fiber) in zip(grid,life_dict.keys()):
print fiber
orig_data = orig_dict[fiber].data
orig_sloan = orig_dict[fiber].header['SLOAN']
life_data = life_dict[fiber].data
life_sloan = life_dict[fiber].header['SLOAN']
if AR:
ar_data = ar_dict[fiber].data
ar_sloan = ar_dict[fiber].header['SLOAN']
ax.plot(life_data[1],life_data[4],'r',lw=0.4)
ax.plot(life_data[3],life_data[5],'b',lw=0.4)
ax.plot(orig_data[3],orig_data[5],'g',lw=0.4)
if AR:
ax.plot(ar_data[3],ar_data[5],'m',lw=0.4)
ax.text(9,1.0,'({})'.format(fiber),va='top')
ax.text(9,0.8,'{:4.3f}'.format(orig_sloan),color='g',va='top')
if AR:
ax.text(9,0.65,'{:4.3f}'.format(ar_sloan),color='m',va='top')
ax.text(9,0.5,'{:4.3f}'.format(life_sloan),color='b',va='top')
ax.set_xlim(2,30)
ax.set_ylim(0,1.1)
ax.set_xscale('log')
ax.set_xticks([5,10,20])
ax.set_xticklabels(['$5$','$10$','$20$'])
grid[-1].set_xlim(2,30)
grid[-1].set_ylim(0,1.1)
grid[-1].set_xscale('log')
grid[-1].set_xticks([])
grid[-1].text(2.5,0.7,'(fiber input position)\nthroughput value',
fontsize=8)
grid[-1].hlines([0.5,0.4,0.3,0.2],3,5,colors=['g','m','b','r'])
# linestyles=['solid','dashdot','solid'])
grid[-1].text(6,0.5,'Initial measurement',fontsize=5.0)
grid[-1].text(6,0.4,'After AR coating',fontsize=5.0)
grid[-1].text(6,0.3,'After lifetime tests',fontsize=5.0)
grid[-1].text(6,0.2,'Direct normalized',fontsize=5.0)
fig.text(0.5,0.04,'$f$-ratio',fontsize=12.0)
fig.text(0.06,0.65,'Normalized Encircled Energy',
rotation='vertical',fontsize=11.0)
fig.suptitle(title+'\n'+datetime.now().isoformat(' '))
pp.savefig(fig)
pp.close()
return
def sort_data(fits_file):
hdus = pyfits.open(fits_file)[1:]
out_dict = {}
for h in hdus:
fiber_pos = h.header['FIBERPOS']
out_dict[fiber_pos] = h
return out_dict
def merge_data(fits_files,output):
final_hdus = []
for fits in fits_files:
hdus = pyfits.open(fits)[1:]
final_hdus += hdus
pyfits.HDUList([pyfits.PrimaryHDU(None)]+final_hdus).writeto(output)
return
def make_hex_plots():
''' Should only be run in /d/monk/eigenbrot/MANGA/lifetime. Really more of
a script than an actual function.
'''
# import this in this function because it takes a while and dumps a lot of
# crap to the screen
import MANGA_bench as ma
ma.hex_plot_helper('19int_orig.fits','19int_hex_orig.pdf','19int_orig',19)
ma.hex_plot_helper('19int_life.fits','19int_hex_life.pdf','19int_life',19)
ma.hex_plot_helper('19int_AR.fits','19int_hex_AR.pdf','19int_AR',19)
ma.hex_plot_helper('19t_orig_3.fits','19t_hex_orig.pdf','19tight_orig',19)
ma.hex_plot_helper('19t_life.fits','19t_hex_life.pdf','19tight_life',19)
ma.hex_plot_helper('127_orig.fits','127_hex_orig.pdf','127int_orig',127)
ma.hex_plot_helper('127_life.fits','127_hex_life.pdf','127int_life',127)
ma.hex_plot_helper('127_AR.fits','127_hex_AR.pdf','127int_AR',127)
return