-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathselfcalibration.html
487 lines (469 loc) · 28.5 KB
/
selfcalibration.html
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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
<!DOCTYPE HTML>
<!--
Hyperspace by HTML5 UP
html5up.net | @ajlkn
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
-->
<html>
<head>
<title>ERIS2024 - Self calibration</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="assets/css/main.css" />
<link rel="stylesheet" href="assets/css/prism.css">
<noscript><link rel="stylesheet" href="assets/css/noscript.css" /></noscript>
<script type="text/javascript" async src="assets/MathJax/MathJax.js?config=TeX-MML-AM_CHTML">
</script>
<link href='https://fonts.googleapis.com/css?family=Inconsolata' rel='stylesheet'>
<script type="text/x-mathjax-config">MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}});
</script>
<script type="text/javascript">
var pcs = document.lastModified.split(" ")[0].split("/");
var date = pcs[1] + '/' + pcs[0] + '/' + pcs[2];
onload = function(){
document.getElementById("lastModified").innerHTML = "Page last modified: " + date;
}
</script>
</head>
<body class="is-preload">
<!-- Header -->
<header id="header">
<a href="index.html" class="title">ERIS 2024 - Tutorials</a>
<nav>
<ul>
<li><a href="index.html#four">Home</a></li>
<li><a href="intro_data.html">Intro. to data</a></li>
<li><a href="calibration.html">Calibration</a></li>
<li><a href="imaging.html" >Imaging</a></li>
<li><a href="selfcalibration.html" class="active">Self calibration</a></li>
<li><a href="adv_imaging.html">Advanced imaging</a></li>
<li><a href="3C277_full.html">Full tutorial</a></li>
</ul>
</nav>
</header>
<!-- Wrapper -->
<div id="wrapper">
<!-- Main -->
<section id="main" class="wrapper">
<div class="inner">
<h1 class="major">Self calibration</h1>
<section>
<h2 class="alt"><a name=""></a>Data required</h2>
<p>
For this section, you want to continue on from your imaging tutorial folder and you should have the following files,
<ol>
<li><code class="language-bash">1252+5634.ms</code> - measurement set containing just the 3C277.1 visibilities.</li>
<li><code class="language-bash">3C277.1_imaging_outline2024.py</code> - imaging script.</li>
<li><code class="language-bash">3C277.1_imaging_all2024.py</code> - cheat script containing the answers</li>
<li><code class="language-bash">1252+5634_1.clean.*</code> - images, models, residuals made during the imaging tutorial</li>
</ol>
</p>
</section>
<hr/>
<section>
<h2>Table of contents</h2>
<ol start="1">
<li><a href="#inspect_self_cal_p">Inspect to choose interval for initial phase self-calibration (4-5)</a></li>
<li><a href="#self_cal_derive_p1">Derive phase self-calibration solutions (step 6)</a></li>
<li><a href="#self_cal_apply_p1">Apply first phase solutions and image again (7)</a></li>
<li><a href="#self_cal_p2">Phase-self-calibrate again (8)</a></li>
<li><a href="#apply_im_p">Apply the solutions and re-image (9)</a></li>
<li><a href="#inspect_self_cal_a">Choose solution interval for amplitude self-calibration (10)</a></li>
<li><a href="#self_cal_a">Amplitude self-cal (11)</a></li>
<li><a href="#apply_im_p">Apply amplitude and phase solutions and image again (12)</a></li>
<li><a href="#end_sc">Summary</a></li>
</ol>
</section>
<hr/>
<section>
<h2 class="alt"><a name="inspect_self_cal_p"></a>1. Inspect to choose interval for initial phase self-calibration (steps 4-5)</h2>
<p class="alt"><a href="#"><font size="-5">← back to top</font></a></p>
<p>
In this tutorial, we are going to explore the concept of self-calibration. The premise for self-calibration is simple. Instead of using a compact phase reference source (which we assume to be point-like) i.e., flat in amplitude and zero in phase, we instead assume that the calibrator is resolved. We then derive solutions assuming a model for the true sky brightness. It is called self-calibration as the source we use is often our target source which is used to calibrate itself. See the lectures for all the gory details on how this works.
</p>
<p>
As you may have guessed, we require a model of the true sky brightness distribution for us to do self-calibration. We have done that already (maybe without you noticing). When we performed our first <code class="language-python">tclean</code> imaging run, we had set <code class="language-python">savemodel='modelcolumn'</code>. This meant that our model image (our 'best guess' of the real sky), was Fourier transformed to create model visibilities (stored in the MODEL column of our measurement set). It is this model that we shall use to compare our visibilities to and correct for residual errors.
</p>
<p>
Let us inspect our model use <code class="language-bash">plotms</code> as we had done in step 1 to plot the model against $uv$ distance.
</p>
<p>
<ul>
<li>Take a look at step 4. The parameters have already been set so execute the step. You can try over-plotting the data and model columns on the same GUI window interactively or look at the difference between data and model columns.<pre class="line-numbers" data-start="106"><code class="language-python"> plotms(vis=target+'.ms',
xaxis='uvdist',
yaxis='amp',
ydatacolumn='model',
correlation='RR,LL',
avgchannel='64',
coloraxis='spw',
plotfile='',
overwrite=True, showgui=gui)</code></pre></li>
</ul>
</p>
<p>
Below we have overplotted these for convenience in python. The top panel shows the visibilities (data column) with the model visibilities overlaid. You can see that our model from imaging is a pretty good approximation to the visibilities. In the bottom panel, the scalar differences are shown illustrating that the model is slightly underestimating the flux density of the source across a large $uv$ distance. These discrepancies are due to the antenna amplitude errors and will be corrected by self-calibration
</p>
<div class="col-12"><span class="image fit"><img src="plots/preself_cal_uv_dist.png" alt="" /></span></div>
<p>
Now we have our model present, we will begin by doing phase self-calibration first. As with standard calibration, we need to decide what sort of solution interval we require. However, we have an extra complication as that is the source structure.
It can be hard to tell the difference between phase errors and source structure in the visibilities, but it helps to balance between choosing a longer interval to optimise S/N, and too long an interval (if possible the phase changes by less than a few tens of degrees). The phase will change most slowly due to source structure on the shortest baseline, Mk2&Pi, but you should also check that the longest baselines (to Cm) to ensure that there is enough S/N.
</p>
<p>
<ul>
<li>Take a look at step 5. We want to plot phase against time, averaging all channels per spw (see <code class="language-bash">listobs</code> for the number of channels).<pre class="line-numbers" data-start="144"><code class="language-python"> plotms(vis=target+'.ms',
xaxis='**',
yaxis='**',
antenna='**',
correlation='**,**',
avgchannel='**',
coloraxis='spw',
plotfile='',
timerange='',
overwrite=True, showgui=gui)</code></pre></li>
<li>Once you are happy, execute step 5 and look at the GUI.
</p>
<p>
The plot below shows a zoom on a few scans. The chosen solution interval should also ideally fit an integral number of times into each scan. It is also a good idea not to use too short a solution interval for the first model. This is because the model may not be very accurate, so you don't want to constrain the solutions too tightly.
</p>
<div class="col-12"><span class="image fit"><img src="plots/3C277.1_phase.png" alt="" /></span></div>
<p>
Looking at this plot, we can see that something along a 2-4 min solution interval should be ok to track the phases without too many failed solutions. Keep your solution interval to hand as we want to now derive these corrections.
</p>
</section>
<hr/>
<section>
<h2 class="alt"><a name="self_cal_derive_p1"></a>2. Derive phase self-calibration solutions (step 6)</h2>
<p class="alt"><a href="#"><font size="-5">← back to top</font></a></p>
<p>
Let's use <code class="language-bash">gaincal</code> to derive solutions.
</p>
<p>
<ul>
<li>Take a look at step 6 and enter the parameters in <code class="language-bash">gaincal</code> to conduct phase-only calibration using your selected solution interval,
<pre class="line-numbers" data-start="163"><code class="language-python">gaincal(vis=target+'.ms',
calmode='**', # phase only
caltable='target.p1',
field=target,
solint='**', # about half a scan duration
refant=antref,
minblperant=3, minsnr=5)</code></pre></li>
<li>We also want to plot these solutions which are done for both polarisations separately using the following code,
<pre class="line-numbers" data-start="163"><code class="language-python"> plotms(vis='target.p1',
gridcols=2, gridrows=3,
xaxis='time', yaxis='phase',
iteraxis='antenna',
coloraxis='spw',
plotrange=[-1,-1,-180,180],
correlation='L',
plotfile='target.p1_L.png', overwrite=True, showgui=gui)
plotms(vis='target.p1',
gridcols=2, gridrows=3,
xaxis='time', yaxis='phase',
iteraxis='antenna',
coloraxis='spw',
plotrange=[-1,-1,-180,180],
correlation='R',
plotfile='target.p1_R.png', overwrite=True, showgui=gui)</code></pre></li>
<li>If you are happy, execute step 6</li>
<li>Check the terminal and logger; there should be no (or almost no) failed solutions.</li>
</ul>
</p>
<p>
You should have solution that look like those below (we used a 180s solution interval). The corrections should be coherent, as they are, and represent the difference caused by the different atmospheric paths between the target and phase-ref, but they may also have a spurious component if the model was imperfect. The target is bright enough that a shorter solution interval could be used. So, these solutions are applied, the data re-imaged and the corrections refined iteratively.
</p>
<div class="col-12"><span class="image fit"><img src="plots/target.p1_L.png" alt="" /></span></div>
</section>
<hr/>
<section>
<h2 class="alt"><a name="self_cal_apply_p1"></a>3. Apply first phase solutions and image again (step 7)</h2>
<p class="alt"><a href="#"><font size="-5">← back to top</font></a></p>
<p>
Let's continue by applying these solutions to the measurement set. Remember that the premise of self-calibration is that we use an iterative approach to gradually improve the calibration of these data. This means we have to get a new improved model (therefore need to correct these data for imaging)
</p>
<p>
<ul>
<li>Take a look at step 7. There's a lot to enter here but most of these you have worked out in previous steps. Firstly, we want to enter the calibration table we just made into <code class="language-bash">applycal</code>,<pre class="line-numbers" data-start="197"><code class="language-python">applycal(vis=target+'.ms',
gaintable=['**']) # enter the name of the gaintable</code></pre></li>
<li>Next, we will want to image these data again to generate our new, better model. The weighting and resolution shouldn't change so we want to use the same parameters as we had done previously. Note that the number of iterations has increased as we expect a higher S/N due to phase self-calibration.
<pre class="line-numbers" data-start="202"><code class="language-python"> tclean(vis=target+'.ms',
imagename=target+'_p1.clean',
cell='**arcsec',
niter=3000,
cycleniter=300,
deconvolver='clark',
savemodel='modelcolumn',
imsize=['**','**'],
interactive=True)</code></pre></li>
<li>Finally, we want to record the rms and peak brightnesses so we can see if there's an improvement. As out imaging parameters are the same, you should try to use the same boxes,
<pre class="line-numbers" data-start="212"><code class="language-python"> rmsp1=imstat(imagename=target+'_p1.clean.image',
box='**,**,**,**')['rms'][0]
peakp1=imstat(imagename=target+'_p1.clean.image',
box='**,**,**,**')['max'][0]</code></pre></li>
<li>If you are happy with all of these entries, execute step 7. This may take a minute as the $\texttt{CORRECTED}$ data column needs to be generated.</li>
</ul>
</p>
<p>
With these corrections applied we will CLEAN using <code class="language-bash">tclean</code>, as before, but you will be able to do more iterations as the noise should be lower.
</p>
<p>
Once this is complete we will get the peak and rms values. I managed to get $S_p \sim 168 \,\mathrm{mJy\,beam^{-1}}$ and $\sigma \sim 0.282\,\mathrm{mJy\,beam^{-1}}$. This is a massive $\mathrm{S/N}$ increase to $\sim 595$ from $225$ before phase self-calibration.
</p>
<p>
<b>Important:</b> A key indicator if self-calibration is improving your data is that the S/N should increase each iteration. Do not rely on measuring the rms/peak individually as the self-calibration model could artificially reduce all amplitudes (peak and noise) with no S/N improvement!
</p>
</section>
<hr/>
<section>
<h2 class="alt"><a name="self_cal_p2"></a>4. Phase-self-calibrate again (step 8)</h2>
<p class="alt"><a href="#"><font size="-5">← back to top</font></a></p>
<p>
Now that the model is better, use a shorter solution interval. Heuristics suggest that 30s is usually about the shortest worth using, because the atmosphere is reasonably stable on these baseline lengths at this frequency.
</p>
<p>
<ul>
<li>Take a look at step 8 and enter the parameters for <code class="language-bash">gaincal</code> as before, but now reduce the solution interval to 30s,
<pre class="line-numbers" data-start="241"><code class="language-python"> gaincal(vis=target+'.ms',
calmode='**',
caltable='target.p2',
field=target,
solint='**',
refant=antref,
gaintable=['**'],
interp=['**'],
minblperant=3,minsnr=5)</code></pre></li>
<li>Have a look at the rest of the step which will produce plots of the calibration table</li>
<li>When you are happy execute step 8 and take a look at the plots.</li>
</ul>
<div class="col-12"><span class="image fit"><img src="plots/target.p2_L.png" alt="" /></span></div>
<p>
Because we apply the first self-calibration table on the fly, the resultant corrections will be smaller in amplitude that the original corrections. This is a good sign that the self-calibration is working as the phase errors in your data become smaller and smaller. You can see this in the plot below where we have overplotted the first and second calibration table which shows that the standard deviation of the solutions reduces (dotted lines). If you find that the solutions are noisier, then something may be going wrong (e.g., too small of a solution interval was used).
</p>
<div class="col-12"><span class="image fit"><img src="plots/compare_selfcal.png" alt="" /></span></div>
</section>
<hr/>
<section>
<h2 class="alt"><a name="apply_im_p"></a>5. Apply the solutions and re-image (step 9)</h2>
<p class="alt"><a href="#"><font size="-5">← back to top</font></a></p>
<p>
Let's apply these solutions and re-image.
</p>
<p>
<ul>
<li>Take a look at step 9 and enter the parameters into <code class="language-bash">applycal</code> as before, but making sure we add the new gaintable to the list.<pre class="line-numbers" data-start="279"><code class="language-python">applycal(vis='1252+5634.ms',
gaintable=['**', '**'])</code></pre></li>
</ul>
</p>
<p>
We also want to image again in this step. From <code class="language-bash">listobs</code>, the total bandwidth is ~10% of the frequency, which is enough for us to need to take the spectral index into account. <a href="plots/aa4338-05.pdf" target="_blank">Cotton et al. (2006)</a> finds the spectral index varies from $-0.1$ in the core to as steep as $-1$.
</p>
<p>
<code class="language-bash">listobs</code> showed the total bandwidth is 4817 to 5329 MHz, i.e. for flux density $S$, $S_{4817}/S_{5329} = (4817/5329)^{-1}$ or about 10%. The improved S/N gives much greater accuracy. Thus, in order to image properly and produce an accurate image to amplitude self-calibrate on all spectral windows, multi-term multi-frequency synthesis (<code class="language-bash">deconvolver='mtmfs'</code>) imaging is used. This solves for the sky model changing across frequency.
</p>
<p>
<ul>
<li>Enter the imaging parameters into the <code class="language-bash">tclean</code> step and the box sizes into the image statistics to track the S/N,<pre class="line-numbers" data-start="284"><code class="language-python"> tclean(vis=target+'.ms',
imagename=target+'_p2.clean',
cell='**arcsec',
niter=4500, # stop before this if residuals reach noise
cycleniter=500,
gain=0.2,
imsize=['**','**'],
deconvolver='mtmfs',
savemodel='modelcolumn',
nterms=2, # Make spectral index image
interactive=True)
rmsp2=imstat(imagename=target+'_p2.clean.image.tt0',
box='**,**,**,**')['rms'][0]
peakp2=imstat(imagename=target+'_p2.clean.image.tt0',
box='**,**,**,**')['max'][0]</code></pre></li>
<li>Once you are happy execute step 9 and clean the image! Make sure you clean till as much target flux as possible has been removed into the model - you can increase the number of iterations interactively if you want.</li>
<li>Use <code class="language-bash">ls</code> to see the names of the image files created. The image name is <code class="language-bash">1252+5634_p2.clean.image.tt0</code>.</li>
</ul>
</p>
<p>
If we check the image using the same boxes as before, I get $S_p \sim 174.779\,\mathrm{mJy\,beam^{-1}}$ and $\sigma \sim 0.155\,\mathrm{mJy\,beam^{-1}}$. This is another large $\mathrm{S/N}$ increase to $\sim 1126$.
</p>
</section>
<hr/>
<section>
<h2 class="alt"><a name="inspect_self_cal_a"></a>6. Choose solution interval for amplitude self-calibration (step 10)</h2>
<p class="alt"><a href="#"><font size="-5">← back to top</font></a></p>
<p>
Now that we have got the phases in order, we can work on the amplitudes instead. We firstly want to check what an appropriate solution interval will be so we want to use <code class="language-python">plotms</code> to get this information
</p>
<p>
<ul>
<li>In step 10, use <code class="language-bash">plotms</code> to plot the amplitude versus time of the shortest baseline then execute the step<pre class="line-numbers" data-start="320"><code class="language-python"> plotms(vis=target+'.ms',
xaxis='**',
yaxis='**',
ydatacolumn='**',
antenna='**&**',
correlation='RR,LL',
avgchannel='64',
coloraxis='spw',
timerange='',
plotfile='',
overwrite=True, showgui=gui)</code></pre></li>
</ul>
</p>
<p>
You should find a plot similar to that below. The smooth amplitude changes across the duration of the observation are not due to the antennae errors but due to the structure of the source (antennae errors should be on shorter timescales and less smooth). Remember that the projected baseline length changes over time so the sky the baseline 'sees' also changes.
</p>
<div class="col-12"><span class="image fit"><img src="plots/3C277.1_amp.png" alt="" /></span></div>
<p>
<ul>
<li>For us to find a suitable solution interval, we therefore want to zoom in on a few scans using the GUI like those shown below</li>
</ul>
</p>
<div class="col-12"><span class="image fit"><img src="plots/3C277.1_amp_zoom.png" alt="" /></span></div>
<p>
<ul>
<li>You can see that on an integration to integration it looks like random noise, therefore we want a longer solution interval. Experiment with averaging the time at different intervals. A safe bet to start would be to combine the solutions per scan (<code class="language-python">solint='inf'</code>)</li>
</ul>
</p>
</section>
<hr/>
<section>
<h2 class="alt"><a name="self_cal_a"></a>7. Amplitude self-cal (step 11)</h2>
<p class="alt"><a href="#"><font size="-5">← back to top</font></a></p>
<p>
In <code class="language-bash">gaincal</code>, the previous gaintable with short-interval phase solutions will be applied, to allow a longer solution (averaging) interval for amplitude self-calibration.
</p>
<p>
<ul>
<li>Take a look at step 11 and set up <code class="language-bash">gaincal</code> to calibrate amplitude and phase, with a longer solution interval, and the same refant etc. as before.
<pre class="line-numbers" data-start="341"><code class="language-python"> gaincal(vis=target+'.ms',
calmode='**',
caltable='target.ap1',
field=target,
solint='**',
refant=antref,
solnorm=True, #Normalise solutions as we have already set the flux scale
gaintable=['**','**'],
minblperant=3, minsnr=5)</code></pre></li>
<li>Once you are happy, execute step 11</li>
</ul>
<p>
This step will also plot the solutions for each polarisation separately (L polarisation is shown below). They should mostly be within about 20% of unity. A few very low/high points implies some bad data. If the solutions are consistently much greater than unity then the model is missing flux.
</p>
<div class="col-12"><span class="image fit"><img src="plots/target.ap1_L.png" alt="" /></span></div>
</section>
<hr/>
<section>
<h2 class="alt"><a name="apply_im_p"></a>8. Apply amplitude and phase solutions and image again (step 12)</h2>
<p class="alt"><a href="#"><font size="-5">← back to top</font></a></p>
<p>
We are almost finished and now have corrections for phase and amplitude which we can use to remove all these errors. In reality, you may want to do more cycles of self-calibration to further refine the calibration, however, for practical purposes, we are going to apply our solutions and end here.
</p>
<p>
<ul>
<li>In step 12, enter the parameters to apply all the calibration tables, make a final image, and record the statistics of the final image (use the same parameters as before)<pre class="line-numbers" data-start="378"><code class="language-python"> applycal(vis=target+'.ms',
gaintable=['**','**','**'], calwt=False)
# clean amp&phase self-calibrated image
os.system('rm -rf '+target+'_ap1.clean*')
tclean(vis=target+'.ms',
imagename=target+'_ap1.clean',
cell='**arcsec',
niter=5000, # stop before this if residuals reach noise
cycleniter=500,
gain=0.2,
imsize=['**','**'],
deconvolver='mtmfs',
savemodel='modelcolumn',
nterms=2, # Make spectral index image
interactive=True)
rmsap1=imstat(imagename=target+'_ap1.clean.image.tt0',
box='**,**,**,**')['rms'][0]
peakap1=imstat(imagename=target+'_ap1.clean.image.tt0',
box='**,**,**,**')['max'][0]</code></pre></li>
<li>Once you are done, execute the step and clean the image.</li>
</ul>
</p>
<p>
For this final image using the same boxes as before, I get $S_p \sim 174.771 \,\mathrm{mJy\,beam^{-1}}$ and $\sigma \sim 87.42\,\mathrm{\mu Jy\,beam^{-1}}$. This is another large $\mathrm{S/N}$ increase from $\sim 1126$ to $1999$.
</p>
</section>
<hr/>
<section>
<h2 class="alt"><a name="end_sc"></a>9. Summary of self-calibration</h2>
<p>
While we have only done three rounds of self-calibration, it is worth noting that you would be expected to do more iterations until the improvements in S/N plateaus and no noticeable improvements are seen in the image. Below, you can see the image improvements at each stage of the self-calibration process and the corresponding improvements in the S/N.
</p>
<div class="col-12"><span class="image fit"><img src="plots/self_cal_improvements.png" alt="" /></span></div>
<div class="table-wrapper">
<table>
<thead>
<tr>
<th></th>
<th>Peak brightness</th>
<th>Noise (rms)</th>
<th>S/N</th>
</tr>
<tr>
<th></th>
<th>[$\mathrm{mJy\,beam^{-1}}$] </th>
<th>[$\mathrm{mJy\,beam^{-1}}$]</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><b>Phase referencing</b></td>
<td>160.96</td>
<td>0.715</td>
<td>225</td>
</tr>
<tr>
<td><b>Phase only</b></td>
<td>167.79</td>
<td>0.282</td>
<td>595</td>
</tr>
<tr>
<td><b>Phase x 2</b></td>
<td>174.78</td>
<td>0.155</td>
<td>1126</td>
</tr>
<tr>
<td><b>Amplitude + phase x 2</b></td>
<td>174.77</td>
<td>0.0874</td>
<td>1999</td>
</tr>
<tr>
<td><b>Multiple amp. + phase</b></td>
<td>177.32</td>
<td>0.0479</td>
<td>3701</td>
</tr>
</tbody>
</table>
</div>
<p class="alt">
In the rightmost panel, you can see the result if we continue the self-calibration process (reaching 15 and 30s solution intervals for phase and amplitude, respectively). The majority of these errors have disappeared, the image fidelity has improved significantly and the S/N has peaked at around 3700. If you would like to continue the self-calibration process, the calibration script can be found <a href="./data/3C277.1_imaging_extrasc2024.py" target="_blank">here</a>. Note that not all errors are gone and specialist algorithms and careful flagging of these data is required to improve the S/N further. For the final tutorial on advanced imaging, we shall use this fully self-calibrated data set.
</p>
</section>
<!-- Lists -->
</div>
</section>
</div>
<!-- Footer -->
<footer id="footer" class="wrapper alt">
<div class="inner">
<ul class="menu">
<li>© Jack Radcliffe </li><li>Design: <a href="http://html5up.net" target="_blank">HTML5 UP</a> and <a href="https://www.jb.man.ac.uk/~radcliff" target="_blank">Jack Radcliffe</a></li><li><span id="lastModified"></span></li>
</ul>
</div>
</footer>
<!-- Scripts -->
<script src="assets/js/jquery.min.js"></script>
<script src="assets/js/jquery.scrollex.min.js"></script>
<script src="assets/js/jquery.scrolly.min.js"></script>
<script src="assets/js/browser.min.js"></script>
<script src="assets/js/breakpoints.min.js"></script>
<script src="assets/js/util.js"></script>
<script src="assets/js/main.js"></script>
<script src="assets/js/prism.js"></script>
</body>
</html>