def testLoadStruct(self):
        """ Test load_rosetta against read_PDB"""

        init()
        pose = pose_from_sequence(3*'A')

        struct = load_rosetta(pose)
        pdb = read_PDB(get_fn('ala_ala_ala.pdb'))

        self.assertEqual(len(struct.atoms), len(pdb.atoms))
        self.assertEqual(len(struct.residues), len(pdb.residues))
Example #2
0
    def test_loaded_topology(self):
        """ Test load_rosetta against OpenMM topology"""

        init()
        pose = pose_from_sequence(3 * 'A')

        struct = load_rosetta(pose)
        pdb = PDBFile(get_fn('ala_ala_ala.pdb'))

        self.assertEqual(len(list(struct.topology.atoms())),
                         len(list(pdb.topology.atoms())))

        self.assertEqual(len(list(struct.topology.bonds())),
                         len(list(pdb.topology.bonds())))

        self.assertEqual(len(list(struct.topology.residues())),
                         len(list(pdb.topology.residues())))
Example #3
0
    def test_loaded_positions(self):
        """ Test that positions were properly loaded"""

        init()
        seq = 3 * 'A'
        pose = pose_from_sequence(seq)

        struct = load_rosetta(pose)

        posexyz = list(
            chain(*[[tuple(atom.xyz()) for atom in res.atoms()] for res in
                    [pose.residue(idx) for idx in range(1,
                                                        len(seq) + 1)]]))

        structxyz = [(atom.xx, atom.xy, atom.xz) for atom in struct.atoms]

        self.assertEqual(posexyz, structxyz)
    def testLoadedTopology(self):
        """ Test load_rosetta against OpenMM topology"""

        init()
        pose = pose_from_sequence(3*'A')

        struct = load_rosetta(pose)
        pdb = PDBFile(get_fn('ala_ala_ala.pdb'))

        self.assertEqual(_unpackLen(struct.topology.atoms()),
                         _unpackLen(pdb.topology.atoms()))

        self.assertEqual(_unpackLen(struct.topology.bonds()),
                         _unpackLen(pdb.topology.bonds()))

        self.assertEqual(_unpackLen(struct.topology.residues()),
                         _unpackLen(pdb.topology.residues()))
    def testLoadedPositions(self):
        """ Test that positions were properly loaded"""

        init()
        seq = 3*'A'
        pose = pose_from_sequence(seq)

        struct = load_rosetta(pose)

        posexyz = list(
            chain(*[[tuple(atom.xyz()) for atom in res.atoms()]
                    for res in [pose.residue(idx)
                                for idx in range(1, len(seq)+1)]]))

        structxyz = [(atom.xx, atom.xy, atom.xz) for atom in struct.atoms]

        self.assertEqual(posexyz, structxyz)
    def insert_single_internal_residue(self, chain, anchors, seq, pre_flank_seq):

        info = self.scaffold_pose.pdb_info()

        start_res = info.pdb2pose(chain,anchors[0])

        seq_overhang = pre_flank_seq + seq

        overhang_len = len(pre_flank_seq)

        if overhang_len == 2:

            scaffold_range = [start_res]

        else:

            scaffold_range = [start_res -1, start_res]

        frag_range = range(1,overhang_len + 1)

        frag_pose = rosetta.pose_from_sequence(seq_overhang,self.res_type, auto_termini=False)

        aligned_frag = salign.kabsch_alignment(self.scaffold_pose, frag_pose, scaffold_range, frag_range)

        for i in range(2):
            aligned_frag.delete_residue_range_slow(1,1)

        self.scaffold_pose.append_polymer_residue_after_seqpos(aligned_frag.residue(1),start_res, False)

        self.scaffold_pose.pdb_info.set_resinfo(start_res + 1, chain, anchors[0] + 1)

        self.scaffold_pose.pdb_info().obsolete(False)

        loop = rosetta.Loop(start_res, start_res+2, start_res+1)

        return loop
Example #7
0
from simtk.unit import *

# ParmEd imports
from parmed import load_rosetta

# PyRosetta imports
from toolbox import mutate_residue
from rosetta import init, pose_from_sequence

# Initialize PyRosetta
init()

# Create Ala12
print('Creating Ala12...')
seq = 12*'A'
pose = pose_from_sequence(seq)

# Mutate residue 5 to K
print('Mutating Fifth Ala to Lys...')
mutant = mutate_residue(pose, 5, 'K')

# Load mutant into ParmEd
print('Loading into ParmEd...')
struct = load_rosetta(mutant)

# Load AMBER-99SBildn and TIP3P parameters
print('Loading AMBER parameters...')
ff = ForceField('amber99sbildn.xml', 'tip3p.xml')

# Solvate Structure
print('Solvating...')
    def graft_n_terminal_loop(self, chain, anchors, seq, post_flank_seq):
        """
        Graft a N-terminal loop to self.scaffold_structure.
        Requires at least one flanking residue to be given.

        @todo: Check if we need the replacement shenanigans used for
        C-terminal additions

        @type  chain:    string
        @param chain:    Chain into which loop will be grafted
        @type  anchors:  list
        @param anchors:  Resids before and after region to be inserted
        @type  seq:      string
        @param seq:      Sequence of the inserted fragment
        @type  post_flank_seq:  string
        @param post_flank_seq:  Sequence of the residues following the inserted fragment
        @rtype:          Pyrosetta Loop
        @return:         Loop describing the region added/remodelled
        """

        logger = self.logger

        logger.info("N-terminal Loop modelling")

        frag_seq = seq + post_flank_seq

        frag_pose = rosetta.pose_from_sequence(frag_seq, 'fa_standard', auto_termini=False)
        logger.info("Fragment built")

        # PDB resid of anchor
        start_anchor = anchors[1]

        # PyRosetta indices of the pre_flank_seq
        #frag_range = range(1,len(post_flank_seq) + 1)
        last_frag_resid = len(frag_seq)
        frag_range = [last_frag_resid-1,last_frag_resid]


        # PyRosetta index of the first residue
        # The terminal residue of the scaffold structure will be deleted and
        # replaced from the fragment
        original_term = self.get_first_residue_id_chain(self.scaffold_pose,chain)

        # If two flanking residues available use for alignment range
        if len(frag_range) == 1:
            scaffold_range = [original_term]
        else:
            scaffold_range = [original_term, original_term + 1]

        logger.info("Anchor alignment setup complete")
        aligned_frag = salign.kabsch_alignment(self.scaffold_pose, frag_pose,
                                               scaffold_range, frag_range)
        logger.info("Fragment aligned")

        #self.scaffold_pose.delete_polymer_residue(original_term)
        self.scaffold_pose.delete_residue_range_slow(original_term,original_term)
        logger.info("Anchor deleted")

        loop_length = len(frag_seq)

        # Generated with default chain label 'A'
        frag_term = self.get_last_residue_id_chain(aligned_frag, 'A')

        # In most cases we should have two flanking residues
        # First is used for alignment only - so delete now
        if len(frag_range) != 1:
            aligned_frag.delete_residue_range_slow(frag_term,frag_term)
            loop_length -= 1

        logger.info("Delete alignment residue")

        count = 0

        for ii in range(loop_length, 0 , -1):

            print "add residue " + str(ii)

            self.scaffold_pose.prepend_polymer_residue_before_seqpos(frag_pose.residue(ii),1,False)
            pdb_res = start_anchor - count
            self.scaffold_pose.pdb_info().set_resinfo(1,chain,pdb_res)
            count += 1

        self.scaffold_pose.pdb_info().obsolete(False)

        if len(frag_range) == 1:
            loop = rosetta.Loop(1 ,original_term, (1 + original_term)/2)
        else:
            loop = rosetta.Loop(1 ,original_term + 1, (1 + original_term + 1)/2)

        logger.info("Loops generated")

        return loop
    def graft_c_terminal_loop(self, chain, anchors, seq, pre_flank_seq):
        """
        Graft a C-terminal loop to self.scaffold_structure.
        Requires at least one flanking residue to be given.

        @type  chain:    string
        @param chain:    Chain into which loop will be grafted
        @type  anchors:  list
        @param anchors:  Resids before and after region to be inserted
        @type  seq:      string
        @param seq:      Sequence of the inserfed fragment
        @type  pre_flank_seq:  string
        @param pre_flank_seq:  Sequence of the residues preceding the inserted fragment
        @rtype:          Pyrosetta Loop
        @return:         Loop describing the region added/remodelled
        """

        frag_seq = pre_flank_seq + seq

        frag_pose = rosetta.pose_from_sequence(frag_seq, 'fa_standard', auto_termini=False)

        # PDB resid of anchor
        start_anchor = anchors[0]

        # PyRosetta indices of the pre_flank_seq
        frag_range = range(1,len(pre_flank_seq) + 1)

        # PyRosetta index of the final residue
        # The terminal residue of the scaffold structure will be deleted and
        # replaced from the fragment
        #original_end = self.scaffold_pose.total_residue()
        original_end = self.get_last_residue_id_chain(self.scaffold_pose,chain)

        # If we can it helps to use an idealized residue in the overlap
        # so delete the original residue and generate replacement
        # The chain isn't built this way as it produces overlapping conformations
        if len(pre_flank_seq) > 1:
            self.scaffold_pose.delete_polymer_residue(original_end)
            self.scaffold_pose.append_polymer_residue_after_seqpos(frag_pose.residue(1),original_end -1, True)

            self.scaffold_pose.pdb_info().set_resinfo(original_end,chain,start_anchor)

        # If two flanking residues available use for alignment range
        if len(frag_range) == 1:
            scaffold_range = [original_end]
        else:
            scaffold_range = [original_end -1, original_end]

        aligned_frag = salign.kabsch_alignment(self.scaffold_pose, frag_pose,
                                               scaffold_range, frag_range)

        self.scaffold_pose.delete_polymer_residue(original_end)

        loop_length = len(frag_seq)

        # In most cases we should have two flanking residues
        # First is used for alignment only - so delete now
        if len(frag_range) != 1:
            aligned_frag.delete_residue_range_slow(1,1)
            loop_length -= 1

        post_edit_end = self.get_last_residue_id_chain(self.scaffold_pose, chain)
        #self.scaffold_pose.append_pose_by_jump(aligned_frag, post_edit_end)

        for ii in range(loop_length):

            frag_res = ii + 1

            new_res = post_edit_end + 1
            pdb_res = start_anchor + ii

            self.scaffold_pose.append_polymer_residue_after_seqpos(aligned_frag.residue(frag_res),post_edit_end, False)

            post_edit_end += 1

            self.scaffold_pose.pdb_info().set_resinfo(new_res,chain,pdb_res)

        # for ii in range(loop_length):
        #
        #     res = original_end + ii
        #     pdb_res = start_anchor + ii
        #     self.scaffold_pose.pdb_info().set_resinfo(res,chain,pdb_res)

        self.scaffold_pose.pdb_info().obsolete(False)

        end_res = self.get_last_residue_id_chain(self.scaffold_pose, chain)

        if len(frag_range) == 1:
            loop = rosetta.Loop(original_end ,end_res-1, (original_end + end_res)/2)
        else:
            loop = rosetta.Loop(original_end-1 ,end_res-1, (original_end + end_res)/2)

        return loop
    def graft_loop_double_end(self, chain, anchors, seq, pre_flank_seq, post_flank_seq):
        """
        Graft a loop fragment into a gap in the self.scaffold_structure.
        Requires flanking residues to be present at both ends.

        @type  chain:    string
        @param chain:    Chain into which loop will be grafted
        @type  anchors:  list
        @param anchors:  Resids before and after region to be inserted
        @type  seq:      string
        @param seq:      Sequence of the inserfed fragment
        @type  pre_flank_seq:  string
        @param pre_flank_seq:  Sequence of the residues preceding the inserted fragment
        @type  post_flank_seq:  string
        @param post_flank_seq:  Sequence of the residues following the inserted fragment
        @rtype:          Pyrosetta Loop
        @return:         Loop describing the region added/remodelled
        """

        loop_length = len(seq)

        if loop_length == 1:

            loop = self.insert_single_internal_residue(chain, anchors, seq, pre_flank_seq)

        else:

            info = self.scaffold_pose.pdb_info()

            start_res = info.pdb2pose(chain,anchors[0])
            end_res = info.pdb2pose(chain,anchors[1])

            #nter_overlap_length = len(pre_flank_seq)
            #cter_overlap_length = len(post_flank_seq)

            if loop_length < 4:

                seq = pre_flank_seq[-1] + seq + pre_flank_seq[0]

                loop_length = len(seq)

                pre_flank_seq = pre_flank_seq[:-1]
                post_flank_seq = post_flank_seq[1:]

                self.scaffold_pose.delete_polymer_residue(end_res)
                self.scaffold_pose.delete_polymer_residue(start_res)

                self.scaffold_pose.pdb_info().obsolete(False)

                anchors[0] = anchors[0] - 1
                anchors[1] = anchors[1] + 1

                start_res = info.pdb2pose(chain,anchors[0])
                end_res = info.pdb2pose(chain,anchors[1])

                flex_length_nter = 1
                flex_length_cter = 1

            elif loop_length == 4:

                flex_length_nter = 1
                flex_length_cter = 1

            elif loop_length > 12:
                flex_len = int((loop_length/2) - 4)
                flex_length_nter = flex_len
                flex_length_cter = flex_len

            else:
                flex_length_nter = 2
                flex_length_cter = 2


            seq_overhang = pre_flank_seq + seq + post_flank_seq
            nter_overlap_length = len(pre_flank_seq)
            cter_overlap_length = len(post_flank_seq)

            frag_pose = rosetta.pose_from_sequence(seq_overhang,self.res_type, auto_termini=False)

            mover = CCDEndsGraftMover(start_res, end_res, frag_pose, nter_overlap_length, cter_overlap_length)

            mover.set_insert_flexibility(flex_length_nter,flex_length_cter)

            mover.apply(self.scaffold_pose)

            # Give grafted residues correct chain and numbering info

            for ii in range(loop_length):
                res = start_res + 1 + ii
                pdb_res = anchors[0] + 1 + ii
                self.scaffold_pose.pdb_info().set_resinfo(res,chain,pdb_res)

            # Needed for updated information to be accessible
            self.scaffold_pose.pdb_info().obsolete(False)

            # Setup loop object for later refinement
            loop_begin = self.scaffold_pose.pdb_info().pdb2pose(chain, anchors[0]) + 1
            loop_end = self.scaffold_pose.pdb_info().pdb2pose(chain,anchors[1]) - 1

            loop = rosetta.Loop(loop_begin,loop_end,(loop_begin + loop_end)/2)

        return loop
Example #11
0
    def __init__(self, pdb, centroid=False, pdb_file='', frag=False, nine_mer=False, local=False, local_size=3,
                 full=False, rosetta_refinement=False):
        """ :param pdb: :type string: pdb ID of the protein to be folded
            :param centroid: :type boolean: Option for use of centroid model
        """
        self.loops = 0                                    # Stores generation for which energy score was last calculated
        self.scores = {}                                  # Dictionary container for current gen genomes/scores
        self.scores_list = []                             # List container of current gen scores for search
        self.gen_added = 0                                # Last gen in which a point was added to novelty archive
        self.threshold = 10                               # Novelty threshold for which point is added to archive
        self.acceptance_threshold = 100                   # Novelty threshold for which move is accepted automatically
        self.num_added = 0                                # Number of points added to novelty archive
        self.switch = False                               # All atom switch
        self.temperature = 5                              # Monte Carlo temperature
        self.mover_range = 10                             # +-range of the angle in degrees in which mover moves residue
        self.local_size = local_size                      # For local mover, size of fragment to move
        self.local = local                                # Whether to use local mover
        self.novelty_archive = deque()                    # Initialize novelty archive
        self.centroid = centroid                          # If true use centroid scoring
        self.last_lowest = 0                              # For use in novelty loop
        self.last_lowest_10 = 0                           # For use in clear main loop
        self.frag = frag                                  # If true use frag mover
        self.rosetta_refinement = rosetta_refinement      # If true refine rosetta fold

        # Rosetta inits
        rosetta.init()                                    # Initialize rosetta libraries
        pose_native = pose_from_rcsb(pdb)                 # Create rosetta pose of natively folded protein from pdb file
        sequence = pose_native.sequence()                 # Get sequence of protein
        self.scorefxn = rosetta.get_fa_scorefxn()         # Create the rosetta energy score function for all atom
        
        if pdb_file != '':
            self.pose = rosetta.pose_from_pdb(pdb_file)   # If a starting pdb is given search from this pose
        elif rosetta_refinement:                          # If rosetta refinement, start from fastrelax structure
            self.pose = rosetta.pose_from_sequence(sequence)
            relax = rosetta.FastRelax()
            relax.set_scorefxn(self.scorefxn)
            relax.apply(self.pose)
        else:
            self.pose = rosetta.pose_from_sequence(sequence)  # Create the rosetta pose that will be manipulated
            
        if centroid:                                      # Switch pose to centroid if centroid option is true
            switch = rosetta.SwitchResidueTypeSetMover("centroid")
            switch.apply(self.pose)
        self.c_size = len(sequence)*2                     # Number of residues * 2 (phi and psi for each residue)
        self.native_energy = self.scorefxn(pose_native)   # Energy of the natively folded protein
        
        if centroid:                                      # Switch rosetta score function if centroid
            self.scorefxn = rosetta.create_score_function('score3')
        self.conformation = []
        
        i = 1
        while i <= len(sequence):
            self.conformation.append(self.pose.phi(i))
            self.conformation.append(self.pose.psi(i))
            i += 1

        self.mc_energy = self.scorefxn(self.pose) + 500   # Energy to be used as minimal criteria
        self.lowest = self.scorefxn(self.pose)            # Lowest energy in archive
        
        if frag:
            if nine_mer:
                fragset = rosetta.ConstantLengthFragSet(9)
                fragset.read_fragment_file("aat000_09_05-1.200_v1_3")
            else:
                fragset = rosetta.ConstantLengthFragSet(3)
                fragset.read_fragment_file("aat000_03_05-1.200_v1_3")
            movemap = rosetta.MoveMap()
            movemap.set_bb(True)
            self.mover_3mer = rosetta.ClassicFragmentMover(fragset, movemap)

        if local:                                         # For local, initialize na with appropriate number of deques
            self.novelty_archive = [deque() for i in range(self.c_size/2/self.local_size)]

        self.full = full                                  # If true use full mover
#!/usr/bin/env python
# :noTabs=true:

import rosetta

rosetta.init()

pose = rosetta.pose_from_sequence('EVAAAVAT')

pymol = rosetta.PyMOL_Mover()

pymol.apply(pose)

scorefxn = rosetta.get_fa_scorefxn(
)  #  rosetta.create_score_function('standard')
scorefxn(pose)

pymol.send_energy(pose)
pymol.send_energy(pose, label=True)

pymol.send_colors(pose, {}, default_color="orange")
colors = {2: "red", 5: "white"}
pymol.send_colors(pose, colors, default_color="blue")

pymol.label_energy(pose, "fa_atr")

pymol.send_hbonds(pose)
pymol.send_ss(pose)
pymol.send_polars(pose)

mm = rosetta.MoveMap()
Example #13
0
initialize_rosetta()

# create pose object, assign info object, and send pose to pymol
native_pose = load_pose( "/Users/Research/pyrosetta_dir/structures_from_jazz/3ay4_Fc_FcgRIIIa/fresh_start/project_structs/lowest_E_double_pack_and_min_only_native_crystal_struct_3ay4_Fc_FcgRIII.pdb" )
native_pose.pdb_info().name( "native_pose" )
info = native_pose.pdb_info()
#pmm.apply( native_pose )

# instantiate full atom score function and score pose
sf = get_fa_scorefxn()
nat_E = sf( native_pose )

# create some constant data
AA = 'ALA'
PACK_RADIUS = 5.0
ALA_pose = pose_from_sequence( "AAA" )
nat_interface_E = get_interface_score( 2, sf, native_pose )
nat_nhbonds = get_hbonds( native_pose ).nhbonds()


# insantiate lists for data (will be put into pandas dataframe)
orig_AA = []
pose_position = []
pdb_position = []
pdb_chain = []
within_10A_of_Fc_glycan_res = []
within_10A_of_FcR_interface = []
mut_E = []
native_E = []
ddG = []
mut_E_res = []
Example #14
0
## @brief        binaries on windows.
## @author Sergey Lyskov

import rosetta
from rosetta import *

rosetta.init()
print version()

pose = pose_from_pdb("test/data/test_in.pdb")

scorefxn = getScoreFunction()
scorefxn(pose)

pose2 = Pose()
make_pose_from_sequence(pose2, "ARNDCEQGHILKMFPSTWYV", 'fa_standard')

scorefxn = getScoreFunction()
scorefxn(pose2)

pose3 = Pose()
make_pose_from_sequence(pose3, "DSEEKFLRRIGRFGYGYGPYE", 'centroid')

# Creating standard centroid score function and scoring
scorefxn = create_score_function('score3')
scorefxn(pose3)

pose_fs = rosetta.pose_from_sequence("DSEEKFLRRIGRFGYGYGPYE")
pose_fs.delete_polymer_residue(
    2)  # Testing that attached PDB info have right size...