Skip to content

Commit 6bdbe8f

Browse files
committed
Update CLI
1 parent 9b1b239 commit 6bdbe8f

File tree

1 file changed

+77
-63
lines changed

1 file changed

+77
-63
lines changed

beams/__main__.py

Lines changed: 77 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44
from beams import __version__
55
import argparse
66
import sys
7+
import os
78
import networkx as nx
89
from beams import in_out
910
from beams import grouping
1011
from beams import annotation
12+
from beams import plots
1113

1214

1315
def map_delimiter(delimiter):
@@ -28,8 +30,6 @@ def main():
2830
subparsers = parser.add_subparsers(dest='step')
2931

3032

31-
parser_fi = subparsers.add_parser('format-inputs', help='Convert and format input files.')
32-
3333
parser_gf = subparsers.add_parser('group-features', help='Group features.')
3434

3535
parser_app = subparsers.add_parser('annotate-peak-patterns', help='Annotate peak patterns, molecular formulae and metabolites.')
@@ -42,22 +42,6 @@ def main():
4242

4343
parser_gui = subparsers.add_parser('start-gui', help='Start GUI.')
4444

45-
#################################
46-
# FORMAT INPUTS
47-
#################################
48-
49-
parser_fi.add_argument('-l', '--peaklist',
50-
type=str, required=True, help="Tab-delimited peaklist.")
51-
52-
parser_fi.add_argument('-m', '--intensity-matrix',
53-
type=str, required=True, help="Tab-delimited intensity matrix.")
54-
55-
parser_fi.add_argument('-o', '--output', type=str, required=True,
56-
help="Filename / Path to save the merged peaklist and intensity matrix.")
57-
58-
parser_fi.add_argument('-s', '--sep', default="tab", choices=["tab", "comma"], required=True,
59-
help="Values on each line of the file are separated by this character.")
60-
6145

6246
#################################
6347
# GROUP FEATURES
@@ -67,7 +51,7 @@ def main():
6751
type=str, required=True, help="Tab-delimited peaklist.")
6852

6953
parser_gf.add_argument('-i', '--intensity-matrix',
70-
type=str, required=False, help="Tab-delimited intensity matrix.")
54+
type=str, required=True, help="Tab-delimited intensity matrix.")
7155

7256
#parser_gf.add_argument('-x', '--xset-matrix',
7357
# type=str, required=False, help="Tab-delimited intensity matrix")
@@ -113,18 +97,18 @@ def main():
11397
help="Annotate adducts.")
11498

11599
parser_app.add_argument('-b', '--adducts-library', action='append', required=False,
116-
help="List of adducts.")
100+
default=[], help="List of adducts.")
117101

118102
parser_app.add_argument('-e', '--isotopes', action='store_true', required=False,
119103
help="Annotate isotopes.")
120104

121-
parser_app.add_argument('-f', '--isotopes-library', action='append', required=False,
105+
parser_app.add_argument('-f', '--isotopes-library', required=False,
122106
help="List of isotopes.")
123107

124108
parser_app.add_argument('-r', '--multiple-charged-ions', action='store_true', required=False,
125109
help="Annotate multiple-charged ions.")
126110

127-
parser_app.add_argument('-s', '--multiple-charged-ions-library', action='append', required=False,
111+
parser_app.add_argument('-s', '--multiple-charged-ions-library', required=False,
128112
help="List of multiple charged ions.")
129113

130114
parser_app.add_argument('-o', '--oligomers', action='store_true', required=False,
@@ -136,7 +120,10 @@ def main():
136120
parser_app.add_argument('-p', '--ppm', default=3.0, type=float, required=True,
137121
help="Mass tolerance in parts per million.")
138122

123+
parser_app.add_argument('-u', '--max-monomer-units', default=2, type=int, required=False,
124+
help="Maximum number of monomer units.")
139125

126+
140127
#################################
141128
# ANNOTATE MOLECULAR FORMULAE
142129
#################################
@@ -179,7 +166,7 @@ def main():
179166
parser_am.add_argument('-d', '--db', type=str, required=True,
180167
help="Sqlite database to write results.")
181168

182-
parser_am.add_argument('-c', '--db-compounds', type=str, required=True, help="Metabolite database (reference).")
169+
parser_am.add_argument('-c', '--db-compounds', type=str, required=False, help="Metabolite database (reference).")
183170

184171
parser_am.add_argument('-n', '--db-name', type=str, default="", required=False,
185172
help="Name compound / metabolite database (within --db-compounds).")
@@ -221,23 +208,18 @@ def main():
221208
parser_sr.add_argument('-c', '--single-column', action="store_true",
222209
help="Concatenate the annotations for each spectral feature and keep seperate columns for molecular formula, adduct, name, etc.")
223210

224-
parser_sr.add_argument('-n', '--ndigits-mz', default=None, type=int, required=True,
211+
parser_sr.add_argument('-n', '--ndigits-mz', default=None, type=int, required=False,
225212
help="Digits after the decimal point for m/z values.")
226213

227-
parser_sr.add_argument('-t', '--convert-rt', default=None, choices=["sec", "min", None], required=True,
228-
help="Covert the retention time to seconds or minutes. An additional column will be added.")
214+
parser_sr.add_argument('-t', '--convert-rt', default=None, choices=["sec", "min", None],
215+
required=False, help="Covert the retention time to seconds or minutes. An additional column will be added.")
229216

230217
args = parser.parse_args()
231218

232219
print(args)
233220

234221
separators = {"tab": "\t", "comma": ","}
235222

236-
if args.step == "format-inputs":
237-
238-
df = in_out.combine_peaklist_matrix(args.peaklist, args.intensity_matrix)
239-
df.to_csv(args.output, sep=separators[args.sep], index=False)
240-
241223
if args.step == "group-features":
242224
df = in_out.combine_peaklist_matrix(args.peaklist, args.intensity_matrix)
243225
graph = grouping.group_features(df, db_out=args.db, max_rt_diff=args.max_rt_diff,
@@ -249,61 +231,93 @@ def main():
249231

250232
if args.gml_file:
251233
inp = nx.read_gml(args.gml_file)
252-
else:
234+
elif args.intensity_matrix:
253235
inp = in_out.combine_peaklist_matrix(args.peaklist, args.intensity_matrix)
236+
else:
237+
inp = in_out.read_peaklist(args.peaklist)
254238

255239
if args.adducts:
256-
for i, a in enumerate(args.adducts_library):
257-
try:
258-
lib = in_out.read_adducts(a, args.ion_mode)
259-
except:
260-
lib = in_out.read_mass_differences(a, args.ion_mode)
261-
if i > 0:
262-
add = True
263-
else:
264-
add = False
265-
annotation.annotate_adducts(inp, db_out=args.db, ppm=args.ppm, lib=lib, add=add)
266-
240+
if len(args.adducts_library) > 0 and args.adducts_library is not None:
241+
for i, a in enumerate(args.adducts_library):
242+
try:
243+
lib = in_out.read_adducts(a, args.ion_mode)
244+
except:
245+
lib = in_out.read_mass_differences(a, args.ion_mode)
246+
if i > 0:
247+
add = True
248+
else:
249+
add = False
250+
annotation.annotate_adducts(inp, db_out=args.db, ppm=args.ppm, lib=lib, add=add)
251+
else:
252+
path = 'data/adducts.txt'
253+
p = os.path.join(os.path.dirname(os.path.abspath(__file__)), path)
254+
lib = in_out.read_adducts(p, args.ion_mode)
255+
annotation.annotate_adducts(inp, db_out=args.db, ppm=args.ppm, lib=lib, add=False)
267256

268257
if args.isotopes:
269-
for i in args.isotopes_library:
270-
lib = in_out.read_isotopes(i, args.ion_mode)
258+
if args.isotopes_library is not None:
259+
lib = in_out.read_isotopes(args.isotopes_library, args.ion_mode)
260+
annotation.annotate_isotopes(inp, db_out=args.db, ppm=args.ppm, lib=lib)
261+
else:
262+
path = 'data/isotopes.txt'
263+
p = os.path.join(os.path.dirname(os.path.abspath(__file__)), path)
264+
lib = in_out.read_isotopes(p, args.ion_mode)
271265
annotation.annotate_isotopes(inp, db_out=args.db, ppm=args.ppm, lib=lib)
272266

273267
if args.multiple_charged_ions:
274-
for i, m in enumerate(args.multiple_charged_ions_library):
275-
try:
276-
lib = in_out.read_multiple_charged_ions(m, args.ion_mode)
277-
except:
278-
lib = in_out.read_mass_differences(m, args.ion_mode)
279-
280-
if i > 0:
281-
add = True
282-
else:
283-
add = False
284-
285-
annotation.annotate_multiple_charged_ions(inp, db_out=args.db, ppm=args.ppm, lib=lib, add=add)
286-
268+
if len(args.multiple_charged_ions_library) > 0 and args.multiple_charged_ions_library is not None:
269+
for i, m in enumerate(args.multiple_charged_ions_library):
270+
try:
271+
lib = in_out.read_multiple_charged_ions(m, args.ion_mode)
272+
except:
273+
lib = in_out.read_mass_differences(m, args.ion_mode)
274+
275+
if i > 0:
276+
add = True
277+
else:
278+
add = False
279+
280+
annotation.annotate_multiple_charged_ions(inp, db_out=args.db, ppm=args.ppm, lib=lib, add=add)
281+
else:
282+
path = 'data/multiple_charged_ions.txt'
283+
p = os.path.join(os.path.dirname(os.path.abspath(__file__)), path)
284+
lib = in_out.read_multiple_charged_ions(p, args.ion_mode)
285+
287286
if args.oligomers:
288287
annotation.annotate_oligomers(inp, db_out=args.db, ppm=args.ppm, lib=lib)
289288

290289
if args.step == "annotate-mf":
291-
df = in_out.combine_peaklist_matrix(args.peaklist, args.intensity_matrix)
290+
291+
if args.intensity_matrix:
292+
df = in_out.combine_peaklist_matrix(args.peaklist, args.intensity_matrix)
293+
else:
294+
df = in_out.read_peaklist(args.peaklist)
295+
292296
lib = in_out.read_adducts(args.adducts_library, args.ion_mode)
293297
annotation.annotate_molecular_formulae(df, ppm=args.ppm, lib_adducts=lib, db_out=args.db, db_in=args.db_mf, max_mz=args.max_mz)
294298

295299
if args.step == "annotate-compounds":
296-
df = in_out.combine_peaklist_matrix(args.peaklist, args.intensity_matrix)
300+
301+
if args.intensity_matrix:
302+
df = in_out.combine_peaklist_matrix(args.peaklist, args.intensity_matrix)
303+
else:
304+
df = in_out.read_peaklist(args.peaklist)
305+
297306
lib = in_out.read_adducts(args.adducts_library, args.ion_mode)
298-
annotation.annotate_compounds(df, lib_adducts=lib, ppm=args.ppm, db_out=args.db, db_in=args.db_compounds, db_name=args.db_name)
307+
annotation.annotate_compounds(df, lib_adducts=lib, ppm=args.ppm, db_out=args.db, db_name=args.db_name, db_in="")
299308

300309
if args.step == "summary-results":
301-
df = in_out.combine_peaklist_matrix(args.peaklist, args.intensity_matrix)
310+
311+
if args.intensity_matrix:
312+
df = in_out.combine_peaklist_matrix(args.peaklist, args.intensity_matrix)
313+
else:
314+
df = in_out.read_peaklist(args.peaklist)
315+
302316
df_out = annotation.summary(df, db=args.db, single_row=args.single_row, single_column=args.single_column, convert_rt=args.convert_rt, ndigits_mz=args.ndigits_mz)
303317
df_out.to_csv(args.output, sep=separators[args.sep], index=False, encoding="utf-8")
304318
if args.pdf:
305319
plots.report(db=args.db, pdf_out=args.pdf,
306-
column_corr="r_value", column_pvalue="pvalue",
320+
column_corr="r_value", column_pvalue="p_value",
307321
column_ppm_error="ppm_error", column_adducts="adduct")
308322

309323
if args.step == "start-gui":

0 commit comments

Comments
 (0)