"""Create a csv with some timetags - isotime - scet of header packet - scet of FPGA - scet of data packet """ from solar import * from CCSDS import CCSDS_reader import struct import csv normal = [] burst = [] snap = [] def isotime (t): return t.isoformat (timespec = "milliseconds") def timestamp (r): return r[0] + r[1]/65536.0 def SID_194 (packet): r = struct.unpack (">LH", packet.data[4:10]) record = [isotime (packet.dt), "NM", timestamp (packet.scet), timestamp (r)] normal.append (record) def SID_195 ( packet): if len (normal) > 0: normal [-1].append (timestamp (packet.scet)) def SID_203 (packet): r = struct.unpack (">LH", packet.data[4:10]) record = [isotime (packet.dt), "SNAP", timestamp (packet.scet), timestamp (r)] snap.append (record) def SID_204 (packet): if len (snap) > 0: snap[-1].append (timestamp (packet.scet)) def SID_209 (packet): r = struct.unpack (">LH", packet.data[4:10]) record = [isotime (packet.dt), "BM", timestamp (packet.scet), timestamp (r)] burst.append (record) def SID_210 (packet): if len (burst) > 0: burst[-1].append (timestamp (packet.scet)) func = { 194: SID_194, 195: SID_195, 203: SID_203, 204: SID_204, 209: SID_209, 210: SID_210 } def dump_csv (day, name, data): output_file = "%s.%s.csv" % (ymd (day), name) with open (output_file, "w") as out: writer = csv.writer (out, delimiter = ",") for item in data: if len (item) != 5: continue row = list (item[:5]) row.append (row [2] - row [3]) row.append (row [4] - row [2]) writer.writerow (row) print ("Generation", output_file) def compute_dt (day): global normal, burst, snap normal = [] burst = [] snap = [] filename = get_L0_filename (day, "swa-pas-tm", "bin") print ("Reading", filename) output_file = "%s.log" % ymd (day) with open (output_file, "w") as out: for packet in CCSDS_reader (filename): if packet.sid in func: print (packet, file = out) func [packet.sid](packet) dump_csv (day, "normal", normal) dump_csv (day, "snapshot", snap) dump_csv (day, "burst", burst) if __name__ == "__main__": from sys import exit, argv if len (argv) < 2: print (__doc__) exit (100) for str in argv [1:]: day = str_to_date (str) print ("Generation", day) compute_dt (day)