| plot_utilities.py | plot_utilities.py | |||
|---|---|---|---|---|
| skipping to change at line 180 | skipping to change at line 180 | |||
| if (plot_likelihood): | if (plot_likelihood): | |||
| ax.plot(np.exp(-chain['reduced_chi'] )) | ax.plot(np.exp(-chain['reduced_chi'] )) | |||
| ax.set_ylim([0,1]) | ax.set_ylim([0,1]) | |||
| ax.set_title(r'${\cal L}=\exp$[-$\chi^2$]') | ax.set_title(r'${\cal L}=\exp$[-$\chi^2$]') | |||
| else: | else: | |||
| ax.plot(np.log10(chain['reduced_chi'][idx] - np.min(cha in['reduced_chi']))) | ax.plot(np.log10(chain['reduced_chi'][idx] - np.min(cha in['reduced_chi']))) | |||
| if method == 'MAP': | if method == 'MAP': | |||
| ax.axvline(idx_map,lw=1) | ax.axvline(idx_map,lw=1) | |||
| ax.set_title(r'$\log$ [$\chi^2 - \chi^2_{min}$]') | ax.set_title(r'$\log$ [$\chi^2 - \chi^2_{min}$]') | |||
| if method is 'chi_sorted': | if method == 'chi_sorted': | |||
| ax.set_xticks([]) | ax.set_xticks([]) | |||
| else: | else: | |||
| ax.set_xticks(np.arange(2.) / 2 * np.size(idx)) | ax.set_xticks(np.arange(2.) / 2 * np.size(idx)) | |||
| fig.subplots_adjust(wspace=0.3) | fig.subplots_adjust(wspace=0.3) | |||
| if filename is None: | if filename is None: | |||
| plot.show() | plot.show() | |||
| else: | else: | |||
| plot.savefig(filename) | plot.savefig(filename) | |||
| skipping to change at line 227 | skipping to change at line 227 | |||
| if filepath is not None: | if filepath is not None: | |||
| name, extension = os.path.splitext(filepath) | name, extension = os.path.splitext(filepath) | |||
| supported_extensions = ['.png', '.pdf'] | supported_extensions = ['.png', '.pdf'] | |||
| if not extension in supported_extensions: | if not extension in supported_extensions: | |||
| raise ValueError("Extension '%s' is not supported, use %s." , | raise ValueError("Extension '%s' is not supported, use %s." , | |||
| extension, ', '.join(supported_extensions) ) | extension, ', '.join(supported_extensions) ) | |||
| chain = self.chain.copy() | chain = self.chain.copy() | |||
| #plot geweke has no meaning with chi_sorted | #plot geweke has no meaning with chi_sorted | |||
| if self.method is not 'chi_sorted': | if self.method != 'chi_sorted': | |||
| if fontsize is None: | if fontsize is None: | |||
| fontsize = plot.rcParams['font.size'] | fontsize = plot.rcParams['font.size'] | |||
| fig = plot.figure(2, figsize=(16, 9)) | fig = plot.figure(2, figsize=(16, 9)) | |||
| names = chain.dtype.names | names = chain.dtype.names | |||
| short_dict = self.galaxy.short_dict() | short_dict = self.galaxy.short_dict() | |||
| plot.clf() # clear current figure | plot.clf() # clear current figure | |||
| plot.subplots_adjust(wspace=0.32, hspace=0.32, | plot.subplots_adjust(wspace=0.32, hspace=0.32, | |||
| skipping to change at line 362 | skipping to change at line 362 | |||
| for s in show[1:]: | for s in show[1:]: | |||
| r.append((self.galaxy[s] - self.galaxy.stdev[s] * nsigm a, \ | r.append((self.galaxy[s] - self.galaxy.stdev[s] * nsigm a, \ | |||
| self.galaxy[s] + self.galaxy.stdev[s] * nsigma)) | self.galaxy[s] + self.galaxy.stdev[s] * nsigma)) | |||
| best.append(self.galaxy[s]) | best.append(self.galaxy[s]) | |||
| ls.append(shorts_dict[s]) | ls.append(shorts_dict[s]) | |||
| if fontsize is None: | if fontsize is None: | |||
| fontsize = plot.rcParams['font.size'] | fontsize = plot.rcParams['font.size'] | |||
| #@fixme how to make onto fig=plot.figure(3) | #@fixme how to make onto fig=plot.figure(3) | |||
| corner.corner(self.sub_chain[show].as_array().tolist(),\ | corner.corner(self.sub_chain[show].to_pandas(),\ | |||
| labels=ls, truths=best, range=r, \ | labels=ls, truths=best, range=r, \ | |||
| smooth=smooth, label_kwargs={'fontname':'sans -serif', 'fontsize': fontsize}) | smooth=smooth, label_kwargs={'fontname':'sans -serif', 'fontsize': fontsize}) | |||
| if filepath is None: | if filepath is None: | |||
| plot.show() | plot.show() | |||
| else: | else: | |||
| plot.savefig(filepath) | plot.savefig(filepath) | |||
| plot.close() | plot.close() | |||
| else: | else: | |||
| skipping to change at line 535 | skipping to change at line 535 | |||
| if filepath is None: | if filepath is None: | |||
| fig.show() | fig.show() | |||
| else: | else: | |||
| fig.savefig(filepath) | fig.savefig(filepath) | |||
| plot.close() | plot.close() | |||
| rotation_curve = [pixscale * xx[good], xx[good]/self.galaxy.rad ius, slice_f[good], slice_v[good], slice_s[good]] | rotation_curve = [pixscale * xx[good], xx[good]/self.galaxy.rad ius, slice_f[good], slice_v[good], slice_s[good]] | |||
| rotation_name=re.sub('true_maps','true_Vrot',filepath[:-4])+'.d at' | rotation_name=re.sub('true_maps','true_Vrot',filepath[:-4])+'.d at' | |||
| asciitable.write(rotation_curve, \ | asciitable.write(rotation_curve, \ | |||
| output=rotation_name,Writer=asciitable.FixedWi dth, \ | output=rotation_name,format='fixed_width', \ | |||
| names=['dx_arcsec', 'rad_Re', 'flux_slit', 'v_ kms', 'sig_kms'], overwrite=True) | names=['dx_arcsec', 'rad_Re', 'flux_slit', 'v_ kms', 'sig_kms'], overwrite=True) | |||
| def plot_obs_vfield(self, filepath=None, mask=None, contours=None, | def plot_obs_vfield(self, filepath=None, mask=None, contours=None, | |||
| fontsize=10, slitwidth=3): | fontsize=10, slitwidth=3): | |||
| """ | """ | |||
| plot the observed 2d maps and the 1d along the major axis | plot the observed 2d maps and the 1d along the major axis | |||
| mask: [optional] 2d nd-array | mask: [optional] 2d nd-array | |||
| mask for display purposes | mask for display purposes | |||
| None: [default] default mask is flux>max(flux)/20. | None: [default] default mask is flux>max(flux)/20. | |||
| skipping to change at line 919 | skipping to change at line 919 | |||
| xaxis = np.where(b!=0, bn.nansum(dist_rot, axis=(0)) / b, 0.) | xaxis = np.where(b!=0, bn.nansum(dist_rot, axis=(0)) / b, 0.) | |||
| return xaxis, profile | return xaxis, profile | |||
| def _make_maps_Epinat(self, cube=None, mask=False, cut_level=50, use_co nv='other'): | def _make_maps_Epinat(self, cube=None, mask=False, cut_level=50, use_co nv='other'): | |||
| """ | """ | |||
| make observed maps from true maps using formulas in Epinat 2010 | make observed maps from true maps using formulas in Epinat 2010 | |||
| :param cube: input cube for computing masking | :param cube: input cube for computing masking | |||
| :param mask: boolean [default: None] to apply masking | :param mask: boolean [default: None] to apply masking | |||
| :param use_conv: astropy [default] | scipy | :param use_conv: other [default] | scipy | astropy | |||
| :param cut_level: 50 [default] cut used if mask=True | :param cut_level: 50 [default] cut used if mask=True | |||
| :return: | :return: | |||
| """ | """ | |||
| if (cube is None): | if (cube is None): | |||
| cube = self.convolved_cube | cube = self.convolved_cube | |||
| if mask is True: | if mask is True: | |||
| # default mask is flux>max(flux)/30. | # default mask is flux>max(flux)/30. | |||
| mask = (bn.nansum(cube.data,0) > bn.nanmax(cube.data.sum(0)) / cut_level ) | mask = (bn.nansum(cube.data,0) > bn.nanmax(cube.data.sum(0)) / cut_level ) | |||
| else: | else: | |||
| mask = np.ones_like(cube.data[1,:,:]) | mask = np.ones_like(cube.data[1,:,:]) | |||
| #Eq A15 Epinat | #Eq A15 Epinat | |||
| psf2d = self.instrument.psf3d.sum(axis=0) | psf2d = self.instrument.psf3d.sum(axis=0) | |||
| if use_conv is 'scipy' : | if use_conv == 'scipy' : | |||
| logger.debug("Using scipy %s for convolution" % (scipy.__versio n__)) | logger.debug("Using scipy %s for convolution" % (scipy.__versio n__)) | |||
| Fmap = conv2d_scipy(self.true_flux_map.data, psf2d, mode='same' ) | Fmap = conv2d_scipy(self.true_flux_map.data, psf2d, mode='same' ) | |||
| elif use_conv is 'astropy': | elif use_conv == 'astropy': | |||
| logger.debug("Using astropy %s for convolution" % (astropy.__ve rsion__)) | logger.debug("Using astropy %s for convolution" % (astropy.__ve rsion__)) | |||
| Fmap = conv2d_astro(self.true_flux_map.data, psf2d) | Fmap = conv2d_astro(self.true_flux_map.data, psf2d) | |||
| else: | else: | |||
| Fmap, psf2d_fft = conv2d_intern(self.true_flux_map.data, psf2d, compute_fourier=True) | Fmap, psf2d_fft = conv2d_intern(self.true_flux_map.data, psf2d, compute_fourier=True) | |||
| #Eq A16 Epinat | #Eq A16 Epinat | |||
| V1 = self.true_velocity_map.data * self.true_flux_map.data # V.M | V1 = self.true_velocity_map.data * self.true_flux_map.data # V.M | |||
| if use_conv is 'scipy': | if use_conv == 'scipy': | |||
| Vtemp = conv2d_scipy(V1, psf2d, mode='same') | Vtemp = conv2d_scipy(V1, psf2d, mode='same') | |||
| elif use_conv is 'astropy': | elif use_conv == 'astropy': | |||
| Vtemp = conv2d_astro(V1, psf2d) | Vtemp = conv2d_astro(V1, psf2d) | |||
| else: | else: | |||
| Vtemp, psf2d_fft = conv2d_intern(V1, psf2d, compute_fourier=Tru e) | Vtemp, psf2d_fft = conv2d_intern(V1, psf2d, compute_fourier=Tru e) | |||
| Vmap = Vtemp / Fmap | Vmap = Vtemp / Fmap | |||
| #Eq A17 Epinat | #Eq A17 Epinat | |||
| S1 = self.true_disp_map.data**2 * self.true_flux_map.data | S1 = self.true_disp_map.data**2 * self.true_flux_map.data | |||
| if use_conv is 'scipy': | if use_conv == 'scipy': | |||
| Stemp = conv2d_scipy(S1, psf2d, mode='same') | Stemp = conv2d_scipy(S1, psf2d, mode='same') | |||
| elif use_conv is 'astropy': | elif use_conv == 'astropy': | |||
| Stemp = conv2d_astro(S1, psf2d) | Stemp = conv2d_astro(S1, psf2d) | |||
| else: | else: | |||
| Stemp, psf2d_fft = conv2d_intern(S1, psf2d, compute_fourier=Tru e) | Stemp, psf2d_fft = conv2d_intern(S1, psf2d, compute_fourier=Tru e) | |||
| V2 = self.true_velocity_map.data**2 * self.true_flux_map.data | V2 = self.true_velocity_map.data**2 * self.true_flux_map.data | |||
| if use_conv is 'scipy': | if use_conv == 'scipy': | |||
| Vtemp = conv2d_scipy(V2, psf2d, mode='same') | Vtemp = conv2d_scipy(V2, psf2d, mode='same') | |||
| elif use_conv is 'astropy': | elif use_conv == 'astropy': | |||
| Vtemp = conv2d_astro(V2, psf2d) | Vtemp = conv2d_astro(V2, psf2d) | |||
| else: | else: | |||
| Vtemp, psf2d_fft = conv2d_intern(V2, psf2d, compute_fourier=Tru e) | Vtemp, psf2d_fft = conv2d_intern(V2, psf2d, compute_fourier=Tru e) | |||
| Smap_sq = Stemp / Fmap + Vtemp / Fmap - Vmap**2 | Smap_sq = Stemp / Fmap + Vtemp / Fmap - Vmap**2 | |||
| Smap = np.sqrt(Smap_sq) | Smap = np.sqrt(Smap_sq) | |||
| self.obs_flux_map = HyperCube(Fmap * mask) | self.obs_flux_map = HyperCube(Fmap * mask) | |||
| self.obs_velocity_map = HyperCube(Vmap * mask) | self.obs_velocity_map = HyperCube(Vmap * mask) | |||
| self.obs_disp_map = HyperCube(Smap * mask) | self.obs_disp_map = HyperCube(Smap * mask) | |||
| End of changes. 13 change blocks. | ||||
| 13 lines changed or deleted | 13 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||