-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathforms.rb
More file actions
132 lines (131 loc) · 6.49 KB
/
Copy pathforms.rb
File metadata and controls
132 lines (131 loc) · 6.49 KB
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
SALTS = {
"iminodiacetic acid" => { formula: "C(C(=O)O)NCC(=O)O", amine_count: 1, acid_count: 1, unii: "" },
"sodium" => { formula: "[Na+]", amine_count: 1, acid_count: 1, unii: "FKNQFGJONOIPTF" },
"potassium" => { formula: "[K+]", amine_count: 1, acid_count: 1, unii: "NPYPAHLBTDXSSS" },
"disodium dihydrate" => { formula: "[Na+].O", amine_count: 1, acid_count: 2, unii: "" },
"borate" => { formula: "B(O)(O)O", amine_count: 1, acid_count: 1, unii: "" },
"besylate" => { formula: "OS(=O)(=O)c1ccccc1", amine_count: 1, acid_count: 1, unii: "SRSXLGNVWSONIS" },
"carbonate" => { formula: "C(=O)(O)O", amine_count: 1, acid_count: 1, unii: "" },
"bicarbonate" => { formula: "C(=O)(O)O", amine_count: 1, acid_count: 2, unii: "BVKZGUZCCUSVTD" },
"arsenate" => { formula: "O[As](=O)(O)O", amine_count: 1, acid_count: 1, unii: "DJHGAFSJWGLOIV" },
#"arsenate dihydrate" => { formula: "", amine_count: 1, acid_count: 1, unii: "" },
"nitrate" => { formula: "[N+](=O)(O)[O-]", amine_count: 1, acid_count: 1, unii: "GRYLNZFGIOXLOG" },
"acetate" => { formula: "CC(O)=O", amine_count: 1, acid_count: 1, unii: "QTBSBXVTEAMEQO" },
"hydrochloride" => { formula: "Cl", amine_count: 1, acid_count: 1, unii: "VEXZGXHMUGYJMC" },
#"hydrochloride dihydrate" => { formula: "Cl.O.O", amine_count: 1, acid_count: 1, unii: "" },
"hydrocloride" => { formula: "Cl", amine_count: 1, acid_count: 1, unii: "" },
"hydrobromide" => { formula: "Br", amine_count: 1, acid_count: 1, unii: "CPELXLSAUQHCOX" },
"hydriodide" => { formula: "I", amine_count: 1, acid_count: 1, unii: "XMBWDFGMSWQBCA" },
"phosphate" => { formula: "OP(=O)(O)O", amine_count: 1, acid_count: 1, unii: "NBIIXXVUZAFLBC" },
# "phosphate dihydrate" => { formula: "OP(=O)(O)O.O.O", amine_count: 1, acid_count: 1, unii: "" },
"tartrate" => { formula: "O=C(O)C(O)C(O)C(=O)O", amine_count: 1, acid_count: 1, unii: "FEWJPZIEWOKRBE" },
"bitartrate" => { formula: "C(C(C(=O)[O-])O)(C(=O)O)O", amine_count: 1, acid_count: 2, unii: "FEWJPZIEWOKRBE" },
"monohydrate" => { formula: "O", amine_count: 1, acid_count: 1, unii: "XLYOFNOQVPJJNP" },
"dihydrate" => { formula: "O", amine_count: 1, acid_count: 2, unii: "" },
"chlorphenoxyacetate" => { formula: "c1cc(ccc1Cl)OCC(=O)O", amine_count: 1, acid_count: 1, unii: "SODPIMGUZLOIPE" },
"malate" => { formula: "O=C(O)CC(O)C(=O)O", amine_count: 1, acid_count: 1, unii: "VZCYOOQTPOCHFL" },
"maleate" => { formula: "O=C(O)CC(O)C(=O)O", amine_count: 1, acid_count: 1, unii: "VZCYOOQTPOCHFL" },
"citrate" => { formula: "C(C(=O)O)C(CC(=O)O)(C(=O)O)O", amine_count: 1, acid_count: 1, unii: "KRKNYBCHXYNGOX" },
"mesylate" => { formula: "CS(=O)(=O)O", amine_count: 1, acid_count: 1, unii: "" },
"dimesylate" => { formula: "CS(=O)(=O)O", amine_count: 1, acid_count: 2, unii: "" },
"camsilate" => { formula: "CC1(C)[C@@H]2CC[C@@]1(CS(=O)(=O)O)C(=O)C2", amine_count: 1, acid_count: 1, unii: "" },
"tosylate" => { formula: "Cc1ccc(cc1)S(=O)(=O)O", amine_count: 1, acid_count: 1, unii: "" },
"adipate" => { formula: "O=C(O)CCCCC(=O)O", amine_count: 1, acid_count: 1, unii: "WNLRTRBMVRJNCN" },
"aspartate" => { formula: "C([C@@H](C(=O)O)N)C(=O)O", amine_count: 2, acid_count: 1, unii: "CKLJMWTZIZZHCS" },
"saccharate" => { formula: "[C@H]([C@@H]([C@H](C(=O)O)O)O)([C@@H](C(=O)O)O)O", amine_count: 1, acid_count: 1, unii: "DSLZVSRJTYRBFB" },
"succinate" => { formula: "C(CC(=O)O)C(=O)O", amine_count: 1, acid_count: 1, unii: "KDYFGRWQOYBRFD" },
"fumarate" => { formula: "C(=C/C(=O)O)\\C(=O)O", amine_count: 1, acid_count: 1, unii: "VZCYOOQTPOCHFL" },
"valerate" => { formula: "CCCCC(=O)O", amine_count: 1, acid_count: 1, unii: "NQPDZGIKBAWPEJ" },
"cypionate" => { formula: "CCCCC(=O)O", amine_count: 1, acid_count: 1, unii: "" },
"enantate" => { formula: "CCCCC(=O)O", amine_count: 1, acid_count: 1, unii: "" },
"undecylate" => { formula: "CCCCC(=O)O", amine_count: 1, acid_count: 1, unii: "" },
"propionate" => { formula: "CCCCC(=O)O", amine_count: 1, acid_count: 1, unii: "" },
"oxalate" => { formula: "C(=O)(C(=O)O)O", amine_count: 1, acid_count: 1, unii: "" },
"salicylate" => { formula: "O=C(O)c1ccccc1O", amine_count: 1, acid_count: 1, unii: "YGSDEFSMJLZEOE" },
"hypophosphite" => { formula: "OP=O", amine_count: 1, acid_count: 1, unii: "GQZXNSPRSGFJLY" },
#"hypophosphite dihydrate" => { formula: "", amine_count: 1, acid_count: 1, unii: "" },
"sulfate" => { formula: "OS(=O)(=O)O", amine_count: 1, acid_count: 1, unii: "QAOWNCQODCNURD" },
"sulphate" => { formula: "OS(=O)(=O)O", amine_count: 1, acid_count: 1, unii: "QAOWNCQODCNURD" },
"laurylsulfate" => { formula: "CCCCCCCCCCCCOS(=O)(=O)O", amine_count: 1, acid_count: 1, unii: "" },
"laurylsulphate" => { formula: "", amine_count: 1, acid_count: 1, unii: "" },
"hemisulfate" => { formula: "OS(=O)(=O)O", amine_count: 2, acid_count: 1, unii: "QAOWNCQODCNURD" },
"hemisulphate" => { formula: "OS(=O)(=O)O", amine_count: 2, acid_count: 1, unii: "" },
"hemihydrate" => { formula: "O", amine_count: 2, acid_count: 1, unii: "XLYOFNOQVPJJNP" },
"sulfate monohydrate" => { formula: "OS(=O)(=O)O.O", amine_count: 1, acid_count: 1, unii: "" },
"sulphate monohydrate" => { formula: "OS(=O)(=O)O.O", amine_count: 1, acid_count: 1, unii: "" },
"sulfate pentahydrate" => { formula: "OS(=O)(=O)O.O.O.O.O.O", amine_count: 1, acid_count: 1, unii: "" },
"sulphate pentahydrate" => { formula: "OS(=O)(=O)O.O.O.O.O.O", amine_count: 1, acid_count: 1, unii: "" }
}
ESTERS = [
"acetate",
"benzoate",
"valerate",
"cypionate",
"enantate",
"undecylate",
"diundecylate",
"propionate",
"dipropionate",
"stearate",
"palmitate"
]
CHIRAL_PREFIXES = {
"dexter" => { prefered: "D-", prefixes: [
"D-"
#"\u1D05-",
], },
"laevus" => { prefered: "L-", prefixes: [
"L-"
#"\u029F-",
], },
"meso" => { prefered: "meso", prefixes: [
"meso",
"(2R,3S)-",
"(2S,3R)-"
#"\u029F-",
], },
"logical-racemic" => { prefered: "DL-", prefixes: [
"DL-"
] },
"right-handed" => { prefered: "(S)-", prefixes: [
"(+)-",
"(S)-",
"Dextro",
#"Dex",
"d-"
] },
"left-handed" => { prefered: "(R)-", prefixes: [
"(-)-",
"(R)-",
"Levo",
#"Lev",
"l-"
#"l-"
] },
"racemic" => { prefered: "", prefixes: [
"(RS)-",
"dl-",
"DL-",
"(+/-)-",
"(+-)-",
#"rac-",
] }
#"D-", "L-",
#"D-(+)-",
#"D-(-)-",
}
def count_prefix(n)
prefixes = {
1 => "",
2 => "di",
3 => "tri",
4 => "tetra",
5 => "penta",
6 => "hexa",
7 => "hepta",
8 => "octa",
9 => "nona",
10 => "deca"
}
prefixes[n] || ""
end