more refactor for waves

This commit is contained in:
Dustella 2025-02-20 13:09:32 +08:00
parent 6565fccd25
commit a832042b54
Signed by: Dustella
GPG Key ID: 35AA0AA3DC402D5C
11 changed files with 37 additions and 24 deletions

View File

@ -7,8 +7,8 @@ from quart import Blueprint
from CONSTANT import DATA_BASEPATH
import modules.balloon as balloon
from quart import jsonify, request, send_file
from modules.balloon.plot_once_backend import render_by_mode_single
from modules.balloon.plot_year_backend import get_all_modes, render_based_on_mode
from modules.balloon.gravityw_plot_perday import render_by_mode_single
from modules.balloon.gravityw_plot_year import get_all_modes, render_based_on_mode
from modules.balloon.utils import *
BASE_PATH_BALLOON = DATA_BASEPATH.balloon

View File

@ -15,6 +15,7 @@ def get_meta():
return []
@cosmic_module.route('/render/planet_wave/daily')
@cosmic_module.route('/temp_render')
async def render():
T = request.args.get("T", 16)
@ -26,6 +27,7 @@ async def render():
return await send_file(buf, mimetype="image/png")
@cosmic_module.route('/render/gravity_wave/perday')
@cosmic_module.route('/render/single')
async def single_render():
year = request.args.get("year", 2008)

View File

@ -22,7 +22,7 @@ saber_module = Blueprint('saber', __name__)
renderer = SaberGravitywRenderer()
def get_processer():
def get_gravityw_processer():
lat_str = request.args.get("lat_range")
if lat_str is None:
lat_str = "30.0,40.0"
@ -71,6 +71,7 @@ async def get_days():
return ncfile.date_time.tolist()
@saber_module.route("/render/gravity_wave/per_day/wave_fitting")
@saber_module.route("/render/plot_wave_fitting")
async def do_plot_wave_day_fitting():
path = request.args.get("path")
@ -78,12 +79,13 @@ async def do_plot_wave_day_fitting():
height = request.args.get("height_no")
ncfile = await run_sync(data_nc_load)(path)
processor = await run_sync(get_processer)()
processor = await run_sync(get_gravityw_processer)()
data = await run_sync(processor.process_day)(ncfile, int(day))
await run_sync(renderer.plot_wave_fitting)(data, int(height))
return await extract_payload()
@saber_module.route("/render/gravity_wave/per_day/fft_ifft")
@saber_module.route("/render/day_fft_ifft_plot")
async def do_day_fft_ifft_plot():
path = request.args.get("path")
@ -91,13 +93,14 @@ async def do_day_fft_ifft_plot():
cycle_no = request.args.get("cycle_no")
ncfile = await run_sync(data_nc_load)(path)
processor = await run_sync(get_processer)()
processor = await run_sync(get_gravityw_processer)()
data = await run_sync(processor.process_day)(ncfile, int(day))
# 高度滤波处理
await run_sync(renderer.day_fft_ifft_plot)(wave_data=data, cycle_no=int(cycle_no))
return await extract_payload()
@saber_module.route("/render/gravity_wave/per_day/power_wave_plot")
@saber_module.route("/render/day_cycle_power_wave_plot")
async def do_day_cycle_power_wave_plot():
path = request.args.get("path")
@ -105,28 +108,30 @@ async def do_day_cycle_power_wave_plot():
cycle_no = request.args.get("cycle_no")
ncfile = await run_sync(data_nc_load)(path)
processor = await run_sync(get_processer)()
processor = await run_sync(get_gravityw_processer)()
data = await run_sync(processor.process_day)(ncfile, int(day))
await run_sync(renderer.day_cycle_power_wave_plot)(wave_data=data, cycle_no=int(cycle_no))
return await extract_payload()
@saber_module.route("/render/gravity_wave/per_month/power_wave_plot")
@saber_module.route("/render/month_power_wave_plot")
async def do_month_power_wave_plot():
path = request.args.get("path")
month = request.args.get("month")
ncfile = await run_sync(data_nc_load)(path)
processor = await run_sync(get_processer)()
processor = await run_sync(get_gravityw_processer)()
data = await run_sync(processor.process_month)(ncfile)
await run_sync(renderer.month_power_wave_plot)(wave_data=data, date_time=ncfile.date_time)
return await extract_payload()
@saber_module.route("/render/gravity_wave/per_year/power_wave_plot")
@saber_module.route("/render/year_power_wave_plot")
async def do_year_power_wave_plot():
year = request.args.get("year")
processor = await run_sync(get_processer)()
processor = await run_sync(get_gravityw_processer)()
data = await run_sync(processor.process_year)([
data_nc_load(path) for path in glob.glob(f"{DATA_BASEPATH.saber}/{year}/*.nc")
])
@ -134,6 +139,9 @@ async def do_year_power_wave_plot():
return await extract_payload()
@saber_module.route("/render/planet_wave/per_year/energy_plot")
# above path is named correctly
# below path is named wrongly, but kept due to compatibility
@saber_module.route("/render/gravity_year")
async def do_gravity_year():
year = request.args.get("year")

View File

@ -5,8 +5,8 @@ from quart.utils import run_sync
from matplotlib import pyplot as plt
from CONSTANT import DATA_BASEPATH
from modules.tidi.gravity_wave_year import TidiPlotGWYear
from modules.tidi.planet_wave_daily import TidiPlotPWDaily
from modules.tidi.gravity_wave_year import TidiGravityWPlotMonthly
from modules.tidi.planet_wave_daily import TidiPlotPlanetWDaily
tidi_module = Blueprint("Tidi", __name__)
@ -22,6 +22,7 @@ def get_all_years():
}
@tidi_module.route("/render/planet_wave/daily")
@tidi_module.route('/render/wave')
async def render_wave():
mode = request.args.get('mode')
@ -37,7 +38,7 @@ async def render_wave():
height = float(height)
lat_range = tuple(map(int, lat_range.split('~')))
await run_sync(TidiPlotPWDaily)(mode, year, k, height, lat_range, T)
await run_sync(TidiPlotPlanetWDaily)(mode, year, k, height, lat_range, T)
buffer = BytesIO()
plt.savefig(buffer, format="png")
buffer.seek(0)
@ -45,26 +46,28 @@ async def render_wave():
return await send_file(buffer, mimetype="image/png")
@tidi_module.route('/render/gravity_wave/monthly_height')
@tidi_module.route('/render/month_stats_v1')
async def render_stats_v1():
year = request.args.get('year')
year = int(year)
plotter = await run_sync(TidiPlotGWYear)(year)
await run_sync(plotter.plot_v1)()
plotter: TidiGravityWPlotMonthly = await run_sync(TidiGravityWPlotMonthly)(year)
await run_sync(plotter.plot_height)()
buffer = BytesIO()
plt.savefig(buffer, format="png")
buffer.seek(0)
return await send_file(buffer, mimetype="image/png")
@tidi_module.route('/render/gravity_wave/monthly_energy')
@tidi_module.route('/render/month_stats_v2')
async def render_stats_v2():
year = request.args.get('year')
year = int(year)
plotter = await run_sync(TidiPlotGWYear)(year)
await run_sync(plotter.plot_month)()
plotter: TidiGravityWPlotMonthly = await run_sync(TidiGravityWPlotMonthly)(year)
await run_sync(plotter.plot_energy)()
buffer = BytesIO()
plt.savefig(buffer, format="png")
buffer.seek(0)

View File

@ -759,7 +759,7 @@ def day_to_month(day):
return f'{["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"][i]}'
class TidiPlotGWYear:
class TidiGravityWPlotMonthly:
def __init__(self, year):
self.year = year
cache_path = f"{DATA_BASEPATH.tidi}/cache"
@ -842,7 +842,7 @@ class TidiPlotGWYear:
self.dates = dates
self.months = [day_to_month(day) for day in dates]
def plot_v1(self):
def plot_height(self):
h_reversed = self.h_reversed
data0_reversed = self.data0_reversed
dates = self.dates
@ -875,7 +875,7 @@ class TidiPlotGWYear:
# 显示图形
# plt.show()
def plot_month(self):
def plot_energy(self):
HP = self.HP
# --------------绘制月统计图-------------------------------------------------------------------
# 获取HP的列数

View File

@ -13,7 +13,7 @@ import matplotlib.pyplot as plt
import matplotlib
from CONSTANT import DATA_BASEPATH
from modules.tidi.tidi_pw_process import extract_tidi_pw_data
from modules.tidi.tidi_planetw_process import extract_tidi_planetw_data
# 设置中文显示和负号正常显示
matplotlib.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文
matplotlib.rcParams['axes.unicode_minus'] = False # 正常显示负号
@ -33,7 +33,7 @@ bounds = (
# 定义拟合函数
def TidiPlotPWDaily(
def TidiPlotPlanetWDaily(
mode,
year,
k,
@ -55,7 +55,7 @@ def TidiPlotPWDaily(
if os.path.exists(data_cache_path):
df = pd.read_parquet(data_cache_path)
else:
df = extract_tidi_pw_data(
df = extract_tidi_planetw_data(
year, input_height, lat_range
)[mode]
df.to_parquet(data_cache_path)
@ -146,8 +146,8 @@ def TidiPlotPWDaily(
if __name__ == '__main__':
TidiPlotPWDaily('V_Zonal', 2015, 1)
TidiPlotPWDaily('V_Meridional', 2015, 1)
TidiPlotPlanetWDaily('V_Zonal', 2015, 1)
TidiPlotPlanetWDaily('V_Meridional', 2015, 1)
# # 用于存储拟合参数结果的列表
# all_fit_results = []

View File

@ -15,7 +15,7 @@ HEIGHTS_CONSTANT = [
]
def extract_tidi_pw_data(
def extract_tidi_planetw_data(
year,
input_height: float = 82.5,
lat_range: tuple = (0, 5),