Code Duplication    Length = 31-31 lines in 2 locations

rna_tools/tools/PyMOL4RNA/libs/calc_gdt.py 2 locations

@@ 46-76 (lines=31) @@
43
    cmd.spectrum('b', 'green_yellow_red', sel1)
44
    return GDT
45
46
@cmd.extend
47
def gdt_ha(sel1, sel2):
48
    """
49
    Calculate the GDT (Global Distance Test) High Accuracy between two RNA (using P atoms) selections.
50
    Args:
51
        sel1 (str): selection string for the protein to compare.
52
        sel2 (str): selection string for the reference protein.
53
    """
54
    # Select only C-alpha atoms
55
    sel1 += ' and name P'
56
    sel2 += ' and name P'
57
    cutoffs = [0.5, 1, 2, 4]
58
    # Align without transforming for raw alignment data
59
    cmd.align(sel1, sel2, cycles=0, transform=0, object='aln')
60
    # Get raw alignment data
61
    mapping = cmd.get_raw_alignment('aln')
62
    distances = []
63
    for pair in mapping:
64
        atom1 = '%s and id %d' % (pair[0][0], pair[0][1])
65
        atom2 = '%s and id %d' % (pair[1][0], pair[1][1])
66
        dist = cmd.get_distance(atom1, atom2)
67
        distances.append(dist)
68
    distances = np.array(distances)
69
    gdts = [(distances <= cutoff).mean() for cutoff in cutoffs]
70
    out = np.array(list(zip(cutoffs, gdts))).flatten()
71
    print("GDT_HS%d: %.4f; GDT_%d: %.4f; GDT_%d: %.4f; GDT_%d: %.4f;" % tuple(out))
72
    GDT = np.mean(gdts)
73
    print("GDT_HS: %.4f" % GDT)
74
    # Color by distance
75
    cmd.spectrum('b', 'green_yellow_red', sel1)
76
    return GDT
77
78
if __name__ == '__main__':
79
    # Assume the first two objects are the models to compare
@@ 14-44 (lines=31) @@
11
import numpy as np
12
13
print("Loaded calc_gdt.py: gdt(sel1, sel2), gdt_hs(sel1, sel2)")
14
@cmd.extend
15
def gdt(sel1, sel2):
16
    """
17
    Calculate the GDT (Global Distance Test) between two RNA (using P atoms) selections.
18
    Args:
19
        sel1 (str): selection string for the protein to compare.
20
        sel2 (str): selection string for the reference protein.
21
    """
22
    # Select only C-alpha atoms
23
    sel1 += ' and name P'
24
    sel2 += ' and name P'
25
    cutoffs = [1.0, 2.0, 4.0, 8.0]
26
    # Align without transforming for raw alignment data
27
    cmd.align(sel1, sel2, cycles=0, transform=0, object='aln')
28
    # Get raw alignment data
29
    mapping = cmd.get_raw_alignment('aln')
30
    distances = []
31
    for pair in mapping:
32
        atom1 = '%s and id %d' % (pair[0][0], pair[0][1])
33
        atom2 = '%s and id %d' % (pair[1][0], pair[1][1])
34
        dist = cmd.get_distance(atom1, atom2)
35
        distances.append(dist)
36
    distances = np.array(distances)
37
    gdts = [(distances <= cutoff).mean() for cutoff in cutoffs]
38
    out = np.array(list(zip(cutoffs, gdts))).flatten()
39
    print("GDT_%d: %.4f; GDT_%d: %.4f; GDT_%d: %.4f; GDT_%d: %.4f;" % tuple(out))
40
    GDT = np.mean(gdts)
41
    print("GDT: %.4f" % GDT)
42
    # Color by distance
43
    cmd.spectrum('b', 'green_yellow_red', sel1)
44
    return GDT
45
46
@cmd.extend
47
def gdt_ha(sel1, sel2):