@@ -191,64 +191,76 @@ def __init__(self, plcomplex):
191
191
################
192
192
193
193
self .saltbridge_features = (
194
- 'RESNR' , 'RESTYPE' , 'RESCHAIN' , 'RESNR_LIG' , 'RESTYPE_LIG' , 'RESCHAIN_LIG' , 'DIST' , 'PROTISPOS' ,
194
+ 'RESNR' , 'RESTYPE' , 'RESCHAIN' , 'PROT_IDX_LIST' , 'RESNR_LIG' , 'RESTYPE_LIG' , 'RESCHAIN_LIG' , 'DIST' ,
195
+ 'PROTISPOS' ,
195
196
'LIG_GROUP' ,
196
197
'LIG_IDX_LIST' ,
197
198
'LIGCOO' , 'PROTCOO' )
198
199
self .saltbridge_info = []
199
200
for sb in self .complex .saltbridge_lneg + self .complex .saltbridge_pneg :
200
201
if sb .protispos :
201
- group , ids = sb .negative .fgroup , [str (x ) for x in sb .negative .atoms_orig_idx ]
202
- self .saltbridge_info .append ((sb .resnr , sb .restype , sb .reschain , sb .resnr_l , sb .restype_l , sb .reschain_l ,
202
+ group , ligand_atom_ids = sb .negative .fgroup , [str (x ) for x in sb .negative .atoms_orig_idx ]
203
+ protein_atom_ids = [str (x ) for x in sb .positive .atoms_orig_idx ]
204
+ self .saltbridge_info .append ((sb .resnr , sb .restype , sb .reschain , "," .join (protein_atom_ids ), sb .resnr_l ,
205
+ sb .restype_l , sb .reschain_l ,
203
206
'%.2f' % sb .distance , sb .protispos ,
204
- group .capitalize (), "," .join (ids ),
207
+ group .capitalize (), "," .join (ligand_atom_ids ),
205
208
tuple (sb .negative .center ), tuple (sb .positive .center )))
206
209
else :
207
- group , ids = sb .positive .fgroup , [str (x ) for x in sb .positive .atoms_orig_idx ]
208
- self .saltbridge_info .append ((sb .resnr , sb .restype , sb .reschain , sb .resnr_l , sb .restype_l , sb .reschain_l ,
210
+ group , ligand_atom_ids = sb .positive .fgroup , [str (x ) for x in sb .positive .atoms_orig_idx ]
211
+ protein_atom_ids = [str (x ) for x in sb .negative .atoms_orig_idx ]
212
+ self .saltbridge_info .append ((sb .resnr , sb .restype , sb .reschain , "," .join (protein_atom_ids ), sb .resnr_l ,
213
+ sb .restype_l , sb .reschain_l ,
209
214
'%.2f' % sb .distance , sb .protispos ,
210
- group .capitalize (), "," .join (ids ),
215
+ group .capitalize (), "," .join (ligand_atom_ids ),
211
216
tuple (sb .positive .center ), tuple (sb .negative .center )))
212
217
213
218
###############
214
219
# PI-STACKING #
215
220
###############
216
221
217
222
self .pistacking_features = (
218
- 'RESNR' , 'RESTYPE' , 'RESCHAIN' , 'RESNR_LIG' , 'RESTYPE_LIG' , 'RESCHAIN_LIG' , 'CENTDIST' , 'ANGLE' , 'OFFSET' ,
223
+ 'RESNR' , 'RESTYPE' , 'RESCHAIN' , 'RESNR_LIG' , 'RESTYPE_LIG' , 'RESCHAIN_LIG' , 'PROT_IDX_LIST' , 'CENTDIST' ,
224
+ 'ANGLE' , 'OFFSET' ,
219
225
'TYPE' ,
220
226
'LIG_IDX_LIST' , 'LIGCOO' , 'PROTCOO' )
221
227
self .pistacking_info = []
222
228
for stack in self .complex .pistacking :
223
- ids = [str (x ) for x in stack .ligandring .atoms_orig_idx ]
229
+ ligand_atom_ids = [str (x ) for x in stack .ligandring .atoms_orig_idx ]
230
+ protein_atom_ids = [str (x ) for x in stack .proteinring .atoms_orig_idx ]
224
231
self .pistacking_info .append ((stack .resnr , stack .restype , stack .reschain , stack .resnr_l , stack .restype_l ,
225
- stack .reschain_l , '%.2f' % stack .distance ,
226
- '%.2f' % stack .angle , '%.2f' % stack .offset , stack .type , "," .join (ids ),
232
+ stack .reschain_l , "," .join (protein_atom_ids ), '%.2f' % stack .distance ,
233
+ '%.2f' % stack .angle , '%.2f' % stack .offset , stack .type ,
234
+ "," .join (ligand_atom_ids ),
227
235
tuple (stack .ligandring .center ), tuple (stack .proteinring .center )))
228
236
229
237
##########################
230
238
# PI-CATION INTERACTIONS #
231
239
##########################
232
240
233
241
self .pication_features = (
234
- 'RESNR' , 'RESTYPE' , 'RESCHAIN' , 'RESNR_LIG ' , 'RESTYPE_LIG ' , 'RESCHAIN_LIG ' , 'DIST ' , 'OFFSET' , 'PROTCHARGED ' ,
235
- 'LIG_GROUP ' ,
236
- 'LIG_IDX_LIST' , 'LIGCOO' , 'PROTCOO' )
242
+ 'RESNR' , 'RESTYPE' , 'RESCHAIN' , 'PROT_IDX_LIST ' , 'RESNR_LIG ' , 'RESTYPE_LIG ' , 'RESCHAIN_LIG ' , 'DIST ' ,
243
+ 'OFFSET ' ,
244
+ 'PROTCHARGED' , 'LIG_GROUP' , ' LIG_IDX_LIST' , 'LIGCOO' , 'PROTCOO' )
237
245
self .pication_info = []
238
246
for picat in self .complex .pication_laro + self .complex .pication_paro :
239
247
if picat .protcharged :
240
- ids = [str (x ) for x in picat .ring .atoms_orig_idx ]
248
+ ligand_atom_ids = [str (x ) for x in picat .ring .atoms_orig_idx ]
249
+ protein_atom_ids = [str (x ) for x in picat .charge .atoms_orig_idx ]
241
250
group = 'Aromatic'
242
- self .pication_info .append ((picat .resnr , picat .restype , picat .reschain , picat .resnr_l , picat .restype_l ,
251
+ self .pication_info .append ((picat .resnr , picat .restype , picat .reschain , "," .join (protein_atom_ids ),
252
+ picat .resnr_l , picat .restype_l ,
243
253
picat .reschain_l , '%.2f' % picat .distance ,
244
- '%.2f' % picat .offset , picat .protcharged , group , "," .join (ids ),
254
+ '%.2f' % picat .offset , picat .protcharged , group , "," .join (ligand_atom_ids ),
245
255
tuple (picat .ring .center ), tuple (picat .charge .center )))
246
256
else :
247
- ids = [str (x ) for x in picat .charge .atoms_orig_idx ]
257
+ ligand_atom_ids = [str (x ) for x in picat .charge .atoms_orig_idx ]
258
+ protein_atom_ids = [str (x ) for x in picat .ring .atoms_orig_idx ]
248
259
group = picat .charge .fgroup
249
- self .pication_info .append ((picat .resnr , picat .restype , picat .reschain , picat .resnr_l , picat .restype_l ,
260
+ self .pication_info .append ((picat .resnr , picat .restype , picat .reschain , "," .join (protein_atom_ids ),
261
+ picat .resnr_l , picat .restype_l ,
250
262
picat .reschain_l , '%.2f' % picat .distance ,
251
- '%.2f' % picat .offset , picat .protcharged , group , "," .join (ids ),
263
+ '%.2f' % picat .offset , picat .protcharged , group , "," .join (ligand_atom_ids ),
252
264
tuple (picat .charge .center ), tuple (picat .ring .center )))
253
265
254
266
#################
@@ -451,9 +463,15 @@ def format_interactions(element_name, features, interaction_information):
451
463
new_contact = et .SubElement (interaction , element_name [:- 2 ], id = str (j + 1 ))
452
464
for i , feature in enumerate (single_contact ):
453
465
# Just assign the value unless it's an atom list, use subelements in this case
454
- if features [i ] == 'LIG_IDX_LIST' :
466
+ if features [i ] == 'LIG_IDX_LIST' or features [ i ] == 'PROT_IDX_LIST' :
455
467
feat = et .SubElement (new_contact , features [i ].lower ())
456
- for k , atm_idx in enumerate (feature .split (',' )):
468
+ split = list ()
469
+ # check whether multiple atoms are contained in the atom group
470
+ if isinstance (feature , str ):
471
+ split = feature .split (',' )
472
+ else :
473
+ split = [feature ]
474
+ for k , atm_idx in enumerate (split ):
457
475
idx = et .SubElement (feat , 'idx' , id = str (k + 1 ))
458
476
idx .text = str (atm_idx )
459
477
elif features [i ].endswith ('COO' ):
0 commit comments