-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathkpf_requester.py
More file actions
143 lines (85 loc) · 3.78 KB
/
kpf_requester.py
File metadata and controls
143 lines (85 loc) · 3.78 KB
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
132
133
134
135
136
137
138
139
140
141
142
143
import numpy as np
import pandas as pd
import tks_target_list_gen.sim.hires.exposure as exp
def df_maker():
overview_df = pd.read_csv('csv/overview_df.csv')
## Name
star_name = overview_df.star_id
## RA columns
RA_deg = np.array(overview_df.ra_deg)
if RA_deg.max() < 25:
print('WARNING: RA is probably provided in Hr instead of deg')
ra_hr = (RA_deg/15).astype(int)
ra_min = ((RA_deg/15%1)*60).astype(int)
ra_sec = np.round((((RA_deg/15%1)*60)%1)*60, 1)
## Dec columns
DEC_deg = np.array(overview_df.dec_deg)
dec_deg = DEC_deg.astype(int)
dec_min = (( abs(DEC_deg) - (abs(DEC_deg)).astype(int) )*60).astype(int)
dec_sec = (np.round((((abs(DEC_deg) - (abs(DEC_deg)).astype(int) )*60)%1)*60, 1))
## Epoch
epoch = [2000 for i in range(len(overview_df))]
## vmag= dummy column
vmag_str = ['vmag=' for i in range(len(overview_df))]
## Vmag
vmag = overview_df.vmag
## Counts (in thousands)
counts = np.array([60 for i in range(len(overview_df))]) # 60k for all DG targets
## exp_time
t_exp = (np.round(exp.exposure_time(vmag, counts, iod = True))).astype(int)
## max_exp_time
t_max_list = np.array([500, 600, 900, 1200, 1500, 1800, 2700, 3600, 5400, 6000])
t_max = [(2*t_exp[j] + min([i for i in t_max_list - 2*t_exp[j] if i>0])) for j in range(len(t_exp))]
## Decker
decker = ['B5' if vmag[i]<= 10 else 'C2' for i in range(len(overview_df))]
## Desired obs
cadence = 40
# Choose the maximum of the following 2 options:
#######################
# Baseline-limited
N_baseline = np.ceil((3*365 - overview_df.baseline_hires)/cadence) # Specified cadence until 3-year baseline reached
# Observation-limited
N_iod = 30 - overview_df.tot_iodine_hires
#######################
N_needed = np.amax([N_baseline, N_iod], axis=0)
N_needed = np.maximum(N_needed, 0) # Cooked targets give negative obs_needed. Take 0 instead
# Number of possible obs per semester depends on cadence
N_sem = int(180/cadence)
print('With the given cadence, we get {} obs per semester'.format(N_sem))
N_obs = np.minimum(N_needed, N_sem) # Only ask for at most 7 obs per semester
## Number of observations acquired
N_acq = [1 for i in range(len(overview_df))]
## Iodine
iodine = ['in' for i in range(len(overview_df))]
## Priority
prio = ['p1' for i in range(len(overview_df))]
## Program code
prog_code = ['DG' for i in range(len(overview_df))]
## Telescope proposal code
tel_code = ['U062' for i in range(len(overview_df))]
# print(star_name, ra_hr, ra_min, ra_sec)
# sfd
kpf_df = pd.DataFrame({'N_obs':N_obs,
'Starname':star_name,
'RAH':ra_hr,
'RAM':ra_min,
'RAS':ra_sec,
'DECD':dec_deg,
'DECM':dec_min,
'DECS':dec_sec,
'epoch':epoch,
'vmag_str':vmag_str,
'vmag':vmag,
'T_exp':t_exp,
'T_max':t_max,
'counts':counts,
'decker':decker,
'N_acq':N_acq,
'iodine':iodine,
'prio':prio,
'prog_code':prog_code,
'tel_code':tel_code})
# print(kpf_df.head(5))
kpf_df.to_csv('kpf_df.csv')
if __name__ == "__main__":
df_maker()