File: 20export_naming.py

package info (click to toggle)
pymol 2.5.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 42,288 kB
  • sloc: cpp: 476,472; python: 76,538; ansic: 29,510; javascript: 6,792; sh: 47; makefile: 24
file content (109 lines) | stat: -rw-r--r-- 2,621 bytes parent folder | download | duplicates (12)
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 "}"