tlist_diagnostics.py - pism - [fork] customized build of PISM, the parallel ice sheet model (tillflux branch) (HTM) git clone git://src.adamsgaard.dk/pism (DIR) Log (DIR) Files (DIR) Refs (DIR) LICENSE --- tlist_diagnostics.py (2381B) --- 1 #!/usr/bin/env python3 2 3 import json 4 import argparse 5 6 # file header 7 header = """.. -*- mode: rst -*- 8 9 .. DO NOT EDIT. This file was generated using list_diagnostics.py. 10 """ 11 12 # section start 13 section = """ 14 .. _{label}: 15 16 {title} 17 {underline}""" 18 19 # start of an entry corresponding to a diagnostic 20 entry_start = """ 21 #. ``{name}``""" 22 23 # template used when a diagnostic corresponds to one NetCDF variable 24 template_single = """ 25 :Units: {units} 26 :Description: {long_name}""" 27 28 # template used when a diagnostic corresponds to multiple NetCDF variables 29 template_many = """ 30 - ``{var_name}`` 31 32 :Units: {units} 33 :Description: {long_name}""" 34 35 # standard_name line 36 std_name = """{padding}:Standard name: ``{standard_name}``""" 37 38 # comment line 39 comment = """{padding}:Comment: {comment}""" 40 41 def print_diagnostics(title, label, diagnostics): 42 43 print(section.format(label=label, title=title, underline="-" * len(title))) 44 45 for name in sorted(diagnostics.keys()): 46 print(entry_start.format(name=name)) 47 48 if len(diagnostics[name]) == 1: 49 template = template_single 50 padding = " " * 3 51 else: 52 template = template_many 53 padding = " " * 5 54 55 for data in diagnostics[name]: 56 var_name, units, long_name, standard_name, comment_string = data 57 if len(units) == 0: 58 units = "---" 59 60 print(template.format(var_name=var_name, 61 units=units, 62 long_name=long_name)) 63 64 if len(standard_name) > 0: 65 print(std_name.format(padding=padding, standard_name=standard_name)) 66 67 if len(comment_string) > 0: 68 print(comment.format(padding=padding, comment=comment_string)) 69 70 if __name__ == "__main__": 71 72 parser = argparse.ArgumentParser() 73 parser.description = '''Generate an RST list documenting PISM's diagnostics.''' 74 parser.add_argument("FILE", nargs="*") 75 options = parser.parse_args() 76 77 spatial = {} 78 scalar = {} 79 for f in options.FILE: 80 with open(f) as f: 81 data = json.load(f) 82 spatial.update(data["spatial"]) 83 scalar.update(data["scalar"]) 84 85 print(header) 86 87 print_diagnostics("Spatially-variable fields", "sec-extra_vars", spatial) 88 print_diagnostics("Scalar time-series", "sec-ts_vars", scalar)