[yt-dev] KeyError accessing field_units from profile?

Nathan Goldbaum nathan12343 at gmail.com
Wed May 25 11:50:49 PDT 2016


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 at 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 at 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-from-source
>>
>> 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 at 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 at 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 at 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 at lists.spacepope.org
>>>>> http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> yt-dev mailing list
>>>> yt-dev at lists.spacepope.org
>>>> http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
>>>>
>>>>
>>>
>>> _______________________________________________
>>> yt-dev mailing list
>>> yt-dev at lists.spacepope.org
>>> http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
>>>
>>>
>>
>> _______________________________________________
>> yt-dev mailing list
>> yt-dev at lists.spacepope.org
>> http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
>>
>>
>
> _______________________________________________
> yt-dev mailing list
> yt-dev at lists.spacepope.org
> http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.spacepope.org/pipermail/yt-dev-spacepope.org/attachments/20160525/a6e61183/attachment-0001.htm>


More information about the yt-dev mailing list