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.
## Reproducible for the first case (can be modified to show the second)
## wget https://files.rcsb.org/download/5KXI.pdb ## 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: print(i)
raise ValueError("stop here")
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
On 2/23/17 6:55 AM, Shyam Saladi wrote: > 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.
Yes, this is the default behavior of the model.loops() method: https://salilab.org/modeller/9.18/manual/node177.html
If you don't want it to do that, set include_termini to False. (It would also be pretty easy to write a function to split loops in the way you describe too, although I think it would make little difference to the loop modeling algorithm other than a different starting conformation.)
I can't run your test case because it looks like you've confused two examples (5xki vs. 2abx).
Ben Webb, Modeller Caretaker