Hi folks,
I'm attempting to run yt's clump finding algorithm on a 2D FLASH dataset.
Out of the box, following the basic example in the docs, I get the session
at the bottom of this email, including an error mentioning an inability to
get certain data from ghost zones.
I am able to get around this by commenting out the following lines in
yt/analysis_modules/level_sets/contour_finder.py
105 for gi,grid in enumerate(grids):
106 pbar.update(gi)
107 cg = grid.retrieve_ghost_zones(1, "tempContours",
smoothed=False)
108 grid_set.update(set(cg._grids))
109 fd = cg["tempContours"].astype('int64')
110 boundary_tree = amr_utils.construct_boundary_relationships(fd)
111 tree.update(((a, b) for a, b in boundary_tree))
which I assume simply allows the code to ignore the ghost zones (which -
wild speculation - maybe yt expects to exist in the 3rd dimension but
don't?). My questions are:
1) Is this likely to have ill effects? (with this change find_clumps()
appears to work, but I haven't inspected the results closely enough to know
if they're reasonable).
2) Is there a different recommended fix?
Thank you,
John
In [1]: from yt.analysis_modules.level_sets.api import *
In [2]: field="Density"
In [3]: step=2.0
In [4]: data_source=pf.h.all_data()
yt : [WARNING ] 2013-07-03 15:22:06,608 Dimensionality less than 3:
reverting to overlap_proj
In [5]: cmin = 10**np.floor(np.log10(data_source[field]).min())
yt : [INFO ] 2013-07-03 15:22:24,519 Getting field dens from 7872
In [6]: cmax = 10**np.floor(np.log10(data_source[field]).max()+1)
In [7]: function='self.data["Density"].size>20'
In [8]: master_clump = Clump(data_source,None,field,function=function)
In [9]: find_clumps(master_clump,cmin,cmax,step)
Finding clumps: min: 1.000000e-28, max: 1.000000e-24, step: 2.000000
yt : [ERROR ] 2013-07-03 15:23:23,911 Covering problem: 190 cells are
uncovered
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
/home/jforbes/yt-x86_64/src/yt-hg/yt/mods.pyc in <module>()
----> 1 find_clumps(master_clump,cmin,cmax,step)
/home/jforbes/yt-x86_64/src/yt-hg/yt/analysis_modules/level_sets/clump_handling.pyc
in find_clumps(clump, min_val, max_val, d_clump)
177 print "Finding clumps: min: %e, max: %e, step: %f" % (min_val,
max_val, d_clump)
178 if min_val >= max_val: return
--> 179 clump.find_children(min_val)
180
181 if (len(clump.children) == 1):
/home/jforbes/yt-x86_64/src/yt-hg/yt/analysis_modules/level_sets/clump_handling.pyc
in find_children(self, min_val, max_val)
118 if max_val is None: max_val = self.max_val
119 contour_info = identify_contours(self.data, self.field,
min_val, max_val,
--> 120 self.cached_fields)
121 for cid in contour_info:
122 new_clump = self.data.extract_region(contour_info[cid])
/home/jforbes/yt-x86_64/src/yt-hg/yt/analysis_modules/level_sets/contour_finder.py
in identify_contours(data_source, field, min_val, max_val, cached_fields)
105 for gi,grid in enumerate(grids):
106 pbar.update(gi)
--> 107 cg = grid.retrieve_ghost_zones(1, "tempContours",
smoothed=False)
108 grid_set.update(set(cg._grids))
109 fd = cg["tempContours"].astype('int64')
/home/jforbes/yt-x86_64/src/yt-hg/yt/data_objects/grid_patch.pyc in
retrieve_ghost_zones(self, n_zones, fields, all_levels, smoothed)
477 level, new_left_edge, **kwargs)
478 else:
--> 479 cube = self.hierarchy.covering_grid(level,
new_left_edge, **kwargs)
480
481 return cube
/home/jforbes/yt-x86_64/src/yt-hg/yt/data_objects/data_containers.pyc in
__init__(self, level, left_edge, dims, fields, pf, num_ghost_zones,
use_pbar, **kwargs)
3712 self.domain_width = np.rint((self.pf.domain_right_edge -
3713
self.pf.domain_left_edge)/self.dds).astype('int64')
-> 3714 self._refresh_data()
3715
3716 def _get_list_of_grids(self, buffer = 0.0):
/home/jforbes/yt-x86_64/src/yt-hg/yt/data_objects/data_containers.pyc in
_refresh_data(self)
3729
3730 def _refresh_data(self):
-> 3731 AMR3DData._refresh_data(self)
3732 self['dx'] = self.dds[0] * np.ones(self.ActiveDimensions,
dtype='float64')
3733 self['dy'] = self.dds[1] * np.ones(self.ActiveDimensions,
dtype='float64')
/home/jforbes/yt-x86_64/src/yt-hg/yt/data_objects/data_containers.pyc in
_refresh_data(self)
318 """
319 self.clear_data()
--> 320 self.get_data()
321
322 def keys(self):
/home/jforbes/yt-x86_64/src/yt-hg/yt/data_objects/data_containers.pyc in
get_data(self, fields)
3773 n_bad = np.where(self[obtain_fields[0]]==-999)[0].size
3774 mylog.error("Covering problem: %s cells are uncovered",
n_bad)
-> 3775 raise KeyError(n_bad)
3776
3777 def _generate_field(self, field):
KeyError: 190