Mercurial > repos > pieterlukasse > prims_metabolomics
comparison match_library.py @ 0:4b94bb2d381c
Initial commit to toolshed
| author | pieter.lukasse@wur.nl |
|---|---|
| date | Thu, 16 Jan 2014 13:22:38 +0100 |
| parents | |
| children | 071a185c2ced |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:4b94bb2d381c |
|---|---|
| 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)) |
