[1636] | 1 | ==========================================================================
|
---|
| 2 | Tutorial 3 - Spectral-line gaussian component fitting and rms noise levels
|
---|
| 3 | ==========================================================================
|
---|
| 4 |
|
---|
| 5 | .. sectionauthor:: Shari Breen
|
---|
| 6 |
|
---|
| 7 | Files
|
---|
| 8 | -----
|
---|
| 9 |
|
---|
| 10 | * mon.asap: Data file
|
---|
| 11 |
|
---|
| 12 | Data Log
|
---|
| 13 | --------
|
---|
| 14 |
|
---|
| 15 | * ON-OFF Position switching mode with Hobart
|
---|
| 16 |
|
---|
| 17 | * 4 scans (2 OFF and 2 ON)
|
---|
| 18 |
|
---|
| 19 | * Dual pol, 1 IF
|
---|
| 20 |
|
---|
| 21 | Instructions
|
---|
| 22 | ------------
|
---|
| 23 |
|
---|
| 24 | * Work through the list of commands given in the text file to calibrate the data
|
---|
| 25 | and fit gaussian components to the emission. The commands should be typed
|
---|
| 26 | into ASAP line-by-line until you get to the ADVANCED FITTING step which
|
---|
| 27 | will require you to experiment with the parameters.
|
---|
| 28 |
|
---|
| 29 | * ADDITIONAL exercise: Determine the rms noise in the spectrum using the
|
---|
| 30 | create mask function you learned in the first section and the stat command
|
---|
| 31 | specified in the text file.
|
---|
| 32 |
|
---|
| 33 | Examples - Fitting gaussians
|
---|
| 34 | ----------------------------
|
---|
| 35 |
|
---|
| 36 | If you only see a file called *mon.asap.tar*, untar it before getting started
|
---|
| 37 |
|
---|
| 38 | .. code-block: shell
|
---|
| 39 |
|
---|
| 40 | tar xf mon.asap.tar
|
---|
| 41 | asap
|
---|
| 42 |
|
---|
| 43 | .. code-block:: python
|
---|
| 44 |
|
---|
| 45 | # Load the scantable for the source into ASAP
|
---|
| 46 | mon = scantable("mon.asap")
|
---|
| 47 | mon.summary()
|
---|
| 48 | # Select the on-source scans
|
---|
| 49 | source=mon.get_scan([1,3])
|
---|
| 50 | # Select the reference scans
|
---|
| 51 | ref=mon.get_scan([0,2])
|
---|
| 52 | # Make the quotient spectra and plot it
|
---|
| 53 | quot=quotient(source,ref)
|
---|
| 54 | plotter.plot(quot)
|
---|
| 55 | # Remove the baseline and plot
|
---|
| 56 | quot.auto_poly_baseline()
|
---|
| 57 | plotter.plot(quot)
|
---|
| 58 | # Average the 2 scans together
|
---|
| 59 | av=quot.average_time(align=True)
|
---|
| 60 | plotter.plot(av)
|
---|
| 61 | # Check the the rest frequency is set correctly and define unit as km/s
|
---|
| 62 | print av.get_restfreqs()
|
---|
| 63 | av.set_unit("km/s")
|
---|
| 64 | plotter.plot(av)
|
---|
| 65 | # Scale the two polarizations separately
|
---|
| 66 | sel=selector()
|
---|
| 67 | sel.set_polarisations(0)
|
---|
| 68 | av.set_selection(sel)
|
---|
| 69 | av.scale(50.6)
|
---|
| 70 | sel.set_polarisations(1)
|
---|
| 71 | av.set_selection(sel)
|
---|
| 72 | av.scale(32.5)
|
---|
| 73 | # unset the selection
|
---|
| 74 | av.set_selection()
|
---|
| 75 | # Average the polarizations together
|
---|
| 76 | avpol=av.average_pol()
|
---|
| 77 | # Plot the data
|
---|
| 78 | plotter.plot(avpol)
|
---|
| 79 | # Create a mask that contains the emission
|
---|
| 80 | msk=avpol.create_mask([-10,30])
|
---|
| 81 | # Set up some fitting parameters
|
---|
| 82 | f=fitter()
|
---|
| 83 | f.set_scan(avpol,msk)
|
---|
| 84 | f.set_function(gauss=2)
|
---|
| 85 | # Fit a gaussian to the emission, plot the emission and fit
|
---|
| 86 | f.fit()
|
---|
| 87 | f.plot()
|
---|
| 88 | # Save the plot
|
---|
| 89 | plotter.save("monr2.eps")
|
---|
| 90 | # Get the fit parameters
|
---|
| 91 | f.get_parameters()
|
---|
| 92 | # Plot the fit residuals
|
---|
| 93 | f.plot(residual=True)
|
---|
| 94 | # Plot each of the fitted gaussians separately, with or without the fit parameters overlaid
|
---|
| 95 | f.plot(components=0,plotparms=True)
|
---|
| 96 |
|
---|
| 97 | f.plot(components=1)
|
---|
| 98 |
|
---|
| 99 |
|
---|
| 100 | ADVANCED FITTING
|
---|
| 101 | ----------------
|
---|
| 102 |
|
---|
| 103 | Sometimes it is necessary to force some of the fitting pa-
|
---|
| 104 | rameters such as peak or FWHM. For example, if you want to fix the peak of the
|
---|
| 105 | first gaussian component to 39 Jy you can use the following command:
|
---|
| 106 |
|
---|
| 107 | .. code-block:: python
|
---|
| 108 |
|
---|
| 109 | f.set_gauss_parameters(39, 10.2, 1, peakfixed=1, component=0)
|
---|
| 110 |
|
---|
| 111 | You can now experiment with forcing the values of the different parameters. To
|
---|
| 112 | look at the help file on this function type
|
---|
| 113 | help fitter.set_gauss parameters
|
---|
| 114 | Additional Exercise: Determine the rms noise in the spectrum.
|
---|
| 115 |
|
---|
| 116 | 1) Create a mask that excludes the emission (if you leave it in the rms noise will be
|
---|
| 117 | significantly inflated), using the same command as before except this time you will
|
---|
| 118 | have to specify two ranges of values either side of the emission.
|
---|
| 119 |
|
---|
| 120 | 2) Find the rms noise of the spectrum:
|
---|
| 121 |
|
---|
| 122 | .. code-block:: python
|
---|
| 123 |
|
---|
| 124 | avpol.stats(stat="rms",mask=mymask)
|
---|
| 125 |
|
---|
| 126 | The stats function can be used to extract many other statistics from the data
|
---|
| 127 | such as the maximum and minimum values, the median value and many more. Use
|
---|
| 128 | help to find out how to extract these statistics from the spectrum.
|
---|
| 129 |
|
---|