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

britton at wrangler.dreamhost.com britton at wrangler.dreamhost.com
Fri May 9 14:06:37 PDT 2008


Author: britton
Date: Fri May  9 14:06:36 2008
New Revision: 454
URL: http://yt.spacepope.org/changeset/454

Log:
Adding Clump.py, used for clump finding.

9 May, 2008

Britton Smith


Added:
   trunk/yt/lagos/Clump.py

Added: trunk/yt/lagos/Clump.py
==============================================================================
--- (empty file)
+++ trunk/yt/lagos/Clump.py	Fri May  9 14:06:36 2008
@@ -0,0 +1,100 @@
+import yt.lagos as lagos
+import numpy as na
+
+cl_parameters = {'minCells':64}
+
+class Clump(object):
+    children = None
+    def __init__(self, data, parent, field):
+        self.parent = parent
+        self.data = data
+        self.field = field
+        self.min = self.data[field].min()
+        self.max = self.data[field].max()
+        self.isBound = None
+
+    def find_children(self, min, max = None):
+        if self.children is not None:
+            print "Wiping out existing children clumps."
+        self.children = []
+        if max is None: max = self.max
+        contour_info = lagos.identify_contours(self.data, self.field, min, max)
+        for cid in contour_info:
+            new_clump = self.data.extract_region(contour_info[cid])
+            self.children.append(Clump(new_clump, self, self.field))
+
+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:
+        for child in clump.children:
+            find_clumps(child, min*d_clump, max, d_clump)
+
+def write_clump_hierarchy(clump,level,f_ptr):
+    for q in range(level):
+        f_ptr.write("\t")
+    f_ptr.write("Clump at level %d:\n" % level)
+    write_clump_info(clump,level,f_ptr)
+    f_ptr.write("\n")
+    f_ptr.flush()
+    if ((clump.children is not None) and (len(clump.children) > 0)):
+        for child in clump.children:
+            write_clump_hierarchy(child,(level+1),f_ptr)
+
+def write_clumps(clump,level,f_ptr):
+    if ((clump.children is None) or (len(clump.children) == 0)):
+        for q in range(level):
+            f_ptr.write("\t")
+        f_ptr.write("Clump:\n")
+        write_clump_info(clump,level,f_ptr)
+        f_ptr.write("\n")
+        f_ptr.flush()
+    if ((clump.children is not None) and (len(clump.children) > 0)):
+        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"]))
+    for q in range(level):
+        f_ptr.write("\t")
+    f_ptr.write("Mass: %.6e Msolar\n" % clump.data["CellMassMsun"].sum())
+    for q in range(level):
+        f_ptr.write("\t")
+    f_ptr.write("Jeans Mass (vol-weighted): %.6e Msolar\n" % \
+                    (clump.data.quantities["WeightedAverageQuantity"]("JeansMassMsun","CellVolume")))
+    for q in range(level):
+        f_ptr.write("\t")
+    f_ptr.write("Jeans Mass (mass-weighted): %.6e Msolar\n" % \
+                    (clump.data.quantities["WeightedAverageQuantity"]("JeansMassMsun","CellMassMsun")))
+    for q in range(level):
+        f_ptr.write("\t")
+    f_ptr.write("Max grid level: %d\n" % clump.data["GridLevel"].max())
+    for q in range(level):
+        f_ptr.write("\t")
+    f_ptr.write("Min number density: %.6e cm^-3\n" % clump.data["NumberDensity"].min())
+    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