[yt-users] Problem trying to define a new field

Britton Smith brittonsmith at gmail.com
Mon Nov 4 07:21:05 PST 2013


Hi Kearn,

I recommend doing something like the following:

Create a sphere on you're own with
sphere = pf.h.sphere(center, (radius, units))

Then, calculate the maximum density and position of that with some numpy
array operations and set it as a "field parameter":
r_max = sp['Radius'][sp['Density'] == sp['Density'].max()]
sp.set_field_parameter('r_max', r_max)

Then, in your field definition, you can do:
r_max = data.get_field_parameter('rmax')

and then do the rest of the field definition just as you described.

Finally, instead of add_profile_sphere, you can you add_profile_object
which will take the sphere you just created as an argument.

That should do what you want.  Feel free to write back if you have more
questions.

Britton


On Mon, Nov 4, 2013 at 2:49 PM, <k.grisdale at surrey.ac.uk> wrote:

> Hi yt-users
>
> I’m attempting to plot some profiles as a function of radius/radiusSH,
> where radiusSh is the radius of a shock. However I am not sure what the
> simplest way of getting yt to plot this. I have been using the following
> commands to produce the profiles.
> :
>
> pc = PlotCollection(p6, center = cen)
> pc.add_profile_sphere(0.5, "cm", ["Radius", "Density"], weight = "Denin”)
>
> I have also tried to define a new field:
>
>
> @derived_field(name = "RRsh", take_log = False, validators =
> [ValidateParameter("rsh")])
> def RRshunits(field, data):
>     value, rsh = p6.h.find_max("Density")
>     return(data["Radius"]/rsh)
>
> but this leads to the following error:
>
> Traceback (most recent call last):
>   File "profiles.py", line 21, in <module>
>     pc.add_profile_sphere(0.5, "cm", ["RRsh", "Denin"], weight = "Denin")
>   File
> "/Applications/Code/yt/yt-x86_64/src/yt-hg/yt/visualization/plot_collection.py",
> line 1058, in add_profile_sphere
>     figure=figure, axes=axes)
>   File
> "/Applications/Code/yt/yt-x86_64/src/yt-hg/yt/visualization/plot_collection.py",
> line 961, in add_profile_object
>     lazy_reader=lazy_reader)[0]
>   File
> "/Applications/Code/yt/yt-x86_64/src/yt-hg/yt/data_objects/derived_quantities.py",
> line 92, in __call__
>     return self._call_func_lazy(args, kwargs)
>   File
> "/Applications/Code/yt/yt-x86_64/src/yt-hg/yt/data_objects/derived_quantities.py",
> line 99, in _call_func_lazy
>     rv = self.func(GridChildMaskWrapper(g, self._data_source), *args,
> **kwargs)
>   File
> "/Applications/Code/yt/yt-x86_64/src/yt-hg/yt/data_objects/derived_quantities.py",
> line 615, in _Extrema
>     if data[field].size < 1:
>   File
> "/Applications/Code/yt/yt-x86_64/src/yt-hg/yt/data_objects/derived_quantities.py",
> line 60, in __getitem__
>     data = self.data_source._get_data_from_grid(self.grid, item)
>   File
> "/Applications/Code/yt/yt-x86_64/src/yt-hg/yt/data_objects/data_containers.py",
> line 95, in save_state
>     tr = func(self, grid, field, *args, **kwargs)
>   File
> "/Applications/Code/yt/yt-x86_64/src/yt-hg/yt/data_objects/data_containers.py",
> line 2645, in _get_data_from_grid
>     tr = grid[field]
>   File
> "/Applications/Code/yt/yt-x86_64/src/yt-hg/yt/data_objects/grid_patch.py",
> line 157, in __getitem__
>     self.get_data(key)
>   File
> "/Applications/Code/yt/yt-x86_64/src/yt-hg/yt/data_objects/grid_patch.py",
> line 200, in get_data
>     self._generate_field(field)
>   File
> "/Applications/Code/yt/yt-x86_64/src/yt-hg/yt/data_objects/grid_patch.py",
> line 132, in _generate_field
>     self.pf.field_info[field].check_available(self)
>   File
> "/Applications/Code/yt/yt-x86_64/src/yt-hg/yt/data_objects/field_info_container.py",
> line 366, in check_available
>     validator(data)
>   File
> "/Applications/Code/yt/yt-x86_64/src/yt-hg/yt/data_objects/field_info_container.py",
> line 442, in __call__
>     raise NeedsParameter(doesnt_have)
> yt.data_objects.field_info_container.NeedsParameter: (['rsh’])
>
> Am I missing something in my field definition or is their a simpler way to
> go about this?
>
> Thanks
>
> Kearn
> _______________________________________________
> yt-users mailing list
> yt-users at lists.spacepope.org
> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.spacepope.org/pipermail/yt-users-spacepope.org/attachments/20131104/5d6e16f0/attachment.htm>


More information about the yt-users mailing list