[yt-users] basic question

Elizabeth Tasker tasker at astro1.sci.hokudai.ac.jp
Tue Nov 8 05:42:44 PST 2011


Hi Matt,

So the repeated calls of the function come from the ValidateSpatial part of the function call?

> Yes, you should do this then.  The problem will be taking the values
> and turning them back into grid values, as they'll be vertex-centered
> and in partitioned grids.  Sam can likely describe how to do that.
> 

I'm really sorry, but I don't understand. Sam has designed a routine that takes a position and gives back the grid and cell number of the neighbours (which is what I happen to need). I then access their data via

grids[n]["Density"][cis[n]],

I think I can then use grids[n] and cis[n] to set the value in my new_data array to be what I want? 


But basically, I can't create a function that I can plug into slice or projection without it running through the function a gazillion times?

Elizabeth




On 2011-11-08, at 9:56 PM, Matthew Turk wrote:

> Hi Elizabeth,
> 
> On Tue, Nov 8, 2011 at 3:33 AM, Elizabeth Tasker
> <tasker at astro1.sci.hokudai.ac.jp> wrote:
>> Hi,
>> 
>> I have a basic question about the way yt handles data (or maybe the way python functions handle data).
>> 
>> If I have a function of the form:
>> 
>> 
>> def _MyFunction(field, data):
>> 
>>        new_data = na.zeros(data["x"].shape, dtype='float64')
>> 
>>        ..... find xpos, ypos and zpos values of cells to be flagged as part of new_data
>> 
>>        for n in range(nflaggedcells):
>>            new_data[[data["x"] == xpos and data["y"] == ypos and data["z"] == zpos]] = 1.0
>> 
>>        return new_data
>> 
>> add_field("MyFunction", function=_MyFunction, validators=[ValidateSpatial(1, ["x", "y", "z"])])
>> 
>> pf = load('data')
>> dd = pf.h.all_data()
>> regions = dd["MyFunction"]
>> 
>> 
>> 
>> 
>> 
>> Does yt call _MyFunction for each grid? So it runs through that routine many times, once per grid?
> 
> When you mandate ValidateSpatial, with a single ghost zone, it
> actually doesn't exactly call it for every grid.  It calls it for
> every *covering* grid.  So it's worse than that: it fills in a buffer
> zone of one cell through cascading interpolation, then it calculates
> your data field, then it returns that portion to the grid.  It then
> masks them, concatenates them, and sets dd.field_data["MyFunction"] to
> the resulting flattened array; the dd["MyFunction"] call then returns
> this.
> 
>> 
>> If so, is there an alternative? One sweep through the function will --using Sam's KD tree-- find the positions on every grid that I want to mark. The only reason to put it in a function, as opposed to the main body, is so I can then use yt's slice and projection tools on the data set.
> 
> Yes, you should do this then.  The problem will be taking the values
> and turning them back into grid values, as they'll be vertex-centered
> and in partitioned grids.  Sam can likely describe how to do that.
> 
>> 
>> I'd really like to create a new field I can use with add_slice that only is looped over a single time. I appreciate this line:
>> 
>> for n in range(nflaggedcells):
>>            new_data[[data["x"] == xpos and data["y"] == ypos and data["z"] == zpos]] = 1.0
>> 
>> then won't work, but I can just store a list of the grids and cell numbers and mark up new_data using those instead.
> 
> Hm, slices also have "x","y","z" values.  If you don't mandate
> ValidateSpatial, accessing a slice field should only read the field
> dependencies from disk (as slices) and then calcualte.  For instance,
> if you ask for H2I_Fraction from a slice, it will only read
> H2I_Density and Density in that slice (not in each grid, but in the
> appropriate subselection of a grid that intersects a slice) and then
> do the derived field function on the field_data values, not on the
> grid values.
> 
> -Matt
> 
>> 
>> Does that make sense?
>> 
>> 
>> 
>> 
>> Thanks!
>> 
>> Elizabeth
>> _______________________________________________
>> 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




More information about the yt-users mailing list