Beispiel #1
0
	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)
Beispiel #2
0
	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)
Beispiel #3
0
	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)