Skip to content

Commit

Permalink
modified plotting functions
Browse files Browse the repository at this point in the history
  • Loading branch information
klbouman committed Jan 9, 2019
1 parent 0e3cfff commit 8ecb4df
Showing 1 changed file with 55 additions and 21 deletions.
76 changes: 55 additions & 21 deletions ehtim/image.py
Expand Up @@ -2328,7 +2328,7 @@ def errfunc(p):
def contour(self, contour_levels=[0.1, 0.25, 0.5, 0.75], contour_cfun=plt.cm.RdYlGn, legend=True, show_im=True,
cfun='afmhot',scale='lin', interp='gaussian', gamma=0.5, dynamic_range=1.e3,
plotp=False, nvec=20, pcut=0.01, label_type='ticks', has_title=True,
has_cbar=True, cbar_lims=(), cbar_unit = ('Jy', 'pixel'),
has_cbar=True, cbar_lims=(), cbar_unit = ('Jy', 'pixel'), contour_im=False, power=0,
export_pdf="", show=True, beamparams=None, cbar_orientation="vertical", scale_lw=1, beam_lw=1, cbar_fontsize=12, axis=None, scale_fontsize=12):

"""Display the image.
Expand Down Expand Up @@ -2384,21 +2384,25 @@ def contour(self, contour_levels=[0.1, 0.25, 0.5, 0.75], contour_cfun=plt.cm.RdY
if axis is not None:
axis = image.display(cfun=cfun,scale=scale, interp=interp, gamma=gamma, dynamic_range=dynamic_range,
plotp=plotp, nvec=nvec, pcut=pcut, label_type=label_type, has_title=has_title,
has_cbar=has_cbar, cbar_lims=cbar_lims, cbar_unit=cbar_unit, beamparams=beamparams, cbar_orientation=cbar_orientation, scale_lw=1, beam_lw=1, cbar_fontsize=12, axis=axis, scale_fontsize=scale_fontsize)
has_cbar=has_cbar, cbar_lims=cbar_lims, cbar_unit=cbar_unit, beamparams=beamparams, cbar_orientation=cbar_orientation, scale_lw=1, beam_lw=1, cbar_fontsize=12, axis=axis, scale_fontsize=scale_fontsize,power=power)
else:
image.display(cfun=cfun,scale=scale, interp=interp, gamma=gamma, dynamic_range=dynamic_range,
plotp=plotp, nvec=nvec, pcut=pcut, label_type=label_type, has_title=has_title,
has_cbar=has_cbar, cbar_lims=cbar_lims, cbar_unit=cbar_unit, beamparams=beamparams, cbar_orientation=cbar_orientation, scale_lw=1, beam_lw=1, cbar_fontsize=12, axis=None, scale_fontsize=scale_fontsize)
has_cbar=has_cbar, cbar_lims=cbar_lims, cbar_unit=cbar_unit, beamparams=beamparams, cbar_orientation=cbar_orientation, scale_lw=1, beam_lw=1, cbar_fontsize=12, axis=None, scale_fontsize=scale_fontsize, power=power)
else:
image.imvec = 0.0*image.imvec
if contour_im==False:
image.imvec = 0.0*image.imvec
else:
image = contour_im.copy()

if axis is not None:
axis = image.display(cfun=cfun,scale=scale, interp=interp, gamma=gamma, dynamic_range=dynamic_range,
plotp=plotp, nvec=nvec, pcut=pcut, label_type=label_type, has_title=has_title,
has_cbar=has_cbar, cbar_lims=cbar_lims, cbar_unit=cbar_unit, beamparams=beamparams, cbar_orientation=cbar_orientation, scale_lw=1, beam_lw=1, cbar_fontsize=12, axis=axis, scale_fontsize=scale_fontsize)
has_cbar=has_cbar, cbar_lims=cbar_lims, cbar_unit=cbar_unit, beamparams=beamparams, cbar_orientation=cbar_orientation, scale_lw=1, beam_lw=1, cbar_fontsize=12, axis=axis, scale_fontsize=scale_fontsize,power=power)
else:
image.display(cfun=cfun,scale=scale, interp=interp, gamma=gamma, dynamic_range=dynamic_range,
plotp=plotp, nvec=nvec, pcut=pcut, label_type=label_type, has_title=has_title,
has_cbar=has_cbar, cbar_lims=cbar_lims, cbar_unit=cbar_unit, beamparams=beamparams, cbar_orientation=cbar_orientation, scale_lw=1, beam_lw=1, cbar_fontsize=12, axis=None, scale_fontsize=scale_fontsize)
has_cbar=has_cbar, cbar_lims=cbar_lims, cbar_unit=cbar_unit, beamparams=beamparams, cbar_orientation=cbar_orientation, scale_lw=1, beam_lw=1, cbar_fontsize=12, axis=None, scale_fontsize=scale_fontsize,power=power)

if axis is None: ax = plt.gcf()
if axis is not None: ax = axis
Expand Down Expand Up @@ -2434,7 +2438,8 @@ def display(self, pol=None, cfun='afmhot', interp='gaussian',
plotp=False, nvec=20, pcut=0.1, log_offset=False,
label_type='ticks', has_title=True,
has_cbar=True, only_cbar=False, cbar_lims=(), cbar_unit = ('Jy', 'pixel'),
export_pdf="", pdf_pad_inches=0.0, show=True, beamparams=None, cbar_orientation="vertical", scinot=(0,0), scale_lw=1, beam_lw=1, cbar_fontsize=12, axis=None, scale_fontsize=12):
export_pdf="", pdf_pad_inches=0.0, show=True, beamparams=None, cbar_orientation="vertical", scinot=False,
scale_lw=1, beam_lw=1, cbar_fontsize=12, axis=None, scale_fontsize=12, power=0):

"""Display the image.
Expand Down Expand Up @@ -2505,6 +2510,10 @@ def display(self, pol=None, cfun='afmhot', interp='gaussian',
factor = 3.254e13/(self.rf**2 * self.psize**2)
fluxunit = 'Brightness Temperature (K)'
areaunit = ''
if power!=0:
fluxunit = (r'Brightness Temperature ($10^{{' + str(power) + '}}$ K)')
else:
fluxunit = 'Brightness Temperature (K)'
elif cbar_unit[0] in ['Jy']:
fluxunit = 'Jy'
factor *= 1.
Expand All @@ -2517,39 +2526,55 @@ def display(self, pol=None, cfun='afmhot', interp='gaussian',

if len(cbar_unit) == 1 or cbar_unit[0] == 'Tb':
factor *= 1.

elif cbar_unit[1] == 'pixel':
factor *= 1.
if power!=0:
areaunit = areaunit + (r' ($10^{{' + str(power) + '}}$ K)')

elif cbar_unit[1] in ['$arcseconds$^2$','as$^2$','as2']:
areaunit='as$^2$'
fovfactor = self.xdim*self.psize*(1/RADPERAS)
factor *= (1./fovfactor)**2 / (1./self.xdim)**2
if power!=0:
areaunit = areaunit + (r' ($10^{{' + str(power) + '}}$ K)')

elif cbar_unit[1] in ['$\m-arcseconds$^2$','mas$^2$','mas2']:
areaunit='mas$^2$'
fovfactor = self.xdim*self.psize*(1/RADPERUAS) / 1000.
factor *= (1./fovfactor)**2 / (1./self.xdim)**2
if power!=0:
areaunit = areaunit + (r' ($10^{{' + str(power) + '}}$ K)')

elif cbar_unit[1] in ['$\mu$-arcseconds$^2$','$\mu$as$^2$','muas2']:
areaunit='$\mu$as$^2$'
fovfactor = self.xdim*self.psize*(1/RADPERUAS)
factor *= (1./fovfactor)**2 / (1./self.xdim)**2
if power!=0:
areaunit = areaunit + (r' ($10^{{' + str(power) + '}}$ K)')

elif cbar_unit[1]=='beam':
if (beamparams is None or beamparams==False):
print("Cannot convert to Jy/beam without beamparams!")
else:
areaunit='beam'
beamarea=(2.0*np.pi*beamparams[0]*beamparams[1]/(8.0*np.log(2)))
factor = beamarea/(self.psize**2)
if power!=0:
areaunit = areaunit + (r' ($10^{{' + str(power) + '}}$ K)')

else:
raise ValueError('cbar_unit ' + cbar_unit[1] + ' is not a possible option')

if not plotp:
# Plot single polarization image
try:
imvec = np.array(self._imdict[pol]).reshape(-1)
imvec = np.array(self._imdict[pol]).reshape(-1) / (10.**power)
except KeyError:
try:
if self.polrep=='stokes': im2 = self.switch_polrep('circ')
elif self.polrep=='circ': im2 = self.switch_polrep('stokes')
imvec = np.array(im2._imdict[pol]).reshape(-1)
imvec = np.array(im2._imdict[pol]).reshape(-1) / (10.**power)
except KeyError:
raise Exception("Cannot make pol %s image in display()!" % pol)

Expand Down Expand Up @@ -2581,6 +2606,8 @@ def display(self, pol=None, cfun='afmhot', interp='gaussian',
unit = '(' + unit + ')^' + str(gamma)

if cbar_lims:
cbar_lims[0] = cbar_lims[0] / (10.**power)
cbar_lims[1] = cbar_lims[1] / (10.**power)
imarr[imarr>cbar_lims[1]] = cbar_lims[1]
imarr[imarr<cbar_lims[0]] = cbar_lims[0]

Expand Down Expand Up @@ -2611,16 +2638,16 @@ def display(self, pol=None, cfun='afmhot', interp='gaussian',

if cbar_lims:
plt.clim(cbar_lims[0],cbar_lims[1])

cb.formatter.set_powerlimits(scinot)
cb.update_ticks()
if scinot:
cb.formatter.set_powerlimits((0,0))
cb.update_ticks()

else: #plot Stokes parameters!
im_stokes = self.switch_polrep(polrep_out='stokes')
imvec = np.array(im_stokes.imvec).reshape(-1)
qvec = np.array(im_stokes.qvec).reshape(-1)
uvec = np.array(im_stokes.uvec).reshape(-1)
vvec = np.array(im_stokes.vvec).reshape(-1)
imvec = np.array(im_stokes.imvec).reshape(-1) / (10**power)
qvec = np.array(im_stokes.qvec).reshape(-1) / (10**power)
uvec = np.array(im_stokes.uvec).reshape(-1) / (10**power)
vvec = np.array(im_stokes.vvec).reshape(-1) / (10**power)

if len(imvec)==0: imvec = np.zeros(im_stokes.ydim*im_stokes.xdim)
if len(qvec)==0: qvec = np.zeros(im_stokes.ydim*im_stokes.xdim)
Expand Down Expand Up @@ -2656,6 +2683,8 @@ def display(self, pol=None, cfun='afmhot', interp='gaussian',
unit = '(' + unit + ')^gamma'

if cbar_lims:
cbar_lims[0] = cbar_lims[0] / (10.**power)
cbar_lims[1] = cbar_lims[1] / (10.**power)
imarr2[imarr2>cbar_lims[1]] = cbar_lims[1]
imarr2[imarr2<cbar_lims[0]] = cbar_lims[0]

Expand Down Expand Up @@ -2803,8 +2832,8 @@ def display(self, pol=None, cfun='afmhot', interp='gaussian',

def overlay_display(self, im_list, color_coding = np.array([[1, 0, 1], [0, 1, 0]]),
export_pdf="", show=True, f=False,
shift=[0,0], final_fov=False,
scale='lin', gamma=0.5, dynamic_range=[1.e3]):
shift=[0,0], final_fov=False, interp='gaussian',
scale='lin', gamma=0.5, dynamic_range=[1.e3], rescale=True):

"""Overlay primary polarization images of a list of images to compare structures.
Expand Down Expand Up @@ -2871,15 +2900,20 @@ def overlay_display(self, im_list, color_coding = np.array([[1, 0, 1], [0, 1, 0]
else:
immtx = im_list_shift[i].imvec.reshape(im0_pad.ydim, im0_pad.xdim)

immtx = immtx - np.min(np.min(immtx))
immtx = immtx / np.max(np.max(immtx))
if rescale:
immtx = immtx - np.min(np.min(immtx))
immtx = immtx / np.max(np.max(immtx))

for c in range(0,3):
composite_img[:,:,c] = composite_img[:,:,c] + (color_coding[i+1,c] * immtx)

if rescale==False:
composite_img = composite_img - np.min(np.min(np.min(composite_img)))
composite_img = composite_img / np.max(np.max(np.max(composite_img)))

plt.subplot(111)
plt.title('%s MJD %i %.2f GHz' % (self.source, self.mjd, self.rf/1e9), fontsize=20)
im = plt.imshow(composite_img)
im = plt.imshow(composite_img, interpolation=interp)
#plt.colorbar(im, fraction=0.046, pad=0.04, label=unit)
xticks = ticks(im0_pad.xdim, im0_pad.psize/RADPERAS/1e-6)
yticks = ticks(im0_pad.ydim, im0_pad.psize/RADPERAS/1e-6)
Expand Down

0 comments on commit 8ecb4df

Please sign in to comment.