alignment for profiles
This commit is contained in:
3924
src/obitools/align/_gprofilenws.c
Normal file
3924
src/obitools/align/_gprofilenws.c
Normal file
File diff suppressed because it is too large
Load Diff
8
src/obitools/align/_gprofilenws.pxd
Normal file
8
src/obitools/align/_gprofilenws.pxd
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
from _profilenws cimport *
|
||||||
|
|
||||||
|
cdef class GProfileNWS(ProfileNWS):
|
||||||
|
|
||||||
|
cdef double matchScore(self,int h, int v)
|
||||||
|
cdef object alignment1
|
||||||
|
cdef object alignment2
|
||||||
|
#cdef double doAlignment(self) except? 0
|
167
src/obitools/align/_gprofilenws.pyx
Normal file
167
src/obitools/align/_gprofilenws.pyx
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
'''
|
||||||
|
Created on 16 Feb. 2011
|
||||||
|
|
||||||
|
@author: celine
|
||||||
|
'''
|
||||||
|
#@PydevCodeAnalysisIgnore
|
||||||
|
|
||||||
|
from _gprofilenws cimport *
|
||||||
|
|
||||||
|
|
||||||
|
cdef class GProfileNWS(ProfileNWS):
|
||||||
|
|
||||||
|
cdef double matchScore(self,int h, int v):
|
||||||
|
cdef double pmatch
|
||||||
|
cdef double* hp = self.hProf.frequency
|
||||||
|
cdef double* vp = self.vProf.frequency
|
||||||
|
cdef int hl = self.hProf.length
|
||||||
|
cdef int vl = self.vProf.length
|
||||||
|
|
||||||
|
h-=1
|
||||||
|
v-=1
|
||||||
|
pmatch = hp[h]*vp[v] + \
|
||||||
|
hp[h+hl]*vp[v+vl] + \
|
||||||
|
hp[h+2*hl]*vp[v+2*vl] + \
|
||||||
|
hp[h+3*hl]*vp[v+3*vl] + \
|
||||||
|
hp[h+4*hl]*vp[v+4*vl] + \
|
||||||
|
hp[h+5*hl]*vp[v+5*vl]
|
||||||
|
return self._match * pmatch + (1-pmatch) * self._mismatch
|
||||||
|
|
||||||
|
|
||||||
|
def __call__(self,pseudocounts=0):
|
||||||
|
|
||||||
|
cdef list hgaps=[]
|
||||||
|
cdef list vgaps=[]
|
||||||
|
cdef list b
|
||||||
|
cdef int hp
|
||||||
|
cdef int vp
|
||||||
|
cdef int rp
|
||||||
|
cdef int lenh=0
|
||||||
|
cdef int lenv=0
|
||||||
|
cdef int h,v,p
|
||||||
|
cdef int i
|
||||||
|
cdef object ali
|
||||||
|
cdef double score
|
||||||
|
cdef DNAProfile newProfile1
|
||||||
|
cdef DNAProfile newProfile2
|
||||||
|
cdef DNAProfile horizontalSeq=self.horizontalSeq
|
||||||
|
cdef DNAProfile verticalSeq=self.verticalSeq
|
||||||
|
|
||||||
|
if self._needToCompute():
|
||||||
|
|
||||||
|
score = self.doAlignment()
|
||||||
|
self.backtrack()
|
||||||
|
sum = 0
|
||||||
|
for p in xrange(self.path.length) :
|
||||||
|
v = self.path.path[p]
|
||||||
|
if v == 0 :
|
||||||
|
sum += 1
|
||||||
|
else :
|
||||||
|
sum += abs(v)
|
||||||
|
|
||||||
|
newProfile1 = DNAProfile(size=sum,pseudo=pseudocounts)
|
||||||
|
newProfile1.profile.weight = horizontalSeq.profile.weight
|
||||||
|
|
||||||
|
newProfile2 = DNAProfile(size=sum,pseudo=pseudocounts)
|
||||||
|
newProfile2.profile.weight = verticalSeq.profile.weight
|
||||||
|
|
||||||
|
hp=horizontalSeq.profile.length-1
|
||||||
|
vp=verticalSeq.profile.length-1
|
||||||
|
rp1=newProfile1.profile.length-1
|
||||||
|
rp2=newProfile2.profile.length-1
|
||||||
|
|
||||||
|
for i in range(self.path.length):
|
||||||
|
p=self.path.path[i]
|
||||||
|
|
||||||
|
for i in range(self.path.length):
|
||||||
|
p=self.path.path[i]
|
||||||
|
|
||||||
|
if p==0:
|
||||||
|
|
||||||
|
newProfile1.A[rp1] = horizontalSeq.A[hp]
|
||||||
|
newProfile1.C[rp1] = horizontalSeq.C[hp]
|
||||||
|
newProfile1.G[rp1] = horizontalSeq.G[hp]
|
||||||
|
newProfile1.T[rp1] = horizontalSeq.T[hp]
|
||||||
|
newProfile1.Og[rp1] = horizontalSeq.Og[hp]
|
||||||
|
newProfile1.Eg[rp1] = horizontalSeq.Eg[hp]
|
||||||
|
|
||||||
|
newProfile2.A[rp2] = verticalSeq.A[vp]
|
||||||
|
newProfile2.C[rp2] = verticalSeq.C[vp]
|
||||||
|
newProfile2.G[rp2] = verticalSeq.G[vp]
|
||||||
|
newProfile2.T[rp2] = verticalSeq.T[vp]
|
||||||
|
newProfile2.Og[rp2] = verticalSeq.Og[vp]
|
||||||
|
newProfile2.Eg[rp2] = verticalSeq.Eg[vp]
|
||||||
|
|
||||||
|
hp-=1
|
||||||
|
vp-=1
|
||||||
|
rp1-=1
|
||||||
|
rp2-=1
|
||||||
|
|
||||||
|
elif p>0:
|
||||||
|
|
||||||
|
for x in xrange(p-1) :
|
||||||
|
|
||||||
|
newProfile1.A[rp1] = horizontalSeq.A[hp]
|
||||||
|
newProfile1.C[rp1] = horizontalSeq.C[hp]
|
||||||
|
newProfile1.G[rp1] = horizontalSeq.G[hp]
|
||||||
|
newProfile1.T[rp1] = horizontalSeq.T[hp]
|
||||||
|
newProfile1.Og[rp1] = horizontalSeq.Og[hp]
|
||||||
|
newProfile1.Eg[rp1] = horizontalSeq.Eg[hp]
|
||||||
|
|
||||||
|
newProfile2.Eg[rp2] = verticalSeq.profile.weight
|
||||||
|
|
||||||
|
hp-=1
|
||||||
|
rp1-=1
|
||||||
|
rp2-=1
|
||||||
|
|
||||||
|
newProfile1.A[rp1] = horizontalSeq.A[hp]
|
||||||
|
newProfile1.C[rp1] = horizontalSeq.C[hp]
|
||||||
|
newProfile1.G[rp1] = horizontalSeq.G[hp]
|
||||||
|
newProfile1.T[rp1] = horizontalSeq.T[hp]
|
||||||
|
newProfile1.Og[rp1] = horizontalSeq.Og[hp]
|
||||||
|
newProfile1.Eg[rp1] = horizontalSeq.Eg[hp]
|
||||||
|
|
||||||
|
newProfile2.Og[rp2] = verticalSeq.profile.weight
|
||||||
|
|
||||||
|
hp-=1
|
||||||
|
rp1-=1
|
||||||
|
rp2-=1
|
||||||
|
|
||||||
|
else:
|
||||||
|
|
||||||
|
for x in xrange(abs(p)-1) :
|
||||||
|
|
||||||
|
newProfile2.A[rp2] = verticalSeq.A[vp]
|
||||||
|
newProfile2.C[rp2] = verticalSeq.C[vp]
|
||||||
|
newProfile2.G[rp2] = verticalSeq.G[vp]
|
||||||
|
newProfile2.T[rp2] = verticalSeq.T[vp]
|
||||||
|
newProfile2.Og[rp2] = verticalSeq.Og[vp]
|
||||||
|
newProfile2.Eg[rp2] = verticalSeq.Eg[vp]
|
||||||
|
|
||||||
|
newProfile1.Eg[rp1] = horizontalSeq.profile.weight
|
||||||
|
|
||||||
|
vp-=1
|
||||||
|
rp1-=1
|
||||||
|
rp2-=1
|
||||||
|
|
||||||
|
newProfile2.A[rp2] = verticalSeq.A[vp]
|
||||||
|
newProfile2.C[rp2] = verticalSeq.C[vp]
|
||||||
|
newProfile2.G[rp2] = verticalSeq.G[vp]
|
||||||
|
newProfile2.T[rp2] = verticalSeq.T[vp]
|
||||||
|
newProfile2.Og[rp2] = verticalSeq.Og[vp]
|
||||||
|
newProfile2.Eg[rp2] = verticalSeq.Eg[vp]
|
||||||
|
|
||||||
|
newProfile1.Og[rp1] = horizontalSeq.profile.weight
|
||||||
|
|
||||||
|
vp-=1
|
||||||
|
rp1-=1
|
||||||
|
rp2-=1
|
||||||
|
|
||||||
|
self.alignment1 = newProfile1
|
||||||
|
self.alignment2 = newProfile2
|
||||||
|
|
||||||
|
ali1=DNAProfile(self.alignment1,pseudo=pseudocounts)
|
||||||
|
ali2=DNAProfile(self.alignment2,pseudo=pseudocounts)
|
||||||
|
|
||||||
|
return ali1, ali2
|
||||||
|
|
Reference in New Issue
Block a user