0
|
1 '''
|
|
2 Containing functions are called from Galaxy to populate lists/checkboxes with selectable items
|
|
3 '''
|
|
4 import csv
|
|
5 import glob
|
|
6 import os
|
|
7
|
|
8
|
|
9 __author__ = "Marcel Kempenaar"
|
|
10 __contact__ = "brs@nbic.nl"
|
|
11 __copyright__ = "Copyright, 2012, Netherlands Bioinformatics Centre"
|
|
12 __license__ = "MIT"
|
|
13
|
|
14 def get_column_type(library_file):
|
|
15 '''
|
|
16 Returns a Galaxy formatted list of tuples containing all possibilities for the
|
|
17 GC-column types. Used by the library_lookup.xml tool
|
|
18 @param library_file: given library file from which the list of GC-column types is extracted
|
|
19 '''
|
|
20 (data, header) = read_library(library_file)
|
|
21
|
|
22 if 'columntype' not in header:
|
|
23 raise IOError('Missing columns in ', library_file)
|
|
24
|
|
25 # Filter data on column type
|
|
26 column_type = header.index("columntype")
|
|
27 amounts_in_list_dict = count_occurrence([row[column_type] for row in data])
|
|
28 galaxy_output = [(str(a) + "(" + str(b) + ")", a, False) for a, b in amounts_in_list_dict.items()]
|
|
29 return(galaxy_output)
|
|
30
|
|
31
|
|
32 def filter_column(library_file, column_type_name):
|
|
33 '''
|
|
34 Filters the Retention Index database on column type
|
|
35 @param library_file: file containing the database
|
|
36 @param column_type_name: column type to filter on
|
|
37 '''
|
|
38 (data, header) = read_library(library_file)
|
|
39
|
|
40 if ('columntype' not in header or
|
|
41 'columnphasetype' not in header):
|
|
42 raise IOError('Missing columns in ', library_file)
|
|
43
|
|
44 column_type = header.index("columntype")
|
|
45 statphase = header.index("columnphasetype")
|
|
46
|
|
47 # Filter data on colunn type name
|
|
48 statphase_list = [line[statphase] for line in data if line[column_type] == column_type_name]
|
|
49 amounts_in_list_dict = count_occurrence(statphase_list)
|
|
50 galaxy_output = [(str(a) + "(" + str(b) + ")", a, False)for a, b in amounts_in_list_dict.items()]
|
|
51 return(sorted(galaxy_output))
|
|
52
|
|
53
|
|
54 def filter_column2(library_file, column_type_name, statphase):
|
|
55 '''
|
|
56 Filters the Retention Index database on column type
|
|
57 @param library_file: file containing the database
|
|
58 @param column_type_name: column type to filter on
|
|
59 @param statphase: stationary phase of the column to filter on
|
|
60 '''
|
|
61 (data, header) = read_library(library_file)
|
|
62
|
|
63 if ('columntype' not in header or
|
|
64 'columnphasetype' not in header or
|
|
65 'columnname' not in header):
|
|
66 raise IOError('Missing columns in ', library_file)
|
|
67
|
|
68 column_type_column = header.index("columntype")
|
|
69 statphase_column = header.index("columnphasetype")
|
|
70 column_name_column = header.index("columnname")
|
|
71
|
|
72 # Filter data on given column type name and stationary phase
|
|
73 statphase_list = [line[column_name_column] for line in data if line[column_type_column] == column_type_name and
|
|
74 line[statphase_column] == statphase]
|
|
75 amounts_in_list_dict = count_occurrence(statphase_list)
|
|
76 galaxy_output = [(str(a) + "(" + str(b) + ")", a, False)for a, b in amounts_in_list_dict.items()]
|
|
77 return(sorted(galaxy_output))
|
|
78
|
|
79
|
|
80 def read_library(filename):
|
|
81 '''
|
|
82 Reads a CSV file and returns its contents and a normalized header
|
|
83 @param filename: file to read
|
|
84 '''
|
|
85 data = list(csv.reader(open(filename, 'rU'), delimiter='\t'))
|
|
86 header_clean = [i.lower().strip().replace(".", "").replace("%", "") for i in data.pop(0)]
|
|
87 return(data, header_clean)
|
|
88
|
|
89
|
|
90
|
|
91 def get_directory_files(dir_name):
|
|
92 '''
|
|
93 Reads the directory and
|
|
94 returns the list of .txt files found as a dictionary
|
|
95 with file name and full path so that it can
|
|
96 fill a Galaxy drop-down combo box.
|
|
97
|
|
98 '''
|
|
99 files = glob.glob(dir_name + "/*.txt")
|
|
100 if len(files) == 0:
|
|
101 raise Exception("Configuration error: no library files found in <galaxy-home-dir>/" + dir_name)
|
|
102 else:
|
|
103 galaxy_output = [(str(get_file_name_no_ext(file_name)), str(os.path.abspath(file_name)), False) for file_name in files]
|
|
104 return(galaxy_output)
|
|
105
|
|
106 def get_file_name_no_ext(full_name):
|
|
107 '''
|
|
108 returns just the last part of the name
|
|
109 '''
|
|
110 simple_name = os.path.basename(full_name)
|
|
111 base, ext = os.path.splitext(simple_name)
|
|
112 return base
|
|
113
|
|
114
|
|
115 def count_occurrence(data_list):
|
|
116 '''
|
|
117 Counts occurrences in a list and returns a dict with item:occurrence
|
|
118 @param data_list: list to count items from
|
|
119 '''
|
|
120 return dict((key, data_list.count(key)) for key in set(data_list))
|