Hello --
In the process of using model.loops to identify regions that I will need to model in a multi-chain situation, I have noticed that it returns insertions between chains as a single loop.
Furthermore, when specifying insertion_ext > 0, if the loop is at the N- or C-terminus of a chain in the middle of the molecule, the extension crosses to the next chain.
Are these two intended behaviors? For the first case, this complicates things for me since I would like to apply restraints to each loop separately (which means I need to split up a couple of the loops returned). For the second case, I feel like this may not be the intended behavior since the C terminus of one chain and the N terminus of the next can be far apart in space.
Thanks,
Shyam
## Reproducible for the first case (can be modified to show the second)
## remove residues A 74 and B 1
# contents of alignment file: 5xki_fill.aln
>P1;2abx
structureX:2abx: 1 :A:+148 :B:MOL_ID 1; MOLECULE ALPHA-BUNGAROTOXIN; CHAIN A, B; ENGINEERED YES:MOL_ID 1; ORGANISM_SCIENTIFIC BUNGARUS MULTICINCTUS; ORGANISM_COMMON MANY-BANDED KRAIT; ORGANISM_TAXID 8616; TISSUE VENOM: 2.50: 0.24
IVCHTTATIPSSAVTCPPGENLCYRKMWCDAFCSSRGKVVELGCAATCPSKKPYEEVTCCSTDKCNHPPKRQP-/
-VCHTTATIPSSAVTCPPGENLCYRKMWCDAFCSSRGKVVELGCAATCPSKKPYEEVTCCSTDKCNHPPKRQPG*
>P1;2abx_fill
sequence:::::::::
IVCHTTATIPSSAVTCPPGENLCYRKMWCDAFCSSRGKVVELGCAATCPSKKPYEEVTCCSTDKCNHPPKRQPG/
IVCHTTATIPSSAVTCPPGENLCYRKMWCDAFCSSRGKVVELGCAATCPSKKPYEEVTCCSTDKCNHPPKRQPG*
# modeller code
from modeller import environ, selection
from modeller.automodel import automodel
class MyModel(automodel):
# only refine loop regions
def select_atoms(self):
aln = self.read_alignment()
loops = self.loops(aln, minlength=1, maxlength=100, insertion_ext=0,
deletion_ext=0)
for i in loops[0]:
print(i)
raise ValueError("stop here")
return selection(loops).only_std_residues()
env = environ()
env.io.atom_files_directory = ['.']
a = MyModel(env,
alnfile = '2abx_fill.aln', # alignment filename
knowns = '2abx', # codes of the templates
sequence = '2abx_fill') # code of the target
a.starting_model = 5 # index of the first model
a.ending_model = 5 # index of the last model
# (determines how many models to calculate)
a.make() # do the actual comparative modeling