checkpoint: before files dir migrate
This commit is contained in:
parent
9f93b1a158
commit
7237b0ec19
5
.gitignore
vendored
5
.gitignore
vendored
@ -5,4 +5,7 @@
|
||||
# Include .gitignore itself
|
||||
!.gitignore
|
||||
# Recursively allow .py files in subdirectories
|
||||
!*/
|
||||
!*/
|
||||
|
||||
dist
|
||||
build
|
||||
@ -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)
|
||||
|
||||
@ -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")
|
||||
@ -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):
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -1,3 +1,5 @@
|
||||
# 行星波
|
||||
|
||||
#此代码是对数据处理后的txt数据进行行星波参数提取绘图
|
||||
#2006_TIDI_V_Meridional_data.txt也可以做同样处理,一个是经向风提取的行星波,一个是纬向风的
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user