Hi Matt

First, I got the idea for ValidateGridType from the definition of the field "particle_density" in yt/data_objects/universal_fields.py, which uses data.NumerOfParticles and does not result in an error with AMRSmoothedCoveringGrid. So I guess that field also returns interpolated particle density?

Secondly, simply commenting out the test for NumberOfParticles == 0 doesn't work, "DataCubeError: CombineGrids: Three dimensions required for g_data[0]." Let me know if you want the full traceback.

Btw, here's an example script with which you should be able to reproduce the error: http://paste.yt-project.org/show/3069/

Mike


On Tue, Jan 22, 2013 at 2:10 AM, Matthew Turk <matthewturk@gmail.com> wrote:
Hi Mike,

I think that the checks for .NumberOfParticles may be unnecessary in
the dm_density calls.  Removing those, and simply returning an empty
deposition field if there are no particles, will likely give the same
results as what it currently does.  Switching between ValidateGridType
and ValidateSpatial will turn on/off fields in ways I think we may
want to avoid.  For particle density fields specifically it would
likely result in estimates for particle density that are generated at
a coarser level then interpolated to a finer level.

-Matt

On Tue, Jan 22, 2013 at 1:38 AM, Michael Kuhlen <mqk@astro.berkeley.edu> wrote:
> Sorry to revive this old(ish) thread, but I've been experiencing similar
> troubles to Renyue's. Mine, however, were not completely fixed by switching
> from yt.utilities.amr_utils to yt.utilities.lib. I was still getting this
> error:
>
> AttributeError: 'AMRSmoothedCoveringGrid' object has no attribute
> 'NumberOfParticles'
>
> The solution for me was to switch from validators=[ValidateSpatial(0)] to
> validators=[ValidateGridType()] in the add_field() call. Since many of the
> fields defined in yt/frontends/*/fields.py still use ValidateSpatial(0), I'm
> getting the same NumberOfParticles AttributeError when I try to do volume
> renderings of "built-in" fields like dm_density.
>
> Cheers,
> Mike
>
>
>
>
>
>
> On Sun, Jan 13, 2013 at 1:11 PM, Renyue Cen <cen@astro.princeton.edu> wrote:
>>
>> HI Matt,
>>
>> That worked (after I remove the following things that I added following
>> the line " from yt.utilities.lib import CICDeposit_3":
>> #from yt.utilities.cosmology import Cosmology
>> #from field_info_container import \
>> #    add_field, \
>> #    ValidateDataField, \
>> #    ValidateGridType, \
>> #    ValidateParameter, \
>> #    ValidateSpatial, \
>> #    NeedsGridType, \
>> #    NeedsOriginalGrid, \
>> #    NeedsDataField, \
>> #    NeedsProperty, \
>> #    NeedsParameter
>>
>> which was copied elsewhere earlier and apparent messed up with the
>> CICDeposit_3 import a line before.
>>
>> Thanks very much,
>> Renyue
>>
>>
>> On Jan 13, 2013, at 3:35 PM, Matthew Turk wrote:
>>
>> > Hi Renyue,
>> >
>> > No, that should work.  What I'm actually seeing now is that you do in
>> > fact use amr_utils -- I missed this before -- to get the CICDeposit_3.
>> > The exception from the NameError is probably killing its
>> > availability.
>> >
>> > So here's what to do:
>> >
>> > 1) Replace your previous import, which I suggested you remove, of
>> > yt.utilities.amr_utils with:
>> >
>> > from yt.utilities.lib import CICDeposit_3
>> >
>> > 2) Change your call to CICDeposit_3 from amr_utils.CICDeposit_3 to
>> > CICDeposit_3
>> >
>> > And try again?
>> >
>> > -Matt
>> >
>> > On Sun, Jan 13, 2013 at 3:31 PM, Renyue Cen <cen@astro.princeton.edu>
>> > wrote:
>> >> Hi Matt,
>> >>
>> >> This field (SFRdensity) was defined before the
>> >> pf = ...
>> >> statement, along with some other simpler definitions of gas variables
>> >> that did not require CIC
>> >> and seem to work.
>> >>
>> >> Was I using the wrong syntax or something?
>> >>
>> >> Renyue
>> >>
>> >> On Jan 13, 2013, at 3:25 PM, Matthew Turk wrote:
>> >>
>> >>> Hi Renyue,
>> >>>
>> >>> One important thing to note is that the field has to be added before
>> >>> you instantiate the parameter file; i.e., you must do:
>> >>>
>> >>> add_field( ... )
>> >>> pf = ...
>> >>>
>> >>> because the parameter file, upon creation of the hierarchy, performs
>> >>> an auto-detection step.  This auto-detection step determines which
>> >>> fields are available based on their dependencies.
>> >>>
>> >>> -Matt
>> >>>
>> >>> On Sun, Jan 13, 2013 at 3:22 PM, Renyue Cen <cen@astro.princeton.edu>
>> >>> wrote:
>> >>>> Hi Matt,
>> >>>>
>> >>>> It seems that my attempt to reuse "star_density" for a subset of
>> >>>> stars does not work:
>> >>>> "star_density" remains the density of all stars when plotted.
>> >>>> But I also failed to redefine a new density that is called
>> >>>> "SFRdensity" and feed it to AMRKDTree which is in turn
>> >>>> fed to camera to volume render. Here is what I did:
>> >>>>
>> >>>> def _convertDensity(data):
>> >>>>   return data.convert("Density")
>> >>>> def _SFRdensity(field, data):
>> >>>>   blank = na.zeros(data.ActiveDimensions, dtype='float32')
>> >>>>   if data.NumberOfParticles == 0: return blank
>> >>>> #   filter  = data.pf.time_units['years']*(data.pf.current_time -
>> >>>> data['creation_time']) < 1.e8
>> >>>>   filter  = data.pf.time_units['years']*(data.pf.current_time -
>> >>>> data['creation_time']) < 1.e6
>> >>>>   if not filter.any(): return blank
>> >>>>
>> >>>> amr_utils.CICDeposit_3(data["particle_position_x"][filter].astype(na.float64),
>> >>>>
>> >>>> data["particle_position_y"][filter].astype(na.float64),
>> >>>>
>> >>>> data["particle_position_z"][filter].astype(na.float64),
>> >>>>
>> >>>> data["particle_mass"][filter].astype(na.float32),
>> >>>>                          na.int64(na.where(filter)[0].size),
>> >>>>                          blank,
>> >>>> na.array(data.LeftEdge).astype(na.float64),
>> >>>>
>> >>>> na.array(data.ActiveDimensions).astype(na.int32),
>> >>>>                          na.float64(data['dx']))
>> >>>>   return blank
>> >>>> add_field("SFRdensity", function=_SFRdensity,
>> >>>>         validators=[ValidateSpatial(0)],
>> >>>> convert_function=_convertDensity)
>> >>>>
>> >>>>   volume3 = AMRKDTree(pf, fields=["SFRdensity"]
>> >>>>              ,no_ghost=False, tree_type="domain"
>> >>>>              ,le=c-0.5*WW, re=c+0.5*WW)
>> >>>>   cam = pf.h.camera(c, L, W, (Nvec,Nvec), tf3, volume=volume3,
>> >>>> no_ghost=False,log_fields=None
>> >>>>                 ,north_vector=dir)
>> >>>>
>> >>>>
>> >>>> with the following error message:
>> >>>>
>> >>>> Traceback (most recent call last):
>> >>>> File "SFR.py", line 393, in <module>
>> >>>>   ,le=c-0.5*WW, re=c+0.5*WW)
>> >>>> File
>> >>>> "/u/jhwise/local/lib/python2.7/site-packages/yt-2.4-py2.7-linux-x86_64.egg/yt/utilities/amr_kdtree/amr_kdtree.py",
>> >>>> line 316, in __init__
>> >>>>   for field in self.fields]
>> >>>> File
>> >>>> "/u/jhwise/local/lib/python2.7/site-packages/yt-2.4-py2.7-linux-x86_64.egg/yt/data_objects/field_info_container.py",
>> >>>> line 71, in __missing__
>> >>>>   return self.fallback[key]
>> >>>> File
>> >>>> "/u/jhwise/local/lib/python2.7/site-packages/yt-2.4-py2.7-linux-x86_64.egg/yt/data_objects/field_info_container.py",
>> >>>> line 71, in __missing__
>> >>>>   return self.fallback[key]
>> >>>> File
>> >>>> "/u/jhwise/local/lib/python2.7/site-packages/yt-2.4-py2.7-linux-x86_64.egg/yt/data_objects/field_info_container.py",
>> >>>> line 70, in __missing__
>> >>>>   raise KeyError("No field named %s" % key)
>> >>>> KeyError: 'No field named SFRdensity'
>> >>>>
>> >>>>
>> >>>> So I must be doing something wrong with defining the SFRdensity
>> >>>> field.
>> >>>>
>> >>>> Thanks very much,
>> >>>> Renyue
>> >>>>
>> >>>>
>> >>>> On Jan 13, 2013, at 1:20 PM, Matthew Turk wrote:
>> >>>>
>> >>>>> Hi Renyue,
>> >>>>>
>> >>>>> The module amr_utils became lib a while back.  But my guess is that
>> >>>>> you probably don't need to import it anyway, unless you are
>> >>>>> explicitly
>> >>>>> using one of the routines it provides.
>> >>>>>
>> >>>>> -Matt
>> >>>>>
>> >>>>> On Sun, Jan 13, 2013 at 12:18 PM, Renyue Cen
>> >>>>> <cen@astro.princeton.edu> wrote:
>> >>>>>> Hi,
>> >>>>>>
>> >>>>>> I am trying to compute gridded density of some subset of particles.
>> >>>>>> So I tried to import some modules first in the python script as
>> >>>>>> follows:
>> >>>>>>
>> >>>>>> from yt.data_objects.field_info_container import \
>> >>>>>>  FieldInfoContainer, \
>> >>>>>>  NullFunc, \
>> >>>>>>  TranslationFunc, \
>> >>>>>>  FieldInfo, \
>> >>>>>>  ValidateParameter, \
>> >>>>>>  ValidateDataField, \
>> >>>>>>  ValidateProperty, \
>> >>>>>>  ValidateSpatial, \
>> >>>>>>  ValidateGridType
>> >>>>>> import yt.data_objects.universal_fields
>> >>>>>> from yt.utilities.physical_constants import mh
>> >>>>>> from yt.funcs import *
>> >>>>>> import yt.utilities.amr_utils as amr_utils
>> >>>>>>
>> >>>>>>
>> >>>>>> But I got this error message:
>> >>>>>>
>> >>>>>> Traceback (most recent call last):
>> >>>>>> File "SFR.py", line 28, in <module>
>> >>>>>>  import yt.utilities.amr_utils as amr_utils
>> >>>>>> ImportError: No module named amr_utils
>> >>>>>>
>> >>>>>>
>> >>>>>> Am I doing something wrong?
>> >>>>>>
>> >>>>>> Thanks,
>> >>>>>> Renyue
>> >>>>
>> >>
>>
>> _______________________________________________
>> yt-users mailing list
>> yt-users@lists.spacepope.org
>> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>
>
>
>
> --
> *********************************************************************
> *                                                                   *
> *  Dr. Michael Kuhlen              Theoretical Astrophysics Center  *
> *  email: mqk@astro.berkeley.edu   UC Berkeley                      *
> *  cell phone: (831) 588-1468      B-116 Hearst Field Annex # 3411  *
> *  skype username: mikekuhlen      Berkeley, CA 94720               *
> *                                                                   *
> *********************************************************************
_______________________________________________
yt-users mailing list
yt-users@lists.spacepope.org
http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org



--
*********************************************************************
*                                                                   *
*  Dr. Michael Kuhlen              Theoretical Astrophysics Center  *
*  email: mqk@astro.berkeley.edu   UC Berkeley                      *
*  cell phone: (831) 588-1468      B-116 Hearst Field Annex # 3411  *
*  skype username: mikekuhlen      Berkeley, CA 94720               *
*                                                                   *
*********************************************************************