[yt-users] Problem with Units in a Derived Field

Jared Coughlin Jared.W.Coughlin.29 at nd.edu
Wed Aug 26 10:07:02 PDT 2015


Thanks! The trident project looks really interesting, and I look forward to
it!
-Jared

On Wed, Aug 26, 2015 at 12:05 PM, Cameron Hummels <chummels at gmail.com>
wrote:

> There are no stupid questions.  This is a help list, so you're free to ask
> as much as you need, but it is recommended for you to read some of the
> documentation on how this all works.  Additionally, it might make sense for
> you to connect to the IRC or slack channels in order to get more
> interaction with other developers at low latency:
> http://yt-project.org/community.html
>
> To answer your questions: you are actually already accessing some of the
> particle fields.  For instance, ("Gas", "InternalEnergy") is a particle
> field--it's a field which is tied to the specific particles as written out
> by Gadget.  Whereas ("gas", "density") is a grid-based field, as it is
> aliased to ("deposit", "smoothed_Gas_Density") in the case of the the
> gadget outputs, I think.  You can read up more on fields here:
>
> http://yt-project.org/docs/dev/analyzing/fields.html
>
> "Deposition" is how particle fields are put on to the grid for further use
> (for example, in the AbsorptionSpectrum analysis module).  I actually don't
> know if there is a standard route for triggering the deposition
> infrastructure on a user-defined derived particle field, as it appears you
> want to do.
>
> Incidentally, there are a few yt developers who are building a code that
> sits on top of yt and does what you're trying to do for any simulation
> output: generate a spectrum.  We're planning to release this code by
> halloween, so it will help with what you want to do shortly.  Check out:
> http://trident-project.org.
>
> Cameron
>
> On Wed, Aug 26, 2015 at 8:43 AM, Jared Coughlin <
> Jared.W.Coughlin.29 at nd.edu> wrote:
>
>> Ok.  I'm really new to yt, so I apologize for the stupid question, but:
>> how do I access the particle field explicitly and then convert to a grid?
>> -Jared
>>
>> On Wed, Aug 26, 2015 at 11:37 AM, Cameron Hummels <chummels at gmail.com>
>> wrote:
>>
>>> The best way to do this would be to make the HI number density field
>>> from the particle fields and then deposit it on the grid and sample that.
>>> The absorption spectrum infrastructure requires the fields it samples to be
>>> grid-based fields.
>>>
>>> On Wed, Aug 26, 2015 at 8:34 AM, Jared Coughlin <
>>> Jared.W.Coughlin.29 at nd.edu> wrote:
>>>
>>>> My ultimate goal is to make an absorption spectrum, so I was trying to
>>>> add an HI number density field.  I don't have any experience working with
>>>> grid based codes, only sph, so I was assuming that I was using the particle
>>>> positions.
>>>> -Jared
>>>>
>>>> On Wed, Aug 26, 2015 at 11:25 AM, Nathan Goldbaum <
>>>> nathan12343 at gmail.com> wrote:
>>>>
>>>>> So the issue is that you're combining particle fields, which are
>>>>> defined at the location of your SPH particles, with fields that are defined
>>>>> on the octree mesh.
>>>>>
>>>>> data['Gas', 'InternalEnergy']
>>>>>
>>>>> ^ is a particle field defined at the locations of your SPH particles
>>>>> (particles of type 'Gas').
>>>>>
>>>>> data['gas', 'density']
>>>>>
>>>>> ^ is a mesh field defined at the cell centers of the octree mesh yt
>>>>> constructs in memory. It's specifically generated an SPH smoothing
>>>>> operation.
>>>>>
>>>>> The reasons the shapes of the arrays you're getting back are different
>>>>> is that the number of leaf octree cells is not the same as the number of
>>>>> Gas particles.
>>>>>
>>>>> I'm not sure if what you're trying to do is supposed to use the mesh
>>>>> locations or the particle locations. The correct way to modify your script
>>>>> would be different in the two cases.
>>>>>
>>>>> On Wed, Aug 26, 2015 at 10:17 AM, Jared Coughlin <
>>>>> Jared.W.Coughlin.29 at nd.edu> wrote:
>>>>>
>>>>>> Sorry about that! Here's the script:
>>>>>>
>>>>>> http://paste.yt-project.org/show/5842/
>>>>>>
>>>>>> And the traceback:
>>>>>>
>>>>>> http://paste.yt-project.org/show/5843/
>>>>>>
>>>>>> Thanks!
>>>>>> -Jared
>>>>>>
>>>>>> On Tue, Aug 25, 2015 at 7:41 PM, Nathan Goldbaum <
>>>>>> nathan12343 at gmail.com> wrote:
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Tuesday, August 25, 2015, Jared Coughlin <
>>>>>>> Jared.W.Coughlin.29 at nd.edu> wrote:
>>>>>>>
>>>>>>>> Hello! I'm really sorry for the barrage of questions; hopefully
>>>>>>>> this will be the last one!
>>>>>>>> I now get the error:  operands could not be broadcast together with
>>>>>>>> shapes (2072685,) (2153824,)
>>>>>>>> on line: fHI = (recomb * ne) / (gamma_HI + (gamma_c * ne))
>>>>>>>>
>>>>>>>> I printed the shapes of all of those arrays, and this is what I
>>>>>>>> get:
>>>>>>>> nH.shape
>>>>>>>> (16, 16, 16)
>>>>>>>> ne.shape
>>>>>>>> (16, 16, 16)
>>>>>>>> gamma_c.shape
>>>>>>>> (1,)
>>>>>>>> recomb.shape
>>>>>>>> (1,)
>>>>>>>> nH.shape
>>>>>>>> (2153824,)
>>>>>>>> ne.shape
>>>>>>>> (2153824,)
>>>>>>>> gamma_c.shape
>>>>>>>> (2072685,)
>>>>>>>> recomb.shape
>>>>>>>> (2072685,)
>>>>>>>>
>>>>>>>> Firstly, I'm a little confused as to why their dimensions change,
>>>>>>>> but what really matters are the bottom ones.  I know how many gas particles
>>>>>>>> are in my gadget simulation: 2072685.  All of the arrays were created from
>>>>>>>> either data["Gas", "InternalEnergy"] or data["gas", "density"], which
>>>>>>>> should, I would imagine, have the same dimensions: the number of gas
>>>>>>>> particles.  I was just wondering if anyone had seen something like this
>>>>>>>> before? The function in question was posted to a pastebin in an earlier
>>>>>>>> email on this thread, and I have since made all of the arrays YTArrays, as
>>>>>>>> suggested above. Thanks!
>>>>>>>> -Jared
>>>>>>>>
>>>>>>>>
>>>>>>> Hey Jared,
>>>>>>>
>>>>>>> I looked above but can't seem to find the correct link for the
>>>>>>> script you're using. Can you pastebin your updated script and the
>>>>>>> full error tracrback you're seeing now?
>>>>>>>
>>>>>>> Nathan
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> On Tue, Aug 25, 2015 at 5:58 PM, Jared Coughlin <
>>>>>>>> Jared.W.Coughlin.29 at nd.edu> wrote:
>>>>>>>>
>>>>>>>>> Thanks, I'll try that!
>>>>>>>>> -Jared
>>>>>>>>>
>>>>>>>>> On Tue, Aug 25, 2015 at 5:55 PM, Andrew Myers <atmyers2 at gmail.com>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> Hi Jared,
>>>>>>>>>>
>>>>>>>>>> You probably don't want to loop over the entire array in pure
>>>>>>>>>> python; that could be very slow for large datasets. One thing you can do is
>>>>>>>>>> use slicing to select the elements of the array that meet your criterion:
>>>>>>>>>>
>>>>>>>>>> indices = data['gas','InternalEnergy'] <= 1e4
>>>>>>>>>> data['gas', 'InternalEnergy'][indices] = *something*
>>>>>>>>>>
>>>>>>>>>> that would set all the elements where the InternalEnergy field is
>>>>>>>>>> less than or equal to 1e4 to *something*. Usually you can express most
>>>>>>>>>> operations you'd want to do this way without explicitly looping over the
>>>>>>>>>> elements.
>>>>>>>>>>
>>>>>>>>>> -Andrew
>>>>>>>>>>
>>>>>>>>>> On Tue, Aug 25, 2015 at 2:44 PM, Jared Coughlin <
>>>>>>>>>> Jared.W.Coughlin.29 at nd.edu> wrote:
>>>>>>>>>>
>>>>>>>>>>> That seemed to have worked, thanks!
>>>>>>>>>>>
>>>>>>>>>>> I just have another quick question, if you wouldn't mind? In my
>>>>>>>>>>> function to generate my new field, there's an if statement that looks at
>>>>>>>>>>> the value of the temperature: if data['gas','InternalEnergy'] <= 1e4:
>>>>>>>>>>> However, I get the error: "The truth value of an array with more
>>>>>>>>>>> than one element is ambiguous. Use a.any() or a.all()." I wasn't sure how
>>>>>>>>>>> to loop over the elements of the array to access a specific element, or if
>>>>>>>>>>> that's even possible? Using a.any() or a.all() don't seem to fit the bill
>>>>>>>>>>> for this particular problem, either. Thanks!
>>>>>>>>>>> -Jared
>>>>>>>>>>>
>>>>>>>>>>> On Tue, Aug 25, 2015 at 3:19 PM, Nathan Goldbaum <
>>>>>>>>>>> nathan12343 at gmail.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Tue, Aug 25, 2015 at 2:17 PM, Jared Coughlin <
>>>>>>>>>>>> Jared.W.Coughlin.29 at nd.edu> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Great, thanks! I tried that, and it gave me the error:
>>>>>>>>>>>>> "YTQuantity instances must be scalars." I'm not sure what to do about that,
>>>>>>>>>>>>> since all of these quantities depend on either temperature or density, both
>>>>>>>>>>>>> of which are arrays. I tried looking at the doc page for YTQuantity, but I
>>>>>>>>>>>>> didn't see anything that looked like it could solve this problem, though
>>>>>>>>>>>>> it's possible I missed it.
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> You need to use YTArray instead. YTQuantity is a subclass of
>>>>>>>>>>>> YTArray that only holds scalars. YTArray can hold arrays of data with units.
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>> -Jared
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Mon, Aug 24, 2015 at 8:13 PM, Nathan Goldbaum <
>>>>>>>>>>>>> nathan12343 at gmail.com> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Monday, August 24, 2015, Cameron Hummels <
>>>>>>>>>>>>>> chummels at gmail.com> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Hi Jared,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> The problem is one of units.  In order to make common
>>>>>>>>>>>>>>> arithmetic work like addition, yt requires both arguments going into the
>>>>>>>>>>>>>>> addition operator to have the same units.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> In your line,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> fHI = (recomb * ne) / (gamma_HI + (gamma_c *ne))
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> you're adding two things (gamma_HI) and (gamma_c*ne) that
>>>>>>>>>>>>>>> have different units--in this case, something with (code_mass/code_length**3)
>>>>>>>>>>>>>>> units and something with no units defined as (1).
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Just a quick clarification: they need not have the same
>>>>>>>>>>>>>> units, just the same dimensions.  You can add two quantities with units of
>>>>>>>>>>>>>> grams and solar masses (for example) but not grams and liters.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> In order to fix this, you can re-assign the appropriate
>>>>>>>>>>>>>>> units to different arrays or quantities with the YTArray and YTQuantity
>>>>>>>>>>>>>>> classes.  In this case, make sure that the two arguments going into the
>>>>>>>>>>>>>>> addition have the same units.  If you want to recast "ne" to have number
>>>>>>>>>>>>>>> density units, you can do this:  from yt.units.yt_array import YTQuantity;
>>>>>>>>>>>>>>> ne = YTQuantity(ne, 'cm**-3').  For more info on units, check out
>>>>>>>>>>>>>>> http://yt-project.org/docs/dev/analyzing/units/index.html
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I hope this helps!
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Cameron
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On Mon, Aug 24, 2015 at 4:12 PM, Jared Coughlin <
>>>>>>>>>>>>>>> Jared.W.Coughlin.29 at nd.edu> wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Hello! I have a gadget snapshot for which the standard
>>>>>>>>>>>>>>>> internal energy block has been replaced by one containing the temperature.
>>>>>>>>>>>>>>>> I'm trying to calculate a derived field for the neutral hydrogen number
>>>>>>>>>>>>>>>> density,  but I'm getting an error when I try to do ds.add_field():
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> http://paste.yt-project.org/show/5833/
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> However, I get an error about being unable to add
>>>>>>>>>>>>>>>> quantities with differing units:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> http://paste.yt-project.org/show/5834/
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> The docs say not to do any unit conversion because that is
>>>>>>>>>>>>>>>> apparently taken care of behind the scenes, so I didn't.  I was just
>>>>>>>>>>>>>>>> wondering if there was a way around this? Thanks!
>>>>>>>>>>>>>>>> -Jared
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>> yt-users mailing list
>>>>>>>>>>>>>>>> yt-users at lists.spacepope.org
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>> Cameron Hummels
>>>>>>>>>>>>>>> NSF Postdoctoral Fellow
>>>>>>>>>>>>>>> Department of Astronomy
>>>>>>>>>>>>>>> California Institute of Technology
>>>>>>>>>>>>>>> http://chummels.org
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>> yt-users mailing list
>>>>>>>>>>>>>> yt-users at lists.spacepope.org
>>>>>>>>>>>>>> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>> yt-users mailing list
>>>>>>>>>>>>> yt-users at lists.spacepope.org
>>>>>>>>>>>>> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>> yt-users mailing list
>>>>>>>>>>>> yt-users at lists.spacepope.org
>>>>>>>>>>>> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> yt-users mailing list
>>>>>>>>>>> yt-users at lists.spacepope.org
>>>>>>>>>>> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> yt-users mailing list
>>>>>>>>>> yt-users at lists.spacepope.org
>>>>>>>>>> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> yt-users mailing list
>>>>>>> yt-users at lists.spacepope.org
>>>>>>> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> yt-users mailing list
>>>>>> yt-users at lists.spacepope.org
>>>>>> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>>>>>>
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> yt-users mailing list
>>>>> yt-users at lists.spacepope.org
>>>>> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> yt-users mailing list
>>>> yt-users at lists.spacepope.org
>>>> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>>>>
>>>>
>>>
>>>
>>> --
>>> Cameron Hummels
>>> NSF Postdoctoral Fellow
>>> Department of Astronomy
>>> California Institute of Technology
>>> http://chummels.org
>>>
>>> _______________________________________________
>>> yt-users mailing list
>>> yt-users at lists.spacepope.org
>>> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>>>
>>>
>>
>> _______________________________________________
>> yt-users mailing list
>> yt-users at lists.spacepope.org
>> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>>
>>
>
>
> --
> Cameron Hummels
> NSF Postdoctoral Fellow
> Department of Astronomy
> California Institute of Technology
> http://chummels.org
>
> _______________________________________________
> yt-users mailing list
> yt-users at lists.spacepope.org
> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.spacepope.org/pipermail/yt-users-spacepope.org/attachments/20150826/c205e3b5/attachment.htm>


More information about the yt-users mailing list