Install SeisComP and scanloc ARM64 nightly packages
This commit is contained in:
144
bin/scmsdemux
Executable file
144
bin/scmsdemux
Executable file
@ -0,0 +1,144 @@
|
||||
#!/usr/bin/env seiscomp-python
|
||||
|
||||
############################################################################
|
||||
# Copyright (C) gempa GmbH #
|
||||
# All rights reserved. #
|
||||
# Contact: gempa GmbH (seiscomp-dev@gempa.de) #
|
||||
# #
|
||||
# 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. #
|
||||
# #
|
||||
# Other Usage #
|
||||
# Alternatively, this file may be used in accordance with the terms and #
|
||||
# conditions contained in a signed written agreement between you and #
|
||||
# gempa GmbH. #
|
||||
############################################################################
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
from getopt import gnu_getopt, GetoptError
|
||||
from seiscomp import mseedlite as mseed
|
||||
|
||||
|
||||
def usage():
|
||||
print(
|
||||
f"""Usage:
|
||||
{os.path.basename(__file__)} source
|
||||
|
||||
Demultiplex all miniSEED records found in the given source by stream code writing them
|
||||
into separate new files. The source can be files or stdin. One file per stream is
|
||||
generated. File names are derived from stream codes and the begin time of the records.
|
||||
|
||||
Verbosity:
|
||||
-h, --help Display this help message.
|
||||
-v, --verbose Verbose mode.
|
||||
|
||||
Examples:
|
||||
Demultiplex the miniSEED records contained in data.mseed and additionally print the
|
||||
names of created files to stderr
|
||||
{os.path.basename(__file__)} -v data.mseed
|
||||
|
||||
Demultiplex the miniSEED records received from stdin
|
||||
scmssort -u -E data.mseed | {os.path.basename(__file__)} -
|
||||
"""
|
||||
)
|
||||
|
||||
|
||||
def main():
|
||||
try:
|
||||
opts, args = gnu_getopt(
|
||||
sys.argv[1:],
|
||||
"hv",
|
||||
[
|
||||
"help",
|
||||
"verbose",
|
||||
],
|
||||
)
|
||||
except GetoptError:
|
||||
print(
|
||||
f"{os.path.basename(__file__)}: Unknown option",
|
||||
file=sys.stderr,
|
||||
)
|
||||
usage()
|
||||
return False
|
||||
|
||||
verbosity = False
|
||||
for flag, arg in opts:
|
||||
if flag in ("-h", "--help"):
|
||||
usage()
|
||||
return True
|
||||
|
||||
if flag in ("-v", "--verbose"):
|
||||
verbosity = True
|
||||
|
||||
inFile = sys.stdin.buffer
|
||||
try:
|
||||
if len(args[0]) > 0:
|
||||
openFiles = {}
|
||||
except Exception:
|
||||
print(
|
||||
f"{os.path.basename(__file__)}: Missing source",
|
||||
file=sys.stderr,
|
||||
)
|
||||
usage()
|
||||
sys.exit(1)
|
||||
|
||||
if len(args) == 1:
|
||||
if args[0] != "-":
|
||||
try:
|
||||
inFile = open(args[0], "rb")
|
||||
except IOError as e:
|
||||
print(
|
||||
f"Could not open input file '{args[0]}' for reading: {e}",
|
||||
file=sys.stderr,
|
||||
)
|
||||
return False
|
||||
else:
|
||||
print(
|
||||
"Waiting for miniSEED records on stdin. Use Ctrl + C to interrupt.",
|
||||
file=sys.stderr,
|
||||
)
|
||||
elif len(args) != 0:
|
||||
usage()
|
||||
sys.exit(1)
|
||||
|
||||
try:
|
||||
for rec in mseed.Input(inFile):
|
||||
oName = "%s.%s.%s.%s" % (rec.sta, rec.net, rec.loc, rec.cha)
|
||||
|
||||
if oName not in openFiles:
|
||||
postfix = ".D.%04d.%03d.%02d%02d" % (
|
||||
rec.begin_time.year,
|
||||
rec.begin_time.timetuple()[7],
|
||||
rec.begin_time.hour,
|
||||
rec.begin_time.minute,
|
||||
)
|
||||
|
||||
openFiles[oName] = open(oName + postfix, "ab")
|
||||
|
||||
oFile = openFiles[oName]
|
||||
oFile.write(rec.header + rec.data)
|
||||
|
||||
if verbosity:
|
||||
print("Generated output files:", file=sys.stderr)
|
||||
|
||||
for oName in openFiles:
|
||||
if verbosity:
|
||||
print(f" {oName}", file=sys.stderr)
|
||||
|
||||
openFiles[oName].close()
|
||||
|
||||
except KeyboardInterrupt:
|
||||
return True
|
||||
|
||||
return True
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Reference in New Issue
Block a user