Oh, that sounds valuable. I ended up adding it at a low level- there is now a
FilteredIOBrick, which takes a (list of) filter callbacks and takes under a second. But a
yt-ish way to do it would be nicer.
-------- Original message --------
From: Matthew Turk <matthewturk(a)gmail.com>
Date: 01/16/2015 18:24 (GMT-06:00)
To: Discussion of the yt analysis package <yt-users(a)lists.spacepope.org>
Subject: Re: [yt-users] cut_region: can I make an expression dimensionless?
Actually the more I look at this, the more I think it's probably quite easy to turn
this into a data selector itself, avoiding the need for a cut region. Should be
straightforward to add it to selection_routines and selection_data_containers and have it
work out of the box.
On Fri, Jan 16, 2015 at 6:20 PM, Matthew Turk <matthewturk(a)gmail.com> wrote:
On Wed, Jan 14, 2015 at 11:03 AM, Stuart Levy <salevy(a)illinois.edu> wrote:
Using one of Sam's past e-mails to answer my own question, it at least syntactically
works to use the '.uq' unit-quantity attribute of a YT object to get something
that has the units of the object, so e.g. 0.78 * obj['x'].uq is 0.78 in x's
length units. So it actually seems to work to say:
cr = ds.cut_region( dd, ["obj['z']-(obj['x']**2 +
obj['y']**2)/(2.0*obj['z'].uq) < 0.78*obj['z'].uq"])
As it turns out, I'll look for another lower-level way to do this - with the above
cut_region applied, 32GB of RAM isn't enough to process a single data field of about
512^3, and it takes several minutes of CPU time even to start. But it's good to
know that the above is possible.
Glad you kind of got it working ... this is kind of ridiculous that it takes so much,
though. What I think could cut it dowen considerably is to reduce the numebr of
sequential numpy operations; right now it's computing them and storing temporary
arrays like crazy. Unfortunately I don't know how one might do this with the current
setup of cut_region.
Perhaps one way would be to make a derived field that is each component, and inside it do
each operation inline, then apply the conditional there?
On 1/14/15 10:26 AM, Stuart Levy wrote:
Hello yt people,
I'm hoping to write a cut_region expression that (a) depends on position and (b) does
it in a nonlinear way - I'd like to do a sort of paraboloidal cut, like
ds.cut_region(dd, "obj['z'] - (obj['x']**2 +
obj['y']**2)/2.0 < 0.78")
er, correction - cut_region()'s 2nd arg is a  list of strings rather than a string,
so I'd tried
ds.cut_region(dd, ["obj['z'] - (obj['x']**2 +
obj['y']**2)/2.0 < 0.78"])
But this runs afoul of the unit-checking - obj['z'] doesn't have the same
units as obj['x']**2.
Somehow I either need to cast all the obj terms to be dimensionless ("trust me, I
promise it's right"), or else give dimensions of length to the constants.
Should there be a way to do either one?
yt-users mailing list