summaryrefslogtreecommitdiff
path: root/cad/src/dna/model/elements_data_PAM5.py
blob: 6ed5d3467a830d2d2c83e1b559543016439917fb (plain)
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# Copyright 2007-2008 Nanorex, Inc.  See LICENSE file for details.
"""
elements_data_PAM5.py -- data for PAM5 pseudoatom elements

@author: Mark, Eric D
@version: $Id$
@copyright: 2007-2008 Nanorex, Inc.  See LICENSE file for details.

History:

Bruce 071105 revised init code, and split PAM3 and PAM5 data
out of elements_data.py into separate files.

Bruce 080108 added Gv5 for use in Eric D's forthcoming PAM5 revision.
"""

from model.elements_data import tetra4, flat, tetra2, onebond
from utilities.constants import MODEL_PAM5

_DIRECTIONAL_BOND_ELEMENTS_PAM5 = ('Ss5', 'Pl5', 'Sj5', 'Pe5', 'Sh5', 'Hp5')

# ==

# mark 060129. New default colors for Alpha 7.
_defaultRadiusAndColor = {
    "Ax5" : (5.0, [0.4, 0.4, 0.8]),
    "Ss5" : (4.0, [0.4, 0.8, 0.4]),
    "Pl5" : (3.2, [0.4, 0.1, 0.5]),
    "Sj5" : (4.0, [0.4, 0.8, 0.8]),
    "Ae5" : (3.5, [0.4, 0.4, 0.8]),
    "Pe5" : (3.0, [0.4, 0.1, 0.5]),
    "Sh5" : (2.5, [0.4, 0.8, 0.4]),
    "Hp5" : (4.0, [0.3, 0.7, 0.3]),
    "Gv5" : (5.0, [156./255, 83./255, 8./255]), #bruce 080108
    "Gr5" : (5.0, [156./255, 83./255, 8./255]),
    "Ub5" : (2.5, [0.428, 0.812, 0.808]), #bruce 080117 guess, "light blue"
    "Ux5" : (2.5, [0.428, 0.812, 0.808]), #bruce 080410 stub
    "Uy5" : (2.5, [0.812, 0.428, 0.808]), #bruce 080410 stub
    "Ah5" : (2.5, [0.8, 0.8, 0.8]), #bruce 080515 guess, "very light gray"
    }

_alternateRadiusAndColor = {
    }

# Format of _mendeleev: see elements_data.py

_mendeleev = [
    # B-DNA PAM5 pseudo atoms (see also _DIRECTIONAL_BOND_ELEMENTS)
    # Note: the bond vector lists are mainly what we want in length,
    # not necessarily in geometry.
    #
    #bruce 070415: End->Hydroxyl per Eric D email, in "Sh5" == "PAM5-Sugar-Hydroxyl"
    #bruce 071106: added option dicts; deprecated_to options are good guesses but are untested

    #bruce 080410 added Ux5 and Uy5 and updated all general comments below

    # axis element (old, only semi-supported, not generated anymore)
    ("Ax5", "PAM5-Axis",           200, 1.0, [[4, 200, tetra4]],     dict(role = 'axis')), # todo: convert to Gv5, moving it as you do

    # strand elements
    ("Ss5", "PAM5-Sugar",          201, 1.0, [[3, 210, flat]],       dict(role = 'strand')),
    ("Pl5", "PAM5-Phosphate",      202, 1.0, [[2, 210, tetra2]],     dict(role = 'strand')),

    # deprecated axis and strand elements
    # (btw, some of these say None, 'sp', which is probably wrong --
    #  don't imitate this in new elements) [bruce 080516 comment]
    ("Sj5", "PAM5-Sugar-Junction", 203, 1.0, [[3, 210, flat]],       dict(role = 'strand', deprecated_to = 'Ss5')),
    ("Ae5", "PAM5-Axis-End",       204, 1.0, [[1, 200, None, 'sp']], dict(role = 'axis',   deprecated_to = 'X')),
    ("Pe5", "PAM5-Phosphate-End",  205, 1.0, [[1, 210, None, 'sp']], dict(role = 'strand', deprecated_to = 'Pl5')), #bruce 080129 X->Pl5; UNCONFIRMED
    ("Sh5", "PAM5-Sugar-Hydroxyl", 206, 1.0, [[1, 210, None, 'sp']], dict(role = 'strand', deprecated_to = 'X')),
    ("Hp5", "PAM5-Hairpin",        207, 1.0, [[2, 210, tetra2]],     dict(role = 'strand', deprecated_to = 'Ss5')), # REVIEW: Ss or Pl?

    # major groove (used instead of axis for PAM5, bonded same as axis)
    ("Gv5", "PAM5-Major-Groove",   208, 1.0, [[4, 200, tetra4]],     dict(role = 'axis')), #bruce 080108
    ("Gr5", "PAM5-Major-Groove-End",209,1.0, [[3, 210, flat]],       dict(role = 'axis',   deprecated_to = 'Gv5')),

    # unpaired base components (experimental and mostly stubs as of 080410):

    # old one-atom (besides backbone) unpaired base (never used, may or may not end up being useful,
    #  mainly retained since the corresponding PAM3 element is more likely to be useful)
    ("Ub5", "PAM5-Unpaired-base",  210, 1.0, [[4, 200, tetra4]],     dict(role = 'unpaired-base')),

    # newly proposed two-atom (besides backbone) unpaired base (never yet used but under active development):
    #
    # Ux means "unpaired base x-point" and is in the same direction from the
    #    sugar (roughly) as the major groove or axis in a basepair
    #
    # Uy means "unpaired base y-point" and is in the same direction from the
    #    sugar as the other sugar in a basepair (exactly)
    #
    # The mnemonic is that the sugar-Uy line is the "PAM3+5 baseframe Y axis"
    # and the sugar-Ux line is then enough to define the X axis
    # (though its actual direction is a combination of Y and X).
    #
    ("Ux5", "PAM5-Unpaired-base-x",211, 1.0, [[4, 200, tetra4]],     dict(role = 'unpaired-base')), # (likely to be revised)
    ("Uy5", "PAM5-Unpaired-base-y",212, 1.0, [[4, 200, tetra4]],     dict(role = 'unpaired-base')), # (likely to be revised)

    # basepair axis handle (defined as PAM5 to make it more convenient to permit its bonding with Gv5)
    # (see also: elements_data_other.py)
    ("Ah5", "PAM5-Axis-handle",    213, 1.0, [[1, 200, onebond]], dict(role = 'handle')), #bruce 080515, revised 080516

 ]

# Since these are not real chemical bonds, the electron accounting
# need not be based on filled shells.  We just specify that each atom
# provides the same number of electrons as the bond count, and that it
# needs twice that many.

# symbol name
# hybridization name
# formal charge
# number of electrons needed to fill shell
# number of valence electrons provided
# covalent radius (pm)
# geometry (array of vectors, one for each available bond)

#    symb   hyb   FC   need prov c-rad geometry
_PAM5AtomTypeData = [
    ["Ax5", None,  0,    8,  4,  2.00, tetra4],
    ["Ss5", None,  0,    6,  3,  2.10, flat],
    ["Pl5", None,  0,    4,  2,  2.10, tetra2],
    ["Sj5", None,  0,    6,  3,  2.10, flat],
    ["Ae5", None,  0,    2,  1,  2.00, None],
    ["Pe5", None,  0,    2,  1,  2.10, None],
    ["Sh5", None,  0,    2,  1,  2.10, None],
    ["Hp5", None,  0,    4,  2,  2.10, tetra2],
    ["Gv5", None,  0,    8,  4,  2.00, tetra4],
    ["Gr5", None,  0,    6,  3,  2.10, flat],
    ["Ub5", None,  0,    8,  4,  2.00, tetra4],
    ["Ux5", None,  0,    8,  4,  2.00, tetra4],
    ["Uy5", None,  0,    8,  4,  2.00, tetra4],
    ["Ah5", None,  0,    2,  1,  2.00, onebond],
]

# ==

def init_PAM5_elements( periodicTable):
    periodicTable.addElements( _mendeleev,
                               _defaultRadiusAndColor,
                               _alternateRadiusAndColor,
                               _PAM5AtomTypeData,
                               _DIRECTIONAL_BOND_ELEMENTS_PAM5,
                               default_options = dict(pam = MODEL_PAM5)
                              )
    return

# end