0001 function [mos, pmap]=mosaic_map_fast(ad,ads,p,beam,uvcut, noiseType)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 if(~exist('uvcut'))
0017 uvcut=[0,Inf];
0018 end
0019
0020 if(~exist('noiseType'))
0021 noiseType = 1;
0022 end
0023
0024
0025
0026 if(ndims(beam)==3)
0027 beam=mean(beam,3);
0028 end
0029
0030
0031 a=zeros(ad.N_pix); b=a;
0032 a1=zeros(ad.N_pix); b1=a1;
0033
0034 for i=1:length(p.px)
0035 i
0036
0037
0038 uvr=pyth(p.u{i},p.v{i});
0039 ind=uvr>uvcut(1)&uvr<uvcut(2);
0040
0041 tic
0042
0043
0044 x=2*pi*(p.u{i}(ind)*p.px(i)*pi/180+p.v{i}(ind)*p.py(i)*pi/180);
0045 svis=p.vis{i}(ind).*complex(cos(x),sin(x));
0046
0047
0048 [dmap,s]=difmap(ad,p.u{i}(ind),p.v{i}(ind),svis,p.var{i}(ind));
0049 toc
0050 s1 = s;
0051
0052
0053 [xrm, yrm, xrb, yrb] = find_beam_range(ad, ads, p.px(i), p.py(i));
0054 sbeam = zeros(ad.N_pix);
0055 sbeam(yrm, xrm) = beam(yrb, xrb);
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065 pmap.beam.xrm{i} = xrm;
0066 pmap.beam.yrm{i} = yrm;
0067 pmap.beam.xrb{i} = xrb;
0068 pmap.beam.yrb{i} = yrb;
0069 pmap.s1(i) = s1;
0070 pmap.map{i} = single(dmap(yrm, xrm));
0071
0072 if(noiseType==1)
0073 s = newNoise(dmap);
0074 end
0075 pmap.s(i) = s;
0076
0077 s = s1;
0078
0079 a=a+sbeam.^2./s;
0080 b=b+sbeam.*dmap./s;
0081
0082
0083
0084 end
0085
0086
0087
0088
0089 mos.noise=single(sqrt(1./a));
0090 mos.signal=single(b./a);
0091
0092
0093
0094 mos.sigma=single(mos.signal./mos.noise);
0095
0096 return
0097
0098
0099 function [xrm, yrm, xrb, yrb] = find_beam_range(ad, ads, px, py)
0100
0101 if(isfield(ad, 't_val_x'))
0102 x = ad.t_val_x_deg - px;
0103 else
0104 x = ad.t_val_deg - px;
0105 end
0106 y = ad.t_val_deg - py;
0107 x = find(abs(x)==min(abs(x)));
0108 y = find(abs(y)==min(abs(y)));
0109 center = floor(ads.N_pix/2)+1;
0110 xrb = 1:ads.N_pix;
0111 yrb = 1:ads.N_pix;
0112 xrm = xrb - center + x;
0113 yrm = yrb - center + y;
0114
0115
0116 f = find(xrm <=0);
0117 xrm(f) = [];
0118 xrb(f) = [];
0119 f = find(xrm > ad.N_pix);
0120 xrm(f) = [];
0121 xrb(f) = [];
0122 f = find(yrm <=0);
0123 yrm(f) = [];
0124 yrb(f) = [];
0125 f = find(yrm > ad.N_pix);
0126 yrm(f) = [];
0127 yrb(f) = [];
0128
0129
0130 return;
0131
0132 function noise = newNoise(map)
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144 lowSig = min(map(:));
0145 hiVals = find(map(:)>abs(lowSig));
0146 map(hiVals) = nan;
0147 noise = nanvar(map(:));
0148
0149 return;
0150