comparison generate_manifest.py @ 8:012191b79fda draft default tip

planemo upload for repository https://github.com/galaxyproteomics/tools-galaxyp/tree/master/tools/fragpipe commit 6413a461059c4a421a7812a08f244c224cde8ee2
author galaxyp
date Fri, 17 Oct 2025 16:22:03 +0000
parents
children
comparison
equal deleted inserted replaced
7:b4f6df8fa89b 8:012191b79fda
1 #!/usr/bin/env python3
2
3 #
4 # Generates a FragPipe Manifest file.
5 #
6
7 import argparse
8 import csv
9
10 # The three columns for each scanfile are "Experiment, Bioreplicate, and Data type
11 column_types = ('exp', 'bio', 'type')
12 output_filename = 'fp.manifest'
13
14
15 # Add column values to a list of rows for each scan file.
16 def add_column(column_type, args, rows):
17 nfiles = len(args.scanfiles)
18
19 # Each scan file is numbered 1 through n in column
20 if getattr(args, f'{column_type}_consec'):
21 vals = range(1, nfiles + 1)
22
23 # All scan files have same value in column
24 elif getattr(args, f'{column_type}_assign_all'):
25 vals = [getattr(args, f'{column_type}_assign_all')] * nfiles
26
27 # Values are provided for scan files in a comma-delimited list
28 elif getattr(args, f'{column_type}_col'):
29 vals = getattr(args, f'{column_type}_col').split(',')
30 if len(vals) != nfiles:
31 raise ValueError((f'Incorrect number of values entered for column {column_type}. '
32 'Exactly one value must be entered for each scan file.'))
33
34 # Otherwise, this column remains empty.
35 else:
36 vals = [''] * nfiles
37
38 for i, row in enumerate(rows):
39 row.append(vals[i])
40
41
42 def main():
43 parser = argparse.ArgumentParser()
44
45 # Each column has the same methods for populating
46 for column_type in column_types:
47 parser.add_argument(f'--{column_type}-consec', action='store_true')
48 parser.add_argument(f'--{column_type}-assign-all')
49 parser.add_argument(f'--{column_type}-col')
50
51 # Scanfile names, which should be identical to history identifiers
52 parser.add_argument('scanfiles', nargs='+')
53
54 args = parser.parse_args()
55
56 # Create and populate data structure for tabular output
57 rows = [[scanfile] for scanfile in args.scanfiles]
58 for column_type in column_types:
59 add_column(column_type, args, rows)
60
61 # Write out manifest file.
62 # Use mode=a as the script will be called once for each scan group.
63 with open(output_filename, mode='a') as outf:
64 manifest_writer = csv.writer(outf, delimiter='\t')
65 for row in rows:
66 manifest_writer.writerow(row)
67
68
69 if __name__ == "__main__":
70 main()