Source code for pyspex.ogse_laser

#
# This file is part of pyspex
#
# https://github.com/rmvanhees/pyspex.git
#
# Copyright (c) 2019-2023 SRON - Netherlands Institute for Space Research
#    All Rights Reserved
#
# License:  BSD-3-Clause
"""Read settings of the OPO laser used at NASA GSFC.

The OPO laser is used for ISRF and stray-light calibration measurements.
"""
from __future__ import annotations

__all__ = ['read_gse_excel']

from pathlib import Path

import numpy as np
import xarray as xr
from openpyxl import load_workbook


# - main functions ----------------------------
[docs] def read_gse_excel(gse_dir: Path, target_cwl: str) -> xr.Dataset | None: """Return GSE info on central wavelength, line-width and laser radiance. Parameters ---------- target_cwl: str Target laser wavelength as provided in the filename gse_dir: Path Name of folder with the Excel file """ wbook = load_workbook(gse_dir / 'SPEXOne_ALL_360-840nm.xlsx') wsheet = wbook.active actual_cwl = np.array([cel.value for cel in wsheet['E'][1: -1]]) # print(actual_cwl) indx = np.argmin(np.abs(actual_cwl - float(target_cwl[:-2]))) print(f'{target_cwl:>8s}: {actual_cwl[indx]:.3f} at index={indx:d}') if abs(float(target_cwl[:-2]) - actual_cwl[indx]) > 2: print('[WARNING]: no GSE information found') wbook.close() return None indx += 1 wavelength = np.array([wsheet['E'][indx].value]) xar_wv = xr.DataArray(wavelength, coords={'wavelength': wavelength}, attrs={'long_name': 'central wavelength', 'units': 'nm'}) xar_std = xr.DataArray([wsheet['F'][indx].value], coords={'wavelength': wavelength}, attrs={'long_name': 'central wavelength [std]', 'units': 'nm'}) xar_lw = xr.DataArray([wsheet['G'][indx].value], coords={'wavelength': wavelength}, attrs={'long_name': 'line width', 'units': 'nm'}) xar_sign = xr.DataArray([wsheet['I'][indx].value], coords={'wavelength': wavelength}, attrs={'long_name': 'radiance', 'units': 'W/(m^2.sr)'}) wbook.close() return xr.Dataset({'wavelength': xar_wv, 'wv_std': xar_std, 'linewidth': xar_lw, 'signal': xar_sign})
def __test(l1a_file: str) -> None: """Small function to test this module.""" # Create a netCDF4 file with the ISRF data in it gse_dir = Path('/data/richardh/SPEXone/GSFC') xds = read_gse_excel(gse_dir, '465.4nm') xds = read_gse_excel(gse_dir, '360nm', ) xds = read_gse_excel(gse_dir, '840nm') xds.to_netcdf(l1a_file, mode='w', group='/gse_data/OPO_laser') # -------------------------------------------------- if __name__ == '__main__': __test('test_netcdf.nc')