[yt-users] error with derived field: operands could not be broadcast together with shapes
Jean-Claude Passy
jcpassy at gmail.com
Tue May 1 12:35:57 PDT 2012
Thanks Britton, it works perfectly.
Cheers,
JC
On 5/1/12 1:04 PM, Britton Smith wrote:
> Hi JC,
>
> This is happening because the generation of the field happens grid by
> grid, so you're comparing the field for the entire region to the field
> for just one grid.
>
> A very similar question was posed on yt-dev about a week ago, but for
> some reason I can't find a record of it in the archive. I've found it
> in my email so I'll paste it here. Sorry for it being in reverse
> order and a bit difficult to read.
>
> Britton
>
>
>
> ---------- Forwarded message ----------
> From: *Geoffrey So* <gsiisg at gmail.com <mailto:gsiisg at gmail.com>>
> Date: Thu, Apr 26, 2012 at 4:11 PM
> Subject: Re: [yt-dev] derived field from two datasets
> To: yt-dev at lists.spacepope.org <mailto:yt-dev at lists.spacepope.org>
>
>
> ok changing the line to
> data2 = pf2.h.grids[data.id <http://data.id/> - data._id_offset]
> worked
>
> Thanks so much:-)
>
> From
> G.S.
>
> On Thu, Apr 26, 2012 at 1:04 PM, Matthew Turk <matthewturk at gmail.com
> <mailto:matthewturk at gmail.com>> wrote:
>
> Ah, don't ask for [field], just get .grids[ ... ].
>
> -Matt
>
> On Thu, Apr 26, 2012 at 4:02 PM, Geoffrey So <gsiisg at gmail.com
> <mailto:gsiisg at gmail.com>> wrote:
> > The new add field line
> > pf1.field_info.add_field("CompareIonization", function =
> _NewField,
> > validators = [ValidateGridType()])
> > but that got me a new set of errors
> > KeyError: <yt.data_objects.field_info_container.DerivedField
> object at
> > 0x1065cbb90>
> >
> > full trace
> > Traceback pasted to
> http://paste.yt-project.org/show/sIW43mg7AdRaKJELo0U1
> >
> > From
> > G.S.
> >
> > On Thu, Apr 26, 2012 at 12:54 PM, Matthew Turk
> <matthewturk at gmail.com <mailto:matthewturk at gmail.com>>
> > wrote:
> >>
> >> Hi Geoffrey,
> >>
> >> AH! Rats. I forgot one thing. In the call to add_field,
> include a
> >> validator to ensure you're getting grids, not regions:
> >>
> >> validators = [ValidateGridType()]
> >>
> >> This script, by the way, will *only* work with unigrid where
> the grid
> >> IDs match between the two datasets. (Doing it with AMR is possible
> >> but will be a hassle.) What that line does is cross-correlate
> grids
> >> between the two parameter files.
> >>
> >> -Matt
> >>
> >> On Thu, Apr 26, 2012 at 3:50 PM, Geoffrey So <gsiisg at gmail.com
> <mailto:gsiisg at gmail.com>> wrote:
> >> > Yeah I think that should do exactly what I want.
> >> >
> >> > The script is at
> >> > http://paste.yt-project.org/show/2324/
> >> >
> >> > gave me these error:
> >> > http://paste.yt-project.org/show/5XFq1xU2iVxiA9MTtT3v
> >> >
> >> > pf_compare was ran without error, the error occurs when I
> tried to call
> >> > on dd["CompareIonization"]
> >> >
> >> > Can you also explain what this line does with the data.id
> <http://data.id/> and
> >> > _id_offset?
> >> > data2 = pf2.h.grids[data.id <http://data.id/> -
> data._id_offset][field]
> >> >
> >> > From
> >> > G.S.
> >> >
> >> > On Thu, Apr 26, 2012 at 12:15 PM, Matthew Turk
> <matthewturk at gmail.com <mailto:matthewturk at gmail.com>>
> >> > wrote:
> >> >>
> >> >> Hi Geoffrey,
> >> >>
> >> >> On Thu, Apr 26, 2012 at 3:09 PM, Geoffrey So
> <gsiisg at gmail.com <mailto:gsiisg at gmail.com>> wrote:
> >> >> > This is very close to what I was trying to do, except I wanted
> >> >> > something
> >> >> > slightly more general where I can compare two distinct
> fields from
> >> >> > two
> >> >> > datasets. (what I am trying to do is to use
> >> >> > HI_Density/(HI_Density+HII_Density)) where the HI and HII
> are stored
> >> >> > separately, so I'll need pf1 with field1 and pf2 with field2.)
> >> >> >
> >> >> > Rick recently showed me a rendering where people at
> Argonne made a
> >> >> > rendering
> >> >> > of the fractional difference in HI or HII from two
> simulations, one
> >> >> > with
> >> >> > radiation transport one without, to compare the effects.
> The ability
> >> >> > to
> >> >> > call two different fields from two different simulation
> parameters in
> >> >> > creating a derived field would be essential to doing
> something like
> >> >> > that.
> >> >>
> >> >> Here's a video of it, for everyone curious:
> >> >>
> >> >> http://www.youtube.com/watch?v=hDh4NB31e2s
> >> >>
> >> >> >
> >> >> > Forgive my yt skills. I tried to first use the script you
> provided
> >> >> > as
> >> >> > an
> >> >> > example, but I wasn't sure how to get values from
> pf_compare, I tried
> >> >> >
> >> >> > dd1=pf1.h.all_data()
> >> >> > dd1['NewField']
> >> >> >
> >> >> > but it gives:
> >> >> >
> >> >> > TypeError: _NewField() takes exactly 4 arguments (2 given)
> >> >>
> >> >> Okay, I should have been more clear. What you want to do is
> call:
> >> >>
> >> >> pf_compare(pf1, pf2, some_field)
> >> >>
> >> >> And then pf1 should have the field accessible. It doesn't
> return the
> >> >> field; what it does is make the field accessible to yt
> functionality.
> >> >>
> >> >> Here's a closer example, based on what you have asked for:
> >> >>
> >> >> def pf_compare(pf1, pf2):
> >> >> def _NewField(field, data):
> >> >> data2 = pf2.h.grids[data.id <http://data.id/> -
> data._id_offset][field]
> >> >> return
> >> >> data["HI_Density"]/(data2["HI_Density"]+data2["HII_Density"]))
> >> >> pf1.field_info.add_field("CompareIonization", function =
> _NewField)
> >> >>
> >> >> pf1 = load( ... )
> >> >> pf2 = load( ... )
> >> >> pf1.h
> >> >> pf_compare(pf1, pf2)
> >> >>
> >> >> # Now you can do:
> >> >>
> >> >> dd = pf1.h.all_data()
> >> >> dd["CompareIonization"]
> >> >>
> >> >>
> >> >> -Matt
> >> >>
> >> >> >
> >> >> >
> >> >> >
> >> >> >
> --------------------------------------------------------------------------------------
> >> >> >
> >> >> > What I was hoping to be able to do is something like:
> >> >> >
> >> >> > def pf_compare(pf1, field1, pf2, field2):
> >> >> > def _NewField(field1, data1, field2, data2):
> >> >> > return data1[field1] / data2[field2] # or any
> calculation
> >> >> > involving data1,2 and field1,2
> >> >> > pf1.field_info.add_field("NewField", function = _NewField)
> >> >> >
> >> >> > pf1 = load('DD###1')
> >> >> > pf2 = load('DD###2')
> >> >> >
> >> >> > and call
> >> >> >
> >> >> > pf1.h.all_data()['NewField']
> >> >> >
> >> >> > Where "NewField" involves two different fields from two
> different
> >> >> > dataset
> >> >> >
> >> >> > This seems very possible from the example you wrote Matt,
> but I guess
> >> >> > I'm
> >> >> > stuck on how to call the values or make a plot of
> "NewField" once it
> >> >> > is
> >> >> > defined.
> >> >> >
> >> >> > From
> >> >> > G.S.
> >> >> >
> >> >> >
> >> >> > On Thu, Apr 26, 2012 at 5:02 AM, Matthew Turk
> <matthewturk at gmail.com <mailto:matthewturk at gmail.com>>
> >> >> > wrote:
> >> >> >>
> >> >> >> Hi Geoffrey,
> >> >> >>
> >> >> >> There's no example per se, but I'll try to give you one.
> This
> >> >> >> sketch
> >> >> >> should give you an idea. There's a way to do this for
> AMR grids
> >> >> >> which
> >> >> >> would be similar (you'd use a covering grid) but I think
> you're
> >> >> >> using
> >> >> >> static refinement so that makes it a bit easier. We want
> to wrap
> >> >> >> this
> >> >> >> in a function:
> >> >> >>
> >> >> >> def pf_compare(pf1, pf2, field):
> >> >> >> def _NewField(field, data):
> >> >> >> return data[field] / pf2.h.grids[data.id
> <http://data.id/> -
> >> >> >> data._id_offset][field]
> >> >> >> pf1.field_info.add_field("Compare%s" % field, function =
> >> >> >> _NewField)
> >> >> >>
> >> >> >> pf1 = load( ... )
> >> >> >> pf2 = load( ... )
> >> >> >> pf1.h
> >> >> >> pf_compare(pf1, pf2, "Density")
> >> >> >>
> >> >> >> Now you should have CompareDensity.
> >> >> >>
> >> >> >> Let me know if that works. In the discussion document
> for yt 3.0
> >> >> >> Britton brought up that we should have a grammar for this
> type of
> >> >> >> situation.
> >> >> >>
> >> >> >> -Matt
> >> >> >>
> >> >> >> On Wed, Apr 25, 2012 at 3:39 PM, Geoffrey So
> <gsiisg at gmail.com <mailto:gsiisg at gmail.com>>
> >> >> >> wrote:
> >> >> >> > Hi, I was wondering if there's an example of how to
> create a
> >> >> >> > derived
> >> >> >> > field
> >> >> >> > from two different datasets.
> >> >> >> >
> >> >> >> > From
> >> >> >> > G.S.
> >> >> >> >
> >> >> >> > _______________________________________________
> >> >> >> > yt-dev mailing list
> >> >> >> > yt-dev at lists.spacepope.org
> <mailto:yt-dev at lists.spacepope.org>
> >> >> >> >
> http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
> >> >> >> >
> >> >> >> _______________________________________________
> >> >> >> yt-dev mailing list
> >> >> >> yt-dev at lists.spacepope.org
> <mailto:yt-dev at lists.spacepope.org>
> >> >> >> http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
> >> >> >
> >> >> >
> >> >> >
> >> >> > _______________________________________________
> >> >> > yt-dev mailing list
> >> >> > yt-dev at lists.spacepope.org <mailto:yt-dev at lists.spacepope.org>
> >> >> > http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
> >> >> >
> >> >> _______________________________________________
> >> >> yt-dev mailing list
> >> >> yt-dev at lists.spacepope.org <mailto:yt-dev at lists.spacepope.org>
> >> >> http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
> >> >
> >> >
> >> >
> >> > _______________________________________________
> >> > yt-dev mailing list
> >> > yt-dev at lists.spacepope.org <mailto:yt-dev at lists.spacepope.org>
> >> > http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
> >> >
> >> _______________________________________________
> >> yt-dev mailing list
> >> yt-dev at lists.spacepope.org <mailto:yt-dev at lists.spacepope.org>
> >> http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
> >
> >
> >
> > _______________________________________________
> > yt-dev mailing list
> > yt-dev at lists.spacepope.org <mailto:yt-dev at lists.spacepope.org>
> > http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
> >
> _______________________________________________
> yt-dev mailing list
> yt-dev at lists.spacepope.org <mailto:yt-dev at lists.spacepope.org>
> http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
>
>
>
> _______________________________________________
> yt-dev mailing list
> yt-dev at lists.spacepope.org <mailto:yt-dev at lists.spacepope.org>
> http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
>
>
> On Tue, May 1, 2012 at 12:27 PM, Jean-Claude Passy <jcpassy at gmail.com
> <mailto:jcpassy at gmail.com>> wrote:
>
> Hi all,
>
> I am trying to compare the energy between two datasets. I execute
> the following script that uses the derived field 'RelativeEnergy':
>
> --------------------------------------------------------------------------------------------------------------------------------------------------
>
> def _RelativeEnergy(field, data):
>
> return
> (data["TotalEnergy"]-data.pf.parameters["TotalEnergy_ref"])/data.pf.parameters["TotalEnergy_ref"]
>
> add_field("RelativeEnergy", function=_RelativeEnergy)
>
>
> filen1 = 'helix/DD0000/CE0000'
>
> pf1 = load(filen1)
>
> region1 = pf1.h.region([0.5, 0.5, 0.5], [0.0, 0.0, 0.0], [1.0,
> 1.0, 1.0])
>
> energy1 = region1["TotalEnergy"]
>
>
> filen2 = 'parallel/DD0000/CE0000'
>
> pf2 = load(filen2)
>
> region2 = pf2.h.region([0.5, 0.5, 0.5], [0.0, 0.0, 0.0], [1.0,
> 1.0, 1.0])
>
> energy2 = region2["TotalEnergy"]
>
>
> # Adding reference energy into pf2
>
> pf2.parameters["TotalEnergy_ref"] = energy1
>
>
> delta_energy = region2["RelativeEnergy"]
>
>
> pc = PlotCollection(pf2)
>
> pc.add_slice("RelativeEnergy",2,center=[0.5, 0.5, 0.5])
>
> pc.set_lim((0.4, 0.6, 0.4, 0.6))
>
> pc.save('DeltaEnergy')
>
> --------------------------------------------------------------------------------------------------------------------------------------------------
>
>
> I get the error pasted here:
> http://paste.yt-project.org/show/DPgMjV44JktpXExCljUj/
> The variable delta_energy looks good (same type and size and
> energy1), but the problem arises when I try to take a slice of it.
>
> Any help much appreciated.
> Thanks a lot,
>
> JC
>
> _______________________________________________
> yt-users mailing list
> yt-users at lists.spacepope.org <mailto: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/20120501/a3c26827/attachment.htm>
More information about the yt-users
mailing list