Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
a629ef2
cleaned up "domain" variables in ObsFcstAna postprocessing package
gmao-rreichle Jun 12, 2025
9267abb
add read_tilegrids() function
gmao-qliu Jun 16, 2025
60c3019
update tile2grid options
gmao-qliu Jun 16, 2025
0b81664
add tilegrid info. in config
gmao-qliu Jun 16, 2025
33b9123
add tilegrids info
gmao-qliu Jun 16, 2025
79ff6a1
change remap_1d_to_2d() to tile2grid()
gmao-qliu Jun 16, 2025
b706b90
correct module name for tile2grid
gmao-qliu Jun 16, 2025
861923b
change to save stats of individual species
gmao-qliu Jun 16, 2025
546733d
Merge branch 'develop' into feature/rreichle/postproc_ObsFcstAna_fixes
gmao-rreichle Jun 17, 2025
57bae3c
cleanup: corrected comments, removed redundant import statements, con…
gmao-rreichle Jun 17, 2025
25270fe
removed "qliu" from sample output path (user_config.py)
gmao-rreichle Jun 17, 2025
2a3d6e7
fixed vertical alignment (postproc_ObsFcstAna.py)
gmao-rreichle Jun 17, 2025
2423fb3
replaced variable name start/end/current_month with start/end/current…
gmao-rreichle Jun 17, 2025
80a68eb
clarify saved stats variables
gmao-qliu Jun 17, 2025
6237a89
minor changes in processing of temporal stats (postproc_ObsFcstAna.py…
gmao-rreichle Jun 17, 2025
a285d6a
fixed vertical alignment (Plot_stats_timeseries.py)
gmao-rreichle Jun 17, 2025
8df8196
dummy white-space change to facilitate Github comments (Get_ObsFcstAn…
gmao-rreichle Jun 17, 2025
719297b
Merge branch 'develop' into feature/rreichle/postproc_ObsFcstAna_fixes
gmao-rreichle Jun 18, 2025
4c9755d
Updated CHANGELOG.md
gmao-rreichle Jun 18, 2025
5160c6c
rename file and remove plotting options to avoid confusion
gmao-qliu Jun 23, 2025
4e04764
edit da_t0 for off-the-hour, move spatial stats time loop inside func…
gmao-qliu Jun 23, 2025
f82e55f
change 1-d to 2-d regridding
gmao-qliu Jun 23, 2025
54d822d
minor change
gmao-qliu Jun 23, 2025
6dfe1c3
minor clean up and move time loop out
gmao-qliu Jun 23, 2025
76ccea9
minor changes
gmao-qliu Jun 23, 2025
caa0f90
minor correction
gmao-qliu Jun 23, 2025
f5fa08c
remove old file
gmao-qliu Jun 23, 2025
dc78876
corrected intro comments (Get_ObsFcstAna_sums.py)
gmao-rreichle Jun 24, 2025
387834b
revised computation of plotting grid spacing; removed obsolete functi…
gmao-rreichle Jun 24, 2025
abdeace
renamed tile_to_latlon.py -> tile_to_latlongrid.py for clarity
gmao-rreichle Jun 24, 2025
693ff65
add tile2grid.py; revised computation of spatial avg of temporal stat…
gmao-rreichle Jun 24, 2025
b4db565
minor fixes to comments, variable names, and vertical alignment (post…
gmao-rreichle Jun 24, 2025
33f2fca
add missing return line and minor edits
gmao-qliu Jun 24, 2025
88739fa
change max to mean tile values for grid
gmao-qliu Jun 24, 2025
bc8e44b
reverse comment change
gmao-qliu Jun 24, 2025
f97f620
nodata_tol -> nodata_tol_frac
gmao-qliu Jun 24, 2025
e07721c
fix imports, minor modification
gmao-qliu Jun 24, 2025
351e0a0
minimal edits of comments; white-space changes (Plot_stats_maps.py, t…
gmao-rreichle Jun 24, 2025
a48ac51
correction for missing files
gmao-qliu Jun 25, 2025
6293a9f
change loop order
gmao-qliu Jun 25, 2025
34bd3e7
tg bug fix and typos
amfox37 Jun 25, 2025
b0b3ed1
quiet divide by nan
amfox37 Jun 25, 2025
145de6c
Merge branch 'develop' into feature/rreichle/postproc_ObsFcstAna_fixes
gmao-rreichle Jun 25, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

- Added optional SLURM "constraint".
- Added functionality to run on tile space of stretched cube-sphere grids.
- Added python package for post-processing ObsFcstAna output.
- Added (and later revised) python package for post-processing ObsFcstAna output.


### Changed
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,21 @@

"""
Sample script for post-processing GEOSldas ObsFcstAna output into data assimilation diagnostics.
First, compute and store monthly sums and sums of squares and cross-products of raw ObsFcstAna output.
Computes and stores monthly sums and sums of squares and cross-products of raw ObsFcstAna output.
Data assimilation diagnostics ("stats") such as the mean and std-dev of the observation-minus-forecast
residuals can then be diagnosed quickly from these intermediate "sums" files.
Sample script optionally computes and plots:
- Maps of long-term data assimilation diagnostics (see also Plot_stats_maps.py).
- Monthly time series of spatially averaged data assimilation diagnostics (see also Plot_stats_timeseries.py).
residuals can then be diagnosed quickly from these intermediate "sums" files. See Plot_stats_*.py.

Usage:
1. Edit "user_config.py" with experiments information.
2. Run this script as follows (on Discover):
$ module load python/GEOSpyD
$ ./Get_ObsFcstAna_stats.py
$ ./Get_ObsFcstAna_sums.py

# Background execution:
$ nohup ./Get_ObsFcstAna_stats.py > out.log &
$ nohup ./Get_ObsFcstAna_sums.py > out.log &

Authors: Q. Liu, R. Reichle, A. Fox
Last Modified: May 2025
Last Modified: June 2025
"""

import sys; sys.path.append('../../shared/python/')
Expand Down Expand Up @@ -64,33 +61,6 @@ def main():
# Compute and save monthly sums
postproc.save_monthly_sums()

# --------------------------------------------------------------------------------------
# Optionally compute long-term temporal/spatial statistics and create plots.
# The plotting scripts can also run standalone using the individual Plot_stats_*.py scripts,
# as long as the monthly sum files are available.

plot_maps = False
plot_timeseries = False

if plot_maps: # Compute long-term temporal stats and plot maps

stats_file = out_path + 'temporal_stats_'+exp_list[0]['exptag']+ '_'+start_time.strftime('%Y%m%d')+'_'+ \
(end_time+timedelta(days=-1)).strftime('%Y%m%d')+'.nc4'

# temporal_stats is a dictionary that contains all mean/variances fields for computing long-term O-F/O-A stats
# each field has the dimension [N_tile, N_species]

temporal_stats = postproc.calc_temporal_stats_from_sums(write_to_nc=True, fout_stats=stats_file)

# Example to plot some O-F maps
from Plot_stats_maps import plot_OmF_maps
plot_OmF_maps(postproc, temporal_stats, fig_path=out_path )

if plot_timeseries: # Compute spatially averaged stats and plot monthly time series of stats

from Plot_stats_timeseries import Plot_monthly_OmF_bars
Plot_monthly_OmF_bars(postproc, fig_path=out_path)

if __name__ == '__main__':
main()

Expand Down
Loading