Пример #1
0
def add_com_to_pdb(mhc_com, vtcr_com, sample_structure):
    """
    Function to add pseudoatoms at MHC-CoM, TCR-CoM, and XYZ axise to the output PDB file
    """
    # mhc_com
    mhc_com_chain = "X"
    sample_structure.add(Chain.Chain(mhc_com_chain))
    res_id = (" ", 1, " ")
    new_residue = Residue.Residue(res_id, "MCM", " ")
    new_atom = Atom.Atom("C", mhc_com, 0, 0.0, " ", "C", 1, "C")
    new_residue.add(new_atom)
    sample_structure.child_dict[mhc_com_chain].add(new_residue)
    # tcr com
    tcr_com_chain = "Y"
    sample_structure.add(Chain.Chain(tcr_com_chain))
    res_id = (" ", 1, " ")
    new_residue = Residue.Residue(res_id, "TCM", " ")
    new_atom = Atom.Atom("C", vtcr_com, 0, 0.0, " ", "C", 1, "C")
    new_residue.add(new_atom)
    sample_structure.child_dict[tcr_com_chain].add(new_residue)
    # X,Y,Z atoms
    pos = [[50, 0, 0], [0, 50, 0], [0, 0, 50]]
    resn = ["X", "Y", "Z"]
    xyz_chain = "Z"
    sample_structure.add(Chain.Chain(xyz_chain))
    for i in [0, 1, 2]:
        res_id = (" ", i + 1, " ")
        new_residue = Residue.Residue(res_id, resn[i], " ")
        new_atom = Atom.Atom("O", pos[i], 0, 0.0, " ", "O", 1, "O")
        new_residue.add(new_atom)
        sample_structure.child_dict[xyz_chain].add(new_residue)
    return sample_structure
def makeCys(segID, N, CA, C, O, geo):
    '''Creates a Cysteine residue'''
    ##R-Group
    CA_CB_length = geo.CA_CB_length
    C_CA_CB_angle = geo.C_CA_CB_angle
    N_C_CA_CB_diangle = geo.N_C_CA_CB_diangle

    CB_SG_length = geo.CB_SG_length
    CA_CB_SG_angle = geo.CA_CB_SG_angle
    N_CA_CB_SG_diangle = geo.N_CA_CB_SG_diangle

    carbon_b = calculateCoordinates(N, C, CA, CA_CB_length, C_CA_CB_angle,
                                    N_C_CA_CB_diangle)
    CB = Atom("CB", carbon_b, 0.0, 1.0, " ", " CB", 0, "C")
    sulfur_g = calculateCoordinates(N, CA, CB, CB_SG_length, CA_CB_SG_angle,
                                    N_CA_CB_SG_diangle)
    SG = Atom("SG", sulfur_g, 0.0, 1.0, " ", " SG", 0, "S")

    ##Create Residue Data Structure
    res = Residue((' ', segID, ' '), "CYS", '    ')
    res.add(N)
    res.add(CA)
    res.add(C)
    res.add(O)
    res.add(CB)
    res.add(SG)
    return res
def makeSer(segID, N, CA, C, O, geo):
    '''Creates a Serine residue'''
    ##R-Group
    CA_CB_length = geo.CA_CB_length
    C_CA_CB_angle = geo.C_CA_CB_angle
    N_C_CA_CB_diangle = geo.N_C_CA_CB_diangle

    CB_OG_length = geo.CB_OG_length
    CA_CB_OG_angle = geo.CA_CB_OG_angle
    N_CA_CB_OG_diangle = geo.N_CA_CB_OG_diangle

    carbon_b = calculateCoordinates(N, C, CA, CA_CB_length, C_CA_CB_angle,
                                    N_C_CA_CB_diangle)
    CB = Atom("CB", carbon_b, 0.0, 1.0, " ", " CB", 0, "C")
    oxygen_g = calculateCoordinates(N, CA, CB, CB_OG_length, CA_CB_OG_angle,
                                    N_CA_CB_OG_diangle)
    OG = Atom("OG", oxygen_g, 0.0, 1.0, " ", " OG", 0, "O")

    ##Create Reside Data Structure
    res = Residue((' ', segID, ' '), "SER", '    ')
    res.add(N)
    res.add(CA)
    res.add(C)
    res.add(O)
    res.add(CB)
    res.add(OG)

    ##print res
    return res
def makeThr(segID, N, CA, C, O, geo):
    '''Creates a Threonine residue'''
    ##R-Group
    CA_CB_length = geo.CA_CB_length
    C_CA_CB_angle = geo.C_CA_CB_angle
    N_C_CA_CB_diangle = geo.N_C_CA_CB_diangle

    CB_OG1_length = geo.CB_OG1_length
    CA_CB_OG1_angle = geo.CA_CB_OG1_angle
    N_CA_CB_OG1_diangle = geo.N_CA_CB_OG1_diangle

    CB_CG2_length = geo.CB_CG2_length
    CA_CB_CG2_angle = geo.CA_CB_CG2_angle
    N_CA_CB_CG2_diangle = geo.N_CA_CB_CG2_diangle

    carbon_b = calculateCoordinates(N, C, CA, CA_CB_length, C_CA_CB_angle,
                                    N_C_CA_CB_diangle)
    CB = Atom("CB", carbon_b, 0.0, 1.0, " ", " CB", 0, "C")
    oxygen_g1 = calculateCoordinates(N, CA, CB, CB_OG1_length, CA_CB_OG1_angle,
                                     N_CA_CB_OG1_diangle)
    OG1 = Atom("OG1", oxygen_g1, 0.0, 1.0, " ", " OG1", 0, "O")
    carbon_g2 = calculateCoordinates(N, CA, CB, CB_CG2_length, CA_CB_CG2_angle,
                                     N_CA_CB_CG2_diangle)
    CG2 = Atom("CG2", carbon_g2, 0.0, 1.0, " ", " CG2", 0, "C")

    ##Create Residue Data Structure
    res = Residue((' ', segID, ' '), "THR", '    ')
    res.add(N)
    res.add(CA)
    res.add(C)
    res.add(O)
    res.add(CB)
    res.add(OG1)
    res.add(CG2)
    return res
Пример #5
0
def calc_rms(ref_coords, alt_coords):
    # print ref_coords, alt_coords
    assert( len(ref_coords) == len(alt_coords) )
    if pyRMSD:
        calculator = pyRMSD.RMSDCalculator.RMSDCalculator(pyrmsd_calc, np.array([ref_coords, alt_coords]))
        return calculator.pairwiseRMSDMatrix()[0]
    else:
        super_imposer = Bio.PDB.Superimposer()
        ref_atoms = [Atom.Atom('CA', coords, 0.0, 1.0, '', ' CA ', i+1, element='C') for i, coords in enumerate(ref_coords)]
        alt_atoms = [Atom.Atom('CA', coords, 0.0, 1.0, '', ' CA ', i+1, element='C') for i, coords in enumerate(alt_coords)]
        super_imposer.set_atoms(ref_atoms, alt_atoms)
        return super_imposer.rms
Пример #6
0
def place_line(element, position1, position2, resname, chain):
    global runtime_mark_id
    res_temp = Residue((" ", runtime_mark_id, " "), resname, " ")
    runtime_mark_id += 1

    atom_temp1 = Atom("X1", position1, 0.0, 1, " ", "X", runtime_mark_id,
                      element)
    atom_temp2 = Atom("X2", position2, 0.0, 1, " ", "X", runtime_mark_id,
                      element)
    res_temp.add(atom_temp1)
    res_temp.add(atom_temp2)
    chain.add(res_temp)
def makeGln(segID, N, CA, C, O, geo):
    '''Creates a Glutamine residue'''
    ##R-Group
    CA_CB_length = geo.CA_CB_length
    C_CA_CB_angle = geo.C_CA_CB_angle
    N_C_CA_CB_diangle = geo.N_C_CA_CB_diangle

    CB_CG_length = geo.CB_CG_length
    CA_CB_CG_angle = geo.CA_CB_CG_angle
    N_CA_CB_CG_diangle = geo.N_CA_CB_CG_diangle

    CG_CD_length = geo.CG_CD_length
    CB_CG_CD_angle = geo.CB_CG_CD_angle
    CA_CB_CG_CD_diangle = geo.CA_CB_CG_CD_diangle

    CD_OE1_length = geo.CD_OE1_length
    CG_CD_OE1_angle = geo.CG_CD_OE1_angle
    CB_CG_CD_OE1_diangle = geo.CB_CG_CD_OE1_diangle

    CD_NE2_length = geo.CD_NE2_length
    CG_CD_NE2_angle = geo.CG_CD_NE2_angle
    CB_CG_CD_NE2_diangle = geo.CB_CG_CD_NE2_diangle

    carbon_b = calculateCoordinates(N, C, CA, CA_CB_length, C_CA_CB_angle,
                                    N_C_CA_CB_diangle)
    CB = Atom("CB", carbon_b, 0.0, 1.0, " ", " CB", 0, "C")
    carbon_g = calculateCoordinates(N, CA, CB, CB_CG_length, CA_CB_CG_angle,
                                    N_CA_CB_CG_diangle)
    CG = Atom("CG", carbon_g, 0.0, 1.0, " ", " CG", 0, "C")
    carbon_d = calculateCoordinates(CA, CB, CG, CG_CD_length, CB_CG_CD_angle,
                                    CA_CB_CG_CD_diangle)
    CD = Atom("CD", carbon_d, 0.0, 1.0, " ", " CD", 0, "C")
    oxygen_e1 = calculateCoordinates(CB, CG, CD, CD_OE1_length,
                                     CG_CD_OE1_angle, CB_CG_CD_OE1_diangle)
    OE1 = Atom("OE1", oxygen_e1, 0.0, 1.0, " ", " OE1", 0, "O")
    nitrogen_e2 = calculateCoordinates(CB, CG, CD, CD_NE2_length,
                                       CG_CD_NE2_angle, CB_CG_CD_NE2_diangle)
    NE2 = Atom("NE2", nitrogen_e2, 0.0, 1.0, " ", " NE2", 0, "N")

    ##Create Residue DS
    res = Residue((' ', segID, ' '), "GLN", '    ')

    res.add(N)
    res.add(CA)
    res.add(C)
    res.add(O)
    res.add(CB)
    res.add(CG)
    res.add(CD)
    res.add(OE1)
    res.add(NE2)
    return res
def makeLys(segID, N, CA, C, O, geo):
    '''Creates a Lysine residue'''
    ##R-Group
    CA_CB_length = geo.CA_CB_length
    C_CA_CB_angle = geo.C_CA_CB_angle
    N_C_CA_CB_diangle = geo.N_C_CA_CB_diangle

    CB_CG_length = geo.CB_CG_length
    CA_CB_CG_angle = geo.CA_CB_CG_angle
    N_CA_CB_CG_diangle = geo.N_CA_CB_CG_diangle

    CG_CD_length = geo.CG_CD_length
    CB_CG_CD_angle = geo.CB_CG_CD_angle
    CA_CB_CG_CD_diangle = geo.CA_CB_CG_CD_diangle

    CD_CE_length = geo.CD_CE_length
    CG_CD_CE_angle = geo.CG_CD_CE_angle
    CB_CG_CD_CE_diangle = geo.CB_CG_CD_CE_diangle

    CE_NZ_length = geo.CE_NZ_length
    CD_CE_NZ_angle = geo.CD_CE_NZ_angle
    CG_CD_CE_NZ_diangle = geo.CG_CD_CE_NZ_diangle

    carbon_b = calculateCoordinates(N, C, CA, CA_CB_length, C_CA_CB_angle,
                                    N_C_CA_CB_diangle)
    CB = Atom("CB", carbon_b, 0.0, 1.0, " ", " CB", 0, "C")
    carbon_g = calculateCoordinates(N, CA, CB, CB_CG_length, CA_CB_CG_angle,
                                    N_CA_CB_CG_diangle)
    CG = Atom("CG", carbon_g, 0.0, 1.0, " ", " CG", 0, "C")
    carbon_d = calculateCoordinates(CA, CB, CG, CG_CD_length, CB_CG_CD_angle,
                                    CA_CB_CG_CD_diangle)
    CD = Atom("CD", carbon_d, 0.0, 1.0, " ", " CD", 0, "C")
    carbon_e = calculateCoordinates(CB, CG, CD, CD_CE_length, CG_CD_CE_angle,
                                    CB_CG_CD_CE_diangle)
    CE = Atom("CE", carbon_e, 0.0, 1.0, " ", " CE", 0, "C")
    nitrogen_z = calculateCoordinates(CG, CD, CE, CE_NZ_length, CD_CE_NZ_angle,
                                      CG_CD_CE_NZ_diangle)
    NZ = Atom("NZ", nitrogen_z, 0.0, 1.0, " ", " NZ", 0, "N")

    ##Create Residue Data Structure
    res = Residue((' ', segID, ' '), "LYS", '    ')
    res.add(N)
    res.add(CA)
    res.add(C)
    res.add(O)
    res.add(CB)
    res.add(CG)
    res.add(CD)
    res.add(CE)
    res.add(NZ)
    return res
 def construct_initial_atoms(self):
     """Finds positions in between the O3' and C5'"""
     vec = self.c5.coord - self.o3.coord
     coord_p = self.o3.coord + vec * 0.333333
     coord_o5 = self.o3.coord + vec * 0.666666
     self.p = Atom.Atom("P", coord_p, 0.0, 1.0, ' ', " P", 1, element="P")
     self.o5 = Atom.Atom("O5'",
                         coord_o5,
                         0.0,
                         1.0,
                         ' ',
                         " O5'",
                         1,
                         element="O")
     self.r2.add(self.p)
     self.r2.add(self.o5)
Пример #10
0
    def generate_plus_atom_matches(self, next_pattern_atom: Atom,
                                   inspecting_atoms: list,
                                   distance_error_coefficient: float) -> list:
        pattern_atoms = self.matched_pattern_atoms + [next_pattern_atom]
        pattern_atoms_distances = [
            numpy.linalg.norm(atom.coord - next_pattern_atom.coord)
            for atom in self.matched_pattern_atoms
        ]

        matches = list()
        for atom in inspecting_atoms:
            # skip atom that is already presented in matched atoms
            if atom in self.matched_inspecting_atoms:
                continue

            # skip non-compatible atoms
            if atom.get_id()[0] != next_pattern_atom.get_id()[0]:
                continue

            # skip atoms if they do not fit by distance
            all_distances_are_acceptable = True
            for atom_index in range(len(pattern_atoms_distances)):
                acceptable_distance = pattern_atoms_distances[atom_index]
                if not distance_is_acceptable(
                        self.matched_inspecting_atoms[atom_index], atom,
                        acceptable_distance, distance_error_coefficient):
                    all_distances_are_acceptable = False
                    break

            if all_distances_are_acceptable:
                matches.append(
                    Match(pattern_atoms,
                          self.matched_inspecting_atoms + [atom]))
        return matches
Пример #11
0
    def test_pdbio_write_custom_residue(self):
        """Write a chainless residue using PDBIO."""
        res = Residue.Residue((" ", 1, " "), "DUM", "")
        atm = Atom.Atom("CA", [0.1, 0.1, 0.1], 1.0, 1.0, " ", "CA", 1, "C")
        res.add(atm)

        # Ensure that set_structure doesn't alter parent
        parent = res.parent

        # Write full model to temp file
        self.io.set_structure(res)

        self.assertIs(parent, res.parent)
        filenumber, filename = tempfile.mkstemp()
        os.close(filenumber)
        try:
            self.io.save(filename)
            struct2 = self.parser.get_structure("res", filename)
            latoms = list(struct2.get_atoms())
            self.assertEqual(len(latoms), 1)
            self.assertEqual(latoms[0].name, "CA")
            self.assertEqual(latoms[0].parent.resname, "DUM")
            self.assertEqual(latoms[0].parent.parent.id, "A")
        finally:
            os.remove(filename)
Пример #12
0
def check_clash(str_name, v=False):
    """check_clash, fract of clashes!

        if zero contacts then error -> fix ->

        Problem, contacts, str_name: 311 505 na-prot_13536.pdb
        Sterical clashes  0.615841584158

        c is counter
        """
    if v: print('fn:', str_name)
    structure = open(str_name)
    #model = structure[0]
    atoms_A = []
    atoms_B = []
    for line in structure.readlines():
        if line[:4] == "ATOM":
            #print line
            at_nam = line[12:16].strip()
            coor = [float(line[30:38]), float(line[38:46]), float(line[46:54])]
            at = Atom.Atom(at_nam, coor, 0.0, 1.0, ' ', at_nam, 1, at_nam[0])
            if line[21] == "A":
                atoms_A.append(at)
            elif line[21] == "B":
                atoms_B.append(at)
            else:
                pass
    #atoms_B = Selection.unfold_entities(structure[0]['B'], 'A')
    #print len(atoms_A), len(atoms_B)
    if len(atoms_A) > len(atoms_B):
        less = atoms_B
        more = atoms_A
    else:
        less = atoms_A
        more = atoms_B
    problem = 0
    contacts = 0
    ns = NeighborSearch(more)
    for at in less:
        neighbors = ns.search(array(at.get_coord()), 2.0, 'A')
        if neighbors != []:
            problem += 1
            contacts += 1
        else:
            neighbors1 = ns.search(array(at.get_coord()), 4.0, 'A')
            if neighbors1 != []:
                contacts += 1
    if v:
        print('problem:', float(problem))
        print('contacts:', float(contacts))
    try:
        fract = float(problem) / float(contacts)
    except ZeroDivisionError:
        fract = problem  # or skip this structure
        if v: print('ZeroDivison -- skip:', problem, contacts, str_name)
        return fract

    #print 'Contacts, str_name:', problem, contacts, str_name, "Sterical clashes ", fract
    return fract
Пример #13
0
def create_cobalt(v):
    global runtime_mark_id
    #res_co = Residue((" ", runtime_mark_id, " "), "Co3", " ")
    co = Atom("CO", v, 0.0, 1, " ", "X", runtime_mark_id, "CO")
    #runtime_mark_id += 1
    #res_co.add(co)
    #new_chain_mark.add(res_co)
    return co
Пример #14
0
def makeHis(N, CA, CB, chi1, chi2):
    '''Creates a Histidine residue'''
    CB_CG_length = 1.49
    CA_CB_CG_angle = 113.74
    N_CA_CB_CG_diangle = chi1

    CG_ND1_length = 1.38
    CB_CG_ND1_angle = 122.85
    CA_CB_CG_ND1_diangle = chi2

    CG_CD2_length = 1.35
    CB_CG_CD2_angle = 130.61
    CA_CB_CG_CD2_diangle = 180.0 + CA_CB_CG_ND1_diangle

    ND1_CE1_length = 1.32
    CG_ND1_CE1_angle = 108.5
    CB_CG_ND1_CE1_diangle = 180.0

    CD2_NE2_length = 1.35
    CG_CD2_NE2_angle = 108.5
    CB_CG_CD2_NE2_diangle = 180.0

    carbon_g = calculateCoordinates(N, CA, CB, CB_CG_length, CA_CB_CG_angle,
                                    N_CA_CB_CG_diangle)
    CG = Atom("CG", carbon_g, 0.0, 1.0, " ", " CG", 0, "C")
    nitrogen_d1 = calculateCoordinates(CA, CB, CG, CG_ND1_length,
                                       CB_CG_ND1_angle, CA_CB_CG_ND1_diangle)
    ND1 = Atom("ND1", nitrogen_d1, 0.0, 1.0, " ", " ND1", 0, "N")
    carbon_d2 = calculateCoordinates(CA, CB, CG, CG_CD2_length,
                                     CB_CG_CD2_angle, CA_CB_CG_CD2_diangle)
    CD2 = Atom("CD2", carbon_d2, 0.0, 1.0, " ", " CD2", 0, "C")
    carbon_e1 = calculateCoordinates(CB, CG, ND1, ND1_CE1_length,
                                     CG_ND1_CE1_angle, CB_CG_ND1_CE1_diangle)
    CE1 = Atom("CE1", carbon_e1, 0.0, 1.0, " ", " CE1", 0, "C")
    nitrogen_e2 = calculateCoordinates(CB, CG, CD2, CD2_NE2_length,
                                       CG_CD2_NE2_angle, CB_CG_CD2_NE2_diangle)
    NE2 = Atom("NE2", nitrogen_e2, 0.0, 1.0, " ", " OE1", 0, "N")
    _dict = {
        'cg': (carbon_g, CG),
        'nd1': (nitrogen_d1, ND1),
        'cd2': (carbon_d2, CD2),
        'ce1': (carbon_e1, CE1),
        'ne2': (nitrogen_e2, NE2)
    }

    return _dict
Пример #15
0
def place_atom(element, position, resname, chain):
    global runtime_mark_id
    res_temp = Residue((" ", runtime_mark_id, " "), resname, " ")
    runtime_mark_id += 1

    atom_temp = Atom("X", position, 0.0, 1, " ", "X", runtime_mark_id, element)
    res_temp.add(atom_temp)
    chain.add(res_temp)
def makeIle(segID, N, CA, C, O, geo):
    '''Creates an Isoleucine residue'''
    ##R-group
    CA_CB_length = geo.CA_CB_length
    C_CA_CB_angle = geo.C_CA_CB_angle
    N_C_CA_CB_diangle = geo.N_C_CA_CB_diangle

    CB_CG1_length = geo.CB_CG1_length
    CA_CB_CG1_angle = geo.CA_CB_CG1_angle
    N_CA_CB_CG1_diangle = geo.N_CA_CB_CG1_diangle

    CB_CG2_length = geo.CB_CG2_length
    CA_CB_CG2_angle = geo.CA_CB_CG2_angle
    N_CA_CB_CG2_diangle = geo.N_CA_CB_CG2_diangle

    CG1_CD1_length = geo.CG1_CD1_length
    CB_CG1_CD1_angle = geo.CB_CG1_CD1_angle
    CA_CB_CG1_CD1_diangle = geo.CA_CB_CG1_CD1_diangle

    carbon_b = calculateCoordinates(N, C, CA, CA_CB_length, C_CA_CB_angle,
                                    N_C_CA_CB_diangle)
    CB = Atom("CB", carbon_b, 0.0, 1.0, " ", " CB", 0, "C")
    carbon_g1 = calculateCoordinates(N, CA, CB, CB_CG1_length, CA_CB_CG1_angle,
                                     N_CA_CB_CG1_diangle)
    CG1 = Atom("CG1", carbon_g1, 0.0, 1.0, " ", " CG1", 0, "C")
    carbon_g2 = calculateCoordinates(N, CA, CB, CB_CG2_length, CA_CB_CG2_angle,
                                     N_CA_CB_CG2_diangle)
    CG2 = Atom("CG2", carbon_g2, 0.0, 1.0, " ", " CG2", 0, "C")
    carbon_d1 = calculateCoordinates(CA, CB, CG1, CG1_CD1_length,
                                     CB_CG1_CD1_angle, CA_CB_CG1_CD1_diangle)
    CD1 = Atom("CD1", carbon_d1, 0.0, 1.0, " ", " CD1", 0, "C")

    ##Create Residue Data Structure
    res = Residue((' ', segID, ' '), "ILE", '    ')
    res.add(N)
    res.add(CA)
    res.add(C)
    res.add(O)
    res.add(CB)
    res.add(CG1)
    res.add(CG2)
    res.add(CD1)
    return res
def makeLeu(segID, N, CA, C, O, geo):
    '''Creates a Leucine residue'''
    ##R-Group
    CA_CB_length = geo.CA_CB_length
    C_CA_CB_angle = geo.C_CA_CB_angle
    N_C_CA_CB_diangle = geo.N_C_CA_CB_diangle

    CB_CG_length = geo.CB_CG_length
    CA_CB_CG_angle = geo.CA_CB_CG_angle
    N_CA_CB_CG_diangle = geo.N_CA_CB_CG_diangle

    CG_CD1_length = geo.CG_CD1_length
    CB_CG_CD1_angle = geo.CB_CG_CD1_angle
    CA_CB_CG_CD1_diangle = geo.CA_CB_CG_CD1_diangle

    CG_CD2_length = geo.CG_CD2_length
    CB_CG_CD2_angle = geo.CB_CG_CD2_angle
    CA_CB_CG_CD2_diangle = geo.CA_CB_CG_CD2_diangle

    carbon_b = calculateCoordinates(N, C, CA, CA_CB_length, C_CA_CB_angle,
                                    N_C_CA_CB_diangle)
    CB = Atom("CB", carbon_b, 0.0, 1.0, " ", " CB", 0, "C")
    carbon_g1 = calculateCoordinates(N, CA, CB, CB_CG_length, CA_CB_CG_angle,
                                     N_CA_CB_CG_diangle)
    CG = Atom("CG", carbon_g1, 0.0, 1.0, " ", " CG", 0, "C")
    carbon_d1 = calculateCoordinates(CA, CB, CG, CG_CD1_length,
                                     CB_CG_CD1_angle, CA_CB_CG_CD1_diangle)
    CD1 = Atom("CD1", carbon_d1, 0.0, 1.0, " ", " CD1", 0, "C")
    carbon_d2 = calculateCoordinates(CA, CB, CG, CG_CD2_length,
                                     CB_CG_CD2_angle, CA_CB_CG_CD2_diangle)
    CD2 = Atom("CD2", carbon_d2, 0.0, 1.0, " ", " CD2", 0, "C")

    ##Create Residue Data Structure
    res = Residue((' ', segID, ' '), "LEU", '    ')
    res.add(N)
    res.add(CA)
    res.add(C)
    res.add(O)
    res.add(CB)
    res.add(CG)
    res.add(CD1)
    res.add(CD2)
    return res
def makeAsn(segID, N, CA, C, O, geo):
    '''Creates an Asparagine residue'''
    ##R-Group
    CA_CB_length = geo.CA_CB_length
    C_CA_CB_angle = geo.C_CA_CB_angle
    N_C_CA_CB_diangle = geo.N_C_CA_CB_diangle

    CB_CG_length = geo.CB_CG_length
    CA_CB_CG_angle = geo.CA_CB_CG_angle
    N_CA_CB_CG_diangle = geo.N_CA_CB_CG_diangle

    CG_OD1_length = geo.CG_OD1_length
    CB_CG_OD1_angle = geo.CB_CG_OD1_angle
    CA_CB_CG_OD1_diangle = geo.CA_CB_CG_OD1_diangle

    CG_ND2_length = geo.CG_ND2_length
    CB_CG_ND2_angle = geo.CB_CG_ND2_angle
    CA_CB_CG_ND2_diangle = geo.CA_CB_CG_ND2_diangle

    carbon_b = calculateCoordinates(N, C, CA, CA_CB_length, C_CA_CB_angle,
                                    N_C_CA_CB_diangle)
    CB = Atom("CB", carbon_b, 0.0, 1.0, " ", " CB", 0, "C")
    carbon_g = calculateCoordinates(N, CA, CB, CB_CG_length, CA_CB_CG_angle,
                                    N_CA_CB_CG_diangle)
    CG = Atom("CG", carbon_g, 0.0, 1.0, " ", " CG", 0, "C")
    oxygen_d1 = calculateCoordinates(CA, CB, CG, CG_OD1_length,
                                     CB_CG_OD1_angle, CA_CB_CG_OD1_diangle)
    OD1 = Atom("OD1", oxygen_d1, 0.0, 1.0, " ", " OD1", 0, "O")
    nitrogen_d2 = calculateCoordinates(CA, CB, CG, CG_ND2_length,
                                       CB_CG_ND2_angle, CA_CB_CG_ND2_diangle)
    ND2 = Atom("ND2", nitrogen_d2, 0.0, 1.0, " ", " ND2", 0, "N")
    res = Residue((' ', segID, ' '), "ASN", '    ')

    ##Create Residue Data Structure
    res.add(N)
    res.add(CA)
    res.add(C)
    res.add(O)
    res.add(CB)
    res.add(CG)
    res.add(OD1)
    res.add(ND2)
    return res
def makeMet(segID, N, CA, C, O, geo):
    '''Creates a Methionine residue'''
    ##R-Group
    CA_CB_length = geo.CA_CB_length
    C_CA_CB_angle = geo.C_CA_CB_angle
    N_C_CA_CB_diangle = geo.N_C_CA_CB_diangle

    CB_CG_length = geo.CB_CG_length
    CA_CB_CG_angle = geo.CA_CB_CG_angle
    N_CA_CB_CG_diangle = geo.N_CA_CB_CG_diangle

    CG_SD_length = geo.CG_SD_length
    CB_CG_SD_angle = geo.CB_CG_SD_angle
    CA_CB_CG_SD_diangle = geo.CA_CB_CG_SD_diangle

    SD_CE_length = geo.SD_CE_length
    CG_SD_CE_angle = geo.CG_SD_CE_angle
    CB_CG_SD_CE_diangle = geo.CB_CG_SD_CE_diangle

    carbon_b = calculateCoordinates(N, C, CA, CA_CB_length, C_CA_CB_angle,
                                    N_C_CA_CB_diangle)
    CB = Atom("CB", carbon_b, 0.0, 1.0, " ", " CB", 0, "C")
    carbon_g = calculateCoordinates(N, CA, CB, CB_CG_length, CA_CB_CG_angle,
                                    N_CA_CB_CG_diangle)
    CG = Atom("CG", carbon_g, 0.0, 1.0, " ", " CG", 0, "C")
    sulfur_d = calculateCoordinates(CA, CB, CG, CG_SD_length, CB_CG_SD_angle,
                                    CA_CB_CG_SD_diangle)
    SD = Atom("SD", sulfur_d, 0.0, 1.0, " ", " SD", 0, "S")
    carbon_e = calculateCoordinates(CB, CG, SD, SD_CE_length, CG_SD_CE_angle,
                                    CB_CG_SD_CE_diangle)
    CE = Atom("CE", carbon_e, 0.0, 1.0, " ", " CE", 0, "C")

    ##Create Residue Data Structure
    res = Residue((' ', segID, ' '), "MET", '    ')
    res.add(N)
    res.add(CA)
    res.add(C)
    res.add(O)
    res.add(CB)
    res.add(CG)
    res.add(SD)
    res.add(CE)
    return res
Пример #20
0
def makeSer(N, CA, CB, chi1):
    _dict = {}
    CB_OG_length = 1.417
    CA_CB_OG_angle = 110.773
    N_CA_CB_OG_diangle = chi1
    oxygen_g = calculateCoordinates(N, CA, CB, CB_OG_length, CA_CB_OG_angle,
                                    N_CA_CB_OG_diangle)
    OG = Atom("OG", oxygen_g, 0.0, 1.0, " ", " OG", 0, "O")
    _dict['og'] = (oxygen_g, OG)
    return _dict
 def create_atom(self, name, elem, coord):
     """Finds positions in between the O3' and C5'"""
     atom = Atom.Atom(name,
                      coord,
                      0.0,
                      1.0,
                      ' ',
                      " " + name,
                      1,
                      element=elem)
     return atom
def makeHis(segID, N, CA, C, O, geo):
    '''Creates a Histidine residue'''
    ##R-Group
    CA_CB_length = geo.CA_CB_length
    C_CA_CB_angle = geo.C_CA_CB_angle
    N_C_CA_CB_diangle = geo.N_C_CA_CB_diangle

    CB_CG_length = geo.CB_CG_length
    CA_CB_CG_angle = geo.CA_CB_CG_angle
    N_CA_CB_CG_diangle = geo.N_CA_CB_CG_diangle

    CG_ND1_length = geo.CG_ND1_length
    CB_CG_ND1_angle = geo.CB_CG_ND1_angle
    CA_CB_CG_ND1_diangle = geo.CA_CB_CG_ND1_diangle

    CG_CD2_length = geo.CG_CD2_length
    CB_CG_CD2_angle = geo.CB_CG_CD2_angle
    CA_CB_CG_CD2_diangle = geo.CA_CB_CG_CD2_diangle

    ND1_CE1_length = geo.ND1_CE1_length
    CG_ND1_CE1_angle = geo.CG_ND1_CE1_angle
    CB_CG_ND1_CE1_diangle = geo.CB_CG_ND1_CE1_diangle

    CD2_NE2_length = geo.CD2_NE2_length
    CG_CD2_NE2_angle = geo.CG_CD2_NE2_angle
    CB_CG_CD2_NE2_diangle = geo.CB_CG_CD2_NE2_diangle

    carbon_b = calculateCoordinates(N, C, CA, CA_CB_length, C_CA_CB_angle,
                                    N_C_CA_CB_diangle)
    CB = Atom("CB", carbon_b, 0.0, 1.0, " ", " CB", 0, "C")
    carbon_g = calculateCoordinates(N, CA, CB, CB_CG_length, CA_CB_CG_angle,
                                    N_CA_CB_CG_diangle)
    CG = Atom("CG", carbon_g, 0.0, 1.0, " ", " CG", 0, "C")
    nitrogen_d1 = calculateCoordinates(CA, CB, CG, CG_ND1_length,
                                       CB_CG_ND1_angle, CA_CB_CG_ND1_diangle)
    ND1 = Atom("ND1", nitrogen_d1, 0.0, 1.0, " ", " ND1", 0, "N")
    carbon_d2 = calculateCoordinates(CA, CB, CG, CG_CD2_length,
                                     CB_CG_CD2_angle, CA_CB_CG_CD2_diangle)
    CD2 = Atom("CD2", carbon_d2, 0.0, 1.0, " ", " CD2", 0, "C")
    carbon_e1 = calculateCoordinates(CB, CG, ND1, ND1_CE1_length,
                                     CG_ND1_CE1_angle, CB_CG_ND1_CE1_diangle)
    CE1 = Atom("CE1", carbon_e1, 0.0, 1.0, " ", " CE1", 0, "C")
    nitrogen_e2 = calculateCoordinates(CB, CG, CD2, CD2_NE2_length,
                                       CG_CD2_NE2_angle, CB_CG_CD2_NE2_diangle)
    NE2 = Atom("NE2", nitrogen_e2, 0.0, 1.0, " ", " NE2", 0, "N")

    ##Create Residue Data Structure
    res = Residue((' ', segID, ' '), "HIS", '    ')
    res.add(N)
    res.add(CA)
    res.add(C)
    res.add(O)
    res.add(CB)
    res.add(CG)
    res.add(ND1)
    res.add(CD2)
    res.add(CE1)
    res.add(NE2)
    return res
Пример #23
0
def place_atoms(atoms, element, resname, chain):
    global runtime_mark_id
    res_temp = Residue((" ", runtime_mark_id, " "), resname, " ")
    runtime_mark_id += 3

    n = 0
    for a in atoms:
        n += 1
        atom_temp = Atom("X" + str(n), a.get_coord(), 0.0, 1, " ", "X",
                         runtime_mark_id, element)
        res_temp.add(atom_temp)

    chain.add(res_temp)
Пример #24
0
 def test_assign_unknown_element(self):
     """Unknown element is assigned 'X'."""
     with warnings.catch_warnings():
         warnings.simplefilter("ignore", PDBConstructionWarning)
         a = Atom.Atom(
             "XE1",
             None,
             None,
             None,
             None,
             " XE1",
             None  # serial 5170 - 4CP4
         )
     self.assertEqual(a.element, "X")
def makePro(segID, N, CA, C, O, geo):
    '''Creates a Proline residue'''
    ##R-Group
    CA_CB_length = geo.CA_CB_length
    C_CA_CB_angle = geo.C_CA_CB_angle
    N_C_CA_CB_diangle = geo.N_C_CA_CB_diangle

    CB_CG_length = geo.CB_CG_length
    CA_CB_CG_angle = geo.CA_CB_CG_angle
    N_CA_CB_CG_diangle = geo.N_CA_CB_CG_diangle

    CG_CD_length = geo.CG_CD_length
    CB_CG_CD_angle = geo.CB_CG_CD_angle
    CA_CB_CG_CD_diangle = geo.CA_CB_CG_CD_diangle

    carbon_b = calculateCoordinates(N, C, CA, CA_CB_length, C_CA_CB_angle,
                                    N_C_CA_CB_diangle)
    CB = Atom("CB", carbon_b, 0.0, 1.0, " ", " CB", 0, "C")
    carbon_g = calculateCoordinates(N, CA, CB, CB_CG_length, CA_CB_CG_angle,
                                    N_CA_CB_CG_diangle)
    CG = Atom("CG", carbon_g, 0.0, 1.0, " ", " CG", 0, "C")
    carbon_d = calculateCoordinates(CA, CB, CG, CG_CD_length, CB_CG_CD_angle,
                                    CA_CB_CG_CD_diangle)
    CD = Atom("CD", carbon_d, 0.0, 1.0, " ", " CD", 0, "C")

    ##Create Residue Data Structure
    res = Residue((' ', segID, ' '), "PRO", '    ')

    res.add(N)
    res.add(CA)
    res.add(C)
    res.add(O)
    res.add(CB)
    res.add(CG)
    res.add(CD)

    return res
Пример #26
0
def add_residue_from_geo(structure, geo):
	resRef= getReferenceResidue(structure)
	AA=geo.residue_name
	segID= resRef.get_id()[1]
	segID+=1
	##geometry to bring together residue
	peptide_bond=geo.peptide_bond
	CA_C_N_angle=geo.CA_C_N_angle
	C_N_CA_angle=geo.C_N_CA_angle
	##Backbone Coordinages
	N_CA_C_angle=geo.N_CA_C_angle
	CA_N_length=geo.CA_N_length
	CA_C_length=geo.CA_C_length
	phi= geo.phi
	psi_im1=geo.psi_im1
	omega=geo.omega
	N_coord=calculateCoordinates(resRef['N'], resRef['CA'], resRef['C'], peptide_bond, CA_C_N_angle, psi_im1)
	N= Atom("N", N_coord, 0.0 , 1.0, " "," N", 0, "N")
	CA_coord=calculateCoordinates(resRef['CA'], resRef['C'], N, CA_N_length, C_N_CA_angle, omega)
	CA=Atom("CA", CA_coord, 0.0 , 1.0, " "," CA", 0,"C")
	C_coord=calculateCoordinates(resRef['C'], N, CA, CA_C_length, N_CA_C_angle, phi)
	C= Atom("C", C_coord, 0.0, 1.0, " ", " C",0,"C")
	##Create Carbonyl atom (to be moved later)
	C_O_length=geo.C_O_length
	CA_C_O_angle=geo.CA_C_O_angle
	N_CA_C_O_diangle=geo.N_CA_C_O_diangle
	carbonyl=calculateCoordinates(N, CA, C, C_O_length, CA_C_O_angle, N_CA_C_O_diangle)
	O= Atom("O",carbonyl , 0.0 , 1.0, " "," O", 0, "O")
	if(AA=='G'):
		res=makeGly(segID, N, CA, C, O, geo)
	else:
		res=makeGly(segID, N, CA, C, O, geo)
	resRef['O'].set_coord(calculateCoordinates(res['N'], resRef['CA'], resRef['C'], C_O_length, CA_C_O_angle, 180.0))
	ghost= Atom("N", calculateCoordinates(res['N'], res['CA'], res['C'], peptide_bond, CA_C_N_angle, psi_im1), 0.0 , 0.0, " ","N", 0, "N")
	res['O'].set_coord(calculateCoordinates( res['N'], res['CA'], res['C'], C_O_length, CA_C_O_angle, 180.0))
	structure[0]['A'].add(res)
	return structure
Пример #27
0
def build_residues(list_blueprints, list_names):
    list_residues = []
    resname = res_rev_name_dict[list_blueprints[0][0][2]]

    rotamer_dict[resname] = []

    for list_rotamer in list_blueprints:

        new_res = Residue((" ", 279, " "), resname,
                          " ")  # RESET TOTAL_RES_ID TO 1 ON SUBSEQUENT RUNS?
        rotamer_dict[resname].append(list_rotamer[5][1])

        for blueprint_atom in list_rotamer:
            new_atom = Atom(blueprint_atom[0], blueprint_atom[6],
                            blueprint_atom[8], blueprint_atom[7],
                            blueprint_atom[1], blueprint_atom[0], 1,
                            blueprint_atom[10])
            # INIT:         NAME,              COORDINATES,       BFACTOR,           OCCUPANCY,         ALTLOC,            FULL NAME,         SERIAL NUMBER, ELEMENT
            new_atom.set_parent(new_res)
            new_res.add(new_atom)

        list_residues.append(new_res)

    return list_residues
Пример #28
0
def makeGlu(N, CA, CB, chi1, chi2, chi3):
    CB_CG_length = 1.52
    CA_CB_CG_angle = 113.82
    N_CA_CB_CG_diangle = chi1

    CG_CD_length = 1.52
    CB_CG_CD_angle = 113.31
    CA_CB_CG_CD_diangle = chi2

    CD_OE1_length = 1.25
    CG_CD_OE1_angle = 119.02
    CB_CG_CD_OE1_diangle = chi3

    CD_OE2_length = 1.25
    CG_CD_OE2_angle = 118.08
    CB_CG_CD_OE2_diangle = 180.0 + CB_CG_CD_OE1_diangle

    carbon_g = calculateCoordinates(N, CA, CB, CB_CG_length, CA_CB_CG_angle,
                                    N_CA_CB_CG_diangle)
    CG = Atom("CG", carbon_g, 0.0, 1.0, " ", " CG", 0, "C")
    carbon_d = calculateCoordinates(CA, CB, CG, CG_CD_length, CB_CG_CD_angle,
                                    CA_CB_CG_CD_diangle)
    CD = Atom("CD", carbon_d, 0.0, 1.0, " ", " CD", 0, "C")
    oxygen_e1 = calculateCoordinates(CB, CG, CD, CD_OE1_length,
                                     CG_CD_OE1_angle, CB_CG_CD_OE1_diangle)
    OE1 = Atom("OE1", oxygen_e1, 0.0, 1.0, " ", " OE1", 0, "O")
    oxygen_e2 = calculateCoordinates(CB, CG, CD, CD_OE2_length,
                                     CG_CD_OE2_angle, CB_CG_CD_OE2_diangle)
    OE2 = Atom("OE1", oxygen_e2, 0.0, 1.0, " ", " OE1", 0, "O")
    _dict = {
        'cg': (carbon_g, CG),
        'cd': (carbon_d, CD),
        'oe1': (oxygen_e1, OE1),
        'oe2': (oxygen_e2, OE2)
    }
    return _dict
def makeAla(segID, N, CA, C, O, geo):
    '''Creates an Alanine residue'''
    ##R-Group
    CA_CB_length = geo.CA_CB_length
    C_CA_CB_angle = geo.C_CA_CB_angle
    N_C_CA_CB_diangle = geo.N_C_CA_CB_diangle

    carbon_b = calculateCoordinates(N, C, CA, CA_CB_length, C_CA_CB_angle,
                                    N_C_CA_CB_diangle)
    CB = Atom("CB", carbon_b, 0.0, 1.0, " ", " CB", 0, "C")

    ##Create Residue Data Structure
    res = Residue((' ', segID, ' '), "ALA", '    ')
    res.add(N)
    res.add(CA)
    res.add(C)
    res.add(O)
    res.add(CB)
    return res
Пример #30
0
def RemoveHydrogens(ProteinModel):
	# Loop over entire structure
	for Chain in list(ProteinModel.get_chains()):

		for Residue in list(Chain.get_residues()):

			if Residue.get_resname() not in ("HOH", "WAT"):
				# And get rid of hydrogens
				for Atom in list(Residue.get_atoms()):

					if Atom.element == "H":
						Residue.detach_child(Atom.get_id())

			else:
				Chain.detach_child(Residue.get_id())

		if len(list(Chain.get_residues())) == 0:
			ProteinModel.detach_child(Chain.get_id())

	return