文件
AcousticSO/tl.py
T
2023-04-07 16:11:16 +08:00

102 行
4.0 KiB
Python

# -*- coding: utf-8 -*-
import warnings
warnings.filterwarnings('ignore')
import argparse, json
from common import NoIndent, MyEncoder
import os, sys
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)) + '/pyat')
# import time
def _argparse():
parser = argparse.ArgumentParser(description='tl client')
parser.add_argument('-a', '--argfile', action='store', dest='argfile', required=True, help='name of arguments file')
return parser.parse_args()
def main():
parser = _argparse()
argfile = parser.argfile
if argfile[-5:] != '.json':
print('输入的参数文件名有误')
return
with open(argfile, 'r') as jsonFile:
paramData = json.load(jsonFile)
if (("ETOPO1Path" not in paramData) or ("STPath" not in paramData) or \
"freq" not in paramData) or ("sourceDepth" not in paramData) or \
("receiveDepth" not in paramData) or ("sLat" not in paramData) or \
("sLon" not in paramData) or ("rLat" not in paramData) or \
("rLon" not in paramData) or ("timeType" not in paramData) or \
("modelType" not in paramData) or ("png" not in paramData) or \
("outParam" not in paramData):
print(f'{argfile}中的参数有误,请核实!')
return
ETOPO1Path = paramData["ETOPO1Path"]
STPath = paramData["STPath"]
freq = float(paramData["freq"])
sourceDepth = float(paramData["sourceDepth"])
receiveDepth = float(paramData["receiveDepth"])
sLat = float(paramData["sLat"])
sLon = float(paramData["sLon"])
rLat = float(paramData["rLat"])
rLon = float(paramData["rLon"])
timeType = paramData["timeType"]
modelType = paramData["modelType"]
png = paramData["png"]
outParam = paramData["outParam"]
from DataBase import DataBase
from tlcore import call_tl
import numpy as np
# 定义时间段
timeIndex = timeType
# 创建类
database = DataBase(ETOPO1Path, STPath)
# 设置时间段
database.set_timePeriod(timeIndex)
[ranges, depths, TL, bathym] = call_tl(database=database, freq=freq, sourceDepth=sourceDepth, sourceLat=sLat,
sourceLon=sLon,
receiveLat=rLat, receiveLon=rLon, modelType=modelType, isPlot=png)
# write data to file
# 保存地形数据
bathym.r = np.around(bathym.r, decimals=0)
bathym.d = np.around(bathym.d, decimals=0)
bathymData = {
"param": paramData,
"count": len(bathym.d),
"descript": "距离、深度",
"data": NoIndent(list(zip(bathym.r, bathym.d)))
}
with open(("" if outParam["outPath"] == "" else outParam["outPath"] + "/") + "tlOut_bathym.json",
'w') as jsonFile:
json_data = json.dumps(bathymData, cls=MyEncoder, indent=2, ensure_ascii=False)
jsonFile.write(json_data)
# 保存传播损失数据
tlpoint = []
depths = np.around(depths, decimals=0)
ranges = np.around(ranges, decimals=0)
TL = np.around(TL, decimals=2)
tlpoint = list(zip(np.tile(depths.reshape(len(depths), 1), len(ranges)).flatten(),
np.tile(ranges, (len(depths), 1)).flatten(), TL.flatten()))
tlData = {
"param": paramData,
"count": len(ranges) * len(depths),
"descript": "距离、深度、损失",
"data": NoIndent(tlpoint)
}
with open(("" if outParam["outPath"] == "" else outParam["outPath"] + "/") + "tlOut_tl.json", 'w') as jsonFile:
json_data = json.dumps(tlData, cls=MyEncoder, indent=2, ensure_ascii=False)
jsonFile.write(json_data)
if __name__ == '__main__':
# start = time.perf_counter()
main()
# end = time.perf_counter()
# print('time = ',(end-start))