galaxy-commits
Threads by month
- ----- 2025 -----
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- 15302 discussions
2 new changesets in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/d79a1ad33a03/
changeset: r5510:d79a1ad33a03
user: fubar
date: 2011-05-07 17:56:12
summary: lots of small tweaks and some new picard metrics - Hs and libcomplexity. Includes an option to use the input data genome for a reference where a reference genome is needed - helps prevent new user head scratching - this really should be added (eg) the bwa and other wrappers too?
affected #: 9 files (15.9 KB)
--- a/test-data/picard_output_AsMetrics_indexed_hg18_sorted_pair.html Fri May 06 16:02:25 2011 -0400
+++ b/test-data/picard_output_AsMetrics_indexed_hg18_sorted_pair.html Sat May 07 11:56:12 2011 -0400
@@ -12,10 +12,10 @@
</head><body><div class="document">
-Galaxy tool wrapper run picard_wrapper at 27/04/2011 11:46:40</b><br/><b>Picard log</b><hr/>
-<pre>## executing java -Xmx2g -jar /udd/rerla/galaxy-central/tool-data/shared/jars/CollectAlignmentSummaryMetrics.jar VALIDATION_STRINGENCY=LENIENT ASSUME_SORTED=true ADAPTER_SEQUENCE= IS_BISULFITE_SEQUENCED=false MAX_INSERT_SIZE=100000 OUTPUT=/udd/rerla/galaxy-central/database/job_working_directory/90/dataset_92_files/CollectAlignmentSummaryMetrics.metrics.txt R=/udd/rerla/galaxy-central/database/job_working_directory/90/dataset_92_files/hg18.fasta_fake.fasta TMP_DIR=/tmp INPUT=/tmp/6728746.1.all.q/tmpkzvo-A/database/files/000/dataset_91.dat returned status 1 and stderr:
-[Wed Apr 27 11:46:37 EDT 2011] net.sf.picard.analysis.CollectAlignmentSummaryMetrics MAX_INSERT_SIZE=100000 ADAPTER_SEQUENCE=[AATGATACGGCGACCACCGAGATCTACACTCTTTCCCTACACGACGCTCTTCCGATCT, AGATCGGAAGAGCTCGTATGCCGTCTTCTGCTTG, AATGATACGGCGACCACCGAGATCTACACTCTTTCCCTACACGACGCTCTTCCGATCT, AGATCGGAAGAGCGGTTCAGCAGGAATGCCGAGACCGATCTCGTATGCCGTCTTCTGCTTG, AATGATACGGCGACCACCGAGATCTACACTCTTTCCCTACACGACGCTCTTCCGATCT, AGATCGGAAGAGCACACGTCTGAACTCCAGTCACNNNNNNNNATCTCGTATGCCGTCTTCTGCTTG, IS_BISULFITE_SEQUENCED=false] INPUT=/tmp/6728746.1.all.q/tmpkzvo-A/database/files/000/dataset_91.dat OUTPUT=/udd/rerla/galaxy-central/database/job_working_directory/90/dataset_92_files/CollectAlignmentSummaryMetrics.metrics.txt REFERENCE_SEQUENCE=/udd/rerla/galaxy-central/database/job_working_directory/90/dataset_92_files/hg18.fasta_fake.fasta ASSUME_SORTED=true TMP_DIR=/tmp VALIDATION_STRINGENCY=LENIENT IS_BISULFITE_SEQUENCED=false STOP_AFTER=0 VERBOSITY=INFO QUIET=false COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
-[Wed Apr 27 11:46:40 EDT 2011] net.sf.picard.analysis.CollectAlignmentSummaryMetrics done.
+Galaxy tool wrapper run picard_wrapper at 06/05/2011 22:54:31</b><br/><b>Picard log</b><hr/>
+<pre>## executing java -Xmx2g -jar /udd/rerla/rgalaxy/tool-data/shared/jars/CollectAlignmentSummaryMetrics.jar VALIDATION_STRINGENCY=LENIENT ASSUME_SORTED=true ADAPTER_SEQUENCE= IS_BISULFITE_SEQUENCED=false MAX_INSERT_SIZE=100000 OUTPUT=/udd/rerla/rgalaxy/database/job_working_directory/90/dataset_92_files/CollectAlignmentSummaryMetrics.metrics.txt R=/udd/rerla/rgalaxy/database/job_working_directory/90/dataset_92_files/hg18.fasta_fake.fasta TMP_DIR=/tmp INPUT=/tmp/6728809.1.all.q/tmps-Xqx9/database/files/000/dataset_91.dat returned status 1 and stderr:
+[Fri May 06 22:54:22 EDT 2011] net.sf.picard.analysis.CollectAlignmentSummaryMetrics MAX_INSERT_SIZE=100000 ADAPTER_SEQUENCE=[AATGATACGGCGACCACCGAGATCTACACTCTTTCCCTACACGACGCTCTTCCGATCT, AGATCGGAAGAGCTCGTATGCCGTCTTCTGCTTG, AATGATACGGCGACCACCGAGATCTACACTCTTTCCCTACACGACGCTCTTCCGATCT, AGATCGGAAGAGCGGTTCAGCAGGAATGCCGAGACCGATCTCGTATGCCGTCTTCTGCTTG, AATGATACGGCGACCACCGAGATCTACACTCTTTCCCTACACGACGCTCTTCCGATCT, AGATCGGAAGAGCACACGTCTGAACTCCAGTCACNNNNNNNNATCTCGTATGCCGTCTTCTGCTTG, IS_BISULFITE_SEQUENCED=false] INPUT=/tmp/6728809.1.all.q/tmps-Xqx9/database/files/000/dataset_91.dat OUTPUT=/udd/rerla/rgalaxy/database/job_working_directory/90/dataset_92_files/CollectAlignmentSummaryMetrics.metrics.txt REFERENCE_SEQUENCE=/udd/rerla/rgalaxy/database/job_working_directory/90/dataset_92_files/hg18.fasta_fake.fasta ASSUME_SORTED=true TMP_DIR=/tmp VALIDATION_STRINGENCY=LENIENT IS_BISULFITE_SEQUENCED=false STOP_AFTER=0 VERBOSITY=INFO QUIET=false COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
+[Fri May 06 22:54:30 EDT 2011] net.sf.picard.analysis.CollectAlignmentSummaryMetrics done.
Runtime.totalMemory()=910163968
Exception in thread "main" net.sf.picard.PicardException: Requesting earlier reference sequence: 0 < 1
at net.sf.picard.reference.ReferenceSequenceFileWalker.get(ReferenceSequenceFileWalker.java:78)
--- a/tool_conf.xml.sample Fri May 06 16:02:25 2011 -0400
+++ b/tool_conf.xml.sample Sat May 07 11:56:12 2011 -0400
@@ -246,7 +246,9 @@
<tool file="picard/picard_BamIndexStats.xml" /><tool file="picard/rgPicardASMetrics.xml" /><tool file="picard/rgPicardGCBiasMetrics.xml" />
+ <tool file="picard/rgPicardLibComplexity.xml" /><tool file="picard/rgPicardInsertSize.xml" />
+ <tool file="picard/rgPicardHsMetrics.xml" /><label text="bam/sam Cleaning" id="picard-tools" /><tool file="picard/picard_AddOrReplaceReadGroups.xml" /><tool file="picard/picard_ReorderSam.xml" />
--- a/tools/picard/picard_wrapper.py Fri May 06 16:02:25 2011 -0400
+++ b/tools/picard/picard_wrapper.py Sat May 07 11:56:12 2011 -0400
@@ -8,7 +8,7 @@
see http://www.gnu.org/copyleft/lesser.html
"""
-import optparse, os, sys, subprocess, tempfile, shutil, time
+import optparse, os, sys, subprocess, tempfile, shutil, time, pysam
galhtmlprefix = """<?xml version="1.0" encoding="utf-8" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
@@ -52,11 +52,10 @@
if self.opts.outdir == None:
self.opts.outdir = self.opts.tmpdir # fixmate has no html file eg
assert self.opts.outdir <> None,'## PicardBase needs a temp directory if no output directory passed in'
- self.maxloglines = 100
- self.picname = self.nameMunge(opts.jar)
+ self.picname = self.baseName(opts.jar)
if self.picname.startswith('picard'):
- self.picname = opts.picard_cmd # special case for some tools like replaceheader?
- self.progname = self.nameMunge(arg0)
+ self.picname = opts.picard_cmd # special case for some tools like replaceheader?
+ self.progname = self.baseName(arg0)
self.version = '0.002'
self.delme = [] # list of files to destroy
self.title = opts.title
@@ -72,7 +71,7 @@
self.log_filename = '%s.log' % self.picname
self.metricsOut = os.path.join(opts.outdir,'%s.metrics.txt' % self.picname)
- def nameMunge(self,name=None):
+ def baseName(self,name=None):
return os.path.splitext(os.path.basename(name))[0]
def readLarge(self,fname=None):
@@ -172,7 +171,7 @@
except:
pass
- def prettyPicout(self,transpose=True,maxrows=100):
+ def prettyPicout(self,transpose,maxrows):
"""organize picard outpouts into a report html page
"""
res = []
@@ -181,7 +180,7 @@
except:
r = []
if len(r) > 0:
- res.append('<b>Picard on line resources</b><ul>\n')
+ res.append('<b>Picard on line resources - maxrows=%d</b><ul>\n' % maxrows)
res.append('<li><a href="http://picard.sourceforge.net/index.shtml">Click here for Picard Documentation</a></li>\n')
res.append('<li><a href="http://picard.sourceforge.net/picard-metric-definitions.shtml">Click here for Picard Metrics definitions</a></li></ul><hr/>\n')
if transpose:
@@ -221,19 +220,18 @@
tdat = ['<tr class="d%d"><td>%s</td></tr>\n' % ((i+len(heads)) % 2,x) for i,x in enumerate(dat) if i < maxrows]
missing = len(tdat) - maxrows
if missing > 0:
- tdat.append('<tr><td>...WARNING: %d rows deleted..see raw file %s for entire output</td></tr>' % (missing,os.path.basename(picout)))
+ tdat.append('<tr><td>...WARNING: %d rows deleted..see raw file %s for entire output</td></tr>' % (missing,os.path.basename(self.metricsOut)))
res += tdat
dat = []
res.append('</table>\n')
return res
- def fixPicardOutputs(self,transpose=True,maxloglines=100):
+ def fixPicardOutputs(self,transpose,maxloglines):
"""
picard produces long hard to read tab header files
make them available but present them transposed for readability
"""
self.cleanup() # remove temp files stored in delme
- self.maxloglines = maxloglines
rstyle="""<style type="text/css">
tr.d0 td {background-color: oldlace; color: black;}
tr.d1 td {background-color: aliceblue; color: black;}
@@ -256,7 +254,7 @@
fn = os.path.split(f)[-1]
res.append('<tr><td><a href="%s">%s</a></td></tr>\n' % (fn,fn))
res.append('</table><p/>\n')
- pres = self.prettyPicout(transpose=transpose,maxrows=self.maxloglines)
+ pres = self.prettyPicout(transpose,maxloglines)
if len(pres) > 0:
res += pres
l = open(self.log_filename,'r').readlines()
@@ -264,9 +262,9 @@
if llen > 0:
res.append('<b>Picard log</b><hr/>\n')
rlog = ['<pre>',]
- if llen > self.maxloglines:
- rlog += l[:self.maxloglines]
- rlog.append('\n<b>## WARNING - %d log lines truncated - %s contains entire output' % (llen - self.maxloglines,self.log_filename))
+ if llen > maxloglines:
+ rlog += l[:maxloglines]
+ rlog.append('\n<b>## WARNING - %d log lines truncated - %s contains entire output' % (llen - maxloglines,self.log_filename))
else:
rlog += l
rlog.append('</pre>')
@@ -281,12 +279,82 @@
outf.write('\n')
outf.close()
+ def makePicInterval(self,inbed=None,outf=None):
+ """
+ picard wants bait and target files to have the same header length as the incoming bam/sam
+ a meaningful (ie accurate) representation will fail because of this - so this hack
+ it would be far better to be able to supply the original bed untouched
+ """
+ assert inbed <> None
+ bed = open(inbed,'r').readlines()
+ thead = os.path.join(self.opts.outdir,'tempSamHead.txt')
+ if self.opts.datatype == 'sam':
+ cl = ['samtools view -H -S',self.opts.input,'>',thead]
+ else:
+ cl = ['samtools view -H',self.opts.input,'>',thead]
+ self.runCL(cl=cl,output_dir=self.opts.outdir)
+ head = open(thead,'r').readlines()
+ s = '## got %d rows of header\n' % (len(head))
+ lf = open(self.log_filename,'a')
+ lf.write(s)
+ lf.close()
+ o = open(outf,'w')
+ o.write(''.join(head))
+ o.write(''.join(bed))
+ o.close()
+ return outf
+ def cleanSam(self, insam=None, newsam=None, picardErrors=[],outformat=None):
+ """
+ interesting problem - if paired, must remove mate pair of errors too or we have a new set of errors after cleaning - missing mate pairs!
+ Do the work of removing all the error sequences
+ pysam is cool
+ infile = pysam.Samfile( "-", "r" )
+ outfile = pysam.Samfile( "-", "w", template = infile )
+ for s in infile: outfile.write(s)
+
+ errors from ValidateSameFile.jar look like
+ WARNING: Record 32, Read name SRR006041.1202260, NM tag (nucleotide differences) is missing
+ ERROR: Record 33, Read name SRR006041.1042721, Empty sequence dictionary.
+ ERROR: Record 33, Read name SRR006041.1042721, RG ID on SAMRecord not found in header: SRR006041
+
+ """
+ assert os.path.isfile(insam), 'rgPicardValidate cleansam needs an input sam file - cannot find %s' % insam
+ assert newsam <> None, 'rgPicardValidate cleansam needs an output new sam file path'
+ removeNames = [x.split(',')[1].replace(' Read name ','') for x in picardErrors if len(x.split(',')) > 2]
+ remDict = dict(zip(removeNames,range(len(removeNames))))
+ infile = pysam.Samfile(insam,'rb')
+ info = 'found %d error sequences in picardErrors, %d unique' % (len(removeNames),len(remDict))
+ if len(removeNames) > 0:
+ outfile = pysam.Samfile(newsam,'wb',template=infile) # template must be an open file
+ i = 0
+ j = 0
+ for row in infile:
+ dropme = remDict.get(row.qname,None) # keep if None
+ if not dropme:
+ outfile.write(row)
+ j += 1
+ else: # discard
+ i += 1
+ info = '%s\n%s' % (info, 'Discarded %d lines writing %d to %s from %s' % (i,j,newsam,insam))
+ outfile.close()
+ infile.close()
+ else: # we really want a nullop or a simple pointer copy
+ infile.close()
+ if newsam:
+ shutil.copy(insam,newsam)
+ lf = open(self.log_filename,'a')
+ lf.write(info)
+ lf.write('\n')
+ lf.close()
+
+
def __main__():
doFix = False # tools returning htmlfile don't need this
doTranspose = True # default
+ maxloglines = 100 # default
#Parse Command Line
op = optparse.OptionParser()
# All tools
@@ -323,7 +391,7 @@
# CollectAlignmentSummaryMetrics
op.add_option('', '--maxinsert', default="20")
op.add_option('', '--adaptors', action='append', type="string")
- # FixMateInformation
+ # FixMateInformation and validate
op.add_option('','--newformat', default='bam')
# CollectGcBiasMetrics
op.add_option('', '--windowsize', default='100')
@@ -349,16 +417,25 @@
op.add_option('','--minid', default="5")
op.add_option('','--maxdiff', default="0.03")
op.add_option('','--minmeanq', default="20")
-
+ #hsmetrics
+ op.add_option('','--baitbed', default=None)
+ op.add_option('','--targetbed', default=None)
+ #validate
+ op.add_option('','--ignoreflags', action='append', type="string")
+ op.add_option('','--maxerrors', default=None)
+ op.add_option('','--datatype', default=None)
+ op.add_option('','--bamout', default=None)
+ op.add_option('','--samout', default=None)
opts, args = op.parse_args()
opts.sortme = opts.assumesorted == 'false'
assert opts.input <> None
# need to add
- # output version # of tool
+ # instance that does all the work
pic = PicardBase(opts,sys.argv[0])
tmp_dir = opts.outdir
+ haveTempout = False # we use this where sam output is an option
# set ref and dict files to use (create if necessary)
ref_file_name = opts.ref
@@ -373,7 +450,7 @@
os.symlink( opts.ref_file, ref_file_name )
cl = ['REFERENCE=%s' % ref_file_name]
cl.append('OUTPUT=%s' % dict_file_name)
- cl.append('URI=%s' % os.path.basename( ref_file ))
+ cl.append('URI=%s' % os.path.basename( opts.ref_file ))
cl.append('TRUNCATE_NAMES_AT_WHITESPACE=%s' % opts.trunc_names)
if opts.species_name:
cl.append('SPECIES=%s' % opts.species_name)
@@ -429,7 +506,7 @@
elif pic.picname == 'EstimateLibraryComplexity':
cl.append('I=%s' % opts.input)
cl.append('O=%s' % pic.metricsOut)
- if float(sopts.minid) > 0:
+ if float(opts.minid) > 0:
cl.append('MIN_IDENTICAL_BASES=%s' % opts.minid)
if float(opts.maxdiff) > 0.0:
cl.append('MAX_DIFF_RATE=%s' % opts.maxdiff)
@@ -439,13 +516,11 @@
cl.append('READ_NAME_REGEX="%s"' % opts.readregex)
if float(opts.optdupdist) > 0:
cl.append('OPTICAL_DUPLICATE_PIXEL_DISTANCE=%s' % opts.optdupdist)
- self.runPic(opts.jar,cl)
-
-
+ pic.runPic(opts.jar,cl)
elif pic.picname == 'CollectAlignmentSummaryMetrics':
# Why do we do this fakefasta thing? Because we need NO fai to be available or picard barfs unless it has the same length as the input data.
- # why? Dunno
+ # why? Dunno Seems to work without complaining if the .bai file is AWOL....
fakefasta = os.path.join(opts.outdir,'%s_fake.fasta' % os.path.basename(ref_file_name))
try:
os.symlink(ref_file_name,fakefasta)
@@ -468,8 +543,7 @@
pic.delme.append(fakeinput)
cl.append('INPUT=%s' % fakeinput)
else:
- cl.append('INPUT=%s' % os.path.abspath(opts.input))
-
+ cl.append('INPUT=%s' % os.path.abspath(opts.input))
pic.runPic(opts.jar,cl)
@@ -539,8 +613,7 @@
lf.write(stdouts)
lf.write('\n')
lf.close()
-
-
+
elif pic.picname == 'MarkDuplicates':
# assume sorted even if header says otherwise
cl.append('ASSUME_SORTED=%s' % (opts.assumesorted))
@@ -563,14 +636,7 @@
cl.append('O=%s' % tempout)
cl.append('SORT_ORDER=%s' % opts.sortorder)
pic.runPic(opts.jar,cl)
- # Picard tool produced intermediate bam file. Depending on the
- # desired format, we either just move to final location or create
- # a sam version of it.
- if opts.newformat == 'sam':
- tlog, tempsam = pic.bamToSam( tempout, opts.outdir )
- shutil.move(tempsam,os.path.abspath(opts.output))
- else:
- shutil.move(tempout, os.path.abspath(opts.output))
+ haveTempout = True
elif pic.picname == 'ReorderSam':
# input
@@ -596,13 +662,84 @@
if opts.output_format == 'sam':
tlog,newsam = pic.bamToSam(tempout,opts.tmpdir)
shutil.move(newsam,opts.output)
- else:
- shutil.move(tempout,opts.output)
+ else:
+ shutil.move(tempout,opts.output)
+
+ elif pic.picname == "CalculateHsMetrics":
+ maxloglines = 100
+ baitfname = os.path.join(opts.outdir,'rgPicardHsMetrics.bait')
+ targetfname = os.path.join(opts.outdir,'rgPicardHsMetrics.target')
+ baitf = pic.makePicInterval(opts.baitbed,baitfname)
+ if opts.targetbed == opts.baitbed: # same file sometimes
+ targetf = baitf
+ else:
+ targetf = pic.makePicInterval(opts.targetbed,targetfname)
+ cl.append('BAIT_INTERVALS=%s' % baitf)
+ cl.append('TARGET_INTERVALS=%s' % targetf)
+ cl.append('INPUT=%s' % os.path.abspath(opts.input))
+ cl.append('OUTPUT=%s' % pic.metricsOut)
+ cl.append('TMP_DIR=%s' % opts.tmpdir)
+ pic.runPic(opts.jar,cl)
+
+ elif pic.picname == "ValidateSamFile":
+ doTranspose = False
+ sortedfile = os.path.join(opts.outdir,'rgValidate.sorted')
+ stf = open(pic.log_filename,'w')
+ tlog = None
+ if opts.datatype == 'sam': # need to work with a bam
+ tlog,tempbam = pic.samToBam(opts.input,opts.outdir)
+ try:
+ tlog = pic.sortSam(tempbam,sortedfile,opts.outdir)
+ except:
+ print '## exception on sorting sam file %s' % opts.input
+ else: # is already bam
+ try:
+ tlog = pic.sortSam(opts.input,sortedfile,opts.outdir)
+ except: # bug - [bam_sort_core] not being ignored - TODO fixme
+ print '## exception on sorting bam file %s' % opts.input
+ if tlog:
+ print '##tlog=',tlog
+ stf.write(tlog)
+ stf.write('\n')
+ sortedfile = '%s.bam' % sortedfile # samtools does that
+ cl.append('O=%s' % pic.metricsOut)
+ cl.append('TMP_DIR=%s' % opts.tmpdir)
+ cl.append('I=%s' % sortedfile)
+ opts.maxerrors = '99999999'
+ cl.append('MAX_OUTPUT=%s' % opts.maxerrors)
+ if opts.ignoreflags[0] <> 'None': # picard error values to ignore
+ igs = ['IGNORE=%s' % x for x in opts.ignoreflags if x <> 'None']
+ cl.append(' '.join(igs))
+ if opts.bisulphite.lower() <> 'false':
+ cl.append('IS_BISULFITE_SEQUENCED=true')
+ if opts.ref <> None or opts.ref_file <> None:
+ cl.append('R=%s' % ref_file_name)
+ pic.runPic(opts.jar,cl)
+ if opts.datatype == 'sam':
+ pic.delme.append(tempbam)
+ newsam = opts.output
+ outformat = 'bam'
+ if opts.newformat == 'sam':
+ outformat = 'sam'
+ pe = open(pic.metricsOut,'r').readlines()
+ pic.cleanSam(insam=sortedfile, newsam=newsam, picardErrors=pe,outformat=outformat)
+ pic.delme.append(sortedfile) # not wanted
+ stf.close()
+ pic.cleanup()
else:
print >> sys.stderr,'picard.py got an unknown tool name - %s' % pic.picname
sys.exit(1)
+ if haveTempout:
+ # Some Picard tools produced a potentially intermediate bam file.
+ # Either just move to final location or create sam
+ if opts.newformat == 'sam':
+ tlog, tempsam = pic.bamToSam( tempout, opts.outdir )
+ shutil.move(tempsam,os.path.abspath(opts.output))
+ else:
+ shutil.move(tempout, os.path.abspath(opts.output))
if opts.htmlout <> None or doFix: # return a pretty html page
- pic.fixPicardOutputs(transpose=doTranspose,maxloglines=100)
+ pic.fixPicardOutputs(transpose=doTranspose,maxloglines=maxloglines)
if __name__=="__main__": __main__()
+
--- a/tools/picard/rgPicardASMetrics.xml Fri May 06 16:02:25 2011 -0400
+++ b/tools/picard/rgPicardASMetrics.xml Sat May 07 11:56:12 2011 -0400
@@ -17,17 +17,26 @@
help="If the select list is empty, you need to upload or import some aligned short read data from a shared library"/><param name="out_prefix" value="Picard Alignment Summary Metrics" type="text"
label="Title for the output file - use this remind you what the job was for" size="80" />
- <conditional name="genomeSource">
- <param name="refGenomeSource" type="select" help="If in doubt, choose built-in and read Picard/Samtools documentation"
- label="Align to reference genome - built-in or from current history?">
- <option value="indexed">Use a built in reference sequence</option>
- <option value="history">Use a reference genome (fasta format) from my history</option>
+
+ <conditional name="genomeSource">
+
+ <param name="refGenomeSource" type="select" help="This tool needs a reference genome. Default is usually right"
+ label="Align to which reference genome? - default, built-in or choose from current history">
+ <option value="default" selected="true">Default - use the input data genome/build</option>
+ <option value="indexed">Select a different built-in genome</option>
+ <option value="history">Use a genome (fasta format) from my history</option></param>
+ <when value="default">
+ <param name="index" type="select" label="Select a default reference genome">
+ <options from_data_table="all_fasta">
+ <filter type="data_meta" ref="input_file" key="dbkey" column="dbkey" multiple="True" separator="," />
+ <validator type="no_options" message="No reference build available for selected input" />
+ </options>
+ </param>
+ </when><when value="indexed">
- <param name="index" type="select" label="Select a reference genome">
- <options from_data_table="all_fasta">
- <filter type="data_meta" ref="input_file" key="dbkey" column="dbkey" multiple="True" separator=","/>
- <validator type="no_options" message="No reference sequences are available for the build associated with the selected input data"/>
+ <param name="index" type="select" label="Select a built-in reference genome" >
+ <options from_data_table="all_fasta"></options></param></when>
@@ -35,7 +44,6 @@
<param name="ownFile" type="data" format="fasta" metadata_name="dbkey" label="Select a reference genome from history" /></when></conditional>
-
<param name="sorted" type="boolean" label="Assume the input file is already sorted" checked="true" truevalue="true" falsevalue="false"/><param name="bisulphite" type="boolean" label="Input file contains Bisulphite sequenced reads" checked="false" falsevalue="false" truevalue="true" /><param name="adaptors" value="" type="text" area="true" label="Adapter sequences - one per line if multiple" size="5x120" />
@@ -191,8 +199,10 @@
Written by and copyright Ross Lazarus, ross.lazarus at gmail etc, September 2010
-All rgenetics artifacts are available licensed under the LGPL
+All rgenetics artefacts are available licensed under the LGPL_
Other dependencies are licensed at the author's discretion - please see each individual package for details
+
+ .. _LGPL: http://www.gnu.org/copyleft/lesser.html
</help></tool>
--- a/tools/picard/rgPicardFixMate.xml Fri May 06 16:02:25 2011 -0400
+++ b/tools/picard/rgPicardFixMate.xml Sat May 07 11:56:12 2011 -0400
@@ -1,5 +1,5 @@
<tool name="Paired Read Mate Fixer:" id="rgPicFixMate" version="0.01">
- <description>(Picard)</description>
+ <description>for paired data</description><command interpreter="python">
picard_wrapper.py -i "$input_file" -o "$out_file" --tmpdir "${__new_file_path__}" -n "$out_prefix"
--newformat "$newformat" -j "${GALAXY_DATA_INDEX_DIR}/shared/jars/FixMateInformation.jar" --sortorder "$sortOrder"
@@ -82,7 +82,7 @@
**From the Picard documentation**
-.. csv-table:: GC Bias Doc
+.. csv-table:: Fixmate
:header-rows: 1
@@ -106,7 +106,11 @@
All the Picard tools are freely available and are documented
at http://picard.sourceforge.net/command-line-overview.shtml#CollectAlignmentS…
-Here, you can apply Picard tools through Galaxy which might be easier than through the native Picard command line interface.
+Written by and copyright Ross Lazarus, ross.lazarus at gmail etc, September 2010
+Code cleaned up and the ugliest hacks repaired by Raphael Lullis.
+Kelly Vincent wrote the first version of picard_wrapper.py that now incorporates that code.
+
+It takes a village of programmers to wrap a picard tool
-----
@@ -116,14 +120,10 @@
This Galaxy tool is a component of the rgenetics toolkit.
-Written by and copyright Ross Lazarus, ross.lazarus at gmail etc, September 2010
-Code cleaned up and the ugliest hacks repaired by Raphael Lullis.
-Kelly Vincent wrote the first version of picard_wrapper.py that now incorporates that code.
-
-It takes a village of programmers to wrap a picard tool
-
-All rgenetics artifacts are available licensed under the LGPL
+All rgenetics artefacts are available licensed under the LGPL_
Other dependencies are licensed at the author's discretion - please see each individual package for details
+
+ .. _LGPL: http://www.gnu.org/copyleft/lesser.html
</help></tool>
--- a/tools/picard/rgPicardGCBiasMetrics.xml Fri May 06 16:02:25 2011 -0400
+++ b/tools/picard/rgPicardGCBiasMetrics.xml Sat May 07 11:56:12 2011 -0400
@@ -17,18 +17,24 @@
help="If the select list is empty, you need to upload or import some aligned short read data from a shared library"/><param name="out_prefix" value="Short Read GC Bias Metrics" type="text"
label="Title for the output file - use this remind you what the job was for" size="80" />
- <conditional name="genomeSource">
- <param name="refGenomeSource" type="select" help="If in doubt, choose built-in and read Picard/Samtools documentation"
- label="Align to reference genome - built-in or from current history?">
- <option value="indexed">Align to input data 'dbkey' reference genome</option>
- <option value="history">Use a genome (fasta format) from my history</option>
+ <conditional name="genomeSource">
+ <param name="refGenomeSource" type="select" help="This tool needs a reference genome. Default is usually right"
+ label="Align to which reference genome? - default, built-in or choose from current history">
+ <option value="default" selected="true">Default - use the input data genome build</option>
+ <option value="indexed">Select a different built-in genome </option>
+ <option value="history">Use a genome (fasta format) from my history </option></param>
+ <when value="default">
+ <param name="index" type="select" label="Select a default reference genome">
+ <options from_data_table="all_fasta">
+ <filter type="data_meta" ref="input_file" key="dbkey" column="dbkey" multiple="True" separator=","/>
+ <validator type="no_options" message="No reference build available for the selected input data" />
+ </options>
+ </param>
+ </when><when value="indexed">
- <param name="index" type="select" label="Select a reference genome">
- <options from_data_table="all_fasta">
- <filter type="data_meta" ref="input_file" key="dbkey" column="dbkey" multiple="True" separator=","/>
- <validator type="no_options" message="No reference sequences are available for the build associated with the selected input data"/>
- </options>
+ <param name="index" type="select" label="Select a built-in reference genome">
+ <options from_data_table="all_fasta"/></param></when><when value="history">
@@ -168,9 +174,10 @@
This Galaxy tool is a component of the rgenetics toolkit.
Written by and copyright Ross Lazarus, ross.lazarus at gmail etc, September 2010
-
-All rgenetics artifacts are available licensed under the LGPL
+All rgenetics artefacts are available licensed under the LGPL_
Other dependencies are licensed at the author's discretion - please see each individual package for details
+
+ .. _LGPL: http://www.gnu.org/copyleft/lesser.html
</help></tool>
--- a/tools/picard/rgPicardHsMetrics.xml Fri May 06 16:02:25 2011 -0400
+++ b/tools/picard/rgPicardHsMetrics.xml Sat May 07 11:56:12 2011 -0400
@@ -1,10 +1,10 @@
<tool name="Sam/bam Hybrid Selection Metrics:" id="PicardHsMetrics" version="0.01">
- <description>(Picard)</description>
+ <description>For (eg exome) targetted data</description><command interpreter="python">
- rgPicardHsMetrics.py -i $input_file -d $html_file.files_path -o $html_file
- -b $bait_bed -t $target_bed -n "$out_prefix" --tmpdir "${__new_file_path__}"
- -j ${GALAXY_DATA_INDEX_DIR}/shared/jars/CalculateHsMetrics.jar -y $input_file.ext
+ picard_wrapper.py -i "$input_file" -d "$html_file.files_path" -t "$html_file" --datatype "$input_file.ext"
+ --baitbed "$bait_bed" --targetbed "$target_bed" -n "$out_prefix" --tmpdir "${__new_file_path__}"
+ -j "${GALAXY_DATA_INDEX_DIR}/shared/jars/CalculateHsMetrics.jar" -x "$maxheap"
</command><requirements><requirement type="package">picard</requirement></requirements>
@@ -13,6 +13,13 @@
<param name="out_prefix" value="Picard HS Metrics" type="text" label="Title for the output file - to remind you what the job was for" size="80" /><param name="bait_bed" type="data" format="interval" label="Bait intervals: Sequences for bait in the design - ucsc BED" size="80" /><param name="target_bed" type="data" format="interval" label="Target intervals: Sequences for targets in the design - ucsc BED" size="80" />
+ <param name="maxheap" type="select"
+ help="If in doubt, try the default. If it fails with a complaint about java heap size, try increasing it please - larger jobs will require your own hardware."
+ label="Java heap size">
+ <option value="4G" selected = "true">4GB default </option>
+ <option value="8G" >8GB use if 4GB fails</option>
+ <option value="16G">16GB - try this if 8GB fails</option>
+ </param></inputs><outputs><data format="html" name="html_file" label="${out_prefix}.html" />
@@ -23,6 +30,7 @@
<param name="input_file" value="picard_input_summary_alignment_stats.sam" ftype="sam" /><param name="bait_bed" value="picard_input_bait.bed" /><param name="target_bed" value="picard_input_bait.bed" />
+ <param name="maxheap" value="8G" /><output name="html_file" file="picard_output_hs_transposed_summary_alignment_stats.html" ftype="html" lines_diff="212"/></test></tests>
@@ -140,10 +148,10 @@
This is part of the rgenetics toolkit.
Written by Ross Lazarus 2010
-
-Licensed under the LGPL
-All rgenetics artifacts are available licensed under the LGPL
+All rgenetics artefacts are available licensed under the LGPL_
Other dependencies are licensed at the author's discretion - please see each individual package for details
+
+ .. _LGPL: http://www.gnu.org/copyleft/lesser.html
</help></tool>
--- a/tools/picard/rgPicardInsertSize.xml Fri May 06 16:02:25 2011 -0400
+++ b/tools/picard/rgPicardInsertSize.xml Sat May 07 11:56:12 2011 -0400
@@ -1,5 +1,5 @@
<tool name="Insertion size metrics:" id="rgPicInsertSize" version="0.01">
- <description>(Picard)</description>
+ <description>for PAIRED data</description><command interpreter="python">
picard_wrapper.py -i "$input_file" -n "$out_prefix" --tmpdir "${__new_file_path__}" --taillimit "$tailLimit"
--histwidth "$histWidth" --minpct "$minPct"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/picard/rgPicardLibComplexity.xml Sat May 07 11:56:12 2011 -0400
@@ -0,0 +1,143 @@
+<tool name="Estimate Library Complexity:" id="rgEstLibComp" version="0.01">
+ <description>(Picard)</description>
+ <command interpreter="python">
+ picard_wrapper.py -i "$input_file" -n "$out_prefix" --tmpdir "${__new_file_path__}" --minid "$minIDbases"
+ --maxdiff "$maxDiff" --minmeanq "$minMeanQ" --readregex "$readRegex" --optdupdist "$optDupeDist"
+ -j "${GALAXY_DATA_INDEX_DIR}/shared/jars/EstimateLibraryComplexity.jar" -d "$html_file.files_path" -t "$html_file"
+ </command>
+ <inputs>
+ <param format="bam,sam" name="input_file" type="data" label="Input: sam or bam format short read data in your current history"
+ help="If the select list is empty, you need to upload or import some aligned short read data from a shared library"/>
+ <param name="out_prefix" value="Library Complexity" type="text"
+ label="Title for the output file - use this remind you what the job was for" size="80" />
+ <param name="minIDbases" value="5" type="integer" label="Minimum identical bases at starts of reads for grouping" size="5"
+ help="Total_reads / 4^max_id_bases reads will be compared at a time. Lower numbers = more accurate results and exponentially more time/ram" />
+ <param name="maxDiff" value="0.03" type="float"
+ label="Maximum difference rate for identical reads" size="5"
+ help="The maximum rate of differences between two reads to call them identical" />
+ <param name="minMeanQ" value="20" type="integer"
+ label="Minimum percentage" size="5"
+ help="The minimum mean quality of bases in a read pair. Lower average quality reads filtered out from all calculations" />
+ <param name="readRegex" value="[a-zA-Z0-9]+:[0-9]:([0-9]+):([0-9]+):([0-9]+).*" type="text" size="120"
+ label="Regular expression that can be used to parse read names in the incoming SAM file"
+ help="Names are parsed to extract: tile/region, x coordinate and y coordinate, to estimate optical duplication rate" >
+ <sanitizer>
+ <valid initial="string.printable">
+ <remove value="'"/>
+ </valid>
+ <mapping initial="none">
+ <add source="'" target="__sq__"/>
+ </mapping>
+ </sanitizer>
+ </param>
+ <param name="optDupeDist" value="100" type="text"
+ label="The maximum offset between two duplicte clusters in order to consider them optical duplicates." size="5"
+ help="e.g. 5-10 pixels. Later Illumina software versions multiply pixel values by 10, in which case 50-100" />
+
+ </inputs>
+ <outputs>
+ <data format="html" name="html_file" label="${out_prefix}_lib_complexity.html"/>
+ </outputs>
+ <tests>
+ <test>
+ <param name="input_file" value="picard_input_tiny.sam" />
+ <param name="out_prefix" value="Library Complexity" />
+ <param name="minIDbases" value="5" />
+ <param name="maxDiff" value="0.03" />
+ <param name="minMeanQ" value="20" />
+ <param name="readRegex" value="[a-zA-Z0-9]+:[0-9]:([0-9]+):([0-9]+):([0-9]+).*" />
+ <param name="optDupeDist" value="100" />
+ <output name="html_file" file="picard_output_estlibcomplexity_tinysam.html" ftype="html" lines_diff="25" />
+ </test>
+ </tests>
+ <help>
+
+.. class:: infomark
+
+**Purpose**
+
+ EstimateLibraryComplexity
+ Attempts to estimate library complexity from sequence alone.
+ Does so by sorting all reads by the first N bases (5 by default) of each read and then
+ comparing reads with the first N bases identical to each other for duplicates. Reads are considered to be
+ duplicates if they match each other with no gaps and an overall mismatch rate less than or equal to MAX_DIFF_RATE (0.03 by default).
+
+ Reads of poor quality are filtered out so as to provide a more accurate estimate.
+ The filtering removes reads with any no-calls in the first N bases or with a mean base quality lower than
+ MIN_MEAN_QUALITY across either the first or second read.
+
+ The algorithm attempts to detect optical duplicates separately from PCR duplicates and excludes these in the
+ calculation of library size. Also, since there is no alignment to screen out technical reads one
+ further filter is applied on the data. After examining all reads a histogram is built of
+ [#reads in duplicate set -> #of duplicate sets];
+ all bins that contain exactly one duplicate set are then removed from the histogram as outliers before library size is estimated.
+
+**Why you might want to use this tool**
+
+ This tool provides a Galaxy interface to one of the Picard tools.
+ If you need to estimate library complexity from sequences, the Picard tool may help.
+
+
+**Note on the Regular Expression**
+
+ (from the Picard docs)
+ This tool requires a valid regular expression to parse out the read names in the incoming SAM or BAM file.
+ These values are used to estimate the rate of optical duplication in order to give a more accurate estimated library size.
+ The regular expression should contain three capture groups for the three variables, in order.
+ Default value: [a-zA-Z0-9]+:[0-9]:([0-9]+):([0-9]+):([0-9]+).*.
+
+
+-----
+
+.. class:: infomark
+
+**From the Picard documentation**
+
+.. csv-table:: Estimate complexity docs
+ :header-rows: 1
+
+ Option Description
+ "INPUT=File","One or more files to combine and estimate library complexity from. Reads can be mapped or unmapped. This option may be specified 0 or more times."
+ "OUTPUT=File","Output file to writes per-library metrics to. Required."
+ "MIN_IDENTICAL_BASES=Integer","The minimum number of bases at the starts of reads that must be identical for reads to be grouped together for duplicate detection. In effect total_reads / 4^max_id_bases reads will be compared at a time, so lower numbers will produce more accurate results but consume exponentially more memory and CPU. Default value: 5."
+ "MAX_DIFF_RATE=Double","The maximum rate of differences between two reads to call them identical. Default value: 0.03. "
+ "MIN_MEAN_QUALITY=Integer","The minimum mean quality of the bases in a read pair for the read to be analyzed. Reads with lower average quality are filtered out and not considered in any calculations. Default value: 20."
+ "READ_NAME_REGEX=String","Regular expression that can be used to parse read names in the incoming SAM file. Read names are parsed to extract three variables: tile/region, x coordinate and y coordinate. These values are used to estimate the rate of optical duplication in order to give a more accurate estimated library size. The regular expression should contain three capture groups for the three variables, in order. Default value: [a-zA-Z0-9]+:[0-9]:([0-9]+):([0-9]+):([0-9]+).*. This option can be set to 'null' to clear the default value."
+ "OPTICAL_DUPLICATE_PIXEL_DISTANCE=Integer","The maximum offset between two duplicte clusters in order to consider them optical duplicates. This should usually be set to some fairly small number (e.g. 5-10 pixels) unless using later versions of the Illumina pipeline that multiply pixel values by 10, in which case 50-100 is more normal. Default value: 100"
+ "CREATE_MD5_FILE=Boolean","Whether to create an MD5 digest for any BAM files created. Default value: false. This option can be set to 'null' to clear the default value. "
+
+
+-----
+
+.. class:: infomark
+
+**Attributions**
+
+Picard is supported through the SamTools project.
+This tool wraps Picard and is supported through the galaxy-bugs mailing list
+Please help us by completing the report form that appears automatically
+if a tool fails unexpectedly when you run it in Galaxy.
+
+All the Picard tools are freely available and are documented
+at http://picard.sourceforge.net/command-line-overview.shtml#CollectInsertSize…
+
+-----
+
+.. class:: infomark
+
+**Copyright**
+
+This Galaxy tool is a component of the rgenetics toolkit.
+
+Written by and copyright Ross Lazarus, ross.lazarus at gmail etc, September 2010
+Code cleaned up and the ugliest hacks repaired by Raphael Lullis
+
+All rgenetics artefacts are available licensed under the LGPL_
+Other dependencies are licensed at the author's discretion - please see each individual package for details
+
+ .. _LGPL: http://www.gnu.org/copyleft/lesser.html
+
+ </help>
+</tool>
+
+
http://bitbucket.org/galaxy/galaxy-central/changeset/3cf3d54e5b28/
changeset: r5511:3cf3d54e5b28
user: fubar
date: 2011-05-07 19:58:35
summary: add test input for hsmetrics
affected #: 1 file (376 bytes)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/picard_input_bait.bed Sat May 07 13:58:35 2011 -0400
@@ -0,0 +1,8 @@
+chr1 1 300 - CCDS635.1_cds_0_0_chr1_67052401_r
+chr2 1 300 - CCDS635.1_cds_1_0_chr1_67060632_r
+chr3 1 300 - CCDS635.1_cds_2_0_chr1_67065091_r
+chr4 1 300 - CCDS635.1_cds_3_0_chr1_67066083_r
+chr5 1 300 - CCDS635.1_cds_4_0_chr1_67071856_r
+chr6 1 300 - CCDS635.1_cds_5_0_chr1_67072262_r
+chr7 1 300 - CCDS635.1_cds_6_0_chr1_67073897_r
+chr8 1 300 - CCDS635.1_cds_7_0_chr1_67075981_r
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: kanwei: trackster: Greatly improve LineTrack performance as it was fetching an unoptimal amount of data, decreasing performance by orders of magnitude
by Bitbucket 06 May '11
by Bitbucket 06 May '11
06 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/43e581afb8a5/
changeset: r5509:43e581afb8a5
user: kanwei
date: 2011-05-06 22:02:25
summary: trackster: Greatly improve LineTrack performance as it was fetching an unoptimal amount of data, decreasing performance by orders of magnitude
affected #: 1 file (333 bytes)
--- a/lib/galaxy/visualization/tracks/data_providers.py Fri May 06 15:47:01 2011 -0400
+++ b/lib/galaxy/visualization/tracks/data_providers.py Fri May 06 16:02:25 2011 -0400
@@ -329,7 +329,11 @@
start = int(start)
end = int(end)
- num_points = 2000
+ # The first zoom level for BBI files is 640. If too much is requested, it will look at each block instead
+ # of summaries. The calculation done is: zoom <> (end-start)/num_points/2.
+ # Thus, the optimal number of points is (end-start)/num_points/2 = 640
+ # num_points = (end-start) / 1280
+ num_points = (end-start) / 1280
if (end - start) < num_points:
num_points = end - start
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: jgoecks: Make Cufflinks wrapper compatible with v1.0.0; new options are not yet implemented.
by Bitbucket 06 May '11
by Bitbucket 06 May '11
06 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/ce6de0047fb8/
changeset: r5508:ce6de0047fb8
user: jgoecks
date: 2011-05-06 21:47:01
summary: Make Cufflinks wrapper compatible with v1.0.0; new options are not yet implemented.
affected #: 9 files (330 bytes)
--- a/test-data/cufflinks_in.sam Fri May 06 14:32:55 2011 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,183 +0,0 @@
-test_mRNA_3_187_51 99 test_chromosome 53 255 75M = 163 0 TACTATTTGACTAGACTGGAGGCGCTTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTCGGACTACG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2
-test_mRNA_4_191_5d 163 test_chromosome 54 255 75M = 167 0 ACTATCTGACGAGACTGGAGGCGCTTGCGACTGAGCTAGGACGTACCATTACGCGGATGACGACTAGGACTACGG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:4
-test_mRNA_5_197_46 97 test_chromosome 55 255 75M = 173 0 CTATCTGACTAGACTCGAGGCGCTTGCGTCTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2
-test_mRNA_6_182_59 99 test_chromosome 56 255 75M = 158 0 TATCTGACTAGACTGGAGGCGCTTGCGACTGAGCTAGGACGTGCCAGTACGGGGATGACGACTAGGACTACGGAC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_8_155_9 163 test_chromosome 58 255 75M = 131 0 TGTGACTAGACTGGAGGCGCTTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_8_197_1 99 test_chromosome 58 255 75M = 173 0 TCTGACTAGACTGGAGGCGCTTGCGACTGAGCTAGGACGTGACACTACGGGGATGGCGACTAGGACTACGGACGG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2
-test_mRNA_9_179_52 163 test_chromosome 59 255 75M = 155 0 CTGACTAGACTGGAGGCGCTCGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_11_190_1a 99 test_chromosome 61 255 75M = 166 0 GACTAGACTGGAGGCGCTTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:0
-test_mRNA_16_194_10 163 test_chromosome 66 255 75M = 170 0 GACTGGATGCGCTTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTCGGACTACGGACGGACTTAAAG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3
-test_mRNA_21_208_24 163 test_chromosome 71 255 75M = 184 0 GAGGCGCTTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:0
-test_mRNA_22_173_62 99 test_chromosome 72 255 75M = 149 0 AGGCGCTTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:0
-test_mRNA_23_186_42 163 test_chromosome 73 255 75M = 162 0 GGCGCTTGTGACTGAGCTAGGACGTGCCACTACGGGGATGAAGACTAGGACTACGGACGGACTTAGAGCGTCAGA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2
-test_mRNA_26_189_30 163 test_chromosome 76 255 75M = 165 0 GCTTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:0
-test_mRNA_28_188_11 99 test_chromosome 78 255 75M = 164 0 TTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGAACGGACTTAGAGCGTCAGATGCAG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_28_206_1f 73 test_chromosome 78 255 75M * 0 0 TTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGACGCAG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_30_231_3c 161 test_chromosome 80 255 75M = 207 0 GCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:0
-test_mRNA_33_223_4e 73 test_chromosome 83 255 75M * 0 0 ACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:0
-test_mRNA_36_146_27 163 test_chromosome 86 255 75M = 122 0 GCGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACAGACGGACTTAGAGCGTCAGATGCAGCGACTGGA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2
-test_mRNA_36_218_12 99 test_chromosome 86 255 75M = 194 0 GAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGCCTTAGAGCGTCAGATGCAGCGACTGGA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_38_199_29 99 test_chromosome 88 255 75M = 175 0 GCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:0
-test_mRNA_39_219_5c 99 test_chromosome 89 255 75M = 195 0 CTAGGACGTCCCACTATGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGGCTGGACTA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3
-test_mRNA_41_236_55 97 test_chromosome 91 255 75M = 212 0 AGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGAATATT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_42_209_25 99 test_chromosome 92 255 75M = 185 0 GGACGTGCCACTACGTGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_44_193_3f 99 test_chromosome 94 255 75M = 169 0 ACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGTCTATTTAG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_44_197_35 99 test_chromosome 94 255 75M = 173 0 ACGTGCAACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_44_225_1e 163 test_chromosome 94 255 75M = 201 0 ACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCGGGTGCAGCGACTGGACTATTTAG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2
-test_mRNA_46_195_17 137 test_chromosome 96 255 75M * 0 0 GTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:0
-test_mRNA_46_232_2f 99 test_chromosome 96 255 75M = 208 0 GTGCCACTACGGGGATGACGACTAGGACTACGGCCGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_48_207_39 73 test_chromosome 98 255 75M * 0 0 GCCCCTACGGGGATGACGACTAGGACTACGGACGGATTTAGACCGTCAGATGCAGCGACTGGACTATTTAGGACG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3
-test_mRNA_48_249_20 161 test_chromosome 98 255 75M = 225 0 GCCACTACGGGGATGACGACTAGGACGACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_50_224_2d 163 test_chromosome 100 255 75M = 200 0 CACTACGAGGATGACGTCTAGGACTACGGACGGACTTAGAGCGTCAGACGCAGCGACTGGACTATTTAGGACGAT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3
-test_mRNA_51_194_47 163 test_chromosome 101 255 75M = 170 0 ACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:0
-test_mRNA_51_194_49 99 test_chromosome 101 255 75M = 170 0 ACTACGGGGATGACGACTAGGCCTACGGATGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2
-test_mRNA_51_237_a 99 test_chromosome 101 255 75M = 213 0 ACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:0
-test_mRNA_51_248_14 97 test_chromosome 101 255 75M = 224 0 ACTACGGGGATGACGACGAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGAACTTTTTAGGACGATC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3
-test_mRNA_52_261_1b 97 test_chromosome 102 255 75M = 237 0 CTACGGGAATGACGACTAGGGCTACGGAGGGACTTACAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:4
-test_mRNA_53_212_19 99 test_chromosome 103 255 75M = 188 0 TACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGAATATTTAGGACGATCGG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_53_272_5a 161 test_chromosome 103 255 75M = 248 0 TACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:0
-test_mRNA_56_183_56 99 test_chromosome 106 255 75M = 159 0 GGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTGGGACGATCGGACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_57_231_8 99 test_chromosome 107 255 75M = 207 0 GGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCACCGACTGGACTATTTAGGACGATCGGACTG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_58_218_16 163 test_chromosome 108 255 75M = 194 0 GGATGACGACTAGGACTACGGACGGACTTAGAACGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_58_220_3d 163 test_chromosome 108 255 75M = 196 0 GGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:0
-test_mRNA_58_234_7 163 test_chromosome 108 255 75M = 210 0 GGATGACGCCTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_63_229_4c 163 test_chromosome 113 255 75M = 205 0 ACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGGGACTGGACTATTTAGGACGATCGGACTGAGGAGG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_65_238_2e 99 test_chromosome 115 255 75M = 214 0 GACTAGGACTACGGACGGACTTAGAGCGTCAGAAGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_69_229_23 163 test_chromosome 119 255 75M = 205 0 AGGACTACGGACGGACTTATAGGGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2
-test_mRNA_36_146_27 83 test_chromosome 122 255 75M = 86 0 ACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGTGCAGTAGGT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2
-test_mRNA_72_258_4 163 test_chromosome 122 255 75M = 234 0 ACTACGGACGGACTTAGAGCGTCAGATGCAGCAACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_73_240_34 99 test_chromosome 123 255 75M = 216 0 CTACGGACGGACTTAGAGCGTCAGATGCAGCGAATGGACTATTTAGGACGCTCGGACTGAGGAGGGCAGTAGGAC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2
-test_mRNA_73_259_5e 99 test_chromosome 123 255 75M = 235 0 CTACGGACGGACTTAGAGCGTCAGATGCTGCGACTGGACTATTTGGGACGATCGGACTGAGGAGGGCAGTAGGAC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2
-test_mRNA_75_204_54 73 test_chromosome 125 255 75M * 0 0 ACGGACGGACTTCGAGCCTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2
-test_mRNA_75_235_21 73 test_chromosome 125 255 75M * 0 0 ACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGCACGATCGGACTGAGGAGGGCAGTAGAACGT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3
-test_mRNA_75_277_3b 97 test_chromosome 125 255 75M = 353 0 ACGGACGGACTTAAAGCTTCAGATGCAGCGACAGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3
-test_mRNA_77_256_2c 73 test_chromosome 127 255 75M * 0 0 GGACGGACTTAGAGCATCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_78_276_4b 97 test_chromosome 128 255 75M = 352 0 GACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGGCGCTAC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_79_256_31 137 test_chromosome 129 255 75M * 0 0 ACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:0
-test_mRNA_81_228_3a 163 test_chromosome 131 255 75M = 204 0 GGACTGAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGTAGTAGGACGCTACGTA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2
-test_mRNA_81_245_4d 163 test_chromosome 131 255 75M = 221 0 GGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGATGAGGGCAGTAGGACGCTACGTA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_8_155_9 83 test_chromosome 131 255 75M = 58 0 GGACTTCGAGCGTCAGATGCAGCGACTGTACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2
-test_mRNA_82_255_2 137 test_chromosome 132 255 75M * 0 0 GACTTAGAGCGTCAGATGCAGCGACTGGACTTTTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTAT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_82_271_58 99 test_chromosome 132 255 75M = 247 0 GACTTAGAGCGTCAGTTGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTAT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_85_268_53 99 test_chromosome 135 255 75M = 244 0 TTAGTGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_87_250_57 163 test_chromosome 137 255 75M = 226 0 AGAGCGTCAGATGCAGAGACTGGACTATTTAGGACGATCGGACTGAGGAGTGCAGTAGGACGCTACGTATTTGGC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2
-test_mRNA_87_279_5f 161 test_chromosome 137 255 75M = 355 0 AGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACCGAGGAGGGCAGTAGGACGCTACGTATTTGGC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_88_257_50 137 test_chromosome 138 255 75M * 0 0 GAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:0
-test_mRNA_89_230_b 163 test_chromosome 139 255 75M = 206 0 AGCGTCAGGTGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_89_245_15 99 test_chromosome 139 255 75M = 221 0 AGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:0
-test_mRNA_89_267_32 163 test_chromosome 139 255 75M = 243 0 AGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGAGTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2
-test_mRNA_91_256_41 73 test_chromosome 141 255 75M * 0 0 CGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:0
-test_mRNA_92_250_44 99 test_chromosome 142 255 75M = 226 0 GTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:0
-test_mRNA_92_266_43 99 test_chromosome 142 255 75M = 242 0 GTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTCAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_96_238_3 163 test_chromosome 146 255 75M = 214 0 GATGCAGCGACTGGACTATTTAGGACGATCGGACGGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGACC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3
-test_mRNA_97_275_26 97 test_chromosome 147 255 75M = 351 0 ATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_22_173_62 147 test_chromosome 149 255 75M = 72 0 GCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTAC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_103_284_2a 161 test_chromosome 153 255 75M = 360 0 CGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_104_278_3e 161 test_chromosome 154 255 75M = 354 0 GACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTTTTTGGCGCGCGGCCCTACGGCTG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2
-test_mRNA_105_266_13 163 test_chromosome 155 255 75M = 242 0 ACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_105_276_c 161 test_chromosome 155 255 75M = 352 0 ACTGGACTATTTAGGACGATCGGACTGAGGAAGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2
-test_mRNA_9_179_52 83 test_chromosome 155 255 75M = 59 0 ACTGGACCATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2
-test_mRNA_106_253_45 137 test_chromosome 156 255 75M * 0 0 CTGGACTATTTAGGTCGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2
-test_mRNA_107_286_5 161 test_chromosome 157 255 75M = 362 0 TGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGCATTTGGCGCGCGGCCCTACGGCTGAGC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2
-test_mRNA_6_182_59 147 test_chromosome 158 255 75M = 56 0 GGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_56_183_56 147 test_chromosome 159 255 75M = 106 0 GACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_110_267_22 163 test_chromosome 160 255 75M = 243 0 ACTAGTTAGGGCGATCGGACTGAGGAGGGCAGTAGGACGCTACGTAGTTGGCGCGCGGCCCTACGACTGAGCGTC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:5
-test_mRNA_110_271_28 99 test_chromosome 160 255 75M = 247 0 ACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_111_297_61 161 test_chromosome 161 255 75M = 373 0 CTATTTAGGACGATCGGACTGGGGAGGGCAGTAGGACGCTACGGATTTGGCGCGCGGCCCTACGGCTGAGCGTCG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3
-test_mRNA_23_186_42 83 test_chromosome 162 255 75M = 73 0 TATTTAGGACGATCGGACGGAGGAGGGCAGAAGGACGCTACGTATTTGGCGCGCGGCCCTACGACTGAGCGTCGA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:4
-test_mRNA_3_187_51 147 test_chromosome 163 255 75M = 53 0 ATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_114_277_5b 161 test_chromosome 164 255 75M = 353 0 TTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGCCTGAGCGTCGAGC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2
-test_mRNA_28_188_11 147 test_chromosome 164 255 75M = 78 0 TTTAGGACGATCGGACTGAGGAAGGCAGTAGGACGCTTCGTATTTGGCGCGAGGCCCTACGGCTGAGCGTCGAGC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:4
-test_mRNA_26_189_30 83 test_chromosome 165 255 75M = 76 0 TTAGGACGATCGGACTGAGGAGGGCAGTAGGACGGTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2
-test_mRNA_33_189_4a 89 test_chromosome 165 255 75M * 0 0 TTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACCTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGGGCT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3
-test_mRNA_116_271_2b 163 test_chromosome 166 255 75M = 247 0 TAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_116_295_63 161 test_chromosome 166 255 75M = 371 0 TAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_11_190_1a 147 test_chromosome 166 255 75M = 61 0 TAGGTCGATGGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGTGGCCCTACGGCTGAGCGTCGAGCTT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:4
-test_mRNA_4_191_5d 83 test_chromosome 167 255 75M = 54 0 AGGACGATCGGACTGAGTAGGGCAGTAGGACACTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3
-test_mRNA_118_297_f 161 test_chromosome 168 255 75M = 373 0 GGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_44_193_3f 147 test_chromosome 169 255 75M = 94 0 GACGATCGGACTGGGGAGAGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3
-test_mRNA_16_194_10 83 test_chromosome 170 255 75M = 66 0 ACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_51_194_47 83 test_chromosome 170 255 75M = 101 0 ACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_51_194_49 147 test_chromosome 170 255 75M = 101 0 ACGTTCGGACTGAGGAGGGCAGTAGGACGCCACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:4
-test_mRNA_122_299_6 161 test_chromosome 172 255 75M = 375 0 GATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_44_197_35 147 test_chromosome 173 255 75M = 94 0 ATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGATCGTCGAGCTTGCGATAC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2
-test_mRNA_5_197_46 145 test_chromosome 173 255 75M = 55 0 ATCGGACGGAGGAGGGCAGTAGGACGCTACGTATTTGGCGGGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATAC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3
-test_mRNA_8_197_1 147 test_chromosome 173 255 75M = 58 0 ATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATAC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_125_280_48 97 test_chromosome 175 255 75M = 356 0 CGGACTGAGGAGGGCAGTAGGACGCTATGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGAAACGC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3
-test_mRNA_125_293_60 161 test_chromosome 175 255 75M = 369 0 CGGACTGAGGAGGGCAGTAGGACGCTATGTATTTGGCGCGCGGCCCTACGGCTGAGCTTCGAGGTTGCGATACGC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:4
-test_mRNA_38_199_29 147 test_chromosome 175 255 75M = 88 0 CGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATACGC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_126_282_18 161 test_chromosome 176 255 75M = 358 0 GGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATACGCC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1
-test_mRNA_131_260_33 99 test_chromosome 181 255 70M100N5M = 236 0 GAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATACGCCACTAT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1 XS:A:+ NS:i:0
-test_mRNA_21_208_24 83 test_chromosome 184 255 67M100N8M = 71 0 GAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGCCTGAGCGTCGAGCTTGCGATACGCCACTATTAC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2 XS:A:+ NS:i:0
-test_mRNA_42_209_25 147 test_chromosome 185 255 66M100N9M = 92 0 AGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATACGCCACTATTACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1 XS:A:+ NS:i:0
-test_mRNA_53_212_19 147 test_chromosome 188 255 63M100N12M = 103 0 GCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATACGCCACTATTTCTTTA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2 XS:A:+ NS:i:1
-test_mRNA_36_218_12 147 test_chromosome 194 255 57M100N18M = 86 0 GGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATACGCCACTATTACTTTATTATCT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1 XS:A:+ NS:i:0
-test_mRNA_58_218_16 83 test_chromosome 194 255 57M100N18M = 108 0 GGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATACGCCACTATTACTTTATTATCT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1 XS:A:+ NS:i:0
-test_mRNA_145_300_37 163 test_chromosome 195 255 56M100N19M = 376 0 GACGCTACGTATTTGGCGCGGGGCCCTATGGCTGAGCGTCGAGCTTGCGATACGCCACTATTACTTTAGTATATT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:5 XS:A:+ NS:i:2
-test_mRNA_39_219_5c 147 test_chromosome 195 255 56M100N19M = 89 0 GACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCCAGCTTGCGATACGCCACTATTACTTTATTATCTT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2 XS:A:+ NS:i:0
-test_mRNA_58_220_3d 83 test_chromosome 196 255 55M100N20M = 108 0 ACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGGTTGCGATACGCCACTATTACTTTATTATCTTC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3 XS:A:+ NS:i:1
-test_mRNA_50_224_2d 83 test_chromosome 200 255 51M100N24M = 100 0 TACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATACGCCACTATTACTTTATTATCTTACTCG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2 XS:A:+ NS:i:0
-test_mRNA_44_225_1e 83 test_chromosome 201 255 50M100N25M = 94 0 ACGTATATGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATACGCCACTATTACTTTATTATCTTACTCGG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2 XS:A:+ NS:i:0
-test_mRNA_81_228_3a 83 test_chromosome 204 255 47M100N28M = 131 0 TATTTGGCGCGCGGCCCTATGGCTGAGCGTCGAGCTTGCGATACGCCACTATTACTTTATTATCTTACTCGTAGG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:4 XS:A:+ NS:i:0
-test_mRNA_63_229_4c 83 test_chromosome 205 255 46M100N29M = 113 0 ATTTGGCGCGCGGCCCTACGGCTGAGTGTCGAGCTTGCGATACGCCACTATTACTTTATTATCTTACTCGGACGT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2 XS:A:+ NS:i:1
-test_mRNA_69_229_23 83 test_chromosome 205 255 46M100N29M = 119 0 CTTTGGCGCGCGGCCCTACGGCTGAGCGTCTAGCTTGCGATACGCCACTATTACTTTATTATCTTACTCGGACGT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3 XS:A:+ NS:i:1
-test_mRNA_89_230_b 83 test_chromosome 206 255 45M100N30M = 139 0 TCTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATACGCCACTATTACTTTATTAACTCACTCGGACGTA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:4 XS:A:+ NS:i:0
-test_mRNA_30_231_3c 81 test_chromosome 207 255 44M100N31M = 80 0 TTGGCGCGCGGCCCTACGGCTAAGCGTCGAGCTTGCGATACGCCACTATTACTTTAATATCTTACTCGCACGTAG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:4 XS:A:+ NS:i:0
-test_mRNA_57_231_8 147 test_chromosome 207 255 44M100N31M = 107 0 TTGGCGCGCGGCCCTAGGGCTGAGCGTCGAGCTTGCGATACGCCACTATTACTTTATTATCTTACTCGGACGTAG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2 XS:A:+ NS:i:0
-test_mRNA_46_232_2f 147 test_chromosome 208 255 43M100N32M = 96 0 TGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATACGCCACTATTACTTTATTATCTTACTCGGACGTAGA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1 XS:A:+ NS:i:0
-test_mRNA_58_234_7 83 test_chromosome 210 255 41M100N34M = 108 0 GCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATACGCCACTATTAGTTTATTATCTGACTCGGACGTAGACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:4 XS:A:+ NS:i:1
-test_mRNA_41_236_55 145 test_chromosome 212 255 39M100N36M = 91 0 GCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATACGCCACTATTACTTTATTATCTTACTCGGACGTAGACGGA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1 XS:A:+ NS:i:0
-test_mRNA_51_237_a 147 test_chromosome 213 255 38M100N37M = 101 0 CGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATACGCCACTATTACTTTATTATCTTACTCGGACGTAGACGGAT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1 XS:A:+ NS:i:0
-test_mRNA_65_238_2e 147 test_chromosome 214 255 37M100N38M = 115 0 GCGGCCCTACGGCTGCGCGTCGAGCTTGCGATACGCCACTATTACTTTATTATCTTACTCGGACGTAGACGGATC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2 XS:A:+ NS:i:0
-test_mRNA_96_238_3 83 test_chromosome 214 255 37M100N38M = 146 0 GCGGCCCTACGGCTGAGCGTCGAGCTTGCGATACGCTACTAGTACTTTATTATCTTACGCGGACGTAGACGGATC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:4 XS:A:+ NS:i:2
-test_mRNA_73_240_34 147 test_chromosome 216 255 35M100N40M = 123 0 GGCCCTACGGCTGAGCGTCGAGCTTGCGATACGCCACTATTACTTTATTATCTTTCTCGGACGTAGACGGATCGG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2 XS:A:+ NS:i:0
-test_mRNA_81_245_4d 83 test_chromosome 221 255 30M100N45M = 131 0 TACGGCTGAGCGTCGAGGTTGCGATACGCCACTATTACTTTATAATCTTACTCGGACGTAGACGGATCGGCAACG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2 XS:A:+ NS:i:1
-test_mRNA_89_245_15 147 test_chromosome 221 255 30M100N45M = 139 0 TACGGCTGAGCGTCGAGCTTGCGATACGCCACTATTTCTCTATTATCTTACTCGGACGTAGACGGATCGGCAACG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2 XS:A:+ NS:i:2
-test_mRNA_172_294_4f 99 test_chromosome 222 255 29M100N46M = 370 0 ACGGATGAGCGTCGAGCTTGCGATACGCCACTATTACTTTATTATCTTCCTCGGACGTAGACGGATCGCCAACGG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3 XS:A:+ NS:i:1
-test_mRNA_51_248_14 145 test_chromosome 224 255 27M100N48M = 101 0 GGCTGAGCGTCGAGCTTGCGATACGCCACTATTACTTTATTATCTTACTCGGACGTAGACGGAACGGCAACGGGA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3 XS:A:+ NS:i:0
-test_mRNA_48_249_20 81 test_chromosome 225 255 26M100N49M = 98 0 GCTGAGCGTCGAGCTTGCGATACGCCACTATTACTTTACTATCTTACTCGGACGGAGACGGATCGGCAACGGGAC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3 XS:A:+ NS:i:0
-test_mRNA_87_250_57 83 test_chromosome 226 255 25M100N50M = 137 0 ATGAGCGTCGAGCTTGCGATACGCCACTATTACTTTATTATCTTACTCGGACGTAGACGGATCGGCAACGGGACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1 XS:A:+ NS:i:0
-test_mRNA_92_250_44 147 test_chromosome 226 255 25M100N50M = 142 0 CTGAGCGTCGAGCTTGCGATACGCCACTATTACTTTATTATCTTACTCGGACGTAGACGGATCGGGTACGGGACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2 XS:A:+ NS:i:0
-test_mRNA_128_252_36 153 test_chromosome 228 255 23M100N52M * 0 0 GAGCGTCGAGCTTGCGATACGCCACTATTACTTTATTATCTTACTCGGACGTAGACGGATCGGGAACGGGACTTT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:4 XS:A:+ NS:i:0
-test_mRNA_72_258_4 83 test_chromosome 234 255 17M100N50M100N8M = 122 0 CGAGCTTGCGATACGCCACTATTACTTTATTATCTTACTCGGACGTAGACGGATGGGCAACGGGACTTTTTCTAC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1 XS:A:+ NS:i:1
-test_mRNA_73_259_5e 147 test_chromosome 235 255 16M100N50M100N9M = 123 0 GAGCTTGCGATACGCCACTATTACTGTATTATCTTACTCGGACGTAGACGGATCGGCAACGGGACTTTTTCTACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1 XS:A:+ NS:i:0
-test_mRNA_131_260_33 147 test_chromosome 236 255 15M100N50M100N10M = 181 0 AGCTTGTGATACGCCACTATTACTTTATTATCTTACTCGGACGTAAACGGATCGGCCACGGGACTTTTTTTACTT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:4 XS:A:+ NS:i:3
-test_mRNA_52_261_1b 145 test_chromosome 237 255 14M100N50M100N11M = 102 0 GCTTGCGATACGCCACTATTACTTAATTATCTTACTCGGACGTAGAAGGATCGGCAACGGGACTTTTTCTACTTG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2 XS:A:+ NS:i:1
-test_mRNA_105_266_13 83 test_chromosome 242 255 9M100N50M100N16M = 155 0 CGATCCGCCACTATTACTTTATTATCTTACTCGGACGTAGACGGATCGGCAACGGGACTTTTTCTACTTGAGACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1 XS:A:+ NS:i:1
-test_mRNA_92_266_43 147 test_chromosome 242 255 9M100N50M100N16M = 142 0 CGATACGCCACTATTACTTTCTTATCTTACTCGGACGTAGACGGAGCGGCAACGGGACTTTTTCTACTTGAGACC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3 XS:A:+ NS:i:2
-test_mRNA_110_267_22 83 test_chromosome 243 255 8M100N50M100N17M = 160 0 GATACGCCACTATTACTTTATTATCTTACTCGGACGTAGACGGATCGGCAACGGGACTTTTTCTACTTGAGACTG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:0 XS:A:+ NS:i:0
-test_mRNA_89_267_32 83 test_chromosome 243 255 8M100N50M100N17M = 139 0 GATACGGCACTATTACTTTATTATCTTTCTCGGACGTAGACGGATCGGCAACGGGACTTTTTCTACTTGAGACTG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2 XS:A:+ NS:i:1
-test_mRNA_111_268_d 89 test_chromosome 244 255 7M100N50M100N18M * 0 0 ATACGCCACTATTATTTTATTATCTTACTCGGACGTAGACGGATCGGCAACGGGACTTTTTCTACTTGAGACTGG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1 XS:A:+ NS:i:1
-test_mRNA_85_268_53 147 test_chromosome 244 255 7M100N50M100N18M = 135 0 ATACGCCACTATTACTTTATTATCTTACTCGGACGTAGACGGATCGTCAACGGGACTTTTTCTACTTGAGACTGG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1 XS:A:+ NS:i:0
-test_mRNA_110_271_28 147 test_chromosome 247 255 4M100N50M100N21M = 160 0 CGCCACTATTACTTTATTATCTTACTCGGACGAAGACGGATCGGCAACGGGGCTTTTTCTACTTGAGACTGGGAT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2 XS:A:+ NS:i:1
-test_mRNA_116_271_2b 83 test_chromosome 247 255 4M100N50M100N21M = 166 0 CGCCACTATTACTTTATTATCTTACTCGGACGTAGACAGATCGGCAACGGGACTTTTTCTACTTGAGACTGGGAT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1 XS:A:+ NS:i:0
-test_mRNA_82_271_58 147 test_chromosome 247 255 4M100N50M100N21M = 132 0 CGCCACTATTACTTTATTATCTTACTCGGACGTAGACGCATCGGCAACGGGACTTTTTCTACTTGAGACTGGGAT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1 XS:A:+ NS:i:0
-test_mRNA_53_272_5a 81 test_chromosome 248 255 3M100N50M100N22M = 103 0 GCCACTATTACTTTATTATCTTACTCGGACGTAGACGGATCGGCAACGGGACTTTTTCTACTTGACACTGGGATC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1 XS:A:+ NS:i:1
-test_mRNA_104_274_1c 89 test_chromosome 350 255 51M100N24M * 0 0 CACTATTACTTTATTATCTTACTCGGACGTAGACGGATCGGCAACGGGACTTTTTCTACTTGAGACTGGGATCGA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2 XS:A:+ NS:i:0
-test_mRNA_85_275_38 153 test_chromosome 351 255 50M100N25M * 0 0 ACTCTTACTTTATTATCTTACTCGGACGTAGACGGATCGGCAACGGGACTTTTACTACTTGAGACTGGGATCGAG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2 XS:A:+ NS:i:0
-test_mRNA_97_275_26 145 test_chromosome 351 255 50M100N25M = 147 0 ACTATTACTTTATTATCTTAGTCGGACGTAGACGGATCGGAAACGGGACTCTTTCTACTTGAGACTGGGATCGAG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3 XS:A:+ NS:i:0
-test_mRNA_105_276_c 81 test_chromosome 352 255 49M100N26M = 155 0 CTATTACTTTATTATCTTACTCGGACGTAGACGGATCGGCAACGGGGCTTTTTCTACTTGAGACTGGGATCGAGG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2 XS:A:+ NS:i:0
-test_mRNA_78_276_4b 145 test_chromosome 352 255 49M100N26M = 128 0 CTATTACTTTATTATCTTACTCGGACGTAGACGGATCGGCAACGGGACTTTTTCTACTTGAGACTAGGATCGAGG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2 XS:A:+ NS:i:0
-test_mRNA_114_277_5b 81 test_chromosome 353 255 48M100N27M = 164 0 TATTACTTTATTATCTTACTCGGAGGTAGACGGAACGGCAACGGGACTTTTTCTGCTTGAGACTGGGATCGAGGC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:4 XS:A:+ NS:i:0
-test_mRNA_75_277_3b 145 test_chromosome 353 255 48M100N27M = 125 0 TATTACTTTATTATCTTACTCGGACGTAGACGGATCGGCAACGGGACTTTTTCTACCTGAGACTGGGATCGAGGC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2 XS:A:+ NS:i:0
-test_mRNA_104_278_3e 17 test_chromosome 354 255 47M100N28M = 154 0 ATTACTTTATTATCTTACTCGGACGTAGACGGATCGGCAACGGGACTTTTTCTACTTGAGACTGGAATCGAGGCG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3 XS:A:+ NS:i:0
-test_mRNA_104_278_3e 81 test_chromosome 354 255 47M100N28M = 154 0 ATTACTTTATTATCTTACTCGGACGTAGACGGATCGGCAACGGGACTTTTTCTACTTGAGACTGGAATCGAGGCG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1 XS:A:+ NS:i:0
-test_mRNA_87_279_5f 81 test_chromosome 355 255 46M100N29M = 137 0 TTACTTTATTATCTTACTCGGACGTAGACGGATCGGCAACGGGACTTTTTCTACTTGAGACTGGGATCGAGGCGG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:0 XS:A:+ NS:i:0
-test_mRNA_125_280_48 145 test_chromosome 356 255 45M100N30M = 175 0 TACTTTATTATCTTACTCTGACGTAGACGGATCGGCAACGGGACTTTTTCTACTTGAGACTGGGAGCGAGGCGGA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2 XS:A:+ NS:i:0
-test_mRNA_126_282_18 81 test_chromosome 358 255 43M100N32M = 176 0 CTTTATTATCTTACTCGGACGTAGACGGATCGGCAACGGGACTTTTTCTACTTGAGACTGGGATCGAGGCGGACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:0 XS:A:+ NS:i:0
-test_mRNA_103_284_2a 81 test_chromosome 360 255 41M100N34M = 153 0 TTATTATCTTACTCGGACGTAGACGGATCGGCAACGGGACTTTTTCTACTTGAGACTGGGATCGAGGCGGACTTT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:0 XS:A:+ NS:i:0
-test_mRNA_107_286_5 81 test_chromosome 362 255 39M100N36M = 157 0 ATTATCTTACTCGGACGTAGACGGATCGGCAACGGGACTTTTTCTACTTGAGACTGGGATCGAGGCGGACTTTTT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:0 XS:A:+ NS:i:0
-test_mRNA_151_286_e 153 test_chromosome 362 255 39M100N36M * 0 0 ATTATCTTACTCGGACGTAGACGGATCGGCAACGGGACTTTATCTACTTGAGACTGGGATCGAGGCGGACTTTTT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1 XS:A:+ NS:i:1
-test_mRNA_150_290_0 89 test_chromosome 366 255 35M100N40M * 0 0 TCTTACTCGGACGTAGACGGATCGCCAACGGGACTTTTTCTACTTGAGACTGAGACCGAGGCGGACTTTTTAGGA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3 XS:A:+ NS:i:0
-test_mRNA_94_291_40 153 test_chromosome 367 255 34M100N41M * 0 0 CTTCCTGGGACGTAGACGGATCGGCAACGCGACATTTTCTACTTGAGACTGGGATCGAGGCGGACTTTTTGGGAC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:5 XS:A:+ NS:i:2
-test_mRNA_125_293_60 81 test_chromosome 369 255 32M100N43M = 175 0 TACTCGGACGTAGACGGATCGGCAACGGGACTTTTTCTACTTGAGACTGGGATCGAGGCGGACTTTTTAGGACGG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:0 XS:A:+ NS:i:0
-test_mRNA_172_294_4f 147 test_chromosome 370 255 31M100N44M = 222 0 ACTCGGACGTAGACGGGTCGGCAGCGGGACTTTTTCTACTTGAGACTGGGATCGAGGCGGACGTTTTAGGACGGG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3 XS:A:+ NS:i:0
-test_mRNA_116_295_63 81 test_chromosome 371 255 30M100N45M = 166 0 CTCGGACGTAGACGGATCGGCAACGGGACTTTTTCTACTTGAGACTGGGATCGAGGCGGACTTTTTAGGACGGGA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:0 XS:A:+ NS:i:0
-test_mRNA_111_297_61 17 test_chromosome 373 255 28M100N47M = 161 0 CGGACGTAGACGGATCCGCAACGGGACTTTTTCTACTTGAGACTGGGATCGAGGCGGACTTTTTAGGACGGGACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3 XS:A:+ NS:i:0
-test_mRNA_111_297_61 81 test_chromosome 373 255 28M100N47M = 161 0 CGGACGTAGACGGATCCGCAACGGGACTTTTTCTACTTGAGACTGGGATCGAGGCGGACTTTTTAGGACGGGACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1 XS:A:+ NS:i:0
-test_mRNA_118_297_f 17 test_chromosome 373 255 28M100N47M = 168 0 CGGACGTAGACGGATCGGCAACGGGACTTTTTCTACTTGAGACTGGGATCGAGGCGGACTTTTTAGGACGGGACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2 XS:A:+ NS:i:0
-test_mRNA_118_297_f 81 test_chromosome 373 255 28M100N47M = 168 0 CGGACGTAGACGGATCGGCAACGGGACTTTTTCTACTTGAGACTGGGATCGAGGCGGACTTTTTAGGACGGGACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:0 XS:A:+ NS:i:0
-test_mRNA_151_297_1d 153 test_chromosome 373 255 28M100N47M * 0 0 CGGACGTAGACGGATCGGCAACGGGACTTTTTCTACTTGAGACTGGGATCGAGGCGGACATTTTAGGACGGGACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1 XS:A:+ NS:i:0
-test_mRNA_151_297_1d 25 test_chromosome 373 255 28M100N47M * 0 0 CGGACGTAGACGGATCGGCAACGGGACTTTTTCTACTTGAGACTGGGATCGAGGCGGACATTTTAGGACGGGACT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:3 XS:A:+ NS:i:0
-test_mRNA_122_299_6 81 test_chromosome 375 255 26M100N49M = 172 0 GACGTAGACGGAGCGGCAACGGGACTTTTTCTACTTGAGACTGGGATCGAGGCGGACTTTTTAGGACGGGACTTG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:2 XS:A:+ NS:i:0
-test_mRNA_145_300_37 83 test_chromosome 376 255 25M100N50M = 195 0 ACGTAGACGGATCGGAAACGGGACTTTTTCTACTTGAGACTGGGATCGAGGCGGACTTTTTAGGACGGGACTTGC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII NM:i:1 XS:A:+ NS:i:0
--- a/test-data/cufflinks_out1.gtf Fri May 06 14:32:55 2011 -0400
+++ b/test-data/cufflinks_out1.gtf Fri May 06 15:47:01 2011 -0400
@@ -1,4 +1,4 @@
-test_chromosome Cufflinks transcript 53 550 1000 + . gene_id "CUFF.1"; transcript_id "CUFF.1.1"; FPKM "4464285.7142857295"; frac "1.000000"; conf_lo "4460059.943012"; conf_hi "4468511.485559"; cov "61.272321";
-test_chromosome Cufflinks exon 53 250 1000 + . gene_id "CUFF.1"; transcript_id "CUFF.1.1"; exon_number "1"; FPKM "4464285.7142857295"; frac "1.000000"; conf_lo "4460059.943012"; conf_hi "4468511.485559"; cov "61.272321";
-test_chromosome Cufflinks exon 351 400 1000 + . gene_id "CUFF.1"; transcript_id "CUFF.1.1"; exon_number "2"; FPKM "4464285.7142857295"; frac "1.000000"; conf_lo "4460059.943012"; conf_hi "4468511.485559"; cov "61.272321";
-test_chromosome Cufflinks exon 501 550 1000 + . gene_id "CUFF.1"; transcript_id "CUFF.1.1"; exon_number "3"; FPKM "4464285.7142857295"; frac "1.000000"; conf_lo "4460059.943012"; conf_hi "4468511.485559"; cov "61.272321";
+test_chromosome Cufflinks transcript 53 550 1000 + . gene_id "CUFF.1"; transcript_id "CUFF.1.1"; FPKM "10679134.4063403048"; frac "1.000000"; conf_lo "8543307.525072"; conf_hi "12814961.287608"; cov "145.770185";
+test_chromosome Cufflinks exon 53 250 1000 + . gene_id "CUFF.1"; transcript_id "CUFF.1.1"; exon_number "1"; FPKM "10679134.4063403048"; frac "1.000000"; conf_lo "8543307.525072"; conf_hi "12814961.287608"; cov "145.770185";
+test_chromosome Cufflinks exon 351 400 1000 + . gene_id "CUFF.1"; transcript_id "CUFF.1.1"; exon_number "2"; FPKM "10679134.4063403048"; frac "1.000000"; conf_lo "8543307.525072"; conf_hi "12814961.287608"; cov "145.770185";
+test_chromosome Cufflinks exon 501 550 1000 + . gene_id "CUFF.1"; transcript_id "CUFF.1.1"; exon_number "3"; FPKM "10679134.4063403048"; frac "1.000000"; conf_lo "8543307.525072"; conf_hi "12814961.287608"; cov "145.770185";
--- a/test-data/cufflinks_out2.expr Fri May 06 14:32:55 2011 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-trans_id bundle_id chr left right FPKM FMI frac FPKM_conf_lo FPKM_conf_hi coverage length effective_length status
-CUFF.1.1 3 test_chromosome 52 550 4.46429e+06 1 1 4.46006e+06 4.46851e+06 61.2723 298 224 OK
--- a/test-data/cufflinks_out3.expr Fri May 06 14:32:55 2011 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-gene_id bundle_id chr left right FPKM FPKM_conf_lo FPKM_conf_hi status
-CUFF.1 3 test_chromosome 52 550 4.46429e+06 4.46006e+06 4.46851e+06 OK
--- a/tools/ngs_rna/cufflinks_wrapper.py Fri May 06 14:32:55 2011 -0400
+++ b/tools/ngs_rna/cufflinks_wrapper.py Fri May 06 15:47:01 2011 -0400
@@ -32,7 +32,6 @@
parser.add_option( '-m', '--inner-mean-dist', dest='inner_mean_dist', help='This is the expected (mean) inner distance between mate pairs. \
For, example, for paired end runs with fragments selected at 300bp, \
where each end is 50bp, you should set -r to be 200. The default is 45bp.')
- parser.add_option( '-Q', '--min-mapqual', dest='min_mapqual', help='Instructs Cufflinks to ignore alignments with a SAM mapping quality lower than this number. The default is 0.' )
parser.add_option( '-G', '--GTF', dest='GTF', help='Tells Cufflinks to use the supplied reference annotation to estimate isoform expression. It will not assemble novel transcripts, and the program will ignore alignments not structurally compatible with any reference transcript.' )
# Normalization options.
@@ -43,7 +42,7 @@
parser.add_option( '--max-mle-iterations', dest='max_mle_iterations', help='Sets the number of iterations allowed during maximum likelihood estimation of abundances. Default: 5000' )
# Bias correction options.
- parser.add_option( '-r', dest='do_bias_correction', action="store_true", help='Providing Cufflinks with a multifasta file via this option instructs it to run our new bias detection and correction algorithm which can significantly improve accuracy of transcript abundance estimates.')
+ parser.add_option( '-b', dest='do_bias_correction', action="store_true", help='Providing Cufflinks with a multifasta file via this option instructs it to run our new bias detection and correction algorithm which can significantly improve accuracy of transcript abundance estimates.')
parser.add_option( '', '--dbkey', dest='dbkey', help='The build of the reference dataset' )
parser.add_option( '', '--index_dir', dest='index_dir', help='GALAXY_DATA_INDEX_DIR' )
parser.add_option( '', '--ref_file', dest='ref_file', help='The reference dataset from the history' )
@@ -54,7 +53,7 @@
try:
tmp = tempfile.NamedTemporaryFile().name
tmp_stdout = open( tmp, 'wb' )
- proc = subprocess.Popen( args='cufflinks 2>&1', shell=True, stdout=tmp_stdout )
+ proc = subprocess.Popen( args='cufflinks --no-update-check 2>&1', shell=True, stdout=tmp_stdout )
tmp_stdout.close()
returncode = proc.wait()
stdout = None
@@ -85,7 +84,7 @@
# Build command.
# Base; always use quiet mode to avoid problems with storing log output.
- cmd = "cufflinks -q"
+ cmd = "cufflinks -q --no-update-check"
# Add options.
if options.inner_dist_std_dev:
@@ -100,8 +99,6 @@
cmd += ( " -p %i" % int ( options.num_threads ) )
if options.inner_mean_dist:
cmd += ( " -m %i" % int ( options.inner_mean_dist ) )
- if options.min_mapqual:
- cmd += ( " -Q %i" % int ( options.min_mapqual ) )
if options.GTF:
cmd += ( " -G %s" % options.GTF )
if options.num_importance_samples:
@@ -111,7 +108,7 @@
if options.do_normalization:
cmd += ( " -N" )
if options.do_bias_correction:
- cmd += ( " -r %s" % seq_path )
+ cmd += ( " -b %s" % seq_path )
# Debugging.
print cmd
--- a/tools/ngs_rna/cufflinks_wrapper.xml Fri May 06 14:32:55 2011 -0400
+++ b/tools/ngs_rna/cufflinks_wrapper.xml Fri May 06 15:47:01 2011 -0400
@@ -10,7 +10,6 @@
-I $max_intron_len
-F $min_isoform_fraction
-j $pre_mrna_fraction
- -Q $min_map_quality
## Include reference annotation?
#if $reference_annotation.use_ref == "Yes":
@@ -30,7 +29,7 @@
## Bias correction?
#if $bias_correction.do_bias_correction == "Yes":
- -r
+ -b
#if $bias_correction.seq_source.index_source == "history":
--ref_file=$bias_correction.seq_source.ref_file
#else:
@@ -47,7 +46,6 @@
<param name="max_intron_len" type="integer" value="300000" min="1" max="600000" label="Max Intron Length" help=""/><param name="min_isoform_fraction" type="float" value="0.05" min="0" max="1" label="Min Isoform Fraction" help=""/><param name="pre_mrna_fraction" type="float" value="0.05" min="0" max="1" label="Pre MRNA Fraction" help=""/>
- <param name="min_map_quality" type="integer" value="0" min="0" max="255" label="Min SAM Map Quality" help=""/><param name="do_normalization" type="select" label="Perform quartile normalization" help="Removes top 25% of genes from FPKM denominator to improve accuracy of differential expression calls for low abundance transcripts."><option value="No">No</option><option value="Yes">Yes</option>
@@ -59,7 +57,7 @@
</param><when value="No"></when><when value="Yes">
- <param format="gtf" name="reference_annotation_file" type="data" label="Reference Annotation" help="Make sure your annotation file is in GTF format and that Galaxy knows that your file is GTF--not GFF."/>
+ <param format="gff3,gtf" name="reference_annotation_file" type="data" label="Reference Annotation" help="Make sure your annotation file is in GTF format and that Galaxy knows that your file is GTF--not GFF."/></when></conditional><conditional name="bias_correction">
@@ -95,8 +93,8 @@
</inputs><outputs>
- <data format="tabular" name="genes_expression" label="${tool.name} on ${on_string}: gene expression" from_work_dir="genes.expr"/>
- <data format="tabular" name="transcripts_expression" label="${tool.name} on ${on_string}: transcript expression" from_work_dir="transcripts.expr"/>
+ <data format="tabular" name="genes_expression" label="${tool.name} on ${on_string}: gene expression" from_work_dir="genes.fpkm_tracking"/>
+ <data format="tabular" name="transcripts_expression" label="${tool.name} on ${on_string}: transcript expression" from_work_dir="isoforms.fpkm_tracking"/><data format="gtf" name="assembled_isoforms" label="${tool.name} on ${on_string}: assembled transcripts" from_work_dir="transcripts.gtf"/></outputs>
@@ -106,7 +104,7 @@
--><test><param name="sPaired" value="No"/>
- <param name="input" value="cufflinks_in.sam"/>
+ <param name="input" value="cufflinks_in.bam"/><param name="max_intron_len" value="300000"/><param name="min_isoform_fraction" value="0.05"/><param name="pre_mrna_fraction" value="0.05"/>
@@ -114,8 +112,8 @@
<param name="use_ref" value="No"/><param name="do_normalization" value="No" /><param name="do_bias_correction" value="No"/>
- <output name="genes_expression" format="tabular" file="cufflinks_out3.expr"/>
- <output name="transcripts_expression" format="tabular" file="cufflinks_out2.expr"/>
+ <output name="genes_expression" format="tabular" lines_diff="2" file="cufflinks_out3.fpkm_tracking"/>
+ <output name="transcripts_expression" format="tabular" lines_diff="2" file="cufflinks_out2.fpkm_tracking"/><output name="assembled_isoforms" file="cufflinks_out1.gtf"/></test></tests>
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: kanwei: trackster: Indicator when drag-reordering tracks. Fix Y-axis label being too high
by Bitbucket 06 May '11
by Bitbucket 06 May '11
06 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/c119abcbcdac/
changeset: r5507:c119abcbcdac
user: kanwei
date: 2011-05-06 20:32:55
summary: trackster: Indicator when drag-reordering tracks. Fix Y-axis label being too high
affected #: 1 file (228 bytes)
--- a/static/scripts/trackster.js Fri May 06 13:44:21 2011 -0400
+++ b/static/scripts/trackster.js Fri May 06 14:32:55 2011 -0400
@@ -146,13 +146,20 @@
// to handle the end specially since we don't have
// insert at index
if ( i === children.length ) {
- if ( this !== children.get( i - 1 ) ) {
- parent.append( this );
+ if ( this !== children.get(i - 1) ) {
+ parent.append(this);
}
}
- else if ( this !== children.get( i ) ) {
- $(this).insertBefore( children.get( i ) );
+ else if ( this !== children.get(i) ) {
+ $(this).insertBefore( children.get(i) );
}
+ }).bind("dragstart", function() {
+ $(this).css({
+ "border-top": "1px solid blue",
+ "border-bottom": "1px solid blue"
+ });
+ }).bind("dragend", function() {
+ $(this).css("border", "0px");
});
};
exports.sortable = sortable;
@@ -2428,7 +2435,7 @@
this.container_div.find(".yaxislabel").remove();
var max_label = $("<div />").addClass('yaxislabel');
max_label.text( result.max );
- max_label.css({ position: "absolute", top: "22px", left: "10px", color: this.prefs.label_color });
+ max_label.css({ position: "absolute", top: "24px", left: "10px", color: this.prefs.label_color });
max_label.prependTo(this.container_div);
// Create canvas
var canvas = this.view.canvas_manager.new_canvas();
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/4d2d6eb829fb/
changeset: r5506:4d2d6eb829fb
user: kanwei
date: 2011-05-06 19:44:21
summary: update JSON2.js
affected #: 2 files (55 bytes)
--- a/static/scripts/json2.js Fri May 06 12:09:58 2011 -0400
+++ b/static/scripts/json2.js Fri May 06 13:44:21 2011 -0400
@@ -1,6 +1,6 @@
/*
http://www.JSON.org/json2.js
- 2010-03-20
+ 2011-02-23
Public Domain.
@@ -146,7 +146,7 @@
redistribute.
*/
-/*jslint evil: true, strict: false */
+/*jslint evil: true, strict: false, regexp: false */
/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
@@ -159,11 +159,13 @@
// Create a JSON object only if one does not already exist. We create the
// methods in a closure to avoid creating global variables.
-if (!this.JSON) {
- this.JSON = {};
+var JSON;
+if (!JSON) {
+ JSON = {};
}
(function () {
+ "use strict";
function f(n) {
// Format integers to have at least two digits.
@@ -175,19 +177,19 @@
Date.prototype.toJSON = function (key) {
return isFinite(this.valueOf()) ?
- this.getUTCFullYear() + '-' +
- f(this.getUTCMonth() + 1) + '-' +
- f(this.getUTCDate()) + 'T' +
- f(this.getUTCHours()) + ':' +
- f(this.getUTCMinutes()) + ':' +
- f(this.getUTCSeconds()) + 'Z' : null;
+ this.getUTCFullYear() + '-' +
+ f(this.getUTCMonth() + 1) + '-' +
+ f(this.getUTCDate()) + 'T' +
+ f(this.getUTCHours()) + ':' +
+ f(this.getUTCMinutes()) + ':' +
+ f(this.getUTCSeconds()) + 'Z' : null;
};
- String.prototype.toJSON =
- Number.prototype.toJSON =
- Boolean.prototype.toJSON = function (key) {
- return this.valueOf();
- };
+ String.prototype.toJSON =
+ Number.prototype.toJSON =
+ Boolean.prototype.toJSON = function (key) {
+ return this.valueOf();
+ };
}
var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
@@ -214,13 +216,11 @@
// sequences.
escapable.lastIndex = 0;
- return escapable.test(string) ?
- '"' + string.replace(escapable, function (a) {
- var c = meta[a];
- return typeof c === 'string' ? c :
- '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
- }) + '"' :
- '"' + string + '"';
+ return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
+ var c = meta[a];
+ return typeof c === 'string' ? c :
+ '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ }) + '"' : '"' + string + '"';
}
@@ -303,11 +303,9 @@
// Join all of the elements together, separated with commas, and wrap them in
// brackets.
- v = partial.length === 0 ? '[]' :
- gap ? '[\n' + gap +
- partial.join(',\n' + gap) + '\n' +
- mind + ']' :
- '[' + partial.join(',') + ']';
+ v = partial.length === 0 ? '[]' : gap ?
+ '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' :
+ '[' + partial.join(',') + ']';
gap = mind;
return v;
}
@@ -317,8 +315,8 @@
if (rep && typeof rep === 'object') {
length = rep.length;
for (i = 0; i < length; i += 1) {
- k = rep[i];
- if (typeof k === 'string') {
+ if (typeof rep[i] === 'string') {
+ k = rep[i];
v = str(k, value);
if (v) {
partial.push(quote(k) + (gap ? ': ' : ':') + v);
@@ -330,7 +328,7 @@
// Otherwise, iterate through all of the keys in the object.
for (k in value) {
- if (Object.hasOwnProperty.call(value, k)) {
+ if (Object.prototype.hasOwnProperty.call(value, k)) {
v = str(k, value);
if (v) {
partial.push(quote(k) + (gap ? ': ' : ':') + v);
@@ -342,9 +340,9 @@
// Join all of the member texts together, separated with commas,
// and wrap them in braces.
- v = partial.length === 0 ? '{}' :
- gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
- mind + '}' : '{' + partial.join(',') + '}';
+ v = partial.length === 0 ? '{}' : gap ?
+ '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' :
+ '{' + partial.join(',') + '}';
gap = mind;
return v;
}
@@ -385,7 +383,7 @@
rep = replacer;
if (replacer && typeof replacer !== 'function' &&
(typeof replacer !== 'object' ||
- typeof replacer.length !== 'number')) {
+ typeof replacer.length !== 'number')) {
throw new Error('JSON.stringify');
}
@@ -415,7 +413,7 @@
var k, v, value = holder[key];
if (value && typeof value === 'object') {
for (k in value) {
- if (Object.hasOwnProperty.call(value, k)) {
+ if (Object.prototype.hasOwnProperty.call(value, k)) {
v = walk(value, k);
if (v !== undefined) {
value[k] = v;
@@ -455,10 +453,10 @@
// we look to see that the remaining characters are only whitespace or ']' or
// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
- if (/^[\],:{}\s]*$/.
-test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
-replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
-replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
+ if (/^[\],:{}\s]*$/
+ .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
+ .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
+ .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
// In the third stage we use the eval function to compile the text into a
// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
--- a/static/scripts/packed/json2.js Fri May 06 12:09:58 2011 -0400
+++ b/static/scripts/packed/json2.js Fri May 06 13:44:21 2011 -0400
@@ -1,1 +1,1 @@
-if(!this.JSON){this.JSON={}}(function(){function f(n){return n<10?"0"+n:n}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==="object"&&typeof value.toJSON==="function"){value=value.toJSON(key)}if(typeof rep==="function"){value=rep.call(holder,key,value)}switch(typeof value){case"string":return quote(value);case"number":return isFinite(value)?String(value):"null";case"boolean":case"null":return String(value);case"object":if(!value){return"null"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==="[object Array]"){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||"null"}v=partial.length===0?"[]":gap?"[\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"]":"["+partial.join(",")+"]";gap=mind;return v}if(rep&&typeof rep==="object"){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==="string"){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}v=partial.length===0?"{}":gap?"{\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"}":"{"+partial.join(",")+"}";gap=mind;return v}}if(typeof JSON.stringify!=="function"){JSON.stringify=function(value,replacer,space){var i;gap="";indent="";if(typeof space==="number"){for(i=0;i<space;i+=1){indent+=" "}}else{if(typeof space==="string"){indent=space}}rep=replacer;if(replacer&&typeof replacer!=="function"&&(typeof replacer!=="object"||typeof replacer.length!=="number")){throw new Error("JSON.stringify")}return str("",{"":value})}}if(typeof JSON.parse!=="function"){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==="object"){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v}else{delete value[k]}}}}return reviver.call(holder,key,value)}text=String(text);cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){j=eval("("+text+")");return typeof reviver==="function"?walk({"":j},""):j}throw new SyntaxError("JSON.parse")}}}());
\ No newline at end of file
+var JSON;if(!JSON){JSON={}}(function(){function f(n){return n<10?"0"+n:n}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==="object"&&typeof value.toJSON==="function"){value=value.toJSON(key)}if(typeof rep==="function"){value=rep.call(holder,key,value)}switch(typeof value){case"string":return quote(value);case"number":return isFinite(value)?String(value):"null";case"boolean":case"null":return String(value);case"object":if(!value){return"null"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==="[object Array]"){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||"null"}v=partial.length===0?"[]":gap?"[\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"]":"["+partial.join(",")+"]";gap=mind;return v}if(rep&&typeof rep==="object"){length=rep.length;for(i=0;i<length;i+=1){if(typeof rep[i]==="string"){k=rep[i];v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}else{for(k in value){if(Object.prototype.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}v=partial.length===0?"{}":gap?"{\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"}":"{"+partial.join(",")+"}";gap=mind;return v}}if(typeof JSON.stringify!=="function"){JSON.stringify=function(value,replacer,space){var i;gap="";indent="";if(typeof space==="number"){for(i=0;i<space;i+=1){indent+=" "}}else{if(typeof space==="string"){indent=space}}rep=replacer;if(replacer&&typeof replacer!=="function"&&(typeof replacer!=="object"||typeof replacer.length!=="number")){throw new Error("JSON.stringify")}return str("",{"":value})}}if(typeof JSON.parse!=="function"){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==="object"){for(k in value){if(Object.prototype.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v}else{delete value[k]}}}}return reviver.call(holder,key,value)}text=String(text);cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){j=eval("("+text+")");return typeof reviver==="function"?walk({"":j},""):j}throw new SyntaxError("JSON.parse")}}}());
\ No newline at end of file
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: natefoo: Fix a typo in the sample tool_conf.xml, thanks Marina Gourtovaia.
by Bitbucket 06 May '11
by Bitbucket 06 May '11
06 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/9f6a7491fae8/
changeset: r5505:9f6a7491fae8
user: natefoo
date: 2011-05-06 18:09:58
summary: Fix a typo in the sample tool_conf.xml, thanks Marina Gourtovaia.
affected #: 1 file (1 byte)
--- a/tool_conf.xml.sample Fri May 06 11:49:02 2011 -0400
+++ b/tool_conf.xml.sample Fri May 06 12:09:58 2011 -0400
@@ -319,7 +319,7 @@
<section name="NGS: Indel Analysis" id="indel_analysis"><tool file="indels/sam_indel_filter.xml" /><tool file="indels/indel_sam2interval.xml" />
- <tool file="indels/indel_table.xml" />"
+ <tool file="indels/indel_table.xml" /><tool file="indels/indel_analysis.xml" /></section><section name="NGS: RNA Analysis" id="ngs-rna-tools">
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: natefoo: Standardize naming of reserved/predefined values in the param_dict. Old values are maintaned as well.
by Bitbucket 06 May '11
by Bitbucket 06 May '11
06 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/2f2a223f1dde/
changeset: r5504:2f2a223f1dde
user: natefoo
date: 2011-05-06 17:49:02
summary: Standardize naming of reserved/predefined values in the param_dict. Old values are maintaned as well.
affected #: 2 files (156 bytes)
--- a/lib/galaxy/jobs/__init__.py Fri May 06 10:28:54 2011 -0400
+++ b/lib/galaxy/jobs/__init__.py Fri May 06 11:49:02 2011 -0400
@@ -352,8 +352,8 @@
else:
userId = 'Anonymous'
userEmail = 'Anonymous'
- incoming['userId'] = userId
- incoming['userEmail'] = userEmail
+ incoming['__user_id__'] = incoming['userId'] = userId
+ incoming['__user_email__'] = incoming['userEmail'] = userEmail
# Build params, done before hook so hook can use
param_dict = self.tool.build_param_dict( incoming, inp_data, out_data, self.get_output_fnames(), self.working_directory )
# Certain tools require tasks to be completed prior to job execution
--- a/lib/galaxy/tools/__init__.py Fri May 06 10:28:54 2011 -0400
+++ b/lib/galaxy/tools/__init__.py Fri May 06 11:49:02 2011 -0400
@@ -1514,11 +1514,11 @@
param_dict['__new_file_path__'] = os.path.abspath(self.app.config.new_file_path)
# The following points to location (xxx.loc) files which are pointers
# to locally cached data
- param_dict['GALAXY_DATA_INDEX_DIR'] = self.app.config.tool_data_path
+ param_dict['__tool_data_path__'] = param_dict['GALAXY_DATA_INDEX_DIR'] = self.app.config.tool_data_path
# For the upload tool, we need to know the root directory and the
# datatypes conf path, so we can load the datatypes registry
- param_dict['GALAXY_ROOT_DIR'] = os.path.abspath( self.app.config.root )
- param_dict['GALAXY_DATATYPES_CONF_FILE'] = os.path.abspath( self.app.config.datatypes_config )
+ param_dict['__root_dir__'] = param_dict['GALAXY_ROOT_DIR'] = os.path.abspath( self.app.config.root )
+ param_dict['__datatypes_config__'] = param_dict['GALAXY_DATATYPES_CONF_FILE'] = os.path.abspath( self.app.config.datatypes_config )
# Return the dictionary of parameters
return param_dict
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: guru: Commented out 'Wavelet analysis' section from tool_conf.xml.sample - will be reverted once functional tests are written for these tools.
by Bitbucket 06 May '11
by Bitbucket 06 May '11
06 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/551e6526954a/
changeset: r5503:551e6526954a
user: guru
date: 2011-05-06 16:28:54
summary: Commented out 'Wavelet analysis' section from tool_conf.xml.sample - will be reverted once functional tests are written for these tools.
affected #: 1 file (87 bytes)
--- a/tool_conf.xml.sample Thu May 05 19:05:39 2011 -0400
+++ b/tool_conf.xml.sample Fri May 06 10:28:54 2011 -0400
@@ -146,12 +146,15 @@
<label text="GFF" id="gff" /><tool file="stats/count_gff_features.xml" /></section>
+ <!--
+ Keep this section commented until all of the tools have functional tests
<section name="Wavelet Analysis" id="dwt"><tool file="discreteWavelet/execute_dwt_IvC_all.xml" /><tool file="discreteWavelet/execute_dwt_cor_aVa_perClass.xml" /><tool file="discreteWavelet/execute_dwt_cor_aVb_all.xml" /><tool file="discreteWavelet/execute_dwt_var_perClass.xml" /></section>
+ --><section name="Graph/Display Data" id="plots"><tool file="plotting/histogram2.xml" /><tool file="plotting/scatterplot.xml" />
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: jgoecks: Trackster: use GTF metadata to create dynamic filters.
by Bitbucket 05 May '11
by Bitbucket 05 May '11
05 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/4ba34b095a79/
changeset: r5502:4ba34b095a79
user: jgoecks
date: 2011-05-06 01:05:39
summary: Trackster: use GTF metadata to create dynamic filters.
affected #: 1 file (448 bytes)
--- a/lib/galaxy/visualization/tracks/data_providers.py Thu May 05 16:51:56 2011 -0400
+++ b/lib/galaxy/visualization/tracks/data_providers.py Thu May 05 19:05:39 2011 -0400
@@ -394,6 +394,14 @@
filters = [ { 'name': 'Score', 'type': 'int', 'index': filter_col } ]
filter_col += 1
if isinstance( self.original_dataset.datatype, Gtf ):
+ # Create filters based on dataset metadata.
+ for name, a_type in self.original_dataset.metadata.attribute_types.items():
+ if a_type in [ 'int', 'float' ]:
+ filters.append( { 'name': name, 'type': a_type, 'index': filter_col } )
+ filter_col += 1
+
+ '''
+ # Old code: use first line in dataset to find attributes.
for i, line in enumerate( open(self.original_dataset.file_name) ):
if not line.startswith('#'):
# Look at first line for attributes and types.
@@ -411,10 +419,11 @@
filters.append( { 'name': attr, 'type': attr_type, 'index': filter_col } )
filter_col += 1
break
+ '''
elif isinstance( self.original_dataset.datatype, Bed ):
# Can filter by score column only.
filters = [ { 'name': 'Score', 'type': 'int', 'index': filter_col } ]
-
+
return filters
class TabixDataProvider( FilterableMixin, TracksDataProvider ):
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: jgoecks: Enable GFF filter attributes tool to accept arbitrary conditions.
by Bitbucket 05 May '11
by Bitbucket 05 May '11
05 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/aab333e661a2/
changeset: r5501:aab333e661a2
user: jgoecks
date: 2011-05-05 22:51:56
summary: Enable GFF filter attributes tool to accept arbitrary conditions.
affected #: 5 files (1.3 KB)
--- a/lib/galaxy/datatypes/interval.py Wed May 04 16:45:10 2011 -0400
+++ b/lib/galaxy/datatypes/interval.py Thu May 05 16:51:56 2011 -0400
@@ -889,7 +889,7 @@
MetadataElement( name="column_types", default=['str','str','str','int','int','float','str','int','list'], param=metadata.ColumnTypesParameter, desc="Column types", readonly=True, visible=False )
MetadataElement( name="attributes", default=0, desc="Number of attributes", readonly=True, visible=False, no_value=0 )
- MetadataElement( name="attribute_types", default={}, desc="Attribute types", param=metadata.ColumnTypesParameter, readonly=True, visible=False, no_value=[] )
+ MetadataElement( name="attribute_types", default={}, desc="Attribute types", param=metadata.DictParameter, readonly=True, visible=False, no_value=[] )
def sniff( self, filename ):
"""
--- a/lib/galaxy/datatypes/metadata.py Wed May 04 16:45:10 2011 -0400
+++ b/lib/galaxy/datatypes/metadata.py Thu May 05 16:51:56 2011 -0400
@@ -358,6 +358,11 @@
def to_string( self, value ):
return ",".join( map( str, value ) )
+
+class DictParameter( MetadataParameter ):
+
+ def to_string( self, value ):
+ return simplejson.dumps( value )
class PythonObjectParameter( MetadataParameter ):
--- a/tools/filters/gff/gff_filter_by_attribute.py Wed May 04 16:45:10 2011 -0400
+++ b/tools/filters/gff/gff_filter_by_attribute.py Thu May 05 16:51:56 2011 -0400
@@ -5,7 +5,9 @@
# abstracted and leveraged in each filtering tool.
from __future__ import division
-import sys, re, os.path
+import sys
+from galaxy import eggs
+from galaxy.util.json import to_json_string, from_json_string
# Older py compatibility
try:
@@ -15,6 +17,10 @@
assert sys.version_info[:2] >= ( 2, 4 )
+#
+# Helper functions.
+#
+
def get_operands( filter_condition ):
# Note that the order of all_operators is important
items_to_strip = ['+', '-', '**', '*', '//', '/', '%', '<<', '>>', '&', '|', '^', '~', '<=', '<', '>=', '>', '==', '!=', '<>', ' and ', ' or ', ' not ', ' is ', ' is not ', ' in ', ' not in ']
@@ -28,12 +34,31 @@
sys.stderr.write( msg )
sys.exit()
+def check_for_executable( text, description='' ):
+ # Attempt to determine if the condition includes executable stuff and, if so, exit.
+ secured = dir()
+ operands = get_operands( text )
+ for operand in operands:
+ try:
+ check = int( operand )
+ except:
+ if operand in secured:
+ stop_err( "Illegal value '%s' in %s '%s'" % ( operand, description, text ) )
+
+#
+# Process inputs.
+#
+
in_fname = sys.argv[1]
out_fname = sys.argv[2]
-attribute_type = sys.argv[3]
-attribute_name = sys.argv[4]
-cond_text = sys.argv[5]
+cond_text = sys.argv[3]
+attribute_types = from_json_string( sys.argv[4] )
+# Convert types from str to type objects.
+for name, a_type in attribute_types.items():
+ check_for_executable(a_type)
+ attribute_types[ name ] = eval( a_type )
+
# Unescape if input has been escaped
mapped_str = {
'__lt__': '<',
@@ -47,26 +72,22 @@
}
for key, value in mapped_str.items():
cond_text = cond_text.replace( key, value )
+
+# Attempt to determine if the condition includes executable stuff and, if so, exit.
+check_for_executable( cond_text, 'condition')
+
+# Prepare the column variable names and wrappers for column data types. Only
+# prepare columns up to largest column in condition.
+attrs, type_casts = [], []
+for name, attr_type in attribute_types.items():
+ attrs.append( name )
+ type_cast = "get_value('%(name)s', attribute_types['%(name)s'], attribute_values)" % ( {'name': name} )
+ type_casts.append( type_cast )
-# Condition text is 'attribute meets condition.'
-cond_text = attribute_name + cond_text
+attr_str = ', '.join( attrs ) # 'c1, c2, c3, c4'
+type_cast_str = ', '.join( type_casts ) # 'str(c1), int(c2), int(c3), str(c4)'
+wrap = "%s = %s" % ( attr_str, type_cast_str )
-# Attempt to determine if the condition includes executable stuff and, if so, exit
-secured = dir()
-operands = get_operands(cond_text)
-for operand in operands:
- try:
- check = int( operand )
- except:
- if operand in secured:
- stop_err( "Illegal value '%s' in condition '%s'" % ( operand, cond_text ) )
-
-# Set up assignment.
-assignment = "%s = attributes.get('%s', None)" % ( attribute_name, attribute_name )
-
-# Set up type casting based on attribute type.
-type_cast = "%s = %s(%s)" % ( attribute_name, attribute_type, attribute_name)
-
# Stats
skipped_lines = 0
first_invalid_line = 0
@@ -74,6 +95,13 @@
lines_kept = 0
total_lines = 0
out = open( out_fname, 'wt' )
+
+# Helper function to safely get and type cast a value in a dict.
+def get_value(name, a_type, values_dict):
+ if name in values_dict:
+ return (a_type)(values_dict[ name ])
+ else:
+ return None
# Read and filter input file, skipping invalid lines
code = '''
@@ -87,34 +115,30 @@
invalid_line = line
continue
try:
- # GTF format: chrom source, name, chromStart, chromEnd, score, strand, frame, attributes.
- # Attributes format: name1 "value1" ; name2 "value2" ; ...
+ # Place attribute values into variables with attribute
+ # name; type casting is done as well.
elems = line.split( '\t' )
- attributes_list = elems[8].split(";")
- attributes = {}
- for name_value_pair in attributes_list:
+ attribute_values = {}
+ for name_value_pair in elems[8].split(";"):
pair = name_value_pair.strip().split(" ")
if pair == '':
continue
name = pair[0].strip()
if name == '':
continue
- # Need to strip double quote from values
- value = pair[1].strip(" \\"")
- attributes[name] = value
+ # Need to strip double quote from value and typecast.
+ attribute_values[name] = pair[1].strip(" \\"")
%s
if %s:
- %s
- if %s:
- lines_kept += 1
- print >> out, line
+ lines_kept += 1
+ print >> out, line
except Exception, e:
+ print e
skipped_lines += 1
if not invalid_line:
first_invalid_line = i + 1
invalid_line = line
-''' % ( assignment, attribute_name, type_cast, cond_text )
-
+''' % ( wrap, cond_text )
valid_filter = True
try:
--- a/tools/filters/gff/gff_filter_by_attribute.xml Wed May 04 16:45:10 2011 -0400
+++ b/tools/filters/gff/gff_filter_by_attribute.xml Thu May 05 16:51:56 2011 -0400
@@ -1,23 +1,11 @@
<tool id="gff_filter_by_attribute" name="Filter GFF data by attribute" version="0.1"><description>using simple expressions</description><command interpreter="python">
- gff_filter_by_attribute.py $input $out_file1 "$attribute_type" "$attribute_name" "$cond"
+ gff_filter_by_attribute.py $input $out_file1 "$cond" '${input.metadata.attribute_types}'
</command><inputs><param format="gff" name="input" type="data" label="Filter" help="Dataset missing? See TIP below."/>
- <param name="attribute_name" type="select" label="Attribute name" help="">
- <options from_dataset="input">
- <column name="name" index="8"/>
- <column name="value" index="8"/>
- <filter type="attribute_value_splitter" pair_separator=";" column="8"/>
- </options>
- </param>
- <param name="attribute_type" type="select" label="Attribute type">
- <option value="float">Float</option>
- <option value="int">Integer</option>
- <option value="str">String</option>
- </param>
- <param name="cond" size="40" type="text" value=">0" label="With following condition" help="Double equal signs, ==, must be used as shown above. To filter for an arbitrary string, use the Select tool.">
+ <param name="cond" size="40" type="text" value="gene_id=='uc002loc.1'" label="With following condition" help="Double equal signs, ==, must be used as shown above. To filter for an arbitrary string, use the Select tool."><validator type="empty_field" message="Enter a valid filtering condition, see syntax and examples below."/></param></inputs>
@@ -27,11 +15,14 @@
<tests><test><param name="input" value="gff_filter_attr_in1.gff"/>
- <param name="attribute_name" value="conf_lo"/>
- <param name="attribute_type" value="float"/>
- <param name="cond" value=">0"/>
+ <param name="cond" value="conf_lo>0"/><output name="out_file1" file="gff_filter_by_attribute_out1.gff"/></test>
+ <test>
+ <param name="input" value="gff_filter_attr_in1.gff"/>
+ <param name="cond" value="conf_lo==0 or conf_hi>125"/>
+ <output name="out_file1" file="gff_filter_by_attribute_out2.gff"/>
+ </test></tests><help>
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

04 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/0921bff6e81a/
changeset: r5500:0921bff6e81a
user: jgoecks
date: 2011-05-04 22:45:10
summary: Add metadata for GTF attribute values.
affected #: 1 file (2.0 KB)
--- a/lib/galaxy/datatypes/interval.py Wed May 04 10:20:54 2011 -0400
+++ b/lib/galaxy/datatypes/interval.py Wed May 04 16:45:10 2011 -0400
@@ -5,17 +5,17 @@
import pkg_resources
pkg_resources.require( "bx-python" )
-import logging, os, sys, time, tempfile, shutil
+import logging, os, sys, tempfile
import data
from galaxy import util
from galaxy.datatypes.sniff import *
from galaxy.web import url_for
-from cgi import escape
import urllib
from bx.intervals.io import *
from galaxy.datatypes import metadata
from galaxy.datatypes.metadata import MetadataElement
from galaxy.datatypes.tabular import Tabular
+from galaxy.datatypes.util.gff_util import parse_gff_attributes
import math
log = logging.getLogger(__name__)
@@ -888,6 +888,8 @@
MetadataElement( name="columns", default=9, desc="Number of columns", readonly=True, visible=False )
MetadataElement( name="column_types", default=['str','str','str','int','int','float','str','int','list'], param=metadata.ColumnTypesParameter, desc="Column types", readonly=True, visible=False )
+ MetadataElement( name="attributes", default=0, desc="Number of attributes", readonly=True, visible=False, no_value=0 )
+ MetadataElement( name="attribute_types", default={}, desc="Attribute types", param=metadata.ColumnTypesParameter, readonly=True, visible=False, no_value=[] )
def sniff( self, filename ):
"""
@@ -960,6 +962,42 @@
return True
except:
return False
+
+ def set_meta( self, dataset, overwrite = True, **kwd ):
+ # Use first N lines to set metadata for dataset attributes. Attributes
+ # not found in the first N lines will not have metadata.
+ num_lines = 200
+ attribute_types = {}
+ for i, line in enumerate( file ( dataset.file_name ) ):
+ if line and not line.startswith( '#' ):
+ elems = line.split( '\t' )
+ if len( elems ) == 9:
+ try:
+ # Loop through attributes to set types.
+ for name, value in parse_gff_attributes( elems[8] ).items():
+ # Default type is string.
+ value_type = "str"
+ try:
+ # Try int.
+ int( value )
+ value_type = "int"
+ except:
+ try:
+ # Try float.
+ float( value )
+ value_type = "float"
+ except:
+ pass
+ attribute_types[ name ] = value_type
+ except:
+ pass
+ if i + 1 == num_lines:
+ break
+
+ # Set attribute metadata and then set additional metadata.
+ dataset.metadata.attribute_types = attribute_types
+ dataset.metadata.attributes = len( attribute_types )
+ Gff.set_meta( self, dataset, overwrite = overwrite, skip = i )
class Wiggle( Tabular, _RemoteCallMixin ):
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: jgoecks: Trackster: enable a tool to be run on complete dataset or a visible region.
by Bitbucket 04 May '11
by Bitbucket 04 May '11
04 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/0eb5a2521d11/
changeset: r5499:0eb5a2521d11
user: jgoecks
date: 2011-05-04 16:20:54
summary: Trackster: enable a tool to be run on complete dataset or a visible region.
affected #: 3 files (2.0 KB)
--- a/lib/galaxy/web/controllers/tracks.py Tue May 03 11:35:21 2011 -0400
+++ b/lib/galaxy/web/controllers/tracks.py Wed May 04 10:20:54 2011 -0400
@@ -645,16 +645,17 @@
return self.tracks_grid( trans, **kwargs )
@web.expose
- def run_tool( self, trans, dataset_id, chrom, low, high, tool_id, **kwargs ):
+ def run_tool( self, trans, dataset_id, tool_id, chrom=None, low=None, high=None, **kwargs ):
"""
Run a tool on a subset of input data to produce a new output dataset that
corresponds to a dataset that a user is currently viewing.
"""
- # Parameter checks.
- if not chrom or not low or not high:
- return messages.NO_DATA
- low, high = int( low ), int( high )
+ # Run tool on region if region is specificied.
+ run_on_region = False
+ if chrom and low and high:
+ run_on_region = True
+ low, high = int( low ), int( high )
# Dataset check.
original_dataset = self.get_dataset( trans, dataset_id, check_ownership=False, check_accessible=True )
@@ -678,27 +679,23 @@
tool_params = tool.params_from_strings( tool_params, self.app )
#
- # Convert input datasets so that region of dataset can be quickly
- # extracted.
- # TODO: Is it useful/necessary to create data subsets for all input
- # datasets or only the original dataset (aka the dataset that the user
- # is viewing)? Currently we create data subsets for all input datasets
- # because this provides the best performance as the tool runs on small
- # datasets.
+ # If running tool on region, convert input datasets (create indices) so
+ # that can regions of data can be quickly extracted.
#
messages_list = []
- for jida in original_job.input_datasets:
- input_dataset = jida.dataset
- # TODO: put together more robust way to determine if a dataset can be indexed.
- if hasattr( input_dataset, 'get_track_type' ):
- # Can index dataset.
- track_type, data_sources = input_dataset.datatype.get_track_type()
- # Convert to datasource that provides 'data' because we need to
- # extract the original data.
- data_source = data_sources[ 'data' ]
- msg = self._convert_dataset( trans, input_dataset, data_source )
- if msg is not None:
- messages_list.append( msg )
+ if run_on_region:
+ for jida in original_job.input_datasets:
+ input_dataset = jida.dataset
+ # TODO: put together more robust way to determine if a dataset can be indexed.
+ if hasattr( input_dataset, 'get_track_type' ):
+ # Can index dataset.
+ track_type, data_sources = input_dataset.datatype.get_track_type()
+ # Convert to datasource that provides 'data' because we need to
+ # extract the original data.
+ data_source = data_sources[ 'data' ]
+ msg = self._convert_dataset( trans, input_dataset, data_source )
+ if msg is not None:
+ messages_list.append( msg )
# Return any messages generated during conversions.
return_message = _get_highest_priority_msg( messages_list )
@@ -706,41 +703,40 @@
return return_message
#
- # Set input datasets for tool. Input datasets are subsets of full
- # datasets and are based on chrom, low, high.
+ # Set target history (the history that tool will use for inputs/outputs).
+ # If user owns dataset, put new data in original dataset's history; if
+ # user does not own dataset (and hence is accessing dataset via sharing),
+ # put new data in user's current history.
#
-
- # If user is rerunning own tool, put new data in original dataset's
- # history. If another user is running tool, put new data in current
- # history.
if original_dataset.history.user == trans.user:
- working_history = original_dataset.history
+ target_history = original_dataset.history
else:
- working_history = trans.get_history( create=True )
- hda_permissions = trans.app.security_agent.history_get_default_permissions( working_history )
- messages_list = []
+ target_history = trans.get_history( create=True )
+ hda_permissions = trans.app.security_agent.history_get_default_permissions( target_history )
+
+ #
+ # Set input datasets for tool. If running on region, extract and use subset
+ # when possible.
+ #
for jida in original_job.input_datasets:
input_dataset = jida.dataset
- if hasattr( input_dataset.datatype, 'get_track_type' ):
- #
- # Dataset can be indexed and hence a subset can be extracted.
- #
+ if run_on_region and hasattr( input_dataset.datatype, 'get_track_type' ):
+ # Dataset is indexed and hence a subset can be extracted and used
+ # as input.
track_type, data_sources = input_dataset.datatype.get_track_type()
data_source = data_sources[ 'data' ]
converted_dataset = input_dataset.get_converted_dataset( trans, data_source )
deps = input_dataset.get_converted_dataset_deps( trans, data_source )
- #
# Create new HDA for input dataset's subset.
- #
new_dataset = trans.app.model.HistoryDatasetAssociation( extension=input_dataset.ext, \
- dbkey=input_dataset.dbkey, \
- create_dataset=True, \
- sa_session=trans.sa_session,
- name="Subset [%s:%i-%i] of data %i" % \
- ( chrom, low, high, input_dataset.hid ),
- visible=False )
- working_history.add_dataset( new_dataset )
+ dbkey=input_dataset.dbkey, \
+ create_dataset=True, \
+ sa_session=trans.sa_session,
+ name="Subset [%s:%i-%i] of data %i" % \
+ ( chrom, low, high, input_dataset.hid ),
+ visible=False )
+ target_history.add_dataset( new_dataset )
trans.sa_session.add( new_dataset )
trans.app.security_agent.set_all_dataset_permissions( new_dataset.dataset, hda_permissions )
@@ -751,7 +747,7 @@
dependencies=deps )
data_provider.write_data_to_file( chrom, low, high, new_dataset.file_name )
- # TODO: size not working.
+ # TODO: (a) size not working; (b) need to set peek.
new_dataset.set_size()
new_dataset.info = "Data subset for trackster"
new_dataset.set_dataset_state( trans.app.model.Dataset.states.OK )
@@ -761,18 +757,21 @@
tool_params[ jida.name ] = new_dataset
#
- # Start tool and handle outputs.
+ # Execute tool and handle outputs.
#
try:
- subset_job, subset_job_outputs = tool.execute( trans, incoming=tool_params, history=working_history )
+ subset_job, subset_job_outputs = tool.execute( trans, incoming=tool_params, history=target_history )
except Exception, e:
# Lots of things can go wrong when trying to execute tool.
return to_json_string( { "error" : True, "message" : e.__class__.__name__ + ": " + str(e) } )
- for output in subset_job_outputs.values():
- output.visible = False
- trans.sa_session.flush()
-
+ if run_on_region:
+ for output in subset_job_outputs.values():
+ output.visible = False
+ trans.sa_session.flush()
+
+ #
# Return new track that corresponds to the original dataset.
+ #
output_name = None
for joda in original_job.output_datasets:
if joda.dataset == original_dataset:
@@ -784,9 +783,9 @@
return self.add_track_async( trans, output_dataset.id )
- #
+ # -----------------
# Helper methods.
- #
+ # -----------------
def _check_dataset_state( self, trans, dataset ):
"""
--- a/static/scripts/packed/trackster.js Tue May 03 11:35:21 2011 -0400
+++ b/static/scripts/packed/trackster.js Wed May 04 10:20:54 2011 -0400
@@ -1,1 +1,1 @@
-var class_module=function(b,a){var c=function(){var f=arguments[0];for(var e=1;e<arguments.length;e++){var d=arguments[e];for(key in d){f[key]=d[key]}}return f};a.extend=c};var BEFORE=1001,CONTAINS=1002,OVERLAP_START=1003,OVERLAP_END=1004,CONTAINED_BY=1005,AFTER=1006;var compute_overlap=function(e,b){var g=e[0],f=e[1],d=b[0],c=b[1],a;if(g<d){if(f<d){a=BEFORE}else{if(f<=c){a=OVERLAP_START}else{a=CONTAINS}}}else{if(g>c){a=AFTER}else{if(f<=c){a=CONTAINED_BY}else{a=OVERLAP_END}}}return a};var is_overlap=function(c,b){var a=compute_overlap(c,b);return(a!==BEFORE&&a!==AFTER)};var trackster_module=function(f,T){var o=f("class").extend,q=f("slotting"),I=f("painters");var Z=function(aa,ab){this.document=aa;this.default_font=ab!==undefined?ab:"9px Monaco, Lucida Console, monospace";this.dummy_canvas=this.new_canvas();this.dummy_context=this.dummy_canvas.getContext("2d");this.dummy_context.font=this.default_font;this.char_width_px=this.dummy_context.measureText("A").width;this.patterns={};this.load_pattern("right_strand","/visualization/strand_right.png");this.load_pattern("left_strand","/visualization/strand_left.png");this.load_pattern("right_strand_inv","/visualization/strand_right_inv.png");this.load_pattern("left_strand_inv","/visualization/strand_left_inv.png")};o(Z.prototype,{load_pattern:function(aa,ae){var ab=this.patterns,ac=this.dummy_context,ad=new Image();ad.src=image_path+ae;ad.onload=function(){ab[aa]=ac.createPattern(ad,"repeat")}},get_pattern:function(aa){return this.patterns[aa]},new_canvas:function(){var aa=this.document.createElement("canvas");if(window.G_vmlCanvasManager){G_vmlCanvasManager.initElement(aa)}aa.manager=this;return aa}});var C=function(aa,ab){aa.bind("drag",{handle:ab,relative:true},function(af,ag){var ae=$(this).parent();var ad=ae.children();var ac;for(ac=0;ac<ad.length;ac++){if(ag.offsetY<$(ad.get(ac)).position().top){break}}if(ac===ad.length){if(this!==ad.get(ac-1)){ae.append(this)}}else{if(this!==ad.get(ac)){$(this).insertBefore(ad.get(ac))}}})};T.sortable=C;var h=function(ac,aa){var ab=aa-ac;return(ab<=2?0.01:(ab<=100?1:(ab<=1000?5:10)))};var D=9,A=10,O=D+2,x=100,F=12000,M=200,t=10,H=5000,u=100,n="There was an error in indexing this dataset. ",G="A converter for this dataset is not installed. Please check your datatypes_conf.xml file.",B="No data for this chrom/contig.",r="Currently indexing... please wait",w="Tool cannot be rerun: ",a="Loading data...",U="Ready for display",d=10,s=5,z=5;function v(aa){return Math.round(aa*1000)/1000}var c=function(aa){this.num_elements=aa;this.clear()};o(c.prototype,{get:function(ab){var aa=this.key_ary.indexOf(ab);if(aa!==-1){this.move_key_to_end(ab,aa)}return this.obj_cache[ab]},set:function(ab,ac){if(!this.obj_cache[ab]){if(this.key_ary.length>=this.num_elements){var aa=this.key_ary.shift();delete this.obj_cache[aa]}this.key_ary.push(ab)}this.obj_cache[ab]=ac;return ac},move_key_to_end:function(ab,aa){this.key_ary.splice(aa,1);this.key_ary.push(ab)},clear:function(){this.obj_cache={};this.key_ary=[]},size:function(){return this.key_ary.length}});var N=function(ab,aa,ac){c.call(this,ab);this.track=aa;this.subset=(ac!==undefined?ac:true)};o(N.prototype,c.prototype,{load_data:function(ai,aj,ae,ah,ab,ag){var ad={chrom:ai,low:aj,high:ae,mode:ah,resolution:ab,dataset_id:this.track.dataset_id,hda_ldda:this.track.hda_ldda};$.extend(ad,ag);if(this.track.filters_manager){var ak=[];var aa=this.track.filters_manager.filters;for(var af=0;af<aa.length;af++){ak[ak.length]=aa[af].name}ad.filter_cols=JSON.stringify(ak)}var ac=this;return $.getJSON(this.track.data_url,ad,function(al){ac.set_data(aj,ae,ah,al)})},get_data:function(ac,aa,af,ag,ab,ae){var ad=this.get(this.gen_key(aa,af,ag));if(ad){return ad}ad=this.load_data(ac,aa,af,ag,ab,ae);this.set_data(aa,af,ag,ad);return ad},set_data:function(ab,ac,ad,aa){return this.set(this.gen_key(ab,ac,ad),aa)},gen_key:function(aa,ac,ad){var ab=aa+"_"+ac+"_"+ad;return ab},split_key:function(aa){return aa.split("_")}});var E=function(ab,aa,ac){N.call(this,ab,aa,ac)};o(E.prototype,N.prototype,c.prototype,{load_data:function(ac,aa,ae,af,ab,ad){if(ab>1){return}return N.prototype.load_data.call(this,ac,aa,ae,af,ab,ad)}});var Y=function(aa,ad,ac,ab,ae){this.container=aa;this.chrom=null;this.vis_id=ac;this.dbkey=ab;this.title=ad;this.tracks=[];this.label_tracks=[];this.max_low=0;this.max_high=0;this.num_tracks=0;this.track_id_counter=0;this.zoom_factor=3;this.min_separation=30;this.has_changes=false;this.init(ae);this.canvas_manager=new Z(aa.get(0).ownerDocument);this.reset()};o(Y.prototype,{init:function(ad){var ac=this.container,aa=this;this.top_container=$("<div/>").addClass("top-container").appendTo(ac);this.content_div=$("<div/>").addClass("content").css("position","relative").appendTo(ac);this.bottom_container=$("<div/>").addClass("bottom-container").appendTo(ac);this.top_labeltrack=$("<div/>").addClass("top-labeltrack").appendTo(this.top_container);this.viewport_container=$("<div/>").addClass("viewport-container").addClass("viewport-container").appendTo(this.content_div);this.intro_div=$("<div/>").addClass("intro").text("Select a chrom from the dropdown below").hide();this.nav_labeltrack=$("<div/>").addClass("nav-labeltrack").appendTo(this.bottom_container);this.nav_container=$("<div/>").addClass("nav-container").prependTo(this.top_container);this.nav=$("<div/>").addClass("nav").appendTo(this.nav_container);this.overview=$("<div/>").addClass("overview").appendTo(this.bottom_container);this.overview_viewport=$("<div/>").addClass("overview-viewport").appendTo(this.overview);this.overview_close=$("<a href='javascript:void(0);'>Close Overview</a>").addClass("overview-close").hide().appendTo(this.overview_viewport);this.overview_highlight=$("<div/>").addClass("overview-highlight").hide().appendTo(this.overview_viewport);this.overview_box_background=$("<div/>").addClass("overview-boxback").appendTo(this.overview_viewport);this.overview_box=$("<div/>").addClass("overview-box").appendTo(this.overview_viewport);this.default_overview_height=this.overview_box.height();this.nav_controls=$("<div/>").addClass("nav-controls").appendTo(this.nav);this.chrom_select=$("<select/>").attr({name:"chrom"}).css("width","15em").addClass("no-autocomplete").append("<option value=''>Loading</option>").appendTo(this.nav_controls);var ab=function(ae){if(ae.type==="focusout"||(ae.keyCode||ae.which)===13||(ae.keyCode||ae.which)===27){if((ae.keyCode||ae.which)!==27){aa.go_to($(this).val())}$(this).hide();$(this).val("");aa.location_span.show();aa.chrom_select.show()}};this.nav_input=$("<input/>").addClass("nav-input").hide().bind("keyup focusout",ab).appendTo(this.nav_controls);this.location_span=$("<span/>").addClass("location").appendTo(this.nav_controls);this.location_span.bind("click",function(){aa.location_span.hide();aa.chrom_select.hide();aa.nav_input.val(aa.chrom+":"+aa.low+"-"+aa.high);aa.nav_input.css("display","inline-block");aa.nav_input.select();aa.nav_input.focus()});if(this.vis_id!==undefined){this.hidden_input=$("<input/>").attr("type","hidden").val(this.vis_id).appendTo(this.nav_controls)}this.zo_link=$("<a id='zoom-out' />").click(function(){aa.zoom_out();aa.redraw()}).appendTo(this.nav_controls);this.zi_link=$("<a id='zoom-in' />").click(function(){aa.zoom_in();aa.redraw()}).appendTo(this.nav_controls);this.load_chroms({low:0},ad);this.chrom_select.bind("change",function(){aa.change_chrom(aa.chrom_select.val())});this.intro_div.show();this.content_div.bind("click",function(ae){$(this).find("input").trigger("blur")});this.content_div.bind("dblclick",function(ae){aa.zoom_in(ae.pageX,this.viewport_container)});this.overview_box.bind("dragstart",function(ae,af){this.current_x=af.offsetX}).bind("drag",function(ae,ag){var ah=ag.offsetX-this.current_x;this.current_x=ag.offsetX;var af=Math.round(ah/aa.viewport_container.width()*(aa.max_high-aa.max_low));aa.move_delta(-af)});this.overview_close.bind("click",function(){for(var af=0,ae=aa.tracks.length;af<ae;af++){aa.tracks[af].is_overview=false}$(this).siblings().filter("canvas").remove();$(this).parent().css("height",aa.overview_box.height());aa.overview_highlight.hide();$(this).hide()});this.viewport_container.bind("draginit",function(ae,af){if(ae.clientX>aa.viewport_container.width()-16){return false}}).bind("dragstart",function(ae,af){af.original_low=aa.low;af.current_height=ae.clientY;af.current_x=af.offsetX}).bind("drag",function(ag,ai){var ae=$(this);var aj=ai.offsetX-ai.current_x;var af=ae.scrollTop()-(ag.clientY-ai.current_height);ae.scrollTop(af);ai.current_height=ag.clientY;ai.current_x=ai.offsetX;var ah=Math.round(aj/aa.viewport_container.width()*(aa.high-aa.low));aa.move_delta(ah)}).bind("mousewheel",function(ag,ai,af,ae){if(af){var ah=Math.round(-af/aa.viewport_container.width()*(aa.high-aa.low));aa.move_delta(ah)}});this.top_labeltrack.bind("dragstart",function(ae,af){return $("<div />").css({height:aa.content_div.height()+aa.top_labeltrack.height()+aa.nav_labeltrack.height()+1,top:"0px",position:"absolute","background-color":"#ccf",opacity:0.5,"z-index":1000}).appendTo($(this))}).bind("drag",function(ai,aj){$(aj.proxy).css({left:Math.min(ai.pageX,aj.startX),width:Math.abs(ai.pageX-aj.startX)});var af=Math.min(ai.pageX,aj.startX)-aa.container.offset().left,ae=Math.max(ai.pageX,aj.startX)-aa.container.offset().left,ah=(aa.high-aa.low),ag=aa.viewport_container.width();aa.update_location(Math.round(af/ag*ah)+aa.low,Math.round(ae/ag*ah)+aa.low)}).bind("dragend",function(aj,ak){var af=Math.min(aj.pageX,ak.startX),ae=Math.max(aj.pageX,ak.startX),ah=(aa.high-aa.low),ag=aa.viewport_container.width(),ai=aa.low;aa.low=Math.round(af/ag*ah)+ai;aa.high=Math.round(ae/ag*ah)+ai;$(ak.proxy).remove();aa.redraw()});this.add_label_track(new X(this,this.top_labeltrack));this.add_label_track(new X(this,this.nav_labeltrack));$(window).bind("resize",function(){aa.resize_window()});$(document).bind("redraw",function(){aa.redraw()});this.reset();$(window).trigger("resize")},update_location:function(aa,ab){this.location_span.text(commatize(aa)+" - "+commatize(ab));this.nav_input.val(this.chrom+":"+commatize(aa)+"-"+commatize(ab))},load_chroms:function(ab,ac){ab.num=u;$.extend(ab,(this.vis_id!==undefined?{vis_id:this.vis_id}:{dbkey:this.dbkey}));var aa=this;$.ajax({url:chrom_url,data:ab,dataType:"json",success:function(ae){if(ae.chrom_info.length===0){alert("Invalid chromosome: "+ab.chrom);return}if(ae.reference){aa.add_label_track(new y(aa))}aa.chrom_data=ae.chrom_info;var ah='<option value="">Select Chrom/Contig</option>';for(var ag=0,ad=aa.chrom_data.length;ag<ad;ag++){var af=aa.chrom_data[ag].chrom;ah+='<option value="'+af+'">'+af+"</option>"}if(ae.prev_chroms){ah+='<option value="previous">Previous '+u+"</option>"}if(ae.next_chroms){ah+='<option value="next">Next '+u+"</option>"}aa.chrom_select.html(ah);if(ac){ac()}aa.chrom_start_index=ae.start_index},error:function(){alert("Could not load chroms for this dbkey:",aa.dbkey)}})},change_chrom:function(ae,ab,ag){if(!ae||ae==="None"){return}var ad=this;if(ae==="previous"){ad.load_chroms({low:this.chrom_start_index-u});return}if(ae==="next"){ad.load_chroms({low:this.chrom_start_index+u});return}var af=$.grep(ad.chrom_data,function(ai,aj){return ai.chrom===ae})[0];if(af===undefined){ad.load_chroms({chrom:ae},function(){ad.change_chrom(ae,ab,ag)});return}else{if(ae!==ad.chrom){ad.chrom=ae;if(!ad.chrom){ad.intro_div.show()}else{ad.intro_div.hide()}ad.chrom_select.val(ad.chrom);ad.max_high=af.len-1;ad.reset();ad.redraw(true);for(var ah=0,aa=ad.tracks.length;ah<aa;ah++){var ac=ad.tracks[ah];if(ac.init){ac.init()}}}if(ab!==undefined&&ag!==undefined){ad.low=Math.max(ab,0);ad.high=Math.min(ag,ad.max_high)}ad.reset_overview();ad.redraw()}},go_to:function(ae){var ai=this,aa,ad,ab=ae.split(":"),ag=ab[0],ah=ab[1];if(ah!==undefined){try{var af=ah.split("-");aa=parseInt(af[0].replace(/,/g,""),10);ad=parseInt(af[1].replace(/,/g,""),10)}catch(ac){return false}}ai.change_chrom(ag,aa,ad)},move_fraction:function(ac){var aa=this;var ab=aa.high-aa.low;this.move_delta(ac*ab)},move_delta:function(ac){var aa=this;var ab=aa.high-aa.low;if(aa.low-ac<aa.max_low){aa.low=aa.max_low;aa.high=aa.max_low+ab}else{if(aa.high-ac>aa.max_high){aa.high=aa.max_high;aa.low=aa.max_high-ab}else{aa.high-=ac;aa.low-=ac}}aa.redraw()},add_track:function(aa){aa.view=this;aa.track_id=this.track_id_counter;this.tracks.push(aa);if(aa.init){aa.init()}aa.container_div.attr("id","track_"+aa.track_id);C(aa.container_div,".draghandle");this.track_id_counter+=1;this.num_tracks+=1},add_label_track:function(aa){aa.view=this;this.label_tracks.push(aa)},remove_track:function(aa){this.has_changes=true;aa.container_div.fadeOut("slow",function(){$(this).remove()});delete this.tracks[this.tracks.indexOf(aa)];this.num_tracks-=1},reset:function(){this.low=this.max_low;this.high=this.max_high;this.viewport_container.find(".yaxislabel").remove()},redraw:function(ah){var ag=this.high-this.low,af=this.low,ab=this.high;if(af<this.max_low){af=this.max_low}if(ab>this.max_high){ab=this.max_high}if(this.high!==0&&ag<this.min_separation){ab=af+this.min_separation}this.low=Math.floor(af);this.high=Math.ceil(ab);this.resolution=Math.pow(10,Math.ceil(Math.log((this.high-this.low)/M)/Math.LN10));this.zoom_res=Math.pow(t,Math.max(0,Math.ceil(Math.log(this.resolution,t)/Math.log(t))));var aa=(this.low/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ae=((this.high-this.low)/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ai=13;this.overview_box.css({left:aa,width:Math.max(ai,ae)}).show();if(ae<ai){this.overview_box.css("left",aa-(ai-ae)/2)}if(this.overview_highlight){this.overview_highlight.css({left:aa,width:ae})}this.update_location(this.low,this.high);if(!ah){for(var ac=0,ad=this.tracks.length;ac<ad;ac++){if(this.tracks[ac]&&this.tracks[ac].enabled){this.tracks[ac].draw()}}for(ac=0,ad=this.label_tracks.length;ac<ad;ac++){this.label_tracks[ac].draw()}}},zoom_in:function(ab,ac){if(this.max_high===0||this.high-this.low<this.min_separation){return}var ad=this.high-this.low,ae=ad/2+this.low,aa=(ad/this.zoom_factor)/2;if(ab){ae=ab/this.viewport_container.width()*(this.high-this.low)+this.low}this.low=Math.round(ae-aa);this.high=Math.round(ae+aa);this.redraw()},zoom_out:function(){if(this.max_high===0){return}var ab=this.high-this.low,ac=ab/2+this.low,aa=(ab*this.zoom_factor)/2;this.low=Math.round(ac-aa);this.high=Math.round(ac+aa);this.redraw()},resize_window:function(){this.viewport_container.height(this.container.height()-this.top_container.height()-this.bottom_container.height());this.nav_container.width(this.container.width());this.redraw()},reset_overview:function(){this.overview_viewport.find("canvas").remove();this.overview_viewport.height(this.default_overview_height);this.overview_box.height(this.default_overview_height);this.overview_close.hide();this.overview_highlight.hide()}});var p=function(ab,ae){this.track=ab;this.name=ae.name;this.params=[];var am=ae.params;for(var ac=0;ac<am.length;ac++){var ah=am[ac],aa=ah.name,al=ah.label,ad=unescape(ah.html),aj=ah.type;if(aj==="number"){this.params[this.params.length]=new g(aa,al,ad,ah.min,ah.max)}else{if(aj=="select"){this.params[this.params.length]=new K(aa,al,ad)}else{console.log("WARNING: unrecognized tool parameter type:",aa,aj)}}}this.parent_div=$("<div/>").addClass("dynamic-tool").hide();this.parent_div.bind("drag",function(ao){ao.stopPropagation()}).bind("click",function(ao){ao.stopPropagation()}).bind("dblclick",function(ao){ao.stopPropagation()});var ak=$("<div class='tool-name'>").appendTo(this.parent_div).text(this.name);var ai=this.params;var af=this;$.each(this.params,function(ap,at){var ar=$("<div>").addClass("param-row").appendTo(af.parent_div);var ao=$("<div>").addClass("param-label").text(at.label).appendTo(ar);var aq=$("<div/>").addClass("slider").html(at.html).appendTo(ar);$("<div style='clear: both;'/>").appendTo(ar)});this.parent_div.find("input").click(function(){$(this).select()});var an=$("<div>").addClass("slider-row").appendTo(this.parent_div);var ag=$("<input type='submit'>").attr("value","Run").appendTo(an);var af=this;ag.click(function(){af.run()})};o(p.prototype,{get_param_values_dict:function(){var aa={};this.parent_div.find(":input").each(function(){var ab=$(this).attr("name"),ac=$(this).val();aa[ab]=JSON.stringify(ac)});return aa},get_param_values:function(){var ab=[];var aa={};this.parent_div.find(":input").each(function(){var ac=$(this).attr("name"),ad=$(this).val();if(ac){ab[ab.length]=ad}});return ab},run:function(){var ab={dataset_id:this.track.original_dataset_id,chrom:this.track.view.chrom,low:this.track.view.low,high:this.track.view.high,tool_id:this.name};$.extend(ab,this.get_param_values_dict());var ad=this.track,ac=ab.tool_id+ad.tool_region_and_parameters_str(ab.chrom,ab.low,ab.high),ae;if(ad.track_type==="FeatureTrack"){ae=new Q(ac,view,ad.hda_ldda,undefined,{},{},ad)}this.track.add_track(ae);ae.content_div.text("Starting job.");var aa=function(){$.getJSON(run_tool_url,ab,function(af){if(af==="no converter"){ae.container_div.addClass("error");ae.content_div.text(G)}else{if(af.error){ae.container_div.addClass("error");ae.content_div.text(w+af.message)}else{if(af==="pending"){ae.container_div.addClass("pending");ae.content_div.text("Converting input data so that it can be easily reused.");setTimeout(aa,2000)}else{ae.dataset_id=af.dataset_id;ae.content_div.text("Running job.");ae.init()}}}})};aa()}});var K=function(ab,aa,ac){this.name=ab;this.label=aa;this.html=ac};var g=function(ac,ab,ae,ad,aa){K.call(this,ac,ab,ae);this.min=ad;this.max=aa};var j=function(ab,aa,ac){this.name=ab;this.index=aa;this.value=ac};var R=function(ab,aa){this.name=ab;this.index=aa;this.low=-Number.MAX_VALUE;this.high=Number.MAX_VALUE;this.min=Number.MAX_VALUE;this.max=-Number.MAX_VALUE;this.slider=null;this.slider_label=null};o(R.prototype,{applies_to:function(aa){if(aa.length>this.index){return true}return false},keep:function(aa){if(!this.applies_to(aa)){return true}var ab=parseInt(aa[this.index]);return(isNaN(ab)||(ab>=this.low&&ab<=this.high))},update_attrs:function(ab){var aa=false;if(!this.applies_to(ab)){return aa}if(ab[this.index]<this.min){this.min=Math.floor(ab[this.index]);aa=true}if(ab[this.index]>this.max){this.max=Math.ceil(ab[this.index]);aa=true}return aa},update_ui_elt:function(){var ab=this.slider.slider("option","min"),aa=this.slider.slider("option","max");if(this.min<ab||this.max>aa){this.slider.slider("option","min",this.min);this.slider.slider("option","max",this.max);this.slider.slider("option","step",h(this.min,this.max));this.slider.slider("option","values",[this.min,this.max])}}});var W=function(ac,ai){this.track=ac;this.filters=[];for(var ae=0;ae<ai.length;ae++){var aa=ai[ae];var ab=aa.name,ah=aa.type,af=aa.index;if(ah==="int"||ah==="float"){this.filters[ae]=new R(ab,af)}else{this.filters[ae]=new j(ab,af,ah)}}var ag=function(aj,ak,al){aj.click(function(){var am=ak.text();max=parseFloat(al.slider("option","max")),input_size=(max<=1?4:max<=1000000?max.toString().length:6),multi_value=false;if(al.slider("option","values")){input_size=2*input_size+1;multi_value=true}ak.text("");$("<input type='text'/>").attr("size",input_size).attr("maxlength",input_size).attr("value",am).appendTo(ak).focus().select().click(function(an){an.stopPropagation()}).blur(function(){$(this).remove();ak.text(am)}).keyup(function(ar){if(ar.keyCode===27){$(this).trigger("blur")}else{if(ar.keyCode===13){var ap=al.slider("option","min"),an=al.slider("option","max"),aq=function(at){return(isNaN(at)||at>an||at<ap)},ao=$(this).val();if(!multi_value){ao=parseFloat(ao);if(aq(ao)){alert("Parameter value must be in the range ["+ap+"-"+an+"]");return $(this)}}else{ao=ao.split("-");ao=[parseFloat(ao[0]),parseFloat(ao[1])];if(aq(ao[0])||aq(ao[1])){alert("Parameter value must be in the range ["+ap+"-"+an+"]");return $(this)}}al.slider((multi_value?"values":"value"),ao)}}})})};this.parent_div=$("<div/>").addClass("filters").hide();this.parent_div.bind("drag",function(aj){aj.stopPropagation()}).bind("click",function(aj){aj.stopPropagation()}).bind("dblclick",function(aj){aj.stopPropagation()});var ad=this;$.each(this.filters,function(ap,ak){var am=$("<div/>").addClass("slider-row").appendTo(ad.parent_div);var aj=$("<div/>").addClass("slider-label").appendTo(am);var ar=$("<span/>").addClass("slider-name").text(ak.name+" ").appendTo(aj);var al=$("<span/>");var an=$("<span/>").addClass("slider-value").appendTo(aj).append("[").append(al).append("]");var aq=$("<div/>").addClass("slider").appendTo(am);ak.control_element=$("<div/>").attr("id",ak.name+"-filter-control").appendTo(aq);var ao=[0,0];ak.control_element.slider({range:true,min:Number.MAX_VALUE,max:-Number.MIN_VALUE,values:[0,0],slide:function(at,au){ao=au.values;al.text(au.values[0]+"-"+au.values[1]);setTimeout(function(){if(au.values[0]==ao[0]&&au.values[1]==ao[1]){var av=au.values;al.text(av[0]+"-"+av[1]);ak.low=av[0];ak.high=av[1];ad.track.draw(true,true)}},50)},change:function(at,au){ak.control_element.slider("option","slide").call(ak.control_element,at,au)}});ak.slider=ak.control_element;ak.slider_label=al;ag(an,al,ak.control_element);$("<div style='clear: both;'/>").appendTo(am)})};var V=function(aa){this.track=aa.track;this.params=aa.params;this.values={};if(aa.saved_values){this.restore_values(aa.saved_values)}this.onchange=aa.onchange};o(V.prototype,{restore_values:function(aa){var ab=this;$.each(this.params,function(ac,ad){if(aa[ad.key]!==undefined){ab.values[ad.key]=aa[ad.key]}else{ab.values[ad.key]=ad.default_value}})},build_form:function(){var ab=this;var aa=$("<div />");$.each(this.params,function(af,ad){if(!ad.hidden){var ac="param_"+af;var ak=$("<div class='form-row' />").appendTo(aa);ak.append($("<label />").attr("for",ac).text(ad.label+":"));if(ad.type==="bool"){ak.append($('<input type="checkbox" />').attr("id",ac).attr("name",ac).attr("checked",ab.values[ad.key]))}else{if(ad.type==="color"){var ah=ab.values[ad.key];var ag=$("<input />").attr("id",ac).attr("name",ac).val(ah);var ai=$("<div class='tipsy tipsy-north' style='position: absolute;' />").hide();var ae=$("<div style='background-color: black; padding: 10px;'></div>").appendTo(ai);var aj=$("<div/>").appendTo(ae).farbtastic({width:100,height:100,callback:ag,color:ah});$("<div />").append(ag).append(ai).appendTo(ak).bind("click",function(al){ai.css({left:$(this).position().left+($(ag).width()/2)-60,top:$(this).position().top+$(this.height)}).show();$(document).bind("click.color-picker",function(){ai.hide();$(document).unbind("click.color-picker")});al.stopPropagation()})}else{ak.append($("<input />").attr("id",ac).attr("name",ac).val(ab.values[ad.key]))}}}});return aa},update_from_form:function(aa){var ac=this;var ab=false;$.each(this.params,function(ad,af){if(!af.hidden){var ag="param_"+ad;var ae=aa.find("#"+ag).val();if(af.type==="float"){ae=parseFloat(ae)}else{if(af.type==="int"){ae=parseInt(ae)}else{if(af.type==="bool"){ae=aa.find("#"+ag).is(":checked")}}}if(ae!==ac.values[af.key]){ac.values[af.key]=ae;ab=true}}});if(ab){this.onchange()}}});var b=function(ac,ab,aa){this.index=ac;this.resolution=ab;this.canvas=$("<div class='track-tile'/>").append(aa)};var m=function(ac,ab,aa,ad){b.call(this,ac,ab,aa);this.max_val=ad};var L=function(ac,ab,aa){b.call(this,ac,ab,aa)};var k=function(ab,aa,ae,ac,ad){this.name=ab;this.view=aa;this.parent_element=ae;this.data_url=(ac?ac:default_data_url);this.data_url_extra_params={};this.data_query_wait=(ad?ad:H);this.dataset_check_url=converted_datasets_state_url;this.container_div=$("<div />").addClass("track").css("position","relative");if(!this.hidden){this.header_div=$("<div class='track-header' />").appendTo(this.container_div);if(this.view.editor){this.drag_div=$("<div class='draghandle' />").appendTo(this.header_div)}this.name_div=$("<div class='menubutton popup' />").appendTo(this.header_div);this.name_div.text(this.name);this.name_div.attr("id",this.name.replace(/\s+/g,"-").replace(/[^a-zA-Z0-9\-]/g,"").toLowerCase())}this.content_div=$("<div class='track-content'>").appendTo(this.container_div);this.parent_element.append(this.container_div)};o(k.prototype,{init:function(){var aa=this;aa.enabled=false;aa.tile_cache.clear();aa.data_cache.clear();aa.initial_canvas=undefined;aa.content_div.css("height","auto");aa.container_div.removeClass("nodata error pending");if(!aa.dataset_id){return}$.getJSON(converted_datasets_state_url,{hda_ldda:aa.hda_ldda,dataset_id:aa.dataset_id,chrom:aa.view.chrom},function(ab){if(!ab||ab==="error"||ab.kind==="error"){aa.container_div.addClass("error");aa.content_div.text(n);if(ab.message){var ad=aa.view.tracks.indexOf(aa);var ac=$(" <a href='javascript:void(0);'></a>").text("View error").bind("click",function(){show_modal("Trackster Error","<pre>"+ab.message+"</pre>",{Close:hide_modal})});aa.content_div.append(ac)}}else{if(ab==="no converter"){aa.container_div.addClass("error");aa.content_div.text(G)}else{if(ab==="no data"||(ab.data!==undefined&&(ab.data===null||ab.data.length===0))){aa.container_div.addClass("nodata");aa.content_div.text(B)}else{if(ab==="pending"){aa.container_div.addClass("pending");aa.content_div.text(r);setTimeout(function(){aa.init()},aa.data_query_wait)}else{if(ab.status==="data"){if(ab.valid_chroms){aa.valid_chroms=ab.valid_chroms;aa.make_name_popup_menu()}aa.content_div.text(U);if(aa.view.chrom){aa.content_div.text("");aa.content_div.css("height",aa.height_px+"px");aa.enabled=true;$.when(aa.predraw_init()).done(function(){aa.container_div.removeClass("nodata error pending");aa.draw()})}}}}}}})},predraw_init:function(){},update_name:function(aa){this.old_name=this.name;this.name=aa;this.name_div.text(this.name)},revert_name:function(){this.name=this.old_name;this.name_div.text(this.name)}});var J=function(ai,ag,aj){var ab=this,ak=ab.view;this.filters_manager=(ai!==undefined?new W(this,ai):undefined);this.filters_available=false;this.filters_visible=false;this.tool=(ag!==undefined&&obj_length(ag)>0?new p(this,ag):undefined);this.parent_track=aj;this.child_tracks=[];if(ab.hidden){return}if(this.parent_track){this.header_div.find(".draghandle").removeClass("draghandle").addClass("child-track-icon").addClass("icon-button");this.parent_element.addClass("child-track");this.tool=undefined}ab.child_tracks_container=$("<div/>").addClass("child-tracks-container").hide();ab.container_div.append(ab.child_tracks_container);if(this.filters_manager){this.filters_div=this.filters_manager.parent_div;this.header_div.after(this.filters_div)}if(this.tool){this.dynamic_tool_div=this.tool.parent_div;this.header_div.after(this.dynamic_tool_div)}if(ab.display_modes!==undefined){if(ab.mode_div===undefined){ab.mode_div=$("<div class='right-float menubutton popup' />").appendTo(ab.header_div);var ad=(ab.track_config&&ab.track_config.values.mode?ab.track_config.values.mode:ab.display_modes[0]);ab.mode=ad;ab.mode_div.text(ad);var ac=function(al){ab.mode_div.text(al);ab.mode=al;ab.track_config.values.mode=al;ab.tile_cache.clear();ab.draw()};var aa={};for(var ae=0,ah=ab.display_modes.length;ae<ah;ae++){var af=ab.display_modes[ae];aa[af]=function(al){return function(){ac(al)}}(af)}make_popupmenu(ab.mode_div,aa)}else{ab.mode_div.hide()}}this.make_name_popup_menu()};o(J.prototype,k.prototype,{make_name_popup_menu:function(){var ab=this;var aa={};aa["Edit configuration"]=function(){var ah=function(){hide_modal();$(window).unbind("keypress.check_enter_esc")},af=function(){ab.track_config.update_from_form($(".dialog-box"));hide_modal();$(window).unbind("keypress.check_enter_esc")},ag=function(ai){if((ai.keyCode||ai.which)===27){ah()}else{if((ai.keyCode||ai.which)===13){af()}}};$(window).bind("keypress.check_enter_esc",ag);show_modal("Configure Track",ab.track_config.build_form(),{Cancel:ah,OK:af})};if(ab.filters_available>0){var ae=(ab.filters_div.is(":visible")?"Hide filters":"Show filters");aa[ae]=function(){ab.filters_visible=(ab.filters_div.is(":visible"));ab.filters_div.toggle();ab.make_name_popup_menu()}}if(ab.tool){var ae=(ab.dynamic_tool_div.is(":visible")?"Hide tool":"Show tool");aa[ae]=function(){if(!ab.dynamic_tool_div.is(":visible")){ab.update_name(ab.name+ab.tool_region_and_parameters_str())}else{menu_option_text="Show dynamic tool";ab.revert_name()}ab.dynamic_tool_div.toggle();ab.make_name_popup_menu()}}if(ab.valid_chroms){aa["List chrom/contigs with data"]=function(){show_modal("Chrom/contigs with data","<p>"+ab.valid_chroms.join("<br/>")+"</p>",{Close:function(){hide_modal()}})}}var ac=view;var ad=function(){$("#no-tracks").show()};if(this.parent_track){ac=this.parent_track;ad=function(){}}aa.Remove=function(){ac.remove_track(ab);if(ac.num_tracks===0){ad()}};make_popupmenu(ab.name_div,aa)},draw:function(aa,ac){var au=this.view.low,ag=this.view.high,ai=ag-au,ak=this.view.container.width(),ae=ak/ai,al=this.view.resolution,ad=$("<div style='position: relative;'></div>"),am=function(aw,ax,av){return aw+"_"+ax+"_"+av};if(!ac){this.content_div.children().remove()}this.content_div.append(ad);this.max_height=0;var ao=Math.floor(au/al/M);var af=[];var ap=0;while((ao*M*al)<ag){var at=am(ak,ae,ao);var ah=this.tile_cache.get(at);var aq=ao*M*this.view.resolution;var ab=aq+M*this.view.resolution;if(!aa&&ah){af[af.length]=ah;this.show_tile(ah,ad,aq,ae)}else{this.delayed_draw(aa,at,ao,al,ad,ae,af)}ao+=1;ap++}var aj=this;var ar=setInterval(function(){if(af.length===ap){clearInterval(ar);if(ac){var ay=aj.content_div.children();var az=false;for(var ax=ay.length-1,aD=0;ax>=aD;ax--){var aw=$(ay[ax]);if(az){aw.remove()}else{if(aw.children().length!==0){az=true}}}}if(aj.track_type=="FeatureTrack"&&aj.mode=="Histogram"){var aC=-1;for(var ax=0;ax<af.length;ax++){var aF=af[ax].max_val;if(aF>aC){aC=aF}}for(var ax=0;ax<af.length;ax++){if(af[ax].max_val!==aC){var aE=af[ax];aE.canvas.remove();aj.delayed_draw(true,am(ak,ae,aE.index),aE.index,aE.resolution,ad,ae,[],{max:aC})}}}if(aj.filters_manager){var av=aj.filters_manager.filters;for(var aB=0;aB<av.length;aB++){av[aB].update_ui_elt()}var aA=false;if(aj.example_feature){for(var aB=0;aB<av.length;aB++){if(av[aB].applies_to(aj.example_feature)){aA=true;break}}}if(aj.filters_available!==aA){aj.filters_available=aA;if(!aj.filters_available){aj.filters_div.hide()}aj.make_name_popup_menu()}}}},50);for(var an=0;an<this.child_tracks.length;an++){this.child_tracks[an].draw(aa,ac)}},delayed_draw:function(ab,ai,ac,ae,aj,am,ak,af){var ad=this,ag=ac*M*ae,al=ag+M*ae;var ah=function(av,an,ap,ao,at,au,aq){var ar=ad.draw_tile(an,ap,ao,au,aq);ad.tile_cache.set(ai,ar);ad.show_tile(ar,at,ag,au);ak[ak.length]=ar};var aa=setTimeout(function(){if(ag<=ad.view.high&&al>=ad.view.low){var an=(ab?undefined:ad.tile_cache.get(ai));if(an){ad.show_tile(an,aj,ag,am);ak[ak.length]=an}else{$.when(ad.data_cache.get_data(view.chrom,ag,al,ad.mode,ae,ad.data_url_extra_params)).then(function(ao){o(ao,af);if(view.reference_track&&am>view.canvas_manager.char_width_px){$.when(view.reference_track.data_cache.get_data(view.chrom,ag,al,ad.mode,ae,view.reference_track.data_url_extra_params)).then(function(ap){ah(aa,ao,ae,ac,aj,am,ap)})}else{ah(aa,ao,ae,ac,aj,am)}})}}},50)},show_tile:function(ad,ag,ae,ah){var ab=this;var ac=this.view.high-this.view.low,af=(ae-this.view.low)*ah;if(this.left_offset){af-=this.left_offset}var aa=ad.canvas;aa.css({position:"absolute",top:0,left:af,height:""});ag.append(aa);ab.max_height=Math.max(ab.max_height,aa.height());ab.content_div.css("height",ab.max_height+"px");ag.children().css("height",ab.max_height+"px")},set_overview:function(){var aa=this.view;if(this.initial_canvas&&this.is_overview){aa.overview_close.show();aa.overview_viewport.append(this.initial_canvas);aa.overview_highlight.show().height(this.initial_canvas.height());aa.overview_viewport.height(this.initial_canvas.height()+aa.overview_box.height())}$(window).trigger("resize")},tool_region_and_parameters_str:function(ac,aa,ad){var ab=this,ae=(ac!==undefined&&aa!==undefined&&ad!==undefined?ac+":"+aa+"-"+ad:"all");return" - region=["+ae+"], parameters=["+ab.tool.get_param_values().join(", ")+"]"},add_track:function(aa){aa.track_id=this.track_id+"_"+this.child_tracks.length;aa.container_div.attr("id","track_"+aa.track_id);this.child_tracks_container.append(aa.container_div);C(aa.container_div,".child-track-icon");if(!$(this.child_tracks_container).is(":visible")){this.child_tracks_container.show()}this.child_tracks.push(aa);this.view.has_changes=true},remove_track:function(aa){aa.container_div.fadeOut("slow",function(){$(this).remove()})}});var X=function(aa,ab){this.track_type="LabelTrack";this.hidden=true;k.call(this,null,aa,ab);this.container_div.addClass("label-track")};o(X.prototype,k.prototype,{draw:function(){var ac=this.view,ad=ac.high-ac.low,ag=Math.floor(Math.pow(10,Math.floor(Math.log(ad)/Math.log(10)))),aa=Math.floor(ac.low/ag)*ag,ae=this.view.container.width(),ab=$("<div style='position: relative; height: 1.3em;'></div>");while(aa<ac.high){var af=(aa-ac.low)/ad*ae;ab.append($("<div class='label'>"+commatize(aa)+"</div>").css({position:"absolute",left:af-1}));aa+=ag}this.content_div.children(":first").remove();this.content_div.append(ab)}});var y=function(aa){this.track_type="ReferenceTrack";this.hidden=true;k.call(this,null,aa,aa.top_labeltrack);J.call(this);aa.reference_track=this;this.left_offset=200;this.height_px=12;this.container_div.addClass("reference-track");this.content_div.css("background","none");this.content_div.css("min-height","0px");this.content_div.css("border","none");this.data_url=reference_url;this.data_url_extra_params={dbkey:aa.dbkey};this.data_cache=new E(z,this,false);this.tile_cache=new c(s)};o(y.prototype,J.prototype,{draw_tile:function(ai,af,ab,ak){var ae=this,ac=M*af;if(ak>this.view.canvas_manager.char_width_px){if(ai===null){ae.content_div.css("height","0px");return}var ad=this.view.canvas_manager.new_canvas();var aj=ad.getContext("2d");ad.width=Math.ceil(ac*ak+ae.left_offset);ad.height=ae.height_px;aj.font=aj.canvas.manager.default_font;aj.textAlign="center";for(var ag=0,ah=ai.length;ag<ah;ag++){var aa=Math.round(ag*ak);aj.fillText(ai[ag],aa+ae.left_offset,10)}return new b(ab,af,ad)}this.content_div.css("height","0px")}});var l=function(ae,ac,af,aa,ad){var ab=this;this.track_type="LineTrack";this.display_modes=["Histogram","Line","Filled","Intensity"];this.mode="Histogram";k.call(this,ae,ac,ac.viewport_container);J.call(this);this.min_height_px=16;this.max_height_px=400;this.height_px=80;this.hda_ldda=af;this.dataset_id=aa;this.original_dataset_id=aa;this.data_cache=new N(z,this);this.tile_cache=new c(s);this.track_config=new V({track:this,params:[{key:"color",label:"Color",type:"color",default_value:"black"},{key:"min_value",label:"Min Value",type:"float",default_value:undefined},{key:"max_value",label:"Max Value",type:"float",default_value:undefined},{key:"mode",type:"string",default_value:this.mode,hidden:true},{key:"height",type:"int",default_value:this.height_px,hidden:true}],saved_values:ad,onchange:function(){ab.vertical_range=ab.prefs.max_value-ab.prefs.min_value;$("#linetrack_"+ab.track_id+"_minval").text(ab.prefs.min_value);$("#linetrack_"+ab.track_id+"_maxval").text(ab.prefs.max_value);ab.tile_cache.clear();ab.draw()}});this.prefs=this.track_config.values;this.height_px=this.track_config.values.height;this.vertical_range=this.track_config.values.max_value-this.track_config.values.min_value;this.add_resize_handle()};o(l.prototype,J.prototype,{add_resize_handle:function(){var aa=this;var ad=false;var ac=false;var ab=$("<div class='track-resize'>");$(aa.container_div).hover(function(){ad=true;ab.show()},function(){ad=false;if(!ac){ab.hide()}});ab.hide().bind("dragstart",function(ae,af){ac=true;af.original_height=$(aa.content_div).height()}).bind("drag",function(af,ag){var ae=Math.min(Math.max(ag.original_height+ag.deltaY,aa.min_height_px),aa.max_height_px);$(aa.content_div).css("height",ae);aa.height_px=ae;aa.draw(true)}).bind("dragend",function(ae,af){aa.tile_cache.clear();ac=false;if(!ad){ab.hide()}aa.track_config.values.height=aa.height_px}).appendTo(aa.container_div)},predraw_init:function(){var aa=this,ab=aa.view.tracks.indexOf(aa);aa.vertical_range=undefined;return $.getJSON(aa.data_url,{stats:true,chrom:aa.view.chrom,low:null,high:null,hda_ldda:aa.hda_ldda,dataset_id:aa.dataset_id},function(ac){aa.container_div.addClass("line-track");var ae=ac.data;if(isNaN(parseFloat(aa.prefs.min_value))||isNaN(parseFloat(aa.prefs.max_value))){aa.prefs.min_value=ae.min;aa.prefs.max_value=ae.max;$("#track_"+ab+"_minval").val(aa.prefs.min_value);$("#track_"+ab+"_maxval").val(aa.prefs.max_value)}aa.vertical_range=aa.prefs.max_value-aa.prefs.min_value;aa.total_frequency=ae.total_frequency;aa.container_div.find(".yaxislabel").remove();var af=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+ab+"_minval").text(v(aa.prefs.min_value));var ad=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+ab+"_maxval").text(v(aa.prefs.max_value));ad.css({position:"absolute",top:"24px",left:"10px"});ad.prependTo(aa.container_div);af.css({position:"absolute",bottom:"2px",left:"10px"});af.prependTo(aa.container_div)})},draw_tile:function(ak,ae,ab,aj){if(this.vertical_range===undefined){return}var af=ab*M*ae,ad=M*ae,aa=Math.ceil(ad*aj),ah=this.height_px;var ac=this.view.canvas_manager.new_canvas();ac.width=aa,ac.height=ah;var ai=ac.getContext("2d");var ag=new I.LinePainter(ak.data,af,af+ad,this.prefs,this.mode);ag.draw(ai,aa,ah);return new b(ad,ae,ac)}});var e=function(aa,af,ae,ai,ah,ac,ad,ag){var ab=this;this.track_type="FeatureTrack";this.display_modes=["Auto","Histogram","Dense","Squish","Pack"];this.track_config=new V({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:ah,onchange:function(){ab.tile_cache.clear();ab.draw()}});this.prefs=this.track_config.values;k.call(this,aa,af,af.viewport_container);J.call(this,ac,ad,ag);this.height_px=0;this.container_div.addClass("feature-track");this.hda_ldda=ae;this.dataset_id=ai;this.original_dataset_id=ai;this.show_labels_scale=0.001;this.showing_details=false;this.summary_draw_height=30;this.inc_slots={};this.start_end_dct={};this.tile_cache=new c(d);this.data_cache=new N(20,this);this.left_offset=200;this.painter=I.LinkedFeaturePainter};o(e.prototype,J.prototype,{update_auto_mode:function(aa){if(this.mode=="Auto"){if(aa=="no_detail"){aa="feature spans"}else{if(aa=="summary_tree"){aa="coverage histogram"}}this.mode_div.text("Auto ("+aa+")")}},incremental_slots:function(ae,ab,ad){var ac=this.view.canvas_manager.dummy_context,aa=this.inc_slots[ae];if(!aa||(aa.mode!==ad)){aa=new (q.FeatureSlotter)(ae,ad==="Pack",x,function(af){return ac.measureText(af)});aa.mode=ad;this.inc_slots[ae]=aa}return aa.slot_features(ab)},get_summary_tree_data:function(ae,ah,ac,ap){if(ap>ac-ah){ap=ac-ah}var al=Math.floor((ac-ah)/ap),ao=[],ad=0;var af=0,ag=0,ak,an=0,ai=[],am,aj;var ab=function(at,ar,au,aq){at[0]=ar+au*aq;at[1]=ar+(au+1)*aq};while(an<ap&&af!==ae.length){var aa=false;for(;an<ap&&!aa;an++){ab(ai,ah,an,al);for(ag=af;ag<ae.length;ag++){ak=ae[ag].slice(1,3);if(is_overlap(ak,ai)){aa=true;break}}if(aa){break}}data_start_index=ag;ao[ao.length]=am=[ai[0],0];for(;ag<ae.length;ag++){ak=ae[ag].slice(1,3);if(is_overlap(ak,ai)){am[1]++}else{break}}if(am[1]>ad){ad=am[1]}an++}return{max:ad,delta:al,data:ao}},draw_tile:function(an,aw,aA,aj,ad){var at=this,aC=aA*M*aw,ab=(aA+1)*M*aw,ap=ab-aC,au=Math.ceil(ap*aj),ar=this.mode,aG=25,ae=this.left_offset,ao,af;if(ar==="Auto"){if(an.dataset_type==="summary_tree"){ar=an.dataset_type}else{if(an.extra_info==="no_detail"){ar="no_detail"}else{var aF=an.data;if(this.view.high-this.view.low>F){ar="Squish"}else{ar="Pack"}}}this.update_auto_mode(ar)}if(ar==="summary_tree"||ar==="Histogram"){af=this.summary_draw_height;this.container_div.find(".yaxislabel").remove();var aa=$("<div />").addClass("yaxislabel");aa.text(an.max);aa.css({position:"absolute",top:"22px",left:"10px"});aa.prependTo(this.container_div);var ac=this.view.canvas_manager.new_canvas();ac.width=au+ae;ac.height=af+O;if(an.dataset_type!="summary_tree"){var ak=this.get_summary_tree_data(an.data,aC,ab,200);if(an.max){ak.max=an.max}an=ak}var aD=new I.SummaryTreePainter(an,aC,ab,this.prefs);var av=ac.getContext("2d");av.translate(ae,O);aD.draw(av,au,af);return new m(aA,aw,ac,an.max)}var ao,ah=1;if(ar==="no_detail"||ar==="Squish"||ar==="Pack"){ah=this.incremental_slots(aj,an.data,ar);ao=this.inc_slots[aj].slots}var ai=[];if(an.data){var al=this.filters_manager.filters;for(var ax=0,az=an.data.length;ax<az;ax++){var ag=an.data[ax];var ay=false;var am;for(var aB=0,aE=al.length;aB<aE;aB++){am=al[aB];am.update_attrs(ag);if(!am.keep(ag)){ay=true;break}}if(!ay){ai.push(ag)}}}var aD=new (this.painter)(ai,aC,ab,this.prefs,ar,ad);var af=aD.get_required_height(ah)+A;var ac=this.view.canvas_manager.new_canvas();ac.width=au+ae;ac.height=af;var av=ac.getContext("2d");av.fillStyle=this.prefs.block_color;av.font=av.canvas.manager.default_font;av.textAlign="right";this.container_div.find(".yaxislabel").remove();if(an.message){$(ac).css({"border-top":"1px solid red"});av.fillStyle="red";av.textAlign="left";var aq=av.textBaseline;av.textBaseline="top";av.fillText(an.message,ae,0);av.textBaseline=aq;if(!an.data){return new b(aA,aw,ac,af)}}this.example_feature=(an.data.length?an.data[0]:undefined);av.translate(ae,A);aD.draw(av,au,af,ao);return new L(aA,aw,ac)}});var P=function(ad,ab,af,aa,ac,ae){e.call(this,ad,ab,af,aa,ac,ae);this.track_type="VcfTrack";this.painter=I.VariantPainter};o(P.prototype,J.prototype,e.prototype);var S=function(ad,ab,af,aa,ac,ae){e.call(this,ad,ab,af,aa,ac,ae);this.track_config=new V({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_insertions",label:"Show insertions",type:"bool",default_value:false},{key:"show_differences",label:"Show differences only",type:"bool",default_value:true},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:ac,onchange:function(){this.track.tile_cache.clear();this.track.draw()}});this.prefs=this.track_config.values;this.track_type="ReadTrack";this.painter=I.ReadPainter;this.make_name_popup_menu()};o(S.prototype,J.prototype,e.prototype);var Q=function(ae,ac,ag,aa,ad,af,ab){e.call(this,ae,ac,ag,aa,ad,af,{},ab);this.track_type="ToolDataFeatureTrack";this.data_url=raw_data_url;this.data_query_wait=1000;this.dataset_check_url=dataset_state_url};o(Q.prototype,J.prototype,e.prototype,{predraw_init:function(){var ab=this;var aa=function(){if(ab.data_cache.size()===0){setTimeout(aa,300)}else{ab.data_url=default_data_url;ab.data_query_wait=H;ab.dataset_state_url=converted_datasets_state_url;$.getJSON(ab.dataset_state_url,{dataset_id:ab.dataset_id,hda_ldda:ab.hda_ldda},function(ac){})}};aa()}});T.View=Y;T.LineTrack=l;T.FeatureTrack=e;T.ReadTrack=S};var slotting_module=function(c,b){var e=c("class").extend;var d=2,a=5;b.FeatureSlotter=function(j,h,f,g){this.slots={};this.start_end_dct={};this.w_scale=j;this.include_label=h;this.max_rows=f;this.measureText=g};e(b.FeatureSlotter.prototype,{slot_features:function(m){var p=this.w_scale,s=this.slots,h=this.start_end_dct,y=[],A=[],n=0,z=this.max_rows;for(var w=0,x=m.length;w<x;w++){var l=m[w],o=l[0];if(s[o]!==undefined){n=Math.max(n,s[o]);A.push(s[o])}else{y.push(w)}}var q=function(G,H){for(var F=0;F<=z;F++){var D=false,I=h[F];if(I!==undefined){for(var C=0,E=I.length;C<E;C++){var B=I[C];if(H>B[0]&&G<B[1]){D=true;break}}}if(!D){return F}}return -1};for(var w=0,x=y.length;w<x;w++){var l=m[y[w]],o=l[0],u=l[1],f=l[2],r=l[3],g=Math.floor(u*p),k=Math.ceil(f*p),v=this.measureText(r).width,j;if(r!==undefined&&this.include_label){v+=(d+a);if(g-v>=0){g-=v;j="left"}else{k+=v;j="right"}}var t=q(g,k);if(t>=0){if(h[t]===undefined){h[t]=[]}h[t].push([g,k]);s[o]=t;n=Math.max(n,t)}else{}}return n+1}})};var painters_module=function(j,w){var t=j("class").extend;var o=function(H,z,F,y,E,C){if(C===undefined){C=4}var B=y-z;var A=E-F;var D=Math.floor(Math.sqrt(B*B+A*A)/C);var I=B/D;var G=A/D;var x;for(x=0;x<D;x++,z+=I,F+=G){if(x%2!==0){continue}H.fillRect(z,F,C,1)}};var p=function(A,z,x,D){var C=z-D/2,B=z+D/2,E=x-Math.sqrt(D*3/2);A.beginPath();A.moveTo(C,E);A.lineTo(B,E);A.lineTo(z,x);A.lineTo(C,E);A.strokeStyle=this.fillStyle;A.fill();A.stroke();A.closePath()};var m=function(z,B,x,y,A){this.data=z;this.view_start=B;this.view_end=x;this.prefs=t({},this.default_prefs,y);this.mode=A};m.prototype.default_prefs={};var u=function(z,B,x,y,A){m.call(this,z,B,x,y,A)};u.prototype.default_prefs={show_counts:false};u.prototype.draw=function(M,z,L){var E=this.view_start,O=this.view_end-this.view_start,N=z/O;var J=this.data.data,I=this.data.delta,G=this.data.max,B=L;delta_x_px=Math.ceil(I*N);M.save();for(var C=0,D=J.length;C<D;C++){var H=Math.floor((J[C][0]-E)*N);var F=J[C][1];if(!F){continue}var K=F/G*L;if(F!==0&&K<1){K=1}M.fillStyle="black";M.fillRect(H,B-K,delta_x_px,K);var A=4;if(this.prefs.show_counts&&(M.measureText(F).width+A)<delta_x_px){M.fillStyle="#666";M.textAlign="center";M.fillText(F,H+(delta_x_px/2),10)}}M.restore()};var c=function(z,B,x,y,A){m.call(this,z,B,x,y,A)};c.prototype.default_prefs={min_value:undefined,max_value:undefined,mode:"Histogram",color:"#000",overflow_color:"#F66"};c.prototype.draw=function(O,N,L){var F=false,H=this.prefs.min_value,D=this.prefs.max_value,K=D-H,z=L,A=this.view_start,M=this.view_end-this.view_start,B=N/M,I=this.mode,S=this.data;O.save();var T=Math.round(L+H/K*L);if(I!=="Intensity"){O.fillStyle="#aaa";O.fillRect(0,T,N,1)}O.beginPath();O.fillStyle=this.prefs.color;var R,E,C;if(S.length>1){C=Math.ceil((S[1][0]-S[0][0])*B)}else{C=10}for(var P=0,Q=S.length;P<Q;P++){R=Math.round((S[P][0]-A)*B);E=S[P][1];if(E===null){if(F&&I==="Filled"){O.lineTo(R,z)}F=false;continue}if(E<H){E=H}else{if(E>D){E=D}}if(I==="Histogram"){E=Math.round(E/K*z);O.fillRect(R,T,C,-E)}else{if(I==="Intensity"){E=255-Math.floor((E-H)/K*255);O.fillStyle="rgb("+E+","+E+","+E+")";O.fillRect(R,0,C,z)}else{E=Math.round(z-(E-H)/K*z);if(F){O.lineTo(R,E)}else{F=true;if(I==="Filled"){O.moveTo(R,z);O.lineTo(R,E)}else{O.moveTo(R,E)}}}}}if(I==="Filled"){if(F){O.lineTo(R,T);O.lineTo(0,T)}O.fill()}else{O.stroke()}var x=-1,J=-1;O.fillStyle=this.prefs.overflow_color;var G;for(var P=0,Q=S.length;P<Q;P++){E=S[P][1];R=Math.round((S[P][0]-A)*B);if(J>=0&&(E===null||E<D)){O.fillRect(J,0,G+C-J,2);J=-1}else{if(x>=0&&(E===null||E>H)){O.fillRect(x,L-2,G+C-x,2);x=-1}}if(E!==null&&E>D&&J<0){J=R}else{if(E!==null&&E<H&&x<0){x=R}}G=R}O.restore()};var n=function(z,B,x,y,A){m.call(this,z,B,x,y,A)};n.prototype.default_prefs={block_color:"#FFF",connector_color:"#FFF"};t(n.prototype,{get_required_height:function(y){var x=y_scale=this.get_row_height(),z=this.mode;if(z==="no_detail"||z==="Squish"||z==="Pack"){x=y*y_scale}return x+Math.max(Math.round(y_scale/2),5)},draw:function(J,A,I,F){var D=this.data,G=this.view_start,K=this.view_end;J.save();J.fillStyle=this.prefs.block_color;J.textAlign="right";var N=this.view_end-this.view_start,M=A/N,z=this.get_row_height();for(var C=0,E=D.length;C<E;C++){var L=D[C],B=L[0],x=L[1],y=L[2],H=(F&&F[B]!==undefined?F[B]:null);if((x<K&&y>G)&&(this.mode=="Dense"||H!==null)){this.draw_element(J,this.mode,L,H,G,K,M,z,A)}}J.restore()}});var d=10,h=3,l=5,v=10,f=1,r=3,e=3,a=9,k=2,g="#ccc";var q=function(z,B,x,y,A){n.call(this,z,B,x,y,A)};t(q.prototype,n.prototype,{get_row_height:function(){var y=this.mode,x;if(y==="Dense"){x=d}else{if(y==="no_detail"){x=h}else{if(y==="Squish"){x=l}else{x=v}}}return x},draw_element:function(J,C,R,E,L,ab,af,ag,x){var O=R[0],ad=R[1],V=R[2],M=R[3],W=Math.floor(Math.max(0,(ad-L)*af)),K=Math.ceil(Math.min(x,Math.max(0,(V-L)*af))),U=(C==="Dense"?0:(0+E))*ag,I,Z,N=null,ah=null,A=this.prefs.block_color,Y=this.prefs.label_color;if(C=="Dense"){E=1}if(C==="no_detail"){J.fillStyle=A;J.fillRect(W,U+5,K-W,f)}else{var H=R[4],T=R[5],X=R[6],B=R[7];if(T&&X){N=Math.floor(Math.max(0,(T-L)*af));ah=Math.ceil(Math.min(x,Math.max(0,(X-L)*af)))}var ae,P;if(C==="Squish"||C==="Dense"){ae=1;P=e}else{ae=5;P=a}if(!B){if(R.strand){if(R.strand==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand_inv")}else{if(R.strand==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand_inv")}}}else{J.fillStyle=A}J.fillRect(W,U,K-W,P)}else{var G,Q;if(C==="Squish"||C==="Dense"){J.fillStyle=g;G=U+Math.floor(e/2)+1;Q=1}else{if(H){var G=U;var Q=P;if(H==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand")}else{if(H==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand")}}}else{J.fillStyle=g;G+=(e/2)+1;Q=1}}J.fillRect(W,G,K-W,Q);for(var ac=0,z=B.length;ac<z;ac++){var D=B[ac],y=Math.floor(Math.max(0,(D[0]-L)*af)),S=Math.ceil(Math.min(x,Math.max((D[1]-L)*af)));if(y>S){continue}J.fillStyle=A;J.fillRect(y,U+(P-ae)/2+1,S-y,ae);if(N!==undefined&&X>T&&!(y>ah||S<N)){var aa=Math.max(y,N),F=Math.min(S,ah);J.fillRect(aa,U+1,F-aa,P);if(B.length==1&&C=="Pack"){if(H==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand_inv")}else{if(H==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand_inv")}}if(aa+14<F){aa+=2;F-=2}J.fillRect(aa,U+1,F-aa,P)}}}}if(C==="Pack"&&ad>L){J.fillStyle=Y;if(L===0&&W-J.measureText(M).width<0){J.textAlign="left";J.fillText(M,K+k,U+8)}else{J.textAlign="right";J.fillText(M,W-k,U+8)}J.fillStyle=A}}}});var b=function(z,B,x,y,A){n.call(this,z,B,x,y,A)};t(b.prototype,n.prototype,{draw_element:function(Q,L,F,B,T,z,I,R,O){var F=data[i],H=F[0],P=F[1],A=F[2],K=F[3],D=Math.floor(Math.max(0,(P-T)*I)),G=Math.ceil(Math.min(O,Math.max(0,(A-T)*I))),C=(L==="Dense"?0:(0+B))*R,x,U,y=null,J=null;if(no_label){Q.fillStyle=block_color;Q.fillRect(D+left_offset,C+5,G-D,1)}else{var S=F[4],N=F[5],E=F[6];x=9;U=1;Q.fillRect(D+left_offset,C,G-D,x);if(L!=="Dense"&&K!==undefined&&P>T){Q.fillStyle=label_color;if(T===0&&D-Q.measureText(K).width<0){Q.textAlign="left";Q.fillText(K,G+2+left_offset,C+8)}else{Q.textAlign="right";Q.fillText(K,D-2+left_offset,C+8)}Q.fillStyle=block_color}var M=S+" / "+N;if(P>T&&Q.measureText(M).width<(G-D)){Q.fillStyle="white";Q.textAlign="center";Q.fillText(M,left_offset+D+(G-D)/2,C+8);Q.fillStyle=block_color}}}});var s=function(A,C,x,z,B,y){n.call(this,A,C,x,z,B);this.ref_seq=y};s.prototype.default_prefs=t({},n.prototype.default_prefs,{show_insertions:false});t(s.prototype,n.prototype,{get_row_height:function(){var x,y=this.mode;if(y==="Dense"){x=d}else{if(y==="Squish"){x=l}else{x=v;if(this.prefs.show_insertions){x*=2}}}return x},draw_read:function(T,O,K,Y,z,S,H,E,D){T.textAlign="center";var R=this,y=[Y,z],N=0,U=0,Q=0;ref_seq=this.ref_seq,char_width_px=T.canvas.manager.char_width_px;var ad=[];if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){Q=Math.round(K/2)}if(!H){H=[[0,E.length]]}for(var L=0,W=H.length;L<W;L++){var I=H[L],A="MIDNSHP=X"[I[0]],M=I[1];if(A==="H"||A==="S"){N-=M}var F=S+N,ac=Math.floor(Math.max(0,(F-Y)*K)),G=Math.floor(Math.max(0,(F+M-Y)*K));if(ac===G){G+=1}switch(A){case"H":break;case"S":case"M":case"=":if(is_overlap([F,F+M],y)){var P=E.slice(U,U+M);if(Q>0){T.fillStyle=this.prefs.block_color;T.fillRect(ac-Q,D+1,G-ac,9);T.fillStyle=g;for(var aa=0,x=P.length;aa<x;aa++){if(this.prefs.show_differences&&ref_seq){var J=ref_seq[F-Y+aa];if(!J||J.toLowerCase()===P[aa].toLowerCase()){continue}}if(F+aa>=Y&&F+aa<=z){var ab=Math.floor(Math.max(0,(F+aa-Y)*K));T.fillText(P[aa],ab,D+9)}}}else{T.fillStyle=this.prefs.block_color;T.fillRect(ac,D+4,G-ac,e)}}U+=M;N+=M;break;case"N":T.fillStyle=g;T.fillRect(ac-Q,D+5,G-ac,1);N+=M;break;case"D":T.fillStyle="red";T.fillRect(ac-Q,D+4,G-ac,3);N+=M;break;case"P":break;case"I":var X=ac-Q;if(is_overlap([F,F+M],y)){var P=E.slice(U,U+M);if(this.prefs.show_insertions){var C=ac-(G-ac)/2;if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){T.fillStyle="yellow";T.fillRect(C-Q,D-9,G-ac,9);ad[ad.length]={type:"triangle",data:[X,D+4,5]};T.fillStyle=g;switch(seq_tile_overlap){case (OVERLAP_START):P=P.slice(Y-F);break;case (OVERLAP_END):P=P.slice(0,F-z);break;case (CONTAINED_BY):break;case (CONTAINS):P=P.slice(Y-F,F-z);break}for(var aa=0,x=P.length;aa<x;aa++){var ab=Math.floor(Math.max(0,(F+aa-Y)*K));T.fillText(P[aa],ab-(G-ac)/2,D)}}else{T.fillStyle="yellow";T.fillRect(C,D+(this.mode!=="Dense"?2:5),G-ac,(O!=="Dense"?e:r))}}else{if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){ad[ad.length]={type:"text",data:[P.length,X,D+9]}}else{}}}U+=M;break;case"X":U+=M;break}}T.fillStyle="yellow";var Z,B,ae;for(var V=0;V<ad.length;V++){Z=ad[V];B=Z.type;ae=Z.data;if(B==="text"){T.save();T.font="bold "+T.font;T.fillText(ae[0],ae[1],ae[2]);T.restore()}else{if(B=="triangle"){p(T,ae[0],ae[1],ae[2])}}}},draw_element:function(Q,L,D,A,T,y,H,R,O){var G=D[0],P=D[1],z=D[2],I=D[3],C=Math.floor(Math.max(0,(P-T)*H)),E=Math.ceil(Math.min(O,Math.max(0,(z-T)*H))),B=(L==="Dense"?0:(0+A))*R,U=this.prefs.block_color,F=this.prefs.label_color,N=0;if((L==="Pack"||this.mode==="Auto")&&H>Q.canvas.manager.char_width_px){var N=Math.round(H/2)}Q.fillStyle=U;if(D[5] instanceof Array){var M=Math.floor(Math.max(0,(D[4][0]-T)*H)),K=Math.ceil(Math.min(O,Math.max(0,(D[4][1]-T)*H))),J=Math.floor(Math.max(0,(D[5][0]-T)*H)),x=Math.ceil(Math.min(O,Math.max(0,(D[5][1]-T)*H)));if(D[4][1]>=T&&D[4][0]<=y&&D[4][2]){this.draw_read(Q,L,H,T,y,D[4][0],D[4][2],D[4][3],B)}if(D[5][1]>=T&&D[5][0]<=y&&D[5][2]){this.draw_read(Q,L,H,T,y,D[5][0],D[5][2],D[5][3],B)}if(J>K){Q.fillStyle=g;o(Q,K-N,B+5,J-N,B+5)}}else{Q.fillStyle=U;this.draw_read(Q,L,H,T,y,P,D[4],D[5],B)}if(L==="Pack"&&P>T){Q.fillStyle=this.prefs.label_color;var S=1;if(S===0&&C-Q.measureText(I).width<0){Q.textAlign="left";Q.fillText(I,E+k-N,B+8)}else{Q.textAlign="right";Q.fillText(I,C-k-N,B+8)}Q.fillStyle=U}}});w.SummaryTreePainter=u;w.LinePainter=c;w.LinkedFeaturePainter=q;w.ReadPainter=s;w.VariantPainter=b};(function(d){var c={};var b=function(e){return c[e]};var a=function(f,g){var e={};g(b,e);c[f]=e};a("class",class_module);a("slotting",slotting_module);a("painters",painters_module);a("trackster",trackster_module);for(key in c.trackster){d[key]=c.trackster[key]}})(window);
\ No newline at end of file
+var class_module=function(b,a){var c=function(){var f=arguments[0];for(var e=1;e<arguments.length;e++){var d=arguments[e];for(key in d){f[key]=d[key]}}return f};a.extend=c};var BEFORE=1001,CONTAINS=1002,OVERLAP_START=1003,OVERLAP_END=1004,CONTAINED_BY=1005,AFTER=1006;var compute_overlap=function(e,b){var g=e[0],f=e[1],d=b[0],c=b[1],a;if(g<d){if(f<d){a=BEFORE}else{if(f<=c){a=OVERLAP_START}else{a=CONTAINS}}}else{if(g>c){a=AFTER}else{if(f<=c){a=CONTAINED_BY}else{a=OVERLAP_END}}}return a};var is_overlap=function(c,b){var a=compute_overlap(c,b);return(a!==BEFORE&&a!==AFTER)};var trackster_module=function(f,S){var n=f("class").extend,p=f("slotting"),H=f("painters");var Y=function(Z,aa){this.document=Z;this.default_font=aa!==undefined?aa:"9px Monaco, Lucida Console, monospace";this.dummy_canvas=this.new_canvas();this.dummy_context=this.dummy_canvas.getContext("2d");this.dummy_context.font=this.default_font;this.char_width_px=this.dummy_context.measureText("A").width;this.patterns={};this.load_pattern("right_strand","/visualization/strand_right.png");this.load_pattern("left_strand","/visualization/strand_left.png");this.load_pattern("right_strand_inv","/visualization/strand_right_inv.png");this.load_pattern("left_strand_inv","/visualization/strand_left_inv.png")};n(Y.prototype,{load_pattern:function(Z,ad){var aa=this.patterns,ab=this.dummy_context,ac=new Image();ac.src=image_path+ad;ac.onload=function(){aa[Z]=ab.createPattern(ac,"repeat")}},get_pattern:function(Z){return this.patterns[Z]},new_canvas:function(){var Z=this.document.createElement("canvas");if(window.G_vmlCanvasManager){G_vmlCanvasManager.initElement(Z)}Z.manager=this;return Z}});var B=function(Z,aa){Z.bind("drag",{handle:aa,relative:true},function(ae,af){var ad=$(this).parent();var ac=ad.children();var ab;for(ab=0;ab<ac.length;ab++){if(af.offsetY<$(ac.get(ab)).position().top){break}}if(ab===ac.length){if(this!==ac.get(ab-1)){ad.append(this)}}else{if(this!==ac.get(ab)){$(this).insertBefore(ac.get(ab))}}})};S.sortable=B;var C=9,z=10,N=C+2,w=100,E=12000,L=200,s=10,G=5000,t=100,m="There was an error in indexing this dataset. ",F="A converter for this dataset is not installed. Please check your datatypes_conf.xml file.",A="No data for this chrom/contig.",q="Currently indexing... please wait",v="Tool cannot be rerun: ",a="Loading data...",T="Ready for display",d=10,r=5,y=5;function u(Z){return Math.round(Z*1000)/1000}var c=function(Z){this.num_elements=Z;this.clear()};n(c.prototype,{get:function(aa){var Z=this.key_ary.indexOf(aa);if(Z!==-1){this.move_key_to_end(aa,Z)}return this.obj_cache[aa]},set:function(aa,ab){if(!this.obj_cache[aa]){if(this.key_ary.length>=this.num_elements){var Z=this.key_ary.shift();delete this.obj_cache[Z]}this.key_ary.push(aa)}this.obj_cache[aa]=ab;return ab},move_key_to_end:function(aa,Z){this.key_ary.splice(Z,1);this.key_ary.push(aa)},clear:function(){this.obj_cache={};this.key_ary=[]},size:function(){return this.key_ary.length}});var M=function(aa,Z,ab){c.call(this,aa);this.track=Z;this.subset=(ab!==undefined?ab:true)};n(M.prototype,c.prototype,{load_data:function(ah,ai,ad,ag,aa,af){var ac={chrom:ah,low:ai,high:ad,mode:ag,resolution:aa,dataset_id:this.track.dataset_id,hda_ldda:this.track.hda_ldda};$.extend(ac,af);if(this.track.filters_manager){var aj=[];var Z=this.track.filters_manager.filters;for(var ae=0;ae<Z.length;ae++){aj[aj.length]=Z[ae].name}ac.filter_cols=JSON.stringify(aj)}var ab=this;return $.getJSON(this.track.data_url,ac,function(ak){ab.set_data(ai,ad,ag,ak)})},get_data:function(ab,Z,ae,af,aa,ad){var ac=this.get(this.gen_key(Z,ae,af));if(ac){return ac}ac=this.load_data(ab,Z,ae,af,aa,ad);this.set_data(Z,ae,af,ac);return ac},set_data:function(aa,ab,ac,Z){return this.set(this.gen_key(aa,ab,ac),Z)},gen_key:function(Z,ab,ac){var aa=Z+"_"+ab+"_"+ac;return aa},split_key:function(Z){return Z.split("_")}});var D=function(aa,Z,ab){M.call(this,aa,Z,ab)};n(D.prototype,M.prototype,c.prototype,{load_data:function(ab,Z,ad,ae,aa,ac){if(aa>1){return}return M.prototype.load_data.call(this,ab,Z,ad,ae,aa,ac)}});var X=function(Z,ac,ab,aa,ad){this.container=Z;this.chrom=null;this.vis_id=ab;this.dbkey=aa;this.title=ac;this.tracks=[];this.label_tracks=[];this.max_low=0;this.max_high=0;this.num_tracks=0;this.track_id_counter=0;this.zoom_factor=3;this.min_separation=30;this.has_changes=false;this.init(ad);this.canvas_manager=new Y(Z.get(0).ownerDocument);this.reset()};n(X.prototype,{init:function(ac){var ab=this.container,Z=this;this.top_container=$("<div/>").addClass("top-container").appendTo(ab);this.content_div=$("<div/>").addClass("content").css("position","relative").appendTo(ab);this.bottom_container=$("<div/>").addClass("bottom-container").appendTo(ab);this.top_labeltrack=$("<div/>").addClass("top-labeltrack").appendTo(this.top_container);this.viewport_container=$("<div/>").addClass("viewport-container").addClass("viewport-container").appendTo(this.content_div);this.intro_div=$("<div/>").addClass("intro").text("Select a chrom from the dropdown below").hide();this.nav_labeltrack=$("<div/>").addClass("nav-labeltrack").appendTo(this.bottom_container);this.nav_container=$("<div/>").addClass("nav-container").prependTo(this.top_container);this.nav=$("<div/>").addClass("nav").appendTo(this.nav_container);this.overview=$("<div/>").addClass("overview").appendTo(this.bottom_container);this.overview_viewport=$("<div/>").addClass("overview-viewport").appendTo(this.overview);this.overview_close=$("<a href='javascript:void(0);'>Close Overview</a>").addClass("overview-close").hide().appendTo(this.overview_viewport);this.overview_highlight=$("<div/>").addClass("overview-highlight").hide().appendTo(this.overview_viewport);this.overview_box_background=$("<div/>").addClass("overview-boxback").appendTo(this.overview_viewport);this.overview_box=$("<div/>").addClass("overview-box").appendTo(this.overview_viewport);this.default_overview_height=this.overview_box.height();this.nav_controls=$("<div/>").addClass("nav-controls").appendTo(this.nav);this.chrom_select=$("<select/>").attr({name:"chrom"}).css("width","15em").addClass("no-autocomplete").append("<option value=''>Loading</option>").appendTo(this.nav_controls);var aa=function(ad){if(ad.type==="focusout"||(ad.keyCode||ad.which)===13||(ad.keyCode||ad.which)===27){if((ad.keyCode||ad.which)!==27){Z.go_to($(this).val())}$(this).hide();$(this).val("");Z.location_span.show();Z.chrom_select.show()}};this.nav_input=$("<input/>").addClass("nav-input").hide().bind("keyup focusout",aa).appendTo(this.nav_controls);this.location_span=$("<span/>").addClass("location").appendTo(this.nav_controls);this.location_span.bind("click",function(){Z.location_span.hide();Z.chrom_select.hide();Z.nav_input.val(Z.chrom+":"+Z.low+"-"+Z.high);Z.nav_input.css("display","inline-block");Z.nav_input.select();Z.nav_input.focus()});if(this.vis_id!==undefined){this.hidden_input=$("<input/>").attr("type","hidden").val(this.vis_id).appendTo(this.nav_controls)}this.zo_link=$("<a id='zoom-out' />").click(function(){Z.zoom_out();Z.redraw()}).appendTo(this.nav_controls);this.zi_link=$("<a id='zoom-in' />").click(function(){Z.zoom_in();Z.redraw()}).appendTo(this.nav_controls);this.load_chroms({low:0},ac);this.chrom_select.bind("change",function(){Z.change_chrom(Z.chrom_select.val())});this.intro_div.show();this.content_div.bind("click",function(ad){$(this).find("input").trigger("blur")});this.content_div.bind("dblclick",function(ad){Z.zoom_in(ad.pageX,this.viewport_container)});this.overview_box.bind("dragstart",function(ad,ae){this.current_x=ae.offsetX}).bind("drag",function(ad,af){var ag=af.offsetX-this.current_x;this.current_x=af.offsetX;var ae=Math.round(ag/Z.viewport_container.width()*(Z.max_high-Z.max_low));Z.move_delta(-ae)});this.overview_close.bind("click",function(){for(var ae=0,ad=Z.tracks.length;ae<ad;ae++){Z.tracks[ae].is_overview=false}$(this).siblings().filter("canvas").remove();$(this).parent().css("height",Z.overview_box.height());Z.overview_highlight.hide();$(this).hide()});this.viewport_container.bind("draginit",function(ad,ae){if(ad.clientX>Z.viewport_container.width()-16){return false}}).bind("dragstart",function(ad,ae){ae.original_low=Z.low;ae.current_height=ad.clientY;ae.current_x=ae.offsetX}).bind("drag",function(af,ah){var ad=$(this);var ai=ah.offsetX-ah.current_x;var ae=ad.scrollTop()-(af.clientY-ah.current_height);ad.scrollTop(ae);ah.current_height=af.clientY;ah.current_x=ah.offsetX;var ag=Math.round(ai/Z.viewport_container.width()*(Z.high-Z.low));Z.move_delta(ag)}).bind("mousewheel",function(af,ah,ae,ad){if(ae){var ag=Math.round(-ae/Z.viewport_container.width()*(Z.high-Z.low));Z.move_delta(ag)}});this.top_labeltrack.bind("dragstart",function(ad,ae){return $("<div />").css({height:Z.content_div.height()+Z.top_labeltrack.height()+Z.nav_labeltrack.height()+1,top:"0px",position:"absolute","background-color":"#ccf",opacity:0.5,"z-index":1000}).appendTo($(this))}).bind("drag",function(ah,ai){$(ai.proxy).css({left:Math.min(ah.pageX,ai.startX),width:Math.abs(ah.pageX-ai.startX)});var ae=Math.min(ah.pageX,ai.startX)-Z.container.offset().left,ad=Math.max(ah.pageX,ai.startX)-Z.container.offset().left,ag=(Z.high-Z.low),af=Z.viewport_container.width();Z.update_location(Math.round(ae/af*ag)+Z.low,Math.round(ad/af*ag)+Z.low)}).bind("dragend",function(ai,aj){var ae=Math.min(ai.pageX,aj.startX),ad=Math.max(ai.pageX,aj.startX),ag=(Z.high-Z.low),af=Z.viewport_container.width(),ah=Z.low;Z.low=Math.round(ae/af*ag)+ah;Z.high=Math.round(ad/af*ag)+ah;$(aj.proxy).remove();Z.redraw()});this.add_label_track(new W(this,this.top_labeltrack));this.add_label_track(new W(this,this.nav_labeltrack));$(window).bind("resize",function(){Z.resize_window()});$(document).bind("redraw",function(){Z.redraw()});this.reset();$(window).trigger("resize")},update_location:function(Z,aa){this.location_span.text(commatize(Z)+" - "+commatize(aa));this.nav_input.val(this.chrom+":"+commatize(Z)+"-"+commatize(aa))},load_chroms:function(aa,ab){aa.num=t;$.extend(aa,(this.vis_id!==undefined?{vis_id:this.vis_id}:{dbkey:this.dbkey}));var Z=this;$.ajax({url:chrom_url,data:aa,dataType:"json",success:function(ad){if(ad.chrom_info.length===0){alert("Invalid chromosome: "+aa.chrom);return}if(ad.reference){Z.add_label_track(new x(Z))}Z.chrom_data=ad.chrom_info;var ag='<option value="">Select Chrom/Contig</option>';for(var af=0,ac=Z.chrom_data.length;af<ac;af++){var ae=Z.chrom_data[af].chrom;ag+='<option value="'+ae+'">'+ae+"</option>"}if(ad.prev_chroms){ag+='<option value="previous">Previous '+t+"</option>"}if(ad.next_chroms){ag+='<option value="next">Next '+t+"</option>"}Z.chrom_select.html(ag);if(ab){ab()}Z.chrom_start_index=ad.start_index},error:function(){alert("Could not load chroms for this dbkey:",Z.dbkey)}})},change_chrom:function(ad,aa,af){if(!ad||ad==="None"){return}var ac=this;if(ad==="previous"){ac.load_chroms({low:this.chrom_start_index-t});return}if(ad==="next"){ac.load_chroms({low:this.chrom_start_index+t});return}var ae=$.grep(ac.chrom_data,function(ah,ai){return ah.chrom===ad})[0];if(ae===undefined){ac.load_chroms({chrom:ad},function(){ac.change_chrom(ad,aa,af)});return}else{if(ad!==ac.chrom){ac.chrom=ad;if(!ac.chrom){ac.intro_div.show()}else{ac.intro_div.hide()}ac.chrom_select.val(ac.chrom);ac.max_high=ae.len-1;ac.reset();ac.redraw(true);for(var ag=0,Z=ac.tracks.length;ag<Z;ag++){var ab=ac.tracks[ag];if(ab.init){ab.init()}}}if(aa!==undefined&&af!==undefined){ac.low=Math.max(aa,0);ac.high=Math.min(af,ac.max_high)}ac.reset_overview();ac.redraw()}},go_to:function(ad){var ah=this,Z,ac,aa=ad.split(":"),af=aa[0],ag=aa[1];if(ag!==undefined){try{var ae=ag.split("-");Z=parseInt(ae[0].replace(/,/g,""),10);ac=parseInt(ae[1].replace(/,/g,""),10)}catch(ab){return false}}ah.change_chrom(af,Z,ac)},move_fraction:function(ab){var Z=this;var aa=Z.high-Z.low;this.move_delta(ab*aa)},move_delta:function(ab){var Z=this;var aa=Z.high-Z.low;if(Z.low-ab<Z.max_low){Z.low=Z.max_low;Z.high=Z.max_low+aa}else{if(Z.high-ab>Z.max_high){Z.high=Z.max_high;Z.low=Z.max_high-aa}else{Z.high-=ab;Z.low-=ab}}Z.redraw()},add_track:function(Z){Z.view=this;Z.track_id=this.track_id_counter;this.tracks.push(Z);if(Z.init){Z.init()}Z.container_div.attr("id","track_"+Z.track_id);B(Z.container_div,".draghandle");this.track_id_counter+=1;this.num_tracks+=1},add_label_track:function(Z){Z.view=this;this.label_tracks.push(Z)},remove_track:function(Z){this.has_changes=true;Z.container_div.fadeOut("slow",function(){$(this).remove()});delete this.tracks[this.tracks.indexOf(Z)];this.num_tracks-=1},reset:function(){this.low=this.max_low;this.high=this.max_high;this.viewport_container.find(".yaxislabel").remove()},redraw:function(ag){var af=this.high-this.low,ae=this.low,aa=this.high;if(ae<this.max_low){ae=this.max_low}if(aa>this.max_high){aa=this.max_high}if(this.high!==0&&af<this.min_separation){aa=ae+this.min_separation}this.low=Math.floor(ae);this.high=Math.ceil(aa);this.resolution=Math.pow(10,Math.ceil(Math.log((this.high-this.low)/L)/Math.LN10));this.zoom_res=Math.pow(s,Math.max(0,Math.ceil(Math.log(this.resolution,s)/Math.log(s))));var Z=(this.low/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ad=((this.high-this.low)/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ah=13;this.overview_box.css({left:Z,width:Math.max(ah,ad)}).show();if(ad<ah){this.overview_box.css("left",Z-(ah-ad)/2)}if(this.overview_highlight){this.overview_highlight.css({left:Z,width:ad})}this.update_location(this.low,this.high);if(!ag){for(var ab=0,ac=this.tracks.length;ab<ac;ab++){if(this.tracks[ab]&&this.tracks[ab].enabled){this.tracks[ab].draw()}}for(ab=0,ac=this.label_tracks.length;ab<ac;ab++){this.label_tracks[ab].draw()}}},zoom_in:function(aa,ab){if(this.max_high===0||this.high-this.low<this.min_separation){return}var ac=this.high-this.low,ad=ac/2+this.low,Z=(ac/this.zoom_factor)/2;if(aa){ad=aa/this.viewport_container.width()*(this.high-this.low)+this.low}this.low=Math.round(ad-Z);this.high=Math.round(ad+Z);this.redraw()},zoom_out:function(){if(this.max_high===0){return}var aa=this.high-this.low,ab=aa/2+this.low,Z=(aa*this.zoom_factor)/2;this.low=Math.round(ab-Z);this.high=Math.round(ab+Z);this.redraw()},resize_window:function(){this.viewport_container.height(this.container.height()-this.top_container.height()-this.bottom_container.height());this.nav_container.width(this.container.width());this.redraw()},reset_overview:function(){this.overview_viewport.find("canvas").remove();this.overview_viewport.height(this.default_overview_height);this.overview_box.height(this.default_overview_height);this.overview_close.hide();this.overview_highlight.hide()}});var o=function(ab,af){this.track=ab;this.name=af.name;this.params=[];var am=af.params;for(var ac=0;ac<am.length;ac++){var ah=am[ac],aa=ah.name,al=ah.label,ad=unescape(ah.html),an=ah.value,aj=ah.type;if(aj==="number"){this.params[this.params.length]=new g(aa,al,ad,an,ah.min,ah.max)}else{if(aj=="select"){this.params[this.params.length]=new J(aa,al,ad,an)}else{console.log("WARNING: unrecognized tool parameter type:",aa,aj)}}}this.parent_div=$("<div/>").addClass("dynamic-tool").hide();this.parent_div.bind("drag",function(ap){ap.stopPropagation()}).bind("click",function(ap){ap.stopPropagation()}).bind("dblclick",function(ap){ap.stopPropagation()});var ak=$("<div class='tool-name'>").appendTo(this.parent_div).text(this.name);var ai=this.params;var ag=this;$.each(this.params,function(aq,au){var at=$("<div>").addClass("param-row").appendTo(ag.parent_div);var ap=$("<div>").addClass("param-label").text(au.label).appendTo(at);var ar=$("<div/>").addClass("slider").html(au.html).appendTo(at);ar.find(":input").val(au.value);$("<div style='clear: both;'/>").appendTo(at)});this.parent_div.find("input").click(function(){$(this).select()});var ao=$("<div>").addClass("param-row").appendTo(this.parent_div);var ae=$("<input type='submit'>").attr("value","Run on complete dataset").appendTo(ao);var Z=$("<input type='submit'>").attr("value","Run on visible region").css("margin-left","3em").appendTo(ao);var ag=this;Z.click(function(){ag.run_on_region()});ae.click(function(){ag.run_on_dataset()})};n(o.prototype,{get_param_values_dict:function(){var Z={};this.parent_div.find(":input").each(function(){var aa=$(this).attr("name"),ab=$(this).val();Z[aa]=JSON.stringify(ab)});return Z},get_param_values:function(){var aa=[];var Z={};this.parent_div.find(":input").each(function(){var ab=$(this).attr("name"),ac=$(this).val();if(ab){aa[aa.length]=ac}});return aa},run_on_dataset:function(){var Z=this;Z.run({dataset_id:this.track.original_dataset_id,tool_id:Z.name},function(aa){show_modal(Z.name+" is Running",Z.name+" is running on the complete dataset. Tool outputs are in dataset's history.",{Close:hide_modal})})},run_on_region:function(){var Z={dataset_id:this.track.original_dataset_id,chrom:this.track.view.chrom,low:this.track.view.low,high:this.track.view.high,tool_id:this.name},ab=this.track,aa=Z.tool_id+ab.tool_region_and_parameters_str(Z.chrom,Z.low,Z.high),ac;if(ab.track_type==="FeatureTrack"){ac=new P(aa,view,ab.hda_ldda,undefined,{},{},ab)}this.track.add_track(ac);ac.content_div.text("Starting job.");this.run(Z,function(ad){ac.dataset_id=ad.dataset_id;ac.content_div.text("Running job.");ac.init()})},run:function(aa,ab){$.extend(aa,this.get_param_values_dict());var Z=function(){$.getJSON(run_tool_url,aa,function(ac){if(ac==="no converter"){new_track.container_div.addClass("error");new_track.content_div.text(F)}else{if(ac.error){new_track.container_div.addClass("error");new_track.content_div.text(v+ac.message)}else{if(ac==="pending"){new_track.container_div.addClass("pending");new_track.content_div.text("Converting input data so that it can be easily reused.");setTimeout(Z,2000)}else{ab(ac)}}}})};Z()}});var J=function(aa,Z,ab,ac){this.name=aa;this.label=Z;this.html=ab;this.value=ac};var g=function(ab,aa,ad,ae,ac,Z){J.call(this,ab,aa,ad,ae);this.min=ac;this.max=Z};var h=function(aa,Z,ab){this.name=aa;this.index=Z;this.value=ab};var Q=function(aa,Z){this.name=aa;this.index=Z;this.low=-Number.MAX_VALUE;this.high=Number.MAX_VALUE;this.min=Number.MAX_VALUE;this.max=-Number.MAX_VALUE;this.slider=null;this.slider_label=null};n(Q.prototype,{applies_to:function(Z){if(Z.length>this.index){return true}return false},keep:function(Z){if(!this.applies_to(Z)){return true}var aa=parseInt(Z[this.index]);return(isNaN(aa)||(aa>=this.low&&aa<=this.high))},update_attrs:function(aa){var Z=false;if(!this.applies_to(aa)){return Z}if(aa[this.index]<this.min){this.min=Math.floor(aa[this.index]);Z=true}if(aa[this.index]>this.max){this.max=Math.ceil(aa[this.index]);Z=true}return Z},update_ui_elt:function(){var ab=function(ae,ac){var ad=ac-ae;return(ad<=2?0.01:1)};var aa=this.slider.slider("option","min"),Z=this.slider.slider("option","max");if(this.min<aa||this.max>Z){this.slider.slider("option","min",this.min);this.slider.slider("option","max",this.max);this.slider.slider("option","step",ab(this.min,this.max));this.slider.slider("option","values",[this.min,this.max])}}});var V=function(ab,ah){this.track=ab;this.filters=[];for(var ad=0;ad<ah.length;ad++){var Z=ah[ad];var aa=Z.name,ag=Z.type,ae=Z.index;if(ag==="int"||ag==="float"){this.filters[ad]=new Q(aa,ae)}else{this.filters[ad]=new h(aa,ae,ag)}}var af=function(ai,aj,ak){ai.click(function(){var al=aj.text();max=parseFloat(ak.slider("option","max")),input_size=(max<=1?4:max<=1000000?max.toString().length:6),multi_value=false;if(ak.slider("option","values")){input_size=2*input_size+1;multi_value=true}aj.text("");$("<input type='text'/>").attr("size",input_size).attr("maxlength",input_size).attr("value",al).appendTo(aj).focus().select().click(function(am){am.stopPropagation()}).blur(function(){$(this).remove();aj.text(al)}).keyup(function(aq){if(aq.keyCode===27){$(this).trigger("blur")}else{if(aq.keyCode===13){var ao=ak.slider("option","min"),am=ak.slider("option","max"),ap=function(ar){return(isNaN(ar)||ar>am||ar<ao)},an=$(this).val();if(!multi_value){an=parseFloat(an);if(ap(an)){alert("Parameter value must be in the range ["+ao+"-"+am+"]");return $(this)}}else{an=an.split("-");an=[parseFloat(an[0]),parseFloat(an[1])];if(ap(an[0])||ap(an[1])){alert("Parameter value must be in the range ["+ao+"-"+am+"]");return $(this)}}ak.slider((multi_value?"values":"value"),an)}}})})};this.parent_div=$("<div/>").addClass("filters").hide();this.parent_div.bind("drag",function(ai){ai.stopPropagation()}).bind("click",function(ai){ai.stopPropagation()}).bind("dblclick",function(ai){ai.stopPropagation()}).bind("keydown",function(ai){ai.stopPropagation()});var ac=this;$.each(this.filters,function(ao,aj){var al=$("<div/>").addClass("slider-row").appendTo(ac.parent_div);var ai=$("<div/>").addClass("slider-label").appendTo(al);var aq=$("<span/>").addClass("slider-name").text(aj.name+" ").appendTo(ai);var ak=$("<span/>");var am=$("<span/>").addClass("slider-value").appendTo(ai).append("[").append(ak).append("]");var ap=$("<div/>").addClass("slider").appendTo(al);aj.control_element=$("<div/>").attr("id",aj.name+"-filter-control").appendTo(ap);var an=[0,0];aj.control_element.slider({range:true,min:Number.MAX_VALUE,max:-Number.MIN_VALUE,values:[0,0],slide:function(ar,at){an=at.values;ak.text(at.values[0]+"-"+at.values[1]);setTimeout(function(){if(at.values[0]==an[0]&&at.values[1]==an[1]){var au=at.values;ak.text(au[0]+"-"+au[1]);aj.low=au[0];aj.high=au[1];ac.track.draw(true,true)}},50)},change:function(ar,at){aj.control_element.slider("option","slide").call(aj.control_element,ar,at)}});aj.slider=aj.control_element;aj.slider_label=ak;af(am,ak,aj.control_element);$("<div style='clear: both;'/>").appendTo(al)})};var U=function(Z){this.track=Z.track;this.params=Z.params;this.values={};if(Z.saved_values){this.restore_values(Z.saved_values)}this.onchange=Z.onchange};n(U.prototype,{restore_values:function(Z){var aa=this;$.each(this.params,function(ab,ac){if(Z[ac.key]!==undefined){aa.values[ac.key]=Z[ac.key]}else{aa.values[ac.key]=ac.default_value}})},build_form:function(){var aa=this;var Z=$("<div />");$.each(this.params,function(ae,ac){if(!ac.hidden){var ab="param_"+ae;var aj=$("<div class='form-row' />").appendTo(Z);aj.append($("<label />").attr("for",ab).text(ac.label+":"));if(ac.type==="bool"){aj.append($('<input type="checkbox" />').attr("id",ab).attr("name",ab).attr("checked",aa.values[ac.key]))}else{if(ac.type==="color"){var ag=aa.values[ac.key];var af=$("<input />").attr("id",ab).attr("name",ab).val(ag);var ah=$("<div class='tipsy tipsy-north' style='position: absolute;' />").hide();var ad=$("<div style='background-color: black; padding: 10px;'></div>").appendTo(ah);var ai=$("<div/>").appendTo(ad).farbtastic({width:100,height:100,callback:af,color:ag});$("<div />").append(af).append(ah).appendTo(aj).bind("click",function(ak){ah.css({left:$(this).position().left+($(af).width()/2)-60,top:$(this).position().top+$(this.height)}).show();$(document).bind("click.color-picker",function(){ah.hide();$(document).unbind("click.color-picker")});ak.stopPropagation()})}else{aj.append($("<input />").attr("id",ab).attr("name",ab).val(aa.values[ac.key]))}}}});return Z},update_from_form:function(Z){var ab=this;var aa=false;$.each(this.params,function(ac,ae){if(!ae.hidden){var af="param_"+ac;var ad=Z.find("#"+af).val();if(ae.type==="float"){ad=parseFloat(ad)}else{if(ae.type==="int"){ad=parseInt(ad)}else{if(ae.type==="bool"){ad=Z.find("#"+af).is(":checked")}}}if(ad!==ab.values[ae.key]){ab.values[ae.key]=ad;aa=true}}});if(aa){this.onchange()}}});var b=function(ab,aa,Z){this.index=ab;this.resolution=aa;this.canvas=$("<div class='track-tile'/>").append(Z)};var l=function(ab,aa,Z,ac){b.call(this,ab,aa,Z);this.max_val=ac};var K=function(ab,aa,Z){b.call(this,ab,aa,Z)};var j=function(aa,Z,ad,ab,ac){this.name=aa;this.view=Z;this.parent_element=ad;this.data_url=(ab?ab:default_data_url);this.data_url_extra_params={};this.data_query_wait=(ac?ac:G);this.dataset_check_url=converted_datasets_state_url;this.container_div=$("<div />").addClass("track").css("position","relative");if(!this.hidden){this.header_div=$("<div class='track-header' />").appendTo(this.container_div);if(this.view.editor){this.drag_div=$("<div class='draghandle' />").appendTo(this.header_div)}this.name_div=$("<div class='menubutton popup' />").appendTo(this.header_div);this.name_div.text(this.name);this.name_div.attr("id",this.name.replace(/\s+/g,"-").replace(/[^a-zA-Z0-9\-]/g,"").toLowerCase())}this.content_div=$("<div class='track-content'>").appendTo(this.container_div);this.parent_element.append(this.container_div)};n(j.prototype,{init:function(){var Z=this;Z.enabled=false;Z.tile_cache.clear();Z.data_cache.clear();Z.initial_canvas=undefined;Z.content_div.css("height","auto");Z.container_div.removeClass("nodata error pending");if(!Z.dataset_id){return}$.getJSON(converted_datasets_state_url,{hda_ldda:Z.hda_ldda,dataset_id:Z.dataset_id,chrom:Z.view.chrom},function(aa){if(!aa||aa==="error"||aa.kind==="error"){Z.container_div.addClass("error");Z.content_div.text(m);if(aa.message){var ac=Z.view.tracks.indexOf(Z);var ab=$(" <a href='javascript:void(0);'></a>").text("View error").bind("click",function(){show_modal("Trackster Error","<pre>"+aa.message+"</pre>",{Close:hide_modal})});Z.content_div.append(ab)}}else{if(aa==="no converter"){Z.container_div.addClass("error");Z.content_div.text(F)}else{if(aa==="no data"||(aa.data!==undefined&&(aa.data===null||aa.data.length===0))){Z.container_div.addClass("nodata");Z.content_div.text(A)}else{if(aa==="pending"){Z.container_div.addClass("pending");Z.content_div.text(q);setTimeout(function(){Z.init()},Z.data_query_wait)}else{if(aa.status==="data"){if(aa.valid_chroms){Z.valid_chroms=aa.valid_chroms;Z.make_name_popup_menu()}Z.content_div.text(T);if(Z.view.chrom){Z.content_div.text("");Z.content_div.css("height",Z.height_px+"px");Z.enabled=true;$.when(Z.predraw_init()).done(function(){Z.container_div.removeClass("nodata error pending");Z.draw()})}}}}}}})},predraw_init:function(){},update_name:function(Z){this.old_name=this.name;this.name=Z;this.name_div.text(this.name)},revert_name:function(){this.name=this.old_name;this.name_div.text(this.name)}});var I=function(ah,af,ai){var aa=this,aj=aa.view;this.filters_manager=(ah!==undefined?new V(this,ah):undefined);this.filters_available=false;this.filters_visible=false;this.tool=(af!==undefined&&obj_length(af)>0?new o(this,af):undefined);this.parent_track=ai;this.child_tracks=[];if(aa.hidden){return}if(this.parent_track){this.header_div.find(".draghandle").removeClass("draghandle").addClass("child-track-icon").addClass("icon-button");this.parent_element.addClass("child-track");this.tool=undefined}aa.child_tracks_container=$("<div/>").addClass("child-tracks-container").hide();aa.container_div.append(aa.child_tracks_container);if(this.filters_manager){this.filters_div=this.filters_manager.parent_div;this.header_div.after(this.filters_div)}if(this.tool){this.dynamic_tool_div=this.tool.parent_div;this.header_div.after(this.dynamic_tool_div)}if(aa.display_modes!==undefined){if(aa.mode_div===undefined){aa.mode_div=$("<div class='right-float menubutton popup' />").appendTo(aa.header_div);var ac=(aa.track_config&&aa.track_config.values.mode?aa.track_config.values.mode:aa.display_modes[0]);aa.mode=ac;aa.mode_div.text(ac);var ab=function(ak){aa.mode_div.text(ak);aa.mode=ak;aa.track_config.values.mode=ak;aa.tile_cache.clear();aa.draw()};var Z={};for(var ad=0,ag=aa.display_modes.length;ad<ag;ad++){var ae=aa.display_modes[ad];Z[ae]=function(ak){return function(){ab(ak)}}(ae)}make_popupmenu(aa.mode_div,Z)}else{aa.mode_div.hide()}}this.make_name_popup_menu()};n(I.prototype,j.prototype,{make_name_popup_menu:function(){var aa=this;var Z={};Z["Edit configuration"]=function(){var ag=function(){hide_modal();$(window).unbind("keypress.check_enter_esc")},ae=function(){aa.track_config.update_from_form($(".dialog-box"));hide_modal();$(window).unbind("keypress.check_enter_esc")},af=function(ah){if((ah.keyCode||ah.which)===27){ag()}else{if((ah.keyCode||ah.which)===13){ae()}}};$(window).bind("keypress.check_enter_esc",af);show_modal("Configure Track",aa.track_config.build_form(),{Cancel:ag,OK:ae})};if(aa.filters_available>0){var ad=(aa.filters_div.is(":visible")?"Hide filters":"Show filters");Z[ad]=function(){aa.filters_visible=(aa.filters_div.is(":visible"));aa.filters_div.toggle();aa.make_name_popup_menu()}}if(aa.tool){var ad=(aa.dynamic_tool_div.is(":visible")?"Hide tool":"Show tool");Z[ad]=function(){if(!aa.dynamic_tool_div.is(":visible")){aa.update_name(aa.name+aa.tool_region_and_parameters_str())}else{menu_option_text="Show dynamic tool";aa.revert_name()}aa.dynamic_tool_div.toggle();aa.make_name_popup_menu()}}if(aa.valid_chroms){Z["List chrom/contigs with data"]=function(){show_modal("Chrom/contigs with data","<p>"+aa.valid_chroms.join("<br/>")+"</p>",{Close:function(){hide_modal()}})}}var ab=view;var ac=function(){$("#no-tracks").show()};if(this.parent_track){ab=this.parent_track;ac=function(){}}Z.Remove=function(){ab.remove_track(aa);if(ab.num_tracks===0){ac()}};make_popupmenu(aa.name_div,Z)},draw:function(Z,ab){var at=this.view.low,af=this.view.high,ah=af-at,aj=this.view.container.width(),ad=aj/ah,ak=this.view.resolution,ac=$("<div style='position: relative;'></div>"),al=function(av,aw,au){return av+"_"+aw+"_"+au};if(!ab){this.content_div.children().remove()}this.content_div.append(ac);this.max_height=0;var an=Math.floor(at/ak/L);var ae=[];var ao=0;while((an*L*ak)<af){var ar=al(aj,ad,an);var ag=this.tile_cache.get(ar);var ap=an*L*this.view.resolution;var aa=ap+L*this.view.resolution;if(!Z&&ag){ae[ae.length]=ag;this.show_tile(ag,ac,ap,ad)}else{this.delayed_draw(Z,ar,an,ak,ac,ad,ae)}an+=1;ao++}var ai=this;var aq=setInterval(function(){if(ae.length===ao){clearInterval(aq);if(ab){var ax=ai.content_div.children();var ay=false;for(var aw=ax.length-1,aC=0;aw>=aC;aw--){var av=$(ax[aw]);if(ay){av.remove()}else{if(av.children().length!==0){ay=true}}}}if(ai.track_type=="FeatureTrack"&&ai.mode=="Histogram"){var aB=-1;for(var aw=0;aw<ae.length;aw++){var aE=ae[aw].max_val;if(aE>aB){aB=aE}}for(var aw=0;aw<ae.length;aw++){if(ae[aw].max_val!==aB){var aD=ae[aw];aD.canvas.remove();ai.delayed_draw(true,al(aj,ad,aD.index),aD.index,aD.resolution,ac,ad,[],{max:aB})}}}if(ai.filters_manager){var au=ai.filters_manager.filters;for(var aA=0;aA<au.length;aA++){au[aA].update_ui_elt()}var az=false;if(ai.example_feature){for(var aA=0;aA<au.length;aA++){if(au[aA].applies_to(ai.example_feature)){az=true;break}}}if(ai.filters_available!==az){ai.filters_available=az;if(!ai.filters_available){ai.filters_div.hide()}ai.make_name_popup_menu()}}}},50);for(var am=0;am<this.child_tracks.length;am++){this.child_tracks[am].draw(Z,ab)}},delayed_draw:function(aa,ah,ab,ad,ai,al,aj,ae){var ac=this,af=ab*L*ad,ak=af+L*ad;var ag=function(au,am,ao,an,ar,at,ap){var aq=ac.draw_tile(am,ao,an,at,ap);ac.tile_cache.set(ah,aq);if(aq===undefined){return}ac.show_tile(aq,ar,af,at);aj[aj.length]=aq};var Z=setTimeout(function(){if(af<=ac.view.high&&ak>=ac.view.low){var am=(aa?undefined:ac.tile_cache.get(ah));if(am){ac.show_tile(am,ai,af,al);aj[aj.length]=am}else{$.when(ac.data_cache.get_data(view.chrom,af,ak,ac.mode,ad,ac.data_url_extra_params)).then(function(an){n(an,ae);if(view.reference_track&&al>view.canvas_manager.char_width_px){$.when(view.reference_track.data_cache.get_data(view.chrom,af,ak,ac.mode,ad,view.reference_track.data_url_extra_params)).then(function(ao){ag(Z,an,ad,ab,ai,al,ao)})}else{ag(Z,an,ad,ab,ai,al)}})}}},50)},show_tile:function(ac,af,ad,ag){var aa=this;var ab=this.view.high-this.view.low,ae=(ad-this.view.low)*ag;if(this.left_offset){ae-=this.left_offset}var Z=ac.canvas;Z.css({position:"absolute",top:0,left:ae,height:""});af.append(Z);aa.max_height=Math.max(aa.max_height,Z.height());aa.content_div.css("height",aa.max_height+"px");af.children().css("height",aa.max_height+"px")},set_overview:function(){var Z=this.view;if(this.initial_canvas&&this.is_overview){Z.overview_close.show();Z.overview_viewport.append(this.initial_canvas);Z.overview_highlight.show().height(this.initial_canvas.height());Z.overview_viewport.height(this.initial_canvas.height()+Z.overview_box.height())}$(window).trigger("resize")},tool_region_and_parameters_str:function(ab,Z,ac){var aa=this,ad=(ab!==undefined&&Z!==undefined&&ac!==undefined?ab+":"+Z+"-"+ac:"all");return" - region=["+ad+"], parameters=["+aa.tool.get_param_values().join(", ")+"]"},add_track:function(Z){Z.track_id=this.track_id+"_"+this.child_tracks.length;Z.container_div.attr("id","track_"+Z.track_id);this.child_tracks_container.append(Z.container_div);B(Z.container_div,".child-track-icon");if(!$(this.child_tracks_container).is(":visible")){this.child_tracks_container.show()}this.child_tracks.push(Z);this.view.has_changes=true},remove_track:function(Z){Z.container_div.fadeOut("slow",function(){$(this).remove()})}});var W=function(Z,aa){this.track_type="LabelTrack";this.hidden=true;j.call(this,null,Z,aa);this.container_div.addClass("label-track")};n(W.prototype,j.prototype,{draw:function(){var ab=this.view,ac=ab.high-ab.low,af=Math.floor(Math.pow(10,Math.floor(Math.log(ac)/Math.log(10)))),Z=Math.floor(ab.low/af)*af,ad=this.view.container.width(),aa=$("<div style='position: relative; height: 1.3em;'></div>");while(Z<ab.high){var ae=(Z-ab.low)/ac*ad;aa.append($("<div class='label'>"+commatize(Z)+"</div>").css({position:"absolute",left:ae-1}));Z+=af}this.content_div.children(":first").remove();this.content_div.append(aa)}});var x=function(Z){this.track_type="ReferenceTrack";this.hidden=true;j.call(this,null,Z,Z.top_labeltrack);I.call(this);Z.reference_track=this;this.left_offset=200;this.height_px=12;this.container_div.addClass("reference-track");this.content_div.css("background","none");this.content_div.css("min-height","0px");this.content_div.css("border","none");this.data_url=reference_url;this.data_url_extra_params={dbkey:Z.dbkey};this.data_cache=new D(y,this,false);this.tile_cache=new c(r)};n(x.prototype,I.prototype,{draw_tile:function(ah,ae,aa,aj){var ad=this,ab=L*ae;if(aj>this.view.canvas_manager.char_width_px){if(ah===null){ad.content_div.css("height","0px");return}var ac=this.view.canvas_manager.new_canvas();var ai=ac.getContext("2d");ac.width=Math.ceil(ab*aj+ad.left_offset);ac.height=ad.height_px;ai.font=ai.canvas.manager.default_font;ai.textAlign="center";for(var af=0,ag=ah.length;af<ag;af++){var Z=Math.round(af*aj);ai.fillText(ah[af],Z+ad.left_offset,10)}return new b(aa,ae,ac)}this.content_div.css("height","0px")}});var k=function(ad,ab,ae,Z,ac){var aa=this;this.track_type="LineTrack";this.display_modes=["Histogram","Line","Filled","Intensity"];this.mode="Histogram";j.call(this,ad,ab,ab.viewport_container);I.call(this);this.min_height_px=16;this.max_height_px=400;this.height_px=80;this.hda_ldda=ae;this.dataset_id=Z;this.original_dataset_id=Z;this.data_cache=new M(y,this);this.tile_cache=new c(r);this.track_config=new U({track:this,params:[{key:"color",label:"Color",type:"color",default_value:"black"},{key:"min_value",label:"Min Value",type:"float",default_value:undefined},{key:"max_value",label:"Max Value",type:"float",default_value:undefined},{key:"mode",type:"string",default_value:this.mode,hidden:true},{key:"height",type:"int",default_value:this.height_px,hidden:true}],saved_values:ac,onchange:function(){aa.vertical_range=aa.prefs.max_value-aa.prefs.min_value;$("#linetrack_"+aa.track_id+"_minval").text(aa.prefs.min_value);$("#linetrack_"+aa.track_id+"_maxval").text(aa.prefs.max_value);aa.tile_cache.clear();aa.draw()}});this.prefs=this.track_config.values;this.height_px=this.track_config.values.height;this.vertical_range=this.track_config.values.max_value-this.track_config.values.min_value;this.add_resize_handle()};n(k.prototype,I.prototype,{add_resize_handle:function(){var Z=this;var ac=false;var ab=false;var aa=$("<div class='track-resize'>");$(Z.container_div).hover(function(){ac=true;aa.show()},function(){ac=false;if(!ab){aa.hide()}});aa.hide().bind("dragstart",function(ad,ae){ab=true;ae.original_height=$(Z.content_div).height()}).bind("drag",function(ae,af){var ad=Math.min(Math.max(af.original_height+af.deltaY,Z.min_height_px),Z.max_height_px);$(Z.content_div).css("height",ad);Z.height_px=ad;Z.draw(true)}).bind("dragend",function(ad,ae){Z.tile_cache.clear();ab=false;if(!ac){aa.hide()}Z.track_config.values.height=Z.height_px}).appendTo(Z.container_div)},predraw_init:function(){var Z=this,aa=Z.view.tracks.indexOf(Z);Z.vertical_range=undefined;return $.getJSON(Z.data_url,{stats:true,chrom:Z.view.chrom,low:null,high:null,hda_ldda:Z.hda_ldda,dataset_id:Z.dataset_id},function(ab){Z.container_div.addClass("line-track");var ad=ab.data;if(isNaN(parseFloat(Z.prefs.min_value))||isNaN(parseFloat(Z.prefs.max_value))){Z.prefs.min_value=ad.min;Z.prefs.max_value=ad.max;$("#track_"+aa+"_minval").val(Z.prefs.min_value);$("#track_"+aa+"_maxval").val(Z.prefs.max_value)}Z.vertical_range=Z.prefs.max_value-Z.prefs.min_value;Z.total_frequency=ad.total_frequency;Z.container_div.find(".yaxislabel").remove();var ae=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+aa+"_minval").text(u(Z.prefs.min_value));var ac=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+aa+"_maxval").text(u(Z.prefs.max_value));ac.css({position:"absolute",top:"24px",left:"10px"});ac.prependTo(Z.container_div);ae.css({position:"absolute",bottom:"2px",left:"10px"});ae.prependTo(Z.container_div)})},draw_tile:function(aj,ad,aa,ai){if(this.vertical_range===undefined){return}var ae=aa*L*ad,ac=L*ad,Z=Math.ceil(ac*ai),ag=this.height_px;var ab=this.view.canvas_manager.new_canvas();ab.width=Z,ab.height=ag;var ah=ab.getContext("2d");var af=new H.LinePainter(aj.data,ae,ae+ac,this.prefs,this.mode);af.draw(ah,Z,ag);return new b(ac,ad,ab)}});var e=function(Z,ae,ad,ah,ag,ab,ac,af){var aa=this;this.track_type="FeatureTrack";this.display_modes=["Auto","Histogram","Dense","Squish","Pack"];this.track_config=new U({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:ag,onchange:function(){aa.tile_cache.clear();aa.draw()}});this.prefs=this.track_config.values;j.call(this,Z,ae,ae.viewport_container);I.call(this,ab,ac,af);this.height_px=0;this.container_div.addClass("feature-track");this.hda_ldda=ad;this.dataset_id=ah;this.original_dataset_id=ah;this.show_labels_scale=0.001;this.showing_details=false;this.summary_draw_height=30;this.inc_slots={};this.start_end_dct={};this.tile_cache=new c(d);this.data_cache=new M(20,this);this.left_offset=200;this.painter=H.LinkedFeaturePainter};n(e.prototype,I.prototype,{update_auto_mode:function(Z){if(this.mode=="Auto"){if(Z=="no_detail"){Z="feature spans"}else{if(Z=="summary_tree"){Z="coverage histogram"}}this.mode_div.text("Auto ("+Z+")")}},incremental_slots:function(ad,aa,ac){var ab=this.view.canvas_manager.dummy_context,Z=this.inc_slots[ad];if(!Z||(Z.mode!==ac)){Z=new (p.FeatureSlotter)(ad,ac==="Pack",w,function(ae){return ab.measureText(ae)});Z.mode=ac;this.inc_slots[ad]=Z}return Z.slot_features(aa)},get_summary_tree_data:function(ad,ag,ab,ao){if(ao>ab-ag){ao=ab-ag}var ak=Math.floor((ab-ag)/ao),an=[],ac=0;var ae=0,af=0,aj,am=0,ah=[],al,ai;var aa=function(ar,aq,at,ap){ar[0]=aq+at*ap;ar[1]=aq+(at+1)*ap};while(am<ao&&ae!==ad.length){var Z=false;for(;am<ao&&!Z;am++){aa(ah,ag,am,ak);for(af=ae;af<ad.length;af++){aj=ad[af].slice(1,3);if(is_overlap(aj,ah)){Z=true;break}}if(Z){break}}data_start_index=af;an[an.length]=al=[ah[0],0];for(;af<ad.length;af++){aj=ad[af].slice(1,3);if(is_overlap(aj,ah)){al[1]++}else{break}}if(al[1]>ac){ac=al[1]}am++}return{max:ac,delta:ak,data:an}},draw_tile:function(am,av,az,ai,ac){var ar=this,aB=az*L*av,aa=(az+1)*L*av,ao=aa-aB,at=Math.ceil(ao*ai),aq=this.mode,aF=25,ad=this.left_offset,an,ae;if(aq==="Auto"){if(am.dataset_type==="summary_tree"){aq=am.dataset_type}else{if(am.extra_info==="no_detail"){aq="no_detail"}else{var aE=am.data;if(this.view.high-this.view.low>E){aq="Squish"}else{aq="Pack"}}}this.update_auto_mode(aq)}if(aq==="summary_tree"||aq==="Histogram"){ae=this.summary_draw_height;this.container_div.find(".yaxislabel").remove();var Z=$("<div />").addClass("yaxislabel");Z.text(am.max);Z.css({position:"absolute",top:"22px",left:"10px",color:this.prefs.label_color});Z.prependTo(this.container_div);var ab=this.view.canvas_manager.new_canvas();ab.width=at+ad;ab.height=ae+N;if(am.dataset_type!="summary_tree"){var aj=this.get_summary_tree_data(am.data,aB,aa,200);if(am.max){aj.max=am.max}am=aj}var aC=new H.SummaryTreePainter(am,aB,aa,this.prefs);var au=ab.getContext("2d");au.translate(ad,N);aC.draw(au,at,ae);return new l(az,av,ab,am.max)}var an,ag=1;if(aq==="no_detail"||aq==="Squish"||aq==="Pack"){ag=this.incremental_slots(ai,am.data,aq);an=this.inc_slots[ai].slots}var ah=[];if(am.data){var ak=this.filters_manager.filters;for(var aw=0,ay=am.data.length;aw<ay;aw++){var af=am.data[aw];var ax=false;var al;for(var aA=0,aD=ak.length;aA<aD;aA++){al=ak[aA];al.update_attrs(af);if(!al.keep(af)){ax=true;break}}if(!ax){ah.push(af)}}}var aC=new (this.painter)(ah,aB,aa,this.prefs,aq,ac);var ae=aC.get_required_height(ag)+z;var ab=this.view.canvas_manager.new_canvas();ab.width=at+ad;ab.height=ae;var au=ab.getContext("2d");au.fillStyle=this.prefs.block_color;au.font=au.canvas.manager.default_font;au.textAlign="right";this.container_div.find(".yaxislabel").remove();if(am.message){$(ab).css({"border-top":"1px solid red"});au.fillStyle="red";au.textAlign="left";var ap=au.textBaseline;au.textBaseline="top";au.fillText(am.message,ad,0);au.textBaseline=ap;if(!am.data){return new b(az,av,ab,ae)}}this.example_feature=(am.data.length?am.data[0]:undefined);au.translate(ad,z);aC.draw(au,at,ae,an);return new K(az,av,ab)}});var O=function(ac,aa,ae,Z,ab,ad){e.call(this,ac,aa,ae,Z,ab,ad);this.track_type="VcfTrack";this.painter=H.VariantPainter};n(O.prototype,I.prototype,e.prototype);var R=function(ac,aa,ae,Z,ab,ad){e.call(this,ac,aa,ae,Z,ab,ad);this.track_config=new U({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_insertions",label:"Show insertions",type:"bool",default_value:false},{key:"show_differences",label:"Show differences only",type:"bool",default_value:true},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:ab,onchange:function(){this.track.tile_cache.clear();this.track.draw()}});this.prefs=this.track_config.values;this.track_type="ReadTrack";this.painter=H.ReadPainter;this.make_name_popup_menu()};n(R.prototype,I.prototype,e.prototype);var P=function(ad,ab,af,Z,ac,ae,aa){e.call(this,ad,ab,af,Z,ac,ae,{},aa);this.track_type="ToolDataFeatureTrack";this.data_url=raw_data_url;this.data_query_wait=1000;this.dataset_check_url=dataset_state_url};n(P.prototype,I.prototype,e.prototype,{predraw_init:function(){var aa=this;var Z=function(){if(aa.data_cache.size()===0){setTimeout(Z,300)}else{aa.data_url=default_data_url;aa.data_query_wait=G;aa.dataset_state_url=converted_datasets_state_url;$.getJSON(aa.dataset_state_url,{dataset_id:aa.dataset_id,hda_ldda:aa.hda_ldda},function(ab){})}};Z()}});S.View=X;S.LineTrack=k;S.FeatureTrack=e;S.ReadTrack=R};var slotting_module=function(c,b){var e=c("class").extend;var d=2,a=5;b.FeatureSlotter=function(j,h,f,g){this.slots={};this.start_end_dct={};this.w_scale=j;this.include_label=h;this.max_rows=f;this.measureText=g};e(b.FeatureSlotter.prototype,{slot_features:function(m){var p=this.w_scale,s=this.slots,h=this.start_end_dct,y=[],A=[],n=0,z=this.max_rows;for(var w=0,x=m.length;w<x;w++){var l=m[w],o=l[0];if(s[o]!==undefined){n=Math.max(n,s[o]);A.push(s[o])}else{y.push(w)}}var q=function(G,H){for(var F=0;F<=z;F++){var D=false,I=h[F];if(I!==undefined){for(var C=0,E=I.length;C<E;C++){var B=I[C];if(H>B[0]&&G<B[1]){D=true;break}}}if(!D){return F}}return -1};for(var w=0,x=y.length;w<x;w++){var l=m[y[w]],o=l[0],u=l[1],f=l[2],r=l[3],g=Math.floor(u*p),k=Math.ceil(f*p),v=this.measureText(r).width,j;if(r!==undefined&&this.include_label){v+=(d+a);if(g-v>=0){g-=v;j="left"}else{k+=v;j="right"}}var t=q(g,k);if(t>=0){if(h[t]===undefined){h[t]=[]}h[t].push([g,k]);s[o]=t;n=Math.max(n,t)}else{}}return n+1}})};var painters_module=function(j,w){var t=j("class").extend;var o=function(H,z,F,y,E,C){if(C===undefined){C=4}var B=y-z;var A=E-F;var D=Math.floor(Math.sqrt(B*B+A*A)/C);var I=B/D;var G=A/D;var x;for(x=0;x<D;x++,z+=I,F+=G){if(x%2!==0){continue}H.fillRect(z,F,C,1)}};var p=function(A,z,x,D){var C=z-D/2,B=z+D/2,E=x-Math.sqrt(D*3/2);A.beginPath();A.moveTo(C,E);A.lineTo(B,E);A.lineTo(z,x);A.lineTo(C,E);A.strokeStyle=this.fillStyle;A.fill();A.stroke();A.closePath()};var m=function(z,B,x,y,A){this.data=z;this.view_start=B;this.view_end=x;this.prefs=t({},this.default_prefs,y);this.mode=A};m.prototype.default_prefs={};var u=function(z,B,x,y,A){m.call(this,z,B,x,y,A)};u.prototype.default_prefs={show_counts:false};u.prototype.draw=function(M,z,L){var E=this.view_start,O=this.view_end-this.view_start,N=z/O;var J=this.data.data,I=this.data.delta,G=this.data.max,B=L;delta_x_px=Math.ceil(I*N);M.save();for(var C=0,D=J.length;C<D;C++){var H=Math.floor((J[C][0]-E)*N);var F=J[C][1];if(!F){continue}var K=F/G*L;if(F!==0&&K<1){K=1}M.fillStyle=this.prefs.block_color;M.fillRect(H,B-K,delta_x_px,K);var A=4;if(this.prefs.show_counts&&(M.measureText(F).width+A)<delta_x_px){M.fillStyle=this.prefs.label_color;M.textAlign="center";M.fillText(F,H+(delta_x_px/2),10)}}M.restore()};var c=function(x,B,D,E,z){m.call(this,x,B,D,E,z);if(this.prefs.min_value===undefined){var F=Infinity;for(var y=0,A=this.data.length;y<A;y++){F=Math.min(F,this.data[y][1])}this.prefs.min_value=F}if(this.prefs.max_value===undefined){var C=-Infinity;for(var y=0,A=this.data.length;y<A;y++){C=Math.max(C,this.data[y][1])}this.prefs.max_value=C}};c.prototype.default_prefs={min_value:undefined,max_value:undefined,mode:"Histogram",color:"#000",overflow_color:"#F66"};c.prototype.draw=function(O,N,L){var F=false,H=this.prefs.min_value,D=this.prefs.max_value,K=D-H,z=L,A=this.view_start,M=this.view_end-this.view_start,B=N/M,I=this.mode,S=this.data;O.save();var T=Math.round(L+H/K*L);if(I!=="Intensity"){O.fillStyle="#aaa";O.fillRect(0,T,N,1)}O.beginPath();O.fillStyle=this.prefs.color;var R,E,C;if(S.length>1){C=Math.ceil((S[1][0]-S[0][0])*B)}else{C=10}for(var P=0,Q=S.length;P<Q;P++){R=Math.round((S[P][0]-A)*B);E=S[P][1];if(E===null){if(F&&I==="Filled"){O.lineTo(R,z)}F=false;continue}if(E<H){E=H}else{if(E>D){E=D}}if(I==="Histogram"){E=Math.round(E/K*z);O.fillRect(R,T,C,-E)}else{if(I==="Intensity"){E=255-Math.floor((E-H)/K*255);O.fillStyle="rgb("+E+","+E+","+E+")";O.fillRect(R,0,C,z)}else{E=Math.round(z-(E-H)/K*z);if(F){O.lineTo(R,E)}else{F=true;if(I==="Filled"){O.moveTo(R,z);O.lineTo(R,E)}else{O.moveTo(R,E)}}}}}if(I==="Filled"){if(F){O.lineTo(R,T);O.lineTo(0,T)}O.fill()}else{O.stroke()}var x=-1,J=-1;O.fillStyle=this.prefs.overflow_color;var G;for(var P=0,Q=S.length;P<Q;P++){E=S[P][1];R=Math.round((S[P][0]-A)*B);if(J>=0&&(E===null||E<D)){O.fillRect(J,0,G+C-J,2);J=-1}else{if(x>=0&&(E===null||E>H)){O.fillRect(x,L-2,G+C-x,2);x=-1}}if(E!==null&&E>D&&J<0){J=R}else{if(E!==null&&E<H&&x<0){x=R}}G=R}O.restore()};var n=function(z,B,x,y,A){m.call(this,z,B,x,y,A)};n.prototype.default_prefs={block_color:"#FFF",connector_color:"#FFF"};t(n.prototype,{get_required_height:function(y){var x=y_scale=this.get_row_height(),z=this.mode;if(z==="no_detail"||z==="Squish"||z==="Pack"){x=y*y_scale}return x+Math.max(Math.round(y_scale/2),5)},draw:function(J,A,I,F){var D=this.data,G=this.view_start,K=this.view_end;J.save();J.fillStyle=this.prefs.block_color;J.textAlign="right";var N=this.view_end-this.view_start,M=A/N,z=this.get_row_height();for(var C=0,E=D.length;C<E;C++){var L=D[C],B=L[0],x=L[1],y=L[2],H=(F&&F[B]!==undefined?F[B]:null);if((x<K&&y>G)&&(this.mode=="Dense"||H!==null)){this.draw_element(J,this.mode,L,H,G,K,M,z,A)}}J.restore()}});var d=10,h=3,l=5,v=10,f=1,r=3,e=3,a=9,k=2,g="#ccc";var q=function(z,B,x,y,A){n.call(this,z,B,x,y,A)};t(q.prototype,n.prototype,{get_row_height:function(){var y=this.mode,x;if(y==="Dense"){x=d}else{if(y==="no_detail"){x=h}else{if(y==="Squish"){x=l}else{x=v}}}return x},draw_element:function(J,C,R,E,L,ab,af,ag,x){var O=R[0],ad=R[1],V=R[2],M=R[3],W=Math.floor(Math.max(0,(ad-L)*af)),K=Math.ceil(Math.min(x,Math.max(0,(V-L)*af))),U=(C==="Dense"?0:(0+E))*ag,I,Z,N=null,ah=null,A=this.prefs.block_color,Y=this.prefs.label_color;if(C=="Dense"){E=1}if(C==="no_detail"){J.fillStyle=A;J.fillRect(W,U+5,K-W,f)}else{var H=R[4],T=R[5],X=R[6],B=R[7];if(T&&X){N=Math.floor(Math.max(0,(T-L)*af));ah=Math.ceil(Math.min(x,Math.max(0,(X-L)*af)))}var ae,P;if(C==="Squish"||C==="Dense"){ae=1;P=e}else{ae=5;P=a}if(!B){if(R.strand){if(R.strand==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand_inv")}else{if(R.strand==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand_inv")}}}else{J.fillStyle=A}J.fillRect(W,U,K-W,P)}else{var G,Q;if(C==="Squish"||C==="Dense"){J.fillStyle=g;G=U+Math.floor(e/2)+1;Q=1}else{if(H){var G=U;var Q=P;if(H==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand")}else{if(H==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand")}}}else{J.fillStyle=g;G+=(e/2)+1;Q=1}}J.fillRect(W,G,K-W,Q);for(var ac=0,z=B.length;ac<z;ac++){var D=B[ac],y=Math.floor(Math.max(0,(D[0]-L)*af)),S=Math.ceil(Math.min(x,Math.max((D[1]-L)*af)));if(y>S){continue}J.fillStyle=A;J.fillRect(y,U+(P-ae)/2+1,S-y,ae);if(N!==undefined&&X>T&&!(y>ah||S<N)){var aa=Math.max(y,N),F=Math.min(S,ah);J.fillRect(aa,U+1,F-aa,P);if(B.length==1&&C=="Pack"){if(H==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand_inv")}else{if(H==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand_inv")}}if(aa+14<F){aa+=2;F-=2}J.fillRect(aa,U+1,F-aa,P)}}}}if(C==="Pack"&&ad>L){J.fillStyle=Y;if(L===0&&W-J.measureText(M).width<0){J.textAlign="left";J.fillText(M,K+k,U+8)}else{J.textAlign="right";J.fillText(M,W-k,U+8)}J.fillStyle=A}}}});var b=function(z,B,x,y,A){n.call(this,z,B,x,y,A)};t(b.prototype,n.prototype,{draw_element:function(Q,L,F,B,T,z,I,R,O){var F=data[i],H=F[0],P=F[1],A=F[2],K=F[3],D=Math.floor(Math.max(0,(P-T)*I)),G=Math.ceil(Math.min(O,Math.max(0,(A-T)*I))),C=(L==="Dense"?0:(0+B))*R,x,U,y=null,J=null;if(no_label){Q.fillStyle=block_color;Q.fillRect(D+left_offset,C+5,G-D,1)}else{var S=F[4],N=F[5],E=F[6];x=9;U=1;Q.fillRect(D+left_offset,C,G-D,x);if(L!=="Dense"&&K!==undefined&&P>T){Q.fillStyle=label_color;if(T===0&&D-Q.measureText(K).width<0){Q.textAlign="left";Q.fillText(K,G+2+left_offset,C+8)}else{Q.textAlign="right";Q.fillText(K,D-2+left_offset,C+8)}Q.fillStyle=block_color}var M=S+" / "+N;if(P>T&&Q.measureText(M).width<(G-D)){Q.fillStyle="white";Q.textAlign="center";Q.fillText(M,left_offset+D+(G-D)/2,C+8);Q.fillStyle=block_color}}}});var s=function(A,C,x,z,B,y){n.call(this,A,C,x,z,B);this.ref_seq=y};s.prototype.default_prefs=t({},n.prototype.default_prefs,{show_insertions:false});t(s.prototype,n.prototype,{get_row_height:function(){var x,y=this.mode;if(y==="Dense"){x=d}else{if(y==="Squish"){x=l}else{x=v;if(this.prefs.show_insertions){x*=2}}}return x},draw_read:function(T,O,K,Y,z,S,H,E,D){T.textAlign="center";var R=this,y=[Y,z],N=0,U=0,Q=0;ref_seq=this.ref_seq,char_width_px=T.canvas.manager.char_width_px;var ad=[];if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){Q=Math.round(K/2)}if(!H){H=[[0,E.length]]}for(var L=0,W=H.length;L<W;L++){var I=H[L],A="MIDNSHP=X"[I[0]],M=I[1];if(A==="H"||A==="S"){N-=M}var F=S+N,ac=Math.floor(Math.max(0,(F-Y)*K)),G=Math.floor(Math.max(0,(F+M-Y)*K));if(ac===G){G+=1}switch(A){case"H":break;case"S":case"M":case"=":if(is_overlap([F,F+M],y)){var P=E.slice(U,U+M);if(Q>0){T.fillStyle=this.prefs.block_color;T.fillRect(ac-Q,D+1,G-ac,9);T.fillStyle=g;for(var aa=0,x=P.length;aa<x;aa++){if(this.prefs.show_differences&&ref_seq){var J=ref_seq[F-Y+aa];if(!J||J.toLowerCase()===P[aa].toLowerCase()){continue}}if(F+aa>=Y&&F+aa<=z){var ab=Math.floor(Math.max(0,(F+aa-Y)*K));T.fillText(P[aa],ab,D+9)}}}else{T.fillStyle=this.prefs.block_color;T.fillRect(ac,D+4,G-ac,e)}}U+=M;N+=M;break;case"N":T.fillStyle=g;T.fillRect(ac-Q,D+5,G-ac,1);N+=M;break;case"D":T.fillStyle="red";T.fillRect(ac-Q,D+4,G-ac,3);N+=M;break;case"P":break;case"I":var X=ac-Q;if(is_overlap([F,F+M],y)){var P=E.slice(U,U+M);if(this.prefs.show_insertions){var C=ac-(G-ac)/2;if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){T.fillStyle="yellow";T.fillRect(C-Q,D-9,G-ac,9);ad[ad.length]={type:"triangle",data:[X,D+4,5]};T.fillStyle=g;switch(seq_tile_overlap){case (OVERLAP_START):P=P.slice(Y-F);break;case (OVERLAP_END):P=P.slice(0,F-z);break;case (CONTAINED_BY):break;case (CONTAINS):P=P.slice(Y-F,F-z);break}for(var aa=0,x=P.length;aa<x;aa++){var ab=Math.floor(Math.max(0,(F+aa-Y)*K));T.fillText(P[aa],ab-(G-ac)/2,D)}}else{T.fillStyle="yellow";T.fillRect(C,D+(this.mode!=="Dense"?2:5),G-ac,(O!=="Dense"?e:r))}}else{if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){ad[ad.length]={type:"text",data:[P.length,X,D+9]}}else{}}}U+=M;break;case"X":U+=M;break}}T.fillStyle="yellow";var Z,B,ae;for(var V=0;V<ad.length;V++){Z=ad[V];B=Z.type;ae=Z.data;if(B==="text"){T.save();T.font="bold "+T.font;T.fillText(ae[0],ae[1],ae[2]);T.restore()}else{if(B=="triangle"){p(T,ae[0],ae[1],ae[2])}}}},draw_element:function(Q,L,D,A,T,y,H,R,O){var G=D[0],P=D[1],z=D[2],I=D[3],C=Math.floor(Math.max(0,(P-T)*H)),E=Math.ceil(Math.min(O,Math.max(0,(z-T)*H))),B=(L==="Dense"?0:(0+A))*R,U=this.prefs.block_color,F=this.prefs.label_color,N=0;if((L==="Pack"||this.mode==="Auto")&&H>Q.canvas.manager.char_width_px){var N=Math.round(H/2)}Q.fillStyle=U;if(D[5] instanceof Array){var M=Math.floor(Math.max(0,(D[4][0]-T)*H)),K=Math.ceil(Math.min(O,Math.max(0,(D[4][1]-T)*H))),J=Math.floor(Math.max(0,(D[5][0]-T)*H)),x=Math.ceil(Math.min(O,Math.max(0,(D[5][1]-T)*H)));if(D[4][1]>=T&&D[4][0]<=y&&D[4][2]){this.draw_read(Q,L,H,T,y,D[4][0],D[4][2],D[4][3],B)}if(D[5][1]>=T&&D[5][0]<=y&&D[5][2]){this.draw_read(Q,L,H,T,y,D[5][0],D[5][2],D[5][3],B)}if(J>K){Q.fillStyle=g;o(Q,K-N,B+5,J-N,B+5)}}else{Q.fillStyle=U;this.draw_read(Q,L,H,T,y,P,D[4],D[5],B)}if(L==="Pack"&&P>T){Q.fillStyle=this.prefs.label_color;var S=1;if(S===0&&C-Q.measureText(I).width<0){Q.textAlign="left";Q.fillText(I,E+k-N,B+8)}else{Q.textAlign="right";Q.fillText(I,C-k-N,B+8)}Q.fillStyle=U}}});w.SummaryTreePainter=u;w.LinePainter=c;w.LinkedFeaturePainter=q;w.ReadPainter=s;w.VariantPainter=b};(function(d){var c={};var b=function(e){return c[e]};var a=function(f,g){var e={};g(b,e);c[f]=e};a("class",class_module);a("slotting",slotting_module);a("painters",painters_module);a("trackster",trackster_module);for(key in c.trackster){d[key]=c.trackster[key]}})(window);
\ No newline at end of file
--- a/static/scripts/trackster.js Tue May 03 11:35:21 2011 -0400
+++ b/static/scripts/trackster.js Wed May 04 10:20:54 2011 -0400
@@ -885,11 +885,15 @@
this.parent_div.find("input").click(function() { $(this).select() });
// Add 'Go' button.
- var run_tool_row = $("<div>").addClass("slider-row").appendTo(this.parent_div);
- var run_tool_button = $("<input type='submit'>").attr("value", "Run").appendTo(run_tool_row);
+ var run_tool_row = $("<div>").addClass("param-row").appendTo(this.parent_div);
+ var run_on_dataset_button = $("<input type='submit'>").attr("value", "Run on complete dataset").appendTo(run_tool_row);
+ var run_on_region_button = $("<input type='submit'>").attr("value", "Run on visible region").css("margin-left", "3em").appendTo(run_tool_row);
var tool = this;
- run_tool_button.click( function() {
- tool.run();
+ run_on_region_button.click( function() {
+ tool.run_on_region();
+ });
+ run_on_dataset_button.click( function() {
+ tool.run_on_dataset();
});
};
extend(Tool.prototype, {
@@ -920,51 +924,87 @@
return param_values;
},
/**
- * Run tool. This creates a new child track, runs tool, and places tool's output in the new track.
+ * Run tool on dataset. Output is placed in dataset's history and no changes to viz are made.
*/
- run: function() {
- // Put together params for running tool.
- var url_params = {
- dataset_id: this.track.original_dataset_id,
- chrom: this.track.view.chrom,
- low: this.track.view.low,
- high: this.track.view.high,
- tool_id: this.name
- };
- $.extend(url_params, this.get_param_values_dict());
+ run_on_dataset: function() {
+ var tool = this;
+ tool.run(
+ // URL params.
+ {
+ dataset_id: this.track.original_dataset_id,
+ tool_id: tool.name
+ },
+ // Success callback.
+ function(track_data) {
+ show_modal(tool.name + " is Running",
+ tool.name + " is running on the complete dataset. Tool outputs are in dataset's history.",
+ { "Close" : hide_modal } );
+ }
+ );
+ },
+ /**
+ * Run dataset on visible region. This creates a new track and sets the track's contents
+ * to the tool's output.
+ */
+ run_on_region: function() {
//
// Create track for tool's output immediately to provide user feedback.
//
var
+ url_params =
+ {
+ dataset_id: this.track.original_dataset_id,
+ chrom: this.track.view.chrom,
+ low: this.track.view.low,
+ high: this.track.view.high,
+ tool_id: this.name
+ },
current_track = this.track,
// Set name of track to include tool name, parameters, and region used.
track_name = url_params.tool_id +
current_track.tool_region_and_parameters_str(url_params.chrom, url_params.low, url_params.high),
new_track;
+ // Create and add track.
// TODO: add support for other kinds of tool data tracks.
if (current_track.track_type === 'FeatureTrack') {
new_track = new ToolDataFeatureTrack(track_name, view, current_track.hda_ldda, undefined, {}, {}, current_track);
}
-
this.track.add_track(new_track);
new_track.content_div.text("Starting job.");
// Run tool.
+ this.run(url_params,
+ // Success callback.
+ function(track_data) {
+ new_track.dataset_id = track_data.dataset_id;
+ new_track.content_div.text("Running job.");
+ new_track.init();
+ }
+ );
+ },
+ /**
+ * Run tool using a set of URL params and a success callback.
+ */
+ run: function(url_params, success_callback) {
+ // Add tool params to URL params.
+ $.extend(url_params, this.get_param_values_dict());
+
+ // Run tool.
var json_run_tool = function() {
- $.getJSON(run_tool_url, url_params, function(track_data) {
- if (track_data === "no converter") {
+ $.getJSON(run_tool_url, url_params, function(response) {
+ if (response === "no converter") {
// No converter available for input datasets, so cannot run tool.
new_track.container_div.addClass("error");
new_track.content_div.text(DATA_NOCONVERTER);
}
- else if (track_data.error) {
+ else if (response.error) {
// General error.
new_track.container_div.addClass("error");
- new_track.content_div.text(DATA_CANNOT_RUN_TOOL + track_data.message);
+ new_track.content_div.text(DATA_CANNOT_RUN_TOOL + response.message);
}
- else if (track_data === "pending") {
+ else if (response === "pending") {
// Converting/indexing input datasets; show message and try again.
new_track.container_div.addClass("pending");
new_track.content_div.text("Converting input data so that it can be easily reused.");
@@ -972,9 +1012,7 @@
}
else {
// Job submitted and running.
- new_track.dataset_id = track_data.dataset_id;
- new_track.content_div.text("Running job.");
- new_track.init();
+ success_callback(response);
}
});
};
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: jgoecks: Add unspecified build validators to dataset inputs for Cufflinks/compare/diff wrappers.
by Bitbucket 03 May '11
by Bitbucket 03 May '11
03 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/0094ba8f1c0a/
changeset: r5497:0094ba8f1c0a
user: jgoecks
date: 2011-05-03 16:31:14
summary: Add unspecified build validators to dataset inputs for Cufflinks/compare/diff wrappers.
affected #: 3 files (545 bytes)
--- a/tools/ngs_rna/cuffcompare_wrapper.xml Tue May 03 09:45:40 2011 -0400
+++ b/tools/ngs_rna/cuffcompare_wrapper.xml Tue May 03 10:31:14 2011 -0400
@@ -33,9 +33,13 @@
#end for
</command><inputs>
- <param format="gtf" name="first_input" type="data" label="GTF file produced by Cufflinks" help=""/>
+ <param format="gtf" name="first_input" type="data" label="GTF file produced by Cufflinks" help="">
+ <validator type="unspecified_build" />
+ </param><repeat name="input_files" title="Additional GTF Input Files">
- <param format="gtf" name="additional_input" type="data" label="GTF file produced by Cufflinks" help=""/>
+ <param format="gtf" name="additional_input" type="data" label="GTF file produced by Cufflinks" help="">
+ <validator type="unspecified_build" />
+ </param></repeat><conditional name="annotation"><param name="use_ref_annotation" type="select" label="Use Reference Annotation">
--- a/tools/ngs_rna/cuffdiff_wrapper.xml Tue May 03 09:45:40 2011 -0400
+++ b/tools/ngs_rna/cuffdiff_wrapper.xml Tue May 03 10:31:14 2011 -0400
@@ -68,7 +68,9 @@
</command><inputs>
- <param format="gtf" name="gtf_input" type="data" label="Transcripts" help="A transcript GTF file produced by cufflinks, cuffcompare, or other source."/>
+ <param format="gtf" name="gtf_input" type="data" label="Transcripts" help="A transcript GTF file produced by cufflinks, cuffcompare, or other source.">
+ <validator type="unspecified_build" />
+ </param><conditional name="group_analysis"><param name="do_groups" type="select" label="Perform replicate analysis" help="Perform cuffdiff with replicates in each group."><option value="No">No</option>
@@ -78,13 +80,19 @@
<repeat name="groups" title="Group"><param name="group" title="Group name" type="text" label="Group name (no spaces or commas)"/><repeat name="files" title="Replicate">
- <param name="file" label="Add file" type="data" format="sam,bam"/>
+ <param name="file" label="Add file" type="data" format="sam,bam">
+ <validator type="unspecified_build" />
+ </param></repeat></repeat></when><when value="No">
- <param format="sam,bam" name="aligned_reads1" type="data" label="SAM or BAM file of aligned RNA-Seq reads" help=""/>
- <param format="sam,bam" name="aligned_reads2" type="data" label="SAM or BAM file of aligned RNA-Seq reads" help=""/>
+ <param format="sam,bam" name="aligned_reads1" type="data" label="SAM or BAM file of aligned RNA-Seq reads" help="">
+ <validator type="unspecified_build" />
+ </param>
+ <param format="sam,bam" name="aligned_reads2" type="data" label="SAM or BAM file of aligned RNA-Seq reads" help="">
+ <validator type="unspecified_build" />
+ </param></when></conditional>
--- a/tools/ngs_rna/cufflinks_wrapper.xml Tue May 03 09:45:40 2011 -0400
+++ b/tools/ngs_rna/cufflinks_wrapper.xml Tue May 03 10:31:14 2011 -0400
@@ -41,7 +41,9 @@
#end if
</command><inputs>
- <param format="sam,bam" name="input" type="data" label="SAM or BAM file of aligned RNA-Seq reads" help=""/>
+ <param format="sam,bam" name="input" type="data" label="SAM or BAM file of aligned RNA-Seq reads" help="">
+ <validator type="unspecified_build" />
+ </param><param name="max_intron_len" type="integer" value="300000" min="1" max="600000" label="Max Intron Length" help=""/><param name="min_isoform_fraction" type="float" value="0.05" min="0" max="1" label="Min Isoform Fraction" help=""/><param name="pre_mrna_fraction" type="float" value="0.05" min="0" max="1" label="Pre MRNA Fraction" help=""/>
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: jgoecks: Fix bug in 'Filter GTF data by attribute values list' tool.
by Bitbucket 03 May '11
by Bitbucket 03 May '11
03 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/a0165dfc5664/
changeset: r5496:a0165dfc5664
user: jgoecks
date: 2011-05-03 15:45:40
summary: Fix bug in 'Filter GTF data by attribute values list' tool.
affected #: 1 file (41 bytes)
--- a/tools/filters/gff/gtf_filter_by_attribute_values_list.py Mon May 02 17:35:06 2011 -0400
+++ b/tools/filters/gff/gtf_filter_by_attribute_values_list.py Tue May 03 09:45:40 2011 -0400
@@ -54,7 +54,7 @@
for line in open( gff_file ):
fields = line.split( '\t' )
attributes = parse_gff_attributes( fields[8] )
- if attributes[ attribute_name ] in ids_dict:
+ if ( attribute_name in attributes ) and ( attributes[ attribute_name ] in ids_dict ):
output.write( line )
output.close()
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: jgoecks: Trackster filters improvements: (a) stop propagation of keydown events to viz; and (b) simplify min and max calculations.
by Bitbucket 02 May '11
by Bitbucket 02 May '11
02 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/8333828fcc9e/
changeset: r5495:8333828fcc9e
user: jgoecks
date: 2011-05-02 23:35:06
summary: Trackster filters improvements: (a) stop propagation of keydown events to viz; and (b) simplify min and max calculations.
affected #: 1 file (7 bytes)
--- a/static/scripts/trackster.js Mon May 02 15:14:53 2011 -0400
+++ b/static/scripts/trackster.js Mon May 02 17:35:06 2011 -0400
@@ -158,14 +158,6 @@
exports.sortable = sortable;
/**
- * Calculates step for slider with a given min, max.
- */
-var get_slider_step = function(min, max) {
- var range = max - min;
- return (range <= 2 ? 0.01 : (range <= 100 ? 1 : (range <= 1000 ? 5 : 10)));
-};
-
-/**
* Init constants & functions used throughout trackster.
*/
var
@@ -1077,6 +1069,11 @@
* Update filter's slider.
*/
update_ui_elt: function () {
+ var get_slider_step = function(min, max) {
+ var range = max - min;
+ return (range <= 2 ? 0.01 : 1);
+ };
+
var
slider_min = this.slider.slider("option", "min"),
slider_max = this.slider.slider("option", "max");
@@ -1180,13 +1177,15 @@
// Create filtering div.
this.parent_div = $("<div/>").addClass("filters").hide();
- // Disable dragging, double clicking on div so that actions on slider do not impact viz.
+ // Disable dragging, double clicking, keys on div so that actions on slider do not impact viz.
this.parent_div.bind("drag", function(e) {
e.stopPropagation();
}).bind("click", function(e) {
e.stopPropagation();
}).bind("dblclick", function(e) {
e.stopPropagation();
+ }).bind("keydown", function(e) {
+ e.stopPropagation();
});
var manager = this;
$.each(this.filters, function(index, filter) {
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/f6f0c94433b8/
changeset: r5494:f6f0c94433b8
user: jgoecks
date: 2011-05-02 21:14:53
summary: Fix bugs in tracks/run_tool.
affected #: 1 file (17 bytes)
--- a/lib/galaxy/web/controllers/tracks.py Mon May 02 14:43:09 2011 -0400
+++ b/lib/galaxy/web/controllers/tracks.py Mon May 02 15:14:53 2011 -0400
@@ -721,7 +721,7 @@
messages_list = []
for jida in original_job.input_datasets:
input_dataset = jida.dataset
- if hasattr( input_dataset, 'get_track_type' ):
+ if hasattr( input_dataset.datatype, 'get_track_type' ):
#
# Dataset can be indexed and hence a subset can be extracted.
#
@@ -748,7 +748,7 @@
data_provider_class = get_data_provider( original_dataset=input_dataset )
data_provider = data_provider_class( original_dataset=input_dataset,
converted_dataset=converted_dataset,
- deps=deps )
+ dependencies=deps )
data_provider.write_data_to_file( chrom, low, high, new_dataset.file_name )
# TODO: size not working.
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: jgoecks: Trackster: use user preferences when drawing summary tree.
by Bitbucket 02 May '11
by Bitbucket 02 May '11
02 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/c784699c544a/
changeset: r5493:c784699c544a
user: jgoecks
date: 2011-05-02 20:43:09
summary: Trackster: use user preferences when drawing summary tree.
affected #: 1 file (62 bytes)
--- a/static/scripts/trackster.js Mon May 02 13:59:49 2011 -0400
+++ b/static/scripts/trackster.js Mon May 02 14:43:09 2011 -0400
@@ -2391,7 +2391,7 @@
this.container_div.find(".yaxislabel").remove();
var max_label = $("<div />").addClass('yaxislabel');
max_label.text( result.max );
- max_label.css({ position: "absolute", top: "22px", left: "10px" });
+ max_label.css({ position: "absolute", top: "22px", left: "10px", color: this.prefs.label_color });
max_label.prependTo(this.container_div);
// Create canvas
var canvas = this.view.canvas_manager.new_canvas();
@@ -2850,14 +2850,14 @@
if (!y) { continue; }
var y_px = y / max * height
if (y !== 0 && y_px < 1) { y_px = 1; }
-
- ctx.fillStyle = "black";
+
+ ctx.fillStyle = this.prefs.block_color;
ctx.fillRect( x, base_y - y_px, delta_x_px, y_px );
// Draw number count if it can fit the number with some padding, otherwise things clump up
var text_padding_req_x = 4;
if (this.prefs.show_counts && (ctx.measureText(y).width + text_padding_req_x) < delta_x_px) {
- ctx.fillStyle = "#666";
+ ctx.fillStyle = this.prefs.label_color;
ctx.textAlign = "center";
ctx.fillText(y, x + (delta_x_px/2), 10);
}
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: kanwei: Revert Mako to 0.2.5 since it breaks fn tests
by Bitbucket 02 May '11
by Bitbucket 02 May '11
02 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/8b27774b2cab/
changeset: r5491:8b27774b2cab
user: kanwei
date: 2011-05-02 19:25:11
summary: Revert Mako to 0.2.5 since it breaks fn tests
affected #: 1 file (0 bytes)
--- a/eggs.ini Fri Apr 29 17:32:33 2011 -0400
+++ b/eggs.ini Mon May 02 13:25:11 2011 -0400
@@ -38,7 +38,7 @@
elementtree = 1.2.6_20050316
GeneTrack = 2.0.0_beta_1
lrucache = 0.2
-Mako = 0.4.1
+Mako = 0.2.5
nose = 0.11.1
NoseHTML = 0.4.1
NoseTestDiff = 0.1
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: fubar: second test for picard asmetrics fails on buildbot. This fix works on my own testbed - but then, it worked before too...
by Bitbucket 29 Apr '11
by Bitbucket 29 Apr '11
29 Apr '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/6dc381fe8af9/
changeset: r5490:6dc381fe8af9
user: fubar
date: 2011-04-29 23:32:33
summary: second test for picard asmetrics fails on buildbot. This fix works on my own testbed - but then, it worked before too...
affected #: 1 file (42 bytes)
--- a/tools/picard/rgPicardASMetrics.xml Fri Apr 29 17:23:06 2011 -0400
+++ b/tools/picard/rgPicardASMetrics.xml Fri Apr 29 17:32:33 2011 -0400
@@ -62,6 +62,7 @@
<param name="sorted" value="true" /><param name="adaptors" value="" /><param name="maxinsert" value="100000" />
+ <param name="index" value="hg18" /><param name="refGenomeSource" value="indexed" /><param name="index" value="hg18" /><param name="input_file" value="picard_input_sorted_pair.sam" dbkey="hg18" />
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: dan: Show rerun and info buttons in dataset previews for additional states.
by Bitbucket 29 Apr '11
by Bitbucket 29 Apr '11
29 Apr '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/4ab5044b3196/
changeset: r5489:4ab5044b3196
user: dan
date: 2011-04-29 23:23:06
summary: Show rerun and info buttons in dataset previews for additional states.
affected #: 1 file (1.7 KB)
--- a/templates/root/history_common.mako Fri Apr 29 16:51:51 2011 -0400
+++ b/templates/root/history_common.mako Fri Apr 29 17:23:06 2011 -0400
@@ -83,15 +83,30 @@
<div>Dataset is uploading</div>
%elif data_state == "queued":
<div>${_('Job is waiting to run')}</div>
+ <div>
+ <a href="${h.url_for( controller='dataset', action='show_params', dataset_id=dataset_id )}" target="galaxy_main" title="View Details" class="icon-button information tooltip"></a>
+ %if for_editing:
+ <a href="${h.url_for( controller='tool_runner', action='rerun', id=data.id )}" target="galaxy_main" title="Run this job again" class="icon-button arrow-circle tooltip"></a>
+ %endif
+ </div>
%elif data_state == "running":
<div>${_('Job is currently running')}</div>
+ <div>
+ <a href="${h.url_for( controller='dataset', action='show_params', dataset_id=dataset_id )}" target="galaxy_main" title="View Details" class="icon-button information tooltip"></a>
+ %if for_editing:
+ <a href="${h.url_for( controller='tool_runner', action='rerun', id=data.id )}" target="galaxy_main" title="Run this job again" class="icon-button arrow-circle tooltip"></a>
+ %endif
+ </div>
%elif data_state == "error":
<div>
An error occurred running this job: <i>${data.display_info().strip()}</i></div><div><a href="${h.url_for( controller='dataset', action='errors', id=data.id )}" target="galaxy_main" title="View or report this error" class="icon-button bug tooltip"></a>
- <a href="${h.url_for( controller='tool_runner', action='rerun', id=data.id )}" target="galaxy_main" title="Run this job again" class="icon-button arrow-circle tooltip"></a>
+ <a href="${h.url_for( controller='dataset', action='show_params', dataset_id=dataset_id )}" target="galaxy_main" title="View Details" class="icon-button information tooltip"></a>
+ %if for_editing:
+ <a href="${h.url_for( controller='tool_runner', action='rerun', id=data.id )}" target="galaxy_main" title="Run this job again" class="icon-button arrow-circle tooltip"></a>
+ %endif
</div>
%elif data_state == "discarded":
<div>
@@ -101,6 +116,12 @@
<div>${_('Metadata is being Auto-Detected.')}</div>
%elif data_state == "empty":
<div>${_('No data: ')}<i>${data.display_info()}</i></div>
+ <div>
+ <a href="${h.url_for( controller='dataset', action='show_params', dataset_id=dataset_id )}" target="galaxy_main" title="View Details" class="icon-button information tooltip"></a>
+ %if for_editing:
+ <a href="${h.url_for( controller='tool_runner', action='rerun', id=data.id )}" target="galaxy_main" title="Run this job again" class="icon-button arrow-circle tooltip"></a>
+ %endif
+ </div>
%elif data_state in [ "ok", "failed_metadata" ]:
%if data_state == "failed_metadata":
<div class="warningmessagesmall" style="margin: 4px 0 4px 0">
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: dan: Only allow a user to rerun if they have access permissions on the dataset.
by Bitbucket 29 Apr '11
by Bitbucket 29 Apr '11
29 Apr '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/7ae63fde7f78/
changeset: r5488:7ae63fde7f78
user: dan
date: 2011-04-29 22:51:51
summary: Only allow a user to rerun if they have access permissions on the dataset.
affected #: 1 file (246 bytes)
--- a/lib/galaxy/web/controllers/tool_runner.py Fri Apr 29 15:32:04 2011 -0400
+++ b/lib/galaxy/web/controllers/tool_runner.py Fri Apr 29 16:51:51 2011 -0400
@@ -90,6 +90,9 @@
error( "Invalid value for 'id' parameter" )
# Get the dataset object
data = trans.sa_session.query( trans.app.model.HistoryDatasetAssociation ).get( id )
+ #only allow rerunning if user is allowed access to the dataset.
+ if not trans.app.security_agent.can_access_dataset( trans.get_current_user_roles(), data.dataset ):
+ error( "You are not allowed to access this dataset" )
# Get the associated job, if any. If this hda was copied from another,
# we need to find the job that created the origial hda
job_hda = data
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: greg: Apply patch from taoliu - ticket #529 - Missing controller when creating user with require_login & allow_user_creatio is on.
by Bitbucket 29 Apr '11
by Bitbucket 29 Apr '11
29 Apr '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/3496a98f9cbe/
changeset: r5487:3496a98f9cbe
user: greg
date: 2011-04-29 21:32:04
summary: Apply patch from taoliu - ticket #529 - Missing controller when creating user with require_login & allow_user_creatio is on.
affected #: 1 file (17 bytes)
--- a/lib/galaxy/web/controllers/user.py Fri Apr 29 13:59:11 2011 -0400
+++ b/lib/galaxy/web/controllers/user.py Fri Apr 29 15:32:04 2011 -0400
@@ -371,7 +371,7 @@
redirect_url = url_for( '/' )
if not user and trans.app.config.require_login:
if trans.app.config.allow_user_creation:
- header = require_login_creation_template % web.url_for( action='create' )
+ header = require_login_creation_template % web.url_for( action='create', cntrller='user' )
else:
header = require_login_nocreation_template
return trans.fill_template( '/user/login.mako',
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/27dfee4fccaf/
changeset: r5486:27dfee4fccaf
user: natefoo
date: 2011-04-29 19:59:11
summary: New pysam w/o ctypes dependency.
affected #: 1 file (0 bytes)
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: fubar: gcbias still failing on test - works fine here using same data - clean up of fasta munging
by Bitbucket 29 Apr '11
by Bitbucket 29 Apr '11
29 Apr '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/62a5d6d82151/
changeset: r5485:62a5d6d82151
user: fubar
date: 2011-04-29 18:29:13
summary: gcbias still failing on test - works fine here using same data - clean up of fasta munging
affected #: 2 files (166 bytes)
--- a/tools/picard/picard_wrapper.py Fri Apr 29 10:37:59 2011 -0400
+++ b/tools/picard/picard_wrapper.py Fri Apr 29 12:29:13 2011 -0400
@@ -361,19 +361,19 @@
tmp_dir = opts.outdir
# set ref and dict files to use (create if necessary)
- if opts.ref_file:
+ ref_file_name = opts.ref
+ if opts.ref_file <> None:
csd = 'CreateSequenceDictionary'
realjarpath = os.path.split(opts.jar)[0]
jarpath = os.path.join(realjarpath,'%s.jar' % csd) # for refseq
tmp_ref_fd, tmp_ref_name = tempfile.mkstemp( dir=opts.tmpdir , prefix = pic.picname)
- ref_file_name = '%s.fa' % tmp_ref_name
+ ref_file_name = '%s.fasta' % tmp_ref_name
# build dict
- ## need to change name of fasta to have fasta ext
- dict_file_name = ref_file_name.replace( '.fa', '.dict' )
+ dict_file_name = '%s.dict' % tmp_ref_name
os.symlink( opts.ref_file, ref_file_name )
cl = ['REFERENCE=%s' % ref_file_name]
cl.append('OUTPUT=%s' % dict_file_name)
- cl.append('URI=%s' % os.path.basename( ref_file_name ))
+ cl.append('URI=%s' % os.path.basename( ref_file ))
cl.append('TRUNCATE_NAMES_AT_WHITESPACE=%s' % opts.trunc_names)
if opts.species_name:
cl.append('SPECIES=%s' % opts.species_name)
@@ -381,11 +381,9 @@
cl.append('GENOME_ASSEMBLY=%s' % opts.build_name)
pic.delme.append(dict_file_name)
pic.delme.append(ref_file_name)
+ pic.delme.append(tmp_ref_name)
s = pic.runPic(jarpath, cl)
- elif opts.ref:
- ref_file_name = opts.ref
-
- # run relevant command(s)
+ # run relevant command(s)
cl = ['VALIDATION_STRINGENCY=LENIENT',]
@@ -446,13 +444,15 @@
elif pic.picname == 'CollectAlignmentSummaryMetrics':
+ # Why do we do this fakefasta thing? Because we need NO fai to be available or picard barfs unless it has the same length as the input data.
+ # why? Dunno
fakefasta = os.path.join(opts.outdir,'%s_fake.fasta' % os.path.basename(ref_file_name))
try:
os.symlink(ref_file_name,fakefasta)
except:
s = '## unable to symlink %s to %s - different devices? May need to replace with shutil.copy'
info = s
- shutil.copy(ref_file_name,fakefasta)
+ shutil.copy(ref_file_name,fakefasta)
pic.delme.append(fakefasta)
cl.append('ASSUME_SORTED=%s' % opts.assumesorted)
adaptorseqs = ''.join([' ADAPTER_SEQUENCE=%s' % x for x in opts.adaptors])
@@ -478,13 +478,13 @@
# sigh. Why do we do this fakefasta thing? Because we need NO fai to be available or picard barfs unless it has the same length as the input data.
# why? Dunno
fakefasta = os.path.join(opts.outdir,'%s_fake.fasta' % os.path.basename(ref_file_name))
- pic.delme.append(fakefasta)
try:
os.symlink(ref_file_name,fakefasta)
except:
s = '## unable to symlink %s to %s - different devices? May need to replace with shutil.copy'
info = s
- shutil.copy(ref_file_name,fakefasta)
+ shutil.copy(ref_file_name,fakefasta)
+ pic.delme.append(fakefasta)
x = 'rgPicardGCBiasMetrics'
pdfname = '%s.pdf' % x
jpgname = '%s.jpg' % x
--- a/tools/picard/rgPicardGCBiasMetrics.xml Fri Apr 29 10:37:59 2011 -0400
+++ b/tools/picard/rgPicardGCBiasMetrics.xml Fri Apr 29 12:29:13 2011 -0400
@@ -40,7 +40,7 @@
<param name="mingenomefrac" value="0.00001" type="float" label="Minimum Genome Fraction"
help="For summary metrics, exclude GC windows that include less than this fraction of the genome. Default value: 1.0E-5." /><param name="maxheap" type="select" help="If in doubt, choose 8G and read Picard documentation please"
- label="Java heap size. Java is a pig, the art is long but memory is short">
+ label="Java heap size"><option value="1G">1GB: very small data</option><option value="2G" selected="true">2GB</option><option value="4G">4GB for larger datasets </option>
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: natefoo: When using a logout href, load that link at _top, not in the galaxy_main panel.
by Bitbucket 29 Apr '11
by Bitbucket 29 Apr '11
29 Apr '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/337605f6b630/
changeset: r5484:337605f6b630
user: natefoo
date: 2011-04-29 16:37:59
summary: When using a logout href, load that link at _top, not in the galaxy_main panel.
affected #: 1 file (7 bytes)
--- a/templates/webapps/galaxy/base_panels.mako Fri Apr 29 10:35:42 2011 -0400
+++ b/templates/webapps/galaxy/base_panels.mako Fri Apr 29 10:37:59 2011 -0400
@@ -132,7 +132,7 @@
menu_options = [ [ '<li>Logged in as <span id="user-email">%s</span></li>' % email ] ]
if app.config.use_remote_user:
if app.config.remote_user_logout_href:
- menu_options.append( [ 'Logout', app.config.remote_user_logout_href, "galaxy_main" ] )
+ menu_options.append( [ 'Logout', app.config.remote_user_logout_href, "_top" ] )
else:
menu_options.append( [ 'Preferences', h.url_for( controller='/user', action='index', cntrller='user' ), "galaxy_main" ] )
if app.config.get_bool( 'enable_tracks', False ):
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0