0001 function [d FWHM FWHM_bin FWHM_sim angle_bins all_data corr_data source vals d_on_az filedate Offset_bin sim_beam Offset] = beam_fitting(d,phase, direction, simfile, n_cuts,sim_beam, sim_data, sim_angles ,phi, vals_sim ,FWHM_sim, sim_fit_angles,fake,fitoff,flags,bin_width,maxfit_angle)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078 if (fake==0)
0079
0080
0081
0082
0083
0084
0085
0086 if (phase==1)
0087
0088 rval = [2.4, 2.3, 2.0, 2.1];
0089
0090 [thisAlpha r d meanr] = pol_correction(d,rval);
0091 else
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126 end
0127
0128
0129
0130 if (direction == 1)
0131 Type = 'Elevation';
0132 dcut = framecut(d,d.index.elscan.fast);
0133 max_angle = 3;
0134 min_angle = 0.8;
0135
0136 else
0137 Type = 'Azimuth';
0138 dcut = framecut(d,d.index.source.fast);
0139 min_angle = 0.9;
0140 max_angle = 3;
0141
0142 end
0143 else
0144 min_angle = 0.7;
0145 max_angle = 3;
0146 maxfit_angle = 0.9;
0147 dcut = d;
0148 if (direction == 2)
0149 Type = 'Azimuth';
0150 if(direction ==1)
0151 Type = 'Elevation';
0152 end
0153 end
0154 end
0155
0156
0157 if(flags==1)
0158 dcut.flags.fast(3.869e4:4.964e4)=1;
0159 dcut.flags.fast(6.685e4:7.484e4)=1;
0160 dcut= framecut(dcut,~dcut.flags.fast(:,1));
0161 plot(dcut.antenna0.receiver.data(:,1))
0162 end
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176 time = dcut.antenna0.roach1.utc;
0177 az_scan = dcut.antenna0.servo.apparent(:,1);
0178 el_scan = dcut.antenna0.servo.apparent(:,2);
0179
0180
0181
0182 [az_src, el_src] = calcAzElCs(dcut);
0183 angle = spaceangle(az_src, el_src, az_scan,el_scan,'deg');
0184
0185
0186
0187
0188
0189
0190 deltaEl = el_scan - el_src;
0191
0192
0193
0194 if (direction == 1)
0195 disp('Will analyse elevation scans')
0196 angle(el_scan<el_src) = -1.*angle(el_scan<el_src);
0197 else
0198 disp('Will analyse azimuth scans')
0199 angle(az_scan<az_src) = -1.*angle(az_scan<az_src);
0200 end
0201
0202
0203
0204
0205
0206
0207
0208 azApp = interp1(dcut.antenna0.tracker.utc, ...
0209 dcut.antenna0.tracker.horiz_topo(:,1), dcut.antenna0.receiver.utc);
0210 azOffSave = wrap180(azApp) - wrap180(dcut.antenna0.servo.apparent(:,1));
0211 azOffSave = -azOffSave;
0212
0213 elApp = interp1(dcut.antenna0.tracker.utc, ...
0214 dcut.antenna0.tracker.horiz_topo(:,2), dcut.antenna0.receiver.utc);
0215 elOffSave = elApp - dcut.antenna0.servo.apparent(:,2);
0216 elOffSave = -elOffSave;
0217
0218 if(direction==2)
0219 angle = azOffSave .* cos(dcut.antenna0.servo.el*pi/180);
0220 else
0221 angle = elOffSave;
0222 end
0223
0224
0225
0226
0227
0228
0229
0230
0231 az_bins = [-max_angle:bin_width:max_angle];
0232 n_bins = length(az_bins(1,:));
0233 deltaEl = angle;
0234
0235
0236
0237
0238
0239 if (phase ==1)
0240 ampfix = [1 1 -1 1 -1 1];
0241 C = [0 0.0173 -0.00845 0.0185 -0.01127 0];
0242 else
0243
0244
0245 ampfix = [1 1 1 1 1 1 1 1 1 ];
0246
0247
0248 C = [0 0 0 0 0 0 0 0 ];
0249 end
0250
0251
0252
0253
0254
0255
0256 if (phase == 1)
0257 no_chan = [1:6];
0258 x_plots = 2;
0259 else
0260
0261 no_chan = [1,2,3,4];
0262 x_plots = 2;
0263 b =0;
0264 end;
0265
0266 for chan = no_chan
0267 chan
0268 angle;
0269 b = b+1
0270 figure(b)
0271
0272
0273
0274
0275
0276
0277
0278
0279
0280
0281
0282 subplot(x_plots,4,1:2)
0283 plot(dcut.antenna0.receiver.utc,dcut.antenna0.receiver.data(:,chan),'b')
0284 titleText=[Type,' Scan data on ',dcut.antenna0.tracker.source{1},10,mjd2string(dcut.antenna0.receiver.utc(1)),' ',mjd2string(dcut.antenna0.receiver.utc(end))];
0285 title(titleText)
0286 xlabel('UTC');
0287 ylabel('Nominal units')
0288 hold on
0289
0290
0291 if (fitoff ==1)
0292
0293
0294
0295
0296
0297
0298
0299 inds = zeros(size(dcut.antenna0.receiver.utc));
0300 inds = logical(inds);
0301 if (direction == 1)
0302 ss = abs(gradient(dcut.antenna0.tracker.scan_off(:,2)));
0303 scan_off = interp1(dcut.antenna0.tracker.utc,ss,dcut.antenna0.receiver.utc);
0304 inds(scan_off>0.49)=1;
0305 else
0306 ss = abs(gradient(dcut.antenna0.tracker.scan_off(:,1)));
0307 scan_off = interp1(dcut.antenna0.tracker.utc,ss,dcut.antenna0.receiver.utc);
0308 inds(scan_off>1)=1;
0309 end
0310
0311
0312
0313
0314
0315
0316
0317
0318
0319 [s e] = findStartStop(inds);
0320
0321
0322
0323 for i=1:length(s)
0324
0325
0326 figure(21)
0327 temp_y = dcut.antenna0.receiver.data(s(i):e(i),chan);
0328 temp_x = angle(s(i):e(i));
0329 subplot(9,9,i)
0330 plot(temp_x,temp_y,'r')
0331
0332 p = polyfit(temp_x,temp_y,1);
0333 f = polyval(p,temp_x);
0334
0335 hold on
0336 plot(temp_x,f,'b')
0337 plot(temp_x,(temp_y-f),'g')
0338
0339 dcut.antenna0.receiver.data(s(i):e(i)) = dcut.antenna0.receiver.data(s(i):e(i),chan) - f;
0340
0341 end
0342 angle_new = angle;
0343
0344 angle_new(1:s(1))=100;
0345 figure(22)
0346 plot(angle_new,dcut.antenna0.receiver.data(:,chan),'b')
0347
0348 else
0349 angle_new = angle;
0350 end
0351
0352
0353
0354 figure(b)
0355 subplot(x_plots,4,1:2)
0356 plot(dcut.antenna0.receiver.utc,dcut.antenna0.receiver.data(:,chan),'g')
0357 hold off
0358
0359
0360 d_on_az = (dcut.antenna0.receiver.data(:,chan) *ampfix(chan));
0361
0362
0363 deltaEl = angle_new;
0364 deltaElshort = deltaEl(abs(deltaEl)<max(az_bins(1,:)));
0365
0366
0367
0368 d_on_az = d_on_az(abs(deltaEl)<max(az_bins(1,:)));
0369
0370
0371
0372
0373
0374
0375 az_bins(2,:) = 0;
0376 az_bins(3,:) = 0;
0377 bins_az = ceil(deltaElshort/bin_width) + ceil(n_bins/2);
0378
0379 for i = 1:length(az_bins)
0380
0381 az_bins(2,i) = mean(d_on_az(bins_az==i));
0382 number = length(d_on_az(bins_az==i));
0383 az_bins(3,i) = (std(d_on_az(bins_az==i)))/sqrt(number);
0384
0385 end
0386
0387
0388
0389 if (min(az_bins(2,:)) < 0)
0390 az_bins(2,:) = az_bins(2,:)+(abs(min(az_bins(2,:))));
0391 else
0392 az_bins(2,:) = az_bins(2,:)-(abs(min(az_bins(2,:))));
0393 end
0394
0395 all_data(:,chan) = az_bins(2,:);
0396
0397
0398
0399
0400
0401
0402
0403
0404
0405
0406
0407
0408
0409 if (chan==1)
0410 fit_lim = 0.8;
0411 fit_angles = abs(deltaElshort)<fit_lim;
0412 fit_angle_bins = abs(az_bins(1,:))< fit_lim;
0413
0414 temp = isnan(az_bins(2,:));
0415 az_bins(2,temp) = 0;
0416 temp1 = isnan(az_bins(1,:));
0417 az_bins(1,temp1) = 0;
0418 temp3 = isnan(az_bins(1,:));
0419 az_bins(3,temp3) = 0;
0420
0421 x = az_bins(1,fit_angle_bins)';
0422 y = az_bins(2,fit_angle_bins)';
0423 we = az_bins(3,fit_angle_bins)';
0424
0425 xx = deltaElshort(fit_angles);
0426 yy = (d_on_az(fit_angles));
0427 disp('here1')
0428 [best_fit_bin ] = fit_gauss(x,y);
0429 disp('here2')
0430 [best_fit ] = fit_gauss(xx,yy);
0431 disp('here3')
0432 vals_bin = coeffvalues(best_fit_bin);
0433 vals = coeffvalues(best_fit);
0434
0435 end
0436 a1(chan) = vals_bin(1);
0437 b1(chan) = vals_bin(2);
0438 c1(chan) = vals_bin(3);
0439 FWHM_bin(chan) = 2*vals_bin(3)*sqrt(log(2));
0440 FWHM(chan) = 2*vals(3)*sqrt(log(2));
0441 Offset(chan) = vals(2);
0442 Offset_bin(chan)=vals_bin(2)
0443
0444
0445 end
0446
0447
0448
0449 if (phase==1)
0450 meanI = (all_data(:,1) + all_data(:,10))/2;
0451 else
0452 meanI = all_data(:,chan);
0453 b=0;
0454 end
0455
0456
0457
0458
0459
0460
0461
0462
0463
0464
0465
0466
0467
0468
0469
0470
0471
0472
0473
0474
0475
0476
0477
0478
0479
0480
0481
0482
0483
0484
0485
0486
0487
0488
0489
0490
0491
0492
0493
0494
0495
0496
0497
0498 for chan = no_chan
0499 b=b+1
0500 figure(b)
0501 corr_data(:,chan) = all_data(:,chan);
0502
0503
0504
0505
0506
0507
0508 subplot(x_plots,4,3:4)
0509 errorbar(az_bins(1,:),corr_data(:,chan),az_bins(3,:))
0510 c = 1
0511
0512 if (c==1)
0513 titleText=[Type,' Scan through ',dcut.antenna0.tracker.source{1},10,mjd2string(dcut.antenna0.receiver.utc(1)),' ',mjd2string(dcut.antenna0.receiver.utc(end)),10, 'FWHM_bin = ', num2str(FWHM_bin(chan)),10,'Offset= ', num2str(Offset_bin(chan))];
0514 else
0515 titleText=[' ',10,' ',10, 'FWHM_bin = ', num2str(FWHM_bin(chan)),10,'Offset= ', num2str(Offset_bin(chan))];
0516 end
0517
0518 title(titleText)
0519 grid on
0520 hold on
0521
0522 if(chan==1)
0523 gauss = a1(chan)*exp(-((x-b1(chan))/c1(chan)).^2);
0524 plot(x,gauss,'g')
0525 xlim([-max_angle max_angle])
0526
0527
0528
0529 FWHM_bin(chan);
0530 FWHM(chan);
0531 end
0532 angle_bins = az_bins(1,:);
0533 source = dcut.antenna0.tracker.source{1};
0534 filedate = mjd2string(dcut.antenna0.receiver.utc(1));
0535
0536
0537
0538 figure(b)
0539 subplot(x_plots,4,5:6)
0540 chan
0541 hold on
0542 x = sim_beam(sim_fit_angles,1);
0543 gauss_sim = vals_sim(1)*exp(-((x-vals_sim(2))/vals_sim(3)).^2);
0544 plot(x,(gauss_sim),'g')
0545 xlim([-max_angle max_angle])
0546
0547
0548 FWHM_sim;
0549
0550
0551 plot(sim_beam(:,1),(sim_beam(:,2)./max(sim_beam(:,2))),'b')
0552 plot(x,gauss_sim,'gp')
0553
0554 title(['Plot of simulated and measured C-BASS beam (Linear)',10,Type,' Scan through ',dcut.antenna0.tracker.source{1},10,mjd2string(dcut.antenna0.receiver.utc(1)),' ',mjd2string(dcut.antenna0.receiver.utc(end))] )
0555
0556
0557 corr_data11 = corr_data(:,1);
0558 corr_data1 = corr_data(:,chan);
0559 min_corrdata = 0;
0560 Offset(chan)
0561 Offset_bin(chan)
0562 if (Offset(chan) < 0)
0563 plot(angle_bins+abs(Offset_bin(chan)),((corr_data1-min_corrdata)/max(corr_data11-min_corrdata)),'rp')
0564 else
0565 plot(angle_bins-abs(Offset_bin(chan)),((corr_data1-min_corrdata)/max(corr_data11-min_corrdata)),'rp')
0566 end
0567
0568 xlabel('Offset angle, degrees')
0569 ylabel('Normalised units, I channel')
0570 text(0.1,1.3,['\color{red}Measured Beam'])
0571 text(0.1,1.2,['\color{blue}Simulated Beam'])
0572 text(0.1,1.1,['\color{green}Gaussian fit to simulated beam'])
0573 grid on
0574 xlim([-max_angle max_angle])
0575
0576
0577
0578 subplot(x_plots,4,7:8)
0579
0580 plot(sim_beam(:,1),10.*log10(sim_beam(:,2)./max(sim_beam(:,2))),'b')
0581 hold on
0582 plot(x,10.*log10(gauss_sim),'gp')
0583 grid on
0584 title(['Plot of simulated and measured C-BASS beam (dB)',10,Type,' Scan through ',dcut.antenna0.tracker.source{1},10,mjd2string(dcut.antenna0.receiver.utc(1)),' ',mjd2string(dcut.antenna0.receiver.utc(end))] )
0585 if (Offset(chan) < 0)
0586 plot(angle_bins+abs(Offset_bin(chan)),10.*log10((corr_data1-min_corrdata)/max((corr_data11-min_corrdata))),'rp')
0587 else
0588 plot(angle_bins-abs(Offset_bin(chan)),10.*log10((corr_data1-min_corrdata)/max((corr_data11-min_corrdata))),'rp')
0589 end
0590 xlabel('Offset angle, degrees')
0591 ylabel('Normalised units, I channel')
0592 text(1,0,['\color{red}Measured Beam'])
0593 text(1,2,['\color{blue}Simulated Beam'])
0594 text(1,4,['\color{green}Gaussian fit to simulated beam'])
0595 xlim([-max_angle max_angle])
0596 end
0597 FWHM_sim
0598 FWHM_bin
0599 FWHM_all=FWHM_bin
0600 FWHM_bin
0601 FWHM_all
0602
0603
0604
0605
0606
0607
0608
0609