Source code for riboraptor.tracks
import os
from textwrap import indent, dedent
import sys
INDENT_SPACES = '\t'
[docs]def get_compositetrack_text(track_name, parent):
"""Create composite track text"""
header = """\
track {0}
compositeTrack on
group {0}
parent {1}
shortLabel {0}
longLabel {0}
visibility full
\n""".format(track_name, parent)
return dedent(header)
[docs]def get_multiwigtrack_text(track_name, parent):
"""Create a multiWig track.
Example
track myMultiWig
container multiWig
aggregate transparentOverlay
showSubtrackColorOnUi on
type bigWig 0 1000
viewLimits 0:10
maxHeighPixels 100:32:8
track myFirstOverlaySig
parent myMultiWig
color 255,128,128
type bigWig 0 1139
track myFirstBigWig
parent myMultiWig
color 120,235,204
"""
header = """\
track {0}
container multiWig
parent {1}
aggregate transparentOverlay
showSubtrackColorOnUi on
maxHeightPixels 500:100:8
viewLimits 0:20
shortLabel {0}
longLabel {0}
visibility full
type bigWig
\n""".format(track_name, parent)
return dedent(header)
[docs]def get_supertrack_text(track_name):
header = """\
track {0}
superTrack on
group {0}
shortLabel {0}
longLabel {0}
visibility full
\n""".format(track_name)
return dedent(header)
[docs]def get_bigwigtrack_text(track_name, parent, big_data_url, negate_values):
"""Create bigwig track text"""
text = """\
track {0}
parent {1}
priority 300
longLabel {0}
shortLabel {0}
type bigWig
itemRgb On
windowingFunction mean
autoScale on
gridDefault on
color 24,90,197
visibility full
negateValues {3}
bigDataUrl {2}
\n""".format(track_name, parent, big_data_url, negate_values)
return dedent(text)
[docs]def create_trackdb(bwdir, srp, orientation='5prime'):
"""Create track file
"""
# Step 0. Create super track
srp_header = get_supertrack_text(srp)
master_text = '###########################################\n' + srp_header
# Step 1. Create composite track for SRX
for srx in sorted(os.listdir(bwdir)):
master_text += '\n\n###############SRXHeader begin####################\n\n'
srx_orientation_key = srx + '_' + orientation + '_multiWig'
multiwig_header = indent(
get_multiwigtrack_text(srx_orientation_key, srp), INDENT_SPACES)
# Step 2. Inside each composite track for a SRX, create another
# composite track for different orientations/strand inside which
# we need another multiwig track comprising all fragments for this
# particular orientation/strand
add_header = 0
for read_index, read_length in enumerate(
sorted(os.listdir(os.path.join(bwdir, srx)))):
bigwig_text = ''
for orientation_index, orientation_strand in enumerate(
[orientation + '_pos', orientation + '_neg']):
bwpath = os.path.join(bwdir, srx, read_length,
orientation_strand + '.bw')
track_name = '{}_{}_{}'.format(srx, read_length,
orientation_strand)
# Step 2a: Create multiwig track
if 'neg' in bwpath:
negate_values = 'on'
else:
negate_values = 'off'
if os.path.isfile(bwpath) and os.stat(bwpath).st_size:
add_header += 1
if add_header == 1:
# Add header only if there is atleast one
# file with atleast one strand
master_text += multiwig_header + '\n\n'
bigwig_text += indent(
get_bigwigtrack_text(track_name, srx_orientation_key,
'http://ribopod.usc.edu' + bwpath,
negate_values), 2 * INDENT_SPACES)
master_text += '\n\n' + bigwig_text
master_text += '\n\n###############SRXHeader end####################'
return master_text
if __name__ == '__main__':
print(create_trackdb(sys.argv[1], sys.argv[2]))