71 lines
1.6 KiB
Promela
71 lines
1.6 KiB
Promela
# this script uses the alignment engine to match aligned C-alpha atoms
|
|
# in related structures and graft a selection from one to the other
|
|
|
|
# load structures
|
|
|
|
fetch 1t46 1oky, async=0
|
|
as ribbon
|
|
|
|
# specify mobile and target objects / atoms
|
|
|
|
select mobile, 1t46////CA
|
|
|
|
select target, 1oky////CA
|
|
|
|
# specify the input selection to match across the alignment
|
|
|
|
select match_inp, 1oky///86-91/CA
|
|
|
|
##### generic from here down #####
|
|
|
|
# initialize the output selection
|
|
|
|
select match_out, none
|
|
|
|
# perform the alignment
|
|
|
|
align mobile, target, object=aln
|
|
|
|
python
|
|
|
|
# work around indexing bug in pre-1.2 versions
|
|
|
|
if cmd.get_version()[1]<1.2:
|
|
fixver = 1
|
|
else:
|
|
fixver = 0
|
|
|
|
# get raw alignment from Python
|
|
|
|
aln_list=cmd.get_raw_alignment("aln")
|
|
|
|
# iterate through matching atom sets
|
|
|
|
for match in aln_list:
|
|
|
|
# init. temporary selections for accumulating matched atoms
|
|
|
|
cmd.select("tmp_mob","none")
|
|
cmd.select("tmp_tgt","none")
|
|
|
|
# find corresponding atoms in mobile & target selectionsw
|
|
|
|
for atom in match:
|
|
atom_sele = "%s`%d"%(atom[0], atom[1]+fixver)
|
|
cmd.select("tmp_mob","tmp_mob or (mobile and %s)"%atom_sele)
|
|
cmd.select("tmp_tgt","tmp_tgt or (target and %s)"%atom_sele)
|
|
|
|
# when both are found, match from input selection to output selection
|
|
|
|
if (cmd.count_atoms("tmp_mob")==1) and (cmd.count_atoms("tmp_tgt")==1):
|
|
if cmd.count_atoms("tmp_mob and match_inp"):
|
|
cmd.select("match_out","match_out or tmp_tgt")
|
|
elif cmd.count_atoms("tmp_tgt and match_inp"):
|
|
cmd.select("match_out","match_out or tmp_mob")
|
|
|
|
python end
|
|
|
|
deselect
|
|
enable match_out
|
|
orient match_out
|
|
zoom match_out, 3 |