pyDARTdiags is a Python library for obsevation space diagnostics for the Data Assimilation Research Testbed (DART).
pyDARTdiags is under initial development, so please use caution. The MATLAB observation space diagnostics are available through DART.
pyDARTdiags can be installed through pip: https://pypi.org/project/pydartdiags/
Documenation : https://ncar.github.io/pyDARTdiags/
We recommend installing pydartdiags in a virtual enviroment:
python3 -m venv dartdiags
source dartdiags/bin/activate
pip install pydartdiags
For developers of pyDARTdiags, we recommend installing pyDARTdiags as a local project in “editable” mode in your virtual environment:
git clone https://github.com/NCAR/pyDARTdiags
python -m pip install -e pyDARTdiags
from pydartdiags.obs_sequence import obs_sequence as obsq
from pydartdiags.plots import plots
obs_seq = obsq.obs_sequence('obs_seq.final.ascii')
obs_seq.df.head()
obs_num | observation | prior_ensemble_mean | prior_ensemble_spread | prior_ensemble_member_1 | prior_ensemble_member_2 | prior_ensemble_member_3 | prior_ensemble_member_4 | prior_ensemble_member_5 | prior_ensemble_member_6 | ... | latitude | vertical | vert_unit | type | seconds | days | time | obs_err_var | bias | sq_err | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 230.16 | 231.310652 | 0.405191 | 231.304725 | 231.562874 | 231.333915 | 231.297690 | 232.081416 | 231.051063 | ... | 0.012188 | 23950.0 | pressure (Pa) | ACARS_TEMPERATURE | 75603 | 153005 | 2019-12-01 21:00:03 | 1.00 | 1.150652 | 1.324001 |
1 | 2 | 18.40 | 15.720527 | 0.630827 | 14.217207 | 15.558196 | 15.805599 | 16.594644 | 14.877743 | 16.334438 | ... | 0.012188 | 23950.0 | pressure (Pa) | ACARS_U_WIND_COMPONENT | 75603 | 153005 | 2019-12-01 21:00:03 | 6.25 | -2.679473 | 7.179578 |
2 | 3 | 1.60 | -4.932073 | 0.825899 | -5.270562 | -5.955998 | -4.209766 | -5.105016 | -4.669405 | -4.365305 | ... | 0.012188 | 23950.0 | pressure (Pa) | ACARS_V_WIND_COMPONENT | 75603 | 153005 | 2019-12-01 21:00:03 | 6.25 | -6.532073 | 42.667980 |
3 | 4 | 264.16 | 264.060532 | 0.035584 | 264.107192 | 264.097270 | 264.073212 | 264.047718 | 264.074140 | 264.019895 | ... | 0.010389 | 56260.0 | pressure (Pa) | ACARS_TEMPERATURE | 75603 | 153005 | 2019-12-01 21:00:03 | 1.00 | -0.099468 | 0.009894 |
4 | 5 | 11.60 | 10.134115 | 0.063183 | 10.067956 | 10.078798 | 10.120263 | 10.084885 | 10.135112 | 10.140610 | ... | 0.010389 | 56260.0 | pressure (Pa) | ACARS_U_WIND_COMPONENT | 75603 | 153005 | 2019-12-01 21:00:03 | 6.25 | -1.465885 | 2.148818 |
5 rows × 97 columns
Find the numeber of assimilated (used) observations vs. possible observations by type
obsq.possible_vs_used(obs_seq.df)
type | possible | used | |
---|---|---|---|
0 | ACARS_TEMPERATURE | 175429 | 128040 |
1 | ACARS_U_WIND_COMPONENT | 176120 | 126946 |
2 | ACARS_V_WIND_COMPONENT | 176120 | 127834 |
3 | AIRCRAFT_TEMPERATURE | 21335 | 13663 |
4 | AIRCRAFT_U_WIND_COMPONENT | 21044 | 13694 |
5 | AIRCRAFT_V_WIND_COMPONENT | 21044 | 13642 |
6 | AIRS_SPECIFIC_HUMIDITY | 6781 | 0 |
7 | AIRS_TEMPERATURE | 19583 | 7901 |
8 | GPSRO_REFRACTIVITY | 81404 | 54626 |
9 | LAND_SFC_ALTIMETER | 21922 | 0 |
10 | MARINE_SFC_ALTIMETER | 9987 | 0 |
11 | MARINE_SFC_SPECIFIC_HUMIDITY | 4196 | 0 |
12 | MARINE_SFC_TEMPERATURE | 8646 | 0 |
13 | MARINE_SFC_U_WIND_COMPONENT | 8207 | 0 |
14 | MARINE_SFC_V_WIND_COMPONENT | 8207 | 0 |
15 | RADIOSONDE_SPECIFIC_HUMIDITY | 14272 | 0 |
16 | RADIOSONDE_SURFACE_ALTIMETER | 601 | 0 |
17 | RADIOSONDE_TEMPERATURE | 29275 | 22228 |
18 | RADIOSONDE_U_WIND_COMPONENT | 36214 | 27832 |
19 | RADIOSONDE_V_WIND_COMPONENT | 36214 | 27975 |
20 | SAT_U_WIND_COMPONENT | 107212 | 82507 |
21 | SAT_V_WIND_COMPONENT | 107212 | 82647 |
- Select only observations that were assimliated (QC === 0).
- plot the rank histogram
df_qc0 = obsq.select_by_dart_qc(obs_seq.df, 0)
plots.plot_rank_histogram(df_qc0)
- Chose levels
- Select only observations that were assimliated (QC === 0).
- plot the profiles
hPalevels = [0.0, 100.0, 150.0, 200.0, 250.0, 300.0, 400.0, 500.0, 700, 850, 925, 1000]# float("inf")] # Pa?
plevels = [i * 100 for i in hPalevels]
df_qc0 = obsq.select_by_dart_qc(obs_seq.df, 0) # only qc 0
df_profile, figrmse, figbias = plots.plot_profile(df_qc0, plevels)
Contributions are welcome! If you have a feature request, bug report, or a suggestion, please open an issue on our GitHub repository.
pyDARTdiags is released under the Apache License 2.0. For more details, see the LICENSE file in the root directory of this source tree or visit Apache License 2.0.