Skip to content
Snippets Groups Projects
Commit 04d4e980 authored by Greg Quinn's avatar Greg Quinn
Browse files

Get aggregated RCRIS-RNSCA generation working

parent 4ad42674
No related branches found
No related tags found
No related merge requests found
This diff is collapsed.
......@@ -10,48 +10,6 @@ from edosl0util.jpssrdr import decode_rdr_blob
from edosl0util.stream import jpss_packet_stream
class TestViirsGroupedPacketTimeTracker(object):
def test_check_sequence_number(self):
group_size = 24
def run(nonfirst_seq_num, first_seq_num):
return m.ViirsGroupedPacketTimeTracker.check_sequence_number(
nonfirst_seq_num, first_seq_num, group_size)
first_seq = 4096
assert not run(4095, first_seq)
assert run(4097, first_seq)
assert run(4119, first_seq)
assert not run(4120, first_seq)
max_seq = 2**14
first_seq = max_seq - 16
assert not run(max_seq - 17, first_seq)
assert run(max_seq - 15, first_seq)
assert run(max_seq - 1, first_seq)
assert run(0, first_seq)
assert run(7, first_seq)
assert not run(8, first_seq)
def test_get_viirs_iet(self):
def run(pkt):
return m.iet_to_datetime(m.ViirsGroupedPacketTimeTracker.get_viirs_iet(pkt))
with open(self.l0_path) as l0_file:
stream = jpss_packet_stream(l0_file)
standalone_pkt = next(p for p in stream if p.is_standalone())
first_pkt = next(p for p in stream if p.is_first())
nonfirst_pkt = next(p for p in stream if p.is_continuing())
# expected values haven't been independently verified, just looked at
# to see that they at least make sense
assert run(standalone_pkt) == datetime(2017, 9, 27, 13, 54, 1, 727765)
assert run(first_pkt) == datetime(2017, 9, 27, 13, 54, 1, 746898)
assert run(nonfirst_pkt) == datetime(2017, 9, 27, 13, 54, 1, 748328)
l0_file = 'P1570826VIIRSSCIENCE6T17270135400001.PDS'
l0_path = os.path.join(os.path.dirname(__file__), l0_file)
def test_can_reproduce_rdr_from_class():
class_rdr_file = 'RNSCA_npp_d20170912_t0001170_e0001370_b30441_c20170913220340173580_nobu_ops.h5'
class_rdr_path = os.path.join(os.path.dirname(__file__), class_rdr_file)
......@@ -66,50 +24,102 @@ def test_can_reproduce_rdr_from_class():
pkt_buf = class_blob[ini:fin]
# generate new RDR from packets, injecting matching metadata from CLASS file
blob = m.build_rdr_blob('snpp', jpss_packet_stream(StringIO(pkt_buf.tobytes())))
rdr_type = m.SpacecraftDiaryRdrType
gran_iet = 1883865714000000
aggr_level = 1
pkt_stream = jpss_packet_stream(StringIO(pkt_buf.tobytes()))
blob = m.build_rdr_blob('snpp', pkt_stream, rdr_type, gran_iet)
tmp_dir = '/tmp'
file_name = m.write_rdr(
'snpp', blob, tmp_dir,
writer = m.RdrWriter(
'snpp', [rdr_type], gran_iet, aggr_level, tmp_dir,
distributor='arch', origin='nob-', domain='ops',
creation_time=datetime(2017, 9, 13, 22, 3, 40, 173580),
gran_creation_time=datetime(2017, 9, 12, 1, 37, 43, 474383),
orbit_num=30441, software_ver='I2.0.03.00')
writer.write_granule(rdr_type, gran_iet, blob,
creation_time=datetime(2017, 9, 12, 1, 37, 43, 474383))
writer.write_aggregate(rdr_type, gran_iet, aggr_level)
writer.close()
# file names should be identical
assert file_name == class_rdr_file
assert writer.file_name == class_rdr_file
# use h5diff to verify files match. -p option is needed to allow some slop
# in comparing N_Percent_Missing_Data
p = subprocess.Popen(
['h5diff', '-c', '-p', '1e-6', class_rdr_path, os.path.join(tmp_dir, file_name)],
['h5diff', '-c', '-p', '1e-6',
class_rdr_path, os.path.join(tmp_dir, writer.file_name)],
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
assert p.communicate()[0] == ''
assert p.returncode == 0
class TestGranulation(object):
def test_calc_iet_granule(self):
def run(t):
return m.calc_iet_granule(self.snpp_base_time, self.cris_gran_len, t)
gran = 1880240293174000
"""Test granule time computations using IETs from IDPS CrIS granules"""
def test_get_granule_start(self):
gran = 1880240293174000 # some actual CrIS granule times
prev_gran = 1880240261177000
next_gran = 1880240325171000
def run(t):
return m.get_granule_start('snpp', self.cris_gran_len, t)
assert run(gran) == gran
assert run(gran + 1) == gran
assert run(gran - 1) == prev_gran
assert run(gran + self.cris_gran_len) == next_gran
def test_calc_iet_aggregate(self):
grans_per_aggr = 15
def run(t):
return m.calc_iet_aggregate(
self.snpp_base_time, self.cris_gran_len, grans_per_aggr, t)
def test_get_aggregate_start(self):
aggr = 1880240037198000
aggr_len = grans_per_aggr * self.cris_gran_len
aggr_level = 15
def run(t):
return m.get_aggregate_start('snpp', self.cris_gran_len, aggr_level, t)
aggr_len = aggr_level * self.cris_gran_len
assert run(aggr - 1) == aggr - aggr_len
assert run(aggr) == aggr
assert run(aggr + aggr_len - 1) == aggr
assert run(aggr + aggr_len) == aggr + aggr_len
snpp_base_time = 1698019234000000 # CDFCB vol I "Time of First Ascending Node" table
cris_gran_len = 31997000
class TestViirsGroupedPacketTimeTracker(object):
def test_check_sequence_number(self):
group_size = 24
def run(nonfirst_seq_num, first_seq_num):
return m.ViirsGroupedPacketTimeTracker.check_sequence_number(
nonfirst_seq_num, first_seq_num, group_size)
first_seq = 4096
assert not run(4095, first_seq)
assert run(4097, first_seq)
assert run(4119, first_seq)
assert not run(4120, first_seq)
max_seq = 2**14
first_seq = max_seq - 16
assert not run(max_seq - 17, first_seq)
assert run(max_seq - 15, first_seq)
assert run(max_seq - 1, first_seq)
assert run(0, first_seq)
assert run(7, first_seq)
assert not run(8, first_seq)
def test_get_viirs_iet(self):
def run(pkt):
return m.iet_to_datetime(m.ViirsGroupedPacketTimeTracker.get_viirs_iet(pkt))
with open(self.l0_path) as l0_file:
stream = jpss_packet_stream(l0_file)
standalone_pkt = next(p for p in stream if p.is_standalone())
first_pkt = next(p for p in stream if p.is_first())
nonfirst_pkt = next(p for p in stream if p.is_continuing())
# expected values haven't been independently verified, just looked at
# to see that they at least make sense
assert run(standalone_pkt) == datetime(2017, 9, 27, 13, 54, 1, 727765)
assert run(first_pkt) == datetime(2017, 9, 27, 13, 54, 1, 746898)
assert run(nonfirst_pkt) == datetime(2017, 9, 27, 13, 54, 1, 748328)
l0_file = 'P1570826VIIRSSCIENCE6T17270135400001.PDS'
l0_path = os.path.join(os.path.dirname(__file__), l0_file)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment