##// END OF EJS Templates
point to latest core ref...
point to latest core ref Signed-off-by: Alexis Jeandet <alexis.jeandet@member.fsf.org>

File last commit:

r1502:239919e8e177
r1508:e59c5bf60a49
Show More
SPWC-Amda.py
128 lines | 5.3 KiB | text/x-python | PythonLexer
import traceback
import os
from datetime import datetime, timedelta, timezone
from SciQLopBindings import PyDataProvider, Product, VectorTimeSerie, ScalarTimeSerie, DataSeriesType
import numpy as np
import requests
import copy
from spwc.amda import AMDA
amda = AMDA()
def amda_make_scalar(var=None):
if var is None:
return (((np.array([]), np.array([])), np.array([])), DataSeriesType.SCALAR)
else:
return (((var.time, np.array([])), var.data), DataSeriesType.SCALAR)
def amda_make_vector(var=None):
if var is None:
return (((np.array([]), np.array([])), np.array([])), DataSeriesType.VECTOR)
else:
return (((var.time, np.array([])), var.data), DataSeriesType.VECTOR)
def amda_make_multi_comp(var=None):
if var is None:
return (((np.array([]), np.array([])), np.array([])), DataSeriesType.MULTICOMPONENT)
else:
return (((var.time, np.array([])), var.data), DataSeriesType.MULTICOMPONENT)
def amda_make_spectro(var=None):
if var is None:
return (((np.array([]), np.array([])), np.array([])), DataSeriesType.SPECTROGRAM)
else:
min_sampling = float(var.meta.get("DATASET_MIN_SAMPLING", "nan"))
max_sampling = float(var.meta.get("DATASET_MAX_SAMPLING", "nan"))
if var.y is None and len(var.data):
var.y = np.logspace(1, 3, var.data.shape[1])[::-1]
return (((var.time, var.y), var.data), DataSeriesType.SPECTROGRAM)
#return pysciqlopcore.SpectrogramTimeSerie(var.time,y,var.data,min_sampling,max_sampling,True)
def amda_get_sample(metadata, start, stop):
ts_type = amda_make_scalar
try:
param_id = None
for key, value in metadata:
if key == 'xml:id':
param_id = value
elif key == 'type':
if value == 'vector':
ts_type = amda_make_vector
elif value == 'multicomponent':
ts_type = amda_make_multi_comp
elif value == 'spectrogram':
ts_type = amda_make_spectro
tstart = datetime.fromtimestamp(start, tz=timezone.utc)
tend = datetime.fromtimestamp(stop, tz=timezone.utc)
var = amda.get_parameter(start_time=tstart, stop_time=tend, parameter_id=param_id, method="REST")
return ts_type(var)
except Exception as e:
print(traceback.format_exc())
print("Error in amda.py ", str(e))
return ts_type()
class AmdaProvider(PyDataProvider):
def __init__(self):
super(AmdaProvider, self).__init__()
if len(amda.component) is 0:
amda.update_inventory()
parameters = copy.deepcopy(amda.parameter)
for name, component in amda.component.items():
if 'components' in parameters[component['parameter']]:
parameters[component['parameter']]['components'].append(component)
else:
parameters[component['parameter']]['components']=[component]
products = []
for key, parameter in parameters.items():
mission_name = amda.mission[parameter['mission']]['name']
observatory_name = parameter.get('observatory','')
if observatory_name != '':
observatory_name = amda.observatory[observatory_name]['name']
instrument_name = amda.instrument[parameter['instrument']]['name']
dataset_name = amda.dataset[parameter['dataset']]['name']
path = f"/AMDA/{mission_name}/{observatory_name}/{instrument_name}/{dataset_name}/{parameter['name']}"
components = [component['name'] for component in parameter.get('components',[])]
metadata = {key: item for key, item in parameter.items() if key is not 'components'}
n_components = parameter.get('size', 0)
if n_components == '3':
metadata["type"] = "vector"
elif parameter.get('display_type', '')=="spectrogram":
metadata["type"] = "spectrogram"
elif n_components != 0:
metadata["type"] = "multicomponent"
else:
metadata["type"] = "scalar"
products.append(Product(path, components, metadata))
self.register_products(products)
for _,mission in amda.mission.items():
if ('target' in mission) and (mission['xml:id'] != 'Ephemerides') and (mission['target'] != 'Earth'):
self.set_icon(f'/AMDA/{mission["name"]}','satellite')
def get_data(self, metadata, start, stop):
ts_type = amda_make_scalar
try:
param_id = metadata['xml:id']
ts_type_str = metadata['type']
if ts_type_str == 'vector':
ts_type = amda_make_vector
elif ts_type_str == 'multicomponent':
ts_type = amda_make_multi_comp
elif ts_type_str == 'spectrogram':
ts_type = amda_make_spectro
tstart = datetime.fromtimestamp(start, tz=timezone.utc)
tend = datetime.fromtimestamp(stop, tz=timezone.utc)
var = amda.get_parameter(start_time=tstart, stop_time=tend, parameter_id=param_id, method="REST")
return ts_type(var)
except Exception as e:
print(traceback.format_exc())
print("Error in amda.py ", str(e))
return ts_type()
_amda = AmdaProvider()