def checkUndirectedEdges(genome, trackName, allowOverlaps): collector = PreProcMetaDataCollector(genome, trackName) if not (collector.getTrackFormat().isLinked() and collector.hasUndirectedEdges()): return complementEdgeWeightDict = {} for chr in collector.getPreProcessedChrs(allowOverlaps): trackSource = TrackSource() trackData = trackSource.getTrackData(trackName, genome, chr, allowOverlaps) ids = trackData['id'] edges = trackData['edges'] weights = trackData.get('weights') for i, id in enumerate(ids): edgesAttr = edges[i][edges[i] != ''] weightsAttr = weights[i][edges[i] != ''] if weights is not None else None PreProcessUtils._adjustComplementaryEdgeWeightDict(complementEdgeWeightDict, id, edgesAttr, weightsAttr) if len(complementEdgeWeightDict) != 0: unmatchedPairs = [] for toId in complementEdgeWeightDict: for fromId in complementEdgeWeightDict[toId]: unmatchedPairs.append((fromId, toId, complementEdgeWeightDict[toId][fromId])) raise InvalidFormatError("Error: All edges are not undirected. The following edges specifications " +\ "are not matched by an opposite edge with equal weight:" + os.linesep +\ os.linesep.join(["from '%s' to '%s'" % (fromId, toId) + \ (" with weight '%s'" % weight if weight != '' else '') \ for fromId, toId, weight in unmatchedPairs]))
def _findTrackInfoBasedMetaData(self): if not self._foundTrackInfoBasedMetaData: if PreProcMetaDataCollector.hasKey(self._genome, self._trackName): collector = PreProcMetaDataCollector(self._genome, self._trackName) self._fileSuffix = collector.getFileSuffix() self._preProcVersion = collector.getPreProcVersion() self._id = collector.getId() self._undirectedEdges = True if collector.hasUndirectedEdges() else False else: ti = TrackInfo(self._genome, self._trackName) self._fileSuffix = ti.fileType self._preProcVersion = ti.preProcVersion self._id = ti.id self._undirectedEdges = True if ti.undirectedEdges else False