[postprocessor] [plotter] Make generic rules averageables + cleanup
This commit is contained in:
+57
-90
@@ -1269,39 +1269,6 @@ class Plotter(Aggregator, BaseProcessor):
|
|||||||
"Map of the grav Shakura&Sunaev alpha parameter for disks",
|
"Map of the grav Shakura&Sunaev alpha parameter for disks",
|
||||||
dependencies=["alpha_grav"],
|
dependencies=["alpha_grav"],
|
||||||
),
|
),
|
||||||
"vphi": PlotRule(
|
|
||||||
self,
|
|
||||||
partial(
|
|
||||||
self._plot_map,
|
|
||||||
"vphi",
|
|
||||||
label=r"$v_\phi$",
|
|
||||||
# unit=U.km_s
|
|
||||||
),
|
|
||||||
"Azimuthal speed",
|
|
||||||
dependencies=["vphi"],
|
|
||||||
),
|
|
||||||
"vr": PlotRule(
|
|
||||||
self,
|
|
||||||
partial(
|
|
||||||
self._plot_map,
|
|
||||||
"vr",
|
|
||||||
label=r"$v_r$",
|
|
||||||
# unit=U.km_s
|
|
||||||
),
|
|
||||||
"Radial speed",
|
|
||||||
dependencies=["vr"],
|
|
||||||
),
|
|
||||||
"rho": PlotRule(
|
|
||||||
self,
|
|
||||||
partial(
|
|
||||||
self._plot_map,
|
|
||||||
"rho",
|
|
||||||
label=r"$\rho$",
|
|
||||||
# unit=U.Msun_pc3
|
|
||||||
),
|
|
||||||
"Density slice at s = 0, with s = x, y or z.",
|
|
||||||
dependencies=["rho"],
|
|
||||||
),
|
|
||||||
"coldens_l": PlotRule(
|
"coldens_l": PlotRule(
|
||||||
self,
|
self,
|
||||||
partial(
|
partial(
|
||||||
@@ -1314,41 +1281,41 @@ class Plotter(Aggregator, BaseProcessor):
|
|||||||
"Column density with level overlay",
|
"Column density with level overlay",
|
||||||
dependencies=["coldens", "levels"],
|
dependencies=["coldens", "levels"],
|
||||||
),
|
),
|
||||||
"rho_v": PlotRule(
|
"slice_rho_v": PlotRule(
|
||||||
self,
|
self,
|
||||||
partial(
|
partial(
|
||||||
self._plot_map,
|
self._plot_map,
|
||||||
"rho",
|
"slice_rho",
|
||||||
label=r"$\rho$",
|
label=r"$\rho$",
|
||||||
unit=U.Msun_pc3,
|
unit=U.Msun_pc3,
|
||||||
overlays=[self._overlay_speed],
|
overlays=[self._overlay_speed],
|
||||||
),
|
),
|
||||||
"Density slice with speed overlay",
|
"Density slice with speed overlay",
|
||||||
dependencies=["rho", "speed_h", "speed_v"],
|
dependencies=["slice_rho", "speed_h", "speed_v"],
|
||||||
),
|
),
|
||||||
"rho_B": PlotRule(
|
"slice_rho_B": PlotRule(
|
||||||
self,
|
self,
|
||||||
partial(
|
partial(
|
||||||
self._plot_map,
|
self._plot_map,
|
||||||
"rho",
|
"slice_rho",
|
||||||
label=r"$\rho$",
|
label=r"$\rho$",
|
||||||
unit=U.Msun_pc3,
|
unit=U.Msun_pc3,
|
||||||
overlays=[self._overlay_B],
|
overlays=[self._overlay_B],
|
||||||
),
|
),
|
||||||
"Density slice with magnetic field overlay",
|
"Density slice with magnetic field overlay",
|
||||||
dependencies=["rho", "B_h", "B_v"],
|
dependencies=["slice_rho", "B_h", "B_v"],
|
||||||
),
|
),
|
||||||
"rho_B_vel": PlotRule(
|
"slice_rho_B_vel": PlotRule(
|
||||||
self,
|
self,
|
||||||
partial(
|
partial(
|
||||||
self._plot_map,
|
self._plot_map,
|
||||||
"rho",
|
"slice_rho",
|
||||||
label=r"$\rho$",
|
label=r"$\rho$",
|
||||||
unit=U.Msun_pc3,
|
unit=U.Msun_pc3,
|
||||||
overlays=[self._overlay_B, self._overlay_speed],
|
overlays=[self._overlay_B, self._overlay_speed],
|
||||||
),
|
),
|
||||||
"Density slice with magnetic field and velocity overlay",
|
"Density slice with magnetic field and velocity overlay",
|
||||||
dependencies=["rho", "B_h", "B_v", "speed_h", "speed_v"],
|
dependencies=["slice_rho", "B_h", "B_v", "speed_h", "speed_v"],
|
||||||
),
|
),
|
||||||
"jeans_ratio": PlotRule(
|
"jeans_ratio": PlotRule(
|
||||||
self,
|
self,
|
||||||
@@ -1629,17 +1596,58 @@ class Plotter(Aggregator, BaseProcessor):
|
|||||||
|
|
||||||
averageables = [
|
averageables = [
|
||||||
"coldens",
|
"coldens",
|
||||||
"rho",
|
|
||||||
"T",
|
|
||||||
"Q",
|
"Q",
|
||||||
"vr",
|
"T",
|
||||||
"vphi",
|
"T_mwavg",
|
||||||
"rho_avg",
|
|
||||||
"P_avg",
|
|
||||||
"T_avg",
|
|
||||||
"alpha_disk",
|
"alpha_disk",
|
||||||
"alpha_grav",
|
"alpha_grav",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# Generic rules directly from Ramses fields
|
||||||
|
for field in self.pp_params.pymses.variables:
|
||||||
|
|
||||||
|
def generic_rule(name):
|
||||||
|
|
||||||
|
self.rules["slice_" + name] = PlotRule(
|
||||||
|
self,
|
||||||
|
partial(self._plot_map, "slice_" + name),
|
||||||
|
"{} slice".format(name),
|
||||||
|
dependencies=["slice_" + name],
|
||||||
|
)
|
||||||
|
|
||||||
|
self.rules[name + "_mwavg"] = PlotRule(
|
||||||
|
self,
|
||||||
|
partial(self._plot_map, name + "_mwavg"),
|
||||||
|
"Ax mass-weighted averaged {}".format(name),
|
||||||
|
dependencies=[name + "_mwavg"],
|
||||||
|
)
|
||||||
|
|
||||||
|
self.rules[name + "_avg"] = PlotRule(
|
||||||
|
self,
|
||||||
|
partial(self._plot_map, name + "_avg"),
|
||||||
|
"Ax averaged {}".format(name),
|
||||||
|
dependencies=[name + "_avg"],
|
||||||
|
)
|
||||||
|
|
||||||
|
averageables.append("slice_" + name)
|
||||||
|
averageables.append(name + "_mwavg")
|
||||||
|
averageables.append(name + "_avg")
|
||||||
|
|
||||||
|
# special for vectors
|
||||||
|
if field in ["g", "vel"]:
|
||||||
|
# Components
|
||||||
|
for i, dir in enumerate(["x", "y", "z"]):
|
||||||
|
generic_rule(field + dir)
|
||||||
|
|
||||||
|
# Radial
|
||||||
|
generic_rule(field + "r")
|
||||||
|
# Orthoradial
|
||||||
|
generic_rule(field + "phi")
|
||||||
|
# Norm
|
||||||
|
generic_rule(field + "_norm")
|
||||||
|
else:
|
||||||
|
generic_rule(field)
|
||||||
|
|
||||||
for name in averageables:
|
for name in averageables:
|
||||||
self.rules["rad_" + name] = PlotRule(
|
self.rules["rad_" + name] = PlotRule(
|
||||||
self,
|
self,
|
||||||
@@ -1698,47 +1706,6 @@ class Plotter(Aggregator, BaseProcessor):
|
|||||||
for name in ["time", "dt", "a", "mempc1", "mempc2"]:
|
for name in ["time", "dt", "a", "mempc1", "mempc2"]:
|
||||||
self._gen_from_log("fine_step_from_log", name_y=name, name_x="fine_step")
|
self._gen_from_log("fine_step_from_log", name_y=name, name_x="fine_step")
|
||||||
|
|
||||||
# Generic rules directly from Ramses fields
|
|
||||||
for field in self.pp_params.pymses.variables:
|
|
||||||
|
|
||||||
def generic_rule(name):
|
|
||||||
|
|
||||||
self.rules["slice_" + name] = PlotRule(
|
|
||||||
self,
|
|
||||||
partial(self._plot_map, "slice_" + name),
|
|
||||||
"{} slice".format(name),
|
|
||||||
dependencies=["slice_" + name],
|
|
||||||
)
|
|
||||||
|
|
||||||
self.rules[name + "_mwavg"] = PlotRule(
|
|
||||||
self,
|
|
||||||
partial(self._plot_map, name + "_mwavg"),
|
|
||||||
"Ax mass-weighted averaged {}".format(name),
|
|
||||||
dependencies=[name + "_mwavg"],
|
|
||||||
)
|
|
||||||
|
|
||||||
self.rules[name + "_avg"] = PlotRule(
|
|
||||||
self,
|
|
||||||
partial(self._plot_map, name + "_avg"),
|
|
||||||
"Ax averaged {}".format(name),
|
|
||||||
dependencies=[name + "_avg"],
|
|
||||||
)
|
|
||||||
|
|
||||||
# special for vectors
|
|
||||||
if field in ["g", "vel"]:
|
|
||||||
# Components
|
|
||||||
for i, dir in enumerate(["x", "y", "z"]):
|
|
||||||
generic_rule(field + dir)
|
|
||||||
|
|
||||||
# Radial
|
|
||||||
generic_rule(field + "r")
|
|
||||||
# Orthoradial
|
|
||||||
generic_rule(field + "phi")
|
|
||||||
# Norm
|
|
||||||
generic_rule(field + "_norm")
|
|
||||||
else:
|
|
||||||
generic_rule(field)
|
|
||||||
|
|
||||||
# Dict of overlays
|
# Dict of overlays
|
||||||
self.overlays = {
|
self.overlays = {
|
||||||
"B": self._overlay_B,
|
"B": self._overlay_B,
|
||||||
|
|||||||
+103
-123
@@ -770,10 +770,6 @@ class PostProcessor(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 _rho(self, ax_los, z=0.0):
|
|
||||||
datamap_rho = slicing.SliceMap(self._amr, self._cam[ax_los], self._rho_op, z=z)
|
|
||||||
return (datamap_rho.map).T
|
|
||||||
|
|
||||||
def _vector_h(self, name, unit, ax_los, z=0.0):
|
def _vector_h(self, name, unit, ax_los, z=0.0):
|
||||||
h_op = ScalarOperator(
|
h_op = ScalarOperator(
|
||||||
lambda dset: dset[name][:, self._ax_nb[self._axes_h[ax_los]]],
|
lambda dset: dset[name][:, self._ax_nb[self._axes_h[ax_los]]],
|
||||||
@@ -816,7 +812,7 @@ class PostProcessor(HDF5Container):
|
|||||||
def _temperature(self, ax_los, z=0.0):
|
def _temperature(self, ax_los, z=0.0):
|
||||||
P_op = ScalarOperator(lambda dset: dset["P"], self._ro.info["unit_pressure"])
|
P_op = ScalarOperator(lambda dset: dset["P"], self._ro.info["unit_pressure"])
|
||||||
dmap_P = (slicing.SliceMap(self._amr, self._cam[ax_los], P_op, z=z)).map.T
|
dmap_P = (slicing.SliceMap(self._amr, self._cam[ax_los], P_op, z=z)).map.T
|
||||||
dmap_rho = self.save.get_node("/maps/rho_{}".format(ax_los)).read()
|
dmap_rho = self.save.get_node("/maps/slice_rho_{}".format(ax_los)).read()
|
||||||
return dmap_P / dmap_rho
|
return dmap_P / dmap_rho
|
||||||
|
|
||||||
def _levels(self, ax_los):
|
def _levels(self, ax_los):
|
||||||
@@ -830,7 +826,7 @@ class PostProcessor(HDF5Container):
|
|||||||
|
|
||||||
def _jeans(self, ax_los):
|
def _jeans(self, ax_los):
|
||||||
dmap_T = self.save.get_node("/maps/T_" + ax_los).read()
|
dmap_T = self.save.get_node("/maps/T_" + ax_los).read()
|
||||||
dmap_rho = self.save.get_node("/maps/rho_" + ax_los).read()
|
dmap_rho = self.save.get_node("/maps/slice_rho_" + ax_los).read()
|
||||||
dmap_jeans = np.sqrt(np.pi * dmap_T / dmap_rho)
|
dmap_jeans = np.sqrt(np.pi * dmap_T / dmap_rho)
|
||||||
return dmap_jeans
|
return dmap_jeans
|
||||||
|
|
||||||
@@ -1108,10 +1104,10 @@ class PostProcessor(HDF5Container):
|
|||||||
|
|
||||||
radial_bins = self.save.get_node("/radial/radial_bins_" + ax_los).read()
|
radial_bins = self.save.get_node("/radial/radial_bins_" + ax_los).read()
|
||||||
mean_bin_vr = self.save.get_node(
|
mean_bin_vr = self.save.get_node(
|
||||||
"/radial/rad_avg_" + "vr" + "_" + ax_los
|
"/radial/rad_avg_" + "slice_velr" + "_" + ax_los
|
||||||
).read()
|
).read()
|
||||||
mean_bin_vphi = self.save.get_node(
|
mean_bin_vphi = self.save.get_node(
|
||||||
"/radial/rad_avg_" + "vphi" + "_" + ax_los
|
"/radial/rad_avg_" + "slice_velphi" + "_" + ax_los
|
||||||
).read()
|
).read()
|
||||||
mean_bin_vr = np.concatenate((mean_bin_vr, [mean_bin_vr[-1]]))
|
mean_bin_vr = np.concatenate((mean_bin_vr, [mean_bin_vr[-1]]))
|
||||||
mean_bin_vphi = np.concatenate((mean_bin_vphi, [mean_bin_vr[-1]]))
|
mean_bin_vphi = np.concatenate((mean_bin_vphi, [mean_bin_vr[-1]]))
|
||||||
@@ -1324,7 +1320,7 @@ class PostProcessor(HDF5Container):
|
|||||||
# Equilibrium
|
# Equilibrium
|
||||||
Gvry, Gvrx = np.gradient(vr, dy, dx, edge_order=2)
|
Gvry, Gvrx = np.gradient(vr, dy, dx, edge_order=2)
|
||||||
gradvr = (xx * Gvrx + yy * Gvry) / rr
|
gradvr = (xx * Gvrx + yy * Gvry) / rr
|
||||||
dvr = gradvr + vr * gradvr # Complete derivative
|
dvr = vr * gradvr # Complete derivative
|
||||||
|
|
||||||
# Thermal support
|
# Thermal support
|
||||||
GPy, GPx = np.gradient(Pz, dy, dx, edge_order=2)
|
GPy, GPx = np.gradient(Pz, dy, dx, edge_order=2)
|
||||||
@@ -1363,30 +1359,6 @@ class PostProcessor(HDF5Container):
|
|||||||
"/maps",
|
"/maps",
|
||||||
unit=self.info["unit_density"] * self.info["unit_length"],
|
unit=self.info["unit_density"] * self.info["unit_length"],
|
||||||
),
|
),
|
||||||
"vr": Rule(
|
|
||||||
self,
|
|
||||||
partial(
|
|
||||||
self._ax_avg,
|
|
||||||
self.oct_getter_vr,
|
|
||||||
mass_weighted=True,
|
|
||||||
unit=self.info["unit_velocity"],
|
|
||||||
),
|
|
||||||
"Vertically mass-weighted averaged radial velocity",
|
|
||||||
"/maps",
|
|
||||||
unit=self.info["unit_velocity"],
|
|
||||||
),
|
|
||||||
"vphi": Rule(
|
|
||||||
self,
|
|
||||||
partial(
|
|
||||||
self._ax_avg,
|
|
||||||
self.oct_getter_vphi,
|
|
||||||
mass_weighted=True,
|
|
||||||
unit=self.info["unit_velocity"],
|
|
||||||
),
|
|
||||||
"Vertically mass-weighted averaged azimuthal velocity",
|
|
||||||
"/maps",
|
|
||||||
unit=self.info["unit_velocity"],
|
|
||||||
),
|
|
||||||
"T_mwavg": Rule(
|
"T_mwavg": Rule(
|
||||||
self,
|
self,
|
||||||
partial(
|
partial(
|
||||||
@@ -1414,10 +1386,10 @@ class PostProcessor(HDF5Container):
|
|||||||
"/maps",
|
"/maps",
|
||||||
unit=U.none,
|
unit=U.none,
|
||||||
dependencies=[
|
dependencies=[
|
||||||
"avg_map_rho_avg",
|
"avg_map_slice_rho_avg",
|
||||||
"avg_map_T_mwavg",
|
"avg_map_T_mwavg",
|
||||||
"avg_map_vr",
|
"avg_map_slice_velr",
|
||||||
"avg_map_vphi",
|
"avg_map_slice_velphi",
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
"alpha_grav": Rule(
|
"alpha_grav": Rule(
|
||||||
@@ -1429,13 +1401,6 @@ class PostProcessor(HDF5Container):
|
|||||||
unit=U.none,
|
unit=U.none,
|
||||||
dependencies=["avg_map_coldens", "avg_map_T_mwavg"],
|
dependencies=["avg_map_coldens", "avg_map_T_mwavg"],
|
||||||
),
|
),
|
||||||
"rho": Rule(
|
|
||||||
self,
|
|
||||||
self._rho,
|
|
||||||
"Density slice",
|
|
||||||
"/maps",
|
|
||||||
unit=self.info["unit_density"],
|
|
||||||
),
|
|
||||||
"speed_h": Rule(
|
"speed_h": Rule(
|
||||||
self,
|
self,
|
||||||
self._speed_h,
|
self._speed_h,
|
||||||
@@ -1452,14 +1417,14 @@ class PostProcessor(HDF5Container):
|
|||||||
),
|
),
|
||||||
"B_h": Rule(
|
"B_h": Rule(
|
||||||
self,
|
self,
|
||||||
self._speed_h,
|
self._B_h,
|
||||||
"Horizontal slice of the magnetic field wrt the line of sight",
|
"Horizontal slice of the magnetic field wrt the line of sight",
|
||||||
"/maps",
|
"/maps",
|
||||||
unit=self.info["unit_mag"],
|
unit=self.info["unit_mag"],
|
||||||
),
|
),
|
||||||
"B_v": Rule(
|
"B_v": Rule(
|
||||||
self,
|
self,
|
||||||
self._speed_v,
|
self._B_v,
|
||||||
"Vertical slice of the magnetic field wrt the line of sight",
|
"Vertical slice of the magnetic field wrt the line of sight",
|
||||||
"/maps",
|
"/maps",
|
||||||
unit=self.info["unit_mag"],
|
unit=self.info["unit_mag"],
|
||||||
@@ -1469,7 +1434,7 @@ class PostProcessor(HDF5Container):
|
|||||||
self._temperature,
|
self._temperature,
|
||||||
"Temperature slice",
|
"Temperature slice",
|
||||||
"/maps",
|
"/maps",
|
||||||
dependencies=["rho"],
|
dependencies=["slice_rho"],
|
||||||
unit=self.info["unit_pressure"] / self.info["unit_density"],
|
unit=self.info["unit_pressure"] / self.info["unit_density"],
|
||||||
),
|
),
|
||||||
"levels": Rule(
|
"levels": Rule(
|
||||||
@@ -1480,7 +1445,7 @@ class PostProcessor(HDF5Container):
|
|||||||
self._jeans,
|
self._jeans,
|
||||||
"Jeans length slice",
|
"Jeans length slice",
|
||||||
"/maps",
|
"/maps",
|
||||||
dependencies=["rho", "T"],
|
dependencies=["slice_rho", "T"],
|
||||||
),
|
),
|
||||||
"jeans_ratio": Rule(
|
"jeans_ratio": Rule(
|
||||||
self,
|
self,
|
||||||
@@ -1550,6 +1515,7 @@ class PostProcessor(HDF5Container):
|
|||||||
self._radial_bins,
|
self._radial_bins,
|
||||||
"Radial bins",
|
"Radial bins",
|
||||||
"/radial",
|
"/radial",
|
||||||
|
unit=self.info["unit_length"] / self.lbox,
|
||||||
),
|
),
|
||||||
"radial_centers": Rule(
|
"radial_centers": Rule(
|
||||||
self,
|
self,
|
||||||
@@ -1557,8 +1523,15 @@ class PostProcessor(HDF5Container):
|
|||||||
"Centers of radial bins",
|
"Centers of radial bins",
|
||||||
"/radial",
|
"/radial",
|
||||||
dependencies=["radial_bins"],
|
dependencies=["radial_bins"],
|
||||||
|
unit=self.info["unit_length"] / self.lbox,
|
||||||
|
),
|
||||||
|
"rr": Rule(
|
||||||
|
self,
|
||||||
|
self._rr,
|
||||||
|
"Coordinate map",
|
||||||
|
"/maps",
|
||||||
|
unit=self.info["unit_length"] / self.lbox,
|
||||||
),
|
),
|
||||||
"rr": Rule(self, self._rr, "Coordinate map", "/maps"),
|
|
||||||
"bins_on_map": Rule(
|
"bins_on_map": Rule(
|
||||||
self,
|
self,
|
||||||
self._bins_on_map,
|
self._bins_on_map,
|
||||||
@@ -1571,7 +1544,7 @@ class PostProcessor(HDF5Container):
|
|||||||
self._B_int,
|
self._B_int,
|
||||||
"Magnetic intensity slice",
|
"Magnetic intensity slice",
|
||||||
"/maps",
|
"/maps",
|
||||||
dependencies=["rho"],
|
dependencies=["slice_rho"],
|
||||||
unit=self.info["unit_mag"],
|
unit=self.info["unit_mag"],
|
||||||
),
|
),
|
||||||
# PDF
|
# PDF
|
||||||
@@ -1686,29 +1659,96 @@ class PostProcessor(HDF5Container):
|
|||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
# Average and other
|
|
||||||
averageables = [
|
averageables = [
|
||||||
"coldens",
|
"coldens",
|
||||||
"rho",
|
|
||||||
"T",
|
|
||||||
"Q",
|
"Q",
|
||||||
"vphi",
|
"T",
|
||||||
"vr",
|
|
||||||
"rho_avg",
|
|
||||||
"P_avg",
|
|
||||||
"T_avg",
|
|
||||||
"P_mwavg",
|
|
||||||
"T_mwavg",
|
"T_mwavg",
|
||||||
"alpha_disk",
|
"alpha_disk",
|
||||||
"alpha_grav",
|
"alpha_grav",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# Generic rules directly from Ramses fields
|
||||||
|
for field in self.pp_params.pymses.variables:
|
||||||
|
|
||||||
|
def generic_rule(name, getter, unit, oct_getter=None):
|
||||||
|
if oct_getter is None:
|
||||||
|
oct_getter = getter
|
||||||
|
|
||||||
|
self.rules["slice_" + name] = Rule(
|
||||||
|
self,
|
||||||
|
partial(self._slice, getter, z=0.0, unit=unit),
|
||||||
|
"{} slice".format(name),
|
||||||
|
"/maps",
|
||||||
|
unit=unit,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.rules[name + "_mwavg"] = Rule(
|
||||||
|
self,
|
||||||
|
partial(self._ax_avg, oct_getter, mass_weighted=True, unit=unit),
|
||||||
|
"Ax mass-weighted averaged {}".format(name),
|
||||||
|
"/maps",
|
||||||
|
unit=unit,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.rules[name + "_avg"] = Rule(
|
||||||
|
self,
|
||||||
|
partial(self._ax_avg, oct_getter, mass_weighted=False, unit=unit),
|
||||||
|
"Ax averaged {}".format(name),
|
||||||
|
"/maps",
|
||||||
|
unit=unit,
|
||||||
|
)
|
||||||
|
|
||||||
|
averageables.append("slice_" + name)
|
||||||
|
averageables.append(name + "_mwavg")
|
||||||
|
averageables.append(name + "_avg")
|
||||||
|
|
||||||
|
# special for vectors
|
||||||
|
if field in ["g", "vel"]:
|
||||||
|
# Components
|
||||||
|
for i, dir in enumerate(["x", "y", "z"]):
|
||||||
|
generic_rule(
|
||||||
|
field + dir,
|
||||||
|
partial(vect_getter, field, i),
|
||||||
|
self.unit_key[field],
|
||||||
|
)
|
||||||
|
|
||||||
|
# Radial
|
||||||
|
generic_rule(
|
||||||
|
field + "r",
|
||||||
|
partial(self.getter_vect_r, name_vect=field),
|
||||||
|
self.unit_key[field],
|
||||||
|
oct_getter=partial(self.oct_getter_vect_r, name_vect=field),
|
||||||
|
)
|
||||||
|
|
||||||
|
# Othoradial
|
||||||
|
generic_rule(
|
||||||
|
field + "phi",
|
||||||
|
partial(self.getter_vect_phi, name_vect=field),
|
||||||
|
self.unit_key[field],
|
||||||
|
oct_getter=partial(self.oct_getter_vect_phi, name_vect=field),
|
||||||
|
)
|
||||||
|
|
||||||
|
# Norm
|
||||||
|
generic_rule(
|
||||||
|
field + "_norm", partial(norm_getter, field), self.unit_key[field]
|
||||||
|
)
|
||||||
|
|
||||||
|
else:
|
||||||
|
generic_rule(field, partial(simple_getter, field), self.unit_key[field])
|
||||||
|
|
||||||
|
# radial average and other
|
||||||
for name in averageables:
|
for name in averageables:
|
||||||
|
|
||||||
|
unit = self.rules[name].unit
|
||||||
|
|
||||||
self.rules["rad_avg_" + name] = Rule(
|
self.rules["rad_avg_" + name] = Rule(
|
||||||
self,
|
self,
|
||||||
partial(self._rad_avg, name),
|
partial(self._rad_avg, name),
|
||||||
"Azimuthal average of {}".format(name),
|
"Azimuthal average of {}".format(name),
|
||||||
"/radial",
|
"/radial",
|
||||||
dependencies=["radial_centers", "bins_on_map", name],
|
dependencies=["radial_centers", "bins_on_map", name],
|
||||||
|
unit=unit,
|
||||||
)
|
)
|
||||||
self.rules["rad_mwavg_" + name] = Rule(
|
self.rules["rad_mwavg_" + name] = Rule(
|
||||||
self,
|
self,
|
||||||
@@ -1716,6 +1756,7 @@ class PostProcessor(HDF5Container):
|
|||||||
"Mass weighted azimuthal average of {}".format(name),
|
"Mass weighted azimuthal average of {}".format(name),
|
||||||
"/radial",
|
"/radial",
|
||||||
dependencies=["coldens", "radial_centers", "bins_on_map", name],
|
dependencies=["coldens", "radial_centers", "bins_on_map", name],
|
||||||
|
unit=unit,
|
||||||
)
|
)
|
||||||
self.rules["avg_map_" + name] = Rule(
|
self.rules["avg_map_" + name] = Rule(
|
||||||
self,
|
self,
|
||||||
@@ -1723,6 +1764,7 @@ class PostProcessor(HDF5Container):
|
|||||||
"Interpolated map of azimuthal average of {}".format(name),
|
"Interpolated map of azimuthal average of {}".format(name),
|
||||||
"/maps",
|
"/maps",
|
||||||
dependencies=["radial_centers", "bins_on_map", "rad_avg_" + name],
|
dependencies=["radial_centers", "bins_on_map", "rad_avg_" + name],
|
||||||
|
unit=unit,
|
||||||
)
|
)
|
||||||
self.rules["mwavg_map_" + name] = Rule(
|
self.rules["mwavg_map_" + name] = Rule(
|
||||||
self,
|
self,
|
||||||
@@ -1730,6 +1772,7 @@ class PostProcessor(HDF5Container):
|
|||||||
"Interpolated map of azimuthal average of {}".format(name),
|
"Interpolated map of azimuthal average of {}".format(name),
|
||||||
"/maps",
|
"/maps",
|
||||||
dependencies=["radial_centers", "bins_on_map", "rad_mwavg_" + name],
|
dependencies=["radial_centers", "bins_on_map", "rad_mwavg_" + name],
|
||||||
|
unit=unit,
|
||||||
)
|
)
|
||||||
self.rules["fluct_" + name] = Rule(
|
self.rules["fluct_" + name] = Rule(
|
||||||
self,
|
self,
|
||||||
@@ -1769,6 +1812,7 @@ class PostProcessor(HDF5Container):
|
|||||||
dependencies=["pdf_" + name],
|
dependencies=["pdf_" + name],
|
||||||
)
|
)
|
||||||
for name_bin in averageables:
|
for name_bin in averageables:
|
||||||
|
unit_bin = self.rules[name_bin].unit
|
||||||
if name_bin is not name:
|
if name_bin is not name:
|
||||||
self.rules["mbb_" + name + "_" + name_bin] = Rule(
|
self.rules["mbb_" + name + "_" + name_bin] = Rule(
|
||||||
self,
|
self,
|
||||||
@@ -1776,75 +1820,11 @@ class PostProcessor(HDF5Container):
|
|||||||
"Mean of {} by bins of {}".format(name, name_bin),
|
"Mean of {} by bins of {}".format(name, name_bin),
|
||||||
"/hist",
|
"/hist",
|
||||||
dependencies=[name, name_bin],
|
dependencies=[name, name_bin],
|
||||||
|
unit=[unit, unit_bin],
|
||||||
)
|
)
|
||||||
|
|
||||||
self._gen_rule_transform("fluct_coldens", np.nanmax, "max", group="/globals")
|
self._gen_rule_transform("fluct_coldens", np.nanmax, "max", group="/globals")
|
||||||
|
|
||||||
# Generic rules directly from Ramses fields
|
|
||||||
for field in self.pp_params.pymses.variables:
|
|
||||||
|
|
||||||
def generic_rule(name, getter, unit, oct_getter=None):
|
|
||||||
if oct_getter is None:
|
|
||||||
oct_getter = getter
|
|
||||||
|
|
||||||
self.rules["slice_" + name] = Rule(
|
|
||||||
self,
|
|
||||||
partial(self._slice, getter, z=0.0, unit=unit),
|
|
||||||
"{} slice".format(name),
|
|
||||||
"/maps",
|
|
||||||
unit=unit,
|
|
||||||
)
|
|
||||||
|
|
||||||
self.rules[name + "_mwavg"] = Rule(
|
|
||||||
self,
|
|
||||||
partial(self._ax_avg, oct_getter, mass_weighted=True, unit=unit),
|
|
||||||
"Ax mass-weighted averaged {}".format(name),
|
|
||||||
"/maps",
|
|
||||||
unit=unit,
|
|
||||||
)
|
|
||||||
|
|
||||||
self.rules[name + "_avg"] = Rule(
|
|
||||||
self,
|
|
||||||
partial(self._ax_avg, oct_getter, mass_weighted=False, unit=unit),
|
|
||||||
"Ax averaged {}".format(name),
|
|
||||||
"/maps",
|
|
||||||
unit=unit,
|
|
||||||
)
|
|
||||||
|
|
||||||
# special for vectors
|
|
||||||
if field in ["g", "vel"]:
|
|
||||||
# Components
|
|
||||||
for i, dir in enumerate(["x", "y", "z"]):
|
|
||||||
generic_rule(
|
|
||||||
field + dir,
|
|
||||||
partial(vect_getter, field, i),
|
|
||||||
self.unit_key[field],
|
|
||||||
)
|
|
||||||
|
|
||||||
# Radial
|
|
||||||
generic_rule(
|
|
||||||
field + "r",
|
|
||||||
partial(self.getter_vect_r, name_vect=field),
|
|
||||||
self.unit_key[field],
|
|
||||||
oct_getter=self.oct_getter_vect_r,
|
|
||||||
)
|
|
||||||
|
|
||||||
# Othoradial
|
|
||||||
generic_rule(
|
|
||||||
field + "phi",
|
|
||||||
partial(self.getter_vect_phi, name_vect=field),
|
|
||||||
self.unit_key[field],
|
|
||||||
oct_getter=self.oct_getter_vect_phi,
|
|
||||||
)
|
|
||||||
|
|
||||||
# Norm
|
|
||||||
generic_rule(
|
|
||||||
field + "_norm", partial(norm_getter, field), self.unit_key[field]
|
|
||||||
)
|
|
||||||
|
|
||||||
else:
|
|
||||||
generic_rule(field, partial(simple_getter, field), self.unit_key[field])
|
|
||||||
|
|
||||||
super(PostProcessor, self).def_rules()
|
super(PostProcessor, self).def_rules()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user