예제 #1
0
파일: ml.py 프로젝트: HuttleyLab/gnc
 def getMotifProbs(self, edge=None, bin=None, locus=None):
     motif_probs_array = self.getParamValue('mprobs',
                                            edge=edge,
                                            bin=bin,
                                            locus=locus)
     mprob_name = [p for p in self.getParamNames() if 'mprobs' in p][0]
     if 'position' in self.getUsedDimensions(mprob_name):
         positions = self._valuesForDimension('position')
         motifs = self._mprob_motifs
         return DictArrayTemplate(positions, motifs).wrap(motif_probs_array)
     return DictArrayTemplate(self._mprob_motifs).wrap(motif_probs_array)
예제 #2
0
파일: ml.py 프로젝트: HuttleyLab/gnc
 def getMotifProbsByNode(self, edges=None, bin=None, locus=None):
     kw = dict(bin=bin, locus=locus)
     mprobs = self.getParamValue('mprobs', **kw)
     mprobs = self._model.calcWordProbs(mprobs)
     result = self._nodeMotifProbs(self._tree, mprobs, kw)
     if edges is None:
         edges = [name for (name, m) in result]
     result = dict(result)
     values = [result[name] for name in edges]
     if len(values[0]) == len(self._mprob_motifs):
         return DictArrayTemplate(edges, self._mprob_motifs).wrap(values)
     return DictArrayTemplate(edges, self._motifs).wrap(values)
예제 #3
0
 def reconstructAncestralSeqs(self, locus=None):
     """returns a dict of DictArray objects containing probabilities
     of each alphabet state for each node in the tree.
     
     Arguments:
         - locus: a named locus"""
     result = {}
     array_template = None
     for restricted_edge in self._tree.getEdgeVector():
         if restricted_edge.istip():
             continue
         try:
             r = []
             for motif in range(len(self._motifs)):
                 self.setParamRule('fixed_motif',
                                   value=motif,
                                   edge=restricted_edge.Name,
                                   locus=locus,
                                   is_constant=True)
                 likelihoods = self.getFullLengthLikelihoods(locus=locus)
                 r.append(likelihoods)
                 if array_template is None:
                     array_template = DictArrayTemplate(
                         likelihoods.shape[0], self._motifs)
         finally:
             self.setParamRule('fixed_motif',
                               value=-1,
                               edge=restricted_edge.Name,
                               locus=locus,
                               is_constant=True)
         # dict of site x motif arrays
         result[restricted_edge.Name] = array_template.wrap(
             numpy.transpose(numpy.asarray(r)))
     return result
예제 #4
0
 def __init__(self,
              default=None,
              name=None,
              dimensions=None,
              dimension=None,
              size=None,
              **kw):
     assert name
     if size is not None:
         pass
     elif default is not None:
         size = len(default)
     elif dimension is not None:
         size = len(dimension[1])
     self.size = size
     if dimension is not None:
         self.internal_dimension = dimension
         (dim_name, dim_cats) = dimension
         self.bin_names = dim_cats
         self.array_template = DictArrayTemplate(dim_cats)
         self.internal_dimensions = (dim_name, )
     if default is None:
         default = self._makeDefaultValue()
     elif self.array_template is not None:
         default = self.array_template.unwrap(default)
     else:
         default = numpy.asarray(default)
     _InputDefn.__init__(self,
                         name=name,
                         default=default,
                         dimensions=dimensions,
                         **kw)
     self.checkValueIsValid(default, True)
예제 #5
0
 def getPsubForEdge(self, name, **kw):
     """returns the substitution probability matrix for the named edge"""
     try:
         # For PartialyDiscretePsubsDefn
         array = self.getParamValue('dpsubs', edge=name, **kw)
     except KeyError:
         array = self.getParamValue('psubs', edge=name, **kw)
     return DictArrayTemplate(self._motifs, self._motifs).wrap(array)
예제 #6
0
 def getBinProbs(self, locus=None):
     hmm = self.getParamValue('bindex', locus=locus)
     lhs = [
         self.getParamValue('lh', locus=locus, bin=bin)
         for bin in self.bin_names
     ]
     array = hmm.getPosteriorProbs(*lhs)
     return DictArrayTemplate(self.bin_names, array.shape[1]).wrap(array)
예제 #7
0
 def getRateMatrixForEdge(self, name, **kw):
     """returns the rate matrix (Q) for the named edge
     
     Note: expm(Q) will give the same result as getPsubForEdge(name)"""
     try:
         array = self.getParamValue('Q', edge=name, **kw)
     except KeyError as err:
         if err[0] == 'Q' and name != 'Q':
             raise RuntimeError('rate matrix not known by this model')
         else:
             raise
     return DictArrayTemplate(self._motifs, self._motifs).wrap(array)
예제 #8
0
 def getBinPriorProbs(self, locus=None):
     bin_probs_array = self.getParamValue('bprobs', locus=locus)
     return DictArrayTemplate(self.bin_names).wrap(bin_probs_array)
예제 #9
0
 def getMotifProbs(self, edge=None, bin=None, locus=None):
     motif_probs_array = self.getParamValue('mprobs',
                                            edge=edge,
                                            bin=bin,
                                            locus=locus)
     return DictArrayTemplate(self._mprob_motifs).wrap(motif_probs_array)