diff --git a/scripts/viirs_pkt_size.py b/scripts/viirs_pkt_size.py new file mode 100755 index 0000000000000000000000000000000000000000..80251d18077002e9aafd2be777ee6eaf25fefcea --- /dev/null +++ b/scripts/viirs_pkt_size.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python +import numpy as np +import netCDF4 +from edosl0util import jpssrdr +from edosl0util.headers import GROUP_CONTINUING, GROUP_LAST + + +def write_netcdf_file(destpath, scans, sizes): + dataset = netCDF4.Dataset(destpath, 'w') + dataset.createDimension('scan', size=len(scans)) + dataset.createDimension('apid', size=len(sizes)) + dataset.createVariable('time', 'u8', ('scan',)) + dataset.createVariable('size', 'u8', ('apid', 'scan',)) + dataset.createVariable('apid', 'u2', ('apid',)) + + dataset['time'][:] = np.array(list(scans)) + apids = sorted(sizes.keys()) + # assert len(apids) == 16, "Expected 16 apids, got {}".format(apids) + dat = np.array([sizes[a] for a in apids]) + dataset['size'][:] = dat + dataset['apid'][:] = np.array(apids) + dataset.close() + + +def read_data_from_rdr(filepath): + # XXX: just get the VIIRS Science RDR for now + rdr = jpssrdr.rdr_datasets(filepath)['science'][0] + scans = set() + sizes = {} + for tracker, packet in rdr.packets(): + apid = packet.apid + scan = tracker.obs_time + size = tracker.size + + if apid not in sizes: + sizes[apid] = [] + + # Sum up sizes for packet groups + if packet.sequence_grouping in (GROUP_CONTINUING, GROUP_LAST): + sizes[apid][-1] += size + else: + sizes[apid].append(size) + + scans.add(scan) + + return scans, sizes + + +if __name__ == '__main__': + import argparse + parser = argparse.ArgumentParser() + parser.add_argument('viirs_rdr') + args = parser.parse_args() + destpath = args.viirs_rdr + '.size.nc' + scans, sizes = read_data_from_rdr(args.viirs_rdr) + write_netcdf_file(destpath, scans, sizes)