Moment Tensor DecomposeΒΆ
The example_path need to de changed to your path, and run this notebook.
1#!/usr/bin/env python3
2# -*- coding: utf-8 -*-
3
4import os
5import glob
6import obspy
7import numpy as np
8import matplotlib.pyplot as plt
9from obspy import Stream
10from obspy.taup import TauPyModel
11from obspy.imaging.mopad_wrapper import beach
12from MCMTpy import MomentTensor as MTpy
13
14# Helper function
15#----------------------------------------------------#
16#%% 1.plot decompose mt
17def plot_decompose(FM,FM_DC,FM_CLVD,FM_iso):
18 MT = MTpy.MTensor(FM)
19 Dec = MTpy.Decompose(MT)
20 Dec.decomposition_iso_DC_CLVD()
21
22 fig2, ax2 = plt.subplots(1 ,1, dpi=800)
23 Length_Ball = 100
24
25 ###### MT
26 beach1 = beach(FM, xy=(50, 50), linewidth=1,width=Length_Ball-1, alpha=1,\
27 facecolor='g',bgcolor='w', edgecolor='k',mopad_basis='NED',nofill=False,zorder=1 )
28 ax2.add_collection(beach1)
29 ax2.set_aspect("equal")
30
31 menthod='schmidt' # 'schmidt' # 'wulff'
32 T_axis, P_axis, N_axis = MTpy.MT2TPN(MTpy.MTensor(FM))
33 T = MTpy.vector2str_dip(T_axis)
34 P = MTpy.vector2str_dip(P_axis)
35 N = MTpy.vector2str_dip(N_axis)
36
37 Tx, Ty = MTpy.project_beachball(AZM=T.strike, TKO=(90-T.dip), R=Length_Ball/2, menthod=menthod)
38 ax2.text(Tx,Ty,'T',horizontalalignment='center', verticalalignment='center',\
39 fontsize=10, color='k',alpha=0.7,zorder=1)
40
41 Px, Py = MTpy.project_beachball(AZM=P.strike, TKO=(90-P.dip), R=Length_Ball/2, menthod=menthod)
42 ax2.text(Px,Py,'P',horizontalalignment='center', verticalalignment='center',\
43 fontsize=10, color='k',alpha=0.7,zorder=1)
44
45 Nx, Ny = MTpy.project_beachball(AZM=N.strike, TKO=(90-N.dip), R=Length_Ball/2, menthod=menthod)
46 ax2.text(Nx,Ny,'N',horizontalalignment='center', verticalalignment='center',\
47 fontsize=10, color='k',alpha=0.7,zorder=1)
48
49 ###### DC
50 beach2 = beach(FM_DC, xy=(200, 50), linewidth=1,width=Length_Ball-1, alpha=1,\
51 facecolor='g',bgcolor='w', edgecolor='k',mopad_basis='NED',nofill=False,zorder=1 )
52 ax2.add_collection(beach2)
53 ax2.set_aspect("equal")
54
55 menthod='schmidt' # 'schmidt' # 'wulff'
56 T_axis, P_axis, N_axis = MTpy.MT2TPN(MTpy.MTensor(FM_DC))
57 T = MTpy.vector2str_dip(T_axis)
58 P = MTpy.vector2str_dip(P_axis)
59 N = MTpy.vector2str_dip(N_axis)
60
61 Tx, Ty = MTpy.project_beachball(AZM=T.strike, TKO=(90-T.dip), R=Length_Ball/2, menthod=menthod)
62 ax2.text(150*1+Tx,Ty,'T',horizontalalignment='center', verticalalignment='center',\
63 fontsize=10, color='k',alpha=0.7,zorder=1)
64
65 Px, Py = MTpy.project_beachball(AZM=P.strike, TKO=(90-P.dip), R=Length_Ball/2, menthod=menthod)
66 ax2.text(150*1+Px,Py,'P',horizontalalignment='center', verticalalignment='center',\
67 fontsize=10, color='k',alpha=0.7,zorder=1)
68
69 Nx, Ny = MTpy.project_beachball(AZM=N.strike, TKO=(90-N.dip), R=Length_Ball/2, menthod=menthod)
70 ax2.text(150*1+Nx,Ny,'N',horizontalalignment='center', verticalalignment='center',\
71 fontsize=10, color='k',alpha=0.7,zorder=1)
72
73 ####### CLVD
74 beach3 = beach(FM_CLVD, xy=(350, 50), linewidth=1,width=Length_Ball-1, alpha=1,\
75 facecolor='g',bgcolor='w', edgecolor='k',mopad_basis='NED',nofill=False,zorder=1 )
76 ax2.add_collection(beach3)
77 ax2.set_aspect("equal")
78
79 menthod='schmidt' # 'schmidt' # 'wulff'
80 T_axis, P_axis, N_axis = MTpy.MT2TPN(MTpy.MTensor(FM_CLVD))
81 T = MTpy.vector2str_dip(T_axis)
82 P = MTpy.vector2str_dip(P_axis)
83 N = MTpy.vector2str_dip(N_axis)
84
85 Tx, Ty = MTpy.project_beachball(AZM=T.strike, TKO=(90-T.dip), R=Length_Ball/2, menthod=menthod)
86 ax2.text(150*2+Tx,Ty,'T',horizontalalignment='center', verticalalignment='center',\
87 fontsize=10, color='k',alpha=0.7,zorder=1)
88
89 Px, Py = MTpy.project_beachball(AZM=P.strike, TKO=(90-P.dip), R=Length_Ball/2, menthod=menthod)
90 ax2.text(150*2+Px,Py,'P',horizontalalignment='center', verticalalignment='center',\
91 fontsize=10, color='k',alpha=0.7,zorder=1)
92
93 Nx, Ny = MTpy.project_beachball(AZM=N.strike, TKO=(90-N.dip), R=Length_Ball/2, menthod=menthod)
94 ax2.text(150*2+Nx,Ny,'N',horizontalalignment='center', verticalalignment='center',\
95 fontsize=10, color='k',alpha=0.7,zorder=1)
96
97 ####### iso
98 beach4 = beach(FM_iso, xy=(500, 50), linewidth=1,width=Length_Ball-1, alpha=1,\
99 facecolor='g',bgcolor='w', edgecolor='k',mopad_basis='NED',nofill=False,zorder=1 )
100 ax2.add_collection(beach4)
101 ax2.set_aspect("equal")
102
103 menthod='schmidt' # 'schmidt' # 'wulff'
104 T_axis, P_axis, N_axis = MTpy.MT2TPN(MTpy.MTensor(FM_iso))
105 T = MTpy.vector2str_dip(T_axis)
106 P = MTpy.vector2str_dip(P_axis)
107 N = MTpy.vector2str_dip(N_axis)
108
109 Tx, Ty = MTpy.project_beachball(AZM=T.strike, TKO=(90-T.dip), R=Length_Ball/2, menthod=menthod)
110 ax2.text(150*3+Tx,Ty,'T',horizontalalignment='center', verticalalignment='center',\
111 fontsize=10, color='k',alpha=0.7,zorder=1)
112
113 Px, Py = MTpy.project_beachball(AZM=P.strike, TKO=(90-P.dip), R=Length_Ball/2, menthod=menthod)
114 ax2.text(150*3+Px,Py,'P',horizontalalignment='center', verticalalignment='center',\
115 fontsize=10, color='k',alpha=0.7,zorder=1)
116
117 Nx, Ny = MTpy.project_beachball(AZM=N.strike, TKO=(90-N.dip), R=Length_Ball/2, menthod=menthod)
118 ax2.text(150*3+Nx,Ny,'N',horizontalalignment='center', verticalalignment='center',\
119 fontsize=10, color='k',alpha=0.7,zorder=1)
120
121 ####### plot '+' and '='
122 ax2.text(125,50,'=',horizontalalignment='center', verticalalignment='center',\
123 fontsize=20, color='k',alpha=0.7,zorder=1)
124 ax2.text(275,50,'+',horizontalalignment='center', verticalalignment='center',\
125 fontsize=20, color='k',alpha=0.7,zorder=1)
126 ax2.text(425,50,'+',horizontalalignment='center', verticalalignment='center',\
127 fontsize=20, color='k',alpha=0.7,zorder=1)
128
129 ####### plot percentage
130 MT_text = 'MT'
131 ax2.text(50,-15,MT_text,horizontalalignment='center', verticalalignment='center',\
132 fontsize=8, color='k',alpha=0.7,zorder=1)
133
134 iso_text = 'ISO: '+str(round(Dec.M_iso_percentage,2))+'%'
135 ax2.text(500,-15,iso_text,horizontalalignment='center', verticalalignment='center',\
136 fontsize=8, color='k',alpha=0.7,zorder=1)
137
138 DC_text = 'DC: '+str(round(Dec.M_DC_percentage,2))+'%'
139 ax2.text(200,-15,DC_text,horizontalalignment='center', verticalalignment='center',\
140 fontsize=8, color='k',alpha=0.7,zorder=1)
141
142 CLVD_text = 'CLVD: '+str(round(Dec.M_CLVD_percentage,2))+'%'
143 ax2.text(350,-15,CLVD_text,horizontalalignment='center', verticalalignment='center',\
144 fontsize=8, color='k',alpha=0.7,zorder=1)
145
146 ####### set figure
147 plt.title("Decompose")
148 ax2.set_xlim(0,550)
149 ax2.set_ylim(-30,100)
150 ax2.set_axis_off()
151
152 return fig2
153
154#%%------------------------------------------------------------#
155# 1.set FM
156# [Mxx_np, Myy_np, Mzz_np, Mxy_np, Mxz_np, Myz_np] or [strike,dip,rake]
157FM=[150,50,100]
158
159
160#------------------------------------------------------------#
161# we expect no parameters need to be changed below
162#------------------------------------------------------------#
163MT = MTpy.MTensor(FM)
164Dec = MTpy.Decompose(MT)
165Dec.decomposition_iso_DC_CLVD() # Dec.help()
166print(Dec.help())
167print('\n\n*********************************\n\n')
168Dec.print_self()
169
170Mxx = Dec.M_iso[0,0]
171Mxy = Dec.M_iso[0,1]
172Mxz = Dec.M_iso[0,2]
173Myy = Dec.M_iso[1,1]
174Myz = Dec.M_iso[1,2]
175Mzz = Dec.M_iso[2,2]
176FM_iso = np.array((Mxx, Myy, Mzz, Mxy, Mxz, Myz))
177
178Mxx = Dec.M_DC[0,0]
179Mxy = Dec.M_DC[0,1]
180Mxz = Dec.M_DC[0,2]
181Myy = Dec.M_DC[1,1]
182Myz = Dec.M_DC[1,2]
183Mzz = Dec.M_DC[2,2]
184FM_DC = np.array((Mxx, Myy, Mzz, Mxy, Mxz, Myz))
185
186Mxx = Dec.M_CLVD[0,0]
187Mxy = Dec.M_CLVD[0,1]
188Mxz = Dec.M_CLVD[0,2]
189Myy = Dec.M_CLVD[1,1]
190Myz = Dec.M_CLVD[1,2]
191Mzz = Dec.M_CLVD[2,2]
192FM_CLVD = np.array((Mxx, Myy, Mzz, Mxy, Mxz, Myz))
193
194fig = plot_decompose(FM, FM_DC, FM_CLVD, FM_iso)
195figurename=os.path.join('./S2_figure/Decompose.pdf')
196plt.savefig(figurename,dpi=800, format="pdf")
Decompose reuslt.
1Incluing function:
2self.M
3self.M_iso
4self.M_devi
5self.M_DC
6self.M_CLVD
7self.M0
8self.Mw
9self.M_iso_percentage
10self.M_DC_percentage
11self.M_CLVD_percentage
12self.eigen_val
13self.eigen_vec
14self.F
15None
16
17
18*********************************
19
20
21self.M: [[-0.3576622 -0.48646688 -0.01115976]
22 [-0.48646688 -0.61218411 0.20390851]
23 [-0.01115976 0.20390851 0.96984631]]
24
25self.M_iso: [[ -3.70074342e-17 0.00000000e+00 0.00000000e+00]
26 [ 0.00000000e+00 -3.70074342e-17 0.00000000e+00]
27 [ 0.00000000e+00 0.00000000e+00 -3.70074342e-17]]
28
29self.M_devi: [[-0.3576622 -0.48646688 -0.01115976]
30 [-0.48646688 -0.61218411 0.20390851]
31 [-0.01115976 0.20390851 0.96984631]]
32
33self.M_DC: [[-0.3576622 -0.48646688 -0.01115976]
34 [-0.48646688 -0.61218411 0.20390851]
35 [-0.01115976 0.20390851 0.96984631]]
36
37self.M_CLVD: [[ 3.33066907e-16 1.66533454e-16 -2.77555756e-17]
38 [ 1.66533454e-16 -2.22044605e-16 5.55111512e-17]
39 [ -2.77555756e-17 5.55111512e-17 0.00000000e+00]]
40
41self.M0: 1.0
42
43self.Mw: -6.06666666667
44
45self.M_iso_percentage: 0
46
47self.M_DC_percentage: 100
48
49self.M_CLVD_percentage: 0
50
51self.eigen_val: [ -1.00000000e+00 -5.46437895e-17 1.00000000e+00]
52
53self.eigen_vec: [[-0.60098212 -0.79705908 -0.0593069 ]
54 [-0.79535596 0.58906868 0.14285304]
55 [ 0.07892648 -0.13302222 0.98796543]]
56
57self.F: -1.76363553391e-17