Source code for sitchlib.kal_decomposer
"""Decompose Kalibrate scans."""
from utility import Utility
[docs]class KalDecomposer(object):
"""Decompose Kalibrate scans."""
[docs] @classmethod
def decompose(cls, scan_document):
"""Decompose Kalibrate scans into channels.
The first item in each returned tuple indicates the scan doc type.
This module produces: "scan" (Kalibrate scan doc) and "kal_channel"
(Individual channel from Kalibrate scan)
Args:
scan_document (dict): Output from Kalibrate as interpreted by
`kalibrate` Python module.
"""
results_set = [("scan", scan_document)]
if scan_document["scan_results"] == []:
print("KalDecomposer: No results found in scan document...")
return results_set
else:
for result in scan_document["scan_results"]:
try:
msg = {}
msg["event_type"] = "kalibrate_channel"
msg["band"] = result["band"]
msg["power"] = Utility.str_to_float(result["power"])
msg["sample_rate"] = result["sample_rate"]
msg["final_freq"] = result["final_freq"]
msg["channel"] = result["channel"]
msg["gain"] = result["gain"]
msg["site_name"] = scan_document["site_name"]
msg["sensor_id"] = scan_document["sensor_id"]
msg["sensor_name"] = scan_document["sensor_name"]
msg["scan_start"] = scan_document["scan_start"]
msg["scan_finish"] = scan_document["scan_finish"]
msg["event_timestamp"] = scan_document["event_timestamp"]
msg["scan_program"] = scan_document["scan_program"]
msg["scanner_public_ip"] = scan_document["scanner_public_ip"] # NOQA
try:
msg["arfcn_int"] = int(result["channel"])
except:
print("KalDecomposer: Unable to convert ARFCN to int")
print(result["channel"])
msg["arfcn_int"] = 0
chan_enriched = ('kal_channel', msg)
results_set.append(chan_enriched)
except Exception as e:
print("KalDecomposer: Failed to parse Kalibrate message.")
print(e)
print(msg)
return results_set