New issue 796: Clump finding fails for uniform grid data https://bitbucket.org/yt_analysis/yt/issue/796/clump-finding-fails-for-unifo...
Kacper Kowalik:
Following script: ``` #!python
import numpy as np from yt.frontends.stream.api import load_uniform_grid from yt.mods import amods
def gaussian(size, sigma): il = size // 2 x, y, z = np.mgrid[-il + 1:il + 1, -il + 1:il + 1, -il + 1:il + 1] sg2 = 2.0 * sigma ** 2 return np.exp(-(x ** 2 + y ** 2 + z ** 2) / sg2) / (np.pi * sg2)
def diag_shift(tab, n): a = np.roll(tab, int(n), axis=0) a = np.roll(a, int(n), axis=1) return np.roll(a, int(n), axis=2)
N = 64 dims = [N, N, N] dens = np.ones(dims) \ + 50.0 * diag_shift(gaussian(N, 5.0), -12) \ + 10.0 * diag_shift(gaussian(N, 3.0), 10)
data = dict(Density=dens) bbox = np.array([[-1.0, 1.0], [-1.0, 1.0], [-1.0, 1.0]]) pf = load_uniform_grid(data, dens.shape, 1.0, bbox=bbox, nprocs=2)
field = "Density" step = 4
data_source = pf.h.all_data()
c_min = 10 ** np.floor(np.log10(data_source[field]).min()) c_max = 10 ** np.floor(np.log10(data_source[field]).max() + 1)
function = 'self.data["%s"].size > 20' % field
master_clump = amods.level_sets.Clump(data_source, None, field, function=function) master_clump.clear_clump_info() master_clump.add_info_item('self.data["%s"].size' % field, '"Cells: %d" % value') master_clump.add_info_item( '(self.data["%s"] * self.data["CellVolume"]).sum()' % field, '"Mass: %e g" % value') master_clump.add_info_item( 'self.data["%s"].mean()' % field, '"Mean density: %e" % value')
amods.level_sets.find_clumps(master_clump, c_min, c_max, step) ```
fails with
``` #!bash
P000 yt : [INFO ] 2014-03-04 18:27:59,250 Parameters: current_time = 0.0 P000 yt : [INFO ] 2014-03-04 18:27:59,250 Parameters: domain_dimensions = [64 64 64] P000 yt : [INFO ] 2014-03-04 18:27:59,251 Parameters: domain_left_edge = [-1. -1. -1.] P000 yt : [INFO ] 2014-03-04 18:27:59,252 Parameters: domain_right_edge = [ 1. 1. 1.] P000 yt : [INFO ] 2014-03-04 18:27:59,252 Parameters: cosmological_simulation = 0.0 Finding clumps: min: 1.000000e+00, max: 1.000000e+01, step: 4.000000 P000 yt : [INFO ] 2014-03-04 18:27:59,933 Linking node (2) contours. Couldn't find 4607182418800017408 Inspected 2 Exception RuntimeError: RuntimeError() in 'yt.utilities.lib.ContourFinding.construct_boundary_relationships' ignored P000 yt : [INFO ] 2014-03-04 18:28:00,008 Linked. P000 yt : [INFO ] 2014-03-04 18:28:00,008 Starting 'Updating joins ... ' P000 yt : [INFO ] 2014-03-04 18:28:00,026 Finishing 'Updating joins ... ' Investigating 2 children. Finding clumps: min: 4.000000e+00, max: 1.000000e+01, step: 4.000000 Traceback (most recent call last): File "clumps_issue.py", line 49, in <module> amods.level_sets.find_clumps(master_clump, c_min, c_max, step) File "yt/analysis_modules/level_sets/clump_handling.py", line 180, in find_clumps find_clumps(child, min_val*d_clump, max_val, d_clump) File "yt/analysis_modules/level_sets/clump_handling.py", line 171, in find_clumps clump.find_children(min_val) File "yt/analysis_modules/level_sets/clump_handling.py", line 110, in find_children nj, cids = identify_contours(self.data, self.field, min_val, max_val) File "yt/analysis_modules/level_sets/contour_finder.py", line 31, in identify_contours for (g, node, (sl, dims, gi)) in data_source.tiles.slice_traverse(): File "yt/data_objects/data_containers.py", line 442, in tiles self._tree = AMRKDTree(self.pf, data_source=self) File "yt/utilities/amr_kdtree/amr_kdtree.py", line 162, in __init__ data_source=data_source) File "yt/utilities/amr_kdtree/amr_kdtree.py", line 69, in __init__ self.build() File "yt/utilities/amr_kdtree/amr_kdtree.py", line 83, in build grids = np.array([b for b, mask in self.data_source.blocks if b.Level == lvl]) File "yt/data_objects/data_containers.py", line 451, in blocks o = self._current_chunk.objs[0] AttributeError: 'NoneType' object has no attribute 'objs'
```
using `yt-3.0` rev `3e8b733c9ee9`