Source code for desimodel.inputs.ci

# Licensed under a 3-clause BSD style license - see LICENSE.rst
# -*- coding: utf-8 -*-
'''
desimodel.inputs.ci
===================

Utilities for updating Commissioning Instrument corners in
data/focalplane/ci-corners.ecsv.
'''
import os

import numpy as np
from astropy.table import Table

from . import docdb
from ..io import datadir
from ..focalplane import xy2qs

[docs]def update(): '''Update $DESIMODEL/data/focalplane/ci-corners.ecsv from DESI-4633v11''' from desiutil.log import get_logger log = get_logger() #- Get as-build measured CI corners from DESI-4633v11 Corners.txt docnum = 4633 docver = 11 corners_file = docdb.download(docnum, docver, 'Corners.txt', overwrite=True) #- Read file and build dictionary corners[camera][x/y/z] = list len 4 with open(corners_file) as fx: corners = dict() for line in fx: line = line.strip() if line.startswith('#') and len(line)>2 and line[-2] == 'C': camera = line[-2:] corners[camera] = dict(x=list(), y=list(), z=list()) if line.startswith('#') or len(line)<1: continue x, y, z = map(float, line.split(',')) corners[camera]['x'].append(x) corners[camera]['y'].append(y) corners[camera]['z'].append(z) #- Convert that into the GFA-corners table format citable = Table( names = ('GFA_LOC', 'CORNER', 'X', 'Y', 'Z', 'Q', 'S', 'RADIUS_DEG'), dtype = ('int','int','float','float','float','float','float','float') ) for icam in range(5): cam = 'C'+str(icam+1) for corner in range(4): x = corners[cam]['x'][corner] y = corners[cam]['y'][corner] z = corners[cam]['z'][corner] r = np.sqrt(x**2 + y**2) q, s = xy2qs(x, y) citable.add_row([icam+1, corner, x, y, z, q, s, r]) outfile = os.path.join(datadir(), 'focalplane', 'ci-corners.ecsv') citable.meta['VERSION'] = 'DESI-{}v{}'.format(docnum, docver) citable.write(outfile, overwrite=True) log.info('Wrote {}'.format(outfile))