[plotter] [snap] improve vector overlays
This commit is contained in:
+14
-41
@@ -946,18 +946,21 @@ class Plotter(Aggregator, BaseProcessor):
|
|||||||
self, name, ax_los, extent, unit=U.km_s, unit_coeff=1.0, reduce_res=1, kind="quiver", **kwargs
|
self, name, ax_los, extent, unit=U.km_s, unit_coeff=1.0, reduce_res=1, kind="quiver", **kwargs
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
Add an overlay : velocity vector field
|
Add an overlay : vector field
|
||||||
"""
|
"""
|
||||||
|
|
||||||
self.current_processor.process(f"{name}_h", ax_los)
|
ax_h = self._axes_h[ax_los]
|
||||||
self.current_processor.process(f"{name}_v", ax_los)
|
ax_v = self._axes_v[ax_los]
|
||||||
|
|
||||||
map_h = self.current_processor.get_value("/maps/speed_h_{}".format(ax_los))
|
self.current_processor.process(f"slice_{name}{ax_h}", ax_los)
|
||||||
map_v = self.current_processor.get_value("/maps/speed_v_{}".format(ax_los))
|
self.current_processor.process(f"slice_{name}{ax_v}", ax_los)
|
||||||
label, unit_old, unit = self._ax_label_unit(f"/maps/speed_h_{ax_los}", "", unit, unit_coeff)
|
|
||||||
|
map_h = self.current_processor.get_value(f"/maps/slice_{name}{ax_h}_{ax_los}")
|
||||||
|
map_v = self.current_processor.get_value(f"/maps/slice_{name}{ax_v}_{ax_los}")
|
||||||
|
label, unit_old, unit = self._ax_label_unit(f"/maps/slice_{name}{ax_h}_{ax_los}", "", unit, unit_coeff)
|
||||||
|
|
||||||
|
|
||||||
# take only a subset of velocities
|
# take only a subset
|
||||||
map_h = map_h[::reduce_res, ::reduce_res] * unit_old.express(unit)
|
map_h = map_h[::reduce_res, ::reduce_res] * unit_old.express(unit)
|
||||||
map_v = map_v[::reduce_res, ::reduce_res] * unit_old.express(unit)
|
map_v = map_v[::reduce_res, ::reduce_res] * unit_old.express(unit)
|
||||||
|
|
||||||
@@ -969,7 +972,7 @@ class Plotter(Aggregator, BaseProcessor):
|
|||||||
line_integral_convolution(plt.gca(), map_h, map_v, extent=extent, **kwargs)
|
line_integral_convolution(plt.gca(), map_h, map_v, extent=extent, **kwargs)
|
||||||
|
|
||||||
def _overlay_speed(self, ax_los, extent, **kwargs):
|
def _overlay_speed(self, ax_los, extent, **kwargs):
|
||||||
self._overlay_vector("speed", ax_los, extent, **kwargs)
|
self._overlay_vector("vel", ax_los, extent, **kwargs)
|
||||||
|
|
||||||
def _overlay_B(self, ax_los, extent, **kwargs):
|
def _overlay_B(self, ax_los, extent, **kwargs):
|
||||||
self._overlay_vector("B", ax_los, extent, **kwargs)
|
self._overlay_vector("B", ax_los, extent, **kwargs)
|
||||||
@@ -1453,31 +1456,7 @@ class Plotter(Aggregator, BaseProcessor):
|
|||||||
overlays=[self._overlay_speed],
|
overlays=[self._overlay_speed],
|
||||||
),
|
),
|
||||||
"Density slice with speed overlay",
|
"Density slice with speed overlay",
|
||||||
dependencies=["slice_rho", "speed_h", "speed_v"],
|
dependencies=["slice_rho"],
|
||||||
),
|
|
||||||
"slice_rho_B": PlotRule(
|
|
||||||
self,
|
|
||||||
partial(
|
|
||||||
self._plot_map,
|
|
||||||
"slice_rho",
|
|
||||||
label=r"$\rho$",
|
|
||||||
unit=U.Msun_pc3,
|
|
||||||
overlays=[self._overlay_B],
|
|
||||||
),
|
|
||||||
"Density slice with magnetic field overlay",
|
|
||||||
dependencies=["slice_rho", "B_h", "B_v"],
|
|
||||||
),
|
|
||||||
"slice_rho_B_vel": PlotRule(
|
|
||||||
self,
|
|
||||||
partial(
|
|
||||||
self._plot_map,
|
|
||||||
"slice_rho",
|
|
||||||
label=r"$\rho$",
|
|
||||||
unit=U.Msun_pc3,
|
|
||||||
overlays=[self._overlay_B, self._overlay_speed],
|
|
||||||
),
|
|
||||||
"Density slice with magnetic field and velocity overlay",
|
|
||||||
dependencies=["slice_rho", "B_h", "B_v", "speed_h", "speed_v"],
|
|
||||||
),
|
),
|
||||||
"jeans_ratio": PlotRule(
|
"jeans_ratio": PlotRule(
|
||||||
self,
|
self,
|
||||||
@@ -1548,14 +1527,6 @@ class Plotter(Aggregator, BaseProcessor):
|
|||||||
"P-PDF on a 2D slice ",
|
"P-PDF on a 2D slice ",
|
||||||
dependencies=["P_pdf"],
|
dependencies=["P_pdf"],
|
||||||
),
|
),
|
||||||
"B_int": PlotRule(
|
|
||||||
self,
|
|
||||||
partial(
|
|
||||||
self._plot_map, "B_int", label=r"$\mid \mathrm{B} \mid$", unit=U.T
|
|
||||||
),
|
|
||||||
"Magnetic intensity map",
|
|
||||||
dependencies=["B_int"],
|
|
||||||
),
|
|
||||||
"Brho": PlotRule(
|
"Brho": PlotRule(
|
||||||
self,
|
self,
|
||||||
partial(
|
partial(
|
||||||
@@ -1902,7 +1873,9 @@ class Plotter(Aggregator, BaseProcessor):
|
|||||||
|
|
||||||
# Dict of overlays
|
# Dict of overlays
|
||||||
self.overlays = {
|
self.overlays = {
|
||||||
|
"g": partial(self._overlay_vector, "g"),
|
||||||
"B": self._overlay_B,
|
"B": self._overlay_B,
|
||||||
|
"vel": self._overlay_speed,
|
||||||
"speed": self._overlay_speed,
|
"speed": self._overlay_speed,
|
||||||
"levels": self._overlay_levels,
|
"levels": self._overlay_levels,
|
||||||
"contour": self._overlay_contour,
|
"contour": self._overlay_contour,
|
||||||
|
|||||||
@@ -910,34 +910,6 @@ class SnapshotProcessor(HDF5Container):
|
|||||||
datamap = self._rt.process(self._cam[ax_los], surf_qty=True)
|
datamap = self._rt.process(self._cam[ax_los], surf_qty=True)
|
||||||
return datamap.map.T
|
return datamap.map.T
|
||||||
|
|
||||||
def _vector_h(self, name, unit, ax_los, z=0.0):
|
|
||||||
h_op = ScalarOperator(
|
|
||||||
lambda dset: dset[name][:, self._ax_nb[self._axes_h[ax_los]]],
|
|
||||||
self._ro.info[unit],
|
|
||||||
)
|
|
||||||
dmap_h = slicing.SliceMap(self._amr, self._cam[ax_los], h_op, z=z).map.T
|
|
||||||
return dmap_h
|
|
||||||
|
|
||||||
def _vector_v(self, name, unit, ax_los, z=0.0):
|
|
||||||
v_op = ScalarOperator(
|
|
||||||
lambda dset: dset[name][:, self._ax_nb[self._axes_v[ax_los]]],
|
|
||||||
self._ro.info[unit],
|
|
||||||
)
|
|
||||||
dmap_v = slicing.SliceMap(self._amr, self._cam[ax_los], v_op, z=z).map.T
|
|
||||||
return dmap_v
|
|
||||||
|
|
||||||
def _speed_h(self, ax_los, z=0.0):
|
|
||||||
return self._vector_h("vel", "unit_velocity", ax_los, z)
|
|
||||||
|
|
||||||
def _speed_v(self, ax_los, z=0.0):
|
|
||||||
return self._vector_v("vel", "unit_velocity", ax_los, z)
|
|
||||||
|
|
||||||
def _B_h(self, ax_los, z=0.0):
|
|
||||||
return self._vector_h("Br", "unit_mag", ax_los, z)
|
|
||||||
|
|
||||||
def _B_v(self, ax_los, z=0.0):
|
|
||||||
return self._vector_v("Br", "unit_mag", ax_los, z)
|
|
||||||
|
|
||||||
def _B_int(self, ax_los, z=0.0):
|
def _B_int(self, ax_los, z=0.0):
|
||||||
"""
|
"""
|
||||||
Slice ont the intensity of the magnetic field
|
Slice ont the intensity of the magnetic field
|
||||||
@@ -1595,34 +1567,6 @@ class SnapshotProcessor(HDF5Container):
|
|||||||
unit=U.none,
|
unit=U.none,
|
||||||
dependencies=["avg_map_coldens", "avg_map_T_mwavg"],
|
dependencies=["avg_map_coldens", "avg_map_T_mwavg"],
|
||||||
),
|
),
|
||||||
"speed_h": Rule(
|
|
||||||
self,
|
|
||||||
self._speed_h,
|
|
||||||
"Horizontal speed slice wrt the line of sight",
|
|
||||||
"/maps",
|
|
||||||
unit=self.info["unit_velocity"],
|
|
||||||
),
|
|
||||||
"speed_v": Rule(
|
|
||||||
self,
|
|
||||||
self._speed_v,
|
|
||||||
"Vertical speed slice wrt the line of sight",
|
|
||||||
"/maps",
|
|
||||||
unit=self.info["unit_velocity"],
|
|
||||||
),
|
|
||||||
"B_h": Rule(
|
|
||||||
self,
|
|
||||||
self._B_h,
|
|
||||||
"Horizontal slice of the magnetic field wrt the line of sight",
|
|
||||||
"/maps",
|
|
||||||
unit=self.info["unit_mag"],
|
|
||||||
),
|
|
||||||
"B_v": Rule(
|
|
||||||
self,
|
|
||||||
self._B_v,
|
|
||||||
"Vertical slice of the magnetic field wrt the line of sight",
|
|
||||||
"/maps",
|
|
||||||
unit=self.info["unit_mag"],
|
|
||||||
),
|
|
||||||
"T": Rule(
|
"T": Rule(
|
||||||
self,
|
self,
|
||||||
self._temperature,
|
self._temperature,
|
||||||
|
|||||||
Reference in New Issue
Block a user