def getBoundingCEllipsoidVol(self, transformedCP, ET=None, retA=False): """Return the volume of the minimum bounding coverage ellipsoid""" if ET is None: ET = EllipsoidTool() (A, center, radii, _rotation) = self.getBoundingEllipsoid(transformedCP, ET=ET, retA=True) if retA: return ((A, center), ET.getEllipsoidVolume(radii)) else: return ET.getEllipsoidVolume(radii)
def getBoundingKEllipseArea(self, KPCAs, ET=None, retA=False): """Return the area of the minimum bounding kmer PCA ellipse""" if len(KPCAs) > 1: if ET is None: ET = EllipsoidTool() (A, center, radii, _rotation) = ET.getMinVolEllipse(KPCAs, retA=True) if retA: return ((A, center), ET.getEllipsoidVolume(radii)) else: return ET.getEllipsoidVolume(radii) else: # minimum bounding ellipse of a point is 0 if retA: return ((np.zeros((2,2)), KPCAs[0]), 0) else: return 0
def getBoundingKEllipseArea(self, KPCAs, ET=None, retA=False): """Return the area of the minimum bounding kmer PCA ellipse""" if len(KPCAs) > 1: if ET is None: ET = EllipsoidTool() (A, center, radii, _rotation) = ET.getMinVolEllipse(KPCAs, retA=True) if retA: return ((A, center), ET.getEllipsoidVolume(radii)) else: return ET.getEllipsoidVolume(radii) else: # minimum bounding ellipse of a point is 0 if retA: return ((np.zeros((2, 2)), KPCAs[0]), 0) else: return 0
def getBoundingEllipsoid(self, transformedCP, ET=None, retA=False): """Return the minimum bounding ellipsoid returns (center, radii, rotation) or (A, center, radii, rotation) """ bin_points = np.array([transformedCP[i] for i in self.rowIndices]) if len(bin_points) > 1: if ET is None: ET = EllipsoidTool() try: return ET.getMinVolEllipse(bin_points, retA=retA) except: print bin_points raise else: # minimum bounding ellipse of a point is 0 if retA: return (np.zeros((3,3)), transformedCP[self.rowIndices[0]], np.zeros((3)), np.eye(3)) else: return (transformedCP[self.rowIndices[0]], np.zeros((3)), np.eye(3))
def getBoundingEllipsoid(self, transformedCP, ET=None, retA=False): """Return the minimum bounding ellipsoid returns (center, radii, rotation) or (A, center, radii, rotation) """ bin_points = np.array([transformedCP[i] for i in self.rowIndices]) if len(bin_points) > 1: if ET is None: ET = EllipsoidTool() try: return ET.getMinVolEllipse(bin_points, retA=retA) except: print(bin_points) raise else: # minimum bounding ellipse of a point is 0 if retA: return (np.zeros( (3, 3)), transformedCP[self.rowIndices[0]], np.zeros( (3)), np.eye(3)) else: return (transformedCP[self.rowIndices[0]], np.zeros( (3)), np.eye(3))