Awesome, this looks great. Thanks. I knew I wasn't doing this the smartest and easiest way!
On 26 Aug 2010, at 10:37, Matthew Turk wrote:
On Thu, Aug 26, 2010 at 7:00 AM, John Wise firstname.lastname@example.org wrote:
I wanted to calculate volume filling fractions and mass fractions of gas that met some criteria. Specifically, the fractions that have a certain metallicity. The _Action routine looked promising, but I couldn't figure out how to use it. I remember there was some talk about filters on the list, but I searched and found that it concerned the halo finder.
I might have reinvented the wheel, but this is how I did it.
It's basically _TotalQuantity with a filter. Also I wanted it to accept multiple limits to avoid re-reading the data for every filter.
Was there an easier way to do this?
I think your best bet might be to use cut_region on a data object. This accepts a list of filters and uses them as input to the data region.
It's poorly documented, but I really think it's a useful object and technique. I'll fix this documentation issue ... but it actually performs the cuts as you go, rather than pre-storing a list of cut grids, so it's relatively memory conserving.
field_cuts is a list of statements that get executed with "grid" in the local namespace that should return logicals of the same size as the grid's dimensions. So, for instance:
In : dd = pf.h.all_data() yt DEBUG 2010-08-26 08:36:42,780 Appending object to RedshiftOutput0005 (type: <class 'yt.lagos.HierarchyType.AMRRegion'>) yt DEBUG 2010-08-26 08:36:42,780 Going to obtain 
In : cr = dd.cut_region(["grid['Density'] > 1e-30", "grid['Temperature'] > 1e4"]) yt DEBUG 2010-08-26 08:36:51,151 Appending object to RedshiftOutput0005 (type: <class 'yt.lagos.BaseDataTypes.InLineExtractedRegionBase'>) yt DEBUG 2010-08-26 08:36:51,152 Going to obtain 
In : dd.quantities["Extrema"]("Temperature") Out: [(671.12800064096166, 391670.05340733693)]
In : cr.quantities["Extrema"]("Temperature") Out: [(10000.132791838885, 391670.05340733693)]
Like I said, I'm sorry this is poorly documented, because I think it's a pretty neat technique (and one I've used recently.)
Thanks, John _______________________________________________ Yt-dev mailing list Ytemail@example.com http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
Yt-dev mailing list Ytfirstname.lastname@example.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org