def get_dx_timestamp(name): """Converts a dx-timestamp (as part of a dx-product filename) to a python datetime.object. Parameters ---------- name : string representing a DWD product name Returns ------- time : timezone-aware datetime.datetime object """ return _get_timestamp_from_filename(name).replace(tzinfo=util.UTC())
def parse_dx_header(header): """Internal function to retrieve and interpret the ASCII header of a DWD DX product file. Parameters ---------- header : string string representation of DX header """ # empty container out = {} # RADOLAN product type def out["producttype"] = header[0:2] # time stamp from file header as Python datetime object out["datetime"] = dt.datetime.strptime( header[2:8] + header[13:17] + "00", "%d%H%M%m%y%S" ) # Make it aware of its time zone (UTC) out["datetime"] = out["datetime"].replace(tzinfo=util.UTC()) # radar location ID (always 10000 for composites) out["radarid"] = header[8:13] head = get_radolan_header_token_pos(header, mode="dx") # iterate over token and fill output dict accordingly for k, v in head.items(): if v: if k == "BY": out["bytes"] = int(header[v[0] : v[1]]) if k == "VS": out["version"] = header[v[0] : v[1]] if k == "CO": out["cluttermap"] = int(header[v[0] : v[1]]) if k == "CD": out["dopplerfilter"] = int(header[v[0] : v[1]]) if k == "CS": out["statfilter"] = int(header[v[0] : v[1]]) if k == "EP": out["elevprofile"] = [ float(header[v[0] + 3 * i : v[0] + 3 * (i + 1)]) for i in range(8) ] if k == "MS": try: cnt = int(header[v[0] : v[0] + 3]) out["message"] = header[v[0] + 3 : v[0] + 3 + cnt] except ValueError: pass return out
def parse_dx_header(header): """Internal function to retrieve and interpret the ASCII header of a DWD DX product file. Parameters ---------- header : string string representation of DX header """ # empty container out = {} # RADOLAN product type def out["producttype"] = header[0:2] # time stamp from file header as Python datetime object out["datetime"] = dt.datetime.strptime( header[2:8] + header[13:17] + "00", "%d%H%M%m%y%S" ) # Make it aware of its time zone (UTC) out["datetime"] = out["datetime"].replace(tzinfo=util.UTC()) # radar location ID (always 10000 for composites) out["radarid"] = header[8:13] pos_by = header.find("BY") pos_vs = header.find("VS") pos_co = header.find("CO") pos_cd = header.find("CD") pos_cs = header.find("CS") pos_ep = header.find("EP") pos_ms = header.find("MS") out["bytes"] = int(header[pos_by + 2 : pos_by + 7]) out["version"] = header[pos_vs + 2 : pos_vs + 4] out["cluttermap"] = int(header[pos_co + 2 : pos_co + 3]) out["dopplerfilter"] = int(header[pos_cd + 2 : pos_cd + 3]) out["statfilter"] = int(header[pos_cs + 2 : pos_cs + 3]) out["elevprofile"] = [ float(header[pos_ep + 2 + 3 * i : pos_ep + 2 + 3 * (i + 1)]) for i in range(8) ] # noqa out["message"] = header[ pos_ms + 5 : pos_ms + 5 + int(header[pos_ms + 2 : pos_ms + 5]) ] # noqa return out