예제 #1
0
def salt_bridge(molecule=None):
    model = molecule.model()
    metrics = MetricsModel(molecule)
    positives = []
    negatives = []
    index = 0
    complete_sides = []
    bridge_pairs = {} #set up lists to add outputs to
    x = 0

    for chain in metrics.chains:
        for residue in chain:
            if residue.is_sidechain_complete == True:
                complete_sides.append(True)
            else:
                complete_sides.append(False)
#many files are missing side chains for some residues
#these cause errors if not excepeted!

    for polymer in model:
        for monomer in polymer:
            if complete_sides[index]: #checks if current mresiude is complete
                if monomer.type().trim() in ("ARG", "LYS", "HIS"):
                    positives.append(monomer)
                elif monomer.type().trim() in ("ASP", "GLU"):
        		    negatives.append(monomer)
            index +=1 #increments index for next residue

    for positive in positives:
        if positive.type().trim() == "ARG":
            plus_coord = positive.find(clipper.String("CZ")).coord_orth
        elif positive.type().trim() == "LYS":
            plus_coord = positive.find(clipper.String("NZ")).coord_orth
        elif positive.type().trim() == "HIS":
            plus_coord = positive.find(clipper.String("ND1")).coord_orth
    	for negative in negatives:
            if negative.type().trim() == "ASP":
                neg_coord = negative.find(clipper.String("CG")).coord_orth
            elif negative.type().trim() == "GLU":
                neg_coord = negative.find(clipper.String("CD")).coord_orth

            if clipper.Coord_orth.length(plus_coord, neg_coord) < 4.5:
                x += 1
                bridge_pairs[x] = (positive.id().trim(), negative.id().trim())

    return bridge_pairs
예제 #2
0
def ss_bridge(molecule=None):
    model = molecule.model()
    cysteines = []
    bridge_pairs = {} #set up lists to add outputs to
    i = 0
    for polymer in model:
        for monomer in polymer:
            if monomer.type().trim() == "CYS":
                cysteines.append(monomer) #assemble a list of all CYS residues
    for cys in cysteines:
        cys_1_S = cys.find(clipper.String("SG")).coord_orth #set location of first cys
        for next in cysteines:
            #test first cys against all subsequent, looking for closeness (hence a bridge)
            cys_2_S = next.find(clipper.String("SG")).coord_orth
            if clipper.Coord_orth.length(cys_1_S, cys_2_S) < 2.6 and clipper.Coord_orth.length(cys_1_S, cys_2_S) != 0:
                i += 1#gives a numbered key for use as our bridge annotation
                bridge_pairs[i] = (cys.id().trim(), next.id().trim())
                cysteines.remove(cys) #prevents repetition
    return bridge_pairs
예제 #3
0
def salt_bridge(molecule=None):
    model = molecule.model()
    metrics = MetricsModel(molecule)
    index = 0
    complete_sides = []
    list_of_dicts = []  #set up lists to add outputs to
    x = 0

    for chain in metrics.chains:
        for residue in chain:
            if residue.is_sidechain_complete == True:
                complete_sides.append(True)
            else:
                complete_sides.append(False)


#many files are missing side chains for some residues
#these cause errors if not excepeted!

    for polymer in model:
        positives = []
        negatives = []
        bridge_pairs = {}
        for monomer in polymer:
            if complete_sides[index]:  #checks if current mresiude is complete
                if monomer.type().trim() in ("ARG", "LYS"):
                    positives.append(monomer)
                elif monomer.type().trim() in ("ASP", "GLU"):
                    negatives.append(monomer)
            index += 1  #increments index for next residue

        for positive in positives:
            if positive.type().trim() == "ARG":
                plus_coord = positive.find(clipper.String("CZ")).coord_orth
            elif positive.type().trim() == "LYS":
                plus_coord = positive.find(clipper.String("NZ")).coord_orth
            closest_range = 999

            for negative in negatives:
                if negative.type().trim() == "ASP":
                    neg_coord = negative.find(clipper.String("CG")).coord_orth
                elif negative.type().trim() == "GLU":
                    neg_coord = negative.find(clipper.String("CD")).coord_orth

                if clipper.Coord_orth.length(
                        plus_coord, neg_coord
                ) < closest_range and clipper.Coord_orth.length(
                        plus_coord, neg_coord) < 4.6:
                    closest_range = clipper.Coord_orth.length(
                        plus_coord, neg_coord)
                    paired_aa = negative
            if closest_range != 999:
                x += 1
                bridge_pairs[x] = (positive.id().trim(),
                                   positive.type().trim(), closest_range,
                                   paired_aa.id().trim(),
                                   paired_aa.type().trim())

        for negative in negatives:
            rep_counter = 0
            distances = [0]
            for key, value in bridge_pairs.items():
                if negative.id().trim() in value:
                    rep_counter += 1
                    distances.append(value[2])
                if rep_counter == 2:
                    for key, value in bridge_pairs.items():
                        if max(distances) in value:
                            del bridge_pairs[key]
                if rep_counter > 2:
                    for key, value in bridge_pairs.items():
                        if negative.id().trim() in value:
                            del bridge_pairs[key]

        list_of_dicts.append(bridge_pairs)

    return list_of_dicts