106 lines
2.9 KiB
Python
106 lines
2.9 KiB
Python
import glob
|
|
from io import BytesIO
|
|
from flask import Blueprint, request, send_file
|
|
from matplotlib import pyplot as plt
|
|
from saber.process import DataProcessor
|
|
from saber.render import Renderer
|
|
from saber.utils import *
|
|
|
|
|
|
saber_module = Blueprint('saber', __name__)
|
|
lat_range = (30.0, 40.0)
|
|
alt_range = (20.0, 105.0)
|
|
lambda_range = (2, 15)
|
|
lvboin = True
|
|
|
|
processor = DataProcessor(
|
|
lat_range=lat_range, alt_range=alt_range, lambda_range=lambda_range, lvboin=lvboin)
|
|
renderer = Renderer()
|
|
|
|
|
|
def extract_payload():
|
|
buffer = BytesIO()
|
|
plt.savefig(buffer, format="png")
|
|
buffer.seek(0)
|
|
return send_file(buffer, mimetype="image/png")
|
|
|
|
|
|
_all_saber_files = glob.glob("./saber/data/**/**.nc", recursive=True)
|
|
|
|
|
|
@saber_module.route("/metadata")
|
|
def get_files():
|
|
# normalizing the path, and replace \\ with /
|
|
all_saber_files = [path.replace("\\", "/") for path in _all_saber_files]
|
|
return all_saber_files
|
|
|
|
|
|
@saber_module.route("/metadata/list_days")
|
|
def get_days():
|
|
path = request.args.get("path")
|
|
|
|
ncfile = data_nc_load(path)
|
|
|
|
return ncfile.date_time.tolist()
|
|
|
|
|
|
@saber_module.route("/render/plot_wave_fitting")
|
|
def do_plot_wave_day_fitting():
|
|
path = request.args.get("path")
|
|
day = request.args.get("day")
|
|
height = request.args.get("height")
|
|
|
|
ncfile = data_nc_load(path)
|
|
data = processor.process_day(ncfile, int(day))
|
|
renderer.plot_wave_fitting(data, int(height))
|
|
return extract_payload()
|
|
|
|
|
|
@saber_module.route("/render/day_fft_ifft_plot")
|
|
def do_day_fft_ifft_plot():
|
|
path = request.args.get("path")
|
|
day = request.args.get("day")
|
|
cycle_no = request.args.get("cycle_no")
|
|
|
|
ncfile = data_nc_load(path)
|
|
|
|
data = processor.process_day(ncfile, int(day))
|
|
renderer.day_fft_ifft_plot(wave_data=data, cycle_no=int(cycle_no))
|
|
return extract_payload()
|
|
|
|
|
|
@saber_module.route("/render/day_cycle_power_wave_plot")
|
|
def do_day_cycle_power_wave_plot():
|
|
path = request.args.get("path")
|
|
day = request.args.get("day")
|
|
cycle_no = request.args.get("cycle_no")
|
|
|
|
ncfile = data_nc_load(path)
|
|
|
|
data = processor.process_day(ncfile, int(day))
|
|
renderer.day_cycle_power_wave_plot(wave_data=data, cycle_no=int(cycle_no))
|
|
return extract_payload()
|
|
|
|
|
|
@saber_module.route("/render/month_power_wave_plot")
|
|
def do_month_power_wave_plot():
|
|
path = request.args.get("path")
|
|
month = request.args.get("month")
|
|
|
|
ncfile = data_nc_load(path)
|
|
|
|
data = processor.process_month(ncfile)
|
|
renderer.month_power_wave_plot(wave_data=data, date_time=ncfile.date_time)
|
|
return extract_payload()
|
|
|
|
|
|
@saber_module.route("/render/year_power_wave_plot")
|
|
def do_year_power_wave_plot():
|
|
year = request.args.get("year")
|
|
|
|
data = processor.process_year([
|
|
data_nc_load(path) for path in glob.glob(f"./saber/data/{year}/*.nc")
|
|
])
|
|
renderer.year_power_wave_plot(year_wave=data)
|
|
return extract_payload()
|