[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[modeller_usage] model.loops crosses chains



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)

## 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[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