Projects/laydi
Projects
/
laydi
Archived
7
0
Fork 0
This repository has been archived on 2024-07-04. You can view files and clone it, but cannot push or open issues or pull requests.
laydi/scripts/illumina/laydi-mapping-illumina

94 lines
2.3 KiB
Plaintext
Raw Permalink Normal View History

#!/usr/bin/python
import getopt
import os, os.path
import sys
OUTPUT_COLS = ["Array_Address_Id", "Entrez_Gene_ID", "Accession", "ILMN_Gene", "Definition", ]
def print_help():
print "laydi-mapping-illumina"
print
print "Usage: laydi-mapping-illumina <illumina-annotation-file.txt> <from_dim> <to_dim>"
print
print "Description:"
print " Produce mapping files from Illumina text annotation files"
print " Illumina files can be downloaded from:"
print " http://www.switchtoi.com/annotationfiles.ilmn"
print
print " NOTE: <from_dim> and <to_dim> are the column names in the illumina text file,"
print " not laydi dimensions."
print
def parse_cmdline():
short_opts = "h"
long_opts = ["help"]
options, params = getopt.getopt(sys.argv[1:], short_opts, long_opts)
for key, val in options:
if key in ["-h", "--help"]:
print_help()
sys.exit(0)
if len(params) != 3:
print_help()
sys.exit(1)
return params
def build_map(fn, from_dim, to_dim):
retval = {}
fd = open(fn)
line = fd.readline()
while line != "" and line.strip() != "[Probes]":
line = fd.readline()
if line == "":
return None
line = fd.readline()
cols = [x.strip() for x in line.split("\t")]
from_col = cols.index(from_dim)
to_col = cols.index(to_dim)
line = fd.readline()
while line != "" and not line.strip().startswith("["):
key = line.split("\t")[from_col]
val = line.split("\t")[to_col]
if not retval.has_key(key):
retval[key] = [val]
else:
retval[key].append(val)
line = fd.readline()
return retval
def write_map(fd, d, from_dim, to_dim):
opened_here = False
if isinstance(fd, str):
fd = open(fd, "w")
opened_here = True
print >> fd, "# from: %s" % from_dim
print >> fd, "# to: %s" % to_dim
print >> fd, "# description: "
print >> fd
for k, v in d.items():
print >> fd, k,
for e in v:
print >> fd, e,
print >> fd
if opened_here:
fd.close()
if __name__ == '__main__':
fn, from_dim, to_dim = parse_cmdline()
m = build_map(fn, from_dim, to_dim)
write_map(sys.stdout, m, from_dim, to_dim)