forked from RECETOX/galaxytools
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathaoptk_finalize_output.xml
More file actions
85 lines (66 loc) · 3.02 KB
/
Copy pathaoptk_finalize_output.xml
File metadata and controls
85 lines (66 loc) · 3.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<tool id="aoptk_final_modification" name="aoptk final modification" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="25.1" license="MIT">
<description>Finalize the output of relationship identification.</description>
<macros>
<import>macros.xml</import>
</macros>
<requirements>
<expand macro="requirements"/>
<requirement type="package" version="3.1.5">openpyxl</requirement>
</requirements>
<command detect_errors="exit_code"><![CDATA[
python3 '${final_modification}'
]]></command>
<configfiles>
<configfile name="final_modification"><![CDATA[
import pandas as pd
def join_unique(series):
values = series.dropna().astype(str).str.strip()
return ";".join(pd.unique(values))
output = pd.read_csv("$input_file", sep="\t")
for effect in output["effect"].unique():
file_name = effect.strip().lower().replace(" ", "_")
output_filtered = output[output["effect"] == effect].copy()
group_column = "heading" if "heading" in output_filtered.columns else "chemical"
if group_column not in output_filtered.columns:
raise ValueError("Input must contain either a heading or chemical column.")
output_filtered["relationship"] = output_filtered["relationship"].astype(str).str.strip().str.lower()
relationships = sorted(output_filtered["relationship"].unique())
final_output = output_filtered[[group_column]].drop_duplicates()
for relationship in relationships:
subset = output_filtered[output_filtered["relationship"] == relationship]
result = subset.groupby(group_column, as_index=False, dropna=False).agg(
hits=("id", "size"),
ids=("id", join_unique),
)
result.rename(columns={"hits": f"{relationship}", "ids": f"{relationship} IDs"}, inplace=True)
final_output = final_output.merge(result, on=group_column, how="left")
final_output.to_excel(f"./{file_name}.xlsx", index=False)
]]></configfile>
</configfiles>
<inputs>
<param name="input_file" type="data" format="tabular" label="TSV with heading or chemical column." help="Input tsv file with heading column when available, otherwise chemical column." />
</inputs>
<outputs>
<collection name="final_outputs" type="list" label="Final outputs" format="xlsx">
<discover_datasets pattern="(?P<designation>.*)\.xlsx$" ext="xlsx" directory="." />
</collection>
</outputs>
<tests>
<test>
<param name="input_file" value="output.tsv"/>
<output_collection name="final_outputs" type="list" count="2"/>
</test>
<test>
<param name="input_file" value="output_no_heading.tsv"/>
<output_collection name="final_outputs" type="list" count="1"/>
</test>
</tests>
<help><![CDATA[
Final Modification
===================
Tool to remove duplicates and finalize the output of relationship identification.
]]></help>
<citations>
<citation type="doi">10.5281/zenodo.20036704</citation>
</citations>
</tool>