110 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env seiscomp-python
 | 
						|
# -*- 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 seiscomp.core
 | 
						|
import seiscomp.datamodel
 | 
						|
import seiscomp.client
 | 
						|
import seiscomp.logging
 | 
						|
 | 
						|
 | 
						|
class SendOrigin(seiscomp.client.Application):
 | 
						|
    def __init__(self, argc, argv):
 | 
						|
        seiscomp.client.Application.__init__(self, argc, argv)
 | 
						|
        self.setDatabaseEnabled(False, False)
 | 
						|
        self.setMessagingEnabled(True)
 | 
						|
        self.setPrimaryMessagingGroup("GUI")
 | 
						|
 | 
						|
    def init(self):
 | 
						|
        if not seiscomp.client.Application.init(self):
 | 
						|
            return False
 | 
						|
 | 
						|
        try:
 | 
						|
            cstr = self.commandline().optionString("coord")
 | 
						|
            tstr = self.commandline().optionString("time")
 | 
						|
        except:
 | 
						|
            print(
 | 
						|
                "Must specify origin using '--coord lat,lon,dep --time time'",
 | 
						|
                file=sys.stderr,
 | 
						|
            )
 | 
						|
            return False
 | 
						|
 | 
						|
        self.origin = seiscomp.datamodel.Origin.Create()
 | 
						|
 | 
						|
        ci = seiscomp.datamodel.CreationInfo()
 | 
						|
        ci.setAgencyID(self.agencyID())
 | 
						|
        ci.setCreationTime(seiscomp.core.Time.GMT())
 | 
						|
        self.origin.setCreationInfo(ci)
 | 
						|
 | 
						|
        lat, lon, dep = list(map(float, cstr.split(",")))
 | 
						|
        self.origin.setLongitude(seiscomp.datamodel.RealQuantity(lon))
 | 
						|
        self.origin.setLatitude(seiscomp.datamodel.RealQuantity(lat))
 | 
						|
        self.origin.setDepth(seiscomp.datamodel.RealQuantity(dep))
 | 
						|
 | 
						|
        time = seiscomp.core.Time.FromString(tstr)
 | 
						|
        if time is None:
 | 
						|
            seiscomp.logging.error(f"Wrong time format: '{tstr}'")
 | 
						|
            return False
 | 
						|
 | 
						|
        self.origin.setTime(seiscomp.datamodel.TimeQuantity(time))
 | 
						|
 | 
						|
        return True
 | 
						|
 | 
						|
    def createCommandLineDescription(self):
 | 
						|
        try:
 | 
						|
            self.commandline().addGroup("Parameters")
 | 
						|
            self.commandline().addStringOption(
 | 
						|
                "Parameters", "coord", "Latitude,longitude,depth of origin"
 | 
						|
            )
 | 
						|
            self.commandline().addStringOption("Parameters", "time", "time of origin")
 | 
						|
        except:
 | 
						|
            seiscomp.logging.warning(f"caught unexpected error {sys.exc_info()}")
 | 
						|
 | 
						|
    def printUsage(self):
 | 
						|
        print(
 | 
						|
            """Usage:
 | 
						|
  scsendorigin [options]
 | 
						|
 | 
						|
Create an artificial origin and send to the messaging"""
 | 
						|
        )
 | 
						|
 | 
						|
        seiscomp.client.Application.printUsage(self)
 | 
						|
 | 
						|
        print(
 | 
						|
            """Examples:
 | 
						|
Send an artificial origin with hypocenter parameters to the messaging
 | 
						|
  scsendorigin --time "2022-05-01 10:00:00" --coord 52,12,10
 | 
						|
"""
 | 
						|
        )
 | 
						|
 | 
						|
    def run(self):
 | 
						|
        msg = seiscomp.datamodel.ArtificialOriginMessage(self.origin)
 | 
						|
        self.connection().send(msg)
 | 
						|
        seiscomp.logging.debug(
 | 
						|
            f"""Origin sent with
 | 
						|
  lat:   {self.origin.latitude().value()}
 | 
						|
  lon:   {self.origin.longitude().value()}
 | 
						|
  depth: {self.origin.depth().value()}
 | 
						|
  time:  {self.origin.time().value().iso()}"""
 | 
						|
        )
 | 
						|
 | 
						|
        return True
 | 
						|
 | 
						|
 | 
						|
app = SendOrigin(len(sys.argv), sys.argv)
 | 
						|
# app.setName("scsendorigin")
 | 
						|
app.setMessagingUsername("scsendorg")
 | 
						|
sys.exit(app())
 |