def SC_intuit(self, seq): #def SC_intuit(self,seq,minSizePerc=1.0): """ This method REQUIRES that len(seq) == self.n Right now we consider only sequences with length higher or equal to the length of the motif""" if not self.validMotif: # hacer que se informe de que el motivo no mola y no se va a tener en cuenta. La funcion debe devolver un valor que informe del hecho. Por ejemplo se me ocurre None pass if (len(seq) != self.n): raise AttributeError("SC_intuit REQUIRES that len(seq) == self.n") #if not self._isValidSeq(seq,minSizePerc): # self.SC_intuit_forSmallerSeqs(seq) # TODO! YOu would need to program this method else: drow = {} drevrow = {} conti = 0 for i in ['A','C','G','T']: for j in ['A','C','G','T']: drow[str(i)+str(j)] = conti drevrow[conti] = str(i)+str(j) conti += 1 dcol = {} drevcol = {} conti = 0 for i in range(self.n): for j in range(i+1,self.n): dcol[(i,j)] = conti drevcol[conti] = (i,j) conti += 1 A = [self.intuitM.transpose(),self.intuitV.transpose()] simsNorm = [] for indexi,posi in enumerate(seq[0:-1]): for indexj,posj in enumerate(seq[indexi+1:]): maxSim,minSim = utils.computeMaxMin(A,dcol[(indexi,indexj+ indexi +1)]) mu = A[0][dcol[(indexi,indexj+ indexi +1)]][drow[posi+posj]] maxV = max(A[1][dcol[(indexi,indexj+ indexi +1)]]) v = maxV - A[1][dcol[(indexi,indexj+ indexi +1)]][drow[posi+posj]] curSim = mu * v curSimNorm = (curSim - minSim) / (maxSim -minSim) simsNorm.append(curSimNorm) return average(simsNorm)
def SC_intuit_forSmallerSeqs(self, smallSeq, A): #pass # TODO! # El procedimiento seria: # values = [] # para cada submotivo necesario: # currSubMotivo = self._createSubmotif(ini,fin) # values.append(currSubMotivo.Sc_intuit(seq)) # return values drow = {} drevrow = {} conti = 0 for i in ['A','C','G','T']: for j in ['A','C','G','T']: drow[str(i)+str(j)] = conti drevrow[conti] = str(i)+str(j) conti += 1 dcol = {} drevcol = {} conti = 0 for i in range(len(smallSeq)): for j in range(i+1,len(smallSeq)): dcol[(i,j)] = conti drevcol[conti] = (i,j) conti += 1 #print shape(A[0]), A[0] #print shape(A[1]), A[1] #print self.validSeqs simsNorm = [] for indexi,posi in enumerate(smallSeq[0:-1]): for indexj,posj in enumerate(smallSeq[indexi+1:]): maxSim,minSim = utils.computeMaxMin(A,dcol[(indexi,indexj+ indexi +1)]) mu = A[0][dcol[(indexi,indexj+ indexi +1)]][drow[posi+posj]] maxV = max(A[1][dcol[(indexi,indexj+ indexi +1)]]) v = maxV - A[1][dcol[(indexi,indexj+ indexi +1)]][drow[posi+posj]] #If there are many 'N', same values can be in A[1][dcol[(indexi,indexj+ indexi +1)]] and if this value is tmaximum -> v = 0 -> curSim = 0 maxSim=0 and minSim=0 (see utils.computeMaxMin) -> curSimNorm = nan curSim = mu * v curSimNorm = (curSim - minSim) / (maxSim -minSim) #print A[1][dcol[(indexi,indexj+ indexi +1)]] #print [drow[posi+posj]] #print A[1][dcol[(indexi,indexj+ indexi +1)]][drow[posi+posj]] #print mu, maxV, curSim, maxSim, minSim, (maxSim -minSim), curSimNorm #raw_input("Press Enter to continue...") simsNorm.append(curSimNorm) return average(simsNorm)
def SC_intuit(self,seq): self.computeIntuitionisticMotif() drow = {} drevrow = {} conti = 0 for i in ['A','C','G','T']: for j in ['A','C','G','T']: drow[str(i)+str(j)] = conti drevrow[conti] = str(i)+str(j) conti += 1 dcol = {} drevcol = {} conti = 0 for i in range(self.n): for j in range(i+1,self.n): dcol[(i,j)] = conti drevcol[conti] = (i,j) conti += 1 A = [self.intuitM.transpose(),self.intuitV.transpose()] simsNorm = [] for indexi,posi in enumerate(seq[0:-1]): for indexj,posj in enumerate(seq[indexi+1:]): maxSim,minSim = utils.computeMaxMin(A,dcol[(indexi,indexj+ indexi +1)]) mu = A[0][dcol[(indexi,indexj+ indexi +1)]][drow[posi+posj]] maxV = max(A[1][dcol[(indexi,indexj+ indexi +1)]]) v = maxV - A[1][dcol[(indexi,indexj+ indexi +1)]][drow[posi+posj]] curSim = mu * v curSimNorm = (curSim - minSim) / (maxSim -minSim) simsNorm.append(curSimNorm) return average(simsNorm)