Some improvements
This commit is contained in:
+282
-145
@@ -5,11 +5,10 @@ import os
|
||||
import pymses
|
||||
import numpy as np
|
||||
import matplotlib as mpl
|
||||
|
||||
if os.environ.get("DISPLAY", "") == "":
|
||||
print("No display found. Using non-interactive Agg backend")
|
||||
mpl.use("Agg")
|
||||
|
||||
if os.environ.get('DISPLAY','') == '':
|
||||
print('No display found. Using non-interactive Agg backend')
|
||||
mpl.use('Agg')
|
||||
from matplotlib.patches import Polygon
|
||||
import pylab as P
|
||||
import glob as glob
|
||||
|
||||
@@ -27,6 +26,9 @@ from pymses.analysis import Camera, raytracing, slicing, splatting
|
||||
from pymses.filters import CellsToPoints
|
||||
from pymses.analysis import ScalarOperator, FractionOperator, MaxLevelOperator
|
||||
from scipy.stats import gaussian_kde
|
||||
import matplotlib.patches as mpatches
|
||||
from matplotlib.collections import PatchCollection
|
||||
|
||||
|
||||
|
||||
import module_extract as me
|
||||
@@ -119,22 +121,12 @@ def compute_image_data(path, num, radius=0.5,
|
||||
# Checking for existing files
|
||||
name_save = directory + '/maps_disk' + '_' + tag + '_' + format(num,'05') + '.save'
|
||||
if (len(glob.glob(name_save))==1 and not force):
|
||||
return
|
||||
return
|
||||
|
||||
# Prepare saving data
|
||||
if "T" in images and not "rho" in images:
|
||||
images.append("rho")
|
||||
if "Q" in images and not "coldens" in images:
|
||||
images.append("coldens")
|
||||
maps_disk = {
|
||||
"time": time,
|
||||
"im_extent": im_extent,
|
||||
"center": center,
|
||||
"radius": radius,
|
||||
"lbox": lbox,
|
||||
"images": images,
|
||||
"axes_los": axes_los,
|
||||
}
|
||||
maps_disk = {'time' : time, 'im_extent' : im_extent,
|
||||
'center' : center, 'radius' : radius, 'lbox' : lbox,
|
||||
'images': images, 'axes_los': axes_los}
|
||||
|
||||
# Prepare raytracing
|
||||
rho_op = ScalarOperator(lambda dset: dset["rho"], ro.info["unit_density"])
|
||||
@@ -344,6 +336,11 @@ def plot_maps(path, num,
|
||||
):
|
||||
continue
|
||||
|
||||
if (image == 'jeans'):
|
||||
maps_disk['jeans_' + ax_los] = np.sqrt(np.pi * maps_disk['T_' + ax_los] / maps_disk['rho_' + ax_los])
|
||||
if (image == 'jeans_ratio'):
|
||||
maps_disk['jeans_ratio_' + ax_los] = maps_disk['jeans_' + ax_los] * 2**(maps_disk['levels_' + ax_los])
|
||||
|
||||
map_disk = maps_disk[image + '_' + ax_los]
|
||||
|
||||
if image == 'Q' :
|
||||
@@ -353,6 +350,13 @@ def plot_maps(path, num,
|
||||
cmap='RdBu',
|
||||
norm=mpl.colors.LogNorm(),
|
||||
vmin=0.01, vmax=100.)
|
||||
elif image == 'jeans_ratio' :
|
||||
im = P.imshow(map_disk,
|
||||
extent=im_extent,
|
||||
origin='lower',
|
||||
cmap='RdBu',
|
||||
norm=mpl.colors.LogNorm(),
|
||||
vmin=0.1, vmax=1000.)
|
||||
else:
|
||||
im = P.imshow(
|
||||
map_disk,
|
||||
@@ -396,7 +400,7 @@ def plot_maps(path, num,
|
||||
cont.levels = cont.levels + 1
|
||||
|
||||
P.clabel(cont,
|
||||
levels_ar[levels_ar < 11][1:],
|
||||
cont.levels[cont.levels < 11],
|
||||
inline=1, fontsize=8., fmt='%1d')
|
||||
elif image == 'rho':
|
||||
cbar.set_label(r'$\rho$ (code)')
|
||||
@@ -421,6 +425,8 @@ def plot_maps(path, num,
|
||||
cbar.set_label(r'$T (code)$')
|
||||
elif image == 'Q':
|
||||
cbar.set_label(r'$Q$')
|
||||
elif image == 'jeans':
|
||||
cbar.set_label(r'Jeans\'s lenght')
|
||||
else:
|
||||
cbar.set_label(image)
|
||||
|
||||
@@ -788,7 +794,7 @@ def plot_disk_prop(
|
||||
P.plot(rad,abs(prop_disk['Q_kepl']),color='b',linewidth=2)
|
||||
# P.plot(rad, abs(prop_disk['Q_mean']) * np.ones(len(rad)), 'b:', linewidth=1)
|
||||
P.ylabel(r'$Q$')
|
||||
title = title
|
||||
title = title
|
||||
elif plot == 'H':
|
||||
P.plot(rad,abs(prop_disk['height']/ rad),color='b',linewidth=2)
|
||||
P.ylabel(r'H ratio')
|
||||
@@ -805,20 +811,67 @@ def plot_disk_prop(
|
||||
P.close()
|
||||
|
||||
|
||||
def disk_pdf(
|
||||
path,
|
||||
num,
|
||||
maps_disk,
|
||||
pos_star=[1.0, 1.0],
|
||||
force=False,
|
||||
interactive=False,
|
||||
nb_bin_hist=50,
|
||||
tag="",
|
||||
rad_min=0.075,
|
||||
rad_max=0.3,
|
||||
put_title=True,
|
||||
do_speed=True,
|
||||
):
|
||||
def sigma_pdf(fluct_maps, mask_flat, put_title=False, title='', nb_bin_hist=50, tag=''):
|
||||
# Sigma-PDF
|
||||
dcoldens = np.log10(fluct_maps['coldens']).flatten()
|
||||
|
||||
nb_cells = np.sum(mask_flat)
|
||||
P.grid()
|
||||
P.yscale('log')
|
||||
P.ylim([0.5 / nb_cells, 1.])
|
||||
P.xlabel(r'$\log(\Sigma / \bar{\Sigma})$')
|
||||
P.ylabel(r'$\mathcal{P}_\Sigma$')
|
||||
if put_title:
|
||||
P.title(title)
|
||||
values, edges, _ = P.hist(dcoldens[mask_flat],
|
||||
nb_bin_hist, range=(-1, 3),
|
||||
weights = np.ones(nb_cells) / nb_cells)
|
||||
centers = 0.5 * (edges[1:] + edges[:-1])
|
||||
|
||||
# Variance
|
||||
var = np.var(dcoldens[mask_flat])
|
||||
# Compute the slope of the right part of the histogramm
|
||||
mask_fit = (centers > 0.) & (centers < 1.25) & (values > 0)
|
||||
if (np.sum(mask_fit > 0)):
|
||||
(a, b, rho, _, stderr) = linregress(centers[mask_fit], np.log10(values[mask_fit]))
|
||||
P.plot(centers, 10**(a*centers + b), '--', linewidth=2)
|
||||
print("pdf a=%e, b=%e, rho=%e, var=%e"% (a, b, rho, var))
|
||||
try :
|
||||
beta = int(tag.split('_')[1][4:])
|
||||
except ValueError :
|
||||
beta = 0
|
||||
fit = {'beta': beta,'slope': a, 'origin': b, 'correlation': rho, 'stderr':stderr, 'var':var}
|
||||
|
||||
return fit
|
||||
|
||||
def plot_dcsdrho(fluct_maps, mask_flat, put_title=False, title='', nb_bin_hist=50, tag=''):
|
||||
drho = fluct_maps['rho'].flatten()
|
||||
dcs = fluct_maps['cs'].flatten()
|
||||
|
||||
nb_points = np.sum(mask_flat)
|
||||
size_hist = int(np.sqrt(nb_points))
|
||||
|
||||
P.hist2d(np.log10(drho[mask_flat]), np.log10(dcs[mask_flat]), (size_hist, size_hist), norm=mpl.colors.LogNorm())
|
||||
P.xlabel(r'$\log(\rho / \bar{\rho})$')
|
||||
P.ylabel(r'$\log(c_s / \bar{c_s})$')
|
||||
P.ylim([-0.6, 0.6])
|
||||
P.xlim([-1, 1.])
|
||||
|
||||
(a, b, rho, _, stderr) = linregress(np.log10(drho[mask_flat]), np.log10(dcs[mask_flat]))
|
||||
P.plot(np.log10(drho[mask_flat]), a*np.log10(drho[mask_flat]) + b, '--', linewidth=2)
|
||||
print("cs/rho a=%e, b=%e, rho=%e"% (a, b, rho))
|
||||
|
||||
try :
|
||||
beta = int(tag.split('_')[1][4:])
|
||||
except ValueError :
|
||||
beta = 0
|
||||
fit = {'beta': beta,'slope': a, 'origin': b, 'correlation': rho, 'stderr':stderr}
|
||||
|
||||
def disk_pdf(path, num, maps_disk,
|
||||
pos_star=[1., 1.], force=False, interactive=False,
|
||||
nb_bin_hist=50, tag='',
|
||||
rad_min=0.075, rad_max=0.3, put_title=True,
|
||||
do_speed=True):
|
||||
|
||||
# Load property file
|
||||
name_prop = path + "/prop_disk_" + str(num).zfill(5) + ".save"
|
||||
@@ -853,9 +906,11 @@ def disk_pdf(
|
||||
print("maps file loaded")
|
||||
|
||||
# Properties
|
||||
time = prop_disk["time"]
|
||||
im_extent = maps_disk["im_extent"]
|
||||
title = tag.split("_")[1] + " t=" + str(time)[0:5] + " (code)"
|
||||
time = prop_disk['time']
|
||||
im_extent = maps_disk['im_extent']
|
||||
title = None
|
||||
if (put_title):
|
||||
title = tag.split('_')[1] + ' t='+ str(time)[0:5] +' (code)'
|
||||
|
||||
# Load coldens
|
||||
coldens_map = maps_disk["coldens_z"]
|
||||
@@ -883,16 +938,14 @@ def disk_pdf(
|
||||
|
||||
# Mask selecting the zone of interest
|
||||
mask_map = (rr > rad_min) & (rr < rad_max)
|
||||
mask_flat = mask_map.flatten()
|
||||
|
||||
# Additionnal maps
|
||||
rho_map = maps_disk["rho_z"]
|
||||
cs_map = np.sqrt(maps_disk["T_z"])
|
||||
|
||||
vx_map = maps_disk["vx_z"]
|
||||
vy_map = maps_disk["vy_z"]
|
||||
v_map = np.sqrt(vx_map ** 2 + vy_map ** 2)
|
||||
v_kepl = np.sqrt(1.0 / rr)
|
||||
vx_map = maps_disk['vx_z']
|
||||
vy_map = maps_disk['vy_z']
|
||||
v_map = np.sqrt(vx_map**2 + vy_map**2)
|
||||
xx_star = xx - pos_star[0]
|
||||
yy_star = yy - pos_star[1]
|
||||
vrad_map = (vx_map * xx_star + vy_map * yy_star) / rr
|
||||
@@ -919,7 +972,7 @@ def disk_pdf(
|
||||
|
||||
# save for later
|
||||
# prop_disk[cur_map + '_rmean'] = mean_bin
|
||||
|
||||
|
||||
# Add value for borders
|
||||
mean_bin = np.concatenate(([mean_bin[0]], mean_bin))
|
||||
|
||||
@@ -931,45 +984,29 @@ def disk_pdf(
|
||||
avg_maps[cur_map] = np.reshape(avg_flat, rr.shape)
|
||||
|
||||
# Select zone of interest
|
||||
avg_maps[cur_map][np.logical_not(mask_map)] = np.nan
|
||||
# avg_maps[cur_map][np.logical_not(mask_map)] = np.nan
|
||||
|
||||
# Compute fluctuation
|
||||
fluct_maps[cur_map] = map_arr / avg_maps[cur_map]
|
||||
|
||||
if not interactive:
|
||||
plot_fluctuations_map(path, num, maps, fluct_maps, avg_maps, im_extent, mask_map, put_title, title,
|
||||
nb_bin_hist, tag, prop_disk)
|
||||
|
||||
# Save on disk
|
||||
f = open(name_prop,'w')
|
||||
pickle.dump(prop_disk, f)
|
||||
f.close()
|
||||
|
||||
return (xx, yy, fluct_maps)
|
||||
|
||||
def plot_fluctuations_map(path, num, maps, fluct_maps, avg_maps, im_extent, mask_map, put_title, title,
|
||||
nb_bin_hist, tag, prop_disk, interactive=False):
|
||||
|
||||
mask_flat = mask_map.flatten()
|
||||
|
||||
# Sigma-PDF
|
||||
dcoldens = np.log10(fluct_maps['coldens']).flatten()
|
||||
|
||||
nb_cells = np.sum(mask_flat)
|
||||
P.grid()
|
||||
P.yscale('log')
|
||||
P.ylim([0.5 / nb_cells, 1.])
|
||||
P.xlabel(r'$\log(\Sigma / \bar{\Sigma})$')
|
||||
P.ylabel(r'$\mathcal{P}_\Sigma$')
|
||||
if put_title:
|
||||
P.title(title)
|
||||
values, edges, _ = P.hist(
|
||||
dcoldens[mask_flat],
|
||||
nb_bin_hist,
|
||||
range=(-1, 3),
|
||||
weights=np.ones(nb_cells) / nb_cells,
|
||||
)
|
||||
centers = 0.5 * (edges[1:] + edges[:-1])
|
||||
|
||||
# Variance
|
||||
var = np.var(dcoldens[mask_flat])
|
||||
# Compute the slope of the right part of the histogramm
|
||||
mask_fit = (centers > 0.) & (centers < 1.25) & (values > 0)
|
||||
if (np.sum(mask_fit > 0)):
|
||||
(a, b, rho, _, stderr) = linregress(centers[mask_fit], np.log10(values[mask_fit]))
|
||||
P.plot(centers, 10**(a*centers + b), '--', linewidth=2)
|
||||
print("a=%e, b=%e, rho=%e, var=%e"% (a, b, rho, var))
|
||||
try :
|
||||
beta = int(tag.split('_')[1][4:])
|
||||
except ValueError :
|
||||
beta = 0
|
||||
fit = {'beta': beta,'slope': a, 'origin': b, 'correlation': rho, 'stderr':stderr, 'var':var}
|
||||
prop_disk['fit'] = fit
|
||||
|
||||
fit = sigma_pdf(fluct_maps, mask_flat, put_title, title, nb_bin_hist, tag)
|
||||
if interactive:
|
||||
P.figure()
|
||||
else:
|
||||
@@ -999,49 +1036,25 @@ def disk_pdf(
|
||||
P.savefig(path + '/drho_hist_' + tag + '_' + str(num).zfill(5) + out_ext)
|
||||
P.close()
|
||||
|
||||
|
||||
|
||||
# Derived quantities
|
||||
dcs = fluct_maps['cs'].flatten()
|
||||
dv = fluct_maps['v'].flatten()
|
||||
dvaz_kepl = abs(maps['vaz'] - v_kepl) / v_kepl
|
||||
fluct_maps['vaz_kepl'] = dvaz_kepl
|
||||
dcoldens = np.log10(fluct_maps['coldens']).flatten()
|
||||
dcs = fluct_maps['cs'].flatten()
|
||||
dv = fluct_maps['v'].flatten()
|
||||
dmach = abs(maps['v'] - avg_maps['v']) / maps['cs']
|
||||
dmach[dmach > 10.] = 10.
|
||||
fluct_maps['mach'] = dmach
|
||||
dmach_mean = np.mean(dmach[mask_map & (dmach < 5.)].flatten())
|
||||
dcoldens_max = np.max(dcoldens[mask_flat])
|
||||
|
||||
|
||||
# Save general properties
|
||||
prop_disk['dcoldens_max'] = dcoldens_max
|
||||
prop_disk['dmach_mean'] = dmach_mean
|
||||
print("dmach_mean = {}".format(dmach_mean))
|
||||
|
||||
|
||||
# Fluctuations plots
|
||||
|
||||
# dcs = f(drho)
|
||||
P.hist2d(
|
||||
np.log10(drho[mask_flat]),
|
||||
np.log10(dcs[mask_flat]),
|
||||
(1000, 1000),
|
||||
norm=mpl.colors.LogNorm(),
|
||||
)
|
||||
P.xlabel(r"$\log(\rho / \bar{\rho})$")
|
||||
P.ylabel(r"$\log(c_s / \bar{c_s})$")
|
||||
P.ylim([-0.6, 0.6])
|
||||
P.xlim([-1, 1.])
|
||||
|
||||
(a, b, rho, _, stderr) = linregress(np.log10(drho[mask_flat]), np.log10(dcs[mask_flat]))
|
||||
P.plot(np.log10(drho[mask_flat]), a*np.log10(drho[mask_flat]) + b, '--', linewidth=2)
|
||||
print("cs/rho a=%e, b=%e, rho=%e"% (a, b, rho))
|
||||
|
||||
try :
|
||||
beta = int(tag.split('_')[1][4:])
|
||||
except ValueError :
|
||||
beta = 0
|
||||
fit = {'beta': beta,'slope': a, 'origin': b, 'correlation': rho, 'stderr':stderr}
|
||||
prop_disk['fit_cs'] = fit
|
||||
prop_disk['fit_cs'] = plot_dcsdrho(fluct_maps, mask_flat, put_title, title, nb_bin_hist, tag)
|
||||
|
||||
P.colorbar()
|
||||
if interactive:
|
||||
@@ -1096,15 +1109,6 @@ def disk_pdf(
|
||||
vmin=-2.,
|
||||
vmax=2.)
|
||||
label = r'$log(\rho/\bar{\rho})$'
|
||||
elif cur_map == 'vaz_kepl':
|
||||
im = P.imshow(fluct_map,
|
||||
extent=im_extent,
|
||||
origin='lower',
|
||||
cmap='RdBu_r',
|
||||
norm=mpl.colors.LogNorm(),
|
||||
vmax=1.,
|
||||
vmin=0.01)
|
||||
label = r'$|v_\varphi - v_{kepl}|/v_{kepl}$'
|
||||
elif cur_map == 'vaz':
|
||||
im = P.imshow(fluct_map,
|
||||
extent=im_extent,
|
||||
@@ -1135,15 +1139,9 @@ def disk_pdf(
|
||||
P.savefig(name_im)
|
||||
P.close()
|
||||
|
||||
# Save on disk
|
||||
f = open(name_prop,'w')
|
||||
pickle.dump(prop_disk, f)
|
||||
f.close()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def compare(path, runs, nums, path_out=None, force=False, interactive=False,
|
||||
Q_in_name=True, pdf=False, gamma_ad=5./3., tag=''):
|
||||
"""
|
||||
@@ -1168,7 +1166,7 @@ def compare(path, runs, nums, path_out=None, force=False, interactive=False,
|
||||
var_names = ['alpha_rey_mean', 'alpha_grav_mean', 'Q', 'time']
|
||||
std_names = ['alpha_rey_mean', 'alpha_grav_mean', 'Q']
|
||||
plot_names = ['alphaQ', 'alphaQall']
|
||||
|
||||
|
||||
if Q_in_name:
|
||||
var_names.append('Q0')
|
||||
plot_names.append('alphaQ0')
|
||||
@@ -1187,20 +1185,20 @@ def compare(path, runs, nums, path_out=None, force=False, interactive=False,
|
||||
|
||||
for name in std_names:
|
||||
std_data[name] = np.zeros(len(runs))
|
||||
|
||||
|
||||
for i, run in enumerate(runs):
|
||||
path_run = path + "/" + run
|
||||
nb_outputs = 0
|
||||
|
||||
|
||||
if(type(nums)==dict):
|
||||
nums_run = nums[run]
|
||||
else:
|
||||
nums_run = nums
|
||||
|
||||
|
||||
run_data = dict()
|
||||
for name in var_names:
|
||||
run_data[name] = []
|
||||
|
||||
|
||||
for num in nums_run:
|
||||
try:
|
||||
# Load property file
|
||||
@@ -1227,11 +1225,11 @@ def compare(path, runs, nums, path_out=None, force=False, interactive=False,
|
||||
data = abs(prop_disk['alpha_grav_mean'])
|
||||
elif name == 'Q':
|
||||
data = prop_disk['Q_min']
|
||||
elif name == 'beta':
|
||||
elif name == 'beta':
|
||||
data = fit['beta']
|
||||
elif name == 'kappa':
|
||||
elif name == 'kappa':
|
||||
data = - fit['slope']
|
||||
elif name == 'var':
|
||||
elif name == 'var':
|
||||
data = fit['var']
|
||||
elif name == 'dmach':
|
||||
data = prop_disk['dmach_mean']
|
||||
@@ -1242,10 +1240,10 @@ def compare(path, runs, nums, path_out=None, force=False, interactive=False,
|
||||
print(data)
|
||||
else:
|
||||
data = prop_disk[name]
|
||||
|
||||
|
||||
run_data[name].append(data)
|
||||
all_data[name].append(data)
|
||||
|
||||
|
||||
nb_outputs = nb_outputs + 1
|
||||
print(run, num, nb_outputs)
|
||||
|
||||
@@ -1272,7 +1270,7 @@ def compare(path, runs, nums, path_out=None, force=False, interactive=False,
|
||||
|
||||
P.grid()
|
||||
print("Ploting "+ pname)
|
||||
|
||||
|
||||
if pname == 'alphaQ' or pname == 'alphaQ0':
|
||||
# alpha = f(Q)
|
||||
|
||||
@@ -1284,11 +1282,11 @@ def compare(path, runs, nums, path_out=None, force=False, interactive=False,
|
||||
P.xlabel(r'$Q_{0}$')
|
||||
Q = var_data['Q0']
|
||||
xerr = None
|
||||
|
||||
|
||||
P.yscale('log')
|
||||
P.ylim([1e-6,1.])
|
||||
P.xlim([np.nanmin(Q)- 0.2, np.nanmax(Q) + 0.2])
|
||||
|
||||
|
||||
P.errorbar(Q, abs(var_data['alpha_rey_mean']), xerr=xerr, yerr=std_data['alpha_rey_mean'],
|
||||
fmt='*--', label=r"$\bar{\alpha}_{Reynolds}$")
|
||||
# P.errorbar(Q, abs(var_data['alpha_grav_mean']), xerr=xerr, yerr=std_data['alpha_grav_mean'],
|
||||
@@ -1298,7 +1296,7 @@ def compare(path, runs, nums, path_out=None, force=False, interactive=False,
|
||||
P.ylabel(r'$\bar{\alpha}$')
|
||||
elif pname == 'kappabeta':
|
||||
P.errorbar(var_data['beta'], var_data['kappa'], yerr=std_data['kappa'], fmt='*')
|
||||
|
||||
|
||||
P.ylabel(r'$\kappa = - dlog\mathcal{P}_\Sigma / d\log\left(\Sigma/\overline{\Sigma}\right)$')
|
||||
P.xlabel(r'$\beta$')
|
||||
P.xlim([None, np.max(var_data['beta']) + 0.3])
|
||||
@@ -1346,8 +1344,8 @@ def compare(path, runs, nums, path_out=None, force=False, interactive=False,
|
||||
|
||||
P.xlabel(r'$<(v - \bar{v}) / c_s>$')
|
||||
P.ylabel(r'$\exp(Var(\log(\Sigma / \bar{\Sigma}))$')
|
||||
if pname == 'alphaQall' :
|
||||
Q = all_data['Q']
|
||||
if pname == 'alphaQall' :
|
||||
Q = all_data['Q']
|
||||
alpha_rey = abs(all_data['alpha_rey_mean'])
|
||||
time = all_data['time']
|
||||
P.yscale('log')
|
||||
@@ -1451,12 +1449,12 @@ def evolution(path, nums, force=False, interactive=False, pdf=False, tag=''):
|
||||
except KeyError as e:
|
||||
print('[{}, {}] Key error {}'.format(path, num, e))
|
||||
var_data[name][i] = np.nan
|
||||
|
||||
|
||||
|
||||
time = var_data['time']
|
||||
for pname in plot_names:
|
||||
|
||||
if pname == 'alpha':
|
||||
|
||||
if pname == 'alpha':
|
||||
P.yscale('log')
|
||||
P.plot(time, abs(var_data['alpha_rey_mean']), 'o-.', label=r"$\bar{\alpha}_{Reynolds}$")
|
||||
P.plot(time, abs(var_data['alpha_grav_mean']), '*--', label=r"$\bar{\alpha}_{grav}$")
|
||||
@@ -1465,7 +1463,7 @@ def evolution(path, nums, force=False, interactive=False, pdf=False, tag=''):
|
||||
P.plot(time, var_data['Q_min'], 'o-.', label=r"$Q_{min}$")
|
||||
P.plot(time, var_data['Q_mean'], '*--', label=r"$\overline{Q}$")
|
||||
P.legend()
|
||||
elif pname == 'mass':
|
||||
elif pname == 'mass':
|
||||
P.plot(time, var_data['mass_disk'], 'o-.', label=r"$M_{disk}$")
|
||||
P.plot(time, var_data['mass_box'], '*--', label=r"$M_{box}$")
|
||||
P.legend()
|
||||
@@ -1474,7 +1472,7 @@ def evolution(path, nums, force=False, interactive=False, pdf=False, tag=''):
|
||||
|
||||
if pname =='dcoldens_max':
|
||||
P.plot(time, 1.5 * np.ones(len(time)), 'r-', lw=4)
|
||||
|
||||
|
||||
P.ylabel(plot_labels[pname])
|
||||
P.xlabel(r'time (code)')
|
||||
P.grid()
|
||||
@@ -1484,7 +1482,7 @@ def evolution(path, nums, force=False, interactive=False, pdf=False, tag=''):
|
||||
P.tight_layout(pad=1)
|
||||
P.savefig(path + '/' + pname + 'time_' + tag + out_ext)
|
||||
P.close()
|
||||
|
||||
|
||||
def clump_study(path, num, path_out, tag, force=False, rho_thres=1e3, lvl_thres=10):
|
||||
name = tag + '_' + str(num).zfill(5)
|
||||
hop_save = name + '_hop' + '_prop_struct.save'
|
||||
@@ -1514,7 +1512,7 @@ def clump_study(path, num, path_out, tag, force=False, rho_thres=1e3, lvl_thres=
|
||||
print("Mpas files loaded")
|
||||
|
||||
P.scatter(pos[:, 0],pos[:, 1], c = color)
|
||||
|
||||
|
||||
im = P.imshow(m['coldens_z'],
|
||||
extent=m['im_extent'],
|
||||
origin='lower',
|
||||
@@ -1541,3 +1539,142 @@ def clump_study(path, num, path_out, tag, force=False, rho_thres=1e3, lvl_thres=
|
||||
# P.imshow(np.log10(m['coldens_z']), extent=m['im_extent'], cmap='plasma')
|
||||
|
||||
# P.savefig(path_out + '/clumps_size_' + tag + '_' + str(num).zfill(5) + out_ext)
|
||||
|
||||
|
||||
|
||||
class interactive_plots:
|
||||
|
||||
def onbuttonrelease(self, event):
|
||||
"""Deal with click events"""
|
||||
button = ['left','middle','right']
|
||||
toolbar = P.get_current_fig_manager().toolbar
|
||||
if toolbar.mode=='zoom rect' and event.inaxes == self.ax_col:
|
||||
print("zooming ")
|
||||
xlim = self.ax_col.get_xlim()
|
||||
ylim = self.ax_col.get_ylim()
|
||||
self.reset_mask()
|
||||
elif self.add_mask and event.inaxes == self.ax_col:
|
||||
self.plot_side()
|
||||
P.draw()
|
||||
|
||||
def onbuttonpress(self, event):
|
||||
"""Deal with click events"""
|
||||
button = ['left','middle','right']
|
||||
toolbar = P.get_current_fig_manager().toolbar
|
||||
if toolbar.mode!='':
|
||||
print("You clicked on something, but toolbar is in mode {:s}.".format(toolbar.mode))
|
||||
print(self.add_mask)
|
||||
if self.add_mask and toolbar.mode=='' and event.inaxes == self.ax_col:
|
||||
ix, iy = event.xdata, event.ydata
|
||||
print("Add patch {}, {}".format(ix, iy))
|
||||
xlim = self.ax_col.get_xlim()
|
||||
ylim = self.ax_col.get_ylim()
|
||||
radius = 0.05 * min(abs(xlim[1] - xlim[0]), abs(ylim[1] - ylim[0]))
|
||||
circle = mpatches.Circle([ix, iy], radius, color='black', alpha=0.1, ec="none")
|
||||
self.circles.append(circle)
|
||||
self.ax_col.add_artist(circle)
|
||||
self.ax_col.draw_artist(circle)
|
||||
self.patch_mask = self.patch_mask | ((self.xx - ix)**2 + (self.yy -iy)**2 < radius**2)
|
||||
#self.plot_side()
|
||||
|
||||
def onkeypress(self, event):
|
||||
"""whenever a key is pressed"""
|
||||
if not event.inaxes:
|
||||
return
|
||||
if event.key == 't':
|
||||
self.add_mask = not self.add_mask
|
||||
print("Add mode is {}".format(self.add_mask))
|
||||
elif event.key == 'r':
|
||||
self.reset_mask()
|
||||
|
||||
def plot_side(self):
|
||||
if (self.add_mask):
|
||||
mask = (self.patch_mask & self.mask).flatten()
|
||||
else:
|
||||
mask = self.mask.flatten()
|
||||
self.ax_gamma.clear()
|
||||
P.sca(self.ax_gamma)
|
||||
plot_dcsdrho(self.fluct_maps, mask, tag=self.tag)
|
||||
|
||||
self.ax_pdf.clear()
|
||||
P.sca(self.ax_pdf)
|
||||
sigma_pdf(self.fluct_maps, mask, tag=self.tag, nb_bin_hist=self.args.pdf_nb_bin)
|
||||
|
||||
def reset_mask(self):
|
||||
xlim = self.ax_col.get_xlim()
|
||||
ylim = self.ax_col.get_ylim()
|
||||
self.mask = (self.xx >= xlim[0]) & (self.xx <= xlim[1]) & (self.yy >= ylim[0]) & (self.yy <= ylim[1])
|
||||
self.patch_mask = np.full(self.mask.shape, False)
|
||||
for circle in self.circles:
|
||||
circle.remove()
|
||||
self.circles = []
|
||||
self.plot_side()
|
||||
P.draw()
|
||||
|
||||
|
||||
|
||||
def __init__(self, args, path, num,
|
||||
maps_disk=None,
|
||||
tag='',
|
||||
set_lim=True) :
|
||||
"""
|
||||
Interactive plotting
|
||||
|
||||
Parameters
|
||||
----------
|
||||
num output number
|
||||
path path of the pipeline output
|
||||
|
||||
"""
|
||||
self.args = args
|
||||
self.add_mask = False
|
||||
self.circles = []
|
||||
self.tag = tag
|
||||
|
||||
path_out = path
|
||||
|
||||
# Load maps file
|
||||
print("load maps file")
|
||||
name_maps = path + '/maps_disk' + '_' + tag + '_' + format(num,'05') + '.save'
|
||||
|
||||
if maps_disk is None:
|
||||
if (len(glob.glob(name_maps)) == 0):
|
||||
raise IOError('no pickle file for disk maps {}. Run make_image_disk() first'.format(name_maps))
|
||||
f = open(name_maps,'r')
|
||||
maps_disk = pickle.load(f)
|
||||
f.close()
|
||||
print("maps file loaded")
|
||||
|
||||
im_extent = maps_disk['im_extent']
|
||||
|
||||
fig = P.figure();
|
||||
self.ax_col = P.subplot(1, 2, 1)
|
||||
coldens = maps_disk['coldens_z']
|
||||
im = self.ax_col.imshow(coldens,
|
||||
extent=im_extent,
|
||||
origin='lower',
|
||||
norm=mpl.colors.LogNorm())
|
||||
if set_lim:
|
||||
im.set_clim(0.01, 100)
|
||||
self.ax_col.set_xlabel(r'$x$')
|
||||
self.ax_col.set_ylabel(r'$y$')
|
||||
|
||||
self.xx, self.yy, self.fluct_maps = disk_pdf(path, num, maps_disk, tag=self.tag, force=True, put_title=False, interactive=True)
|
||||
coord_flat = zip(self.xx.flatten(), self.yy.flatten())
|
||||
|
||||
self.ax_gamma = P.subplot(2, 2, 2)
|
||||
self.ax_pdf = P.subplot(2,2,4)
|
||||
|
||||
xlim = self.ax_col.get_xlim()
|
||||
ylim = self.ax_col.get_ylim()
|
||||
self.mask = (self.xx >= xlim[0]) & (self.xx <= xlim[1]) & (self.yy >= ylim[0]) & (self.yy <= ylim[1])
|
||||
self.patch_mask = np.full(self.mask.shape, False)
|
||||
|
||||
self.plot_side()
|
||||
|
||||
fig.canvas.mpl_connect('button_release_event', self.onbuttonrelease)
|
||||
fig.canvas.mpl_connect('button_press_event', self.onbuttonpress)
|
||||
fig.canvas.mpl_connect('key_press_event', self.onkeypress)
|
||||
|
||||
P.tight_layout()
|
||||
P.show()
|
||||
|
||||
Reference in New Issue
Block a user