[seiscomp, scanloc] Install, add .gitignore

This commit is contained in:
2025-10-09 15:07:02 +02:00
commit 20f5301bb1
2848 changed files with 1315858 additions and 0 deletions

150
bin/optodas_inventory Executable file
View File

@ -0,0 +1,150 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
############################################################################
# Copyright (C) GFZ Potsdam #
# All rights reserved. #
# #
# GNU Affero General Public License Usage #
# This file may be used under the terms of the GNU Affero #
# Public License version 3.0 as published by the Free Software Foundation #
# and appearing in the file LICENSE included in the packaging of this #
# file. Please review the following information to ensure the GNU Affero #
# Public License version 3.0 requirements will be met: #
# https://www.gnu.org/licenses/agpl-3.0.html. #
############################################################################
import sys
import json
import datetime
import argparse
import zmq
import seiscomp.datamodel, seiscomp.core, seiscomp.io
VERSION = "0.1 (2024.066)"
def main():
parser = argparse.ArgumentParser()
parser.set_defaults(
address="tcp://localhost:3333",
sample_rate=100,
gain=1.0,
network="XX",
station="{channel:05d}",
location="",
channel="HSF"
)
parser.add_argument("--version",
action="version",
version="%(prog)s " + VERSION
)
parser.add_argument("-a", "--address",
help="ZeroMQ address (default %(default)s)"
)
parser.add_argument("-r", "--sample-rate",
type = int,
help = "sample rate (default %(default)s)"
)
parser.add_argument("-g", "--gain",
type=float,
help="gain (default %(default)s)"
)
parser.add_argument("-n", "--network",
help="network code (default %(default)s)"
)
parser.add_argument("-s", "--station",
help="station code template (default %(default)s)"
)
parser.add_argument("-l", "--location",
help="location code (default %(default)s)"
)
parser.add_argument("-c", "--channel",
help="channel code (default %(default)s)"
)
args = parser.parse_args()
sock = zmq.Context().socket(zmq.SUB)
sock.connect(args.address)
sock.setsockopt(zmq.SUBSCRIBE, b"")
header = json.loads(sock.recv().decode("utf-8"))
inv = seiscomp.datamodel.Inventory()
resp = seiscomp.datamodel.ResponsePAZ_Create()
resp.setType("A")
resp.setGain(args.gain * header["sensitivities"][0]["factor"] / header["dataScale"])
resp.setGainFrequency(0)
resp.setNormalizationFactor(1)
resp.setNormalizationFrequency(0)
resp.setNumberOfZeros(0)
resp.setNumberOfPoles(0)
inv.add(resp)
sensor = seiscomp.datamodel.Sensor_Create()
sensor.setName(header["instrument"])
sensor.setDescription(header["instrument"])
sensor.setUnit(header["sensitivities"][0]["unit"])
sensor.setResponse(resp.publicID())
inv.add(sensor)
datalogger = seiscomp.datamodel.Datalogger_Create()
datalogger.setDescription(header["instrument"])
datalogger.setGain(1)
datalogger.setMaxClockDrift(0)
deci = seiscomp.datamodel.Decimation()
deci.setSampleRateNumerator(args.sample_rate)
deci.setSampleRateDenominator(1)
datalogger.add(deci)
inv.add(datalogger)
net = seiscomp.datamodel.Network_Create()
net.setCode(args.network)
net.setDescription(header["experiment"])
net.setStart(seiscomp.core.Time.FromYearDay(datetime.datetime.utcnow().year, 1))
inv.add(net)
for roi in header["roiTable"]:
for c in range(roi["roiStart"], roi["roiEnd"] + 1, roi["roiDec"]):
sta = seiscomp.datamodel.Station_Create()
sta.setCode(eval("f'''" + args.station + "'''", {"channel": c}))
sta.setDescription("DAS channel %d" % c)
sta.setStart(net.start())
net.add(sta)
loc = seiscomp.datamodel.SensorLocation_Create()
loc.setCode(args.location)
loc.setStart(net.start())
sta.add(loc)
cha = seiscomp.datamodel.Stream_Create()
cha.setCode(args.channel)
cha.setStart(net.start())
cha.setGain(args.gain * header["sensitivities"][0]["factor"] / header["dataScale"])
cha.setGainUnit(header["sensitivities"][0]["unit"])
cha.setGainFrequency(0)
cha.setSensor(sensor.publicID())
cha.setDatalogger(datalogger.publicID())
loc.add(cha)
ar = seiscomp.io.XMLArchive()
ar.create("-")
ar.setFormattedOutput(True)
ar.writeObject(inv)
ar.close()
if __name__ == "__main__":
main()