Module hytraj.hyread
Expand source code
import numpy as np
import pandas as pd
import xarray as xr
class HyData:
def __init__(self, files, stations):
self.stations = stations
self.files = files
# print('Reading Data....')
def read(self):
ds = xr.Dataset()
for station in self.stations:
ds[station] = self._read(station).to_array(dim="geo")
return ds
def _read(self, station):
files = self.files
dates = [filename.split(".")[-1] for filename in files]
dates = pd.to_datetime(dates, format="%Y%m%d%H")
lat = pd.DataFrame(columns=dates)
lon = pd.DataFrame(columns=dates)
alt = pd.DataFrame(columns=dates)
pre = pd.DataFrame(columns=dates)
dat = [lat, lon, alt, pre]
for filename, date in zip(files, dates):
data = self.read_hysplit_file(filename, station)
for var, col in zip(dat, data.columns):
var[date] = data[col]
data = xr.Dataset({"lat": lat, "lon": lon, "alt": alt, "pre": pre})
data = data.rename({"dim_0": "step", "dim_1": "time"}).astype("float")
return data
def read_hysplit_file(self, filename, station, skp=0):
start_index = self.stations.index(station)
skip_lines = len(self.stations)
columns = ["lat", "lon", "height", "pressure"]
with open(filename, "r") as f:
data = f.readlines()
for num, line in enumerate(data):
if "PRESSURE" in line:
skp = num
break
data = data[skp + 1 :][start_index::skip_lines]
data = [line.strip().split()[-4:] for line in data]
data = pd.DataFrame(data, columns=columns)
return data
Classes
class HyData (files, stations)
-
Expand source code
class HyData: def __init__(self, files, stations): self.stations = stations self.files = files # print('Reading Data....') def read(self): ds = xr.Dataset() for station in self.stations: ds[station] = self._read(station).to_array(dim="geo") return ds def _read(self, station): files = self.files dates = [filename.split(".")[-1] for filename in files] dates = pd.to_datetime(dates, format="%Y%m%d%H") lat = pd.DataFrame(columns=dates) lon = pd.DataFrame(columns=dates) alt = pd.DataFrame(columns=dates) pre = pd.DataFrame(columns=dates) dat = [lat, lon, alt, pre] for filename, date in zip(files, dates): data = self.read_hysplit_file(filename, station) for var, col in zip(dat, data.columns): var[date] = data[col] data = xr.Dataset({"lat": lat, "lon": lon, "alt": alt, "pre": pre}) data = data.rename({"dim_0": "step", "dim_1": "time"}).astype("float") return data def read_hysplit_file(self, filename, station, skp=0): start_index = self.stations.index(station) skip_lines = len(self.stations) columns = ["lat", "lon", "height", "pressure"] with open(filename, "r") as f: data = f.readlines() for num, line in enumerate(data): if "PRESSURE" in line: skp = num break data = data[skp + 1 :][start_index::skip_lines] data = [line.strip().split()[-4:] for line in data] data = pd.DataFrame(data, columns=columns) return data
Methods
def read(self)
-
Expand source code
def read(self): ds = xr.Dataset() for station in self.stations: ds[station] = self._read(station).to_array(dim="geo") return ds
def read_hysplit_file(self, filename, station, skp=0)
-
Expand source code
def read_hysplit_file(self, filename, station, skp=0): start_index = self.stations.index(station) skip_lines = len(self.stations) columns = ["lat", "lon", "height", "pressure"] with open(filename, "r") as f: data = f.readlines() for num, line in enumerate(data): if "PRESSURE" in line: skp = num break data = data[skp + 1 :][start_index::skip_lines] data = [line.strip().split()[-4:] for line in data] data = pd.DataFrame(data, columns=columns) return data