def get_hic_zscores(self, normalized=True, zscored=True): """ Computes a normalization of Hi-C raw data. Result will be stored into the private Experiment._zscore list :param True normalized: whether to normalize the result using the weights (see :func:`normalize_hic`) :param True zscored: apply a z-score transform over the data. """ values = [] if normalized: for i in xrange(self.size): # zeros are rows or columns having a zero in the diagonal if i in self._zeros: continue for j in xrange(self.size): if j in self._zeros: continue try: values.append( self.hic_data[0][i * self.size + j] /\ self.wght[0][i * self.size + j]) except ZeroDivisionError: values.append(0.0) else: for i in xrange(self.size): if i in self._zeros: continue for j in xrange(self.size): if j in self._zeros: continue values.append(self.hic_data[0][i * self.size + j]) # compute Z-score if zscored: zscore(values, self.size) iterval = values.__iter__() for i in xrange(self.size): if i in self._zeros: continue for j in xrange(self.size): if j in self._zeros: continue zsc = iterval.next() self._zscores.setdefault(i, {}) self._zscores[i][j] = zsc self._zscores.setdefault(j, {}) self._zscores[j][i] = zsc
def to_binary(exp, method='bin'): exp.normalize_hic(method='bytot') hic = exp.hic_data[0][:] nhic = [(float(hic[i]) / exp.wght[0][i]) if exp.wght[0][i] else 0.0 \ for i in xrange(exp.size**2)] zscore(nhic, exp.size) if method == 'trin': return [1 if z.__str__() == 'nan' \ else 0 if -1 < z < 1 else 1 if z > 0 else -1 for z in nhic] elif method == 'fivn': return [1 if z.__str__() == 'nan' \ else 0 if z < -2 \ else 1 if z < -1 \ else 2 if z < 1 \ else 3 if z < 2 \ else 4 for z in nhic] return [0 if z < 0 else 1 for z in nhic]