comparison mqwrapper.py @ 0:256cc0e17454 draft

planemo upload for repository https://github.com/galaxyproteomics/tools-galaxyp/tree/master/tools/maxquant commit ab4e4f1817080cbe8a031a82cb180610ff140847
author galaxyp
date Sat, 20 Jul 2019 04:53:23 -0400
parents
children 26693e21c3c8
comparison
equal deleted inserted replaced
-1:000000000000 0:256cc0e17454
1 """
2 Run MaxQuant on a modified mqpar.xml.
3 Use maxquant conda package.
4 TODO: add support for parameter groups
5
6 Authors: Damian Glaetzer <d.glaetzer@mailbox.org>
7
8 based on the maxquant galaxy tool by John Chilton:
9 https://github.com/galaxyproteomics/tools-galaxyp/tree/master/tools/maxquant
10 """
11
12 import argparse
13 import os
14 import shutil
15 import subprocess
16
17 import mqparam
18
19 # build parser
20 parser = argparse.ArgumentParser()
21
22 # input, special outputs and others
23 other_args = ('raw_files', 'mzxml_files', 'fasta_files',
24 'description_parse_rule', 'identifier_parse_rule',
25 'mqpar_in', 'output_all',
26 'mqpar_out', 'infile_names', 'mzTab',
27 'version', 'substitution_rx')
28
29 # txt result files
30 txt_output = ('evidence', 'msms', 'parameters',
31 'peptides', 'proteinGroups', 'allPeptides',
32 'libraryMatch', 'matchedFeatures',
33 'modificationSpecificPeptides', 'ms3Scans',
34 'msmsScans', 'mzRange', 'peptideSection',
35 'summary')
36
37 global_simple_args = ('num_threads',)
38
39 arguments = ['--' + el for el in (txt_output
40 + other_args
41 + global_simple_args)]
42
43 for arg in arguments:
44 parser.add_argument(arg)
45
46 args = vars(parser.parse_args())
47
48 # link infile datasets to names with correct extension
49 # for maxquant to accept them
50 files = (args['raw_files'] if args['raw_files']
51 else args['mzxml_files']).split(',')
52 ftype = ".thermo.raw" if args['raw_files'] else ".mzXML"
53 filenames = args['infile_names'].split(',')
54 fnames_with_ext = [(a if a.endswith(ftype)
55 else os.path.splitext(a)[0] + ftype)
56 for a in filenames]
57
58 for f, l in zip(files, fnames_with_ext):
59 os.link(f, l)
60
61 # build mqpar.xml
62 mqpar_temp = os.path.join(os.getcwd(), 'mqpar.xml')
63 mqpar_out = args['mqpar_out'] if args['mqpar_out'] != 'None' else mqpar_temp
64 mqpar_in = args['mqpar_in']
65
66 exp_design = None
67 m = mqparam.MQParam(mqpar_out, mqpar_in, exp_design,
68 substitution_rx=args['substitution_rx'])
69 if m.version != args['version']:
70 raise Exception('mqpar version is ' + m.version +
71 '. Tool uses version {}.'.format(args['version']))
72
73 # modify parameters, interactive mode if no mqpar_in was specified
74 m.add_infiles([os.path.join(os.getcwd(), name) for name in fnames_with_ext], False)
75 m.add_fasta_files(args['fasta_files'].split(','),
76 identifier=args['identifier_parse_rule'],
77 description=args['description_parse_rule'])
78
79 m.write()
80
81 # build and run MaxQuant command
82 cmd = ['maxquant', mqpar_out]
83
84 subprocess.run(cmd, check=True, cwd='./')
85
86 # copy results to galaxy database
87 for el in txt_output:
88 destination = args[el]
89 source = os.path.join(os.getcwd(), "combined", "txt", "{}.txt".format(el))
90 if destination != 'None' and os.path.isfile(source):
91 shutil.copy(source, destination)
92
93 if args['mzTab'] != 'None':
94 source = os.path.join(os.getcwd(), "combined", "txt", "mzTab.mzTab")
95 if os.path.isfile(source):
96 shutil.copy(source, args['mzTab'])
97
98 if args['output_all'] != 'None':
99 subprocess.run(('tar', '-zcf', args['output_all'], './combined/txt/'))