-
Notifications
You must be signed in to change notification settings - Fork 0
/
remove_eve_sta_crit.m
151 lines (126 loc) · 4.15 KB
/
remove_eve_sta_crit.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
function [ ] = remove_eve_sta_crit( infile1,outfile1,infile2,outfile2,crit,num_twin )
%remove_eve_sta_crit: remove the stations and sources whose records are
% smaller than crit. The removing process are iteratively run until
% all the unmatched stations and sources are removed.
%
% Input parameters:
% infile: Input file stores the original data
% outfile: Output file stores the corrected data
% crit: Critical Number
% num_twin: Number of representive points of coda waves
%
% Requied script: countmember(a,b)
% Discription: Array a is a uniqued array of array b. Count number
% of each cell a in b
%
% Written by Wei Wang @ SIO, 08/28/2017
%
crit=str2num(crit);
num_twin=str2num(num_twin);
% Read in the original file (infile) : Synthetic data part
fid_in = fopen(infile1, 'r');
C = textscan(fid_in, ['%d %f %f %f %f %f %f %s', repmat(' %f', 1, 2+num_twin)]);
fclose(fid_in);
numtol=length(C); % total lines of input file
eveid_in=C{1,1};
for i=2:7
data1(:,i-1)=(C{1,i});
end
stanm_in=C{1,8};
data2=C{1,9:numtol};
for i=9:numtol
data2(:,i-8)=(C{1,i});
end
% Count the unique eveid number
eveid1=eveid_in;
eveid_uniq1=unique(eveid1);
evenum1=countmember(eveid_uniq1,eveid1);
% Count the unique stanm number
stanm1=stanm_in;
stanm_uniq1=unique(stanm1);
stanum1=countmember(stanm_uniq1,stanm1);
% Remove all the stations and source number than crit
eve_nn1=find(evenum1<crit);
sta_nn1=find(stanum1<crit);
indx=0;
while(length(eve_nn1>0) | length(sta_nn1>0))
% Deal with event first
% Find eveid (evenm<crit) in the eveid1
[c,ia,ib]=intersect(eveid1,eveid_uniq1(eve_nn1));
[tf,loc]=ismember(eveid1,eveid_uniq1(eve_nn1));
idx=[1:length(eveid1)];
idx=idx(tf);
idx=idx(loc(tf));
% Remove the corresponding line in eveid and stanm;
eveid2=eveid1; eveid2(idx)=[];
stanm2=stanm1; stanm2(idx)=[];
eveid1=eveid2;
stanm1=stanm2;
% Count the unique stanm number
eveid_uniq1=unique(eveid1);
evenum1=countmember(eveid_uniq1,eveid1);
% Count the unique stanm number
stanm_uniq1=unique(stanm1);
stanum1=countmember(stanm_uniq1,stanm1);
eve_nn1=find(evenum1<crit);
sta_nn1=find(stanum1<crit);
% Deal with station second
% Find stanm (stanum<crit) in the stanm
[c,ia,ib]=intersect(stanm1,stanm_uniq1(sta_nn1));
[tf,loc]=ismember(stanm1,stanm_uniq1(sta_nn1));
idx=[1:length(stanm1)];
idx=idx(tf);
idx=idx(loc(tf));
% Remove the corresponding line in eveid and stanm;
eveid2=eveid1; eveid2(idx)=[];
stanm2=stanm1; stanm2(idx)=[];
eveid1=eveid2;
stanm1=stanm2;
% Count the unique stanm number
eveid_uniq1=unique(eveid1);
evenum1=countmember(eveid_uniq1,eveid1);
% Count the unique stanm number
stanm_uniq1=unique(stanm1);
stanum1=countmember(stanm_uniq1,stanm1);
eve_nn1=find(evenum1<crit);
sta_nn1=find(stanum1<crit);
indx=indx+1
end
% Write out into new file
fid_out = fopen(outfile1, 'w');
for i=1:length(eveid1)
nn=find(eveid_in==eveid1(i) & (strcmp(stanm_in,stanm1(i))==1));
stanm_tmp=cell2mat(stanm_in(nn));
fprintf(fid_out,'%10d %8.2f %7.2f %8.2f %6.2f %7.2f %4.2f %5s %7.2f %8.2f ',...
eveid_in(nn),data1(nn,:),stanm_tmp,data2(nn,1:2));
fprintf(fid_out,'%8.4f ',data2(nn,3:end));
fprintf(fid_out,'\n');
end
fclose(fid_out);
%%
% Read in the original file (infile) : Observed data part
fid_in = fopen(infile2, 'r');
C = textscan(fid_in, ['%d %f %f %f %f %f %f %s', repmat(' %f', 1, 2+num_twin)]);
fclose(fid_in);
numtol=length(C); % total lines of input file
eveid_in=C{1,1};
for i=2:7
data1(:,i-1)=(C{1,i});
end
stanm_in=C{1,8};
data2=C{1,9:numtol};
for i=9:numtol
data2(:,i-8)=(C{1,i});
end
% Write out into new file
fid_out = fopen(outfile2, 'w');
for i=1:length(eveid1)
nn=find(eveid_in==eveid1(i) & (strcmp(stanm_in,stanm1(i))==1));
stanm_tmp=cell2mat(stanm_in(nn));
fprintf(fid_out,'%10d %8.2f %7.2f %8.2f %6.2f %7.2f %4.2f %5s %7.2f %8.2f ',...
eveid_in(nn),data1(nn,:),stanm_tmp,data2(nn,1:2));
fprintf(fid_out,'%8.4f ',data2(nn,3:end));
fprintf(fid_out,'\n');
end
fclose(fid_out);
end