Source code for PyIRTAM.coeff

#!/usr/bin/env python
# --------------------------------------------------------
"""This module contains functions to obtain and update the IRTAM coefficients.

"""
import os
import requests

import PyIRTAM


[docs] def download_irtam_coeffs(dtime, param, irtam_dir='', use_subdirs=True, overwrite=False): """Retrieve the IRTAM coefficients from the UMass Lowell GIRO Data Center. Parameters ---------- dtime : dt.datetime Date and time for the desired coefficents param : str Coefficient parameter to retrieve. Expects one of: 'foF2', 'hmF2', 'B0', and 'B1' irtam_dir : str Directory for IRTAM coefficients, or '' to use package directory. (default='') use_subdirs : bool If True, adds YYYY/MMDD subdirectories to the filename path, if False assumes that the entire path to the coefficient directory is provided by `irtam_dir` (default=True) overwrite : bool Allow overwriting of existing parameter files if True (default=False) Returns ------- dstat : bool Download status: True if file was downloaded, False if not fstat : bool File status: True if parameter coefficient file exists, False if not msg : str Potential message with more details about status flags, empty if both are True Notes ----- LGDC claims to also support 'VTEC', 'MUF3000', 'TAU', but tests for these paramaters failed """ PyIRTAM.logger.info('Downloading coefficients from GAMBIT for: {:}'.format( param)) # Initalize output dstat = False fstat = False msg = '' # If no directory is provided, use the package default if irtam_dir == '': irtam_dir = PyIRTAM.irtam_coeff_dir # Determine the appropriate output filename param_file = get_irtam_param_filename(dtime, param, irtam_dir, use_subdirs) PyIRTAM.logger.info('Saved as: {:}'.format(param_file)) # Ensure the desired output directory exists dir_name = os.path.dirname(param_file) if not os.path.isdir(dir_name): os.makedirs(dir_name) PyIRTAM.logger.info('Created coefficient directory: {:}'.format( dir_name)) # Test to see if the file exists already, if overwriting is not desired if os.path.isfile(param_file): fstat = True msg = 'IRTAM parameter coefficient file exists: {:}'.format(param_file) if not overwrite: PyIRTAM.logger.warning(msg) return dstat, fstat, msg else: msg = "".join(["Overwriting ", msg]) # Construct the query base_url = "https://lgdc.uml.edu/rix/gambit-coeffs" url = "".join([base_url, "?charName=", param, "&time=", dtime.strftime( "%Y.%m.%dT%H:%M:%S")]) # Download the webpage req = requests.get(url) # Test to see if the data was retrieved successfully if req.text.find('START_HEADER') < 0: # No data was retrieved msg = ''.join([msg, '' if len(msg) == 0 else '\n', 'Bad IRTAM coefficient query: ', url, '\nRemote message: ', req.text]) PyIRTAM.logger.warning(msg) return dstat, fstat, msg # Write the new coefficients to the desired output file dstat = True fstat = True with open(param_file, 'w') as fout: fout.write(req.text) if len(msg) > 0: PyIRTAM.logger.info(msg) return dstat, fstat, msg
[docs] def get_irtam_param_filename(dtime, param, irtam_dir='', use_subdirs=True): """Determine the filename for the desired IRTAM coefficients. Parameters ---------- dtime : dt.datetime Date and time for the desired coefficents param : str Coefficient parameter to retrieve. Expects one of: 'foF2', 'hmF2', 'B0', and 'B1' irtam_dir : str Directory for IRTAM coefficients, or '' to use package directory. (default='') use_subdirs : bool If True, adds YYYY/MMDD subdirectories to the filename path, if False assumes that the entire path to the coefficient directory is provided by `irtam_dir` (default=True) Returns ------- filename : str IRTAM coefficient filename with full directory path """ # If no directory is provided, use the package default if irtam_dir == '': irtam_dir = PyIRTAM.irtam_coeff_dir # Construct the desired filename time_str = ''.join([dtime.strftime('%Y%m%d'), '_', dtime.strftime('%H%M%S'), '.ASC']) # Update the parameter name if param in ['B0', 'B1']: param_name = ''.join([param, 'in']) else: param_name = param # Construct file with or without year and month-day subdirectories if use_subdirs: filename = os.path.join(irtam_dir, dtime.strftime('%Y'), dtime.strftime('%m%d'), '_'.join(['IRTAM', param_name, 'COEFFS', time_str])) else: filename = os.path.join(irtam_dir, '_'.join(['IRTAM', param_name, 'COEFFS', time_str])) return filename