KeyError accessing field_units from profile?
Hi all, I'm using yt 3.2.3. I've created some derived fields (specifically 'dark_matter' and 'stars'), and I'm trying to plot radial profiles of ('gas', 'density'), ('deposit', 'dark_matter_density'), and ('deposit', 'stars_density'). I'm using yt.create_profile(sphere, 'radius', field) (where field is one of the above) and appending each of those profiles to a list called profiles. Those are created fine, and accessing profile[1].field_units (for example) gives '{('deposit', 'stars_density'): g/cm**3}', which is what I expect. The issue occurs when I call yt.ProfilePlot.from_profiles(profiles, labels=labels) -- I get an error in profile_plotter.py when accessing profile.field_units on a profile <https://bitbucket.org/yt_analysis/yt/src/b3c23ff06040ef967b7c9ac041d5ad3dc4edb79a/yt/visualization/profile_plotter.py?at=yt&fileviewer=file-view-default#profile_plotter.py-631> :
Traceback (most recent call last): File "/work/03330/tg826294/applications/scripts/halo_profiles.py", line 50, in <module> plot = yt.ProfilePlot.from_profiles(profiles, labels=labels) File "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", line 415, in from_profiles return cls._initialize_instance(obj, profiles, labels, plot_specs, y_log) File "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", line 365, in _initialize_instance obj._setup_plots() File "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", line 339, in _setup_plots xtitle, ytitle = self._get_field_title(fname, profile) File "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", line 633, in _get_field_title y_unit = profile.field_units[field_y] KeyError: ('gas', 'density')
I tried explicitly passing the units in yt.create_profile(sphere, 'radius', field, units={field: units[field]}) (where units is a dictionary and units[field] gives 'g/cm**3'), but I still get the error. I also tried adding the units to ds.field_units, and that didn't help either. You can see my code here <https://gist.github.com/rasmi/6d936b077527e245025b73059e59b9c0>. I also tried creating all the profiles at once with:
profile = yt.Profile1D(sp, 'radius', 32, minimum, maximum, True, weight_field=None) profile.add_values(fields.values())
But everything was 0, and I got errors with other approaches (I can detail them if you're curious, but I think the yt.ProfilePlot.from_profiles() is probably the best approach, right?). Any ideas? Thanks for your help! Rasmi
Hi Rasmi, Is there any chance you can make a small test script that triggers the error you're seeing, using one of the public test datasets on yt-project.org/data? There are several Enzo datasets there that should be usable. That will make it much easier for one of us to reproduce the error you're seeing. -Nathan On Mon, May 23, 2016 at 1:36 PM, Rasmi Elasmar <re2300@columbia.edu> wrote:
Hi all,
I'm using yt 3.2.3. I've created some derived fields (specifically 'dark_matter' and 'stars'), and I'm trying to plot radial profiles of ('gas', 'density'), ('deposit', 'dark_matter_density'), and ('deposit', 'stars_density'). I'm using yt.create_profile(sphere, 'radius', field) (where field is one of the above) and appending each of those profiles to a list called profiles. Those are created fine, and accessing profile[1].field_units (for example) gives '{('deposit', 'stars_density'): g/cm**3}', which is what I expect.
The issue occurs when I call yt.ProfilePlot.from_profiles(profiles, labels=labels) -- I get an error in profile_plotter.py when accessing profile.field_units on a profile:
Traceback (most recent call last): File "/work/03330/tg826294/applications/scripts/halo_profiles.py", line 50, in <module> plot = yt.ProfilePlot.from_profiles(profiles, labels=labels) File "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", line 415, in from_profiles return cls._initialize_instance(obj, profiles, labels, plot_specs, y_log) File "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", line 365, in _initialize_instance obj._setup_plots() File "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", line 339, in _setup_plots xtitle, ytitle = self._get_field_title(fname, profile) File "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", line 633, in _get_field_title y_unit = profile.field_units[field_y] KeyError: ('gas', 'density')
I tried explicitly passing the units in yt.create_profile(sphere, 'radius', field, units={field: units[field]}) (where units is a dictionary and units[field] gives 'g/cm**3'), but I still get the error. I also tried adding the units to ds.field_units, and that didn't help either.
You can see my code here <https://gist.github.com/rasmi/6d936b077527e245025b73059e59b9c0>.
I also tried creating all the profiles at once with:
profile = yt.Profile1D(sp, 'radius', 32, minimum, maximum, True, weight_field=None) profile.add_values(fields.values())
But everything was 0, and I got errors with other approaches (I can detail them if you're curious, but I think the yt.ProfilePlot.from_profiles() is probably the best approach, right?).
Any ideas? Thanks for your help!
Rasmi
_______________________________________________ yt-dev mailing list yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
I tried fooling around with the test data (the Enzo cosmology datasets in particular) and couldn't find one that gave me a reasonable number of halos. This is obnoxious, but here <https://drive.google.com/open?id=0BwK-7Z3S5X_yMDNyZ1RTcG56SFU>'s a ~3.5gb archive of the data I've been using (with halo catalog and test script). If that's not useful, let me know! Rasmi On Mon, May 23, 2016 at 2:41 PM, Nathan Goldbaum <nathan12343@gmail.com> wrote:
Hi Rasmi,
Is there any chance you can make a small test script that triggers the error you're seeing, using one of the public test datasets on yt-project.org/data? There are several Enzo datasets there that should be usable.
That will make it much easier for one of us to reproduce the error you're seeing.
-Nathan
On Mon, May 23, 2016 at 1:36 PM, Rasmi Elasmar <re2300@columbia.edu> wrote:
Hi all,
I'm using yt 3.2.3. I've created some derived fields (specifically 'dark_matter' and 'stars'), and I'm trying to plot radial profiles of ('gas', 'density'), ('deposit', 'dark_matter_density'), and ('deposit', 'stars_density'). I'm using yt.create_profile(sphere, 'radius', field) (where field is one of the above) and appending each of those profiles to a list called profiles. Those are created fine, and accessing profile[1].field_units (for example) gives '{('deposit', 'stars_density'): g/cm**3}', which is what I expect.
The issue occurs when I call yt.ProfilePlot.from_profiles(profiles, labels=labels) -- I get an error in profile_plotter.py when accessing profile.field_units on a profile:
Traceback (most recent call last): File "/work/03330/tg826294/applications/scripts/halo_profiles.py", line 50, in <module> plot = yt.ProfilePlot.from_profiles(profiles, labels=labels) File "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", line 415, in from_profiles return cls._initialize_instance(obj, profiles, labels, plot_specs, y_log) File "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", line 365, in _initialize_instance obj._setup_plots() File "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", line 339, in _setup_plots xtitle, ytitle = self._get_field_title(fname, profile) File "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", line 633, in _get_field_title y_unit = profile.field_units[field_y] KeyError: ('gas', 'density')
I tried explicitly passing the units in yt.create_profile(sphere, 'radius', field, units={field: units[field]}) (where units is a dictionary and units[field] gives 'g/cm**3'), but I still get the error. I also tried adding the units to ds.field_units, and that didn't help either.
You can see my code here <https://gist.github.com/rasmi/6d936b077527e245025b73059e59b9c0>.
I also tried creating all the profiles at once with:
profile = yt.Profile1D(sp, 'radius', 32, minimum, maximum, True, weight_field=None) profile.add_values(fields.values())
But everything was 0, and I got errors with other approaches (I can detail them if you're curious, but I think the yt.ProfilePlot.from_profiles() is probably the best approach, right?).
Any ideas? Thanks for your help!
Rasmi
_______________________________________________ yt-dev mailing list yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
_______________________________________________ yt-dev mailing list yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
Hi Rasmi, Once I adjust the size of the sphere object you're using to be a bit large (in my case I made it 10 Mpc instead of 30 kpc), I'm able to run your script without errors. If I use 30 kpc, the script errors out since the sphere isn't big enough to accumulate values from more than a single cell in your simulation. I'm running the latest development version of yt - there were some issues related to profiles that were fixed relative to yt 3.2.3 in the development version - so I'd suggest switching to the development branch until yt 3.3 is released. There is documentation on how to switch to the development version of yt here: http://yt-project.org/docs/dev/installing.html#installing-yt-using-pip-or-fr... If you're using anaconda, you may find using the conda nightly builds to be easier: http://yt-project.org/docs/dev/installing.html#nightly-conda-builds Hope that's helpful, Nathan On Mon, May 23, 2016 at 3:50 PM, Rasmi Elasmar <re2300@columbia.edu> wrote:
I tried fooling around with the test data (the Enzo cosmology datasets in particular) and couldn't find one that gave me a reasonable number of halos. This is obnoxious, but here <https://drive.google.com/open?id=0BwK-7Z3S5X_yMDNyZ1RTcG56SFU>'s a ~3.5gb archive of the data I've been using (with halo catalog and test script). If that's not useful, let me know!
Rasmi
On Mon, May 23, 2016 at 2:41 PM, Nathan Goldbaum <nathan12343@gmail.com> wrote:
Hi Rasmi,
Is there any chance you can make a small test script that triggers the error you're seeing, using one of the public test datasets on yt-project.org/data? There are several Enzo datasets there that should be usable.
That will make it much easier for one of us to reproduce the error you're seeing.
-Nathan
On Mon, May 23, 2016 at 1:36 PM, Rasmi Elasmar <re2300@columbia.edu> wrote:
Hi all,
I'm using yt 3.2.3. I've created some derived fields (specifically 'dark_matter' and 'stars'), and I'm trying to plot radial profiles of ('gas', 'density'), ('deposit', 'dark_matter_density'), and ('deposit', 'stars_density'). I'm using yt.create_profile(sphere, 'radius', field) (where field is one of the above) and appending each of those profiles to a list called profiles. Those are created fine, and accessing profile[1].field_units (for example) gives '{('deposit', 'stars_density'): g/cm**3}', which is what I expect.
The issue occurs when I call yt.ProfilePlot.from_profiles(profiles, labels=labels) -- I get an error in profile_plotter.py when accessing profile.field_units on a profile:
Traceback (most recent call last): File "/work/03330/tg826294/applications/scripts/halo_profiles.py", line 50, in <module> plot = yt.ProfilePlot.from_profiles(profiles, labels=labels) File "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", line 415, in from_profiles return cls._initialize_instance(obj, profiles, labels, plot_specs, y_log) File "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", line 365, in _initialize_instance obj._setup_plots() File "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", line 339, in _setup_plots xtitle, ytitle = self._get_field_title(fname, profile) File "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", line 633, in _get_field_title y_unit = profile.field_units[field_y] KeyError: ('gas', 'density')
I tried explicitly passing the units in yt.create_profile(sphere, 'radius', field, units={field: units[field]}) (where units is a dictionary and units[field] gives 'g/cm**3'), but I still get the error. I also tried adding the units to ds.field_units, and that didn't help either.
You can see my code here <https://gist.github.com/rasmi/6d936b077527e245025b73059e59b9c0>.
I also tried creating all the profiles at once with:
profile = yt.Profile1D(sp, 'radius', 32, minimum, maximum, True, weight_field=None) profile.add_values(fields.values())
But everything was 0, and I got errors with other approaches (I can detail them if you're curious, but I think the yt.ProfilePlot.from_profiles() is probably the best approach, right?).
Any ideas? Thanks for your help!
Rasmi
_______________________________________________ yt-dev mailing list yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
_______________________________________________ yt-dev mailing list yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
_______________________________________________ yt-dev mailing list yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
Hi Nathan, Thanks for your help. Compiling from source and changing the sphere size did the trick. I still can't seem to get the plots I want, though. I want three lines -- star, gas, and dark matter density as a function of radius. I tried building up a list of labels and profiles using yt.create_profile(sp, 'radius', field) and doing yt.ProfilePlot.from_profiles(profiles, labels=labels), but at the end I only end up with one line (dark matter, which is presumably the last field iterated through). I tried stepping through the code in IPython and it seems it's writing three plots (one for each field) when I only want one (with three fields). I also tried yt.create_profile(sp, 'radius', fields=fields.values()) and passing that to yt.ProfilePlot.from_profiles(), and I got the same issue. Same with yt.ProfilePlot(sp, 'radius', fields.values()) -- three plots are saved, each one overwriting the previous. Any ideas? Thanks, Rasmi On Mon, May 23, 2016 at 6:01 PM, Nathan Goldbaum <nathan12343@gmail.com> wrote:
Hi Rasmi,
Once I adjust the size of the sphere object you're using to be a bit large (in my case I made it 10 Mpc instead of 30 kpc), I'm able to run your script without errors. If I use 30 kpc, the script errors out since the sphere isn't big enough to accumulate values from more than a single cell in your simulation.
I'm running the latest development version of yt - there were some issues related to profiles that were fixed relative to yt 3.2.3 in the development version - so I'd suggest switching to the development branch until yt 3.3 is released.
There is documentation on how to switch to the development version of yt here:
http://yt-project.org/docs/dev/installing.html#installing-yt-using-pip-or-fr...
If you're using anaconda, you may find using the conda nightly builds to be easier:
http://yt-project.org/docs/dev/installing.html#nightly-conda-builds
Hope that's helpful,
Nathan
On Mon, May 23, 2016 at 3:50 PM, Rasmi Elasmar <re2300@columbia.edu> wrote:
I tried fooling around with the test data (the Enzo cosmology datasets in particular) and couldn't find one that gave me a reasonable number of halos. This is obnoxious, but here <https://drive.google.com/open?id=0BwK-7Z3S5X_yMDNyZ1RTcG56SFU>'s a ~3.5gb archive of the data I've been using (with halo catalog and test script). If that's not useful, let me know!
Rasmi
On Mon, May 23, 2016 at 2:41 PM, Nathan Goldbaum <nathan12343@gmail.com> wrote:
Hi Rasmi,
Is there any chance you can make a small test script that triggers the error you're seeing, using one of the public test datasets on yt-project.org/data? There are several Enzo datasets there that should be usable.
That will make it much easier for one of us to reproduce the error you're seeing.
-Nathan
On Mon, May 23, 2016 at 1:36 PM, Rasmi Elasmar <re2300@columbia.edu> wrote:
Hi all,
I'm using yt 3.2.3. I've created some derived fields (specifically 'dark_matter' and 'stars'), and I'm trying to plot radial profiles of ('gas', 'density'), ('deposit', 'dark_matter_density'), and ('deposit', 'stars_density'). I'm using yt.create_profile(sphere, 'radius', field) (where field is one of the above) and appending each of those profiles to a list called profiles. Those are created fine, and accessing profile[1].field_units (for example) gives '{('deposit', 'stars_density'): g/cm**3}', which is what I expect.
The issue occurs when I call yt.ProfilePlot.from_profiles(profiles, labels=labels) -- I get an error in profile_plotter.py when accessing profile.field_units on a profile:
Traceback (most recent call last): File "/work/03330/tg826294/applications/scripts/halo_profiles.py", line 50, in <module> plot = yt.ProfilePlot.from_profiles(profiles, labels=labels) File "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", line 415, in from_profiles return cls._initialize_instance(obj, profiles, labels, plot_specs, y_log) File "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", line 365, in _initialize_instance obj._setup_plots() File "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", line 339, in _setup_plots xtitle, ytitle = self._get_field_title(fname, profile) File "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", line 633, in _get_field_title y_unit = profile.field_units[field_y] KeyError: ('gas', 'density')
I tried explicitly passing the units in yt.create_profile(sphere, 'radius', field, units={field: units[field]}) (where units is a dictionary and units[field] gives 'g/cm**3'), but I still get the error. I also tried adding the units to ds.field_units, and that didn't help either.
You can see my code here <https://gist.github.com/rasmi/6d936b077527e245025b73059e59b9c0>.
I also tried creating all the profiles at once with:
profile = yt.Profile1D(sp, 'radius', 32, minimum, maximum, True, weight_field=None) profile.add_values(fields.values())
But everything was 0, and I got errors with other approaches (I can detail them if you're curious, but I think the yt.ProfilePlot.from_profiles() is probably the best approach, right?).
Any ideas? Thanks for your help!
Rasmi
_______________________________________________ yt-dev mailing list yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
_______________________________________________ yt-dev mailing list yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
_______________________________________________ yt-dev mailing list yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
_______________________________________________ yt-dev mailing list yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
Hi Rasmi, Hmm, I'm not sure off-hand. I think it might not be possible to get ProfilePlot to spit out the plot you want. On the other hand, you can always create plots manually using matplotlib and the Profile objects you're passing to from_profiles. -Nathan On Wed, May 25, 2016 at 1:40 PM, Rasmi Elasmar <re2300@columbia.edu> wrote:
Hi Nathan,
Thanks for your help. Compiling from source and changing the sphere size did the trick.
I still can't seem to get the plots I want, though. I want three lines -- star, gas, and dark matter density as a function of radius. I tried building up a list of labels and profiles using yt.create_profile(sp, 'radius', field) and doing yt.ProfilePlot.from_profiles(profiles, labels=labels), but at the end I only end up with one line (dark matter, which is presumably the last field iterated through). I tried stepping through the code in IPython and it seems it's writing three plots (one for each field) when I only want one (with three fields).
I also tried yt.create_profile(sp, 'radius', fields=fields.values()) and passing that to yt.ProfilePlot.from_profiles(), and I got the same issue. Same with yt.ProfilePlot(sp, 'radius', fields.values()) -- three plots are saved, each one overwriting the previous. Any ideas?
Thanks,
Rasmi
On Mon, May 23, 2016 at 6:01 PM, Nathan Goldbaum <nathan12343@gmail.com> wrote:
Hi Rasmi,
Once I adjust the size of the sphere object you're using to be a bit large (in my case I made it 10 Mpc instead of 30 kpc), I'm able to run your script without errors. If I use 30 kpc, the script errors out since the sphere isn't big enough to accumulate values from more than a single cell in your simulation.
I'm running the latest development version of yt - there were some issues related to profiles that were fixed relative to yt 3.2.3 in the development version - so I'd suggest switching to the development branch until yt 3.3 is released.
There is documentation on how to switch to the development version of yt here:
http://yt-project.org/docs/dev/installing.html#installing-yt-using-pip-or-fr...
If you're using anaconda, you may find using the conda nightly builds to be easier:
http://yt-project.org/docs/dev/installing.html#nightly-conda-builds
Hope that's helpful,
Nathan
On Mon, May 23, 2016 at 3:50 PM, Rasmi Elasmar <re2300@columbia.edu> wrote:
I tried fooling around with the test data (the Enzo cosmology datasets in particular) and couldn't find one that gave me a reasonable number of halos. This is obnoxious, but here <https://drive.google.com/open?id=0BwK-7Z3S5X_yMDNyZ1RTcG56SFU>'s a ~3.5gb archive of the data I've been using (with halo catalog and test script). If that's not useful, let me know!
Rasmi
On Mon, May 23, 2016 at 2:41 PM, Nathan Goldbaum <nathan12343@gmail.com> wrote:
Hi Rasmi,
Is there any chance you can make a small test script that triggers the error you're seeing, using one of the public test datasets on yt-project.org/data? There are several Enzo datasets there that should be usable.
That will make it much easier for one of us to reproduce the error you're seeing.
-Nathan
On Mon, May 23, 2016 at 1:36 PM, Rasmi Elasmar <re2300@columbia.edu> wrote:
Hi all,
I'm using yt 3.2.3. I've created some derived fields (specifically 'dark_matter' and 'stars'), and I'm trying to plot radial profiles of ('gas', 'density'), ('deposit', 'dark_matter_density'), and ('deposit', 'stars_density'). I'm using yt.create_profile(sphere, 'radius', field) (where field is one of the above) and appending each of those profiles to a list called profiles. Those are created fine, and accessing profile[1].field_units (for example) gives '{('deposit', 'stars_density'): g/cm**3}', which is what I expect.
The issue occurs when I call yt.ProfilePlot.from_profiles(profiles, labels=labels) -- I get an error in profile_plotter.py when accessing profile.field_units on a profile:
Traceback (most recent call last): File "/work/03330/tg826294/applications/scripts/halo_profiles.py", line 50, in <module> plot = yt.ProfilePlot.from_profiles(profiles, labels=labels) File "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", line 415, in from_profiles return cls._initialize_instance(obj, profiles, labels, plot_specs, y_log) File "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", line 365, in _initialize_instance obj._setup_plots() File "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", line 339, in _setup_plots xtitle, ytitle = self._get_field_title(fname, profile) File "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", line 633, in _get_field_title y_unit = profile.field_units[field_y] KeyError: ('gas', 'density')
I tried explicitly passing the units in yt.create_profile(sphere, 'radius', field, units={field: units[field]}) (where units is a dictionary and units[field] gives 'g/cm**3'), but I still get the error. I also tried adding the units to ds.field_units, and that didn't help either.
You can see my code here <https://gist.github.com/rasmi/6d936b077527e245025b73059e59b9c0>.
I also tried creating all the profiles at once with:
profile = yt.Profile1D(sp, 'radius', 32, minimum, maximum, True, weight_field=None) profile.add_values(fields.values())
But everything was 0, and I got errors with other approaches (I can detail them if you're curious, but I think the yt.ProfilePlot.from_profiles() is probably the best approach, right?).
Any ideas? Thanks for your help!
Rasmi
_______________________________________________ yt-dev mailing list yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
_______________________________________________ yt-dev mailing list yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
_______________________________________________ yt-dev mailing list yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
_______________________________________________ yt-dev mailing list yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
_______________________________________________ yt-dev mailing list yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
Okay, will do. Thanks again for all your help! On Wed, May 25, 2016 at 2:50 PM, Nathan Goldbaum <nathan12343@gmail.com> wrote:
Hi Rasmi,
Hmm, I'm not sure off-hand. I think it might not be possible to get ProfilePlot to spit out the plot you want.
On the other hand, you can always create plots manually using matplotlib and the Profile objects you're passing to from_profiles.
-Nathan
On Wed, May 25, 2016 at 1:40 PM, Rasmi Elasmar <re2300@columbia.edu> wrote:
Hi Nathan,
Thanks for your help. Compiling from source and changing the sphere size did the trick.
I still can't seem to get the plots I want, though. I want three lines -- star, gas, and dark matter density as a function of radius. I tried building up a list of labels and profiles using yt.create_profile(sp, 'radius', field) and doing yt.ProfilePlot.from_profiles(profiles, labels=labels), but at the end I only end up with one line (dark matter, which is presumably the last field iterated through). I tried stepping through the code in IPython and it seems it's writing three plots (one for each field) when I only want one (with three fields).
I also tried yt.create_profile(sp, 'radius', fields=fields.values()) and passing that to yt.ProfilePlot.from_profiles(), and I got the same issue. Same with yt.ProfilePlot(sp, 'radius', fields.values()) -- three plots are saved, each one overwriting the previous. Any ideas?
Thanks,
Rasmi
On Mon, May 23, 2016 at 6:01 PM, Nathan Goldbaum <nathan12343@gmail.com> wrote:
Hi Rasmi,
Once I adjust the size of the sphere object you're using to be a bit large (in my case I made it 10 Mpc instead of 30 kpc), I'm able to run your script without errors. If I use 30 kpc, the script errors out since the sphere isn't big enough to accumulate values from more than a single cell in your simulation.
I'm running the latest development version of yt - there were some issues related to profiles that were fixed relative to yt 3.2.3 in the development version - so I'd suggest switching to the development branch until yt 3.3 is released.
There is documentation on how to switch to the development version of yt here:
http://yt-project.org/docs/dev/installing.html#installing-yt-using-pip-or-fr...
If you're using anaconda, you may find using the conda nightly builds to be easier:
http://yt-project.org/docs/dev/installing.html#nightly-conda-builds
Hope that's helpful,
Nathan
On Mon, May 23, 2016 at 3:50 PM, Rasmi Elasmar <re2300@columbia.edu> wrote:
I tried fooling around with the test data (the Enzo cosmology datasets in particular) and couldn't find one that gave me a reasonable number of halos. This is obnoxious, but here <https://drive.google.com/open?id=0BwK-7Z3S5X_yMDNyZ1RTcG56SFU>'s a ~3.5gb archive of the data I've been using (with halo catalog and test script). If that's not useful, let me know!
Rasmi
On Mon, May 23, 2016 at 2:41 PM, Nathan Goldbaum <nathan12343@gmail.com
wrote:
Hi Rasmi,
Is there any chance you can make a small test script that triggers the error you're seeing, using one of the public test datasets on yt-project.org/data? There are several Enzo datasets there that should be usable.
That will make it much easier for one of us to reproduce the error you're seeing.
-Nathan
On Mon, May 23, 2016 at 1:36 PM, Rasmi Elasmar <re2300@columbia.edu> wrote:
Hi all,
I'm using yt 3.2.3. I've created some derived fields (specifically 'dark_matter' and 'stars'), and I'm trying to plot radial profiles of ('gas', 'density'), ('deposit', 'dark_matter_density'), and ('deposit', 'stars_density'). I'm using yt.create_profile(sphere, 'radius', field) (where field is one of the above) and appending each of those profiles to a list called profiles. Those are created fine, and accessing profile[1].field_units (for example) gives '{('deposit', 'stars_density'): g/cm**3}', which is what I expect.
The issue occurs when I call yt.ProfilePlot.from_profiles(profiles, labels=labels) -- I get an error in profile_plotter.py when accessing profile.field_units on a profile:
> Traceback (most recent call last): > File "/work/03330/tg826294/applications/scripts/halo_profiles.py", > line 50, in <module> > plot = yt.ProfilePlot.from_profiles(profiles, labels=labels) > File > "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", > line 415, in from_profiles > return cls._initialize_instance(obj, profiles, labels, > plot_specs, y_log) > File > "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", > line 365, in _initialize_instance > obj._setup_plots() > File > "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", > line 339, in _setup_plots > xtitle, ytitle = self._get_field_title(fname, profile) > File > "/work/03330/tg826294/applications/pythonenv/lib/python2.7/site-packages/yt/visualization/profile_plotter.py", > line 633, in _get_field_title > y_unit = profile.field_units[field_y] > KeyError: ('gas', 'density')
I tried explicitly passing the units in yt.create_profile(sphere, 'radius', field, units={field: units[field]}) (where units is a dictionary and units[field] gives 'g/cm**3'), but I still get the error. I also tried adding the units to ds.field_units, and that didn't help either.
You can see my code here <https://gist.github.com/rasmi/6d936b077527e245025b73059e59b9c0>.
I also tried creating all the profiles at once with:
> profile = yt.Profile1D(sp, 'radius', 32, minimum, maximum, True, > weight_field=None) > profile.add_values(fields.values())
But everything was 0, and I got errors with other approaches (I can detail them if you're curious, but I think the yt.ProfilePlot.from_profiles() is probably the best approach, right?).
Any ideas? Thanks for your help!
Rasmi
_______________________________________________ yt-dev mailing list yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
_______________________________________________ yt-dev mailing list yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
_______________________________________________ yt-dev mailing list yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
_______________________________________________ yt-dev mailing list yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
_______________________________________________ yt-dev mailing list yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
_______________________________________________ yt-dev mailing list yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
participants (2)
-
Nathan Goldbaum
-
Rasmi Elasmar