-
Notifications
You must be signed in to change notification settings - Fork 297
Open
Labels
bugcode frontendsThings related to specific frontendsThings related to specific frontendsfrontend: art
Milestone
Description
When loading ART Datasets it seems that no ´code_length´ attribute is loaded into the dataset. Instead, the attribute ´length_unit´ is loaded. This collides with some functionalities where the former is required to do unit conversion behind the curtains.
An Example: Im loading an snapshot from Agora-ART v18 dataset and plotting the dark matter alongside with the halos, using ´annotate_sphere´ with the keyword coord_system="data" to do so:
ds = yt.load(fn)
ds.code_length = ds.length_unit
ad = ds.all_data()
max_dens, center = search_max_in_field(ds, 'stars', 'particle_mass')
print(f'The center will be located at {center.in_units("Mpc")} with density {max_dens}')
# DM
p = yt.ParticleProjectionPlot(ds,'z',('darkmatter','particle_mass'), center=center, width=width, density=True)
p.set_unit(("darkmatter", "particle_mass"), "Msun/kpc**2")
p.set_font(
{
"size": 20,
}
)
p.set_axes_unit('kpccm')
p.annotate_timestamp(redshift=True, text_args={"color":"black"})
p.set_xlabel('x [comoving kpc]')
p.set_ylabel('')
for i in tqdm(range(0, len(filtered_halos))):
sub_tree_id = filtered_halos['Sub_tree_id'].iloc[i]
position_x = filtered_halos['position_x'].iloc[i]
position_y = filtered_halos['position_y'].iloc[i]
position_z = filtered_halos['position_z'].iloc[i]
virial_radius = filtered_halos['virial_radius'].iloc[i]
if sub_tree_id == 1:
p.annotate_sphere(unyt_array([position_x, position_y, position_z], 'kpccm'), radius=(1*virial_radius, 'kpccm'),coord_system='data',
circle_args={"color": "green", "linestyle": "dashed", "linewidth": 2})
else:
p.annotate_sphere(unyt_array([position_x,position_y,position_z], 'kpccm'),
radius=(0.5*virial_radius, 'kpccm'),
coord_system='data', circle_args={"color": "white", "linewidth": 2})
p.show()YT throws the following error:
UnitParseError: Could not find unit symbol 'code_length' in the provided symbols.
The above exception was the direct cause of the following exception:
(...)
YTPlotCallbackError: annotate_sphere callback failedIm guessing ART doesn't store the code units as such but as "unit_{length, mass, etc}". There are workarounds to this, i.e. using axis or plot relative coordinates for the example above. There may be other cases where there is no workaround tho.
Im using python3.10 and yt 4.3.1.
Metadata
Metadata
Assignees
Labels
bugcode frontendsThings related to specific frontendsThings related to specific frontendsfrontend: art