diff --git a/gstlal-ugly/python/tree.py b/gstlal-ugly/python/tree.py index 26a1d51480555a35674174606f322ae5e9a27046..1845dc311720bbb9ee365be941cb9e961e86f1df 100644 --- a/gstlal-ugly/python/tree.py +++ b/gstlal-ugly/python/tree.py @@ -41,8 +41,7 @@ def packing_density(n): # this packing density puts two in a cell, we split if there are two or # more expected in a cell return 1.0 - return 0.50 - #prefactor = 0.5 + #prefactor = 1. # From: http://mathworld.wolfram.com/HyperspherePacking.html if n==1: return prefactor @@ -86,10 +85,10 @@ class HyperCube(object): self.metric = metric if self.metric is not None and metric_tensor is None: try: - self.metric_tensor, self.effective_dimension, self.det = self.metric(self.center - self.deltas / 1000.0 , self.deltas / 50000.) + self.metric_tensor, self.effective_dimension, self.det = self.metric(self.center - self.deltas / 1234.0 , self.deltas / 1000.) except RuntimeError: - print "metric @", self.center - self.deltas / 1000.0, " failed, trying, ", self.center - self.deltas / 100.0 - self.metric_tensor, self.effective_dimension, self.det = self.metric(self.center - self.deltas / 100.0, self.deltas / 50000.) + print "metric @", self.center - self.deltas / 1000.0, " failed, trying, ", self.center - self.deltas / 60.0 + self.metric_tensor, self.effective_dimension, self.det = self.metric(self.center - self.deltas / 123.0, self.deltas / 1000.) else: self.metric_tensor = metric_tensor self.effective_dimension = effective_dimension @@ -236,15 +235,24 @@ class Node(object): metric_diff = self.cube.metric_tensor - self.sibling.cube.metric_tensor metric_diff = numpy.linalg.norm(metric_diff) / numpy.linalg.norm(self.cube.metric_tensor)**.5 / numpy.linalg.norm(self.sibling.cube.metric_tensor)**.5 + + #w, v = numpy.linalg.eigh(self.cube.metric_tensor) + #ws, vs = numpy.linalg.eigh(self.sibling.cube.metric_tensor) + #offsets = numpy.arccos([numpy.dot(v[i], vs[j]) for i, j in zip(numpy.argsort(w), numpy.argsort(ws))]) + #print "offsets: ", offsets + #metric_diff = max(offsets) # check that the metric is not varying too much sib_vratio = numtmps / sib_numtmps volume_split_condition = (1./vtol < sib_vratio < vtol) # take the bigger of self, sibling and parent numtmps = max(max(numtmps, par_numtmps), sib_numtmps) + q = self.cube.center[1] / self.cube.center[0] + #q_condition = (1.0 >= q >= 0.95) or (0.54 >= q >= 0.44) or (0.27 >= q >= 0.22) or (0.145 >= q >= 0.105) metric_tol = 0.1 - if self.cube.constraint_func(self.cube.vertices + [self.cube.center]) and (numtmps >= split_num_templates or metric_diff > metric_tol): + #if self.cube.constraint_func(self.cube.vertices + [self.cube.center]) and (numtmps >= split_num_templates or ((numtmps >= split_num_templates/2.) and metric_diff > metric_tol)): + if self.cube.constraint_func(self.cube.vertices + [self.cube.center]) and (numtmps >= split_num_templates): self.template_count[0] = self.template_count[0] + 1 bifurcation += 1 #if numtmps < 5**len(size) and metric_diff < max(mismatch, 0.01):#volume_split_condition: