#!/usr/bin/env python3 ############################################################################ # Copyright (C) 2024 by gempa GmbH # # # # All Rights Reserved. # # # # NOTICE: All information contained herein is, and remains # # the property of gempa GmbH and its suppliers, if any. The intellectual # # and technical concepts contained herein are proprietary to gempa GmbH # # and its suppliers. # # Dissemination of this information or reproduction of this material # # is strictly forbidden unless prior written permission is obtained # # from gempa GmbH. # ############################################################################ import os from seiscomp import logging class StreamMapItem: def __init__(self): self.networkCode = "" self.stationCode = "" self.locationCode = "" self.stationID = "" self.baseCode = None self.folder = None self.startTime = None self.endTime = None class StreamMap: # ------------------------------------------------------------------------- def __init__(self): self.items = {} # ------------------------------------------------------------------------- def get(self, streamID): return self.items.get(streamID) # ------------------------------------------------------------------------- def read(self, filename): try: f = open(filename, "r", encoding="UTF-8") except Exception as err: logging.error(f"Stream map: Could not open file: {err}") return False try: lineNo = -1 for line in f: lineNo += 1 line = line.strip() if line.startswith("#"): continue if len(line) == 0: continue folder = line.strip() toks = folder.split("_") tokCount = len(toks) if tokCount != 3: logging.error( f"Stream map: Invalid stream ID in line {lineNo}" ) continue item = StreamMapItem() item.networkCode = toks[0] item.stationCode = toks[1] item.locationCode = toks[2] item.baseCode = str(int(item.networkCode[0:3])) item.folder = folder item.stationID = ( item.networkCode + "." + item.stationCode + "." + item.locationCode ) self.items[item.stationID] = item except IOError as err: logging.error( f"Stream map: Could not read stream map from file: {err}" ) finally: f.close() if len(self.items) == 0: logging.info("No streams configured: Nothing todo") return False logging.info("Configured stations") for k, _v in self.items.items(): logging.info(f" + {k}") logging.info("End") return True # ------------------------------------------------------------------------- def write(self, filename): path = os.path.dirname(filename) if not path: return False if not os.path.exists(path): try: os.makedirs(path) except Exception as err: logging.error(f"Stream map: Could not create directory: {err}") return False try: with open(filename, "w", encoding="UTF-8") as f: for k, v in self.items.items(): f.write(f"{k} {v.startTime.iso()} {v.endTime.iso()}\n") except Exception as err: logging.error(f"Stream map: Could not open file: {err}") return False return True