[chimera-dev] Patch to center_of_points()

Nader Morshed morshed.nader at berkeley.edu
Mon Jul 9 22:53:02 PDT 2012


It seems that the code in the Segger module for calculating the center
of a region breaks when the region contain a large number of points. I
don't have the error message on hand, but it complains about calling
_contour.affine_transform_vertices with a double, rather than a float.

It seems that in regions.py the summed coordinate is cast to a float32,
then divided by the number of points, which can cause an implicit cast
up to float64's when point_count is large!

Here's a simple patch to share/Segger/regions.py that re-orders the
calls to cast after division, rather than before:

--- old/share/Segger/regions.py 2012-03-19 13:45:34.000000000 -0700
+++ new/share/Segger/regions.py 2012-07-09 14:55:26.241372503 -0700
@@ -873,7 +873,7 @@

         plists = [r.points() for r in self.childless_regions()]
         s = numpy.sum([numpy.sum(plist, axis=0) for plist in plists], axis=0)
-        com = s.astype(numpy.float32) / self.point_count()
+        com = (s / self.point_count()).astype(numpy.float32)
         if transform:
             tf = self.segmentation.point_transform()
             import _contour

--
Nader Morshed <morshed.nader at berkeley.edu>



More information about the Chimera-dev mailing list