1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
# Copyright 2003 by Bartek Wilczynski. All rights reserved.
# This code is part of the Biopython distribution and governed by its
# license. Please see the LICENSE file that should have been included
# as part of this package.
"""Parsing AlignACE files: AlignAceParser
"""
from Bio.Motif import Motif
from Bio.Alphabet import IUPAC
from Bio.Seq import Seq
class Record(object):
def __init__(self):
self.motifs=[]
self.current_motif=None
self.param_dict = None
def read(handle):
"""read(handle)"""
record = Record()
record.ver = next(handle)
record.cmd_line = next(handle)
for line in handle:
if line.strip() == "":
pass
elif line[:4]=="Para":
record.param_dict={}
elif line[0]=="#":
seq_name = line.split("\t")[1]
record.seq_dict.append(seq_name)
elif "=" in line:
par_name = line.split("=")[0].strip()
par_value = line.split("=")[1].strip()
record.param_dict[par_name]=par_value
elif line[:5]=="Input":
record.seq_dict=[]
elif line[:5]=="Motif":
record.current_motif = Motif()
record.motifs.append(record.current_motif)
record.current_motif.alphabet=IUPAC.unambiguous_dna
elif line[:3]=="MAP":
record.current_motif.score = float(line.split()[-1])
elif len(line.split("\t"))==4:
seq = Seq(line.split("\t")[0], IUPAC.unambiguous_dna)
record.current_motif.add_instance(seq)
elif "*" in line:
record.current_motif.set_mask(line.strip("\n\c"))
else:
raise ValueError(line)
return record
|