Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Wrap meca #516

Merged
merged 77 commits into from
Aug 3, 2020
Merged
Show file tree
Hide file tree
Changes from 34 commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
e26ecd3
Initial commit to add meca for focal mechanism plotting
tjnewton Jul 11, 2020
0232450
Formatted and checked initial commit of add-meca
tjnewton Jul 11, 2020
922af45
Merge branch 'master' into add-meca
tjnewton Jul 11, 2020
28efc2d
Add meca to index.rst
liamtoney Jul 12, 2020
2fe87af
Added all GMT meca data conventions to pygmt meca
tjnewton Jul 12, 2020
cff30cc
Remove trailing whitespace
liamtoney Jul 12, 2020
b6339a1
Remove extra parens
liamtoney Jul 12, 2020
1239366
Remove convention warnings
liamtoney Jul 12, 2020
ffff36d
Use GMTError
liamtoney Jul 12, 2020
d9407e9
Import GMTError
liamtoney Jul 12, 2020
8536864
Merge branch 'master' into add-meca
liamtoney Jul 12, 2020
ed383d0
Remove comment
liamtoney Jul 12, 2020
f9ac410
Minor comment edits
liamtoney Jul 12, 2020
5f3bfae
Fix typo
liamtoney Jul 12, 2020
910e0f3
Line length reductions
liamtoney Jul 12, 2020
29c0738
Add alias autofill to docstring
liamtoney Jul 12, 2020
ae84de1
Docstring formatting
liamtoney Jul 12, 2020
78cde02
Remove example
liamtoney Jul 12, 2020
598efb6
Adjust line length in docstring
liamtoney Jul 12, 2020
cfef2d5
More line length stuff
liamtoney Jul 12, 2020
31a0973
Better convention string formatting
liamtoney Jul 12, 2020
100d4f1
Simplify docstring
liamtoney Jul 12, 2020
52cd24f
Implemented scale, updated doc string.
tjnewton Jul 12, 2020
97697aa
implemented plotting different moment tensor components and offset
tjnewton Jul 12, 2020
cfd1c21
More docstring edits
liamtoney Jul 12, 2020
da20e4f
Add full moment tensor test
liamtoney Jul 12, 2020
6dfcbe6
Format with black; add os
liamtoney Jul 12, 2020
de80acc
Add fmt baseline image for test
liamtoney Jul 12, 2020
acc6bf6
Rename test function
liamtoney Jul 12, 2020
8040b34
created meca example
tjnewton Jul 12, 2020
5352f9c
formatted meca example
tjnewton Jul 12, 2020
5782ee8
Update examples/gallery/plot/meca.py to style guidelines
tjnewton Jul 12, 2020
393d1c8
Update examples/gallery/plot/meca.py
tjnewton Jul 12, 2020
f57ff25
better doc string in meca example
tjnewton Jul 12, 2020
4314417
maybe fixed whitespace in meca.py?
tjnewton Jul 12, 2020
1d89c6f
Add function for testing the component argument for mt convention
liamtoney Jul 13, 2020
cd3ebca
Change location of C flag logic
liamtoney Jul 13, 2020
45b01de
Add text, which currently fails
liamtoney Jul 13, 2020
deaa1aa
Merge branch 'master' into add-meca
liamtoney Jul 13, 2020
ff164e6
Disable text kwarg for meca for now
liamtoney Jul 13, 2020
64fa78c
added ability to read in dicts of lists as spec
tjnewton Jul 19, 2020
641dd02
added pandas dataframe functionality
tjnewton Jul 19, 2020
a44e36a
deleted fancy MT tests
tjnewton Jul 19, 2020
d666290
update test_meca_spec_dictionary doc string
tjnewton Jul 19, 2020
916269b
added test for dict of lists
tjnewton Jul 19, 2020
9a5c390
added test for dataframe
tjnewton Jul 19, 2020
9d0cb4a
pushing the test files would help
tjnewton Jul 19, 2020
790864a
added test for 1d array and moment tensor convention
tjnewton Jul 21, 2020
b7a85bd
added 2d array test
tjnewton Jul 21, 2020
770e6b6
change variable format to data_format for style checks
tjnewton Jul 21, 2020
f94c04e
fixed isinstance calls for style
tjnewton Jul 21, 2020
ed83d01
camel casing test names
tjnewton Jul 21, 2020
5ea36ce
make format, make check
tjnewton Jul 21, 2020
c35bbbc
added test for file input
tjnewton Jul 21, 2020
355379d
fix PARAMS storage to dict and fix random bugs
tjnewton Jul 21, 2020
dbd936f
fixed naming convention and loop bug
tjnewton Jul 21, 2020
8defa26
make format & make check :)
tjnewton Jul 21, 2020
80af68a
docstring formatting
tjnewton Jul 24, 2020
eb3ce79
moar docstring formatting
tjnewton Jul 24, 2020
69f3919
rename param dict
tjnewton Jul 24, 2020
0b8fdfe
didn't pull webpage commits first
tjnewton Jul 24, 2020
6545cb1
an offering to the pylint gods
tjnewton Jul 24, 2020
e48c945
pylint dislikes capitalized constants in methods, hence now lowercase
tjnewton Jul 24, 2020
6b83b16
silence refactor-related pylint warnings
tjnewton Jul 24, 2020
2cad4a7
pylint: disable=too-many-statements
tjnewton Jul 24, 2020
7548740
changed lat and lon variables to latitude and longitude
tjnewton Jul 27, 2020
b5ab932
updated syntax in meca exam example
tjnewton Jul 27, 2020
f44bc5d
clarification that plot_longitude and plot_latitude are no longer req…
tjnewton Jul 27, 2020
3946493
added 1d array as input for latitude, longitude, depth, plot_longitud…
tjnewton Jul 27, 2020
08830e9
test for event location as arrays and lists
tjnewton Jul 27, 2020
a4c65ac
Merge branch 'master' into add-meca
tjnewton Jul 31, 2020
50f582c
changed test_meca_spec_dictionary to contain one focal mechanism
tjnewton Aug 3, 2020
b173b49
deleted focal_mechanisms.txt and changed test_meca to only use temp file
tjnewton Aug 3, 2020
b388ab2
more descriptive variable name in test_meca_spec_file
tjnewton Aug 3, 2020
bf47d8b
one more rename for good measure
tjnewton Aug 3, 2020
6c3af68
fix bug in test_meca_spec_file
tjnewton Aug 3, 2020
53424e9
pass object instead of file name string
tjnewton Aug 3, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions doc/api/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ Plotting data and laying out the map:
Figure.image
Figure.shift_origin
Figure.text
Figure.meca

Color palette table generation:

Expand Down
33 changes: 33 additions & 0 deletions examples/gallery/plot/meca.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
"""
Focal mechanisms
----------------

The :meth:`pygmt.Figure.meca` method can plot focal mechanisms, or beachballs.
We can specify the focal mechanism nodal planes or moment tensor components as
a dict using the ``spec`` argument (or they can be specified as a 1d or 2d array,
or within a specified file). The size of plotted beachballs can be specified
liamtoney marked this conversation as resolved.
Show resolved Hide resolved
using the ``scale`` argument.
"""

import pygmt

fig = pygmt.Figure()

# generate a basemap near Washington state showing coastlines, land, and water
fig.coast(
region=[-125, -122, 47, 49],
projection="M6c",
land="grey",
water="lightblue",
shorelines=True,
resolution="f",
frame="a",
)

# store focal mechanisms parameters in a dict
focal_mechanism = dict(strike=330, dip=30, rake=90, magnitude=3)

# pass the focal mechanism data to meca in addition to the scale and event location
fig.meca(focal_mechanism, scale="1c", lon=-124.3, lat=48.1, depth=12.0)
liamtoney marked this conversation as resolved.
Show resolved Hide resolved

fig.show()
212 changes: 211 additions & 1 deletion pygmt/base_plotting.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import pandas as pd

from .clib import Session
from .exceptions import GMTInvalidInput
from .exceptions import GMTError, GMTInvalidInput
from .helpers import (
build_arg_string,
dummy_context,
Expand Down Expand Up @@ -984,3 +984,213 @@ def text(

arg_str = " ".join([fname, build_arg_string(kwargs)])
lib.call_module("text", arg_str)

@fmt_docstring
liamtoney marked this conversation as resolved.
Show resolved Hide resolved
@use_alias(R="region", J="projection", B="frame", C="offset")
@kwargs_to_strings(R="sequence",)
def meca(
self,
spec,
scale,
lon=None,
lat=None,
tjnewton marked this conversation as resolved.
Show resolved Hide resolved
depth=None,
convention=None,
component="full",
plot_lon=None,
plot_lat=None,
text=None,
text_options="",
**kwargs,
):
"""
Plot focal mechanisms.

Full option list at :gmt-docs:`supplements/seis/meca.html`

{aliases}

Parameters
----------
spec: dict, 1D array, 2D array, or str
liamtoney marked this conversation as resolved.
Show resolved Hide resolved
Either a filename containing focal mechanism parameters as columns,
a 1- or 2-D array with the same, or a dictionary. If a filename or
array, `convention` is required so we know how to interpret the
columns/entries. If a dictionary, the following combinations of
keys are supported; these determine the convention.

- ``"aki"`` — *strike, dip, rake, magnitude*
- ``"gcmt"`` — *strike1, dip1, rake1, strike2, dip2, rake2,
mantissa, exponent*
- ``"mt"`` — *mrr, mtt, mff, mrt, mrf, mtf, exponent*
- ``"partial"`` — *strike1, dip1, strike2, fault_type, magnitude*
- ``"principal_axis"`` — *t_exponent, t_azimuth, t_plunge,
n_exponent, n_azimuth, n_plunge, p_exponent, p_azimuth, p_plunge,
exponent*

scale: str
tjnewton marked this conversation as resolved.
Show resolved Hide resolved
Adjusts the scaling of the radius of the beachball, which is
proportional to the magnitude. Scale defines the size for
magnitude = 5 (i.e. scalar seismic moment M0 = 4.0E23 dynes-cm)
lon: int or float
Longitude of event location. Ignored if `spec` is not a dictionary.
lat: int or float
Latitude of event location. Ignored if `spec` is not a dictionary.
depth: int or float
Depth of event location in kilometers. Ignored if `spec` is not a
dictionary.
convention: str
``"aki"`` (Aki & Richards), ``"gcmt"`` (global CMT), ``"mt"``
(seismic moment tensor), ``"partial"`` (partial focal mechanism),
or ``"principal_axis"`` (principal axis). Ignored if `spec` is a
dictionary.
component: str
The component of the seismic moment tensor to plot. ``"full"`` (the
full seismic moment tensor), ``"dc"`` (the closest double couple
with zero trace and zero determinant), ``"deviatoric"`` (zero
trace)
plot_lon: int or float
Longitude at which to place beachball, only used if `spec` is a
dictionary.
plot_lat: int or float
Latitude at which to place beachball, only used if `spec` is a
dictionary.
text: str
Text string to appear near the beachball, only used if `spec` is a
dictionary.
text_options: str
Options for text labeling of beachballs, in the format
``[+aangle][+ffont][+jjustify][+odx[/dy]]``
offset: bool or str
Offsets beachballs to the longitude, latitude specified in
the last two columns of the input file or array, or by `plot_lon`
and `plot_lat` if provided. A small circle is plotted at the
initial location and a line connects the beachball to the circle.
Specify pen and optionally append ``+ssize`` to change the line
style and/or size of the circle.
{J}
{R}
{B}
"""

# Check the spec and parse the data according to the specified
tjnewton marked this conversation as resolved.
Show resolved Hide resolved
# convention
if isinstance(spec, dict):
if lon is None or lat is None or depth is None:
raise GMTError("Location not fully specified.")
liamtoney marked this conversation as resolved.
Show resolved Hide resolved

AKI_PARAMS = ["strike", "dip", "rake", "magnitude"]
GCMT_PARAMS = [
"strike1",
"dip1",
"rake1",
"strike2",
"dip2",
"rake2",
"mantissa",
"exponent",
]
# FIXME: allow specification of moment instead of mantissa and
# exponent.
MT_PARAMS = ["mrr", "mtt", "mff", "mrt", "mrf", "mtf", "exponent"]
PARTIAL_PARAMS = ["strike1", "dip1", "strike2", "fault_type", "magnitude"]
PRINCIPAL_AXIS_PARAMS = [
"t_exponent",
"t_azimuth",
"t_plunge",
"n_exponent",
"n_azimuth",
"n_plunge",
"p_exponent",
"p_azimuth",
"p_plunge",
"exponent",
]

# Aki and Richards convention: -Sa in GMT
if set(spec.keys()) == set(AKI_PARAMS):
convention = "aki"
foc_params = AKI_PARAMS

# Global CMT convention: -Sc in GMT
elif set(spec.keys()) == set(GCMT_PARAMS):
convention = "gcmt"
foc_params = GCMT_PARAMS

# Seismic moment tensor convention: -Sm|d|z in GMT
elif set(spec.keys()) == set(MT_PARAMS):
convention = "mt"
foc_params = MT_PARAMS

# Partial focal mechanism convention: -Sp in GMT
elif set(spec.keys()) == set(PARTIAL_PARAMS):
convention = "partial"
foc_params = PARTIAL_PARAMS

# Principal axis convention: -Sx|y|t in GMT
elif set(spec.keys()) == set(PRINCIPAL_AXIS_PARAMS):
convention = "principle_axis"
foc_params = PRINCIPAL_AXIS_PARAMS

else:
raise GMTError(
"Parameters in spec dictionary do not match known conventions."
)

# Construct the vector (note that order matters here, hence the
# list comprehension!)
spec = [lon, lat, depth] + [spec[key] for key in foc_params]

# Add in plotting options, if given, otherwise add 0s as required
# by GMT
for arg in plot_lon, plot_lat, text:
if arg is None:
spec.append(0)
else:
if "C" not in kwargs:
kwargs["C"] = True
spec.append(arg)

# Add condition and scale to kwargs
if convention == "aki":
format = "a"
elif convention == "gcmt":
format = "c"
elif convention == "mt":
# Check which component of mechanism the user wants plotted
if component == "deviatoric":
format = "z"
elif component == "dc":
format = "d"
else: # component == 'full'
format = "m"
elif convention == "partial":
format = "p"
elif convention == "principal_axis":
# Check which component of mechanism the user wants plotted
if component == "deviatoric":
format = "t"
elif component == "dc":
format = "y"
else: # component == 'full'
format = "x"
# Support old-school GMT format options
elif convention in ["a", "c", "m", "d", "z", "p", "x", "y", "t"]:
format = convention
else:
raise GMTError("Convention not recognized.")

# Assemble -S flag
kwargs["S"] = format + scale + text_options

kind = data_kind(spec)
with Session() as lib:
if kind == "matrix":
file_context = lib.virtualfile_from_matrix(np.atleast_2d(spec))
elif kind == "file":
file_context = dummy_context(spec)
else:
raise GMTInvalidInput("Unrecognized data type: {}".format(type(spec)))
with file_context as fname:
arg_str = " ".join([fname, build_arg_string(kwargs)])
lib.call_module("meca", arg_str)
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
57 changes: 57 additions & 0 deletions pygmt/tests/data/fullmt_ipts1_iref1
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
-30.000000 -75.000000 0.000000 -1.954625e+00 -3.743529e+00 -3.743529e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
-30.000000 -60.000000 0.000000 -5.177966e-01 -3.973692e+00 -3.973692e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
-30.000000 -45.000000 0.000000 9.543192e-01 -3.933055e+00 -3.933055e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
-30.000000 -30.000000 0.000000 2.361400e+00 -3.624387e+00 -3.624387e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
-30.000000 -15.000000 0.000000 3.607555e+00 -3.068723e+00 -3.068723e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
-30.000000 0.000000 0.000000 4.607861e+00 -2.303930e+00 -2.303930e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
-30.000000 15.000000 0.000000 5.294149e+00 -1.382129e+00 -1.382129e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
-30.000000 30.000000 0.000000 5.619649e+00 -3.661375e-01 -3.661375e-01 0.000000e+00 0.000000e+00 0.000000e+00 23
-30.000000 45.000000 0.000000 5.562180e+00 6.748056e-01 6.748056e-01 0.000000e+00 0.000000e+00 0.000000e+00 23
-30.000000 60.000000 0.000000 5.125657e+00 1.669762e+00 1.669762e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
-30.000000 75.000000 0.000000 4.339830e+00 2.550926e+00 2.550926e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
-15.000000 -75.000000 0.000000 -1.995262e+00 -3.455896e+00 -3.990525e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
-15.000000 -60.000000 0.000000 -5.963011e-01 -3.418028e+00 -4.450852e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
-15.000000 -45.000000 0.000000 8.432971e-01 -3.147228e+00 -4.607861e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
-15.000000 -30.000000 0.000000 2.225426e+00 -2.661949e+00 -4.450852e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
-15.000000 -15.000000 0.000000 3.455896e+00 -1.995262e+00 -3.990525e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
-15.000000 0.000000 0.000000 4.450852e+00 -1.192602e+00 -3.258250e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
-15.000000 15.000000 0.000000 5.142490e+00 -3.086682e-01 -2.303930e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
-15.000000 30.000000 0.000000 5.483676e+00 5.963011e-01 -1.192602e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
-15.000000 45.000000 0.000000 5.451158e+00 1.460633e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
-15.000000 60.000000 0.000000 5.047153e+00 2.225426e+00 1.192602e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
-15.000000 75.000000 0.000000 4.299193e+00 2.838559e+00 2.303930e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
0.000000 -75.000000 0.000000 -2.114404e+00 -3.147228e+00 -4.180051e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
0.000000 -60.000000 0.000000 -8.264647e-01 -2.821727e+00 -4.816989e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
0.000000 -45.000000 0.000000 5.177966e-01 -2.303930e+00 -5.125657e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
0.000000 -30.000000 0.000000 1.826771e+00 -1.629125e+00 -5.085021e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
0.000000 -15.000000 0.000000 3.011254e+00 -8.432971e-01 -4.697848e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
0.000000 0.000000 0.000000 3.990525e+00 0.000000e+00 -3.990525e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
0.000000 15.000000 0.000000 4.697848e+00 8.432971e-01 -3.011254e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
0.000000 30.000000 0.000000 5.085021e+00 1.629125e+00 -1.826771e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
0.000000 45.000000 0.000000 5.125657e+00 2.303930e+00 -5.177966e-01 0.000000e+00 0.000000e+00 0.000000e+00 23
0.000000 60.000000 0.000000 4.816989e+00 2.821727e+00 8.264647e-01 0.000000e+00 0.000000e+00 0.000000e+00 23
0.000000 75.000000 0.000000 4.180051e+00 3.147228e+00 2.114404e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
15.000000 -75.000000 0.000000 -2.303930e+00 -2.838559e+00 -4.299193e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
15.000000 -60.000000 0.000000 -1.192602e+00 -2.225426e+00 -5.047153e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
15.000000 -45.000000 0.000000 0.000000e+00 -1.460633e+00 -5.451158e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
15.000000 -30.000000 0.000000 1.192602e+00 -5.963011e-01 -5.483676e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
15.000000 -15.000000 0.000000 2.303930e+00 3.086682e-01 -5.142490e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
15.000000 0.000000 0.000000 3.258250e+00 1.192602e+00 -4.450852e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
15.000000 15.000000 0.000000 3.990525e+00 1.995262e+00 -3.455896e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
15.000000 30.000000 0.000000 4.450852e+00 2.661949e+00 -2.225426e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
15.000000 45.000000 0.000000 4.607861e+00 3.147228e+00 -8.432971e-01 0.000000e+00 0.000000e+00 0.000000e+00 23
15.000000 60.000000 0.000000 4.450852e+00 3.418028e+00 5.963011e-01 0.000000e+00 0.000000e+00 0.000000e+00 23
15.000000 75.000000 0.000000 3.990525e+00 3.455896e+00 1.995262e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
30.000000 -75.000000 0.000000 -2.550926e+00 -2.550926e+00 -4.339830e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
30.000000 -60.000000 0.000000 -1.669762e+00 -1.669762e+00 -5.125657e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
30.000000 -45.000000 0.000000 -6.748056e-01 -6.748056e-01 -5.562180e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
30.000000 -30.000000 0.000000 3.661375e-01 3.661375e-01 -5.619649e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
30.000000 -15.000000 0.000000 1.382129e+00 1.382129e+00 -5.294149e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
30.000000 0.000000 0.000000 2.303930e+00 2.303930e+00 -4.607861e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
30.000000 15.000000 0.000000 3.068723e+00 3.068723e+00 -3.607555e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
30.000000 30.000000 0.000000 3.624387e+00 3.624387e+00 -2.361400e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
30.000000 45.000000 0.000000 3.933055e+00 3.933055e+00 -9.543192e-01 0.000000e+00 0.000000e+00 0.000000e+00 23
30.000000 60.000000 0.000000 3.973692e+00 3.973692e+00 5.177966e-01 0.000000e+00 0.000000e+00 0.000000e+00 23
30.000000 75.000000 0.000000 3.743529e+00 3.743529e+00 1.954625e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
0.000000 -89.999000 0.000000 -3.258180e+00 -3.258250e+00 -3.258319e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
0.000000 89.999000 0.000000 3.258319e+00 3.258250e+00 3.258180e+00 0.000000e+00 0.000000e+00 0.000000e+00 23
Loading