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 
../_images/Decompose.png