[Yt-svn] yt-commit r606 - trunk/yt/lagos

britton at wrangler.dreamhost.com britton at wrangler.dreamhost.com
Mon Jun 23 04:08:25 PDT 2008


Author: britton
Date: Mon Jun 23 04:08:24 2008
New Revision: 606
URL: http://yt.spacepope.org/changeset/606

Log:
New clump finder eliminates use of a minimum cells variable to eliminate 
clumps.  Instead, clumps who are unbound and have to bound children of their 
own are eliminated.

23 June, 2008

Britton Smith


Modified:
   trunk/yt/lagos/Clump.py

Modified: trunk/yt/lagos/Clump.py
==============================================================================
--- trunk/yt/lagos/Clump.py	(original)
+++ trunk/yt/lagos/Clump.py	Mon Jun 23 04:08:24 2008
@@ -1,8 +1,6 @@
 import yt.lagos as lagos
 import numpy as na
 
-cl_parameters = {'minCells':64}
-
 class Clump(object):
     children = None
     def __init__(self, data, parent, field):
@@ -23,24 +21,40 @@
             new_clump = self.data.extract_region(contour_info[cid])
             self.children.append(Clump(new_clump, self, self.field))
 
+    def get_IsBound(self):
+        if self.isBound is None:
+            self.isBound = self.data.quantities["IsBound"](truncate=True,include_thermal_energy=True)
+        return self.isBound
+
 def find_clumps(clump, min, max, d_clump):
     print "Finding clumps: min: %e, max: %e, step: %f" % (min, max, d_clump)
     if min >= max: return
     clump.find_children(min)
 
-    these_children = []
-    for child in clump.children:
-        if (len(child.data["CellMassMsun"]) >= cl_parameters['minCells']):
-            these_children.append(child)
-        else:
-            print "Eliminating clump with %d cells." % len(child.data["CellMassMsun"])
-    clump.children = these_children
-
     if (len(clump.children) == 1):
         find_clumps(clump, min*d_clump, max, d_clump)
-    else:
+
+    elif (len(clump.children) > 0):
+        these_children = []
+        print "Investigating %d children." % len(clump.children)
         for child in clump.children:
             find_clumps(child, min*d_clump, max, d_clump)
+            if ((child.children is not None) and (len(child.children) > 0)):
+                these_children.append(child)
+            elif (child.get_IsBound() > 1.0):
+                these_children.append(child)
+            else:
+                print "Eliminating unbound, childless clump with %d cells." % len(child.data["CellMassMsun"])
+        if (len(these_children) > 1):
+            print "%d of %d children survived." % (len(these_children),len(clump.children))            
+            clump.children = these_children
+        elif (len(these_children) == 1):
+            print "%d of %d children survived, linking its children to parent." % (len(these_children),len(clump.children))
+            clump.children = these_children[0].children
+        else:
+            print "%d of %d children survived, erasing children." % (len(these_children),len(clump.children))
+            clump.children = []
+
 
 def write_clump_hierarchy(clump,level,f_ptr):
     for q in range(level):
@@ -65,13 +79,7 @@
         for child in clump.children:
             write_clumps(child,0,f_ptr)
 
-def write_clump_finder_parameters(f_ptr):
-    for par in cl_parameters.keys():
-        f_ptr.write("# %s: %s\n" % (par,cl_parameters[par]))
-
 def write_clump_info(clump,level,f_ptr):
-    if clump.isBound is None:
-        clump.isBound = clump.data.quantities["IsBound"]()
     for q in range(level):
         f_ptr.write("\t")
     f_ptr.write("Cells: %d\n" % len(clump.data["CellMassMsun"]))
@@ -95,6 +103,3 @@
     for q in range(level):
         f_ptr.write("\t")
     f_ptr.write("Max number density: %.6e cm^-3\n" % clump.data["NumberDensity"].max())
-    for q in range(level):
-        f_ptr.write("\t")
-    f_ptr.write("Bound: %s\n" % clump.isBound)



More information about the yt-svn mailing list