[yt-users] How to use if, elif, else statements in creating a derived field

Reju Sam John rejusamjohn at gmail.com
Mon Oct 21 04:15:56 PDT 2013


Dear Kacper,

Thanks thanks a lot... by combining your and my code I sussed in creating
my derived field. The new code is follows....

@derived_field(name = "MyField")
def my_new_field(field, data):
    if np.where(data["MachNumber"] <= 2):
        return (.5* data["MachNumber"]) * data["Temperature"]
    elif np.where(data["MachNumber"] <= 100):
        return (.5* (data["MachNumber"])**4) + (.5* (data["MachNumber"])**3)
    else:
        return 5.446361E-01


On Mon, Oct 21, 2013 at 4:07 PM, Kacper Kowalik <xarthisius.kk at gmail.com>wrote:

> On 10/21/2013 12:31 PM, Reju Sam John wrote:
> > Dear Kacper,
> >  This is my backtrace....
> >
> > Traceback (most recent call last):
> >   File "cosmic_ray_fra.py", line 50, in <module>
> >     p = pc.add_slice("MyField", 2)
> >   File
> >
> "/data1/pdf/csurajit/yt-x86_64/src/yt-hg/yt/visualization/plot_collection.py",
> > line 430, in add_slice
> >     center=center, **field_parameters)
> >   File
> >
> "/data1/pdf/csurajit/yt-x86_64/src/yt-hg/yt/data_objects/data_containers.py",
> > line 1058, in __init__
> >     self._refresh_data()
> >   File
> >
> "/data1/pdf/csurajit/yt-x86_64/src/yt-hg/yt/data_objects/data_containers.py",
> > line 320, in _refresh_data
> >     self.get_data()
> >   File
> >
> "/data1/pdf/csurajit/yt-x86_64/src/yt-hg/yt/data_objects/data_containers.py",
> > line 859, in get_data
> >     if self._generate_field(field):
> >   File
> >
> "/data1/pdf/csurajit/yt-x86_64/src/yt-hg/yt/data_objects/data_containers.py",
> > line 362, in _generate_field
> >     self[field] = self.pf.field_info[field](self)
> >   File
> >
> "/data1/pdf/csurajit/yt-x86_64/src/yt-hg/yt/data_objects/field_info_container.py",
> > line 395, in __call__
> >     dd = self._function(self, data)
> >   File "cosmic_ray_fra.py", line 32, in my_new_field
> >     if data.pf["MachNumber"] < 2:
> >   File
> >
> "/data1/pdf/csurajit/yt-x86_64/src/yt-hg/yt/data_objects/static_output.py",
> > line 147, in __getitem__
> >     raise KeyError(key)
> > KeyError: 'MachNumber'
>
> Yeah, that pretty much says that there's no such thing as
> data.pf["MachNumber"]. Please try the derived field that I've suggested
> in my previous mail.
> Cheers,
> Kacper
>
> >
> > On Mon, Oct 21, 2013 at 2:58 PM, Kacper Kowalik <xarthisius.kk at gmail.com
> >wrote:
> >
> >> On 10/21/2013 11:10 AM, Reju Sam John wrote:
> >>> Dear all,
> >>>
> >>> I would like to create a derived field which should return a value
> >>> according to specified conditions. My definition of new field is shown
> >>> below.. But it is giving error.
> >>>
> >>>
> >>> @derived_field(name = "MyField")
> >>> def my_new_field(field, data):
> >>>     if data.pf["MachNumber"] < 2 :
> >>>         return (.5* (data["MachNumber"])**2) - 1
> >>>     elif data.pf["MachNumber"] < 100 :
> >>>         return (.5* (data["MachNumber"])**4) + (.5*
> >> (data["MachNumber"])**3)
> >>>     else:
> >>>        return 5.446361E-01
> >>>
> >>>
> >>>
> >>> Please suggest me how to implement if, elif, else statements in
> creating
> >> a
> >>> derived field.
> >>
> >> Hi,
> >> your derived fields looks fine (except for missing space in the
> >> indentation of the last statement). Could you attach the backtrace?
> >>
> >> One thing that's confusing me is 'data.pf["MachNumber"]'. Do you have a
> >> global parameter with such name defined or you'd rather create a MyField
> >> based on local value of "MachNumber" field?
> >> If the latter you could try something like this:
> >>
> >> @derived_field(name = "MyField")
> >> def my_new_field(field, data):
> >>     temp = data["MachNumber"].copy().fill(5.446361E-01)
> >>     ind = np.where(data["MachNumber"] < 2)
> >>     temp[ind] = 0.5 * data["MachNumber"][ind] ** 2 - 1.0
> >>     ind = np.where((data["MachNumber"] >= 2) &
> >>                    (data["MachNumber"]) < 100))
> >>     temp[ind] = 0.5 * data["MachNumber"][ind] ** 4 + \
> >>                 0.5 * data["MachNumber"][ind] ** 3
> >>     return temp
> >>
> >>
> >> Cheers,
> >> Kacper
> >>
> >>
> >>
> >> _______________________________________________
> >> yt-users mailing list
> >> yt-users at lists.spacepope.org
> >> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
> >>
> >>
> >
> >
> >
> >
> > _______________________________________________
> > yt-users mailing list
> > yt-users at lists.spacepope.org
> > http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
> >
>
>
>
> _______________________________________________
> yt-users mailing list
> yt-users at lists.spacepope.org
> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>
>


-- 
Reju Sam John
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.spacepope.org/pipermail/yt-users-spacepope.org/attachments/20131021/442f4dbc/attachment.html>


More information about the yt-users mailing list