allpy
changeset 244:6507cd6808c7
allpy: monomers completed
_monomers.py -- provate module for monomers
other modules imports MonomerType's descendant from _monomer
and inherit from Monomer type
thre are some problems with Monomer -- MonomerType links
author | boris <bnagaev@gmail.com> |
---|---|
date | Fri, 03 Dec 2010 23:24:43 +0300 |
parents | 5caae97bacdf |
children | 353379082202 |
files | allpy/_monomer.py allpy/base.py allpy/dna.py allpy/monomer.py allpy/rna.py |
diffstat | 5 files changed, 93 insertions(+), 110 deletions(-) [+] |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/allpy/_monomer.py Fri Dec 03 23:24:43 2010 +0300 1.3 @@ -0,0 +1,86 @@ 1.4 +#!/usr/bin/python 1.5 + 1.6 +from allpy_data.AAdict import AAdict 1.7 + 1.8 +index_code3 = {} 1.9 +index_code1 = {} 1.10 +index_name = {} 1.11 + 1.12 +class MonomerType(object): 1.13 + """ Monomer type 1.14 + 1.15 + name -- string like "Valine" 1.16 + code1 -- one-letter code (in upper case) 1.17 + code3 -- three-letter code (in upper case) 1.18 + is_modified -- True of False 1.19 + """ 1.20 + 1.21 + def __init__(self, name, code1, code3, is_modified=False): 1.22 + self.name = name.capitalize() 1.23 + self.code1 = code1.upper() 1.24 + self.code3 = code3.upper() 1.25 + self.is_modified = bool(is_modified) # ugly 1.26 + 1.27 + @classmethod 1.28 + def create(cls, name, code1, code3, is_modified=False): 1.29 + self = cls(name, code1m code3, is_modified) 1.30 + index_name[self.name] = self 1.31 + index_code3[self.code3] = self 1.32 + if not is_modified: 1.33 + if cls not in index_code1: 1.34 + index_code1[cls] = {} 1.35 + index_code1[cls][code1] = self 1.36 + 1.37 + @classmethod 1.38 + def from_code1(code1): 1.39 + return index_code1[cls][code1.upper()] 1.40 + 1.41 + @staticmethod 1.42 + def from_name(name): 1.43 + return index_name[name.capitalize()] 1.44 + 1.45 + @staticmethod 1.46 + def from_pdb_residue(pdb_residue): 1.47 + """ pdb_residue type is Bio.PDB.Residue """ 1.48 + return MonomerType.from_code3(pdb_residue.get_resname()) 1.49 + 1.50 + # TO DISCUSS 1.51 + def __eq__(self, other): 1.52 + return self.code1 == other.code1 1.53 + 1.54 + def __ne__(self, other): 1.55 + return not (self == other) 1.56 + 1.57 + 1.58 +class Monomer(object): 1.59 + """ Monomer 1.60 + 1.61 + type -- link to MonomerType object 1.62 + """ 1.63 + def __init__(self, monomer_type): 1.64 + self.type = monomer_type 1.65 + 1.66 + def __eq__(self, other): 1.67 + return self.type == other.type 1.68 + 1.69 + def __ne__(self, other): 1.70 + return not (self == other) 1.71 + 1.72 + 1.73 +class AminoAcidType(MonomerType): 1.74 + pass 1.75 +class DNAType(MonomerType): 1.76 + pass 1.77 +class RNAType(MonomerType): 1.78 + pass 1.79 + 1.80 +types = {'p': AminoAcidType, 'd': DNAType, 'r': RNAType} 1.81 + 1.82 +# prepare all aminoacids 1.83 + 1.84 +for code3, data in AAdict.items(): 1.85 + code1, m_type, is_modified, none, name = data 1.86 + monomer_type = types[m_type] 1.87 + monomer_type.create(name, code1, code3, is_modified) 1.88 +del code3, data, code1, m_type, is_modified, none, name 1.89 +
2.1 --- a/allpy/base.py Fri Dec 03 22:57:37 2010 +0300 2.2 +++ b/allpy/base.py Fri Dec 03 23:24:43 2010 +0300 2.3 @@ -1,3 +1,4 @@ 2.4 +import _monomer 2.5 2.6 class Sequence(list): 2.7 """ Sequence of Monomers 2.8 @@ -10,13 +11,8 @@ 2.9 """ 2.10 pass 2.11 2.12 -class MonomerType(list): 2.13 - """ """ 2.14 - pass 2.15 - 2.16 -class Monomer(object): 2.17 - """ """ 2.18 - pass 2.19 +MonomerType = _monomer.MonomerType 2.20 +Monomer = _monomer.Monomer 2.21 2.22 class Alignment(list): 2.23 """ """
3.1 --- a/allpy/dna.py Fri Dec 03 22:57:37 2010 +0300 3.2 +++ b/allpy/dna.py Fri Dec 03 23:24:43 2010 +0300 3.3 @@ -1,12 +1,11 @@ 3.4 import base 3.5 +import _monomer 3.6 3.7 class Sequence(base.Sequence): 3.8 """ """ 3.9 pass 3.10 3.11 -class MonomerType(base.MonomerType): 3.12 - """ """ 3.13 - pass 3.14 +MonomerType = _monomer.DNAType 3.15 3.16 class Monomer(base.Monomer): 3.17 """ """
4.1 --- a/allpy/monomer.py Fri Dec 03 22:57:37 2010 +0300 4.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 4.3 @@ -1,97 +0,0 @@ 4.4 -#!/usr/bin/python 4.5 - 4.6 -from allpy_data.AAdict import AAdict 4.7 -import Bio.PDB 4.8 - 4.9 -index_code3 = {} 4.10 -index_code1_protein = {} 4.11 -index_code1_nucleotide = {} 4.12 -index_name = {} 4.13 - 4.14 -class MonomerType(object): 4.15 - """ Monomer type 4.16 - 4.17 - name -- string like "Valine" 4.18 - code1 -- one-letter code (in upper case) 4.19 - code3 -- three-letter code (in upper case) 4.20 - is_modified -- True of False 4.21 - """ 4.22 - def __init__(self, name, code1, code3, is_modified=False): 4.23 - self.name = name.capitalize() 4.24 - self.code1 = code1.upper() 4.25 - self.code3 = code3.upper() 4.26 - self.is_modified = bool(is_modified) # ugly 4.27 - 4.28 - index_name[self.name] = self 4.29 - index_code3[self.code3] = self 4.30 - 4.31 - @staticmethod 4.32 - def from_code3(code3): 4.33 - return index_code3[code3.upper()] 4.34 - @staticmethod 4.35 - def from_name(name): 4.36 - return index_name[name.capitalize()] 4.37 - 4.38 - @staticmethod 4.39 - def from_pdb_residue(pdb_residue): 4.40 - return MonomerType.from_code3(pdb_residue.get_resname()) 4.41 - 4.42 - # TO DISCUSS 4.43 - def __eq__(self, other): 4.44 - return self.code1 == other.code1 4.45 - 4.46 - def __ne__(self, other): 4.47 - return not (self == other) 4.48 - 4.49 - 4.50 -class Monomer(object): 4.51 - """ Monomer 4.52 - 4.53 - type -- link to MonomerType object 4.54 - """ 4.55 - def __init__(self, monomer_type): 4.56 - self.type = monomer_type 4.57 - 4.58 - def __eq__(self, other): 4.59 - return self.type == other.type 4.60 - 4.61 - def __ne__(self, other): 4.62 - return not (self == other) 4.63 - 4.64 -class AminoAcidType(MonomerType): 4.65 - def __init__(self, name, code1, code3, is_modified=False): 4.66 - MonomerType.__init__(self, name, code1, code3, is_modified) 4.67 - if not is_modified: 4.68 - index_code1_protein[self.code1] = self 4.69 - 4.70 - @staticmethod 4.71 - def from_code1(code1): 4.72 - return index_code1_protein[code1.upper()] 4.73 - def instance(self): 4.74 - """ Returns new AminoAcid object of this type """ 4.75 - return AminoAcid(self) 4.76 - 4.77 -class DNAType(MonomerType): 4.78 - def __init__(self, name, code1, code3, is_modified=False): 4.79 - MonomerType.__init__(self, name, code1, code3, is_modified) 4.80 - if not is_modified: 4.81 - index_code1_nucleotide[self.code1] = self 4.82 - 4.83 - @staticmethod 4.84 - def from_code1(code1): 4.85 - return index_code1_nucleotide[code1.upper()] 4.86 - def instance(self): 4.87 - """ Returns new AminoAcid object of this type """ 4.88 - return DNA(self) 4.89 - 4.90 - 4.91 -# prepare all aminoacids 4.92 - 4.93 -for code3, data in AAdict.items(): 4.94 - code1, m_type, is_modified, none, name = data 4.95 - if m_type == 'p': 4.96 - AminoAcidType(name, code1, code3, is_modified) 4.97 - if m_type == 'd': 4.98 - DNAType(name, code1, code3, is_modified) 4.99 -del code3, data, code1, m_type, is_modified, none, name 4.100 -
5.1 --- a/allpy/rna.py Fri Dec 03 22:57:37 2010 +0300 5.2 +++ b/allpy/rna.py Fri Dec 03 23:24:43 2010 +0300 5.3 @@ -1,12 +1,11 @@ 5.4 import base 5.5 +import _monomer 5.6 5.7 class Sequence(base.Sequence): 5.8 """ """ 5.9 pass 5.10 5.11 -class MonomerType(base.MonomerType): 5.12 - """ """ 5.13 - pass 5.14 +MonomerType = _monomer.DNAType 5.15 5.16 class Monomer(base.Monomer): 5.17 """ """