From eb35ae2ab9d1d189b5cf5a268523a021de424d5e Mon Sep 17 00:00:00 2001
From: lkugler <lukas.kugler@gmail.com>
Date: Sat, 27 May 2023 11:17:06 +0200
Subject: [PATCH] docs

---
 dartwrf/obs/obsseq.py | 43 +++++++++++++++++++++++++++++--------------
 1 file changed, 29 insertions(+), 14 deletions(-)

diff --git a/dartwrf/obs/obsseq.py b/dartwrf/obs/obsseq.py
index 19ee4d5..aa6fe9a 100755
--- a/dartwrf/obs/obsseq.py
+++ b/dartwrf/obs/obsseq.py
@@ -1,13 +1,32 @@
-"""Read, modify and save DART obs_seq files.
+"""Read, modify and save DART obs_seq.out/obs_seq.final files in DART format.
 
-Not usable for creating obs_seq, since it does not know which metadata is necessary for each type
+Example:
+    from dartwrf.obs.obsseq import ObsSeq
+    obs = ObsSeq('path/to/obs_seq.final')
+
+    obs.df  # pandas.DataFrame with all observations (rows) 
+
+    obs.df['observations']  # observation values (np.array)
+    obs.df['truth']  # truth values (np.array)
+    obs.df['prior ensemble spread']  # spread of prior ensemble (np.array)
+    obs.df['variance']  # observation error variances (np.array)
+
+    obs.df.get_prior_Hx()  # H(x_prior) for all ensemble members (np.array)
+    obs.df.get_posterior_Hx()  # H(x_posterior) for all ensemble members (np.array)
+
+    obs.df.get_lon_lat()  # longitude and latitude of observations (pd.DataFrame)
+
+    obs.to_dart('path/to/obs_seq.final')  # write to file
+
+Note:
+    Can not create obs_seq from scratch, since it does not know which metadata is necessary for each observation type
 """
 
-import os, sys, shutil, warnings
+import os, warnings
 import numpy as np
 import pandas as pd
 
-def plot_box(m, lat, lon, label="", **kwargs):
+def _plot_box(m, lat, lon, label="", **kwargs):
     """"Draw bounding box
 
     Args:
@@ -35,15 +54,13 @@ def plot_box(m, lat, lon, label="", **kwargs):
         **kwargs
     )
 
-
-def degrees_to_rad(degr):
+def _degrees_to_rad(degr):
     """Convert to DART convention = radians"""
     if degr < 0:
         degr += 360
     return degr / 360 * 2 * np.pi
 
-
-def rad_to_degrees(rad):
+def _rad_to_degrees(rad):
     """Convert to degrees from DART convention (radians)"""
     assert rad >= 0, "no negative radians allowed"
     degr = rad / np.pi * 180
@@ -54,8 +71,6 @@ def rad_to_degrees(rad):
     return degr
 
 
-
-
 class ObsRecord(pd.DataFrame):
     """Basically a pd.DataFrame with additional methods
     """
@@ -129,8 +144,8 @@ class ObsRecord(pd.DataFrame):
             x, y, z, z_coord = values
 
             # convert radian to degrees lon/lat
-            lon = rad_to_degrees(x)
-            lat = rad_to_degrees(y)
+            lon = _rad_to_degrees(x)
+            lat = _rad_to_degrees(y)
             lons[i] = lon
             lats[i] = lat
 
@@ -666,7 +681,7 @@ class ObsSeq(object):
         m.drawcoastlines(color="white")
         m.drawcountries(color="white")
 
-        plot_box(m, lat, lon, label="domain", color="green", lw=1) #4)
+        _plot_box(m, lat, lon, label="domain", color="green", lw=1) #4)
 
         # OBSERVATIONS
         original_df = self.df.attrs['df_pre_superob']
@@ -710,7 +725,7 @@ class ObsSeq(object):
             for lats, lons in self.df.attrs['boxes']:
                 lats, lons = np.meshgrid(lats, lons)
 
-                plot_box(m, lats, lons, label=label, color="white", lw=0.1) #1)
+                _plot_box(m, lats, lons, label=label, color="white", lw=0.1) #1)
                 label = ''
 
         plt.legend()
-- 
GitLab