checkpoint: before files dir migrate

This commit is contained in:
Dustella 2025-02-13 18:38:05 +08:00
parent 9f93b1a158
commit 7237b0ec19
Signed by: Dustella
GPG Key ID: 35AA0AA3DC402D5C
8 changed files with 101 additions and 49 deletions

5
.gitignore vendored
View File

@ -5,4 +5,7 @@
# Include .gitignore itself
!.gitignore
# Recursively allow .py files in subdirectories
!*/
!*/
dist
build

View File

@ -1,3 +1,4 @@
from matplotlib import pyplot as plt
import cosmic
import tidi
from utils import *
@ -11,7 +12,10 @@ import sys
import matplotlib.font_manager as fm
app = Quart(__name__)
app = cors(app, send_origin_wildcard=True, allow_origin="*")
plt.switch_backend('agg')
fm.fontManager.addfont("./SimHei.ttf")
@app.before_request
def auth():
@ -34,14 +38,13 @@ app.register_blueprint(saber.saber_module, url_prefix="/saber")
app.register_blueprint(tidi.tidi_module, url_prefix="/tidi")
app.register_blueprint(cosmic.cosmic_module, url_prefix="/cosmic")
# allow cors
app = cors(app)
if __name__ == '__main__':
# get args '--prod'
args = sys.argv
if 'prod' in args:
app.run("0.0.0.0", port=5000, debug=False)
pass
elif 'debug' in args:
app.run("0.0.0.0",port=18200,debug=True)

View File

@ -2,7 +2,9 @@ from io import BytesIO
from quart import Blueprint, request, send_file
from matplotlib import pyplot as plt
from cosmic.single import SingleCosmicWavePlot
from cosmic.temp_render import temp_render
from quart.utils import run_sync
cosmic_module = Blueprint("Cosmic", __name__)
@ -14,9 +16,29 @@ def get_meta():
@cosmic_module.route('/temp_render')
async def render():
T = request.args.get("T", 16)
temp_render(T=int(T))
await run_sync(temp_render)(T=int(T))
buf = BytesIO()
plt.savefig(buf, format="png")
buf.seek(0)
return await send_file(buf, mimetype="image/png")
@cosmic_module.route('/render/single')
async def single_render():
year = request.args.get("year", 2008)
day = request.args.get("day", 1)
mode = request.args.get("mode", "mean_ktemp_Nz")
p :SingleCosmicWavePlot = await run_sync(SingleCosmicWavePlot)(year=int(year), day=int(day))
if mode == "mean_ktemp_Nz":
await run_sync(p.plot_results_mean_ktemp_Nz)()
elif mode == "mean_ktemp_Ptz":
await run_sync(p.plot_results_mean_ktemp_Ptz)()
else :
raise ValueError("Invalid mode")
buf = BytesIO()
plt.savefig(buf, format="png")
buf.seek(0)
return await send_file(buf, mimetype="image/png")

View File

@ -15,7 +15,7 @@ plt.rcParams['axes.unicode_minus'] = False # 正常显示负号
def process_single_file(base_folder_path, i):
# 构建当前文件夹的路径
folder_name = f"atmPrf_repro2021_2018_00{i}" if i < 10 else f"atmPrf_repro2021_2008_0{i}"
folder_name = f"atmPrf_repro2021_2008_00{i}" if i < 10 else f"atmPrf_repro2021_2008_0{i}"
folder_path = os.path.join(base_folder_path, folder_name)
# 检查文件夹是否存在
if os.path.exists(folder_path):
@ -269,7 +269,7 @@ def process_single_file(base_folder_path, i):
# 主循环处理1到3个文件
base_folder_path = r"./cosmic/data/2018"
base_folder_path = r"./cosmic/data/2008"
all_mean_ktemp_Nz = []
all_mean_ktemp_Ptz = []
for file_index in range(1, 365):

View File

@ -1,4 +1,5 @@
import os
import time
import numpy as np
import pandas as pd
from scipy.interpolate import interp1d
@ -22,7 +23,7 @@ def read_and_preprocess_data(base_folder_path, day_num):
"""
dfs = []
# 构建当前文件夹的路径
folder_name = f"atmPrf_repro2021_2018_00{day_num}" if day_num < 10 else f"atmPrf_repro2021_2018_0{day_num}"
folder_name = f"atmPrf_repro2021_2008_00{day_num}" if day_num < 10 else f"atmPrf_repro2021_2008_0{day_num}"
folder_path = os.path.join(base_folder_path, folder_name)
# 检查文件夹是否存在
if os.path.exists(folder_path):
@ -340,7 +341,7 @@ def calculate_potential_energy(background_temperatures, result, heights):
# 模块7 绘制重力波势能和浮力频率日图
def plot_results(mean_ktemp_Nz, mean_ktemp_Ptz, heights):
def plot_results_mean_ktemp_Nz(mean_ktemp_Nz, heights):
"""
绘制平均浮力频率和平均势能随高度变化的图像
@ -350,44 +351,62 @@ def plot_results(mean_ktemp_Nz, mean_ktemp_Ptz, heights):
heights (np.ndarray): 高度数据数组
"""
# 绘制平均浮力频率mean_ktemp_Nz随高度变化的图像
plt.clf()
plt.figure(figsize=(10, 6))
plt.plot(mean_ktemp_Nz, heights / 1000) # 高度单位换算为km方便展示
plt.xlabel('Average (N_z)')
plt.ylabel('H(km)')
# plt.gca().invert_yaxis() # 使高度坐标轴从上到下递增,符合常规习惯
plt.show()
# plt.show()
def plot_results_mean_ktemp_Ptz(mean_ktemp_Ptz, heights):
"""
# 绘制平均势能mean_ktemp_Ptz随高度变化的图像
"""
# clean the plot
plt.clf()
plt.figure(figsize=(10, 6))
plt.plot(mean_ktemp_Ptz, heights / 1000) # 高度单位换算为km方便展示
plt.xlabel('Average (PT_z)')
plt.ylabel('H (km)')
# plt.gca().invert_yaxis() # 使高度坐标轴从上到下递增,符合常规习惯
plt.show()
# plt.show()
if __name__ == "__main__":
base_folder_path = r"./cosmic/data/2018"
day_num = 1
# 模块1调用
final_df = read_and_preprocess_data(base_folder_path, day_num)
# 模块2调用
latitude_filtered_df, altitude_temperature_mean = filter_and_grid_data(
final_df)
# 模块3调用
merged_df = calculate_wn0_and_perturbation(
latitude_filtered_df, altitude_temperature_mean)
# 模块4调用
fit_results, residuals, background_temperatures = wave_fitting_and_filtering(
merged_df)
# 模块5调用
result = bandpass_filtering(residuals)
# 创建从1到80km的高度列表按照代码中原本逻辑转换为对应单位的数组
heights = np.linspace(0, 60000, 3000)
# 模块6调用计算势能相关数据并获取平均浮力频率和平均势能
mean_ktemp_Nz, mean_ktemp_Ptz = calculate_potential_energy(
background_temperatures, result, heights)
print("平均浮力频率mean_ktemp_Nz:", mean_ktemp_Nz)
print("平均势能mean_ktemp_Ptz:", mean_ktemp_Ptz)
class SingleCosmicWavePlot:
def __init__(self, year, day):
base_folder_path = f"./cosmic/data/{year}"
day_num = day
# 模块1调用
final_df = read_and_preprocess_data(base_folder_path, day_num)
# 模块2调用
latitude_filtered_df, altitude_temperature_mean = filter_and_grid_data(
final_df)
# 模块3调用
merged_df = calculate_wn0_and_perturbation(
latitude_filtered_df, altitude_temperature_mean)
# 模块4调用
fit_results, residuals, background_temperatures = wave_fitting_and_filtering(
merged_df)
# 模块5调用
result = bandpass_filtering(residuals)
# 创建从1到80km的高度列表按照代码中原本逻辑转换为对应单位的数组
heights = np.linspace(0, 60000, 3000)
# 模块6调用计算势能相关数据并获取平均浮力频率和平均势能
mean_ktemp_Nz, mean_ktemp_Ptz = calculate_potential_energy(
background_temperatures, result, heights)
# print("平均浮力频率mean_ktemp_Nz:", mean_ktemp_Nz)
# print("平均势能mean_ktemp_Ptz:", mean_ktemp_Ptz)
self.mean_ktemp_Nz = mean_ktemp_Nz
self.mean_ktemp_Ptz = mean_ktemp_Ptz
self.heights = heights
# 调用绘图模块函数进行绘图
plot_results(mean_ktemp_Nz, mean_ktemp_Ptz, heights)
def plot_results_mean_ktemp_Nz(self):
plot_results_mean_ktemp_Nz(self.mean_ktemp_Nz, self.heights)
def plot_results_mean_ktemp_Ptz(self):
plot_results_mean_ktemp_Ptz(self.mean_ktemp_Ptz, self.heights)

View File

@ -5,6 +5,7 @@ from matplotlib import pyplot as plt
from saber.process import DataProcessor
from saber.render import Renderer
from saber.utils import *
from quart.utils import run_sync
saber_module = Blueprint('saber', __name__)
@ -74,8 +75,8 @@ async def do_plot_wave_day_fitting():
ncfile = data_nc_load(path)
processor = get_processer()
data = processor.process_day(ncfile, int(day))
renderer.plot_wave_fitting(data, int(height))
data = await run_sync(processor.process_day)(ncfile, int(day))
await run_sync(renderer.plot_wave_fitting)(data, int(height))
return await extract_payload()
@ -87,8 +88,9 @@ async def do_day_fft_ifft_plot():
ncfile = data_nc_load(path)
processor = get_processer()
data = processor.process_day(ncfile, int(day))
renderer.day_fft_ifft_plot(wave_data=data, cycle_no=int(cycle_no))
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()
@ -100,8 +102,8 @@ async def do_day_cycle_power_wave_plot():
ncfile = data_nc_load(path)
processor = get_processer()
data = processor.process_day(ncfile, int(day))
renderer.day_cycle_power_wave_plot(wave_data=data, cycle_no=int(cycle_no))
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()
@ -112,8 +114,8 @@ async def do_month_power_wave_plot():
ncfile = data_nc_load(path)
processor = get_processer()
data = processor.process_month(ncfile)
renderer.month_power_wave_plot(wave_data=data, date_time=ncfile.date_time)
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()
@ -121,8 +123,8 @@ async def do_month_power_wave_plot():
async def do_year_power_wave_plot():
year = request.args.get("year")
processor = get_processer()
data = processor.process_year([
data = await run_sync(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)
await run_sync(renderer.year_power_wave_plot)(year_wave=data)
return await extract_payload()

View File

@ -1,6 +1,7 @@
import glob
from io import BytesIO
from quart import Blueprint, request, send_file
from quart.utils import run_sync
from matplotlib import pyplot as plt
from tidi.plot import TidiPlotv2
@ -28,7 +29,7 @@ async def render_wave():
k = int(k)
T = int(T)
tidi_render(mode, year, k, T)
await run_sync(tidi_render)(mode, year, k, T)
buffer = BytesIO()
plt.savefig(buffer, format="png")
buffer.seek(0)
@ -40,8 +41,8 @@ async def render_stats_v1():
year = request.args.get('year')
year = int(year)
plotter = TidiPlotv2(year)
plotter.plot_v1()
plotter = await run_sync(TidiPlotv2)(year)
await run_sync(plotter.plot_v1)()
buffer = BytesIO()
plt.savefig(buffer, format="png")
buffer.seek(0)
@ -52,8 +53,8 @@ async def render_stats_v2():
year = request.args.get('year')
year = int(year)
plotter = TidiPlotv2(year)
plotter.plot_month()
plotter = await run_sync(TidiPlotv2)(year)
await run_sync(plotter.plot_month)()
buffer = BytesIO()
plt.savefig(buffer, format="png")
buffer.seek(0)

View File

@ -1,3 +1,5 @@
# 行星波
#此代码是对数据处理后的txt数据进行行星波参数提取绘图
#2006_TIDI_V_Meridional_data.txt也可以做同样处理一个是经向风提取的行星波一个是纬向风的