-
Notifications
You must be signed in to change notification settings - Fork 23
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
Sign convention for ZRT seismograms #77
Comments
I'll defer this @martinvandriel because he wrote most of the rotation logic. |
Thanks for reporting, I guess you are right that there is some issue here.
Is this a general convention? I guess I would have assumed ZRT to be right handed. In that case the theta trace in your figure would also be of wrong sign. Just to clarify. |
You are right that the convention I wrote down above is indeed not right-handed. But I also may be wrong... for example, the IRIS rotation docs here seem to show a right-handed coordinate system with:
As currently implemented, the Instaseis sign convention is also right-handed, which is good — it just might not be the right-handed convention that people are expecting. I'd imagine they'd be expecting what's shown in the image above, i.e. what's on IRIS. So perhaps this could just be resolved with some documentation clarifications? |
Hi, I also stumbled upon this problem while working with single forces. My conclusion is that Syngine produces correct ZNE traces but wrong ZRT results, with radial component flipped. Click here to show a modified version of @liamtoney code, for the pure vertical force (1, 0, 0) at a station to the east.#!/usr/bin/env python
import matplotlib.pyplot as plt
from obspy import UTCDateTime
from obspy.geodetics import gps2dist_azimuth
from obspy.clients.syngine import Client
client = Client()
SOURCE_LATITUDE = 0.
SOURCE_LONGITUDE = 0.
SOURCE_DEPTH_IN_KM = 0.
STATION_LATITUDE = 0.
STATION_LONGITUDE = 0.01
FORCE_R_IN_N = 1e10
FORCE_THETA_IN_N = 0
FORCE_PHI_IN_N = 0
MODEL = 'iasp91_2s'
COMPONENTS = 'ZRT'
ORIGIN_TIME = UTCDateTime(2016, 5, 22, 7, 57, 34)
T0 = -20 # seconds
GF_DURATION = 40 # seconds
COMPONENTS = 'ZNE'
st_zne = client.get_waveforms(
model=MODEL,
sourcelatitude=SOURCE_LATITUDE, sourcelongitude=SOURCE_LONGITUDE,
sourcedepthinmeters=SOURCE_DEPTH_IN_KM*1e3,
sourceforce=[FORCE_R_IN_N, FORCE_THETA_IN_N, FORCE_PHI_IN_N],
receiverlatitude=STATION_LATITUDE,
receiverlongitude=STATION_LONGITUDE,
origintime=ORIGIN_TIME,
starttime=ORIGIN_TIME+T0,
endtime=ORIGIN_TIME+T0+GF_DURATION,
units='displacement',
components=COMPONENTS
)
COMPONENTS = 'ZRT'
st_zrt = client.get_waveforms(
model=MODEL,
sourcelatitude=SOURCE_LATITUDE, sourcelongitude=SOURCE_LONGITUDE,
sourcedepthinmeters=SOURCE_DEPTH_IN_KM*1e3,
sourceforce=[FORCE_R_IN_N, FORCE_THETA_IN_N, FORCE_PHI_IN_N],
receiverlatitude=STATION_LATITUDE,
receiverlongitude=STATION_LONGITUDE,
origintime=ORIGIN_TIME,
starttime=ORIGIN_TIME+T0,
endtime=ORIGIN_TIME+T0+GF_DURATION,
units='displacement',
components=COMPONENTS
)
# rotate to ZRT using obspy
_dist, az, baz = gps2dist_azimuth(
SOURCE_LATITUDE, SOURCE_LONGITUDE, STATION_LATITUDE, STATION_LONGITUDE
)
print(f'azimuth: {az}, back-azimuth: {baz}')
st_zrt_obspy = st_zne.copy().rotate(method='NE->RT', back_azimuth=baz)
for st, title in zip(
[st_zne, st_zrt, st_zrt_obspy], ['ZNE', 'ZRT_syngine', 'ZRT_obspy']
):
fig = plt.figure()
st.plot(fig=fig)
fig.suptitle(f'{title}, back azimuth: {baz}')
fig.tight_layout()
plt.show() The ground motion recorded at this station should be upwards (positive Z) and eastward (positive E), which is the case, looking at the "ZNE" traces produced by Syngine. In the "ZRT" frame, the same motion should be away from the source, so: positive Z and positive R. Now, Syngine gives negative R (wrong), while rotating the traces with ObsPy, one gets positive R (correct). Note that if you rotate in ObsPy using azimuth instead of back azimuth, you get the same result of Syngine. |
Hi Lion, I'm using Syngine to compute force source Green's functions. I'm requesting displacement seismograms in ZRT. I was assuming the convention to be:
I built a sandbox to test this by applying unit forces in the up, south, and east directions at a source due west of a receiver:
Given my sign convention above, the first two waveform panels make sense. But in the last one, there's a negative first motion for a force in the direction from source to receiver. This suggests that radial is defined to be positive towards the source. Am I missing something, is this in fact the convention, or is this perhaps a bug?
Please click here for the code I used to produce the plots.
The text was updated successfully, but these errors were encountered: