• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

griffithlab / pVACtools / 19267929486

11 Nov 2025 01:58PM UTC coverage: 83.157%. First build
19267929486

Pull #1334

github

web-flow
Merge 96524b86a into 0f77b13e8
Pull Request #1334: Update top_score_metric2 to take a list of metrics to prioritize

209 of 212 new or added lines in 9 files covered. (98.58%)

9287 of 11168 relevant lines covered (83.16%)

2.49 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

98.41
/pvactools/lib/sort.py
1
import pandas as pd
3✔
2
from pvactools.lib.run_utils import *
3✔
3

4
def pvacseq_sort(rows, top_score_metric, top_score_metric2, file_type='full'):
3✔
5
    if isinstance(rows, list):
3✔
6
        rows = pd.DataFrame.from_dict(rows)
3✔
7
    if len(rows) == 0:
3✔
8
        return rows
3✔
9

10
    if file_type == 'aggregated':
3✔
11
        tier_sorter = ["Pass", "PoorBinder", "PoorImmunogenicity", "PoorPresentation", "RefMatch", "PoorTranscript", "LowExpr", "Anchor", "Subclonal", "ProbPos", "Poor", "NoExpr"]
3✔
12
        sorter_index = dict(zip(tier_sorter,range(len(tier_sorter))))
3✔
13
        rows["rank_tier"] = rows['Tier'].map(sorter_index)
3✔
14
        sort_columns = ["rank_tier", "rank", "Gene", "AA Change"]
3✔
15
        expression_column = 'Allele Expr'
3✔
16
    elif file_type == 'full':
3✔
17
        sort_columns = ["rank", "Gene Name", "Mutation"]
3✔
18
        expression_column = 'Gene Expression'
3✔
19

20
    rows["rank_expr"] = pd.to_numeric(rows[expression_column], errors='coerce').rank(ascending=False, method='dense', na_option="bottom")
3✔
21
    rows["rank"] = rows["rank_expr"]
3✔
22

23
    if file_type == 'aggregated':
3✔
24
        for metric2 in top_score_metric2:
3✔
25
            rows[f"rank_{metric2}"] = pd.to_numeric(rows[metric2_to_aggregate_column(metric2)], errors='coerce').rank(ascending=True, method='dense', na_option='bottom')
3✔
26
            rows["rank"] += rows[f"rank_{metric2}"]
3✔
27
    elif file_type == 'full':
3✔
28
        for metric2 in top_score_metric2:
3✔
29
            rows[f"rank_{metric2}"] = pd.to_numeric(rows[metrics_to_column('pvacseq', top_score_metric, metric2)], errors='coerce').rank(ascending=True, method='dense', na_option='bottom')
3✔
30
            rows["rank"] += rows[f"rank_{metric2}"]
3✔
31

32
    rows.sort_values(by=sort_columns, inplace=True, ascending=True)
3✔
33

34
    rows.drop(labels='rank', axis=1, inplace=True)
3✔
35
    if file_type == 'aggregated':
3✔
36
        rows.drop(labels='rank_tier', axis=1, inplace=True)
3✔
37
    rows.drop(labels='rank_expr', axis=1, inplace=True)
3✔
38
    for metric2 in top_score_metric2:
3✔
39
        rows.drop(labels=f"rank_{metric2}", axis=1, inplace=True)
3✔
40

41
    return rows
3✔
42

43
def pvacfuse_sort(rows, top_score_metric, top_score_metric2, file_type='full'):
3✔
44
    if isinstance(rows, list):
3✔
45
        rows = pd.DataFrame.from_dict(rows)
3✔
46
    if len(rows) == 0:
3✔
NEW
47
        return rows
×
48

49
    if file_type == 'aggregated':
3✔
50
        tier_sorter = ["Pass", "PoorBinder", "PoorImmunogenicity", "PoorPresentation", "RefMatch", "LowReadSupport", "LowExpr", "ProbPos", "Poor"]
3✔
51
        sorter_index = dict(zip(tier_sorter,range(len(tier_sorter))))
3✔
52
        rows["rank_tier"] = rows['Tier'].map(sorter_index)
3✔
53
        sort_columns = ["rank_tier", "rank", "ID"]
3✔
54
        expression_column = 'Expr'
3✔
55
    elif file_type == 'full':
3✔
56
        sort_columns = ["rank", "Mutation"]
3✔
57
        expression_column = 'Expression'
3✔
58

59
    rows["rank_expr"] = pd.to_numeric(rows[expression_column], errors='coerce').rank(ascending=False, method='dense', na_option="bottom")
3✔
60
    rows["rank"] = rows["rank_expr"]
3✔
61

62
    if file_type == 'aggregated':
3✔
63
        for metric2 in top_score_metric2:
3✔
64
            rows[f"rank_{metric2}"] = pd.to_numeric(rows[metric2_to_aggregate_column(metric2)], errors='coerce').rank(ascending=True, method='dense', na_option='bottom')
3✔
65
            rows["rank"] += rows[f"rank_{metric2}"]
3✔
66
    elif file_type == 'full':
3✔
67
        for metric2 in top_score_metric2:
3✔
68
            rows[f"rank_{metric2}"] = pd.to_numeric(rows[metrics_to_column('pvacfuse', top_score_metric, metric2)], errors='coerce').rank(ascending=True, method='dense', na_option='bottom')
3✔
69
            rows["rank"] += rows[f"rank_{metric2}"]
3✔
70

71
    rows.sort_values(by=sort_columns, inplace=True, ascending=True)
3✔
72

73
    rows.drop(labels='rank', axis=1, inplace=True)
3✔
74
    if file_type == 'aggregated':
3✔
75
        rows.drop(labels='rank_tier', axis=1, inplace=True)
3✔
76
    rows.drop(labels='rank_expr', axis=1, inplace=True)
3✔
77
    for metric2 in top_score_metric2:
3✔
78
        rows.drop(labels=f"rank_{metric2}", axis=1, inplace=True)
3✔
79

80
    return rows
3✔
81

82
def pvacsplice_sort(rows, top_score_metric, top_score_metric2, file_type='full'):
3✔
83
    if isinstance(rows, list):
3✔
84
        rows = pd.DataFrame.from_dict(rows)
3✔
85
    if len(rows) == 0:
3✔
86
        return rows
3✔
87

88
    if file_type == 'aggregated':
3✔
89
        tier_sorter = ["Pass", "PoorBinder", "PoorImmunogenicity", "PoorPresentation", "RefMatch", "PoorTranscript", "LowExpr", "Subclonal", "ProbPos", "Poor", "NoExpr"]
3✔
90
        sorter_index = dict(zip(tier_sorter,range(len(tier_sorter))))
3✔
91
        rows["rank_tier"] = rows['Tier'].map(sorter_index)
3✔
92
        sort_columns = ["rank_tier", "rank", "Gene", "Transcript", "AA Change"]
3✔
93
        expression_column = 'Allele Expr'
3✔
94
    elif file_type == 'full':
3✔
95
        sort_columns = ["rank", "Gene Name", "Transcript", "Amino Acid Change"]
3✔
96
        expression_column = 'Gene Expression'
3✔
97

98
    rows["rank_expr"] = pd.to_numeric(rows[expression_column], errors='coerce').rank(ascending=False, method='dense', na_option="bottom")
3✔
99
    rows["rank"] = rows["rank_expr"]
3✔
100

101
    if file_type == 'aggregated':
3✔
102
        for metric2 in top_score_metric2:
3✔
103
            rows[f"rank_{metric2}"] = pd.to_numeric(rows[metric2_to_aggregate_column(metric2)], errors='coerce').rank(ascending=True, method='dense', na_option='bottom')
3✔
104
            rows["rank"] += rows[f"rank_{metric2}"]
3✔
105
    elif file_type == 'full':
3✔
106
        for metric2 in top_score_metric2:
3✔
107
            rows[f"rank_{metric2}"] = pd.to_numeric(rows[metrics_to_column('pvacsplice', top_score_metric, metric2)], errors='coerce').rank(ascending=True, method='dense', na_option='bottom')
3✔
108
            rows["rank"] += rows[f"rank_{metric2}"]
3✔
109

110
    rows.sort_values(by=sort_columns, inplace=True, ascending=True)
3✔
111

112
    rows.drop(labels='rank', axis=1, inplace=True)
3✔
113
    if file_type == 'aggregated':
3✔
114
        rows.drop(labels='rank_tier', axis=1, inplace=True)
3✔
115
    rows.drop(labels='rank_expr', axis=1, inplace=True)
3✔
116
    for metric2 in top_score_metric2:
3✔
117
        rows.drop(labels=f"rank_{metric2}", axis=1, inplace=True)
3✔
118

119
    return rows
3✔
120

121
def pvacbind_sort(rows, top_score_metric, top_score_metric2, file_type='full'):
3✔
122
    if isinstance(rows, list):
3✔
123
        rows = pd.DataFrame.from_dict(rows)
3✔
124
    if len(rows) == 0:
3✔
NEW
125
        return rows
×
126

127
    if file_type == 'aggregated':
3✔
128
        tier_sorter = ["Pass", "PoorBinder", "PoorImmunogenicity", "PoorPresentation", "RefMatch", "ProbPos", "Poor"]
3✔
129
        sorter_index = dict(zip(tier_sorter,range(len(tier_sorter))))
3✔
130
        rows["rank_tier"] = rows['Tier'].map(sorter_index)
3✔
131
        sort_columns = ["rank_tier", "rank", "ID"]
3✔
132
    elif file_type == 'full':
3✔
133
        sort_columns = ["rank", "Mutation"]
3✔
134

135
    rows["rank"] = 0
3✔
136
    if file_type == 'aggregated':
3✔
137
        for metric2 in top_score_metric2:
3✔
138
            rows[f"rank_{metric2}"] = pd.to_numeric(rows[metric2_to_aggregate_column(metric2)], errors='coerce').rank(ascending=True, method='dense', na_option='bottom')
3✔
139
            rows["rank"] += rows[f"rank_{metric2}"]
3✔
140
    elif file_type == 'full':
3✔
141
        for metric2 in top_score_metric2:
3✔
142
            rows[f"rank_{metric2}"] = pd.to_numeric(rows[metrics_to_column('pvacbind', top_score_metric, metric2)], errors='coerce').rank(ascending=True, method='dense', na_option='bottom')
3✔
143
            rows["rank"] += rows[f"rank_{metric2}"]
3✔
144

145
    rows.sort_values(by=sort_columns, inplace=True, ascending=True)
3✔
146

147
    rows.drop(labels='rank', axis=1, inplace=True)
3✔
148
    if file_type == 'aggregated':
3✔
149
        rows.drop(labels='rank_tier', axis=1, inplace=True)
3✔
150
    for metric2 in top_score_metric2:
3✔
151
        rows.drop(labels=f"rank_{metric2}", axis=1, inplace=True)
3✔
152

153
    return rows
3✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc