@@ -1056,6 +1056,255 @@ def _apply(self, group):
1056
1056
return group [np .isin (nmidx , matches )]
1057
1057
1058
1058
1059
+ class SugarSelection (Selection ):
1060
+ """Consists of sugar residues with recognized abbreviations.
1061
+
1062
+ Recognized residue names in :attr:`SugarSelection.sugar_res`.
1063
+
1064
+ * from glycam.org server::
1065
+ Abbreviations for PDB, CHARMM and GLYCAM
1066
+ https://glycam.org/docs/othertoolsservice/2016/06/09/3d-snfg-list-of-residue-names/index.html
1067
+
1068
+ * manually added aglycans 'ROH', 'OME', 'TBT' from GLYCAM-Web generated files.
1069
+ """
1070
+ token = 'sugar'
1071
+
1072
+ sugar_res = {
1073
+ # https://glycam.org/docs/othertoolsservice/2016/06/09/3d-snfg-list-of-residue-names/index.html
1074
+ # Full PDB Abbreviations Nomenclature
1075
+ 'GLC' , 'MAL' , 'BGC' , 'NAG' , '4YS' , 'SGN' , 'BGLN' , 'NDG' , 'GCS' ,
1076
+ 'GCU' , 'QUI' , 'OLI' , 'MAN' , 'BMA' , 'MAV' , 'BEM' , 'RAM' , 'TYV' , 'ARA' ,
1077
+ 'AHR' , 'GAL' , 'GLA' , 'NGA' , 'ADA' , 'GUL' , 'GUP' , 'GL0' , 'LGU' , 'ALT' ,
1078
+ 'ALL' , 'WOO' , 'TAL' , 'IDO' , 'IDS' , 'FUC' , 'FUL' , 'LYX' , 'ABE' , 'XYL' ,
1079
+ 'XYS' , 'LXC' , 'XYP' , 'PAR' , 'RIB' , 'DIG' , 'COL' , 'BAC' , 'API' , 'FRU' ,
1080
+ 'TAG' , 'SOR' , 'PSI' , 'DHA' , 'KDN' , 'KDO' , 'NEU' , 'SIA' , 'MUR' , 'GMH' ,
1081
+ # Full CHARMM Abbreviations Nomenclature
1082
+ 'AGLC' , 'BGLC' , 'AGLCNA' , 'BGLCNA' , 'BGLCN0' , 'AGLCA' , 'BGLCA' ,
1083
+ 'BGLCA0' , 'AMAN' , 'BMAN' , 'ARHM' , 'BRHM' , 'AARB' , 'BARB' , 'AGAL' ,
1084
+ 'BGAL' , 'AGALNA' , 'BGALNA' , 'AGUL' , 'BGUL' , 'AALT' , 'BALT' , 'AALL' ,
1085
+ 'ATAL' , 'BTAL' , 'AIDO' , 'BIDO' , 'AIDOA' , 'BIDOA' , 'AFUC' , 'BFUC' ,
1086
+ 'ALYF' , 'BLYF' , 'AXYL' , 'BXYL' , 'AXYF' , 'BXYF' , 'ARIB' , 'BRIB' ,
1087
+ 'AFRU' , 'BFRU' , 'ANE5AC' , 'BNE5AC' ,
1088
+ # GLYCAM Abbreviations
1089
+ # Glucose Nomenculature
1090
+ '0GA' , '0GB' , '1GA' , '1GB' , '2GA' , '2GB' , '3GA' , '3GB' , '4GA' , '4GB' ,
1091
+ '6GA' , '6GB' , 'ZGA' , 'ZGB' , 'YGA' , 'YGB' , 'XGA' , 'XGB' , 'WGA' , 'WGB' ,
1092
+ 'VGA' , 'VGB' , 'UGA' , 'UGB' , 'TGA' , 'TGB' , 'SGA' , 'SGB' , 'RGA' , 'RGB' ,
1093
+ 'QGA' , 'QGB' , 'PGA' , 'PGB' , '0gA' , '0gB' , '1gA' , '1gB' , '2gA' , '2gB' ,
1094
+ '3gA' , '3gB' , '4gA' , '4gB' , '6gA' , '6gB' , 'ZgA' , 'ZgB' , 'YgA' , 'YgB' ,
1095
+ 'XgA' , 'XgB' , 'WgA' , 'WgB' , 'VgA' , 'VgB' , 'UgA' , 'UgB' , 'TgA' , 'TgB' ,
1096
+ 'SgA' , 'SgB' , 'RgA' , 'RgB' , 'QgA' , 'QgB' , 'PgA' , 'PgB' ,
1097
+ # N-Acetyl Glucosamine Nomenculature
1098
+ '0YA' , '0YB' , '1YA' , '1YB' , '3YA' , '3YB' , '4YA' , '4YB' , '6YA' , '6YB' ,
1099
+ 'WYA' , 'WYB' , 'VYA' , 'VYB' , 'UYA' , 'UYB' , 'QYA' , 'QYB' , '0yA' , '0yB' ,
1100
+ '1yA' , '1yB' , '3yA' , '3yB' , '4yA' , '4yB' , '6yA' , '6yB' , 'WyA' , 'WyB' ,
1101
+ 'VyA' , 'VyB' , 'UyA' , 'UyB' , 'QyA' , 'QyB' ,
1102
+ # Glucosamine Nomenculature
1103
+ '0YN' , '0Yn' , '0YNP' , '0YnP' , '0YS' , '0Ys' , '3YS' , '3Ys' , '4YS' ,
1104
+ '4Ys' , '6YS' , '6Ys' , 'QYS' , 'QYs' , 'UYS' , 'UYs' , 'VYS' , 'VYs' ,
1105
+ 'WYS' , 'WYs' , '0yS' , '0ys' , '3yS' , '3ys' , '4yS' , '4ys' ,
1106
+ # Glucuronic Acid Nomenculature
1107
+ '0ZA' , '0ZB' , '1ZA' , '1ZB' , '2ZA' , '2ZB' , '3ZA' , '3ZB' , '4ZA' ,
1108
+ '4ZB' , 'ZZA' , 'ZZB' , 'YZA' , 'YZB' , 'WZA' , 'WZB' , 'TZA' , 'TZB' ,
1109
+ '0zA' , '0zB' , '1zA' , '1zB' , '2zA' , '2zB' , '3zA' , '3zB' , '4zA' ,
1110
+ '4zB' , 'ZzA' , 'ZzB' , 'YzA' , 'YzB' , 'WzA' , 'WzB' , 'TzA' ,
1111
+ 'TzB' , '0ZBP' ,
1112
+ # Quinovose Nomenculature
1113
+ '0QA' , '0QB' , '1QA' , '1QB' , '2QA' , '2QB' , '3QA' , '3QB' , '4QA' ,
1114
+ '4QB' , 'ZQA' , 'ZQB' , 'YQA' , 'YQB' , 'WQA' , 'WQB' , 'TQA' , 'TQB' ,
1115
+ '0qA' , '0qB' , '1qA' , '1qB' , '2qA' , '2qB' , '3qA' , '3qB' , '4qA' ,
1116
+ '4qB' , 'ZqA' , 'ZqB' , 'YqA' , 'YqB' , 'WqA' , 'WqB' , 'TqA' , 'TqB' ,
1117
+ # Mannose Nomenculature
1118
+ '0MA' , '0MB' , '1MA' , '1MB' , '2MA' , '2MB' , '3MA' , '3MB' , '4MA' ,
1119
+ '4MB' , '6MA' , '6MB' , 'ZMA' , 'ZMB' , 'YMA' , 'YMB' , 'XMA' , 'XMB' ,
1120
+ 'WMA' , 'WMB' , 'VMA' , 'VMB' , 'UMA' , 'UMB' , 'TMA' , 'TMB' , 'SMA' ,
1121
+ 'SMB' , 'RMA' , 'RMB' , 'QMA' , 'QMB' , 'PMA' , 'PMB' , '0mA' , '0mB' ,
1122
+ '1mA' , '1mB' , '2mA' , '2mB' , '3mA' , '3mB' , '4mA' , '4mB' , '6mA' ,
1123
+ '6mB' , 'ZmA' , 'ZmB' , 'YmA' , 'YmB' , 'XmA' , 'XmB' , 'WmA' , 'WmB' ,
1124
+ 'VmA' , 'VmB' , 'UmA' , 'UmB' , 'TmA' , 'TmB' , 'SmA' , 'SmB' , 'RmA' ,
1125
+ 'RmB' , 'QmA' , 'QmB' , 'PmA' , 'PmB' ,
1126
+ # N-Acetyl Mannosamine Nomenculature
1127
+ '0WA' , '0WB' , '1WA' , '1WB' , '3WA' , '3WB' , '4WA' , '4WB' , '6WA' ,
1128
+ '6WB' , 'WWA' , 'WWB' , 'VWA' , 'VWB' , 'UWA' , 'UWB' , 'QWA' , 'QWB' ,
1129
+ '0wA' , '0wB' , '1wA' , '1wB' , '3wA' , '3wB' , '4wA' , '4wB' , '6wA' ,
1130
+ '6wB' , 'WwA' , 'WwB' , 'VwA' , 'VwB' , 'UwA' , 'UwB' , 'QwA' , 'QwB' ,
1131
+ # Rhamnose Nomenculature
1132
+ '0HA' , '0HB' , '1HA' , '1HB' , '2HA' , '2HB' , '3HA' , '3HB' , '4HA' ,
1133
+ '4HB' , 'ZHA' , 'ZHB' , 'YHA' , 'YHB' , 'WHA' , 'WHB' , 'THA' , 'THB' ,
1134
+ '0hA' , '0hB' , '1hA' , '1hB' , '2hA' , '2hB' , '3hA' , '3hB' , '4hA' ,
1135
+ '4hB' , 'ZhA' , 'ZhB' , 'YhA' , 'YhB' , 'WhA' , 'WhB' , 'ThA' , 'ThB' ,
1136
+ # Tyvelose Nomenculature
1137
+ '0TV' , '0Tv' , '1TV' , '1Tv' , '2TV' , '2Tv' , '4TV' , '4Tv' , 'YTV' ,
1138
+ 'YTv' , '0tV' , '0tv' , '1tV' , '1tv' , '2tV' , '2tv' , '4tV' , '4tv' ,
1139
+ 'YtV' , 'Ytv' ,
1140
+ # Arabinose Nomenculature
1141
+ '0AA' , '0AB' , '1AA' , '1AB' , '2AA' , '2AB' , '3AA' , '3AB' , '4AA' ,
1142
+ '4AB' , 'ZAA' , 'ZAB' , 'YAA' , 'YAB' , 'WAA' , 'WAB' , 'TAA' , 'TAB' ,
1143
+ '0AD' , '0AU' , '1AD' , '1AU' , '2AD' , '2AU' , '3AD' , '3AU' , '5AD' ,
1144
+ '5AU' , 'ZAD' , 'ZAU' , '0aA' , '0aB' , '1aA' , '1aB' , '2aA' , '2aB' ,
1145
+ '3aA' , '3aB' , '4aA' , '4aB' , 'ZaA' , 'ZaB' , 'YaA' , 'YaB' , 'WaA' ,
1146
+ 'WaB' , 'TaA' , 'TaB' , '0aD' , '0aU' , '1aD' , '1aU' , '2aD' , '2aU' ,
1147
+ '3aD' , '3aU' , '5aD' , '5aU' , 'ZaD' , 'ZaU' ,
1148
+ # Galactose Nomenculature
1149
+ '0LA' , '0LB' , '1LA' , '1LB' , '2LA' , '2LB' , '3LA' , '3LB' , '4LA' ,
1150
+ '4LB' , '6LA' , '6LB' , 'ZLA' , 'ZLB' , 'YLA' , 'YLB' , 'XLA' , 'XLB' ,
1151
+ 'WLA' , 'WLB' , 'VLA' , 'VLB' , 'ULA' , 'ULB' , 'TLA' , 'TLB' , 'SLA' ,
1152
+ 'SLB' , 'RLA' , 'RLB' , 'QLA' , 'QLB' , 'PLA' , 'PLB' , '0lA' , '0lB' ,
1153
+ '1lA' , '1lB' , '2lA' , '2lB' , '3lA' , '3lB' , '4lA' , '4lB' , '6lA' ,
1154
+ '6lB' , 'ZlA' , 'ZlB' , 'YlA' , 'YlB' , 'XlA' , 'XlB' , 'WlA' , 'WlB' ,
1155
+ 'VlA' , 'VlB' , 'UlA' , 'UlB' , 'TlA' , 'TlB' , 'SlA' , 'SlB' , 'RlA' ,
1156
+ 'RlB' , 'QlA' , 'QlB' , 'PlA' , 'PlB' ,
1157
+ # N-Acetyl Galactosamine Nomenculature
1158
+ '0VA' , '0VB' , '1VA' , '1VB' , '3VA' , '3VB' , '4VA' , '4VB' , '6VA' ,
1159
+ '6VB' , 'WVA' , 'WVB' , 'VVA' , 'VVB' , 'UVA' , 'UVB' , 'QVA' , 'QVB' ,
1160
+ '0vA' , '0vB' , '1vA' , '1vB' , '3vA' , '3vB' , '4vA' , '4vB' , '6vA' ,
1161
+ '6vB' , 'WvA' , 'WvB' , 'VvA' , 'VvB' , 'UvA' , 'UvB' , 'QvA' , 'QvB' ,
1162
+ # Galacturonic Acid Nomenculature
1163
+ '0OA' , '0OB' , '1OA' , '1OB' , '2OA' , '2OB' , '3OA' , '3OB' , '4OA' ,
1164
+ '4OB' , 'ZOA' , 'ZOB' , 'YOA' , 'YOB' , 'WOA' , 'WOB' , 'TOA' , 'TOB' ,
1165
+ '0oA' , '0oB' , '1oA' , '1oB' , '2oA' , '2oB' , '3oA' , '3oB' , '4oA' ,
1166
+ '4oB' , 'ZoA' , 'ZoB' , 'YoA' , 'YoB' , 'WoA' , 'WoB' , 'ToA' , 'ToB' ,
1167
+ # Gulose Nomenculature
1168
+ '0KA' , '0KB' , '1KA' , '1KB' , '2KA' , '2KB' , '3KA' , '3KB' , '4KA' ,
1169
+ '4KB' , '6KA' , '6KB' , 'ZKA' , 'ZKB' , 'YKA' , 'YKB' , 'XKA' , 'XKB' ,
1170
+ 'WKA' , 'WKB' , 'VKA' , 'VKB' , 'UKA' , 'UKB' , 'TKA' , 'TKB' , 'SKA' ,
1171
+ 'SKB' , 'RKA' , 'RKB' , 'QKA' , 'QKB' , 'PKA' , 'PKB' , '0kA' , '0kB' ,
1172
+ '1kA' , '1kB' , '2kA' , '2kB' , '3kA' , '3kB' , '4kA' , '4kB' , '6kA' ,
1173
+ '6kB' , 'ZkA' , 'ZkB' , 'YkA' , 'YkB' , 'XkA' , 'XkB' , 'WkA' , 'WkB' ,
1174
+ 'VkA' , 'VkB' , 'UkA' , 'UkB' , 'TkA' , 'TkB' , 'SkA' , 'SkB' , 'RkA' ,
1175
+ 'RkB' , 'QkA' , 'QkB' , 'PkA' , 'PkB' ,
1176
+ # Altrose Nomenculature
1177
+ '0EA' , '0EB' , '1EA' , '1EB' , '2EA' , '2EB' , '3EA' , '3EB' , '4EA' ,
1178
+ '4EB' , '6EA' , '6EB' , 'ZEA' , 'ZEB' , 'YEA' , 'YEB' , 'XEA' , 'XEB' ,
1179
+ 'WEA' , 'WEB' , 'VEA' , 'VEB' , 'UEA' , 'UEB' , 'TEA' , 'TEB' , 'SEA' ,
1180
+ 'SEB' , 'REA' , 'REB' , 'QEA' , 'QEB' , 'PEA' , 'PEB' , '0eA' , '0eB' ,
1181
+ '1eA' , '1eB' , '2eA' , '2eB' , '3eA' , '3eB' , '4eA' , '4eB' , '6eA' ,
1182
+ '6eB' , 'ZeA' , 'ZeB' , 'YeA' , 'YeB' , 'XeA' , 'XeB' , 'WeA' , 'WeB' ,
1183
+ 'VeA' , 'VeB' , 'UeA' , 'UeB' , 'TeA' , 'TeB' , 'SeA' , 'SeB' , 'ReA' ,
1184
+ 'ReB' , 'QeA' , 'QeB' , 'PeA' , 'PeB' ,
1185
+ # Allose Nomenculature
1186
+ '0NA' , '0NB' , '1NA' , '1NB' , '2NA' , '2NB' , '3NA' , '3NB' , '4NA' ,
1187
+ '4NB' , '6NA' , '6NB' , 'ZNA' , 'ZNB' , 'YNA' , 'YNB' , 'XNA' , 'XNB' ,
1188
+ 'WNA' , 'WNB' , 'VNA' , 'VNB' , 'UNA' , 'UNB' , 'TNA' , 'TNB' , 'SNA' ,
1189
+ 'SNB' , 'RNA' , 'RNB' , 'QNA' , 'QNB' , 'PNA' , 'PNB' , '0nA' , '0nB' ,
1190
+ '1nA' , '1nB' , '2nA' , '2nB' , '3nA' , '3nB' , '4nA' , '4nB' , '6nA' ,
1191
+ '6nB' , 'ZnA' , 'ZnB' , 'YnA' , 'YnB' , 'XnA' , 'XnB' , 'WnA' , 'WnB' ,
1192
+ 'VnA' , 'VnB' , 'UnA' , 'UnB' , 'TnA' , 'TnB' , 'SnA' , 'SnB' , 'RnA' ,
1193
+ 'RnB' , 'QnA' , 'QnB' , 'PnA' , 'PnB' ,
1194
+ # Talose Nomenculature
1195
+ '0TA' , '0TB' , '1TA' , '1TB' , '2TA' , '2TB' , '3TA' , '3TB' , '4TA' ,
1196
+ '4TB' , '6TA' , '6TB' , 'ZTA' , 'ZTB' , 'YTA' , 'YTB' , 'XTA' , 'XTB' ,
1197
+ 'WTA' , 'WTB' , 'VTA' , 'VTB' , 'UTA' , 'UTB' , 'TTA' , 'TTB' , 'STA' ,
1198
+ 'STB' , 'RTA' , 'RTB' , 'QTA' , 'QTB' , 'PTA' , 'PTB' , '0tA' , '0tB' ,
1199
+ '1tA' , '1tB' , '2tA' , '2tB' , '3tA' , '3tB' , '4tA' , '4tB' , '6tA' ,
1200
+ '6tB' , 'ZtA' , 'ZtB' , 'YtA' , 'YtB' , 'XtA' , 'XtB' , 'WtA' , 'WtB' ,
1201
+ 'VtA' , 'VtB' , 'UtA' , 'UtB' , 'TtA' , 'TtB' , 'StA' , 'StB' , 'RtA' ,
1202
+ 'RtB' , 'QtA' , 'QtB' , 'PtA' , 'PtB' ,
1203
+ # Iduronic Acid Nomenculature
1204
+ '0UA' , '0UB' , '1UA' , '1UB' , '2UA' , '2UB' , '3UA' , '3UB' , '4UA' ,
1205
+ '4UB' , 'ZUA' , 'ZUB' , 'YUA' , 'YUB' , 'WUA' , 'WUB' , 'TUA' , 'TUB' ,
1206
+ '0uA' , '0uB' , '1uA' , '1uB' , '2uA' , '2uB' , '3uA' , '3uB' , '4uA' ,
1207
+ '4uB' , 'ZuA' , 'ZuB' , 'YuA' , 'YuB' , 'WuA' , 'WuB' , 'TuA' , 'TuB' ,
1208
+ 'YuAP' ,
1209
+ # Fucose Nomenculature
1210
+ '0FA' , '0FB' , '1FA' , '1FB' , '2FA' , '2FB' , '3FA' , '3FB' , '4FA' ,
1211
+ '4FB' , 'ZFA' , 'ZFB' , 'YFA' , 'YFB' , 'WFA' , 'WFB' , 'TFA' , 'TFB' ,
1212
+ '0fA' , '0fB' , '1fA' , '1fB' , '2fA' , '2fB' , '3fA' , '3fB' , '4fA' ,
1213
+ '4fB' , 'ZfA' , 'ZfB' , 'YfA' , 'YfB' , 'WfA' , 'WfB' , 'TfA' , 'TfB' ,
1214
+ # Lyxose Nomenculature
1215
+ '0DA' , '0DB' , '1DA' , '1DB' , '2DA' , '2DB' , '3DA' , '3DB' , '4DA' ,
1216
+ '4DB' , 'ZDA' , 'ZDB' , 'YDA' , 'YDB' , 'WDA' , 'WDB' , 'TDA' , 'TDB' ,
1217
+ '0DD' , '0DU' , '1DD' , '1DU' , '2DD' , '2DU' , '3DD' , '3DU' , '5DD' ,
1218
+ '5DU' , 'ZDD' , 'ZDU' , '0dA' , '0dB' , '1dA' , '1dB' , '2dA' , '2dB' ,
1219
+ '3dA' , '3dB' , '4dA' , '4dB' , 'ZdA' , 'ZdB' , 'YdA' , 'YdB' , 'WdA' ,
1220
+ 'WdB' , 'TdA' , 'TdB' , '0dD' , '0dU' , '1dD' , '1dU' , '2dD' , '2dU' ,
1221
+ '3dD' , '3dU' , '5dD' , '5dU' , 'ZdD' , 'ZdU' ,
1222
+ # Abequose Nomenculature
1223
+ '0AE' , '2AE' , '4AE' , 'YGa' , '0AF' , '2AF' , '4AF' , 'YAF' ,
1224
+ # Xylose Nomenculature
1225
+ '0XA' , '0XB' , '1XA' , '1XB' , '2XA' , '2XB' , '3XA' , '3XB' , '4XA' ,
1226
+ '4XB' , 'ZXA' , 'ZXB' , 'YXA' , 'YXB' , 'WXA' , 'WXB' , 'TXA' , 'TXB' ,
1227
+ '0XD' , '0XU' , '1XD' , '1XU' , '2XD' , '2XU' , '3XD' , '3XU' , '5XD' ,
1228
+ '5XU' , 'ZXD' , 'ZXU' , '0xA' , '0xB' , '1xA' , '1xB' , '2xA' , '2xB' ,
1229
+ '3xA' , '3xB' , '4xA' , '4xB' , 'ZxA' , 'ZxB' , 'YxA' , 'YxB' , 'WxA' ,
1230
+ 'WxB' , 'TxA' , 'TxB' , '0xD' , '0xU' , '1xD' , '1xU' , '2xD' , '2xU' ,
1231
+ '3xD' , '3xU' , '5xD' , '5xU' , 'ZxD' , 'ZxU' ,
1232
+ # Ribose Nomenculature
1233
+ '0RA' , '0RB' , '1RA' , '1RB' , '2RA' , '2RB' , '3RA' , '3RB' , '4RA' ,
1234
+ '4RB' , 'ZRA' , 'ZRB' , 'YRA' , 'YRB' , 'WRA' , 'WRB' , 'TRA' , 'TRB' ,
1235
+ '0RD' , '0RU' , '1RD' , '1RU' , '2RD' , '2RU' , '3RD' , '3RU' , '5RD' ,
1236
+ '5RU' , 'ZRD' , 'ZRU' , '0rA' , '0rB' , '1rA' , '1rB' , '2rA' , '2rB' ,
1237
+ '3rA' , '3rB' , '4rA' , '4rB' , 'ZrA' , 'ZrB' , 'YrA' , 'YrB' , 'WrA' ,
1238
+ 'WrB' , 'TrA' , 'TrB' , '0rD' , '0rU' , '1rD' , '1rU' , '2rD' , '2rU' ,
1239
+ '3rD' , '3rU' , '5rD' , '5rU' , 'ZrD' , 'ZrU' ,
1240
+ # Bacillosamine Nomenculature
1241
+ '0BC' , '3BC' , '0bC' , '3bC' ,
1242
+ # Fructose Nomenculature
1243
+ '0CA' , '0CB' , '1CA' , '1CB' , '2CA' , '2CB' , '3CA' , '3CB' , '4CA' ,
1244
+ '4CB' , '5CA' , '5CB' , 'WCA' , 'WCB' , '0CD' , '0CU' , '1CD' , '1CU' ,
1245
+ '2CD' , '2CU' , '3CD' , '3CU' , '4CD' , '4CU' , '6CD' , '6CU' , 'WCD' ,
1246
+ 'WCU' , 'VCD' , 'VCU' , 'UCD' , 'UCU' , 'QCD' , 'QCU' , '0cA' , '0cB' ,
1247
+ '1cA' , '1cB' , '2cA' , '2cB' , '3cA' , '3cB' , '4cA' , '4cB' , '5cA' ,
1248
+ '5cB' , 'WcA' , 'WcB' , '0cD' , '0cU' , '1cD' , '1cU' , '2cD' , '2cU' ,
1249
+ '3cD' , '3cU' , '4cD' , '4cU' , '6cD' , '6cU' , 'WcD' , 'WcU' , 'VcD' ,
1250
+ 'VcU' , 'UcD' , 'UcU' , 'QcD' , 'QcU' ,
1251
+ # Tagatose Nomenculature
1252
+ '0JA' , '0JB' , '1JA' , '1JB' , '2JA' , '2JB' , '3JA' , '3JB' , '4JA' ,
1253
+ '4JB' , '5JA' , '5JB' , 'WJA' , 'WJB' , '0JD' , '0JU' , '1JD' , '1JU' ,
1254
+ '2JD' , '2JU' , '3JD' , '3JU' , '4JD' , '4JU' , '6JD' , '6JU' , 'WJD' ,
1255
+ 'WJU' , 'VJD' , 'VJU' , 'UJD' , 'UJU' , 'QJD' , 'QJU' , '0jA' , '0jB' ,
1256
+ '1jA' , '1jB' , '2jA' , '2jB' , '3jA' , '3jB' , '4jA' , '4jB' , '5jA' ,
1257
+ '5jB' , 'WjA' , 'WjB' , '0jD' , '0jU' , '1jD' , '1jU' , '2jD' , '2jU' ,
1258
+ '3jD' , '3jU' , '4jD' , '4jU' , '6jD' , '6jU' , 'WjD' , 'WjU' , 'VjD' ,
1259
+ 'VjU' , 'UjD' , 'UjU' , 'QjD' , 'QjU' ,
1260
+ # Sorbose Nomenculature
1261
+ '0BA' , '0BB' , '1BA' , '1BB' , '2BA' , '2BB' , '3BA' , '3BB' , '4BA' ,
1262
+ '4BB' , '5BA' , '5BB' , 'WBA' , 'WBB' , '0BD' , '0BU' , '1BD' , '1BU' ,
1263
+ '2BD' , '2BU' , '3BD' , '3BU' , '4BD' , '4BU' , '6BD' , '6BU' , 'WBD' ,
1264
+ 'WBU' , 'VBD' , 'VBU' , 'UBD' , 'UBU' , 'QBD' , 'QBU' , '0bA' , '0bB' ,
1265
+ '1bA' , '1bB' , '2bA' , '2bB' , '3bA' , '3bB' , '4bA' , '4bB' , '5bA' ,
1266
+ '5bB' , 'WbA' , 'WbB' , '0bD' , '0bU' , '1bD' , '1bU' , '2bD' , '2bU' ,
1267
+ '3bD' , '3bU' , '4bD' , '4bU' , '6bD' , '6bU' , 'WbD' , 'WbU' , 'VbD' ,
1268
+ 'VbU' , 'UbD' , 'UbU' , 'QbD' , 'QbU' ,
1269
+ # Psicose Nomenculature
1270
+ '0PA' , '0PB' , '1PA' , '1PB' , '2PA' , '2PB' , '3PA' , '3PB' , '4PA' ,
1271
+ '4PB' , '5PA' , '5PB' , 'WPA' , 'WPB' , '0PD' , '0PU' , '1PD' , '1PU' ,
1272
+ '2PD' , '2PU' , '3PD' , '3PU' , '4PD' , '4PU' , '6PD' , '6PU' , 'WPD' ,
1273
+ 'WPU' , 'VPD' , 'VPU' , 'UPD' , 'UPU' , 'QPD' , 'QPU' , '0pA' , '0pB' ,
1274
+ '1pA' , '1pB' , '2pA' , '2pB' , '3pA' , '3pB' , '4pA' , '4pB' , '5pA' ,
1275
+ '5pB' , 'WpA' , 'WpB' , '0pD' , '0pU' , '1pD' , '1pU' , '2pD' , '2pU' ,
1276
+ '3pD' , '3pU' , '4pD' , '4pU' , '6pD' , '6pU' , 'WpD' , 'WpU' , 'VpD' ,
1277
+ 'VpU' , 'UpD' , 'UpU' , 'QpD' , 'QpU' ,
1278
+ # N-Acetyl Neuraminic Acid Nomenculature
1279
+ '0SA' , '0SB' , '4SA' , '4SB' , '7SA' , '7SB' , '8SA' , '8SB' , '9SA' ,
1280
+ '9SB' , 'ASA' , 'ASB' , 'BSA' , 'BSB' , 'CSA' , 'CSB' , 'DSA' , 'DSB' ,
1281
+ 'ESA' , 'ESB' , 'FSA' , 'FSB' , 'GSA' , 'GSB' , 'HSA' , 'HSB' , 'ISA' ,
1282
+ 'ISB' , 'JSA' , 'JSB' , 'KSA' , 'KSB' , '0sA' , '0sB' , '4sA' , '4sB' ,
1283
+ '7sA' , '7sB' , '8sA' , '8sB' , '9sA' , '9sB' , 'AsA' , 'AsB' , 'BsA' ,
1284
+ 'BsB' , 'CsA' , 'CsB' , 'DsA' , 'DsB' , 'EsA' , 'EsB' , 'FsA' , 'FsB' ,
1285
+ 'GsA' , 'GsB' , 'HsA' , 'HsB' , 'IsA' , 'IsB' , 'JsA' , 'JsB' , 'KsA' ,
1286
+ 'KsB' ,
1287
+ # N-Glycolyl Neuraminic Acid Nomenculature
1288
+ '0GL' , '4GL' , '7GL' , '8GL' , '9GL' , 'CGL' , 'DGL' , 'EGL' , 'FGL' ,
1289
+ 'GGL' , 'HGL' , 'IGL' , 'JGL' , 'KGL' , '0gL' , '4gL' , '7gL' , '8gL' ,
1290
+ '9gL' , 'AgL' , 'BgL' , 'CgL' , 'DgL' , 'EgL' , 'FgL' , 'GgL' , 'HgL' ,
1291
+ 'IgL' , 'JgL' , 'KgL' ,
1292
+ # Aglycon Nomenculature
1293
+ 'ROH' , 'OME' , 'TBT' ,
1294
+ }
1295
+
1296
+ def _apply (self , group ):
1297
+ resname_attr = group .universe ._topology .resnames
1298
+ # which values in resname attr are in sugar_res?
1299
+ matches = [ix for (nm , ix ) in resname_attr .namedict .items ()
1300
+ if nm in self .sugar_res ]
1301
+ # index of each atom's resname
1302
+ nmidx = resname_attr .nmidx [group .resindices ]
1303
+ # intersect atom's resname index and matches to sugar_res
1304
+ return group [np .isin (nmidx , matches )]
1305
+
1306
+
1307
+
1059
1308
class NucleicSelection (Selection ):
1060
1309
"""All atoms in nucleic acid residues with recognized residue names.
1061
1310
0 commit comments