Hi Ben,

I have some code which does this, but I'm in the middle of job stuff at the moment, and it will take me a few days to extract out the relevant parts of the code to get to you (and upgrade to yt3).


On Tue, Jan 13, 2015 at 10:49 AM, Ben Thompson <bthompson2090@gmail.com> wrote:
Hello everyone.

I was wondering if anyone has had experience with producing a profile plot from a 2d projection object (FRB object).

Essentially, what I am trying to do is plot the stellar surface density of a galaxy as a function of radius.

This is achieved by doing the following from a disk YT object called cylinder (in which the origional simulation object is called shot)

center = cylinder.get_field_parameter("center")
normal = cylinder.get_field_parameter("normal")
image_width = (100,"kpc")
three_image_width = YTArray((image_width[0], image_width[0], image_width[0]),image_width[1])
left = center - image_width
right = center + image_width
region = shot.region(center, left, right)

proj = yt.ProjectionPlot(cylinder.ds,"z",[("deposit","stars_density")],center=center,width=image_width,data_source=region,axes_unit="kpc")

the error arrises here

prof = yt.create_profile(proj,bin_fields="cylindrical_r",fields=[("deposit","stars_density")],n_bins=128,weight_field=None )

where I get the error

/gpfs/home/........./profiles.pyc in create_profile(data_source, bin_fields, fields, n_bins, extrema, logs, units, weight_field, accumulation, fractional)
   1304     else:
   1305         raise NotImplementedError
-> 1306     bin_fields = data_source._determine_fields(bin_fields)
   1307     fields = data_source._determine_fields(fields)
   1308     if units is not None:

AttributeError: 'FixedResolutionBuffer' object has no attribute '_determine_fields'

Any ideas how to get around this error?

Also some other things to add as a postscript. Since how the projection works, if I provide weights=None as a keyword argument within the ProjectionPlot object, I get a surface density (g/cm^2). But also a "cylindrical_r" in cm^2 as well. I *think* the way to get around this is to do another projection where weights="ones", get the radius values out of that profile.. and then in matplotlib, useing the surface density array from the former profile, and the radius bin array from the latter... Produce a plot of the surface density as a function of radius from those two arrays (I might check by hand afterwards to see if this does the trick). This seems kinda convoluted so I am wondering if there is an easier way than this.

yt-users mailing list

Cameron Hummels
Postdoctoral Researcher
Steward Observatory
University of Arizona