| [1636] | 1 | ========================================================= | 
|---|
|  | 2 | Tutorial 4 â Data Reduction for Parkes Methanol Multibeam | 
|---|
|  | 3 | ========================================================= | 
|---|
|  | 4 |  | 
|---|
|  | 5 | .. sectionauthor:: Jimi Green | 
|---|
|  | 6 |  | 
|---|
|  | 7 | Files | 
|---|
|  | 8 | ----- | 
|---|
|  | 9 |  | 
|---|
|  | 10 | * mmb-mx.rpf Data file (9.4 Mb) | 
|---|
|  | 11 |  | 
|---|
|  | 12 | Data Log | 
|---|
|  | 13 | -------- | 
|---|
|  | 14 |  | 
|---|
|  | 15 | * 7 Spectra taken with Parkes Methanol Multibeam | 
|---|
|  | 16 |  | 
|---|
|  | 17 | Instructions | 
|---|
|  | 18 | ------------ | 
|---|
|  | 19 |  | 
|---|
|  | 20 | 1. Work through the list of commands given in the text file to | 
|---|
|  | 21 | calibrate data taken with the Parkes Methanol Multibeam. | 
|---|
|  | 22 | Commands should be typed line-by-line into ASAP. Seek help | 
|---|
|  | 23 | from the tutors if there are any commands you donât | 
|---|
|  | 24 | understand. | 
|---|
|  | 25 | 2. Write a python script to automate the calibration procedure for | 
|---|
|  | 26 | data taken with the Parkes Methanol Multibeam. Incorporate | 
|---|
|  | 27 | the list of commands used in step 1 as well as a routine to cycle | 
|---|
|  | 28 | through the 7 different beams. | 
|---|
|  | 29 |  | 
|---|
|  | 30 | **Note:** Your python script should be executed in a terminal (and | 
|---|
|  | 31 | not within ASAP) with the following command:: | 
|---|
|  | 32 |  | 
|---|
|  | 33 | python -i myscript.py | 
|---|
|  | 34 |  | 
|---|
|  | 35 | Commands | 
|---|
|  | 36 | -------- | 
|---|
|  | 37 |  | 
|---|
|  | 38 | .. code-block:: python | 
|---|
|  | 39 |  | 
|---|
|  | 40 | # Load data (with filename mmb-mx.rpf) into memory and display | 
|---|
|  | 41 | data = scantable("mmb-mx.rpf") | 
|---|
|  | 42 | print data | 
|---|
|  | 43 | # Set the polarisation feed type | 
|---|
|  | 44 | data.set_feedtype("circular") | 
|---|
|  | 45 | # Select just the first IF (the data actually contains two, the | 
|---|
|  | 46 | # methanol transition at 6.7GHz and the excited-state OH transition | 
|---|
|  | 47 | # at 6GHz, but we will only look at methanol). | 
|---|
|  | 48 | sel=selector() | 
|---|
|  | 49 | sel.set_ifs(0) | 
|---|
|  | 50 | data.set_selection(sel) | 
|---|
|  | 51 | # Set the rest frequency | 
|---|
|  | 52 | data.set_restfreqs(6.6685192e9) | 
|---|
|  | 53 | # Set the cal values for the 7 beams, both polarisations. | 
|---|
|  | 54 | calfact = (( 2.29, 2.28 ), ( 2.18, 1.93 ), ( 4.37, 4.37 ), \ | 
|---|
|  | 55 | (2.53,3.20 ), ( 3.69, 3.89 ), ( 3.74, 3.51 ), ( 1.98, 1.70 )) | 
|---|
|  | 56 | # Apply cal factors to first beam, first polarisation | 
|---|
|  | 57 | sel.reset() | 
|---|
|  | 58 | sel.set_beams(0) | 
|---|
|  | 59 | sel.set_polarisations(0) | 
|---|
|  | 60 | data.set_selection(sel) | 
|---|
|  | 61 | data.scale(calfact[0][0], insitu=True, tsys=True) | 
|---|
|  | 62 | # Apply cal factors to first beam, second polarisation | 
|---|
|  | 63 | sel.reset() | 
|---|
|  | 64 | sel.set_beams(0) | 
|---|
|  | 65 | sel.set_polarisations(1) | 
|---|
|  | 66 | data.set_selection(sel) | 
|---|
|  | 67 | data.scale(calfact[0][1], insitu=True, tsys=True) | 
|---|
|  | 68 | # Now repeat above 10 steps for the other 6 beams | 
|---|
|  | 69 | # Reset selection parameter | 
|---|
|  | 70 | data.set_selection() | 
|---|
|  | 71 | # Set plotter output to show both polarisations on the same plot, | 
|---|
|  | 72 | # but each beam on a separate plot. | 
|---|
|  | 73 | plotter.plot(data) | 
|---|
|  | 74 | plotter.set_mode("p","b") | 
|---|
|  | 75 | # Plot the first scan only | 
|---|
|  | 76 | sel = selector() | 
|---|
|  | 77 | sel.set_scans(1) | 
|---|
|  | 78 | plotter.set_selection(sel) | 
|---|
|  | 79 | # Average "off-source" scans for each beam, then use as the | 
|---|
|  | 80 | # reference scan to form a quotient. | 
|---|
|  | 81 | q = data.mx_quotient() | 
|---|
|  | 82 | plotter.plot(q) | 
|---|
|  | 83 | # Define the channel unit. | 
|---|
|  | 84 | q.set_unit("km/s") | 
|---|
|  | 85 | plotter.plot() | 
|---|
|  | 86 | plotter.set_range(-60,-10) | 
|---|
|  | 87 | # Average all the multiple beam data together to form | 
|---|
|  | 88 | # a long integration spectrum. | 
|---|
|  | 89 | avb = q.average_beam() | 
|---|
|  | 90 | plotter.plot(avb) | 
|---|
|  | 91 | plotter.set_range() | 
|---|
|  | 92 | # Average polarisations together | 
|---|
|  | 93 | avp = avb.average_pol() | 
|---|
|  | 94 | plotter.plot(avp) | 
|---|
|  | 95 | # Fit a linear baseline (avoiding the maser feature) | 
|---|
|  | 96 | msk=avp.create_mask([-110,-70],[10,40]) | 
|---|
|  | 97 | avp.poly_baseline(msk,order=1) | 
|---|
|  | 98 | plotter.plot(avp) | 
|---|
|  | 99 | # Make a nice file | 
|---|
|  | 100 | plotter.set_colors("black") | 
|---|
|  | 101 | plotter.set_legend(mode=-1) | 
|---|
|  | 102 | plotter.set_title("G300.969+1.148") | 
|---|
|  | 103 | plotter.save("G300p96.ps") | 
|---|