Source code for refstis.pop_db

"""
Script to populate database with STIS anneal month start and end times.

This is used by the STIS darks and bias reference file pipeline to determine
the start and end of each anneal period, and to retrieve the appropriate dark
and bias files.

"""

import sqlite3
from astropy.io import fits as pyfits
import os
import glob

anneal_dir = '/grp/hst/stis/calibration/monitors/ccd/anneals/'

#-------------------------------------------------------------------------------

[docs]def get_directories(): """ Loop over the anneal monitor directory and return list of directories containing anneal observations returns ------- directories list, containing directory paths """ directories = [] for year in range(2011, 2020): #change back to 1996 to create older darks for month in ('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'): for last in ('/', 'a/', 'b/'): path = anneal_dir + str(year) + '_' + month + last if os.path.exists(path) and path != anneal_dir+'2010_01/': crj_list = glob.glob(path + '?????????_crj.fits') crj_list.sort() if len(crj_list) == 2: print(path) directories.append( path ) return directories
#-------------------------------------------------------------------------------
[docs]def grab_anneal_mjds(): """ Loop over anneal directories and return a list of tuples containing useful mjd info to be populated into anneal database returns ------- anneal_info list, full of tupes containing information for database """ print('Getting anneal information') anneal_info = [] for directory in get_directories(): anneal_obs = glob.glob( os.path.join(directory, '?????????_crj.fits') ) anneal_obs.sort() if len(anneal_obs) != 2: print('Error in ', directory) continue proposid = pyfits.getval( anneal_obs[0], 'PROPOSID', ext=0 ) visit_number = int(pyfits.getval(anneal_obs[1], 'OBSET_ID')) - 1 anneal_start = pyfits.getval(anneal_obs[0], 'TEXPSTRT', ext=0) anneal_end = pyfits.getval(anneal_obs[1], 'TEXPSTRT', ext=0) anneal_info.append( (proposid, visit_number, anneal_start, anneal_end) ) return anneal_info
#-------------------------------------------------------------------------------
[docs]def pop_database(anneal_info): """ Populate anneal database with information gained pulled from anneal monitor observations parameters ---------- anneal_info list, list of tuples to be populated into db returns ------- None """ print('Populating Anneal database') db = sqlite3.connect("anneal_info.db") c = db.cursor() table = 'anneals' try: c.execute("""CREATE TABLE %s (id integer PRIMARY KEY, proposid integer, visit real, start real, end real)""" % (table)) except sqlite3.OperationalError: c.execute("""DROP TABLE %s""" % (table)) c.execute("""CREATE TABLE %s (id integer PRIMARY KEY, proposid integer, visit real, start real, end real)""" % (table)) for i, line in enumerate(anneal_info): proposid = line[0] visit_number = line[1] start = line[2] end = line[3] c.execute("""INSERT INTO %s VALUES (?,?,?,?,?)""" % (table), (i+1, proposid, visit_number, start, end)) db.commit() c.execute("""SELECT * FROM %s """ % (table)) print('Database Populated') print('------------------') for row in c: print(row)
#-------------------------------------------------------------------------------
[docs]def main(): """ Main function to retrieve anneal info and populate database """ anneal_stats = grab_anneal_mjds() pop_database(anneal_stats)
#-------------------------------------------------------------------------------