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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
# PyMOL
from pymol import cmd
from chempy.champ import Champ
import string
print '''# NOTE: This file was autogenerated
aa_dict = {'
'''
for res in ( 'ala','arg','asp','asn','cys','gln','glu','gly','his','ile','leu','lys','met','phe','pro','ser','thr','trp','tyr','val' ):
print "'"+string.upper(res)+"': ["
ch = Champ()
cmd.fragment(res,"tmp")
model = cmd.get_model("tmp")
cmd.delete("tmp")
m1 = ch.insert_model(model)
ch.pattern_detect_chirality(m1)
ch.pattern_orient_bonds(m1)
pat1 = ch.pattern_get_string_with_names(m1)
ch.pattern_detect_chirality(m1)
pat2 = ch.pattern_get_string_with_names(m1)
# confirm that CHAMP handles this pattern well...
if pat1!=pat2:
print " Chirality Assignment Error!"
print pat1
print pat2
break
else:
pat = pat1
# print pat1
clean_pat = re.sub("<[^>]*>","",pat)
source = ch.insert_pattern_string(clean_pat)
# print ch.pattern_get_string(source)
# print ch.pattern_get_string(m1)
if ch.match_1v1_b(source,m1)==0:
print " Error: Pattern doesn't match with self!"
pat_isomer = string.replace(pat,"@@","X")
pat_isomer = string.replace(pat_isomer,"@","@@")
pat_isomer = string.replace(pat_isomer,"X","@")
isomer = ch.insert_pattern_string(pat_isomer)
if ch.match_1v1_b(isomer,m1)==1:
if(res!='gly'):
print " Error: Pattern matches the enatiomer"
pat_racemic = string.replace(pat,"@","")
racemic = ch.insert_pattern_string(pat_racemic)
# print ch.pattern_get_string(source)
# print ch.pattern_get_string(isomer)
# print ch.pattern_get_string(racemic)
if ch.match_1v1_b(racemic,source)!=1:
print " Error: Racemic doesn't match source isomer"
if ch.match_1v1_b(racemic,isomer)!=1:
print " Error: Racemic doesn't match enantiomer"
if ch.match_1v1_b(source,racemic)!=0:
print " Error: Source matches racemic"
if ch.match_1v1_b(isomer,racemic)!=0:
print " Error: Isomer matches racemic"
lst = []
for a in string.split(pat,'<'):
for b in string.split(a,'>'):
lst.append(b)
tag_count = 0
pat_list = []
tag_list = []
flag = 0
while 1:
if lst==[]:
break
pat_list.append(lst.pop(0))
if lst==[]:
break;
tag_list.append((tag_count,lst.pop(0)))
pat_list.append("<%d>"%tag_count)
tag_count = tag_count+1
new_pat = string.join(pat_list,'')
print " '"+new_pat+"',"
print " ["
for a in tag_list:
print " (%2d, '%s'),"%a
print " ]"
print "],"
print "}"
|