Документ взят из кэша поисковой машины. Адрес оригинального документа : http://kodomo.fbb.msu.ru/hg/allpy/file/62e38970ffa2/lib/sequence.py
Дата изменения: Unknown
Дата индексирования: Mon Feb 4 02:17:22 2013
Кодировка:
allpy: 62e38970ffa2 lib/sequence.py

allpy

view lib/sequence.py @ 111:62e38970ffa2

broken: lib::project::column -- new returning value sequence::pdb_chain_chain_add completed
author boris <bnagaev@gmail.com>
date Sat, 23 Oct 2010 12:57:07 +0400
parents b43daeb9d767
children 32b9f4fadd35
line source
1 #!/usr/bin/python
2 from monomer import AminoAcidType
3 from Bio.PDB import PDBParser, CaPPBuilder
4 from allpy_pdb import Pdb
5 import project
6 import sys
9 cappbuilder = CaPPBuilder()
11 class Sequence(object):
12 """
13 Mandatory data:
14 * name -- str with the name of sequence
15 * description -- str with description of the sequence
16 * monomers -- list of monomer objects (aminoacids or nucleotides)
17 * pdb_chains -- list of Bio.PDB.Chain's
19 TODO: class Protein: container of multiple Sequences,
20 class ProteinMononer: container of multiple Monomers
21 """
22 def __init__(self, monomers=None, name='', description=""):
23 if not monomers:
24 monomers = []
25 self.name = name
26 self.description = description
27 self.monomers = monomers
28 self.pdb_chains = []
30 def __len__(self):
31 return len(self.monomers)
33 def __str__(self):
34 return ''.join([monomer.type.code1 for monomer in self.monomers])
36 def __eq__(self, other):
37 return len(self) == len(other) and \
38 all([a==b for a, b in zip(self.monomers, other.monomers)])
40 def __ne__(self, other):
41 return not (self == other)
43 def pdb_chain_add(self, pdb_file, pdb_id, pdb_chain, pdb_model=0):
44 """
45 Reads Pdb chain from file
46 and align each Monomer with PDB.Residue (TODO)
47 """
48 name = Pdb.std_id(pdb_id, pdb_chain, pdb_model)
49 chain = PDBParser().get_structure(name, pdb_file)[pdb_model][pdb_chain]
50 self.pdb_chains.append(chain)
51 pdb_sequence = Sequence.from_pdb_chain(chain)
52 alignment = project.Project.from_sequences(self, pdb_sequence)
53 alignment.muscle_align()
54 for monomer, pdb_monomer in alignment.column(sequence=pdb_sequence, original=self):
55 monomer.pdb_residue_add(chain, pdb_monomer.pdb_residues[chain])
56 #~ pdb_monomer.pdb_residue_add(self.pdb_chain,
57 # FIXME: align and map
59 @staticmethod
60 def from_str(fasta_str, name='', description='', monomer_kind=AminoAcidType):
61 monomers = [monomer_kind.from_code1(aa).instance() for aa in fasta_str]
62 return Sequence(monomers, name, description)
64 @staticmethod
65 def from_pdb_chain(chain):
66 """
67 chain is Bio.PDB.Chain
68 returns Sequence with Monomers with link to Bio.PDB.Residue
69 """
70 peptide = cappbuilder.build_peptides(chain)[0]
71 sequence = Sequence()
72 sequence.pdb_chains = [chain]
73 for ca_atom in peptide.get_ca_list():
74 residue = ca_atom.get_parent()
75 monomer = AminoAcidType.from_pdb_residue(residue).instance()
76 monomer.pdb_residue_add(chain, residue)
77 sequence.monomers.append(monomer)
78 return sequence