def getMajor(curr_Mc,**kwargs): """ :param curr_Mc: low-cut magnitude :return: - aCluster: list of clusters each cluster is a catalog contains a major shock and its offsprings 'sel_p','sel_c' is used to select related NND data in aNND - aNND: nearest neighbor distance 'aEqID_p': parent's ID of the pair 'aEqID_c': child's ID of the pair """ import numpy as np import os # ------------------------------my modules-------------------------------------- import sys sys.path.append('/auto/home/lhuang/PycharmProjects/clustering-analysis-master') import src.data_utils as data_utils eqCat = EqCat() # original catalog eqCatMc = EqCat() # this catalog will be modified with each Mc iteration # =================================1============================================== # dir, file, params # ================================================================================ data_dir = './data' # Todo: .. or . file_in = 'hs_1981_2018_all.mat' eqCat.loadMatBin(os.path.join(data_dir, file_in)) eqCat.toCart_coordinates() eqCatMc.copy(eqCat) if 'min' in kwargs.keys(): min = kwargs['min'] else: min = 6.0 if 'max' in kwargs.keys(): max = kwargs['max'] else: max = None eqCatMc.selectEvents(min,max,'Mag') # load nearest neighbor distances NND_file = './data/%s_NND_Mc_%.1f_HD.mat' % (file_in.split('.')[0], curr_Mc)# Todo: .. or . dNND = data_utils.loadmat(NND_file) # , struct_as_record=True) aCluster = np.array([]) for i in list(range(eqCatMc.size())): cat = EqCat() cat.copy(eqCat) sel_c = dNND['aEqID_p'] == eqCatMc.data['N'][i] sel_p = dNND['aEqID_c'] == eqCatMc.data['N'][i] sel = np.logical_or(sel_p,sel_c) cat.selEventsFromID(dNND['aEqID_c'][sel],repeats=True) cat.data['sel_p'] = sel_p cat.data['sel_c'] = sel_c aCluster=np.append(aCluster,cat) print("major earthquake:%.1f"%cat.data['Time'][0],"mag:",cat.data['Mag'][0]) print("Total Ms: %d" % aCluster.shape[0]) return aCluster,dNND
# cut below current completeness eqCatMc.copy( eqCat) eqCatMc.selectEvents( f_Mc, None, 'Mag') print( 'current catalog size: ',eqCatMc.size()) # load nearest neighbor distances NND_file = '%s_NND_Mc_%.1f.mat'%(os.path.basename( file_in).split('.')[0], f_Mc) dNND = dataIO.loadmat( os.path.join( data_dir, NND_file)) print dNND.keys() dNND['aNND'] = np.log10( dNND['aNND']) #==================================3============================================= # "declustering" step #================================================================================ #catChild, catPar = create_parent_child_cat( projCat, dNND) catChild.copy( eqCat) catParent.copy( eqCat) catChild.selEventsFromID( dNND['aEqID_c'], eqCatMc, repeats = True) catParent.selEventsFromID( dNND['aEqID_p'], eqCatMc, repeats = True) print 'tot. ev', eqCatMc.size(), 'parents', np.unique( catParent.data['N']).shape[0], 'children', np.unique( catChild.data['N']).shape[0] #==================================4============================================= # spanning tree #================================================================================ plt.figure( 1) ax = plt.subplot(111) for iEv in xrange( catParent.size()): print 'MS', int( catParent.data['N'][iEv]), catParent.data['Time'][iEv], eqCatMc.data['Time'][iEv] if dNND['aNND'][iEv] < dPar['eta_0']:#triggered cluster ax.plot( [catParent.data['Time'][iEv]], [catParent.data['Lat'][iEv]], 'ro', ms = 12, alpha = .2) ax.plot( [catParent.data['Time'][iEv],catChild.data['Time'][iEv]], [catParent.data['Lat'][iEv], catChild.data['Lat'][iEv]], 'k-', marker = 'o', ms = 4, mew =1, mfc = 'none') else: # independent events
k=dPar['k'][2] # cut below current completeness eqCatMc.copy(eqCat) eqCatMc.selectEvents(curr_Mc, None, 'Mag') print('current catalog size: ', eqCatMc.size()) # load nearest neighbor distances NND_file = 'data/%s_NND_Mc_%.1f_HD.mat' % (file_in.split('.')[0], curr_Mc) dNND = data_utils.loadmat(NND_file) # , struct_as_record=True) # ================================================================================ # all event pairs # ================================================================================ catChild.copy(eqCatMc) catParent.copy(eqCatMc) # catChild, catPar = create_parent_child_cat( projCat, dNND) catChild.selEventsFromID(dNND['aEqID_c'], repeats=True) catParent.selEventsFromID(dNND['aEqID_p'], repeats=True) print('before::: size of parent catalog', catParent.size(), 'size of offspring cat', catChild.size()) # ================================================================================ # bigger parent event pairs # ================================================================================ # select event pairs with parent event larger than M_pt sel = catParent.data['Mag'] >= dPar['M_pt'] catChild.selEventsFromID(dNND['aEqID_c'][sel], repeats=True) catParent.selEventsFromID(dNND['aEqID_p'][sel], repeats=True) print('after::: size of parent catalog', catParent.size(), 'size of offspring cat', catChild.size()) # ================================================================================ # calculate R/L