Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
e49cd2f
Fix branch name code
joshwalawender Dec 5, 2025
41ffa3c
Fix for time ranges not based on “now”
joshwalawender Dec 6, 2025
8a51e26
Remove blank line
joshwalawender Dec 9, 2025
88d5d6f
Add tool to check if KPF-CC schedule files exist
joshwalawender Dec 9, 2025
142ed6d
Update docstring
joshwalawender Dec 9, 2025
2bfbada
Log results for later reference
joshwalawender Dec 10, 2025
50e8ae4
Documentation: add SoCal EKO troubleshooting
joshwalawender Dec 11, 2025
2d6eb8c
Add verbose option to print lots of OB info to terminal
joshwalawender Dec 11, 2025
ae1fd44
tweaks to read noise plots
joshwalawender Dec 15, 2025
55e7a84
Update LFC defaults
joshwalawender Dec 18, 2025
f97885e
Critical bug fix for star list
joshwalawender Dec 20, 2025
f1dd3ed
Update precision on ExpMeterThreshold for faint stars
joshwalawender Dec 23, 2025
7310e8b
Update default and increase precision to 2 for ExpMeterThreshold
joshwalawender Dec 23, 2025
0e4c6e7
Bugfix for unparsed cordinates
joshwalawender Jan 1, 2026
eeedfe3
Handle getting epoch more robustly
joshwalawender Jan 1, 2026
f796d5a
Better handling of messaging for OB retrival errors
joshwalawender Jan 1, 2026
487bca0
Reduce log file size between rotations
joshwalawender Jan 1, 2026
9f2a986
Bugfix
joshwalawender Jan 1, 2026
48ed1e8
Fix date problem with the schedule files check
joshwalawender Jan 2, 2026
7786867
Merge branch 'dev' of https://github.com/KeckObservatory/KPFTranslato…
joshwalawender Jan 2, 2026
994465a
Fix to handle Foul Weather
joshwalawender Jan 4, 2026
7f1e0c5
Fix table format
joshwalawender Jan 6, 2026
b67bab8
Documentation: Update after filter replacement in SM4
joshwalawender Jan 6, 2026
fb72672
Merge branch 'dev' of https://github.com/KeckObservatory/KPFTranslato…
joshwalawender Jan 6, 2026
b9a8b5c
Documentation: one more update to filters
joshwalawender Jan 6, 2026
0ce4dd5
Documentation: fix links
joshwalawender Jan 6, 2026
3b4cf7f
Add AnalyzeKPFCCExecutions.py
joshwalawender Jan 13, 2026
c7a9fb1
Updates to plots
joshwalawender Jan 13, 2026
93fca5f
Update troubleshooting.md
syeh19 Jan 21, 2026
4a4a300
Merge branch 'dev' of https://github.com/KeckObservatory/KPFTranslato…
joshwalawender Jan 29, 2026
b53152b
Draft announcement for 26A
joshwalawender Jan 31, 2026
6ceb7bf
Tweak menu ordering
joshwalawender Feb 2, 2026
a02d390
New day begins at 7am HST (for schedule loading)
joshwalawender Feb 2, 2026
fc1a3eb
Add separator
joshwalawender Feb 2, 2026
b630f0d
Update with new values after filter change
joshwalawender Feb 2, 2026
65c6975
Merge branch 'dev' into 26A_announcement
joshwalawender Feb 2, 2026
d3894e1
Docs: tweak announcement language
joshwalawender Feb 2, 2026
c4e18ed
Docs: formatting tweaks and removed PCU to home
joshwalawender Feb 2, 2026
0f6617a
Merge branch 'dev' into 26A_announcement
joshwalawender Feb 2, 2026
10c0f36
Remove old “mini fill” scripts
joshwalawender Feb 2, 2026
da7eb11
Put email accounts in config file
joshwalawender Feb 2, 2026
58e3a02
Merge branch 'dev' into 26A_announcement
joshwalawender Feb 3, 2026
44b54bc
Add paragraph on faint star extractions
joshwalawender Feb 4, 2026
ce411c0
Draft new failover startegy for AO interaction
joshwalawender Feb 4, 2026
fcf47c3
Don’t send PCU to home first
joshwalawender Feb 4, 2026
404073d
fix import
joshwalawender Feb 4, 2026
5895486
add -X
joshwalawender Feb 4, 2026
e1882f8
Add Done and sleep
joshwalawender Feb 4, 2026
a715dcf
Get the “Done” and sleep in. Remove asserts to force failover
joshwalawender Feb 4, 2026
3652058
Skip verification step for HEPA filter
joshwalawender Feb 5, 2026
c06d54a
Draft tool to find detector temperature excusions
joshwalawender Feb 6, 2026
719be72
Merge branch 'dev' into 26A_announcement
joshwalawender Feb 6, 2026
ec188f7
Add list of temperature excursions
joshwalawender Feb 6, 2026
09ef2e8
Output formatted table for web
joshwalawender Feb 6, 2026
ec074c4
Merge branch 'dev' into 26A_announcement
joshwalawender Feb 6, 2026
4c4de2d
Language tweak
joshwalawender Feb 6, 2026
79848f9
Update status summary and Era 4 stability discussion
joshwalawender Feb 6, 2026
da20c4b
Reorganize announcements
joshwalawender Feb 7, 2026
31bf703
formatting tweak
joshwalawender Feb 7, 2026
a0bfb3b
Formatting tweak
joshwalawender Feb 7, 2026
1c6ed03
Merge branch 'dev' into 26A_announcement
joshwalawender Feb 7, 2026
e58adc5
Announcements listed in status page, not menu
joshwalawender Feb 7, 2026
db253a0
Add tool to plot basement temperatures
joshwalawender Feb 7, 2026
c05254b
Merge branch 'dev' into 26A_announcement
joshwalawender Feb 12, 2026
d424a95
Update to bring text closer to 26B InstAvailability text
joshwalawender Feb 13, 2026
085e177
Add menu item to bypass telescope release for magiq
joshwalawender Feb 18, 2026
c1ea096
Improved algorithm to find excursion events
joshwalawender Feb 18, 2026
02a8ac3
Documentation: update event table
joshwalawender Feb 18, 2026
c7da8a4
Documentation: add latest thermal excursion
joshwalawender Feb 19, 2026
a160818
fix
joshwalawender Feb 20, 2026
f7ed9ef
Update etalon exposure parameters
joshwalawender Feb 25, 2026
9cad06e
Merge branch 'dev' of https://github.com/KeckObservatory/KPFTranslato…
joshwalawender Feb 25, 2026
28f30b9
Temporary hack to let SoCal operate with disabled enclosure.
joshwalawender Mar 5, 2026
2244403
Remove HK ThAr setup, was confusing CalOBBuilder
joshwalawender Mar 27, 2026
c265528
Pass args to RunOB
joshwalawender Mar 27, 2026
ea2ee5c
additional debug logging to help troubleshooting
joshwalawender Apr 3, 2026
8c295c0
Bugfix: clear script keywords if passed start time
joshwalawender Apr 4, 2026
e768c22
Tweaks to plotting and logging
joshwalawender Apr 15, 2026
56a4668
Documentation: Turbo failure announcement
joshwalawender Apr 21, 2026
3d2f00c
fix typo
joshwalawender Apr 21, 2026
9276d57
Documentation: add zero point analysis
joshwalawender May 15, 2026
ccc0c05
Add ETCs based on Zero Point Analysis
joshwalawender May 19, 2026
fac35fe
add data files for ETC
joshwalawender May 19, 2026
86cd77b
Dcumentation: add intro for ZP analysis
joshwalawender May 30, 2026
fd977a1
Documentation: clarify offline status
joshwalawender Jun 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/ObservationProperties.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
Cal Bench filter 1 position. Throughput = 10^-OD. Values: OD 0.1, OD 1.0, OD 1.3, OD 2.0, OD 3.0, OD 4.0

**CalND2**: `str`
Cal Bench filter 2 position. Throughput = 10^-OD. Values: OD 0.1, OD 0.3, OD 0.5, OD 0.8, OD 1.0, OD 4.0
Cal Bench filter 2 position. Throughput = 10^-OD. Values: OD 0.1, OD 0.3, OD 0.5, OD 1.0, OD 1.3, OD 2.0

**NodN**: `float`
[arcseconds] Distance to nod the telescope North before starting exposure.
Expand Down
166 changes: 166 additions & 0 deletions docs/ZeroPointAnalysis/1-PrepareDataFile/1-PrepareDataFile.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
# Examine Properties of Data Set

This data set includes (anonymized) results of the first few years of KPF observations. This contains select FITS header keyworsds from the DRP's L1 output file. We're primarily interested in the DRP's estimate of the signal to noise at various wavelengths (the `SNRSCnnn` values). These are the typical signal to noise for one order around the specified wavelength value in nm.

In this notebook, we anonymize the data then filter out data with certain known issues. After filtering we have over 12,000 individual observations (FITS files). Finally, we examine the properties of the targets (effective temperature and Gaia G magnituide), of the observations (time of observation), and of the DRP reductions (DRP version used).


```python
from pathlib import Path
import numpy as np
from astropy.table import Table, MaskedColumn
from astropy.time import Time

from matplotlib import pyplot as plt
```


```python
# Read raw data
raw_data_file = Path('data/Feb2026.csv')
```


```python
if raw_data_file.exists():
t = Table.read(raw_data_file, format='ascii.csv')
t.remove_columns(['ObsID', 'OBJECT', 'TARGNAME', 'TOTCNTS', 'CCFRV_MPS', 'CCD1RV_MPS', 'CCD2RV_MPS', 'CCFERV_MPS', 'CCFBJD', 'CCFERV'])
# Separate out TOTCORR values to separate columns
TOTCORR_1 = MaskedColumn(data=np.zeros(len(t)), name='TOTCORR_1')
TOTCORR_2 = MaskedColumn(data=np.zeros(len(t)), name='TOTCORR_2')
TOTCORR_3 = MaskedColumn(data=np.zeros(len(t)), name='TOTCORR_3')
TOTCORR_4 = MaskedColumn(data=np.zeros(len(t)), name='TOTCORR_4')
TOTCORR_SUM = MaskedColumn(data=np.zeros(len(t)), name='TOTCORR_SUM')
for i,row in enumerate(t):
masked = t['TOTCORR'].mask[i]
if not masked:
TOTCORR_1[i] = t['TOTCORR'][i].split()[0]
TOTCORR_2[i] = t['TOTCORR'][i].split()[1]
TOTCORR_3[i] = t['TOTCORR'][i].split()[2]
TOTCORR_4[i] = t['TOTCORR'][i].split()[3]
TOTCORR_SUM[i] = np.sum([float(v) for v in t['TOTCORR'][i].split()])
TOTCORR_1.mask = t['TOTCORR'].mask
TOTCORR_2.mask = t['TOTCORR'].mask
TOTCORR_3.mask = t['TOTCORR'].mask
TOTCORR_4.mask = t['TOTCORR'].mask
TOTCORR_SUM.mask = t['TOTCORR'].mask
t.add_columns([TOTCORR_1, TOTCORR_2, TOTCORR_3, TOTCORR_4, TOTCORR_SUM])
```


```python
# Remove data with known bad parameters
if raw_data_file.exists():
# Remove Data with MJD-OBS Before KPF was Installed
t = t[t['MJD-OBS'] > 59200]
print(len(t))
# Remove Data with Gmag<=0
t = t[t['GAIAMAG'] > 0]
print(len(t))
#because of missing labeling in OBs, this was a default value, so remove all stars with this value as the data is not usable.
t = t[(t['GAIAMAG'] < 9.2) | (t['GAIAMAG'] > 9.5)]
print(len(t))
# Remove very short exposures (removes start state errors)
t = t[t['ELAPSED'] > 7]
print(len(t))
```

13547
12700
12118
12058



```python
anonymized_data_file = Path('data/Feb2026_anonymized.csv')
if raw_data_file.exists():
t.write(anonymized_data_file, overwrite=True)
else:
t = Table.read(anonymized_data_file, format='ascii.csv')
```

# Examine Properties of Data Set


```python
# KPFERA 1.0 is before SM1
SM1start = Time('2024-02-03')
SM1end = Time('2024-02-23')
# KPFERA 2.0 is between SM1 and SM2
SM2start = Time('2024-10-31')
SM2end = Time('2024-11-20')
# KPFERA 2.5/2.6 is between SM2 and SM3
SM3start = Time('2025-03-28')
SM3end = Time('2025-04-23')
# KPFERA 3.0 is between SM3 and SM4
SM4start = Time('2025-08-31')
SM4end = Time('2025-10-27')
# KPFERA 4.0 is after SM4
```


```python
plt.figure(figsize=(8,8))

plt.subplot(3,1,1)
plt.title('Histogram of Teff and Gmag Values in the Data Set')
bins=np.arange(2700,10000,100)
plt.hist(t['TARGTEFF'], bins=bins, log=True)
plt.axvline(2700, color='r', label='KPF-etc Limits')
plt.axvline(6600, color='r')
plt.xlabel('Teff')
plt.legend(loc='best')

plt.subplot(3,1,2)
plt.hist(t['GAIAMAG'], bins=40, log=True)
plt.axvline(2, color='r', label='KPF-etc Limits')
plt.axvline(19, color='r')
plt.xlabel('Gmag')

plt.subplot(3,1,3)
nd = max(t['MJD-OBS'])-min(t['MJD-OBS'])
plt.hist(t['MJD-OBS'], bins=int(nd/7))
plt.axvspan(SM1start.mjd, SM1end.mjd, color='k', alpha=0.3, label='Servicing Mission')
plt.axvspan(SM2start.mjd, SM2end.mjd, color='k', alpha=0.3)
plt.axvspan(SM3start.mjd, SM3end.mjd, color='k', alpha=0.3)
plt.axvspan(SM4start.mjd, SM4end.mjd, color='k', alpha=0.3)
plt.xlabel('MJD')

plt.show()
```



![png](output_8_0.png)




```python
drpvs = set([str(v) for v in t['DRPTAGL2']])
print("DRPTAGL2 : N Files")
print("____________________")
total = 0
for v in sorted(drpvs):
if v == '--':
Nv = np.sum(np.array(t['DRPTAGL2'].mask, dtype=int))
else:
tv = t[t['DRPTAGL2'] == v]
Nv = len(tv)
total += Nv
print(f"{v:11s}: {Nv}")
print(f"TOTAL = {total} ({len(t)})")
```

DRPTAGL2 : N Files
____________________
-- : 38
v2.10.3 : 3216
v2.11.1 : 23
v2.12.0rc1 : 4369
v2.5.3 : 35
v2.8.2 : 2030
v2.9.1 : 2347
TOTAL = 12058 (12058)

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading