From 4485a08152c6f1a185041252e3c180737b875bc8 Mon Sep 17 00:00:00 2001 From: Bruce Flynn <brucef@ssec.wisc.edu> Date: Thu, 12 Dec 2019 16:09:00 -0600 Subject: [PATCH] rdrmerge filter packets before start-of-mission --- edosl0util/cli/rdrmerge.py | 10 +++++++++- edosl0util/rdrgen.py | 18 +++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/edosl0util/cli/rdrmerge.py b/edosl0util/cli/rdrmerge.py index 575b788..9f7bfbc 100644 --- a/edosl0util/cli/rdrmerge.py +++ b/edosl0util/cli/rdrmerge.py @@ -7,7 +7,7 @@ from os.path import basename, join from tempfile import mkdtemp from ..jpssrdr import atms_sci_to_l0, cris_sci_to_l0, spacecraft_to_l0, viirs_sci_to_l0 -from ..rdrgen import build_rdr, filter_group_orphans, iter_pkts +from ..rdrgen import build_rdr, filter_group_orphans, filter_before, iter_pkts from ..stream import jpss_packet_stream from ..merge import merge from .util import configure_logging @@ -80,6 +80,12 @@ def extract_packets(sat, product, fpath, workdir="."): return outputs +start_of_mission = { + 'snpp': datetime(2011, 10, 28), + 'noaa20': datetime(2017, 11, 18), +} + + def merge_rdrs(inputs): to_process = rdrs_to_process(inputs) @@ -100,7 +106,9 @@ def merge_rdrs(inputs): with open(merged, 'wb') as fp: merge([jpss_packet_stream(open(p, 'rb')) for p in pds], fp) + # have to pre-filter "orphans" to prevent OrphanPacketError packets = filter_group_orphans(iter_pkts([merged])) + packets = filter_before(packets, before=start_of_mission[sat]) rdrs = build_rdr(sat, packets, aggr_type="full", output_dir=tmpdir) assert len(rdrs) == 1, "Should have gotten a single RDR" rdr = rdrs[0] diff --git a/edosl0util/rdrgen.py b/edosl0util/rdrgen.py index 947a875..5561356 100644 --- a/edosl0util/rdrgen.py +++ b/edosl0util/rdrgen.py @@ -50,6 +50,22 @@ def filter_group_orphans(s): yield p +def filter_before(s, before): + """ + Filter all packets that occur before ... before. + """ + s = iter(s) + p = next(s) + done = object() # sentinal to stop iter + while p.stamp is None or p.stamp < before: + p = next(s, done) + if p is done: + return # return early, iter is done + yield p + for p in s: + yield p + + def packets_to_rdrs(sat, l0_files, **kwargs): return build_rdr(sat, iter_pkts(l0_files), **kwargs) @@ -770,7 +786,7 @@ class ViirsGroupedPacketTimeTracker(object): idx = 20 else: idx = 10 - arr = np.frombuffer(pkt.bytes()[idx : idx + 8], "B") + arr = np.frombuffer(pkt.bytes()[idx : idx + 8], "B") # noqa days = arr[0:2].view(">u2")[0] ms = arr[2:6].view(">u4")[0] us = arr[6:8].view(">u2")[0] -- GitLab