0001 function varargout = join(varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 ALGONAME = mfilename;
0018 VERSION = '$Id: join.html,v 1.1 2007/06/08 14:15:02 hewitson Exp $';
0019
0020
0021 if nargin == 1
0022 in = char(varargin{1});
0023 if strcmp(in, 'Params')
0024 varargout{1} = getDefaultPL();
0025 return
0026 end
0027 end
0028
0029
0030 invars = {};
0031 as = [];
0032 ps = [];
0033 for j=1:nargin
0034 invars = [invars cellstr(inputname(j))];
0035 if isa(varargin{j}, 'ao')
0036 as = [as varargin{j}];
0037 end
0038 if isa(varargin{j}, 'plist')
0039 ps = [ps varargin{j}];
0040 end
0041 end
0042
0043
0044 if isempty(ps)
0045 pl = getDefaultPL();
0046 else
0047 pl = combine(ps, getDefaultPL);
0048 end
0049
0050
0051
0052 a = as(1).data;
0053 dinfo = whos('a');
0054 dtype = dinfo.class;
0055
0056
0057
0058
0059 na = length(as);
0060 histin = [];
0061 xo = [];
0062 yo = [];
0063 fs = -1;
0064 dname = [];
0065 aname = [];
0066 xunits = '';
0067 yunits = '';
0068
0069
0070
0071 Toff = getToff(as);
0072
0073
0074 for j=1:na
0075
0076 a = as(j);
0077
0078
0079 if isa(a.data, dtype)
0080
0081 switch dtype
0082 case 'tsdata'
0083
0084
0085 [x,y] = get_xy_axis(a.data);
0086 t0 = ltpda_utc2gps(a.data.t0) - Toff;
0087
0088
0089 x = x + t0;
0090
0091
0092 if isempty(xo)
0093 yo = y;
0094 xo = x;
0095 else
0096 idx = [find(x > max(xo)) find(x < min(xo))];
0097 xo = [xo;x(idx)];
0098 yo = [yo;y(idx)];
0099 end
0100
0101
0102 if fs>0 && a.data.fs ~= fs
0103 warning('!!! Data has different sample rates !!!');
0104 end
0105 fs = a.data.fs;
0106
0107
0108 if ~strcmp(xunits, a.data.xunits) && ~isempty(xunits)
0109 warning('!!! Data has different X units !!!');
0110 end
0111 xunits = a.data.xunits;
0112
0113
0114 if ~strcmp(yunits, a.data.yunits) && ~isempty(yunits)
0115 warning('!!! Data has different Y units !!!');
0116 end
0117 yunits = a.data.yunits;
0118
0119 case 'fsdata'
0120 error('### I only work with time-series data at the moment.');
0121 case 'xydata'
0122 error('### I only work with time-series data at the moment.');
0123 case 'cdata'
0124 error('### I only work with time-series data at the moment.');
0125 otherwise
0126 error('### Unknown data type');
0127 end
0128
0129
0130 histin = [histin a.hist];
0131
0132
0133 dname = [dname ',' a.data.name];
0134 if isempty(invars{j})
0135 n = a.name;
0136 else
0137 n = invars{j};
0138 end
0139 aname = [aname ',' n];
0140
0141 else
0142 warning('!!! Ignoring AO input with data type %s', dtype);
0143 end
0144
0145 end
0146
0147 dname = dname(2:end);
0148 aname = aname(2:end);
0149
0150
0151
0152 [xos, idx] = sort(xo);
0153 yos = yo(idx);
0154
0155
0156 switch dtype
0157 case 'tsdata'
0158
0159
0160 t0 = xos(1);
0161 xos = xos - t0;
0162 data = tsdata(xos, yos);
0163 data = set(data, 't0', ltpda_gps2utc(Toff+t0));
0164 data = set(data, 'name', dname);
0165 data = set(data, 'xunits', xunits);
0166 data = set(data, 'yunits', yunits);
0167
0168 case 'fsdata'
0169
0170 case 'xydata'
0171
0172 case 'cdata'
0173
0174 end
0175
0176
0177
0178
0179 h = history(ALGONAME, VERSION, pl, histin);
0180 h = set(h, 'invars', invars);
0181 a = ao(data, h);
0182
0183
0184
0185
0186 varargout{1} = a;
0187
0188
0189
0190
0191 function Toff = getToff(as)
0192
0193 Toff = 1e20;
0194 for j=1:length(as)
0195 if isa(as(j).data, 'tsdata')
0196 t0 = ltpda_utc2gps(as(j).data.t0);
0197 if t0 < Toff
0198 Toff = t0;
0199 end
0200 end
0201 end
0202
0203
0204
0205 function plo = getDefaultPL()
0206
0207 disp('* creating default plist...');
0208 plo = plist();
0209 disp('* done.');
0210
0211
0212
0213
0214
0215