<div dir="ltr"><div class="gmail_default" style="font-family:tahoma,sans-serif">Thank you Matt and Geoffrey for the help.<br></div><div class="gmail_default" style="font-family:tahoma,sans-serif">That cleared things up for now.<br>
<br>Best,<br></div><div class="gmail_default" style="font-family:tahoma,sans-serif">Semyeong<br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Aug 20, 2013 at 11:29 AM, Matthew Turk <span dir="ltr"><<a href="mailto:matthewturk@gmail.com" target="_blank">matthewturk@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Semyeong,<br>
<div class="im"><br>
On Tue, Aug 20, 2013 at 12:22 AM, Semyeong Oh <<a href="mailto:semyeongoh@gmail.com">semyeongoh@gmail.com</a>> wrote:<br>
> Hi all,<br>
><br>
> I'm new to yt.<br>
<br>
</div>Welcome to yt!  :)<br>
<div class="im"><br>
> I have questions about making projections of certain region,<br>
> and inspecting the data returned.<br>
><br>
> I made a cube as follows:<br>
><br>
> import pylab as pl<br>
><br>
> center = [0.5, 0.5, 0.5]<br>
> halfwidth = 0.005<br>
> cube = pf.h.region(center, center-pl.ones(3)*halfwidth,<br>
> center+pl.ones(3)*halfwidth, ['Density'])<br>
><br>
> print min(cube['x']), max(cube['x'])<br>
> 0.494873046875 0.505126953125<br>
><br>
> When I print cube['x'].shape, I get (10728,).<br>
<br>
</div>Yup -- so this is because what you're getting isn't actually a cube,<br>
but a rectangular prism that (potentially) covers multiple levels of<br>
resolution.  There are essentially three main types of data objects in<br>
yt:<br>
<br>
1) Non-spatial data sources (this is unfortunately named, since they<br>
are "spatial", they are just not 3D-ordered) which return all the data<br>
points inside a region, in essentially unsorted fashion.  This would<br>
be things like spheres, regions, disks, etc.  This also includes<br>
things like slices and projections, as they are essentially unordered<br>
collections of data.<br>
2) 2D objects that are 2D ordered.  The primary type of this object is<br>
a FixedResolutionBuffer, which can be created from a projection or a<br>
slice.<br>
3) 3D objects that are 3D ordered.  This would be a "covering grid", a<br>
"smoothed covering grid" or a "grid" object.<br>
<br>
(More along these lines can be found here:<br>
<br>
<a href="http://yt-project.org/doc/orientation/index.html" target="_blank">http://yt-project.org/doc/orientation/index.html</a><br>
<br>
including in the "How yt thinks about data" section, but there is some<br>
discussion in the bootcamp materials as well.)<br>
<br>
There are a few reasons for this, the main one of which is that *many*<br>
but not *all* operations don't require spatial ordering.  As an<br>
example, often we want to find out the mean value in a region, or the<br>
center of mass, or something like that, we don't typically need to<br>
know the 3D ordering (as long as we can also have the 3D positions,<br>
which we can through the 'x' 'y' 'z' fields).<br>
<br>
So to get an actual 3D ordering -- which sometimes we need when doing<br>
FFTs or whatever -- you can use a covering grid.  I'll talk below a<br>
bit about getting 2D orderings.<br>
<div class="im"><br>
> I tried to make a projection of this cube along z-axis as follows:<br>
><br>
> proj2 = pf.h.proj(2, 'Density', center=center, source=cube)<br>
><br>
> But I could not understand what is returned.<br>
><br>
> print min(proj2['p<br>
> x']), max(proj2['py']), proj2['px'].shape<br>
> 0.00390625 0.99609375 (19648,)<br>
><br>
> print proj2['Density']<br>
> [ 0.  0.  0. ...,  0.  0.  0.]<br>
><br>
> My questions are:<br>
> 1. What exactly is returned in proj2? Why does it span from 0. to 1. when I<br>
> specified source=cube?<br>
<br>
</div>a) proj2 is the "projection" but it's a data source like any other.<br>
The special fields, "px", "py" are the "pixel" centers, in the x/y<br>
plane of the projection.  Typically, to convert this below<br>
<br>
b) It runs from 0 .. 1 (but with zero as the value outside the cube)<br>
because the projection algorithm utilizes a quadtree that is<br>
initialized to the dimensions of the domain in the image plane.  So if<br>
you have pf.domain_dimensions = [256, 256, 256] the quadtree will<br>
initialize with [256, 256] root nodes.  But, none of those outside the<br>
cube will have non-zero values.<br>
<div class="im"><br>
><br>
> 2. I also tried 'data_source=cube' instead of 'source=cube'. It did not<br>
> raise any error, and returned<br>
> something different: array of same shape, but with different data values.<br>
> Is this keyword also used<br>
> for projection object? Is there a consistent difference between the two<br>
> keywords in yt?<br>
<br>
</div>This is a weak point in yt we have corrected in the<br>
(backwards-incompatible) yt-3.0.  I am upset that this distinction has<br>
persisted, as "data_source", which is used almost everywhere, is then<br>
passed through as a "field_parameter" rathert than anything else.<br>
This is something I am embarrassed about and we have changed it for<br>
the future, but right now it's an ugly point.<br>
<br>
(Perhaps for our final 2.x release we should fix this.)<br>
<div class="im"><br>
><br>
> 3. I could not find documentation on some fields like 'px', 'py' that seem<br>
> to be generated for certain data containers<br>
> (e.g., 't' for ray objects). Is there an exhaustive list of such fields in<br>
> the documentation?<br>
<br>
</div>There is an exhaustive list for derived fields, but these are what<br>
would be considered "field container" fields and are only documented<br>
as needed in the docs, i.e., as related to other concepts.  These are<br>
px, py, pdx, pdy, which are the pixel centers and half-widths (not<br>
full-widths) in the image plane.  For rays, t is the integration<br>
parameter, such that "t * vec + start_position = final_position"<br>
normalized such that t = 1.0 gives final_position.<br>
<br>
As I mentioned above, to convert projections and slices (and cutting<br>
planes) into 2D arrays, you can use either the .to_frb() function (see<br>
help(proj2.to_frb) for more info) or the .to_pw() function.  These two<br>
functions take the variable-resolution data sources and turns them<br>
into 2D arrays.  The second one, to_pw, turns into a plot window<br>
suitable for easy plotting.  The first one, to_frb, turns it into a<br>
FixedResolutionBuffer which can be queried to return any field in the<br>
bounds specified.<br>
<br>
Hope that helps, and please write back with any further questions!<br>
<br>
-Matt<br>
<div class="HOEnZb"><div class="h5"><br>
><br>
> Thanks in advance.<br>
><br>
> Semyeong<br>
><br>
> _______________________________________________<br>
> yt-users mailing list<br>
> <a href="mailto:yt-users@lists.spacepope.org">yt-users@lists.spacepope.org</a><br>
> <a href="http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org" target="_blank">http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org</a><br>
><br>
_______________________________________________<br>
yt-users mailing list<br>
<a href="mailto:yt-users@lists.spacepope.org">yt-users@lists.spacepope.org</a><br>
<a href="http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org" target="_blank">http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org</a><br>
</div></div></blockquote></div><br></div>