EdosL0Util
Tools for mangling EDOS L0 PDS files.
Features:
* API for streaming packets
* CLI tools for:
- merging multiple PDS files
- splitting pds into X minute files
- truncating files to specified time range
- inspecting PDS info
* Dumping JPSS H5 RDRs to L0 PDS files
Packet streaming
To obtain a simple stream of packets, with support for secondary header
parsing use the PacketStream
class as an iterator.
>>> from edosl0util.stream import PacketStream
>>> stream = PacketStream(open('P1570826VIIRSSCIENCEAS15286023813501.PDS'))
>>> stream.next()
<Packet apid=826 seqid=13072 stamp=2015-10-13 00:22:04.042798>
>>> packets = list(stream)
>>> first, last, info = stream.info()
>>> print("First:{}\nLast:{}".format(first, last))
First:2015-10-13 00:22:04.042798
Last:2015-10-13 02:04:58.107582
>>> print info
defaultdict(<function edosl0util.stream.<lambda>>,
{800: {'count': 32351, 'last_seqid': 16043, 'num_missing': 0},
801: {'count': 32351, 'last_seqid': 16043, 'num_missing': 0},
802: {'count': 32351, 'last_seqid': 16043, 'num_missing': 0},
803: {'count': 32351, 'last_seqid': 16043, 'num_missing': 0},
804: {'count': 32351, 'last_seqid': 16043, 'num_missing': 0},
805: {'count': 32351, 'last_seqid': 16043, 'num_missing': 0},
806: {'count': 59005, 'last_seqid': 2684, 'num_missing': 0},
807: {'count': 32351, 'last_seqid': 16043, 'num_missing': 0},
808: {'count': 59007, 'last_seqid': 2686, 'num_missing': 0},
809: {'count': 59007, 'last_seqid': 2686, 'num_missing': 0},
810: {'count': 32351, 'last_seqid': 16043, 'num_missing': 0},
811: {'count': 59007, 'last_seqid': 2686, 'num_missing': 0},
812: {'count': 59007, 'last_seqid': 2686, 'num_missing': 0},
813: {'count': 114543, 'last_seqid': 5214, 'num_missing': 0},
814: {'count': 59007, 'last_seqid': 2686, 'num_missing': 0},
815: {'count': 58994, 'last_seqid': 2673, 'num_missing': 0},
816: {'count': 58990, 'last_seqid': 2669, 'num_missing': 0},
817: {'count': 114510, 'last_seqid': 5181, 'num_missing': 0},
818: {'count': 62766, 'last_seqid': 11834, 'num_missing': 0},
819: {'count': 62766, 'last_seqid': 11834, 'num_missing': 0},
820: {'count': 62766, 'last_seqid': 11834, 'num_missing': 0},
821: {'count': 59007, 'last_seqid': 2686, 'num_missing': 0},
825: {'count': 83280, 'last_seqid': 3768, 'num_missing': 0},
826: {'count': 3471, 'last_seqid': 158, 'num_missing': 0}})
To handle PacketTooShort
and NonSequentialSeqId
errors you have to
iterate manually:
>>> from edosl0util.stream import PacketStream
>>> stream = PacketStream(open('P1570826VIIRSSCIENCEAS15286023813501.PDS'))
>>> while True:
...: try:
...: packet = stream.next()
...: print(packet)
...: except PacketTooShort as err:
...: print("Corrupt packet stream: {:s}".format(packet))
...: break
...: except NonConsecutiveSeqId as err:
...: print("Missing packet: {:s}".format(err))
...: except StopIteration:
...: break
Command Line Tools
There are command line tools for merging, splitting, truncating and inspecting L0 PDS files.
* edosl0merge
* edosl0split
* edosl0trunc
* edosl0info
* rdr2l0
If you have quesions or comments related to this software contac brucef@ssec.wisc.edu.