[yt-dev] Issue #1026: yt.load_particles cannot handle multiple types of dictionary fields. (yt_analysis/yt)
Benjamin Thompson
issues-reply at bitbucket.org
Mon May 18 13:17:13 PDT 2015
New issue 1026: yt.load_particles cannot handle multiple types of dictionary fields.
https://bitbucket.org/yt_analysis/yt/issue/1026/ytload_particles-cannot-handle-multiple
Benjamin Thompson:
yt.load_particles works fine so long as you keep the dictionary fields consistant.
For example
```
#!python
import numpy as np
import yt
from yt.units.yt_array import YTArray
from yt.units import kiloparsec, Msun, kilometer, second, Gyr
n_data = 3000
sim_data_verb = {"particle_mass": YTArray(np.random.rand(n_data) * 1000,"Msun"),
"particle_position_x": np.random.rand(n_data),
"particle_position_y": np.random.rand(n_data),
"particle_position_z": np.random.rand(n_data),
"particle_velocity_x": YTArray(np.random.rand(n_data), "kpc/s"),
"particle_velocity_y": YTArray(np.random.rand(n_data), "kpc/s"),
"particle_velocity_z": YTArray(np.random.rand(n_data), "kpc/s"),
"particle_mass_birth_epoch": YTArray(np.random.rand(n_data), "Msun"),
"particle_birth_epoch": YTArray(np.random.rand(n_data), "Gyr"),
"particle_metallicity": YTArray(np.random.rand(n_data),"dimensionless")
}
bbox = yt.YTArray(np.array([[0,1],[0,1],[0,1]]),"kpc")
ds = yt.load_particles(sim_data_verb, length_unit=kiloparsec, mass_unit=Msun, time_unit=second, bbox=bbox, n_ref=256)
ad = ds.all_data()
for key in sim_data_verb:
print key, ad[key]
```
will work but will return
```
#!python
particle_position_z [ 0.2815859 0.38847204 0.22986295 ..., 0.29531876 0.66077444
0.88342952] code_length
particle_position_x [ 0.35727259 0.52799574 0.7032232 ..., 0.78598736 0.43919501
0.77617413] code_length
particle_position_y [ 0.21314061 0.71663901 0.19971711 ..., 0.41379908 0.20679615
0.26690946] code_length
particle_metallicity [ 0.19719678 0.8893857 0.71944182 ..., 0.94147203 0.40978591
0.37535933] dimensionless
particle_mass_birth_epoch [ 0.14538698 0.91165767 0.24366002 ..., 0.93701722 0.31856248
0.2815376 ] dimensionless
particle_velocity_z [ 1.32970858e+21 2.02143717e+21 8.91082065e+20 ..., 1.45218388e+20
9.72945874e+20 3.02182398e+21] cm/s
particle_birth_epoch [ 0.74899177 0.80996651 0.39013562 ..., 0.55047881 0.21678475
0.07351061] dimensionless
particle_mass [ 4.94763075e+35 7.77704243e+35 1.12806228e+36 ..., 8.01759848e+35
1.49906294e+36 2.58791744e+35] g
particle_velocity_x [ 2.83463595e+21 2.21176517e+21 1.45116224e+21 ..., 1.15946794e+21
2.20856829e+21 1.40417681e+21] cm/s
particle_velocity_y [ 3.27195893e+20 1.88669889e+21 3.58577639e+20 ..., 1.01434342e+21
2.92246102e+20 2.07493516e+21] cm/s
```
and e.g particle_mass_birth_epoch will be dimensionless
whereas if you were to be consistent with the arrays
```
#!python
import numpy as np
import yt
from yt.units.yt_array import YTArray
from yt.units import kiloparsec, Msun, kilometer, second, Gyr
n_data = 3000
sim_data_verb = {"particle_mass": YTArray(np.random.rand(n_data) * 1000,"Msun"),
"particle_position_x": YTArray(np.random.rand(n_data),"kpc"),
"particle_position_y": YTArray(np.random.rand(n_data),"kpc"),
"particle_position_z": YTArray(np.random.rand(n_data),"kpc"),
"particle_velocity_x": YTArray(np.random.rand(n_data), "kpc/s"),
"particle_velocity_y": YTArray(np.random.rand(n_data), "kpc/s"),
"particle_velocity_z": YTArray(np.random.rand(n_data), "kpc/s"),
"particle_mass_birth_epoch": YTArray(np.random.rand(n_data), "Msun"),
"particle_birth_epoch": YTArray(np.random.rand(n_data), "Gyr"),
"particle_metallicity": YTArray(np.random.rand(n_data),"dimensionless")
}
bbox = yt.YTArray(np.array([[0,1],[0,1],[0,1]]),"kpc")
ds = yt.load_particles(sim_data_verb, length_unit=kiloparsec, mass_unit=Msun, time_unit=second, bbox=bbox, n_ref=256)
ad = ds.all_data()
for key in sim_data_verb:
print key, ad[key]
```
you get sensible results
```
#!python
particle_position_z [ 1.91010138e+21 2.72597553e+21 1.88470277e+20 ..., 1.20441080e+21
2.14680199e+21 5.77431567e+20] cm
particle_position_x [ 2.08016250e+21 3.50853505e+20 1.58804046e+21 ..., 1.57472014e+21
3.55352460e+20 2.40592132e+21] cm
particle_position_y [ 1.53145514e+21 1.87942152e+21 3.01891288e+21 ..., 1.61942691e+21
1.02154497e+21 2.49263525e+21] cm
particle_metallicity [ 0.20026758 0.74414137 0.11611151 ..., 0.71398545 0.9404482
0.12193648] dimensionless
particle_mass_birth_epoch [ 0.55149932 0.80309968 0.07713267 ..., 0.16103389 0.85597544
0.55997554] Msun
particle_velocity_z [ 1.55542587e+21 2.57960677e+21 2.90400726e+21 ..., 1.90426357e+21
2.94137672e+21 8.78600990e+20] cm/s
particle_birth_epoch [ 0.12942072 0.00235603 0.63535871 ..., 0.8858202 0.58461139
0.34462516] Gyr
particle_mass [ 1.05296456e+36 1.92696089e+36 3.48006468e+35 ..., 9.26929432e+35
1.86347040e+36 1.21576381e+36] g
particle_velocity_x [ 1.01967742e+21 2.38948376e+21 1.83127998e+21 ..., 1.18012037e+20
1.90840829e+21 2.71858174e+21] cm/s
particle_velocity_y [ 2.01127183e+20 8.90953057e+20 2.38801554e+21 ..., 1.68662686e+20
3.00596354e+21 4.53271032e+20] cm/s
```
i.e particle_mass_birth_epoch now has dimensions
_______________________________________________
yt-dev mailing list
yt-dev at lists.spacepope.org
http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
More information about the yt-dev
mailing list