def __init__(self,fh=None,Ped=None,gen=None):
self.id = None
self.chr_flag=False # True == 'chrN'; False == 'N'
self.sex=None
self.char='b'
self.refs=OrderedDict()
self.fh=fh
self.Snv=None
self.snv_index=None
sm=[]
bam = pysam.AlignmentFile(fh)
if bam.is_cram==True: self.char='c'
header = bam.header
if header.get('RG')==None: sys.stderr.write('WARNING: {} lacks Read Group (@RG) entry in the header. Skipping ...\n'.format(fh))
else:
for entry in header['RG']:
if entry.get('SM')!=None: sm.append(entry['SM'])
sm = list(set(sm))
if len(sm)>1: sys.stderr.write('WARNING: {} contains two sample entries ({}) in the header. Skipping {} ...\n'.format(fh,sm,fh))
else: self.id=sm[0]
if self.id!=None:
if Ped.sex.get(self.id)==None: sys.stderr.write('WARNING: {} is not found in the PED file. Skipping {} ...\n'.format(self.id,fh))
else:
self.sex=Ped.sex[self.id]
if str(bam.references[0]).startswith('chr'): self.chr_flag=True
chroms = accepted_chrom(self.chr_flag,gen)
for i in range(len(bam.references)):
chrom,leng = str(bam.references[i]),bam.lengths[i]
if chrom in chroms: self.refs[chrom]=int(leng)
bam.close()
评论列表
文章目录