示例#1
0
im = mplim4.Image()

frame = fig.add_subplot(2, 3, 5)
Diff = D.real - mplim.data
f = maputils.FITSimage("m101.fits", externaldata=Diff)
mplim5 = f.Annotatedimage(frame, cmap="spectral")
im = mplim5.Image()

frame.text(0.5,
           yshift,
           "M101 - inv. FFT",
           ha='center',
           va='center',
           transform=frame.transAxes)
s = "Residual with min=%.1g max=%.1g" % (Diff.min(), Diff.max())
frame.text(0.5,
           yshift - 0.08,
           s,
           ha='center',
           va='center',
           transform=frame.transAxes,
           fontsize=8)

mplim.interact_imagecolors()
mplim2.interact_imagecolors()
mplim3.interact_imagecolors()
mplim4.interact_imagecolors()
mplim5.interact_imagecolors()

maputils.showall()
示例#2
0
graticule2.setp_axislabel(plotaxis='left', xpos=labelx)

# fig 3. Velocity - Dec (Version without offsets)
frame3 = fig.add_subplot(4,1,3)
mplim3 = fitsobj.Annotatedimage(frame3)
mplim3.Image()
graticule3 = mplim3.Graticule(offsety=False)
graticule3.setp_axislabel(plotaxis='left', xpos=labelx)
graticule3.setp_ticklabel(plotaxis="left", fmt='DMs')

# fig 4. Velocity - R.A.
frame4 = fig.add_subplot(4,1,4)
fitsobj.set_imageaxes('vel','ra')
mplim4 = fitsobj.Annotatedimage(frame4)
mplim4.Image()
graticule4 = mplim4.Graticule(offsety=False)
graticule4.setp_axislabel(plotaxis='left', xpos=labelx)
graticule4.setp_ticklabel(plotaxis="left", fmt='HMs')
graticule4.Insidelabels(wcsaxis=0, constval='20h34m',
                        rotation=90, fontsize=10,
                        color='r', ha='right')
graticule4.Insidelabels(wcsaxis=1, fontsize=10, fmt="%.2f", color='y')
mplim4.Minortickmarks(graticule4)

#Apply new aspect ratio for the XV maps
mplim2.set_aspectratio(newaspect)
mplim3.set_aspectratio(newaspect)
mplim4.set_aspectratio(newaspect)

maputils.showall()
示例#3
0
    def show_image(self, beam=None, step=None, chunk=None, major=None, minor=None, finaltype=None, type=None, imin=None, imax=None):
        '''
        Function to show an image in the notebook
        beam (string): The beam number to show the image for. 'iterate' will iterate over beams.
        step (string): The step of the pipeline to show the image for. No default. selfcal and final are allowed.
        chunk (string): The frequency chunk to show the image for. 'iterate' will iterate over chunks. No default.
        major(string or int): Major iteration of clean to display. Default is last iteration. pm is also possible. Only for selfcal, not for final step. 'iterate' will iterate over images for major cycles.
        minor (string or int): Minor iteration of clean to display. Default is last iteration. 'iterate' will iterate over images for minor cycles.
        finaltype(string): Type of final image to show. mf and stack are possible.
        type(string): Type of image to show. mask, beam, image, residual, and in case of step=final final are possible. 'all' will show image, mask, residual, and model in one plot.
        imin(float): Minimum cutoff in the image.
        imax(float): Maximum cutoff in the image.
        return (string): String with a path and image name to use for displaying.
        '''
        subs.setinit.setinitdirs(self)
        self.manage_tempdir() # Check if the temporary directory exists and if not create it
        self.clean_tempdir() # Remove any temorary files from the temporary directory
        char_set = string.ascii_uppercase + string.digits # Create a charset for random image name generation
        if any(it == 'iterate' for it in [beam, chunk, major, minor]):
            if beam == 'iterate':
                print('### Not implemented yet ###')
            elif chunk == 'iterate':
                imagelist = glob.glob(self.selfcaldir + '/*/' + str(major).zfill(2) + '/' + str(type) + '_' + str(minor).zfill(2))
                plottext = 'Frequency \nchunk'
            elif major == 'iterate':
                imagelist = glob.glob(self.selfcaldir + '/' + str(chunk).zfill(2) + '/*/' + str(type) + '_' + str(minor).zfill(2))
                plottext = 'Major \ncycle'
            elif minor == 'iterate':
                imagelist = glob.glob(self.selfcaldir + '/' + str(chunk).zfill(2) + '/' + str(major).zfill(2) + '/' + str(type) + '_*')
                plottext = 'Minor \ncycle'
            images = []
            for image in imagelist:
                self.fitsimage = self.tempdir + '/' + ''.join(random.sample(char_set * 8, 8)) + '.fits'
                fits = lib.miriad('fits')
                fits.op = 'xyout'
                fits.in_ = image
                fits.out = self.fitsimage
                fits.go()
                images.append(maputils.FITSimage(self.fitsimage))

            # Do the autoscaling of the image contrast

            if imin == None or imax == None:
                imagedata = pyfits.open(self.fitsimage)[0].data
                imagestd = np.nanstd(imagedata)
                if imin == None:
                    imin = -1*imagestd
                else:
                    pass
                if imax == None:
                    imax = 3*imagestd
                else:
                    pass
            else:
                pass
            print('Minimum/maximum colour range for image: ' + str(imin) + '/' + str(imax))

            # Draw the plot

            fig = plt.figure(figsize=(12, 10))
            frame = fig.add_axes([0.1, 0.15, 0.85, 0.8])
            frame.set_title(str(type).capitalize())

            # Add the slider for selecting the image

            slider_ax = fig.add_axes([0.103, 0.05, 0.672, 0.03])
            slider = Slider(slider_ax, plottext, 0, len(images)-1, valinit = 0, valfmt='%1.0f', dragging=False, color='black')

            # Define the attributes for the plot

            image_object = images[int(round(slider.val))].Annotatedimage(frame, cmap='gist_gray', clipmin=imin, clipmax=imax)
            image_object.Image()
            image_object.Graticule()
            image_object.Colorbar()
            image_object.interact_toolbarinfo()
            image_object.interact_imagecolors()
            image_object.plot()
            fig.canvas.draw()

            # Update the plot if the slider is clicked

            def slider_on_changed(val):
                image_object = images[int(round(slider.val))].Annotatedimage(frame, cmap='gist_gray', clipmin=imin, clipmax=imax)
                image_object.Image()
                image_object.interact_toolbarinfo()
                image_object.interact_imagecolors()
                image_object.plot()
                fig.canvas.draw()

            slider.on_changed(slider_on_changed)
            plt.show()
        else:
            if type == 'all': # Make a 2x2 plot of image, residual, mask, and model of a cycle
                rawimage = self.get_image(beam, step, chunk, major, minor, finaltype, 'image')
                rawresidual = self.get_image(beam, step, chunk, major, minor, finaltype, 'residual')
                rawmask = self.get_image(beam, step, chunk, major, minor, finaltype, 'mask')
                rawmodel = self.get_image(beam, step, chunk, major, minor, finaltype, 'model')
                self.fitsimage = self.tempdir + '/' + ''.join(random.sample(char_set * 8, 8)) + '.fits'
                self.fitsresidual = self.tempdir + '/' + ''.join(random.sample(char_set * 8, 8)) + '.fits'
                self.fitsmask = self.tempdir + '/' + ''.join(random.sample(char_set * 8, 8)) + '.fits'
                self.fitsmodel = self.tempdir + '/' + ''.join(random.sample(char_set * 8, 8)) + '.fits'
                fits = lib.miriad('fits')
                fits.op = 'xyout'
                fits.in_ = rawimage
                fits.out = self.fitsimage
                fits.go()
                fits.in_ = rawresidual
                fits.out = self.fitsresidual
                fits.go()
                fits.in_ = rawmask
                fits.out = self.fitsmask
                fits.go()
                regrid = lib.miriad('regrid')
                regrid.in_ = rawmodel
                tempregrid = self.tempdir + '/' + ''.join(random.sample(char_set * 8, 8))
                regrid.out = tempregrid
                regrid.axes = '1,2'
                regrid.tin = rawimage
                regrid.go()
                fits.in_ = tempregrid
                fits.out = self.fitsmodel
                fits.go()
                im = maputils.FITSimage(self.fitsimage)
                imdata = pyfits.open(self.fitsimage)[0].data
                imstd = np.nanstd(imdata)
                re = maputils.FITSimage(self.fitsresidual)
                redata = pyfits.open(self.fitsresidual)[0].data
                restd = np.nanstd(redata)
                ma = maputils.FITSimage(self.fitsmask)
                madata = pyfits.open(self.fitsmask)[0].data
                mastd = np.nanstd(madata)
                mo = maputils.FITSimage(self.fitsmodel)
                modata = pyfits.open(self.fitsmodel)[0].data
                mostd = np.nanstd(modata)
                fig = plt.figure(figsize=(12, 10))
                frame1 = fig.add_axes([0.1,0.58,0.4,0.4])
                frame1.set_title('Image')
                frame2 = fig.add_axes([0.59,0.58,0.4,0.4])
                frame2.set_title('Residual')
                frame3 = fig.add_axes([0.1, 0.12, 0.4, 0.4])
                frame3.set_title('Mask')
                frame4 = fig.add_axes([0.59, 0.12, 0.4, 0.4])
                frame4.set_title('Model')
                annim1 = im.Annotatedimage(frame1, cmap='gist_gray')
                annim2 = re.Annotatedimage(frame2, cmap='gist_gray')
                annim3 = ma.Annotatedimage(frame3, cmap='gist_gray')
                annim4 = mo.Annotatedimage(frame4, cmap='gist_gray')
                annim1.Image(); annim2.Image(); annim3.Image(); annim4.Image()
                if imin == None:  # Set the displayed colour range if not set
                    immin, remin, mamin, momin = -1*imstd, -1*restd, -1*mastd, -1*mostd
                else:
                    immin, remin, mamin, momin = imin, imin, imin, imin
                if imax == None:
                    immax, remax, mamax, momax = 3*imstd, 3*restd, mastd, mostd
                else:
                    immax, remax, mamax, momax = imax, imax, imax, imax
                print('Minimum colour range for image: ' + str(immin) + ' residual: ' + str(remin) + ' mask: ' + str(mamin) + ' model: ' + str(momin))
                print('Maximum colour range for image: ' + str(immax) + ' residual: ' + str(remax) + ' mask: ' + str(mamax) + ' model: ' + str(momax))
                annim1.set_norm(clipmin=immin, clipmax=immax); annim2.set_norm(clipmin=remin, clipmax=remax); annim3.set_norm(clipmin=0.0, clipmax=mamax); annim4.set_norm(clipmin=0.0, clipmax=momax)
                annim1.Colorbar(); annim2.Colorbar(); annim3.Colorbar(); annim4.Colorbar()
                annim1.Graticule(); annim2.Graticule(); annim3.Graticule(); annim4.Graticule()
                annim1.interact_toolbarinfo(); annim2.interact_toolbarinfo(); annim3.interact_toolbarinfo(); annim4.interact_toolbarinfo()
                annim1.interact_imagecolors(); annim2.interact_imagecolors(); annim3.interact_imagecolors(); annim4.interact_imagecolors()
                tdict = dict(color='g', fontsize=10, va='bottom', ha='left')
                fig.text(0.01, 0.01, annim1.get_colornavigation_info(), tdict)
                maputils.showall()
            else: # Make a simple plot of one specified image
                rawimage = self.get_image(beam, step, chunk, major, minor, finaltype, type)
                self.fitsimage =  self.tempdir + '/' + ''.join(random.sample(char_set * 8, 8)) + '.fits'
                fits = lib.miriad('fits')
                fits.op = 'xyout'
                fits.in_ = rawimage
                fits.out = self.fitsimage
                fits.go()
                f = maputils.FITSimage(self.fitsimage)
                imdata = pyfits.open(self.fitsimage)[0].data
                imstd = np.nanstd(imdata)
                fig = plt.figure(figsize=(12,10))
                frame = fig.add_axes([0.1, 0.15, 0.85, 0.8])
                annim = f.Annotatedimage(frame, cmap='gist_gray')
                annim.Image()
                if imin == None:  # Set the displayed colour range if not set
                    imin = -1*imstd
                if imax == None:
                    imax = 3*imstd
                print('Minimum/maximum colour range for image: ' + str(imin) + '/' + str(imax))
                annim.set_norm(clipmin=imin,clipmax=imax)
                annim.Colorbar()
                annim.Graticule()
                annim.interact_toolbarinfo()
                annim.interact_imagecolors()
                units = 'unknown'
                if 'BUNIT' in f.hdr:
                    units = f.hdr['BUNIT']
                helptext = "File: [%s]  Data units:  [%s]\n" % (rawimage, units)
                helptext += annim.get_colornavigation_info()
                tdict = dict(color='g', fontsize=10, va='bottom', ha='left')
                fig.text(0.01, 0.01, helptext, tdict)
                maputils.showall()