59 lines
1.8 KiB
Python
Executable File
59 lines
1.8 KiB
Python
Executable File
#!/util/bin/python
|
|
|
|
import Walker
|
|
from SimpleSAM import *
|
|
|
|
class WalkLociTest(object, Walker.Walker):
|
|
def __init__(self):
|
|
Walker.Walker.__init__( self, 'byLoci', {}, name = 'WalkLociTest' )
|
|
self.debug = False
|
|
|
|
def filterfunc( self, *data ):
|
|
return True
|
|
#return datum.getPos() % 2 == 0
|
|
|
|
def mapfunc( self, ref, chrom, pos, offsets, reads ):
|
|
|
|
if self.debug:
|
|
print '------------------------------'
|
|
print ' locus', chrom, pos
|
|
print ' offsets = ', offsets
|
|
print ' reads = ', reads
|
|
|
|
#
|
|
# This is the heart of the test walker. You've got the reference, contig,
|
|
# pos, offsets, and reads. The line below generate pile-ups
|
|
#
|
|
def getField(field):
|
|
return map( lambda r, o: r.__getattribute__(field)[o], reads, offsets )
|
|
|
|
def toASCII33( quals ):
|
|
return ''.join( map( lambda q: chr(q+33), quals ))
|
|
|
|
if False:
|
|
# actually do some useful work
|
|
refbase = ref[chrom][pos-1]
|
|
bases = ''.join(getField('bases'))
|
|
quals = toASCII33(getField('quals'))
|
|
print chrom, pos, refbase, len(reads), all(map(lambda b: b == refbase, bases)), bases, quals
|
|
|
|
if self.debug:
|
|
for offset, read in zip( offsets, reads ):
|
|
if self.debug:
|
|
print ' offset, read', offset, read
|
|
print read.bases[offset], read.quals[offset]
|
|
|
|
#print datum
|
|
return 1
|
|
#return len(datum.getSeq())
|
|
#return datum.getSeq() + '/'
|
|
#return "\n>%s\n%s" % (datum.getQName(), datum.getSeq())
|
|
|
|
#reduceDefault = ''
|
|
def reducefunc( self, x, sum ):
|
|
#print x
|
|
return x + sum
|
|
|
|
|
|
|