[yt-users] Nearest neighbours

Sam Skillman samskillman at gmail.com
Wed Sep 14 20:45:04 PDT 2011


Hi Elizabeth,

Just a quick update.  First, I documented the source a bit so that should
help.  This is just in the help(AMRKDTree.locate_neighbors).  I also
modified the neighbor finding so that it should be periodic.  Before if you
were doing a while loop or something there was a chance you could end up
stuck on a wall or something.  Anyways, I think this works.  I did some
checks on what happens if you always walk in a given direction, and
everything seems okay.  Additionally, I did a fun experiment of an AMR
random walk (though in this case I force it to move at least some direction)
:
http://paste.yt-project.org/show/1804/

This is kinda fun, and neat that it seems to get "stuck" in the dense areas
since the density of AMR cells is also higher.  Anyways, let us know if this
works and all that.

Cheers,
Sam


On Wed, Sep 14, 2011 at 5:30 PM, Elizabeth Tasker <taskere at mcmaster.ca>wrote:

> Wow -- that's fantastic. I'll give it a test run this week.
>
> Thanks so much, Sam!
>
> Elizabeth
>
>
> Sam Skillman wrote:
>
>> Hi Elizabeth,
>>
>> Since conferences are good times for very short projects, I've written up
>> a go at the nearest neighbors.  See the commit message for a bit more info.
>>
>> https://bitbucket.org/yt_**analysis/yt/changeset/**dfb88152f5e0<https://bitbucket.org/yt_analysis/yt/changeset/dfb88152f5e0>
>>
>> There are two functions.  One that takes a position and will return the
>> neighbor cells around that position.  The other takes the grid object and
>> cell indices and does the same thing.
>>
>> They are AMRKDTree.get_nearest_**neighbors_from_position
>> and
>> AMRKDTree.get_nearest_**neighbors
>>
>> Check out the pastebin for an example:
>> http://paste.yt-project.org/**show/1803/<http://paste.yt-project.org/show/1803/>
>>
>> Let me know if it works/if it is insanely slow/how it could be improved!
>>
>> Best,
>> Sam
>>
>> On Tue, Sep 13, 2011 at 5:35 PM, Elizabeth Tasker <taskere at mcmaster.ca<mailto:
>> taskere at mcmaster.ca>> wrote:
>>
>>    Hi Matt,
>>
>>    I actually use that to get my initial sweep of objects and it
>>    works great. This next step through it more complex than just a
>>    contour, since it's not obvious what my boundary line will be: it
>>    depends on the environment of each object which gives saddle
>>    points in the potential field. (This is why this program is taking
>>    me a while. *One day* it will be complete and work and I will win
>>    at life. Yes.)
>>
>>    I'm good with covering grids, honest. I was just seeing if I could
>>    be smarter easily.
>>
>>    Elizabeth
>>
>>
>>
>>
>>    Matthew Turk wrote:
>>
>>        Hi Elizabeth,
>>
>>        We have an "extract_connected_sets" routine that may work for
>>        what you
>>        are doing.  This is what the clump finder is built on.  You
>>        can supply
>>        it a threshold, and it will conduct FOF on the cells, returning
>>        objects (and boundary values) that satisfy it.  Unfortunately,
>>        right
>>        now it only works with threshholding in one dimension.  So,
>>        what you
>>        can do is define a field that returns 1/0 for whether it should be
>>        included, and then perform the contouring with
>>        extract_connected_sets
>>        on your initial data object.
>>
>>        -Matt
>>
>>        On Tue, Sep 13, 2011 at 5:22 PM, Elizabeth Tasker
>>        <taskere at mcmaster.ca <mailto:taskere at mcmaster.ca>> wrote:
>>
>>            Hi Matt and Sam,
>>
>>            I just want to do a friends-of-friends scheme where I add
>>            cells to an
>>            ordered list if their properties (density, Potential field
>>            etc) satisfy my
>>            criteria.
>>
>>            Unfortunately, that does mean that I might walk completely
>>            off one grid,
>>            ghost zones and all, and onto another one, so I think what
>>            Matt suggests
>>            below only buys me a few extra steps.
>>
>>            Sam, your routine probably was what I was thinking of, but
>>            my question
>>            wasn't supposed to cause extra work! It was more a "does
>>            this exist and
>>            everyone is using it apart from me?" query. I'll keep with
>>            extracted grids
>>            and then if I run into issues or this later morphs into a
>>            useful analysis
>>            routine that people want to use or parallelise, perhaps
>>            we'll revisit the
>>            question of using trees.
>>
>>            Thanks again,
>>
>>            Elizabeth
>>
>>            Matthew Turk wrote:
>>
>>                Elizabeth,
>>
>>                If you request ghost zones you can do this.  In
>>                particular, requested
>>                unsmoothed ghost zones will ensure no interpolation
>>                occurs.  You can
>>                do this either by yourself, grid by grid with
>>                grid_obj.retrieve_ghost_zones(**...) or you can use
>>                ValidateSpatial in a
>>                field definition.
>>
>>                It might help if you shared what kind of operation you
>>                want to do once
>>                you have the 26.  If you have the index of a cell, you
>>                can just
>>                access:
>>
>>                grid[field][index_i+1, index_j+1, index_k+1]
>>
>>                and do the +/- and 0/1 modifications.
>>
>>                -Matt
>>
>>                On Tue, Sep 13, 2011 at 5:04 PM, Elizabeth Tasker
>>                <taskere at mcmaster.ca <mailto:taskere at mcmaster.ca>>
>>
>>                wrote:
>>
>>
>>                    Hi Stephen,
>>
>>                    Honestly, I was just hoping there was some
>>                    magically pre-programmed way
>>                    to
>>                    grab the 26 most refined neighbours of a cell,
>>                    regardless of which grid
>>                    they
>>                    were on or level that happened to be. Mapping to
>>                    an extracted region is
>>                    no
>>                    hassle, I was just checking there wasn't a smart,
>>                    quick way of doing this
>>                    already.
>>
>>                    Thanks for the info!
>>
>>                    Elizabeth
>>
>>
>>
>>                    Stephen Skory wrote:
>>
>>
>>                        Elizabeth,
>>
>>
>>
>>
>>                            So ... how hard are we talking? :)
>>
>>
>>
>>                        The thing is, in all honesty the kdtree we're
>>                        using in yt (in
>>                        parallelHF and in a few other places) is not
>>                        very convenient. It's
>>                        written in fortran, so the array orderings are
>>                        backwards from the rest
>>                        of python (which is C based). It's also
>>                        confusing to use, it has a
>>                        weird wrapper to access the functions that
>>                        isn't very easy to
>>                        understand. The only reason we're using it is
>>                        in my tests I found this
>>                        kdtree implementation to be significantly
>>                        faster than the alternatives
>>                        out there.
>>
>>                        Perhaps if I knew a bit more about what you
>>                        wanted to do I could help
>>                        you come up with a solution that avoids the
>>                        kdtree. Are you interested
>>                        in only the nearest 6 touching cells to a
>>                        cell? Or do you want to look
>>                        at the edges and the corners? Farther out? Do
>>                        you care about
>>                        periodicity? You mentioned looking at grids of
>>                        coarser resolution, do
>>                        you still think you'd like to have neighbor
>>                        cells returned from a
>>                        lower resolution grid?
>>
>>
>>
>>
>>                    ______________________________**_________________
>>                    yt-users mailing list
>>                    yt-users at lists.spacepope.org
>>                    <mailto:yt-users at lists.**spacepope.org<yt-users at lists.spacepope.org>
>> >
>>
>>                    http://lists.spacepope.org/**listinfo.cgi/yt-users-**
>> spacepope.org<http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org>
>>
>>
>>
>>                ______________________________**_________________
>>                yt-users mailing list
>>                yt-users at lists.spacepope.org
>>                <mailto:yt-users at lists.**spacepope.org<yt-users at lists.spacepope.org>
>> >
>>
>>                http://lists.spacepope.org/**listinfo.cgi/yt-users-**
>> spacepope.org<http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org>
>>
>>
>>            ______________________________**_________________
>>            yt-users mailing list
>>            yt-users at lists.spacepope.org
>>            <mailto:yt-users at lists.**spacepope.org<yt-users at lists.spacepope.org>
>> >
>>
>>            http://lists.spacepope.org/**listinfo.cgi/yt-users-**
>> spacepope.org<http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org>
>>
>>
>>        ______________________________**_________________
>>        yt-users mailing list
>>        yt-users at lists.spacepope.org <mailto:yt-users at lists.**
>> spacepope.org <yt-users at lists.spacepope.org>>
>>
>>        http://lists.spacepope.org/**listinfo.cgi/yt-users-**spacepope.org<http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org>
>>
>>
>>    ______________________________**_________________
>>    yt-users mailing list
>>    yt-users at lists.spacepope.org <mailto:yt-users at lists.**spacepope.org<yt-users at lists.spacepope.org>
>> >
>>
>>    http://lists.spacepope.org/**listinfo.cgi/yt-users-**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<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<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/20110914/35a52f4a/attachment.html>


More information about the yt-users mailing list