Source code for rstt.globals

"""This file defines something akin to setting some "global" variables. These
numbers come from `SLBMGlobals.h` and `CPPGlobals.h`. They will be accessible a
la `rstt.Sn` and `rstt.PWAVE`. There are also a couple helper functions to
convert between string and integer phases and attributes."""

################################################################################
# 
#  Copyright 2009 National Technology & Engineering Solutions of Sandia, LLC
#  (NTESS). Under the terms of Contract DE-NA0003525 with NTESS, the U.S.
#  Government retains certain rights in this software.
# 
#  BSD Open Source License
#  All rights reserved.
# 
#  Redistribution and use in source and binary forms, with or without
#  modification, are permitted provided that the following conditions are met:
# 
#    1. Redistributions of source code must retain the above copyright notice,
#       this list of conditions and the following disclaimer.
# 
#    2. Redistributions in binary form must reproduce the above copyright
#       notice, this list of conditions and the following disclaimer in the
#       documentation and/or other materials provided with the distribution.
# 
#    3. Neither the name of the copyright holder nor the names of its
#       contributors may be used to endorse or promote products derived from
#       this software without specific prior written permission.
# 
#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
#  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
#  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
#  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
#  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
#  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
#  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
#  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
#  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
#  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
#  POSSIBILITY OF SUCH DAMAGE.
# 
################################################################################

#-----------------------------------------
# initialization
#-----------------------------------------

# everything that will be imported when we invoke `from .globals import *`
__all__ = ["version", "DEG_PER_RAD", "RAD_PER_DEG", "PWAVE", "SWAVE", "WATER",
           "SEDIMENT1", "SEDIMENT2", "SEDIMENT3", "UPPER_CRUST",
           "MIDDLE_CRUST_N", "MIDDLE_CRUST_G", "LOWER_CRUST", "MANTLE",
           "NLAYERS", "Pn","Sn","Pg", "Lg", "TT","SH","AZ", "phases",
           "attributes"]

# import statements
from . import libslbmPyshell  # libslbmPyshell, imported from __init__.py
import math                   # math functions


#-----------------------------------------
# globals
#-----------------------------------------

# rstt version
version = libslbmPyshell.SlbmVersion

# some radian<-->degree conversions
DEG_PER_RAD = 180. / math.pi
RAD_PER_DEG = math.pi / 180.

# p and s-wave indices
PWAVE = libslbmPyshell.PWAVE
SWAVE = libslbmPyshell.SWAVE

# RSTT layers
WATER          = libslbmPyshell.WATER
SEDIMENT1      = libslbmPyshell.SEDIMENT1
SEDIMENT2      = libslbmPyshell.SEDIMENT2
SEDIMENT3      = libslbmPyshell.SEDIMENT3
UPPER_CRUST    = libslbmPyshell.UPPER_CRUST
MIDDLE_CRUST_N = libslbmPyshell.MIDDLE_CRUST_N
MIDDLE_CRUST_G = libslbmPyshell.MIDDLE_CRUST_G
LOWER_CRUST    = libslbmPyshell.LOWER_CRUST
MANTLE         = libslbmPyshell.MANTLE
NLAYERS        = libslbmPyshell.NLAYERS

# phases
Pn = libslbmPyshell.Pn
Sn = libslbmPyshell.Sn
Pg = libslbmPyshell.Pg
Lg = libslbmPyshell.Lg

# attributes
TT = libslbmPyshell.TT
SH = libslbmPyshell.SH
AZ = libslbmPyshell.AZ


#-----------------------------------------
# helper functions
#-----------------------------------------

[docs]def phases(x: str or int) -> int or str: """Convert RSTT phase strings to their respective numbers, and vice-versa. Examples -------- >>> rstt.phases('Sn') 1 >>> rstt.phases(1) 'Sn' Parameters ---------- x : str or int Either the phase number or string (case-insensitive) Returns ------- int or str Returns an `int` or `str`, opposite the argument type """ d = {'Pn': Pn, 'Sn': Sn, 'Pg': Pg, 'Lg': Lg} if isinstance(x, str): return [key.lower() for key in d].index(x.lower()) # get phase number from dict else: return list(d.keys())[x] # get phase string from list of strings
[docs]def attributes(x: str or int) -> int or str: """Convert RSTT attribute strings to their respective numbers, and vice-versa. Examples -------- >>> rstt.attributes('AZ') 2 >>> rstt.attributes(0) 'TT' Parameters ---------- x : str or int Either the phase number or string (case-insensitive) Returns ------- int or str Returns an `int` or `str`, opposite the argument type """ d = {'TT': TT, 'SH': SH, 'AZ': AZ} if isinstance(x, str): return [key.lower() for key in d].index(x.lower()) # get attrib number from dict else: return list(d.keys())[x] # get attrib string from list of strings