"""
Module for downloading filter data from the SVO website.
"""
import os
import warnings
import urllib.request
import numpy as np
[docs]def download_filter(filter_id):
"""
Parameters
----------
filter_id : str
Filter ID.
Returns
-------
numpy.ndarray
Wavelength (um).
numpy.ndarray
Transmission.
"""
if filter_id == 'LCO/VisAO.Ys':
url = 'https://xwcl.science/magao/visao/VisAO_Ys_filter_curve.dat'
urllib.request.urlretrieve(url, 'VisAO_Ys_filter_curve.dat')
wavelength, transmission, _, _ = np.loadtxt('VisAO_Ys_filter_curve.dat', unpack=True)
wavelength = wavelength[:-7]
transmission = transmission[:-7]
os.remove('VisAO_Ys_filter_curve.dat')
else:
url = 'http://svo2.cab.inta-csic.es/svo/theory/fps/getdata.php?format=ascii&id='+filter_id
urllib.request.urlretrieve(url, 'filter.dat')
if os.stat('filter.dat').st_size == 0:
os.remove('filter.dat')
wavelength = None
transmission = None
warnings.warn(f'Filter \'{filter_id}\' is not available on the SVO Filter Profile '
f'Service.')
else:
try:
wavelength, transmission = np.loadtxt('filter.dat', unpack=True)
except:
os.remove('filter.dat')
raise ValueError(f'The filter data of \'{filter_id}\' could not be downloaded. '
f'Perhaps the website of the SVO Filter Profile Service '
f'(http://svo2.cab.inta-csic.es/svo/theory/fps/) is not '
f'available?')
wavelength *= 1e-4 # (um)
os.remove('filter.dat')
if wavelength is not None:
indices = []
for i in range(transmission.size):
if i == 0 and transmission[i] == 0. and transmission[i+1] == 0.:
indices.append(i)
elif i == transmission.size-1 and transmission[i-1] == 0. and transmission[i] == 0.:
indices.append(i)
elif transmission[i-1] == 0. and transmission[i] == 0. and transmission[i+1] == 0.:
indices.append(i)
wavelength = np.delete(wavelength, indices)
transmission = np.delete(transmission, indices)
return wavelength, transmission