0001 function status = interp_by_obs(cells,samps,obs,plot_res,interp_type,bad_chan,output_root,header_flag,infname)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 if ~((nargin ==9)|(nargin == 5)|(nargin == 6)|(nargin == 8))
0018 error('Number of input arguments must be either 5 6 8 or 9.');
0019 end
0020
0021 srcfid = -1;
0022
0023 if ~((size(samps,1) == size(cells,1))&(size(samps,2) == size(cells,2)))
0024 error('page layout is faulty')
0025 end;
0026 if nargin == 5
0027 bad_chan = [];
0028 header_flag = 'h';
0029
0030 end;
0031
0032 if nargin == 6
0033 header_flag = 'h';
0034 end;
0035
0036 if ~((header_flag == 'h')|(header_flag == 's'))
0037 header_flag = 'h';
0038 end;
0039
0040
0041 if nargin == 9
0042 srcfid = fopen(infname, 'r');
0043 if srcfid == -1
0044 error(['Could not open input file' infname '.']);
0045 end
0046
0047
0048 else
0049 while srcfid == -1
0050 [srcfid, infname]=get_fid('r','*.*', 'Open File:');
0051 end
0052 end
0053
0054
0055 ave_hdr_offsets_v;
0056
0057
0058 [fhdr,chdr,ename,czeros,cgains,cnames,fcom,ftext, coff]=rd_egis_hdr_v(srcfid);
0059
0060 if (nargin == 5|nargin == 6)
0061 output_root = [infname '_it'];
0062 end;
0063
0064
0065
0066 good_chan_mask = ones(chdr(1,NObs),fhdr(NChan));
0067
0068 nobs = chdr(1,NObs)
0069 if bad_chan ~= []
0070
0071 nrows_bad = size(bad_chan,1);
0072 if nobs ~= nrows_bad
0073 disp(['WARNING: Number of observations (' int2str(nobs) ') doesn''t match number of rows in bad_chan (' int2str(nrows_bad) ')']);
0074 if nrows_bad == 1
0075 disp('Replicating bad_chan vector to match nobs');
0076 bad_chan = ones(size(good_chan_mask,1))*bad_chan;
0077 else
0078 error('Drastic mismatch between nobs and bad_chan')
0079 end
0080 end
0081
0082 for isub = 1:size(good_chan_mask,1)
0083 bchan = find(bad_chan(isub,:));
0084 good_chan_mask(isub,bad_chan(isub,bchan)) = zeros(1,size(bchan,2));
0085 end;
0086 end;
0087
0088 [xelec,yelec,zelec] = electrodes(fhdr(NChan));
0089 if interp_type == 'sp'
0090 if fhdr(NChan) == 129
0091 nmax = 8;
0092 else
0093 error('something is rotten')
0094 end;
0095 end;
0096
0097 for iobs = 1:size(obs,2)
0098 disp(['Working on observation: ' int2str(obs(iobs))]);
0099 image_binary = zeros(plot_res*size(cells,1),plot_res*size(cells,2));
0100 for icell=1:size(cells,1)
0101 for t=1:size(cells,2)
0102 c = cells(icell,t);
0103 disp([' Cell: ' int2str(c)]);
0104 disp([' Samp: ' int2str(samps(icell,t))]);
0105 trialdata = rd_onetr_allch(srcfid, coff(c), obs(iobs), fhdr(NChan), chdr(c, NPoints));
0106 w = trialdata(samps(icell,t),:);
0107 good_chan = find(good_chan_mask(obs(iobs),:));
0108 v = zeros(1,size(good_chan,2));
0109 x = zeros(1,size(good_chan,2));
0110 y = zeros(1,size(good_chan,2));
0111 z = zeros(1,size(good_chan,2));
0112 v = w(good_chan);
0113 x = xelec(good_chan);
0114 y = yelec(good_chan);
0115 z = zelec(good_chan);
0116 if interp_type == 'sp'
0117 meanv = mean(v);
0118 v = v - meanv*ones(1,size(v,2));
0119 [sp_coff,error_check, sp_mat] = bayes_sphcoff(nmax,x,y,z,v);
0120 imagemat = image_2D(sp_coff,nmax,plot_res,120,meanv);
0121 elseif interp_type == '3d'
0122 disp('Default w is set to 1')
0123 w = 1;
0124 [p,q,error_check]= mateqs(w,x,y,z,v);
0125 disp('plot is being made as a 2d image')
0126 ruu = sqrt(x(1).^2+y(1).^2+z(1).^2);
0127 [xs,ys,zs] = polgrid(plot_res,ruu);
0128 image_3d= interp_3d(w,x,y,z,xs,ys,zs,p,q);
0129 imagemat= mask(xs,ys,zs,image_3d,120);
0130 else
0131 error('havent dealt with spherical splines yet')
0132 end;
0133 image_binary(plot_res*(icell-1)+1:plot_res*(icell-1)+plot_res,plot_res*(t-1)+1:plot_res*(t-1)+plot_res)=imagemat;
0134
0135 end;
0136 end
0137
0138 outfname = [output_root '_o' int2str(obs(iobs))];
0139 outfid = fopen(outfname,'wb');
0140 if header_flag == 'h'
0141 num_written = fwrite(outfid, size(image_binary), 'float');
0142 if num_written ~= 2
0143 error('Failed to write header info');
0144 end
0145
0146 fwrite(outfid, plot_res, 'float');
0147 end;
0148 num_written = fwrite(outfid,image_binary','float');
0149 if num_written ~= size(image_binary,1)*size(image_binary,2)
0150 error('write-out filed')
0151 end;
0152 fclose(outfid);
0153 end
0154
0155 disp('Finished running make_interp.');
0156 temp=fclose(srcfid);
0157 status = 1;