diff tools/visualization/build_ucsc_custom_track.py @ 0:9071e359b9a3

Uploaded
author xuebing
date Fri, 09 Mar 2012 19:37:19 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/visualization/build_ucsc_custom_track.py	Fri Mar 09 19:37:19 2012 -0500
@@ -0,0 +1,87 @@
+#!/usr/bin/env python
+"""
+Build a UCSC genome browser custom track file
+"""
+
+import sys, os
+
+assert sys.version_info[:2] >= ( 2, 4 )
+
+def stop_err( msg ):
+    sys.stderr.write( msg )
+    sys.exit()
+
+args = sys.argv[1:]
+
+out_fname = args.pop(0)
+out = open( out_fname, "w" )
+
+num_tracks = 0
+skipped_lines = 0
+first_invalid_line = 0
+while args:
+    # Suck in one dataset worth of arguments
+    in_fname = args.pop(0)
+    type = args.pop(0)
+    colspec = args.pop(0)
+    name = args.pop(0)
+    description = args.pop(0)
+    color = args.pop(0).replace( '-', ',' )
+    visibility = args.pop(0)
+    # Do the work
+    if type == "wig":
+        print >> out, '''track type=wiggle_0 name="%s" description="%s" color=%s visibility=%s''' \
+                      % ( name, description, color, visibility )
+        for i, line in enumerate( file( in_fname ) ):
+            print >> out, line,
+        print >> out
+    elif type == "bed":
+        print >> out, '''track name="%s" description="%s" color=%s visibility=%s''' \
+                      % ( name, description, color, visibility )
+        for i, line in enumerate( file( in_fname ) ):
+            print >> out, line,
+        print >> out
+    else:
+        # Assume type is interval (don't pass this script anything else!)
+        try:
+            c, s, e, st = [ int( x ) - 1 for x in colspec.split( "," ) ]
+        except:
+            try:
+                c, s, e = [ int( x ) - 1 for x in colspec.split( "," )[:3] ]
+                st = -1    #strand column is absent
+            except:
+                stop_err( "Columns in interval file invalid for UCSC custom track." )
+        
+        print >> out, '''track name="%s" description="%s" color=%s visibility=%s''' \
+                      % ( name, description, color, visibility )
+        i = 0
+        for i, line in enumerate( file( in_fname ) ):
+            line = line.rstrip( '\r\n' )
+            if line and not line.startswith( '#' ):
+                fields = line.split( "\t" )
+                if st > 0:
+                    #strand column is present
+                    try:
+                        print >> out, "%s\t%s\t%s\t%d\t0\t%s" % ( fields[c], fields[s], fields[e], i, fields[st] )
+                    except:
+                        skipped_lines += 1
+                        if not first_invalid_line:
+                            first_invalid_line = i+1
+                else:
+                    try:
+                        print >> out, "%s\t%s\t%s" % ( fields[c], fields[s], fields[e] )
+                    except:
+                        skipped_lines += 1
+                        if not first_invalid_line:
+                            first_invalid_line = i+1
+        print >> out
+    num_tracks += 1
+    
+out.close()
+
+print "Generated a custom track containing %d subtracks." % num_tracks
+if skipped_lines:
+    print "Skipped %d invalid lines starting at #%d" % ( skipped_lines, first_invalid_line )
+
+
+