Skip to content
Snippets Groups Projects

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.