Repository 'java_genomics_toolkit'
hg clone https://toolshed.g2.bx.psu.edu/repos/timpalpant/java_genomics_toolkit

Changeset 0:1daf3026d231 (2012-02-13)
Next changeset 1:a54db233ee3d (2012-02-13)
Commit message:
Upload alpha version
added:
._java-genomics-toolkit
java-genomics-toolkit/._.classpath
java-genomics-toolkit/._.gitignore
java-genomics-toolkit/._.project
java-genomics-toolkit/._META-INF
java-genomics-toolkit/._README.rdoc
java-genomics-toolkit/._build.properties
java-genomics-toolkit/._build.xml
java-genomics-toolkit/._galaxy-conf
java-genomics-toolkit/._galaxyToolConf.xml
java-genomics-toolkit/._gui
java-genomics-toolkit/._launch4j.xml
java-genomics-toolkit/._lib
java-genomics-toolkit/._log4j.properties
java-genomics-toolkit/._resources
java-genomics-toolkit/._src
java-genomics-toolkit/._stubFile.sh
java-genomics-toolkit/._toolRunner.sh
java-genomics-toolkit/.classpath
java-genomics-toolkit/.gitignore
java-genomics-toolkit/.project
java-genomics-toolkit/META-INF/._MANIFEST.MF
java-genomics-toolkit/META-INF/MANIFEST.MF
java-genomics-toolkit/README.rdoc
java-genomics-toolkit/build.properties
java-genomics-toolkit/build.xml
java-genomics-toolkit/galaxy-conf/._BaseAlignCounts.xml
java-genomics-toolkit/galaxy-conf/._galaxyToolRunner.sh
java-genomics-toolkit/galaxy-conf/BaseAlignCounts.xml
java-genomics-toolkit/galaxy-conf/galaxyToolRunner.sh
java-genomics-toolkit/galaxyToolConf.xml
java-genomics-toolkit/gui/._edu
java-genomics-toolkit/gui/._javax
java-genomics-toolkit/gui/edu/._unc
java-genomics-toolkit/gui/edu/unc/._genomics
java-genomics-toolkit/gui/edu/unc/genomics/._AssemblyManager.java
java-genomics-toolkit/gui/edu/unc/genomics/._AssemblyManagerDialog.java
java-genomics-toolkit/gui/edu/unc/genomics/._AssemblyTableModel.java
java-genomics-toolkit/gui/edu/unc/genomics/._ButtonLabel.java
java-genomics-toolkit/gui/edu/unc/genomics/._Job.java
java-genomics-toolkit/gui/edu/unc/genomics/._JobConfigPanel.java
java-genomics-toolkit/gui/edu/unc/genomics/._JobException.java
java-genomics-toolkit/gui/edu/unc/genomics/._JobQueue.java
java-genomics-toolkit/gui/edu/unc/genomics/._JobQueueCellRenderer.java
java-genomics-toolkit/gui/edu/unc/genomics/._JobQueueManager.java
java-genomics-toolkit/gui/edu/unc/genomics/._ResourceManager.java
java-genomics-toolkit/gui/edu/unc/genomics/._SubmittedJob.java
java-genomics-toolkit/gui/edu/unc/genomics/._ThreadFilter.java
java-genomics-toolkit/gui/edu/unc/genomics/._ToolRunner.java
java-genomics-toolkit/gui/edu/unc/genomics/._ToolRunnerFrame.java
java-genomics-toolkit/gui/edu/unc/genomics/._ToolsTree.java
java-genomics-toolkit/gui/edu/unc/genomics/._ToolsTreeModel.java
java-genomics-toolkit/gui/edu/unc/genomics/._ToolsTreeNode.java
java-genomics-toolkit/gui/edu/unc/genomics/AssemblyManager.java
java-genomics-toolkit/gui/edu/unc/genomics/AssemblyManagerDialog.java
java-genomics-toolkit/gui/edu/unc/genomics/AssemblyTableModel.java
java-genomics-toolkit/gui/edu/unc/genomics/ButtonLabel.java
java-genomics-toolkit/gui/edu/unc/genomics/Job.java
java-genomics-toolkit/gui/edu/unc/genomics/JobConfigPanel.java
java-genomics-toolkit/gui/edu/unc/genomics/JobException.java
java-genomics-toolkit/gui/edu/unc/genomics/JobQueue.java
java-genomics-toolkit/gui/edu/unc/genomics/JobQueueCellRenderer.java
java-genomics-toolkit/gui/edu/unc/genomics/JobQueueManager.java
java-genomics-toolkit/gui/edu/unc/genomics/ResourceManager.java
java-genomics-toolkit/gui/edu/unc/genomics/SubmittedJob.java
java-genomics-toolkit/gui/edu/unc/genomics/ThreadFilter.java
java-genomics-toolkit/gui/edu/unc/genomics/ToolRunner.java
java-genomics-toolkit/gui/edu/unc/genomics/ToolRunnerFrame.java
java-genomics-toolkit/gui/edu/unc/genomics/ToolsTree.java
java-genomics-toolkit/gui/edu/unc/genomics/ToolsTreeModel.java
java-genomics-toolkit/gui/edu/unc/genomics/ToolsTreeNode.java
java-genomics-toolkit/gui/javax/._swing
java-genomics-toolkit/gui/javax/swing/._layout
java-genomics-toolkit/gui/javax/swing/layout/._SpringUtilities.java
java-genomics-toolkit/gui/javax/swing/layout/SpringUtilities.java
java-genomics-toolkit/launch4j.xml
java-genomics-toolkit/lib/._BigWig.jar
java-genomics-toolkit/lib/._commons-lang3-3.1.jar
java-genomics-toolkit/lib/._commons-math-2.2.jar
java-genomics-toolkit/lib/._jarbundler-2.2.0.jar
java-genomics-toolkit/lib/._java-genomics-io.jar
java-genomics-toolkit/lib/._jcommander-1.20.jar
java-genomics-toolkit/lib/._jtransforms-2.4.jar
java-genomics-toolkit/lib/._launch4j.jar
java-genomics-toolkit/lib/._log4j-1.2.15.jar
java-genomics-toolkit/lib/._macify-1.4.jar
java-genomics-toolkit/lib/._sam-1.56.jar
java-genomics-toolkit/lib/._swing-layout.jar
java-genomics-toolkit/lib/._xstream.jar
java-genomics-toolkit/lib/BigWig.jar
java-genomics-toolkit/lib/commons-lang3-3.1.jar
java-genomics-toolkit/lib/commons-math-2.2.jar
java-genomics-toolkit/lib/jarbundler-2.2.0.jar
java-genomics-toolkit/lib/java-genomics-io.jar
java-genomics-toolkit/lib/jcommander-1.20.jar
java-genomics-toolkit/lib/jtransforms-2.4.jar
java-genomics-toolkit/lib/launch4j.jar
java-genomics-toolkit/lib/log4j-1.2.15.jar
java-genomics-toolkit/lib/macify-1.4.jar
java-genomics-toolkit/lib/sam-1.56.jar
java-genomics-toolkit/lib/swing-layout.jar
java-genomics-toolkit/lib/xstream.jar
java-genomics-toolkit/log4j.properties
java-genomics-toolkit/resources/._assemblies
java-genomics-toolkit/resources/._images
java-genomics-toolkit/resources/._toolConf.xml
java-genomics-toolkit/resources/assemblies/._ce2.len
java-genomics-toolkit/resources/assemblies/._ce3.len
java-genomics-toolkit/resources/assemblies/._ce4.len
java-genomics-toolkit/resources/assemblies/._ce5.len
java-genomics-toolkit/resources/assemblies/._ce6.len
java-genomics-toolkit/resources/assemblies/._ce7.len
java-genomics-toolkit/resources/assemblies/._ce8.len
java-genomics-toolkit/resources/assemblies/._ce9.len
java-genomics-toolkit/resources/assemblies/._dm1.len
java-genomics-toolkit/resources/assemblies/._dm2.len
java-genomics-toolkit/resources/assemblies/._dm3.len
java-genomics-toolkit/resources/assemblies/._hg15.len
java-genomics-toolkit/resources/assemblies/._hg16.len
java-genomics-toolkit/resources/assemblies/._hg17.len
java-genomics-toolkit/resources/assemblies/._hg18.len
java-genomics-toolkit/resources/assemblies/._hg19.len
java-genomics-toolkit/resources/assemblies/._hg19Haps.len
java-genomics-toolkit/resources/assemblies/._hg19Patch2.len
java-genomics-toolkit/resources/assemblies/._klac.len
java-genomics-toolkit/resources/assemblies/._kwal.len
java-genomics-toolkit/resources/assemblies/._sacCer1.len
java-genomics-toolkit/resources/assemblies/._sacCer2.len
java-genomics-toolkit/resources/assemblies/._sacCer3.len
java-genomics-toolkit/resources/assemblies/ce2.len
java-genomics-toolkit/resources/assemblies/ce3.len
java-genomics-toolkit/resources/assemblies/ce4.len
java-genomics-toolkit/resources/assemblies/ce5.len
java-genomics-toolkit/resources/assemblies/ce6.len
java-genomics-toolkit/resources/assemblies/ce7.len
java-genomics-toolkit/resources/assemblies/ce8.len
java-genomics-toolkit/resources/assemblies/ce9.len
java-genomics-toolkit/resources/assemblies/dm1.len
java-genomics-toolkit/resources/assemblies/dm2.len
java-genomics-toolkit/resources/assemblies/dm3.len
java-genomics-toolkit/resources/assemblies/hg15.len
java-genomics-toolkit/resources/assemblies/hg16.len
java-genomics-toolkit/resources/assemblies/hg17.len
java-genomics-toolkit/resources/assemblies/hg18.len
java-genomics-toolkit/resources/assemblies/hg19.len
java-genomics-toolkit/resources/assemblies/hg19Haps.len
java-genomics-toolkit/resources/assemblies/hg19Patch2.len
java-genomics-toolkit/resources/assemblies/klac.len
java-genomics-toolkit/resources/assemblies/kwal.len
java-genomics-toolkit/resources/assemblies/sacCer1.len
java-genomics-toolkit/resources/assemblies/sacCer2.len
java-genomics-toolkit/resources/assemblies/sacCer3.len
java-genomics-toolkit/resources/images/._add_icon.png
java-genomics-toolkit/resources/images/._add_icon_dark.png
java-genomics-toolkit/resources/images/._arrow-circle.png
java-genomics-toolkit/resources/images/._beachball.png
java-genomics-toolkit/resources/images/._bug.png
java-genomics-toolkit/resources/images/._delete_icon_dark.png
java-genomics-toolkit/resources/images/._delete_icon_grey.png
java-genomics-toolkit/resources/images/._eye_icon.png
java-genomics-toolkit/resources/images/._eye_icon_dark.png
java-genomics-toolkit/resources/images/._eye_icon_grey.png
java-genomics-toolkit/resources/images/._folder.png
java-genomics-toolkit/resources/images/._folder_page.png
java-genomics-toolkit/resources/images/._icon_error_sml.gif
java-genomics-toolkit/resources/images/._icon_info_sml.gif
java-genomics-toolkit/resources/images/._icon_success_sml.gif
java-genomics-toolkit/resources/images/._icon_warning_sml.gif
java-genomics-toolkit/resources/images/._information-white.png
java-genomics-toolkit/resources/images/._mag_glass.png
java-genomics-toolkit/resources/images/._osx-spinner.gif
java-genomics-toolkit/resources/images/._pencil_icon.png
java-genomics-toolkit/resources/images/._pencil_icon_dark.png
java-genomics-toolkit/resources/images/._pencil_icon_grey.png
java-genomics-toolkit/resources/images/._sticky-note-text.png
java-genomics-toolkit/resources/images/add_icon.png
java-genomics-toolkit/resources/images/add_icon_dark.png
java-genomics-toolkit/resources/images/arrow-circle.png
java-genomics-toolkit/resources/images/beachball.png
java-genomics-toolkit/resources/images/bug.png
java-genomics-toolkit/resources/images/delete_icon_dark.png
java-genomics-toolkit/resources/images/delete_icon_grey.png
java-genomics-toolkit/resources/images/eye_icon.png
java-genomics-toolkit/resources/images/eye_icon_dark.png
java-genomics-toolkit/resources/images/eye_icon_grey.png
java-genomics-toolkit/resources/images/folder.png
java-genomics-toolkit/resources/images/folder_page.png
java-genomics-toolkit/resources/images/icon_error_sml.gif
java-genomics-toolkit/resources/images/icon_info_sml.gif
java-genomics-toolkit/resources/images/icon_success_sml.gif
java-genomics-toolkit/resources/images/icon_warning_sml.gif
java-genomics-toolkit/resources/images/information-white.png
java-genomics-toolkit/resources/images/mag_glass.png
java-genomics-toolkit/resources/images/osx-spinner.gif
java-genomics-toolkit/resources/images/pencil_icon.png
java-genomics-toolkit/resources/images/pencil_icon_dark.png
java-genomics-toolkit/resources/images/pencil_icon_grey.png
java-genomics-toolkit/resources/images/sticky-note-text.png
java-genomics-toolkit/resources/toolConf.xml
java-genomics-toolkit/src/._edu
java-genomics-toolkit/src/edu/._unc
java-genomics-toolkit/src/edu/unc/._config
java-genomics-toolkit/src/edu/unc/._genomics
java-genomics-toolkit/src/edu/unc/._utils
java-genomics-toolkit/src/edu/unc/config/._GalaxyConfig.java
java-genomics-toolkit/src/edu/unc/config/GalaxyConfig.java
java-genomics-toolkit/src/edu/unc/genomics/._AssemblyConverter.java
java-genomics-toolkit/src/edu/unc/genomics/._AssemblyFactory.java
java-genomics-toolkit/src/edu/unc/genomics/._CommandLineTool.java
java-genomics-toolkit/src/edu/unc/genomics/._CommandLineToolException.java
java-genomics-toolkit/src/edu/unc/genomics/._IntervalFileConverter.java
java-genomics-toolkit/src/edu/unc/genomics/._IntervalFileFactory.java
java-genomics-toolkit/src/edu/unc/genomics/._PathConverter.java
java-genomics-toolkit/src/edu/unc/genomics/._PathFactory.java
java-genomics-toolkit/src/edu/unc/genomics/._PositiveIntegerValidator.java
java-genomics-toolkit/src/edu/unc/genomics/._ReadablePathValidator.java
java-genomics-toolkit/src/edu/unc/genomics/._WigFileConverter.java
java-genomics-toolkit/src/edu/unc/genomics/._WigFileFactory.java
java-genomics-toolkit/src/edu/unc/genomics/._converters
java-genomics-toolkit/src/edu/unc/genomics/._ngs
java-genomics-toolkit/src/edu/unc/genomics/._nucleosomes
java-genomics-toolkit/src/edu/unc/genomics/._visualization
java-genomics-toolkit/src/edu/unc/genomics/._wigmath
java-genomics-toolkit/src/edu/unc/genomics/AssemblyConverter.java
java-genomics-toolkit/src/edu/unc/genomics/AssemblyFactory.java
java-genomics-toolkit/src/edu/unc/genomics/CommandLineTool.java
java-genomics-toolkit/src/edu/unc/genomics/CommandLineToolException.java
java-genomics-toolkit/src/edu/unc/genomics/IntervalFileConverter.java
java-genomics-toolkit/src/edu/unc/genomics/IntervalFileFactory.java
java-genomics-toolkit/src/edu/unc/genomics/PathConverter.java
java-genomics-toolkit/src/edu/unc/genomics/PathFactory.java
java-genomics-toolkit/src/edu/unc/genomics/PositiveIntegerValidator.java
java-genomics-toolkit/src/edu/unc/genomics/ReadablePathValidator.java
java-genomics-toolkit/src/edu/unc/genomics/WigFileConverter.java
java-genomics-toolkit/src/edu/unc/genomics/WigFileFactory.java
java-genomics-toolkit/src/edu/unc/genomics/converters/._IntervalToWig.java
java-genomics-toolkit/src/edu/unc/genomics/converters/._RomanNumeralize.java
java-genomics-toolkit/src/edu/unc/genomics/converters/IntervalToWig.java
java-genomics-toolkit/src/edu/unc/genomics/converters/RomanNumeralize.java
java-genomics-toolkit/src/edu/unc/genomics/ngs/._Autocorrelation.java
java-genomics-toolkit/src/edu/unc/genomics/ngs/._BaseAlignCounts.java
java-genomics-toolkit/src/edu/unc/genomics/ngs/._FindAbsoluteMaxima.java
java-genomics-toolkit/src/edu/unc/genomics/ngs/._IntervalLengthDistribution.java
java-genomics-toolkit/src/edu/unc/genomics/ngs/._IntervalStats.java
java-genomics-toolkit/src/edu/unc/genomics/ngs/._PowerSpectrum.java
java-genomics-toolkit/src/edu/unc/genomics/ngs/._RollingReadLength.java
java-genomics-toolkit/src/edu/unc/genomics/ngs/Autocorrelation.java
java-genomics-toolkit/src/edu/unc/genomics/ngs/BaseAlignCounts.java
java-genomics-toolkit/src/edu/unc/genomics/ngs/FindAbsoluteMaxima.java
java-genomics-toolkit/src/edu/unc/genomics/ngs/IntervalLengthDistribution.java
java-genomics-toolkit/src/edu/unc/genomics/ngs/IntervalStats.java
java-genomics-toolkit/src/edu/unc/genomics/ngs/PowerSpectrum.java
java-genomics-toolkit/src/edu/unc/genomics/ngs/RollingReadLength.java
java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/._FindBoundaryNucleosomes.java
java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/._GreedyCaller.java
java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/._MapDyads.java
java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/._NRLCalculator.java
java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/._NucleosomeCall.java
java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/._NucleosomeCallsFile.java
java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/._Phasogram.java
java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/FindBoundaryNucleosomes.java
java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/GreedyCaller.java
java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/MapDyads.java
java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/NRLCalculator.java
java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/NucleosomeCall.java
java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/NucleosomeCallsFile.java
java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/Phasogram.java
java-genomics-toolkit/src/edu/unc/genomics/visualization/._IntervalAverager.java
java-genomics-toolkit/src/edu/unc/genomics/visualization/._KMeans.java
java-genomics-toolkit/src/edu/unc/genomics/visualization/._KMeansRow.java
java-genomics-toolkit/src/edu/unc/genomics/visualization/._MatrixAligner.java
java-genomics-toolkit/src/edu/unc/genomics/visualization/._StripMatrix.java
java-genomics-toolkit/src/edu/unc/genomics/visualization/IntervalAverager.java
java-genomics-toolkit/src/edu/unc/genomics/visualization/KMeans.java
java-genomics-toolkit/src/edu/unc/genomics/visualization/KMeansRow.java
java-genomics-toolkit/src/edu/unc/genomics/visualization/MatrixAligner.java
java-genomics-toolkit/src/edu/unc/genomics/visualization/StripMatrix.java
java-genomics-toolkit/src/edu/unc/genomics/wigmath/._Add.java
java-genomics-toolkit/src/edu/unc/genomics/wigmath/._Average.java
java-genomics-toolkit/src/edu/unc/genomics/wigmath/._Divide.java
java-genomics-toolkit/src/edu/unc/genomics/wigmath/._GaussianSmooth.java
java-genomics-toolkit/src/edu/unc/genomics/wigmath/._LogTransform.java
java-genomics-toolkit/src/edu/unc/genomics/wigmath/._MovingAverageSmooth.java
java-genomics-toolkit/src/edu/unc/genomics/wigmath/._Multiply.java
java-genomics-toolkit/src/edu/unc/genomics/wigmath/._Scale.java
java-genomics-toolkit/src/edu/unc/genomics/wigmath/._Subtract.java
java-genomics-toolkit/src/edu/unc/genomics/wigmath/._WigMathTool.java
java-genomics-toolkit/src/edu/unc/genomics/wigmath/._WigSummary.java
java-genomics-toolkit/src/edu/unc/genomics/wigmath/._ZScore.java
java-genomics-toolkit/src/edu/unc/genomics/wigmath/Add.java
java-genomics-toolkit/src/edu/unc/genomics/wigmath/Average.java
java-genomics-toolkit/src/edu/unc/genomics/wigmath/Divide.java
java-genomics-toolkit/src/edu/unc/genomics/wigmath/GaussianSmooth.java
java-genomics-toolkit/src/edu/unc/genomics/wigmath/LogTransform.java
java-genomics-toolkit/src/edu/unc/genomics/wigmath/MovingAverageSmooth.java
java-genomics-toolkit/src/edu/unc/genomics/wigmath/Multiply.java
java-genomics-toolkit/src/edu/unc/genomics/wigmath/Scale.java
java-genomics-toolkit/src/edu/unc/genomics/wigmath/Subtract.java
java-genomics-toolkit/src/edu/unc/genomics/wigmath/WigMathTool.java
java-genomics-toolkit/src/edu/unc/genomics/wigmath/WigSummary.java
java-genomics-toolkit/src/edu/unc/genomics/wigmath/ZScore.java
java-genomics-toolkit/src/edu/unc/utils/._RomanNumeral.java
java-genomics-toolkit/src/edu/unc/utils/._SortUtils.java
java-genomics-toolkit/src/edu/unc/utils/RomanNumeral.java
java-genomics-toolkit/src/edu/unc/utils/SortUtils.java
java-genomics-toolkit/stubFile.sh
java-genomics-toolkit/toolRunner.sh
b
diff -r 000000000000 -r 1daf3026d231 ._java-genomics-toolkit
b
Binary file ._java-genomics-toolkit has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/._.classpath
b
Binary file java-genomics-toolkit/._.classpath has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/._.gitignore
b
Binary file java-genomics-toolkit/._.gitignore has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/._.project
b
Binary file java-genomics-toolkit/._.project has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/._META-INF
b
Binary file java-genomics-toolkit/._META-INF has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/._README.rdoc
b
Binary file java-genomics-toolkit/._README.rdoc has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/._build.properties
b
Binary file java-genomics-toolkit/._build.properties has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/._build.xml
b
Binary file java-genomics-toolkit/._build.xml has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/._galaxy-conf
b
Binary file java-genomics-toolkit/._galaxy-conf has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/._galaxyToolConf.xml
b
Binary file java-genomics-toolkit/._galaxyToolConf.xml has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/._gui
b
Binary file java-genomics-toolkit/._gui has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/._launch4j.xml
b
Binary file java-genomics-toolkit/._launch4j.xml has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/._lib
b
Binary file java-genomics-toolkit/._lib has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/._log4j.properties
b
Binary file java-genomics-toolkit/._log4j.properties has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/._resources
b
Binary file java-genomics-toolkit/._resources has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/._src
b
Binary file java-genomics-toolkit/._src has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/._stubFile.sh
b
Binary file java-genomics-toolkit/._stubFile.sh has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/._toolRunner.sh
b
Binary file java-genomics-toolkit/._toolRunner.sh has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/.classpath
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/.classpath Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="gui"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="lib" path="lib/jcommander-1.20.jar" sourcepath="/jcommander/src"/>
+ <classpathentry kind="lib" path="lib/jtransforms-2.4.jar"/>
+ <classpathentry kind="lib" path="lib/log4j-1.2.15.jar"/>
+ <classpathentry kind="lib" path="lib/BigWig.jar"/>
+ <classpathentry kind="lib" path="lib/commons-math-2.2.jar"/>
+ <classpathentry kind="lib" path="lib/commons-lang3-3.1.jar"/>
+ <classpathentry kind="lib" path="lib/sam-1.56.jar"/>
+ <classpathentry kind="lib" path="lib/macify-1.4.jar" sourcepath="/macify/src"/>
+ <classpathentry combineaccessrules="false" kind="src" path="/java-genomics-io"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/.gitignore
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/.gitignore Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,6 @@
+bin
+build
+dist
+*.class
+*.log
+.DS_Store
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/.project
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/.project Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>java-genomics-toolkit</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/META-INF/._MANIFEST.MF
b
Binary file java-genomics-toolkit/META-INF/._MANIFEST.MF has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/META-INF/MANIFEST.MF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/META-INF/MANIFEST.MF Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,9 @@
+Manifest-Version: 1.0
+Main-Class: edu.unc.genomics.GenomicsToolkit
+Bundle-ManifestVersion: 2
+Bundle-Name: java-genomics-toolkit
+Bundle-SymbolicName: java-genomics-toolkit
+Bundle-Version: 1.0.0
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-Description: This project provides tools for common genomic data processing.
+Bundle-DocURL: http://github.com/timpalpant/java-genomics-toolkit
\ No newline at end of file
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/README.rdoc
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/README.rdoc Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,43 @@
+= Java Genomics Toolkit
+
+This is a collection of applications for genomics data processing, primarily high-throughput next-generation sequencing. There is a particular focus on processing data in Wiggle format, since many other tools already cover SAM, BAM, FastQ, etc. However, Wiggle/BigWig formats provide a compact way to store numerical data resulting from ChIP-seq and MNase-seq experiments. Common computations provided in this toolkit include adding, subtracting, dividing, multiplying, log-transforming, averaging, Z-scoring, and Gaussian smoothing Wig files.
+
+Tools may be run from the command-line, a simple Swing GUI, or from Galaxy (http://getgalaxy.org).
+
+== Loading the Tools into Galaxy
+
+TODO
+
+== Using the ToolRunner GUI
+
+TODO
+
+== Command-Line Usage
+
+Applications can be run on the command-line, and the toolRunner.sh script is provided for convenience. Calling any script without arguments will display the help, as well as the missing mandatory arguments:
+
+  $ > ./toolRunner.sh wigmath.AddWig
+  $ Usage: <main class> [options] Input files
+  $   Options:
+  $   * -o, --output   Output file
+
+Mandatory arguments are denoted with a (*).
+
+Other tools require more input:
+
+  $ > ./toolRunner.sh ngs.Autocorrelation
+  $ Usage: <main class> [options]
+  $   Options:
+  $   * -i, --input    Input file
+  $   * -l, --loci     Genomic loci (Bed format)
+  $   -m, --max        Autocorrelation limit (bp)
+  $                    Default: 200
+  $   * -o, --output   Output file
+
+=== Log transform a Wig file with base 2
+
+  $ > ./toolRunner.sh wigmath.LogTransform --input input.wig --base 2 --output output.log2.wig
+
+== Java Genomics IO
+
+Those wishing to write their own scripts may be interested in https://github.com/timpalpant/java-genomics-io, the toolkit upon which these applications are built.
\ No newline at end of file
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/build.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/build.xml Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<project name="java-genomics-toolkit" default="jar" basedir=".">
+  <description>
+    build the toolkit
+  </description>
+  
+  <!-- set global properties for this build -->
+  <property name="version" value="1.1.0"/>
+  <property name="buildnumber" value="1"/>
+  <property name="copyright" value="Copyright &#xa9; 2011 Timothy Palpant"/>
+  
+  <!-- directory variables -->
+  <property name="src" location="src"/>
+  <property name="test" location="test"/>
+  <property name="gui" location="gui"/>
+  <property name="build" location="build"/>
+  <property name="dist" location="dist"/>
+  <property name="lib" location="lib"/>
+
+  <!-- compile all Java code -->
+  <target name="compile" description="compile the scripts">
+    <!-- Create the build directory structure used by compile -->
+    <mkdir dir="${build}"/>
+    
+    <!-- Compile the java code from ${src} into ${build} -->
+    <javac srcdir="${src}" destdir="${build}" source="1.7" target="1.7">
+   <classpath>
+     <path id="lib.path.ref">
+       <fileset dir="lib" includes="*.jar"/>
+     </path>
+   </classpath>
+    </javac>
+    
+    <!-- Compile the java code from ${gui} into ${build} -->
+    <javac srcdir="${gui}" destdir="${build}" source="1.7" target="1.7">
+      <classpath>
+       <path id="lib.path.ref">
+         <fileset dir="lib" includes="*.jar"/>
+       </path>
+     </classpath>
+ </javac>
+  </target>
+
+  <!-- package all Java code into a JAR file -->
+  <target name="jar" depends="compile" description="generate the jarfile">
+    <!-- Create the distribution directory -->
+    <mkdir dir="${dist}"/>
+
+    <!-- Put everything in ${build} into the jar file -->
+    <jar jarfile="${dist}/${ant.project.name}.jar" manifest="META-INF/MANIFEST.MF">
+      <fileset dir="${build}" />
+    </jar>
+  </target>
+
+  <!-- Package the jar file into a Mac OS X application with jarbundler -->
+  <target name="package-osx" depends="jar" description="Build the application for OS X">
+    <taskdef name="jarbundler"
+             classpath="${lib}/jarbundler-2.2.0.jar" 
+             classname="net.sourceforge.jarbundler.JarBundler"/>
+
+    <jarbundler dir="${dist}" verbose="false" showPlist="false"
+                name="Genomics Toolkit"
+                mainclass="edu.unc.genomics.ToolRunner"
+       jvmversion="1.7+"
+       stubfile="stubFile.sh"
+                version="${version}"
+                infostring="${ant.project.name}, ${copyright}"
+                build="${buildnumber}"
+                bundleid="edu.unc.genomics.GenomicsToolkit">
+      
+        <jarfilelist dir="${dist}" files="${ant.project.name}.jar"/>
+        <jarfileset dir="${lib}">
+          <include name="*.jar" />
+          <exclude name="launch4j.jar" />
+          <exclude name="xstream.jar" />
+          <exclude name="jarbundler-2.2.0.jar" />
+        </jarfileset>
+
+     <!-- Adjust the look, feel and behavior -->
+     <javaproperty name="apple.laf.useScreenMenuBar" value="true"/>
+     <javaproperty name="apple.awt.brushMetal" value="true"/>
+     <javaproperty name="apple.awt.showGrowBox" value="false"/>
+       <javaproperty name="apple.awt.textantialiasing" value="true"/>
+        <javaproperty name="apple.awt.antialiasing" value="true"/>
+
+     <!-- Associate document types with this application -->
+     <documenttype name="Assembly files"
+          extensions="len" 
+                   role="Viewer" />
+
+     <!-- Include resource files -->                
+     <resourcefilelist dir="." files="README.rdoc"/>
+        <resourcefilelist dir="." files="toolConf.xml"/>
+     <resourcefileset dir="." includes="resources/assemblies/*.len"/>
+        <javafilelist dir="." files="log4j.properties"/>
+    </jarbundler>
+  </target>
+  
+  <!-- Package the jar file into a Windows application with launch4j -->
+  <target name="package-win" depends="jar" description="Build the application for Windows">
+    <taskdef name="launch4j"
+        classname="net.sf.launch4j.ant.Launch4jTask"
+        classpath="${lib}/launch4j.jar:${lib}/xstream.jar" />
+    
+    <launch4j configFile="launch4j.xml" />
+  </target>
+
+  <target name="clean" description="clean up" >
+    <delete dir="${build}"/>
+    <delete dir="${dist}"/>
+  </target>
+</project>
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/galaxy-conf/._BaseAlignCounts.xml
b
Binary file java-genomics-toolkit/galaxy-conf/._BaseAlignCounts.xml has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/galaxy-conf/._galaxyToolRunner.sh
b
Binary file java-genomics-toolkit/galaxy-conf/._galaxyToolRunner.sh has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/galaxy-conf/BaseAlignCounts.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/galaxy-conf/BaseAlignCounts.xml Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,21 @@
+<tool id="BaseAlignCounts" name="Map coverage" version="1.0.0">
+  <description>of sequencing reads</description>
+  <command>galaxyToolRunner.sh -i $input -g $dbkey -x $X -p 4 -o $output</command>
+  <inputs>
+    <param name="input" type="data" format="bam,sam,bed,bedgraph" label="Sequencing reads" />
+    <param name="X" type="integer" value="0" label="In silico extension (leave 0 for read length)" />
+  </inputs>
+  <outputs>
+    <data name="output" format="wig" />
+  </outputs>
+  
+  <help>
+    .. class:: warningmark
+    
+    This tool requires sequencing reads in SAM/BAM/Bed/BedGraph format.
+    
+    .. class:: warningmark
+    
+    This tool was contributed by Timothy Palpant.
+  </help>
+</tool>
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/galaxy-conf/galaxyToolRunner.sh
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/galaxy-conf/galaxyToolRunner.sh Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,14 @@
+#!/usr/bin/env bash
+
+if [ $# -eq 0 ]
+then
+  echo "USAGE: galaxyToolRunner.sh APPNAME [ARGS]";
+  exit;
+fi
+
+if [ "$1" = "list" ]
+then
+  find src/edu/unc/genomics/**/*.java -exec basename -s .java {} \;
+fi
+
+java -Dlog4j.configuration=log4j.properties -cp .:../build:../lib/* edu.unc.genomics."$@"
\ No newline at end of file
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/galaxyToolConf.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/galaxyToolConf.xml Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,41 @@
+<!-- Add to galaxy/tool_conf.xml within the <toolbox></toolbox> section -->
+  <label name="Java Genomics Toolkit" />
+  <section name="Converters" id="java-genomics-toolkit-converters">
+   <tool file="java-genomics-toolkit/galaxy-conf/IntervalToWig.xml" />
+    <tool file="java-genomics-toolkit/galaxy-conf/RomanNumeralize.xml" />
+  </section>
+  <section name="Nucleosomes" id="java-genomics-toolkit-nucleosomes">
+    <tool file="java-genomics-toolkit/galaxy-conf/FindBoundaryNucleosomes.xml" />
+    <tool file="java-genomics-toolkit/galaxy-conf/GreedyCaller.xml" />
+    <tool file="java-genomics-toolkit/galaxy-conf/MapDyads.xml" />
+    <tool file="java-genomics-toolkit/galaxy-conf/NRLCalculator.xml" />
+    <tool file="java-genomics-toolkit/galaxy-conf/Phasogram.xml" />
+  </section>
+  <section name="NGS" id="java-genomics-toolkit-ngs">
+    <tool file="java-genomics-toolkit/other-tools/Autocorrelation.xml" />
+    <tool file="java-genomics-toolkit/galaxy-conf/BaseAlignCounts.xml" />
+    <tool file="java-genomics-toolkit/galaxy-conf/FindAbsoluteMaxima.xml" />
+    <tool file="java-genomics-toolkit/galaxy-conf/IntervalLengthDistribution.xml" />
+    <tool file="java-genomics-toolkit/galaxy-conf/IntervalStats.xml" />
+    <tool file="java-genomics-toolkit/galaxy-conf/PowerSpectrum.xml" />
+    <tool file="java-genomics-toolkit/galaxy-conf/RollingReadLength.xml" />
+  </section>
+  <section name="WigMath" id="java-genomics-toolkit-wigmath">
+    <tool file="java-genomics-toolkit/galaxy-conf/Add.xml" />
+    <tool file="java-genomics-toolkit/galaxy-conf/Average.xml" />
+    <tool file="java-genomics-toolkit/galaxy-conf/Divide.xml" />
+    <tool file="java-genomics-toolkit/galaxy-conf/GaussianSmooth.xml" />
+    <tool file="java-genomics-toolkit/galaxy-conf/LogTransform.xml" />
+    <tool file="java-genomics-toolkit/galaxy-conf/MovingAverageSmooth.xml" />
+    <tool file="java-genomics-toolkit/galaxy-conf/Multiply.xml" />
+    <tool file="java-genomics-toolkit/galaxy-conf/Scale.xml" />
+    <tool file="java-genomics-toolkit/galaxy-conf/Subtract.xml" />
+    <tool file="java-genomics-toolkit/galaxy-conf/WigSummary.xml" />
+    <tool file="java-genomics-toolkit/galaxy-conf/ZScore.xml" />
+  </section>
+  <section name="Visualization" id="java-genomics-toolkit-visualization">
+    <tool file="java-genomics-toolkit/galaxy-conf/IntervalAverager.xml" />
+    <tool file="java-genomics-toolkit/galaxy-conf/KMeans.xml" />
+    <tool file="java-genomics-toolkit/galaxy-conf/MatrixAligner.xml" />
+    <tool file="java-genomics-toolkit/galaxy-conf/StripMatrix.xml" />
+  </section>
\ No newline at end of file
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/._edu
b
Binary file java-genomics-toolkit/gui/._edu has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/._javax
b
Binary file java-genomics-toolkit/gui/._javax has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/._unc
b
Binary file java-genomics-toolkit/gui/edu/._unc has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/._genomics
b
Binary file java-genomics-toolkit/gui/edu/unc/._genomics has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/._AssemblyManager.java
b
Binary file java-genomics-toolkit/gui/edu/unc/genomics/._AssemblyManager.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/._AssemblyManagerDialog.java
b
Binary file java-genomics-toolkit/gui/edu/unc/genomics/._AssemblyManagerDialog.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/._AssemblyTableModel.java
b
Binary file java-genomics-toolkit/gui/edu/unc/genomics/._AssemblyTableModel.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/._ButtonLabel.java
b
Binary file java-genomics-toolkit/gui/edu/unc/genomics/._ButtonLabel.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/._Job.java
b
Binary file java-genomics-toolkit/gui/edu/unc/genomics/._Job.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/._JobConfigPanel.java
b
Binary file java-genomics-toolkit/gui/edu/unc/genomics/._JobConfigPanel.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/._JobException.java
b
Binary file java-genomics-toolkit/gui/edu/unc/genomics/._JobException.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/._JobQueue.java
b
Binary file java-genomics-toolkit/gui/edu/unc/genomics/._JobQueue.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/._JobQueueCellRenderer.java
b
Binary file java-genomics-toolkit/gui/edu/unc/genomics/._JobQueueCellRenderer.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/._JobQueueManager.java
b
Binary file java-genomics-toolkit/gui/edu/unc/genomics/._JobQueueManager.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/._ResourceManager.java
b
Binary file java-genomics-toolkit/gui/edu/unc/genomics/._ResourceManager.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/._SubmittedJob.java
b
Binary file java-genomics-toolkit/gui/edu/unc/genomics/._SubmittedJob.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/._ThreadFilter.java
b
Binary file java-genomics-toolkit/gui/edu/unc/genomics/._ThreadFilter.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/._ToolRunner.java
b
Binary file java-genomics-toolkit/gui/edu/unc/genomics/._ToolRunner.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/._ToolRunnerFrame.java
b
Binary file java-genomics-toolkit/gui/edu/unc/genomics/._ToolRunnerFrame.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/._ToolsTree.java
b
Binary file java-genomics-toolkit/gui/edu/unc/genomics/._ToolsTree.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/._ToolsTreeModel.java
b
Binary file java-genomics-toolkit/gui/edu/unc/genomics/._ToolsTreeModel.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/._ToolsTreeNode.java
b
Binary file java-genomics-toolkit/gui/edu/unc/genomics/._ToolsTreeNode.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/AssemblyManager.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/gui/edu/unc/genomics/AssemblyManager.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,83 @@
+package edu.unc.genomics;
+
+import java.io.IOException;
+import java.nio.file.DirectoryStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.zip.DataFormatException;
+
+import org.apache.log4j.Logger;
+
+/**
+ * Suite of static methods for managing the built-in assemblies in the resources dir
+ * as well as keeping track of the last used assembly
+ * 
+ * @author timpalpant
+ *
+ */
+public class AssemblyManager {
+
+ private static final Logger log = Logger.getLogger(AssemblyManager.class);
+
+ /**
+  * The last used Assembly
+  */
+ private static Assembly lastUsed;
+
+ /**
+  * Returns all available assemblies in the resources directory
+  * @return the assemblies available in the resources directory
+  */
+ public static List<Assembly> getAvailableAssemblies() {
+ List<Assembly> assemblies = new ArrayList<>();
+
+ try (DirectoryStream<Path> stream = Files.newDirectoryStream(ResourceManager.getAssembliesDirectory(), "*.{len}")) {
+      for (Path entry : stream) {
+       log.debug("Loading assembly: " + entry);
+ try {
+ Assembly a = new Assembly(entry);
+ assemblies.add(a);
+ } catch (IOException | DataFormatException e1) { 
+ log.warn("Error loading assembly: " + entry);
+ }
+      }
+ } catch (IOException e) {
+ log.error("Error listing assemblies");
+ e.printStackTrace();
+ }
+
+ return assemblies;
+ }
+
+ public static void deleteAssembly(Assembly a) throws IOException {
+ Files.deleteIfExists(a.getPath());
+ }
+
+ public static Assembly loadCustomAssembly(Path assemblyFile) throws IOException, DataFormatException {
+ log.debug("Loading custom assembly from file: " + assemblyFile);
+ Assembly a = new Assembly(assemblyFile);
+
+ // TODO: Warn if this assembly is already loaded
+
+ // Copy the assembly file into the built-in assemblies directory
+ Files.copy(assemblyFile, ResourceManager.getAssembliesDirectory().resolve(assemblyFile.getFileName()));
+ return a;
+ }
+
+ /**
+  * @return the lastUsed
+  */
+ public static Assembly getLastUsed() {
+ return lastUsed;
+ }
+
+ /**
+  * @param lastUsed the lastUsed to set
+  */
+ public static void setLastUsed(Assembly lastUsed) {
+ AssemblyManager.lastUsed = lastUsed;
+ }
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/AssemblyManagerDialog.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/gui/edu/unc/genomics/AssemblyManagerDialog.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,135 @@
+package edu.unc.genomics;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JFileChooser;
+import javax.swing.JFrame;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.border.EmptyBorder;
+
+import org.apache.log4j.Logger;
+
+import java.awt.event.ActionListener;
+import java.awt.event.ActionEvent;
+import java.io.IOException;
+import java.nio.file.Path;
+import java.util.zip.DataFormatException;
+
+/**
+ * View for AssemblyManager
+ * 
+ * @author timpalpant
+ *
+ */
+public class AssemblyManagerDialog extends JDialog {
+
+ public static final int DEFAULT_WIDTH = 400;
+ public static final int DEFAULT_HEIGHT = 500;
+
+ private static final long serialVersionUID = -1461628562713621064L;
+ private static final Logger log = Logger.getLogger(AssemblyManagerDialog.class);
+
+ private final JPanel contentPanel = new JPanel();
+ private final JFileChooser fcCustomAssembly = new JFileChooser();
+ private final JTable assembliesTable = new JTable();
+
+ private AssemblyTableModel model;
+
+ /**
+  * Create the dialog.
+  */
+ public AssemblyManagerDialog(JFrame parent) {
+ super(parent, "Assembly Manager", true);
+
+ setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
+ int centeredX = parent.getX() + (parent.getWidth()-getWidth()) / 2;
+ int centeredY = parent.getY() + (parent.getHeight()-getHeight()) / 2;
+ setLocation(centeredX, centeredY);
+
+ getContentPane().setLayout(new BorderLayout());
+ contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
+ getContentPane().add(contentPanel, BorderLayout.CENTER);
+ contentPanel.setLayout(new BorderLayout(0, 0));
+
+ // Initialize the assemblies list
+ model = new AssemblyTableModel(AssemblyManager.getAvailableAssemblies());
+ assembliesTable.setModel(model);
+ assembliesTable.setRowSelectionAllowed(true);
+ JScrollPane scrollPane = new JScrollPane(assembliesTable);
+ assembliesTable.setFillsViewportHeight(true);
+ contentPanel.add(scrollPane);
+
+ JPanel buttonPane = new JPanel();
+ buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
+ getContentPane().add(buttonPane, BorderLayout.SOUTH);
+
+ JButton removeAssemblyButton = new JButton("Remove");
+ removeAssemblyButton.setActionCommand("RemoveAssembly");
+ removeAssemblyButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ removeCustomAssembly();
+ }
+ });
+ buttonPane.add(removeAssemblyButton);
+
+ JButton loadAssemblyButton = new JButton("Load Custom Assembly");
+ loadAssemblyButton.setActionCommand("LoadAssembly");
+ loadAssemblyButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ loadCustomAssembly();
+ }
+ });
+ buttonPane.add(loadAssemblyButton);
+
+ JButton doneButton = new JButton("Done");
+ doneButton.setActionCommand("Done");
+ doneButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ closeDialog();
+ }
+ });
+ buttonPane.add(doneButton);
+ getRootPane().setDefaultButton(doneButton);
+ }
+
+ private void removeCustomAssembly() {
+ for (int row : assembliesTable.getSelectedRows()) {
+ try {
+ Assembly a = model.getRow(row);
+ AssemblyManager.deleteAssembly(a);
+ model.removeRow(row);
+ } catch (IOException e) {
+ log.error("Error deleting Assembly");
+ e.printStackTrace();
+ JOptionPane.showMessageDialog(this, "Error deleting assembly", "Assembly Manager Error", JOptionPane.ERROR_MESSAGE);
+ }
+ }
+ }
+
+ private void loadCustomAssembly() {
+ int returnVal = fcCustomAssembly.showOpenDialog(this);
+ if (returnVal == JFileChooser.APPROVE_OPTION) {
+ Path assemblyFile = fcCustomAssembly.getSelectedFile().toPath();
+ try {
+ Assembly a = AssemblyManager.loadCustomAssembly(assemblyFile);
+ // Add it to the assemblies list model
+ model.addAssembly(a);
+ } catch (IOException | DataFormatException e) {
+ log.error("Error loading custom assembly: " + assemblyFile);
+ e.printStackTrace();
+ JOptionPane.showMessageDialog(this, "Error loading custom assembly", "Assembly Manager Error", JOptionPane.ERROR_MESSAGE);
+ }
+ }
+ }
+
+ private void closeDialog() {
+ this.dispose();
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/AssemblyTableModel.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/gui/edu/unc/genomics/AssemblyTableModel.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,97 @@
+package edu.unc.genomics;
+
+import java.util.List;
+
+import javax.swing.table.AbstractTableModel;
+
+/**
+ * Model for the AssemblyManagerDialog table view
+ * 
+ * @author timpalpant
+ *
+ */
+public class AssemblyTableModel extends AbstractTableModel {
+
+ private static final long serialVersionUID = 8225453782461913732L;
+
+ private static final String[] COLUMN_NAMES = { "Name", "# Contigs" };
+
+ private final List<Assembly> assemblies;
+
+ public AssemblyTableModel(List<Assembly> assemblies) {
+ this.assemblies = assemblies;
+ }
+
+ /* (non-Javadoc)
+  * @see javax.swing.table.AbstractTableModel#getColumnName(int)
+  */
+ @Override
+ public String getColumnName(int col) {
+    return COLUMN_NAMES[col];
+ }
+
+ /* (non-Javadoc)
+  * @see javax.swing.table.AbstractTableModel#isCellEditable(int, int)
+  */
+ @Override
+ public boolean isCellEditable(int row, int col) { 
+ return false; 
+ }
+
+ /* (non-Javadoc)
+  * @see javax.swing.table.TableModel#getRowCount()
+  */
+ @Override
+ public int getRowCount() {
+ return assemblies.size();
+ }
+
+ /* (non-Javadoc)
+  * @see javax.swing.table.TableModel#getColumnCount()
+  */
+ @Override
+ public int getColumnCount() {
+ return 2;
+ }
+
+ /* (non-Javadoc)
+  * @see javax.swing.table.TableModel#getValueAt(int, int)
+  */
+ @Override
+ public Object getValueAt(int rowIndex, int columnIndex) {
+ Assembly a = assemblies.get(rowIndex);
+ if (columnIndex == 0) {
+ return a.toString();
+ } else if (columnIndex == 1) {
+ return a.chromosomes().size();
+ } else {
+ return null;
+ }
+ }
+
+ public Assembly getRow(int rowIndex) {
+ return assemblies.get(rowIndex);
+ }
+
+ public boolean containsAssembly(Assembly a) {
+ String aName = a.toString();
+ for (Assembly assembly : assemblies) {
+ if (assembly.toString().equalsIgnoreCase(aName)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public void addAssembly(Assembly a) {
+ assemblies.add(a);
+ fireTableRowsInserted(assemblies.size()-1, assemblies.size()-1);
+ }
+
+ public void removeRow(int rowIndex) {
+ assemblies.remove(rowIndex);
+ fireTableRowsDeleted(rowIndex, rowIndex);
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/ButtonLabel.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/gui/edu/unc/genomics/ButtonLabel.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,50 @@
+package edu.unc.genomics;
+
+import javax.swing.Action;
+import javax.swing.BorderFactory;
+import javax.swing.Icon;
+import javax.swing.JButton;
+
+/**
+ * Act like a button, look like a label
+ * 
+ * @author timpalpant
+ *
+ */
+public class ButtonLabel extends JButton {
+
+ private static final long serialVersionUID = -4449260534784095223L;
+
+ public ButtonLabel() {
+ init();
+ }
+
+ public ButtonLabel(Icon icon) {
+ super(icon);
+ init();
+ }
+
+ public ButtonLabel(String text) {
+ super(text);
+ init();
+ }
+
+ public ButtonLabel(Action a) {
+ super(a);
+ init();
+ }
+
+ public ButtonLabel(String text, Icon icon) {
+ super(text, icon);
+ init();
+ }
+
+ private void init() {
+ setBorder(BorderFactory.createEmptyBorder());
+ setBorderPainted(false);  
+ setContentAreaFilled(false);  
+ setFocusPainted(false);  
+ setOpaque(false);
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/Job.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/gui/edu/unc/genomics/Job.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,207 @@
+package edu.unc.genomics;
+
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+import org.apache.log4j.PatternLayout;
+import org.apache.log4j.WriterAppender;
+
+import com.beust.jcommander.JCommander;
+import com.beust.jcommander.ParameterDescription;
+
+/**
+ * A Job represents an instance of a tool configured with specific arguments
+ * Attempting to run a Job with invalid arguments will throw a RuntimeException
+ * If tool execution fails, a RuntimeException will also be thrown
+ * UncheckedExceptions should be managed by setting the Job's UncheckedExceptionManager
+ * or providing a ThreadGroup / default UncheckedExceptionManager
+ * 
+ * @author timpalpant
+ *
+ */
+public class Job implements Iterable<ParameterDescription>, Runnable {
+
+ private static final Logger log = Logger.getLogger(Job.class);
+
+ private final Class<? extends CommandLineTool> tool;
+ private final CommandLineTool app;
+ private final List<ParameterDescription> parameters;
+ private final String usageText;
+ private boolean isRunning = false;
+ private StringWriter writer = new StringWriter();
+
+ /**
+  * Arguments for running this Job
+  */
+ private Map<ParameterDescription,String> args = new HashMap<>();
+
+ /**
+  * Creates a new Job model for the specified tool
+  * @param tool
+  * @throws IllegalAccessException 
+  * @throws InstantiationException 
+  */
+ public Job(final Class<? extends CommandLineTool> tool) throws InstantiationException, IllegalAccessException {
+ this.tool = tool;
+
+ // Attempt to instantiate the tool and extract parameter information
+ app = tool.newInstance();
+ JCommander jc = new JCommander(app);
+ jc.setProgramName(tool.getSimpleName());
+ parameters = jc.getParameters();
+ StringBuilder sbuilder = new StringBuilder();
+ jc.usage(sbuilder);
+ usageText = sbuilder.toString();
+
+ // Set default arguments
+ for (ParameterDescription param : parameters) {
+ if (param.getDefault() != null) {
+ setArgument(param, String.valueOf(param.getDefault()));
+ }
+ }
+ }
+
+ /**
+  * Copy-constructor
+  * @param job
+  */
+ public Job(final Job job) {
+ this.tool = job.tool;
+ this.app = job.app;
+ this.parameters = job.parameters;
+ this.args = job.args;
+ this.usageText = job.usageText;
+ }
+
+ @Override
+ public void run() {
+ // Load the arguments for running the tool
+ String[] args;
+ try {
+ args = getArguments();
+ } catch (JobException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ throw new CommandLineToolException("Job arguments are not valid");
+ }
+
+ // Attempt to instantiate and run the tool
+ WriterAppender appender = new WriterAppender(new PatternLayout(), writer);
+ appender.addFilter(new ThreadFilter(Thread.currentThread().getName()));
+ Logger.getRootLogger().addAppender(appender);
+ isRunning = true;
+ app.toolRunnerMain(args);
+ isRunning = false;
+ Logger.getRootLogger().removeAppender(appender);
+ }
+
+ /**
+  * Render the arguments for running an instance of this Job
+  * @return
+  * @throws JobException 
+  */
+ public String[] getArguments() throws JobException {
+ if (!validateArguments()) {
+ throw new JobException("Job Arguments are not valid");
+ }
+
+ List<String> cmdArgs = new ArrayList<>();
+ for (ParameterDescription p : args.keySet()) {
+ cmdArgs.add(p.getLongestName());
+ cmdArgs.add(args.get(p));
+ }
+
+ String[] ret = new String[cmdArgs.size()];
+ return cmdArgs.toArray(ret);
+ }
+
+ public String getArgument(final ParameterDescription p) {
+ return args.get(p);
+ }
+
+ /**
+  * Set a value for the given parameter
+  * @param p
+  * @param value
+  */
+ public void setArgument(final ParameterDescription p, final String value) {
+ if (value.length() == 0) {
+ args.remove(p);
+ } else {
+ args.put(p, value);
+ }
+ }
+
+ /**
+  * Remove all set arguments for this Job
+  */
+ public void resetArguments() {
+ args.clear();
+ }
+
+ /**
+  * Is this parameter set?
+  * @param p
+  * @return
+  */
+ public boolean isSet(final ParameterDescription p) {
+ return args.containsKey(p);
+ }
+
+ /**
+  * Validate that this job has all of its parameters set
+  * and that they are all valid
+  * @return
+  */
+ public boolean validateArguments() {
+ // TODO: Better validation based on parameter type
+ boolean hasAllRequiredParams = true;
+ for (ParameterDescription param : parameters) {
+ if (param.getParameter().required() && !isSet(param)) {
+ log.debug("Job is missing required argument: " + param.getLongestName());
+ hasAllRequiredParams = false;
+ }
+ }
+
+ return hasAllRequiredParams;
+ }
+
+ public int numParameters() {
+ return parameters.size();
+ }
+
+ @Override
+ public Iterator<ParameterDescription> iterator() {
+ return parameters.iterator();
+ }
+
+ public String getName() {
+ return tool.getSimpleName();
+ }
+
+ public boolean isRunning() {
+ return isRunning;
+ }
+
+ /**
+  * @return the usageText
+  */
+ public String getUsageText() {
+ return usageText;
+ }
+
+ @Override
+ public String toString() {
+ return getName();
+ }
+
+ public String getOutput() {
+ return writer.toString();
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/JobConfigPanel.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/gui/edu/unc/genomics/JobConfigPanel.java Mon Feb 13 21:55:55 2012 -0500
[
b'@@ -0,0 +1,246 @@\n+package edu.unc.genomics;\n+\n+import java.awt.Color;\n+import java.awt.Component;\n+import java.awt.Dimension;\n+import java.awt.FileDialog;\n+import java.awt.event.ActionEvent;\n+import java.awt.event.ActionListener;\n+import java.lang.reflect.Field;\n+import java.nio.file.Path;\n+import java.util.HashMap;\n+import java.util.List;\n+import java.util.Map;\n+\n+import javax.swing.BorderFactory;\n+import javax.swing.BoxLayout;\n+import javax.swing.ImageIcon;\n+import javax.swing.JButton;\n+import javax.swing.JComboBox;\n+import javax.swing.JComponent;\n+import javax.swing.JFileChooser;\n+import javax.swing.JFrame;\n+import javax.swing.JLabel;\n+import javax.swing.JPanel;\n+import javax.swing.JTextField;\n+import javax.swing.SpringLayout;\n+import javax.swing.SwingUtilities;\n+import javax.swing.event.DocumentEvent;\n+import javax.swing.event.DocumentListener;\n+import javax.swing.layout.SpringUtilities;\n+import javax.swing.text.BadLocationException;\n+import javax.swing.text.Document;\n+\n+import org.apache.commons.lang3.StringUtils;\n+import org.apache.log4j.Logger;\n+\n+import com.beust.jcommander.ParameterDescription;\n+\n+import edu.unc.genomics.io.IntervalFile;\n+import edu.unc.genomics.io.WigFile;\n+\n+/**\n+ * View for configuring the parameters of a Job\n+ * Implements databinding between a Job object and the various Swing components\n+ * for configuring each parameter\n+ * \n+ * @author timpalpant\n+ *\n+ */\n+public class JobConfigPanel extends JPanel {\n+\n+\tprivate static final long serialVersionUID = 3336295203155728629L;\n+\tprivate static final Logger log = Logger.getLogger(JobConfigPanel.class);\n+\t\n+\tprivate static final ImageIcon fileIcon = new ImageIcon(ResourceManager.getImagesDirectory().resolve("folder_page.png").toString());\n+\t\n+\t/**\n+\t * Maps parameters in the Job to GUI components (forward data-binding)\n+\t */\n+\tprivate Map<ParameterDescription, JComponent> guiMap = new HashMap<>();\n+\t\n+\t/**\n+\t * Maps GUI components to parameters in the Job (reverse data-binding)\n+\t */\n+\tprivate Map<Component, ParameterDescription> jobMap = new HashMap<>();\n+\t\n+\t/**\n+\t * The model for the Job that this panel allows you to configure\n+\t */\n+\tprivate Job job;\n+\n+\t/**\n+\t * Initialize a new ConfigurationPanel with no Job\n+\t */\n+\tpublic JobConfigPanel() { \n+\t\tthis(null);\n+\t}\n+\t\n+\t/**\n+\t * Initialize a new ConfigurationPanel for the given Job\n+\t * @param job\n+\t */\n+\tpublic JobConfigPanel(final Job job) {\n+\t\tsetJob(job);\n+\t\tsetLayout(new SpringLayout());\n+\t}\n+\t\n+\t/**\n+\t * Return the Job that this ConfigurationPanel is editing\n+\t * @return\n+\t */\n+\tpublic Job getJob() {\n+\t\treturn job;\n+\t}\n+\t\n+\t/**\n+\t * Set the job for this Configuration panel and re-render\n+\t * @param job\n+\t */\n+\tpublic void setJob(final Job job) {\n+\t\tthis.job = job;\n+\t\trenderJob();\n+\t}\n+\t\n+\t/**\n+\t * Highlights fields on the Panel that are not set correctly\n+\t */\n+\tpublic void highlightInvalidArguments() {\n+\t\tfor (ParameterDescription param : job) {\n+\t\t\tJComponent guiComponent = guiMap.get(param);\n+\t\t\tif (param.getParameter().required() && !job.isSet(param)) {\n+\t\t\t\tguiComponent.setBorder(BorderFactory.createLineBorder(Color.RED));\n+\t\t\t} else {\n+\t\t\t\tguiComponent.setBorder(BorderFactory.createEmptyBorder());\n+\t\t\t}\n+\t\t}\n+\t}\n+\t\n+\t/**\n+\t * Render the parameters from the Job into GUI components\n+\t * and set up one-way data binding to map changes to the GUI fields\n+\t * back into the Job object\'s parameters\n+\t */\n+\tprivate void renderJob() {\n+\t\tremoveAll();\n+\t\tguiMap.clear();\n+\t\tjobMap.clear();\n+\t\tif (job == null) {\n+\t\t\tvalidate();\n+\t\t\trepaint();\n+\t\t\treturn;\n+\t\t}\n+\t\t\n+\t\t// Iterate through the parameters in the Job\n+\t\t// and render them appropriately based on their type\n+\t\tfor (ParameterDescription paramDescription : job) {\n+\t\t\t// Add the parameter name to the configuration panel\n+\t\t\tString name = paramDescription.getLongestName();\n+\t\t\twhile (name.startsWith("-")) {\n+\t\t\t\tname = name.substring(1);\n+\t\t\t}\n+\t\t\tname = StringUtils.capitalize(name);\n+\t\t\tJLabel label = new JLabel(name);\n+\t\t\tlabel.setBorder(Border'..b'Panel();\n+\t\t\tfieldPanel.setLayout(new BoxLayout(fieldPanel, BoxLayout.LINE_AXIS));\n+\t\t\tadd(fieldPanel);\n+\t\t\tField field = paramDescription.getField();\n+\t\t\tClass<?> type = field.getType();\n+\t\t\tif (type.equals(Assembly.class)) {\n+\t\t\t\tList<Assembly> availableAssemblies = AssemblyManager.getAvailableAssemblies();\n+\t\t\t\tAssembly[] assemblies = new Assembly[availableAssemblies.size()];\n+\t\t\t\tassemblies = availableAssemblies.toArray(assemblies);\n+\t\t\t\tfinal JComboBox<Assembly> cbAssemblyChooser = new JComboBox<Assembly>(assemblies);\n+\t\t\t\tcbAssemblyChooser.setPreferredSize(new Dimension(0, 25));\n+\t\t\t\tcbAssemblyChooser.setMaximumSize(new Dimension(Integer.MAX_VALUE, cbAssemblyChooser.getPreferredSize().height));\n+\t\t\t\tcbAssemblyChooser.setSelectedItem(AssemblyManager.getLastUsed());\n+\t\t\t\tcbAssemblyChooser.addActionListener(new ActionListener() {\n+\t\t\t\t\tpublic void actionPerformed(ActionEvent e) {\n+\t\t\t\t\t\tlog.debug("Auto-databinding changed assembly into Job argument");\n+\t\t\t\t\t\tAssembly selectedAssembly = (Assembly) cbAssemblyChooser.getSelectedItem();\n+\t\t\t\t\t\tAssemblyManager.setLastUsed(selectedAssembly);\n+\t\t\t\t\t\tParameterDescription param = jobMap.get(cbAssemblyChooser);\n+\t\t\t\t\t\tjob.setArgument(param, selectedAssembly.toString());\n+\t\t\t\t\t}\n+\t\t\t\t});\n+\t\t\t\tfieldPanel.add(cbAssemblyChooser);\n+\t\t\t\tguiMap.put(paramDescription, cbAssemblyChooser);\n+\t\t\t\tjobMap.put(cbAssemblyChooser, paramDescription);\n+\t\t\t} else {\n+\t\t\t\tfinal JTextField textField = new JTextField();\n+\t\t\t\t// Set to default parameter, if it exists\n+\t\t\t\tif (job.isSet(paramDescription)) {\n+\t\t\t\t\ttextField.setText(job.getArgument(paramDescription));\n+\t\t\t\t}\n+\t\t\t\ttextField.setPreferredSize(new Dimension(0, 20));\n+\t\t\t\ttextField.setMaximumSize(new Dimension(Integer.MAX_VALUE, textField.getPreferredSize().height));\n+\t\t\t\ttextField.getDocument().addDocumentListener(new DocumentListener() {\n+\t\t\t\t\tpublic void changedUpdate(DocumentEvent e) {\n+\t\t\t\t\t\tpushTextToModel(e);\n+\t\t\t\t\t}\n+\t\t\t\t\t\n+\t\t\t\t\tpublic void removeUpdate(DocumentEvent e) {\n+\t\t\t\t\t\tpushTextToModel(e);\n+\t\t\t\t\t}\n+\t\t\t\t\t\n+\t\t\t\t\tpublic void insertUpdate(DocumentEvent e) {\n+\t\t\t\t\t\tpushTextToModel(e);\n+\t\t\t\t\t}\n+\t\t\t\t\t\n+\t\t\t\t\tprivate void pushTextToModel(DocumentEvent e) {\n+\t\t\t\t\t\tlog.debug("Auto-databinding changed text into Job argument");\n+\t\t\t\t\t\tDocument doc = (Document) e.getDocument();\n+\t\t\t\t\t\tParameterDescription param = jobMap.get(textField);\n+\t\t\t\t\t\ttry {\n+\t\t\t\t\t\t\tString text = doc.getText(0, doc.getLength());\n+\t\t\t\t\t\t\tjob.setArgument(param, text);\n+\t\t\t\t\t\t} catch (BadLocationException e1) {\n+\t\t\t\t\t\t\tlog.error("Error pushing changed text into Job model");\n+\t\t\t\t\t\t\te1.printStackTrace();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t});\n+\t\t\t\tfieldPanel.add(textField);\n+\t\t\t\tguiMap.put(paramDescription, textField);\n+\t\t\t\tjobMap.put(textField, paramDescription);\n+\t\t\t\t\n+\t\t\t\t// For input/output files, add a file chooser button\n+\t\t\t\tif (type.equals(Path.class) || type.equals(WigFile.class) || type.equals(IntervalFile.class)) {\n+\t\t\t\t\t// TODO Replace with file icon\n+\t\t\t\t\tJButton btnChooseFile = new JButton(fileIcon);\n+\t\t\t\t\tbtnChooseFile.addActionListener(new ActionListener() {\n+\t\t\t\t\t\tpublic void actionPerformed(ActionEvent e) {\n+\t\t\t\t\t\t\t// AWT FileDialog uses native components, but seems to hang\n+\t\t\t\t\t\t\t//Component c = (Component) e.getSource();\n+\t\t\t        //JFrame frame = (JFrame) SwingUtilities.getRoot(c);\n+\t\t\t\t\t\t\t//FileDialog fd = new FileDialog(frame, "Choose File");\n+\t\t\t\t\t\t\t//fd.setVisible(true);\n+\t\t\t\t\t\t\t//if (fd.getFile() != null) {\n+\t\t\t\t\t\t\t//\ttextField.setText(fd.getDirectory()+fd.getFile());\n+\t\t\t\t\t\t\t//}\n+\t\t\t\t\t\t\t\n+\t\t\t\t\t\t\t// Swing JFileChooser\n+\t\t\t\t\t\t\tJFileChooser fc = new JFileChooser();\n+\t\t\t\t\t\t\tint retValue = fc.showDialog(getParent(), "OK");\n+\t\t\t\t\t\t\tif (retValue == JFileChooser.APPROVE_OPTION) {\n+\t\t\t\t\t\t\t\ttextField.setText(fc.getSelectedFile().toString());\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t}\n+\t\t\t\t\t});\n+\t\t\t\t\tfieldPanel.add(btnChooseFile);\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t\t\n+\t\t// Lay out the panel\n+\t\tSpringUtilities.makeCompactGrid(this, job.numParameters(), 2, 5, 5, 5, 5);\n+\t\t\n+\t\tvalidate();\n+\t\trepaint();\n+\t}\n+\n+}\n'
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/JobException.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/gui/edu/unc/genomics/JobException.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,57 @@
+package edu.unc.genomics;
+
+/**
+ * Exception thrown if attempting to perform an invalid action with a Job
+ * 
+ * @author timpalpant
+ *
+ */
+public class JobException extends Exception {
+
+ private static final long serialVersionUID = -831504993593959450L;
+
+ /**
+  * 
+  */
+ public JobException() {
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+  * @param message
+  */
+ public JobException(String message) {
+ super(message);
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+  * @param cause
+  */
+ public JobException(Throwable cause) {
+ super(cause);
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+  * @param message
+  * @param cause
+  */
+ public JobException(String message, Throwable cause) {
+ super(message, cause);
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+  * @param message
+  * @param cause
+  * @param enableSuppression
+  * @param writableStackTrace
+  */
+ public JobException(String message, Throwable cause,
+ boolean enableSuppression, boolean writableStackTrace) {
+ super(message, cause, enableSuppression, writableStackTrace);
+ // TODO Auto-generated constructor stub
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/JobQueue.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/gui/edu/unc/genomics/JobQueue.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,77 @@
+package edu.unc.genomics;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.ListModel;
+import javax.swing.event.ListDataEvent;
+import javax.swing.event.ListDataListener;
+
+import org.apache.log4j.Logger;
+
+/**
+ * Model for the queue of SubmittedJobs
+ * Should be managed through the JobQueueManager controller
+ * 
+ * @author timpalpant
+ *
+ */
+public class JobQueue implements ListModel<SubmittedJob>, Iterable<SubmittedJob> {
+
+ private static final Logger log = Logger.getLogger(JobQueue.class);
+
+ private final List<SubmittedJob> submittedJobs = new ArrayList<>();
+ private final List<ListDataListener> dataListeners = new ArrayList<>();
+
+ public void add(SubmittedJob job) {
+ int N = submittedJobs.size();
+ submittedJobs.add(job);
+ ListDataEvent e = new ListDataEvent(this, ListDataEvent.INTERVAL_ADDED, N, N);
+ for (ListDataListener l : dataListeners) {
+ l.intervalAdded(e);
+ }
+ }
+
+ public void remove(SubmittedJob job) {
+ submittedJobs.remove(job);
+ int N = submittedJobs.size();
+ ListDataEvent e = new ListDataEvent(this, ListDataEvent.INTERVAL_REMOVED, N, N);
+ for (ListDataListener l : dataListeners) {
+ l.intervalAdded(e);
+ }
+ }
+
+ public void update(SubmittedJob job) {
+ int index = submittedJobs.indexOf(job);
+ ListDataEvent e = new ListDataEvent(this, ListDataEvent.CONTENTS_CHANGED, index, index);
+ for (ListDataListener l : dataListeners) {
+ l.intervalAdded(e);
+ }
+ }
+
+ @Override
+ public int getSize() {
+ return submittedJobs.size();
+ }
+
+ @Override
+ public SubmittedJob getElementAt(int index) {
+ return submittedJobs.get(index);
+ }
+
+ @Override
+ public void addListDataListener(ListDataListener l) {
+ dataListeners.add(l);
+ }
+
+ @Override
+ public void removeListDataListener(ListDataListener l) {
+ dataListeners.remove(l);
+ }
+
+ @Override
+ public Iterator<SubmittedJob> iterator() {
+ return submittedJobs.iterator();
+ }
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/JobQueueCellRenderer.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/gui/edu/unc/genomics/JobQueueCellRenderer.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,125 @@
+package edu.unc.genomics;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JProgressBar;
+import javax.swing.ListCellRenderer;
+import javax.swing.SwingConstants;
+import javax.swing.border.EtchedBorder;
+
+/**
+ * @author timpalpant
+ *
+ */
+public class JobQueueCellRenderer extends JPanel implements ListCellRenderer<SubmittedJob> {
+
+ private static final long serialVersionUID = 4270263302075586018L;
+
+ private static final ImageIcon inProgressIcon = new ImageIcon(ResourceManager.getImagesDirectory().resolve("beachball.png").toString());
+ private static final ImageIcon rerunIcon = new ImageIcon(ResourceManager.getImagesDirectory().resolve("arrow-circle.png").toString());
+ private static final ImageIcon infoIcon = new ImageIcon(ResourceManager.getImagesDirectory().resolve("information-white.png").toString());
+ private static final ImageIcon logIcon = new ImageIcon(ResourceManager.getImagesDirectory().resolve("sticky-note-text.png").toString());
+ private static final ImageIcon showFileIcon = new ImageIcon(ResourceManager.getImagesDirectory().resolve("eye_icon.png").toString());
+
+ private static final ImageIcon successIcon = new ImageIcon(ResourceManager.getImagesDirectory().resolve("icon_success_sml.gif").toString());
+ private static final ImageIcon errorIcon = new ImageIcon(ResourceManager.getImagesDirectory().resolve("icon_error_sml.gif").toString());
+ private static final ImageIcon warningIcon = new ImageIcon(ResourceManager.getImagesDirectory().resolve("icon_warning_sml.gif").toString());
+
+ private JLabel statusIconLabel = new JLabel(inProgressIcon);
+ private JLabel nameLabel = new JLabel();
+
+ public JobQueueCellRenderer() {
+ FlowLayout flowLayout = new FlowLayout(FlowLayout.LEADING, 5, 2);
+ setPreferredSize(new Dimension(190, 48));
+ setLayout(flowLayout);
+ setBorder(BorderFactory.createLineBorder(Color.GRAY, 1, true));
+
+ JPanel statusPanel = new JPanel();
+ statusPanel.setBorder(BorderFactory.createEmptyBorder(0, 3, 16, 0));
+ statusPanel.setLayout(new BoxLayout(statusPanel, BoxLayout.PAGE_AXIS));
+ statusPanel.add(statusIconLabel);
+ add(statusPanel);
+
+ JPanel mainPanel = new JPanel();
+ mainPanel.setAlignmentX(LEFT_ALIGNMENT);
+ mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.PAGE_AXIS));
+
+ JPanel namePanel = new JPanel();
+ namePanel.setLayout(flowLayout);
+ nameLabel.setPreferredSize(new Dimension(145, 16));
+ nameLabel.setHorizontalTextPosition(SwingConstants.LEFT);
+ nameLabel.setFont(nameLabel.getFont().deriveFont(Font.BOLD));
+ namePanel.add(nameLabel);
+ mainPanel.add(namePanel);
+
+ JPanel buttonsPanel = new JPanel();
+ buttonsPanel.setLayout(flowLayout);
+ mainPanel.add(buttonsPanel);
+
+ ButtonLabel rerunLabel = new ButtonLabel(rerunIcon);
+ rerunLabel.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ //addJobToQueue();
+ }
+ });
+ buttonsPanel.add(rerunLabel);
+ ButtonLabel infoLabel = new ButtonLabel(infoIcon);
+ infoLabel.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ //addJobToQueue();
+ }
+ });
+ buttonsPanel.add(infoLabel);
+ ButtonLabel logLabel = new ButtonLabel(logIcon);
+ logLabel.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ //addJobToQueue();
+ }
+ });
+ buttonsPanel.add(logLabel);
+ ButtonLabel showFileLabel = new ButtonLabel(showFileIcon);
+ showFileLabel.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ //addJobToQueue();
+ }
+ });
+ buttonsPanel.add(showFileLabel);
+
+ add(mainPanel);
+ }
+
+ @Override
+ public Component getListCellRendererComponent(
+ JList<? extends SubmittedJob> list, SubmittedJob value, int index,
+ boolean isSelected, boolean cellHasFocus) {
+
+ nameLabel.setText(value.toString());
+ if (value.isRunning()) {
+ statusIconLabel.setIcon(inProgressIcon);
+ nameLabel.setForeground(Color.BLACK);
+ } else if (value.succeeded()) {
+ statusIconLabel.setIcon(successIcon);
+ nameLabel.setForeground(Color.BLACK);
+ } else {
+ statusIconLabel.setIcon(errorIcon);
+ nameLabel.setForeground(Color.RED);
+ }
+
+ return this;
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/JobQueueManager.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/gui/edu/unc/genomics/JobQueueManager.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,105 @@
+package edu.unc.genomics;
+
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+
+import org.apache.log4j.Logger;
+
+/**
+ * Controller for scheduling and running jobs
+ * Wrapper for ExcecutorService, although the implementation could change
+ * 
+ * @author timpalpant
+ *
+ */
+public class JobQueueManager {
+
+ private static final Logger log = Logger.getLogger(JobQueueManager.class);
+
+ private final JobQueue queue;
+ private final ExecutorService exec;
+ private final Thread monitor;
+
+ public JobQueueManager(JobQueue queue) {
+ this.queue = queue;
+
+ int numProcessors = Runtime.getRuntime().availableProcessors();
+ log.debug("Initializing thread pool with "+numProcessors+" processors");
+ exec = Executors.newFixedThreadPool(numProcessors);
+
+ monitor = new Thread(new JobMonitor());
+ monitor.start();
+ }
+
+ public List<Runnable> shutdownNow() {
+ return exec.shutdownNow();
+ }
+
+ /**
+  * Add a Job to the queue
+  * @param job
+  * @throws JobException 
+  */
+ public SubmittedJob submitJob(Job job) throws JobException {
+ // Refuse to add the Job to the queue if its arguments are not valid
+ if (!job.validateArguments()) {
+ throw new JobException("Job arguments are not valid");
+ }
+
+ // Submit the job for execution into the thread pool
+ Future<?> future = exec.submit(job);
+ SubmittedJob submittedJob = new SubmittedJob(job, future);
+ log.info("Submitted job " + submittedJob.getId());
+
+ // Add the SubmittedJob to the JobQueue
+ queue.add(submittedJob);
+ return submittedJob;
+ }
+
+ /**
+  * Are any jobs running? (not done)
+  * @return
+  */
+ public boolean isRunning() {
+ for (SubmittedJob job : queue) {
+ if (!job.isDone()) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+
+ /**
+  * Background process for polling the status of submitted jobs
+  * @author timpalpant
+  *
+  */
+ public class JobMonitor implements Runnable {
+
+ public static final int JOB_POLL_INTERVAL = 1_000;
+
+ public void run() {
+ try {
+ while (true) {
+ // Check Job statuses every 1s
+ Thread.sleep(JOB_POLL_INTERVAL);
+
+ for (SubmittedJob job : queue) {
+ if (job.isDone()) {
+ queue.update(job);
+ }
+ }
+ }
+ } catch (InterruptedException e) {
+ log.fatal("JobMonitor crashed");
+ e.printStackTrace();
+ throw new RuntimeException("JobMonitor crashed");
+ }
+ }
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/ResourceManager.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/gui/edu/unc/genomics/ResourceManager.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,33 @@
+package edu.unc.genomics;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+/**
+ * Find resources based on platform/package
+ * @author timpalpant
+ *
+ */
+public class ResourceManager {
+
+ private static final Path ASSEMBLIES_DIR = Paths.get("assemblies");
+ private static final Path IMAGES_DIR = Paths.get("images");
+
+ public static Path getResourceDirectory() {
+ Path osx = Paths.get("../Resources");
+ if (Files.exists(osx)) {
+ return osx;
+ }
+
+ return Paths.get("resources");
+ }
+
+ public static Path getAssembliesDirectory() {
+ return getResourceDirectory().resolve(ASSEMBLIES_DIR);
+ }
+
+ public static Path getImagesDirectory() {
+ return getResourceDirectory().resolve(IMAGES_DIR);
+ }
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/SubmittedJob.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/gui/edu/unc/genomics/SubmittedJob.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,103 @@
+package edu.unc.genomics;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+
+/**
+ * Represents a job that was submitted for processing
+ * 
+ * @author timpalpant
+ *
+ */
+public class SubmittedJob {
+ private static int numJobs = 0;
+
+ private final Future<?> future;
+ private final int id;
+ private final Job job;
+
+ public SubmittedJob(Job job, Future<?> future) {
+ this.id = ++numJobs;
+ this.job = job;
+ this.future = future;
+ }
+
+ /**
+  * @return the id
+  */
+ public int getId() {
+ return id;
+ }
+
+ /**
+  * @return the job
+  */
+ public Job getJob() {
+ return job;
+ }
+
+ /**
+  * If the job is currently running
+  * @return
+  */
+ public boolean isRunning() {
+ return job.isRunning() && !isDone();
+ }
+
+ /**
+  * If the job is done running
+  * (it may have failed or succeeded)
+  * @return
+  */
+ public boolean isDone() {
+ return future.isDone();
+ }
+
+ /**
+  * If this job completed without any Exceptions
+  * @return
+  */
+ public boolean succeeded() {
+ return (future.isDone() && !failed());
+ }
+
+ /**
+  * If this job completed with Exceptions
+  * @return
+  */
+ public boolean failed() {
+ if (future.isDone()) {
+ try {
+ future.get();
+ return false;
+ } catch (InterruptedException | ExecutionException e) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+  * Return an Exception that occured, or null if there were none
+  * or the job is not yet done
+  * @return
+  */
+ public Exception getException() {
+ if (future.isDone()) {
+ try {
+ future.get();
+ return null;
+ } catch (InterruptedException | ExecutionException e) {
+ return e;
+ }
+ }
+
+ return null;
+ }
+
+ @Override
+ public String toString() {
+ return "Job "+id+": "+job.getName();
+ }
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/ThreadFilter.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/gui/edu/unc/genomics/ThreadFilter.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,35 @@
+package edu.unc.genomics;
+
+import org.apache.log4j.spi.Filter;
+import org.apache.log4j.spi.LoggingEvent;
+
+/**
+ * A Log4j filter that filters for messages from a single thread
+ * @author timpalpant
+ *
+ */
+public class ThreadFilter extends Filter {
+
+ private final String threadName;
+
+ public ThreadFilter(String threadName) {
+ this.threadName = threadName;
+ }
+
+ @Override
+ public int decide(LoggingEvent e) {
+ if(e.getThreadName().equalsIgnoreCase(threadName)) {
+ return Filter.DENY;
+ }
+
+ return Filter.NEUTRAL;
+ }
+
+ /**
+  * @return the threadName
+  */
+ public String getThreadName() {
+ return threadName;
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/ToolRunner.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/gui/edu/unc/genomics/ToolRunner.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,38 @@
+package edu.unc.genomics;
+
+import java.awt.EventQueue;
+
+import javax.swing.JFrame;
+
+import org.apache.log4j.Logger;
+
+/**
+ * The main application for running the genomics toolkit gui
+ * Could do resource checking, etc. prior to startup
+ * 
+ * @author timpalpant
+ * 
+ */
+public class ToolRunner {
+
+ private static final Logger log = Logger.getLogger(ToolRunner.class);
+
+ private JFrame frmToolRunner = new ToolRunnerFrame();
+
+ /**
+  * Launch the application.
+  */
+ public static void main(String[] args) {
+ EventQueue.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ ToolRunner window = new ToolRunner();
+ window.frmToolRunner.setVisible(true);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ });
+ }
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/ToolRunnerFrame.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/gui/edu/unc/genomics/ToolRunnerFrame.java Mon Feb 13 21:55:55 2012 -0500
b
b'@@ -0,0 +1,328 @@\n+package edu.unc.genomics;\n+\n+import java.awt.BorderLayout;\n+import java.awt.Color;\n+import java.awt.Component;\n+import java.awt.Container;\n+import java.awt.Dimension;\n+import java.awt.Font;\n+\n+import javax.swing.JFrame;\n+import javax.swing.JPanel;\n+\n+import javax.swing.BorderFactory;\n+import javax.swing.JComponent;\n+import javax.swing.JLabel;\n+import javax.swing.JList;\n+import javax.swing.JMenuBar;\n+import javax.swing.JMenu;\n+import javax.swing.JMenuItem;\n+import javax.swing.JButton;\n+import javax.swing.JOptionPane;\n+import javax.swing.JPopupMenu;\n+import javax.swing.JScrollPane;\n+import javax.swing.SwingConstants;\n+\n+import javax.swing.JProgressBar;\n+import javax.swing.JSplitPane;\n+import javax.swing.BoxLayout;\n+import javax.swing.JTabbedPane;\n+import javax.swing.JTextPane;\n+\n+import javax.swing.event.TreeSelectionListener;\n+import javax.swing.event.TreeSelectionEvent;\n+import javax.xml.parsers.ParserConfigurationException;\n+\n+import org.apache.log4j.Logger;\n+import org.simplericity.macify.eawt.Application;\n+import org.simplericity.macify.eawt.ApplicationEvent;\n+import org.simplericity.macify.eawt.ApplicationListener;\n+import org.simplericity.macify.eawt.DefaultApplication;\n+import org.xml.sax.SAXException;\n+\n+import com.beust.jcommander.JCommander;\n+\n+import java.awt.event.ActionListener;\n+import java.awt.event.ActionEvent;\n+import java.io.IOException;\n+\n+/**\n+ * The main ToolRunner window\n+ * and controller for creating, running, and managing Jobs\n+ * \n+ * @author timpalpant\n+ *\n+ */\n+public class ToolRunnerFrame extends JFrame implements ApplicationListener {\n+\t\n+\tprivate static final long serialVersionUID = 6454774196137357898L;\n+\tprivate static final Logger log = Logger.getLogger(ToolRunnerFrame.class);\n+\t\n+\tprivate final Application application = new DefaultApplication();\n+\t\n+\tprivate final JPanel contentPane = new JPanel();\n+\tprivate final JSplitPane splitPane = new JSplitPane();\n+\tprivate final JPanel mainPane = new JPanel();\n+\tprivate final JProgressBar progressBar = new JProgressBar();\n+\tprivate final JTabbedPane tabbedPane = new JTabbedPane(SwingConstants.TOP);\n+\tprivate final JobConfigPanel configurationPanel = new JobConfigPanel();\n+\tprivate final JTextPane helpTextPanel = new JTextPane();\n+\tprivate final ToolsTree toolsTree = new ToolsTree();\n+\t\t\n+\tprivate final JobQueue queue = new JobQueue();\n+\tprivate final JobQueueManager queueManager = new JobQueueManager(queue);\n+\tprivate final JList<SubmittedJob> queueList = new JList<>(queue);\n+\n+\t/**\n+\t * Create the frame.\n+\t */\n+\tpublic ToolRunnerFrame() {\n+    //application.addPreferencesMenuItem();\n+    //application.setEnabledPreferencesMenu(true);\n+    application.addApplicationListener(this);\n+\t\t\n+    // set OS X-specific properties\n+    if (application.isMac()) {\n+    \tsetDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);\n+    \t//toolsTree.putClientProperty("Quaqua.Tree.style", "sourceList");\n+    } else {\n+    \tsetDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n+    }\n+\t\tsetTitle("Genomics Toolkit Tool Runner");\n+\t\tsetBounds(100, 100, 1000, 600);\n+\t\t\n+\t\tcontentPane.setBorder(BorderFactory.createEmptyBorder());\n+\t\tcontentPane.setLayout(new BorderLayout(0, 0));\n+\t\tsetContentPane(contentPane);\n+\t\t\n+\t\tinitializeChildren();\n+\t\tinitializeMenuBar();\n+\t}\n+\t\n+\tprivate void initializeChildren() {\n+\t\tsplitPane.setBorder(BorderFactory.createEmptyBorder());\n+\t\tcontentPane.add(splitPane, BorderLayout.CENTER);\n+\t\t\n+\t\tinitializeQueuePanel();\n+\t\tinitializeToolsTree();\n+\t\t\n+\t\tmainPane.setLayout(new BorderLayout(0, 0));\n+\t\tmainPane.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY));\n+\t\tmainPane.add(tabbedPane, BorderLayout.CENTER);\n+\t\t\n+\t\tJPanel runPanel = new JPanel();\n+\t\trunPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));\n+\t\trunPanel.setLayout(new BoxLayout(runPanel, BoxLayout.X_AXIS));\n+\t\trunPanel.add(progressBar);\n+\t\tJButton btnRun = new JButton("Run");\n+\t\tbtnRun.addActionListener(new ActionListener() {\n+\t\t\tpublic void actionPerformed(ActionEve'..b'new JScrollPane(helpTextPanel);\n+\t\thelpScrollPane.setBorder(BorderFactory.createEmptyBorder());\n+\t\thelpPanel.add(helpScrollPane);\n+\t}\n+\t\t\n+\tprivate void initializeToolsTree() {\n+\t\ttry {\n+\t\t\tToolsTreeModel model = ToolsTreeModel.loadDefaultConfig();\n+\t\t\ttoolsTree.setModel(model);\n+\t\t} catch (ParserConfigurationException | SAXException | IOException e1) {\n+\t\t\tlog.error("Error loading tool configuration file");\n+\t\t\te1.printStackTrace();\n+\t\t\tSystem.exit(-1);\n+\t\t} catch (ClassNotFoundException e) {\n+\t\t\tlog.error("Error loading tool: " + e.getMessage());\n+\t\t\te.printStackTrace();\n+\t\t\tSystem.exit(-1);\n+\t\t}\n+\n+\t\ttoolsTree.addTreeSelectionListener(new TreeSelectionListener() {\n+\t\t\tpublic void valueChanged(TreeSelectionEvent e) {\n+\t\t\t\tchangeTool();\n+\t\t\t}\n+\t\t});\n+\t\t\n+\t\tJScrollPane toolsTreeScrollPane = new JScrollPane(toolsTree);\n+\t\ttoolsTreeScrollPane.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 1, Color.LIGHT_GRAY));\n+\t\tsplitPane.setLeftComponent(toolsTreeScrollPane);\n+\t}\n+\n+\t/**\n+\t * Change the configuration panel to the currently selected tool\n+\t * to configure a new Job\n+\t */\n+\tprivate void changeTool() {\n+\t\t// Returns the last path element of the selection.\n+    Object node = toolsTree.getLastSelectedPathComponent();\n+    // Nothing is selected\n+    if (node == null) {   \n+    \treturn;\n+    }\n+\n+    if (node instanceof ToolsTreeNode) {\n+    \tToolsTreeNode toolNode = (ToolsTreeNode) node;\n+\t\t\ttry {\n+\t      Class<? extends CommandLineTool> tool = toolNode.getClazz();\n+\t      \n+\t      // Set up the configuration panel to configure this tool\n+\t\t\t\tJob job = new Job(tool);\n+\t      configurationPanel.setJob(job);\n+\t      // Set the help text to the usage\n+\t      helpTextPanel.setText(job.getUsageText());\n+\t\t\t} catch (InstantiationException | IllegalAccessException e) {\n+\t\t\t\tlog.error("Error initializing Job");\n+\t\t\t\te.printStackTrace();\n+\t\t\t\tJOptionPane.showMessageDialog(this, "Error initializing job", "Job Initialization Error", JOptionPane.ERROR_MESSAGE);\n+\t\t\t}\n+\n+    }\n+\t}\n+\t\n+\tprivate void addJobToQueue() {\n+\t\tJob currentJob = configurationPanel.getJob();\n+\t\tif (currentJob == null) return;\n+\t\t\n+\t\t// Validate the required parameters\n+\t\tlog.info("Validating parameters for tool");\n+\t\tif (!currentJob.validateArguments()) {\n+\t\t\tconfigurationPanel.highlightInvalidArguments();\n+\t\t\treturn;\n+\t\t}\n+\t\t\n+\t\t// Add the job to the queue\n+\t\ttry {\n+\t\t\tqueueManager.submitJob(currentJob);\n+\t\t\tconfigurationPanel.setJob(null);\n+\t\t} catch (JobException e) {\n+\t\t\tlog.error("Error adding Job to queue");\n+\t\t\te.printStackTrace();\n+\t\t\tJOptionPane.showMessageDialog(this, "Error adding job to queue", "Job Queue Error", JOptionPane.ERROR_MESSAGE);\n+\t\t}\n+\t}\n+\t\n+\tpublic void handleAbout(ApplicationEvent event) {\n+\t\tJOptionPane.showMessageDialog(this, "Java Genomics Toolkit v1.0");\n+\t\tif (event != null) {\n+\t\t\tevent.setHandled(true);\n+\t\t}\n+\t}\n+\n+\tpublic void handleOpenApplication(ApplicationEvent event) {\n+\t\t// Application was opened\n+\t}\n+\n+\tpublic void handleOpenFile(ApplicationEvent event) {\n+\t\t//JOptionPane.showMessageDialog(frmToolRunner, "OS X told us to open " + event.getFilename());\n+\t}\n+\n+\tpublic void handlePreferences(ApplicationEvent event) {\n+\t\t//JOptionPane.showMessageDialog(frmToolRunner, "No preferences available");\n+\t}\n+\n+\tpublic void handlePrintFile(ApplicationEvent event) {\n+\t\t//JOptionPane.showMessageDialog(frmToolRunner, "OS X told us to print " + event.getFilename());\n+\t}\n+\n+\tpublic void handleQuit(ApplicationEvent event) {\n+\t\tboolean confirm = true;\n+\t\tif (queueManager.isRunning()) {\n+\t\t\tint result = JOptionPane.showConfirmDialog(this, "Jobs are currently running. Are you sure you want to quit?", "Confirm Quit", JOptionPane.OK_CANCEL_OPTION);\n+\t\t\tconfirm = (result == JOptionPane.OK_OPTION);\n+\t\t}\n+\t\t\n+\t\tif (confirm) {\n+\t\t\tdispose();\n+\t\t\tSystem.exit(0);\n+\t\t}\n+\t}\n+\n+\tpublic void handleReOpenApplication(ApplicationEvent event) {\n+\t\t//JOptionPane.showMessageDialog(frmToolRunner, "OS X told the application was reopened");\n+\t\tsetVisible(true);\n+\t}\n+}\n'
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/ToolsTree.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/gui/edu/unc/genomics/ToolsTree.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,38 @@
+package edu.unc.genomics;
+
+import java.awt.Dimension;
+
+import javax.swing.BorderFactory;
+import javax.swing.JTree;
+import javax.swing.tree.TreeSelectionModel;
+
+/**
+ * Tree view of the available tools
+ * 
+ * @author timpalpant
+ *
+ */
+public class ToolsTree extends JTree {
+
+ private static final long serialVersionUID = -2591915754191263660L;
+
+ public ToolsTree() {
+ super();
+ initialize();
+ }
+
+ public ToolsTree(ToolsTreeModel model) {
+ super(model);
+ initialize();
+ }
+
+ private void initialize() {
+ getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
+
+ setBorder(BorderFactory.createEmptyBorder());
+ setRootVisible(false);
+ setShowsRootHandles(true);
+ setPreferredSize(new Dimension(200, 0));
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/ToolsTreeModel.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/gui/edu/unc/genomics/ToolsTreeModel.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,82 @@
+package edu.unc.genomics;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.apache.log4j.Logger;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+/**
+ * Model for the ToolsTree
+ * Essentially just a DefaultTreeModel, but provides methods for
+ * loading the available tools from a configuration file
+ * 
+ * @author timpalpant
+ *
+ */
+public class ToolsTreeModel extends DefaultTreeModel {
+
+ public static final Path DEFAULT_CONFIGURATION_FILE = Paths.get("toolConf.xml");
+
+ private static final Logger log = Logger.getLogger(ToolsTreeModel.class);
+
+ private static final long serialVersionUID = -6587614270922489960L;
+
+ public ToolsTreeModel() {
+ super(new DefaultMutableTreeNode("Tools"));
+ }
+
+ public static ToolsTreeModel loadDefaultConfig() throws ClassNotFoundException, ParserConfigurationException, SAXException, IOException {
+ return loadConfig(ResourceManager.getResourceDirectory().resolve(DEFAULT_CONFIGURATION_FILE));
+ }
+
+ public static ToolsTreeModel loadConfig(Path p) throws ParserConfigurationException, SAXException, IOException, ClassNotFoundException {
+ ToolsTreeModel model = new ToolsTreeModel();
+ DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();
+
+ // Populate the TreeModel with the tools in the default configuration file
+ log.debug("Loading tools from: " + DEFAULT_CONFIGURATION_FILE.toAbsolutePath());
+ DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
+ Document doc = dBuilder.parse(p.toFile());
+
+ // Iterate over the sections
+ NodeList sections = doc.getElementsByTagName("section");
+ log.debug("Found "+sections.getLength()+" sections");
+ for (int i = 0; i < sections.getLength(); i++) {
+ Node section = sections.item(i);
+ String sectionName = section.getAttributes().getNamedItem("name").getNodeValue();
+ log.debug("Loading section: " + sectionName);
+ DefaultMutableTreeNode sectionNode = new DefaultMutableTreeNode(sectionName);
+ root.add(sectionNode);
+ NodeList tools = section.getChildNodes();
+
+ // Iterate over the tools in each section
+ for (int j = 0; j < tools.getLength(); j++) {
+ Node tool = tools.item(j);
+ if (tool.getNodeType() == Node.ELEMENT_NODE && tool.getNodeName().equalsIgnoreCase("tool")) {
+ String toolName = tool.getAttributes().getNamedItem("name").getNodeValue();
+ log.debug("Loading tool: " + toolName);
+ String toolClassName = tool.getAttributes().getNamedItem("class").getNodeValue();
+ Class<? extends CommandLineTool> toolClass = (Class<? extends CommandLineTool>) Class.forName(toolClassName);
+ ToolsTreeNode toolNode = new ToolsTreeNode(toolName, toolClass);
+ sectionNode.add(toolNode);
+ }
+ }
+ }
+
+ return model;
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/edu/unc/genomics/ToolsTreeNode.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/gui/edu/unc/genomics/ToolsTreeNode.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,44 @@
+package edu.unc.genomics;
+
+import javax.swing.tree.DefaultMutableTreeNode;
+
+/**
+ * A node in the ToolsTreeModel
+ * Contains a class and a name for the tool
+ * TODO Add help for each tool
+ * 
+ * @author timpalpant
+ *
+ */
+public class ToolsTreeNode extends DefaultMutableTreeNode {
+
+ private static final long serialVersionUID = -9067416927466519457L;
+
+ private final String name;
+ private final Class<? extends CommandLineTool> clazz;
+
+ /**
+  * @param userObject
+  */
+ public ToolsTreeNode(String name, Class<? extends CommandLineTool> clazz) {
+ super(name, false);
+
+ this.name = name;
+ this.clazz = clazz;
+ }
+
+ /**
+  * @return the name
+  */
+ public String getName() {
+ return name;
+ }
+
+ /**
+  * @return the clazz
+  */
+ public Class<? extends CommandLineTool> getClazz() {
+ return clazz;
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/javax/._swing
b
Binary file java-genomics-toolkit/gui/javax/._swing has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/javax/swing/._layout
b
Binary file java-genomics-toolkit/gui/javax/swing/._layout has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/javax/swing/layout/._SpringUtilities.java
b
Binary file java-genomics-toolkit/gui/javax/swing/layout/._SpringUtilities.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/gui/javax/swing/layout/SpringUtilities.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/gui/javax/swing/layout/SpringUtilities.java Mon Feb 13 21:55:55 2012 -0500
b
b'@@ -0,0 +1,225 @@\n+/*\n+ * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.\n+ *\n+ * Redistribution and use in source and binary forms, with or without\n+ * modification, are permitted provided that the following conditions\n+ * are met:\n+ *\n+ *   - Redistributions of source code must retain the above copyright\n+ *     notice, this list of conditions and the following disclaimer.\n+ *\n+ *   - Redistributions in binary form must reproduce the above copyright\n+ *     notice, this list of conditions and the following disclaimer in the\n+ *     documentation and/or other materials provided with the distribution.\n+ *\n+ *   - Neither the name of Oracle or the names of its\n+ *     contributors may be used to endorse or promote products derived\n+ *     from this software without specific prior written permission.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS\n+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */ \n+\n+package javax.swing.layout;\n+\n+import javax.swing.*;\n+import javax.swing.SpringLayout;\n+import java.awt.*;\n+\n+/**\n+ * A 1.4 file that provides utility methods for\n+ * creating form- or grid-style layouts with SpringLayout.\n+ * These utilities are used by several programs, such as\n+ * SpringBox and SpringCompactGrid.\n+ */\n+public class SpringUtilities {\n+    /**\n+     * A debugging utility that prints to stdout the component\'s\n+     * minimum, preferred, and maximum sizes.\n+     */\n+    public static void printSizes(Component c) {\n+        System.out.println("minimumSize = " + c.getMinimumSize());\n+        System.out.println("preferredSize = " + c.getPreferredSize());\n+        System.out.println("maximumSize = " + c.getMaximumSize());\n+    }\n+\n+    /**\n+     * Aligns the first <code>rows</code> * <code>cols</code>\n+     * components of <code>parent</code> in\n+     * a grid. Each component is as big as the maximum\n+     * preferred width and height of the components.\n+     * The parent is made just big enough to fit them all.\n+     *\n+     * @param rows number of rows\n+     * @param cols number of columns\n+     * @param initialX x location to start the grid at\n+     * @param initialY y location to start the grid at\n+     * @param xPad x padding between cells\n+     * @param yPad y padding between cells\n+     */\n+    public static void makeGrid(Container parent,\n+                                int rows, int cols,\n+                                int initialX, int initialY,\n+                                int xPad, int yPad) {\n+        SpringLayout layout;\n+        try {\n+            layout = (SpringLayout)parent.getLayout();\n+        } catch (ClassCastException exc) {\n+            System.err.println("The first argument to makeGrid must use SpringLayout.");\n+            return;\n+        }\n+\n+        Spring xPadSpring = Spring.constant(xPad);\n+        Spring yPadSpring = Spring.constant(yPad);\n+        Spring initialXSpring = Spring.constant(initialX);\n+        Spring initialYSpring = Spring.constant(initialY);\n+        int max = rows * cols;\n+\n+        //Calculate Springs that are the max of the width/height so that all\n+        //cells have the same size.\n+        Spring maxWidthSpring = layout.getConstraints(parent.getComponent(0)).\n+                                    getWidth();\n+        Spring maxHeightS'..b'ringLayout.Constraints pCons = layout.getConstraints(parent);\n+        pCons.setConstraint(SpringLayout.SOUTH,\n+                            Spring.sum(\n+                                Spring.constant(yPad),\n+                                lastCons.getConstraint(SpringLayout.SOUTH)));\n+        pCons.setConstraint(SpringLayout.EAST,\n+                            Spring.sum(\n+                                Spring.constant(xPad),\n+                                lastCons.getConstraint(SpringLayout.EAST)));\n+    }\n+\n+    /* Used by makeCompactGrid. */\n+    private static SpringLayout.Constraints getConstraintsForCell(\n+                                                int row, int col,\n+                                                Container parent,\n+                                                int cols) {\n+        SpringLayout layout = (SpringLayout) parent.getLayout();\n+        Component c = parent.getComponent(row * cols + col);\n+        return layout.getConstraints(c);\n+    }\n+\n+    /**\n+     * Aligns the first <code>rows</code> * <code>cols</code>\n+     * components of <code>parent</code> in\n+     * a grid. Each component in a column is as wide as the maximum\n+     * preferred width of the components in that column;\n+     * height is similarly determined for each row.\n+     * The parent is made just big enough to fit them all.\n+     *\n+     * @param rows number of rows\n+     * @param cols number of columns\n+     * @param initialX x location to start the grid at\n+     * @param initialY y location to start the grid at\n+     * @param xPad x padding between cells\n+     * @param yPad y padding between cells\n+     */\n+    public static void makeCompactGrid(Container parent,\n+                                       int rows, int cols,\n+                                       int initialX, int initialY,\n+                                       int xPad, int yPad) {\n+        SpringLayout layout;\n+        try {\n+            layout = (SpringLayout)parent.getLayout();\n+        } catch (ClassCastException exc) {\n+            System.err.println("The first argument to makeCompactGrid must use SpringLayout.");\n+            return;\n+        }\n+\n+        //Align all cells in each column and make them the same width.\n+        Spring x = Spring.constant(initialX);\n+        for (int c = 0; c < cols; c++) {\n+            Spring width = Spring.constant(0);\n+            for (int r = 0; r < rows; r++) {\n+                width = Spring.max(width,\n+                                   getConstraintsForCell(r, c, parent, cols).\n+                                       getWidth());\n+            }\n+            for (int r = 0; r < rows; r++) {\n+                SpringLayout.Constraints constraints =\n+                        getConstraintsForCell(r, c, parent, cols);\n+                constraints.setX(x);\n+                constraints.setWidth(width);\n+            }\n+            x = Spring.sum(x, Spring.sum(width, Spring.constant(xPad)));\n+        }\n+\n+        //Align all cells in each row and make them the same height.\n+        Spring y = Spring.constant(initialY);\n+        for (int r = 0; r < rows; r++) {\n+            Spring height = Spring.constant(0);\n+            for (int c = 0; c < cols; c++) {\n+                height = Spring.max(height,\n+                                    getConstraintsForCell(r, c, parent, cols).\n+                                        getHeight());\n+            }\n+            for (int c = 0; c < cols; c++) {\n+                SpringLayout.Constraints constraints =\n+                        getConstraintsForCell(r, c, parent, cols);\n+                constraints.setY(y);\n+                constraints.setHeight(height);\n+            }\n+            y = Spring.sum(y, Spring.sum(height, Spring.constant(yPad)));\n+        }\n+\n+        //Set the parent\'s size.\n+        SpringLayout.Constraints pCons = layout.getConstraints(parent);\n+        pCons.setConstraint(SpringLayout.SOUTH, y);\n+        pCons.setConstraint(SpringLayout.EAST, x);\n+    }\n+}\n'
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/launch4j.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/launch4j.xml Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,26 @@
+<launch4jConfig>
+  <dontWrapJar>false</dontWrapJar>
+  <headerType>gui</headerType>
+  <jar>dist/java-genomics-toolkit.jar</jar>
+  <outfile>dist/Genomics Toolkit.exe</outfile>
+  <errTitle></errTitle>
+  <cmdLine></cmdLine>
+  <chdir></chdir>
+  <priority>normal</priority>
+  <downloadUrl>http://java.com/download</downloadUrl>
+  <supportUrl>http://github.com/timpalpant/java-genomics-toolkit</supportUrl>
+  <customProcName>false</customProcName>
+  <stayAlive>false</stayAlive>
+  <manifest>META-INF/MANIFEST.MF</manifest>
+  <icon></icon>
+  <classPath>
+    <mainClass>edu.unc.genomics.GenomicsToolkit</mainClass>
+    <cp>../lib/*</cp>
+  </classPath>
+  <jre>
+    <path></path>
+    <minVersion>1.7.0</minVersion>
+    <maxVersion></maxVersion>
+    <jdkPreference>preferJre</jdkPreference>
+  </jre>
+</launch4jConfig>
\ No newline at end of file
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/._BigWig.jar
b
Binary file java-genomics-toolkit/lib/._BigWig.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/._commons-lang3-3.1.jar
b
Binary file java-genomics-toolkit/lib/._commons-lang3-3.1.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/._commons-math-2.2.jar
b
Binary file java-genomics-toolkit/lib/._commons-math-2.2.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/._jarbundler-2.2.0.jar
b
Binary file java-genomics-toolkit/lib/._jarbundler-2.2.0.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/._java-genomics-io.jar
b
Binary file java-genomics-toolkit/lib/._java-genomics-io.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/._jcommander-1.20.jar
b
Binary file java-genomics-toolkit/lib/._jcommander-1.20.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/._jtransforms-2.4.jar
b
Binary file java-genomics-toolkit/lib/._jtransforms-2.4.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/._launch4j.jar
b
Binary file java-genomics-toolkit/lib/._launch4j.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/._log4j-1.2.15.jar
b
Binary file java-genomics-toolkit/lib/._log4j-1.2.15.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/._macify-1.4.jar
b
Binary file java-genomics-toolkit/lib/._macify-1.4.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/._sam-1.56.jar
b
Binary file java-genomics-toolkit/lib/._sam-1.56.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/._swing-layout.jar
b
Binary file java-genomics-toolkit/lib/._swing-layout.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/._xstream.jar
b
Binary file java-genomics-toolkit/lib/._xstream.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/BigWig.jar
b
Binary file java-genomics-toolkit/lib/BigWig.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/commons-lang3-3.1.jar
b
Binary file java-genomics-toolkit/lib/commons-lang3-3.1.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/commons-math-2.2.jar
b
Binary file java-genomics-toolkit/lib/commons-math-2.2.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/jarbundler-2.2.0.jar
b
Binary file java-genomics-toolkit/lib/jarbundler-2.2.0.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/java-genomics-io.jar
b
Binary file java-genomics-toolkit/lib/java-genomics-io.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/jcommander-1.20.jar
b
Binary file java-genomics-toolkit/lib/jcommander-1.20.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/jtransforms-2.4.jar
b
Binary file java-genomics-toolkit/lib/jtransforms-2.4.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/launch4j.jar
b
Binary file java-genomics-toolkit/lib/launch4j.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/log4j-1.2.15.jar
b
Binary file java-genomics-toolkit/lib/log4j-1.2.15.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/macify-1.4.jar
b
Binary file java-genomics-toolkit/lib/macify-1.4.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/sam-1.56.jar
b
Binary file java-genomics-toolkit/lib/sam-1.56.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/swing-layout.jar
b
Binary file java-genomics-toolkit/lib/swing-layout.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/lib/xstream.jar
b
Binary file java-genomics-toolkit/lib/xstream.jar has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/log4j.properties
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/log4j.properties Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,10 @@
+log4j.rootLogger=debug, stdout
+
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+
+# Pattern to output the caller's file name and line number.
+log4j.appender.stdout.layout.ConversionPattern=%5p - %m%n
+
+# Only output errors from the BigWig library
+log4j.logger.org.broad.igv.bbfile=ERROR
\ No newline at end of file
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/._assemblies
b
Binary file java-genomics-toolkit/resources/._assemblies has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/._images
b
Binary file java-genomics-toolkit/resources/._images has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/._toolConf.xml
b
Binary file java-genomics-toolkit/resources/._toolConf.xml has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/._ce2.len
b
Binary file java-genomics-toolkit/resources/assemblies/._ce2.len has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/._ce3.len
b
Binary file java-genomics-toolkit/resources/assemblies/._ce3.len has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/._ce4.len
b
Binary file java-genomics-toolkit/resources/assemblies/._ce4.len has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/._ce5.len
b
Binary file java-genomics-toolkit/resources/assemblies/._ce5.len has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/._ce6.len
b
Binary file java-genomics-toolkit/resources/assemblies/._ce6.len has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/._ce7.len
b
Binary file java-genomics-toolkit/resources/assemblies/._ce7.len has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/._ce8.len
b
Binary file java-genomics-toolkit/resources/assemblies/._ce8.len has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/._ce9.len
b
Binary file java-genomics-toolkit/resources/assemblies/._ce9.len has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/._dm1.len
b
Binary file java-genomics-toolkit/resources/assemblies/._dm1.len has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/._dm2.len
b
Binary file java-genomics-toolkit/resources/assemblies/._dm2.len has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/._dm3.len
b
Binary file java-genomics-toolkit/resources/assemblies/._dm3.len has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/._hg15.len
b
Binary file java-genomics-toolkit/resources/assemblies/._hg15.len has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/._hg16.len
b
Binary file java-genomics-toolkit/resources/assemblies/._hg16.len has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/._hg17.len
b
Binary file java-genomics-toolkit/resources/assemblies/._hg17.len has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/._hg18.len
b
Binary file java-genomics-toolkit/resources/assemblies/._hg18.len has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/._hg19.len
b
Binary file java-genomics-toolkit/resources/assemblies/._hg19.len has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/._hg19Haps.len
b
Binary file java-genomics-toolkit/resources/assemblies/._hg19Haps.len has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/._hg19Patch2.len
b
Binary file java-genomics-toolkit/resources/assemblies/._hg19Patch2.len has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/._klac.len
b
Binary file java-genomics-toolkit/resources/assemblies/._klac.len has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/._kwal.len
b
Binary file java-genomics-toolkit/resources/assemblies/._kwal.len has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/._sacCer1.len
b
Binary file java-genomics-toolkit/resources/assemblies/._sacCer1.len has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/._sacCer2.len
b
Binary file java-genomics-toolkit/resources/assemblies/._sacCer2.len has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/._sacCer3.len
b
Binary file java-genomics-toolkit/resources/assemblies/._sacCer3.len has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/ce2.len
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/resources/assemblies/ce2.len Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,7 @@
+chrI 15080483
+chrII 15279308
+chrIII 13783313
+chrIV 17493791
+chrM 13794
+chrV 20922231
+chrX 17718849
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/ce3.len
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/resources/assemblies/ce3.len Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,7 @@
+chrI 15080552
+chrII 15279311
+chrIII 13783317
+chrIV 17493785
+chrM 13794
+chrV 20922231
+chrX 17718850
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/ce4.len
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/resources/assemblies/ce4.len Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,7 @@
+chrI 15072419
+chrII 15279316
+chrIII 13783681
+chrIV 17493784
+chrM 13794
+chrV 20919398
+chrX 17718852
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/ce5.len
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/resources/assemblies/ce5.len Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,7 @@
+chrV 20919568
+chrX 17718851
+chrIV 17493785
+chrII 15279316
+chrI 15072421
+chrIII 13783681
+chrM 13794
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/ce6.len
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/resources/assemblies/ce6.len Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,7 @@
+chrV 20919568
+chrX 17718854
+chrIV 17493785
+chrII 15279323
+chrI 15072421
+chrIII 13783681
+chrM 13794
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/ce7.len
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/resources/assemblies/ce7.len Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,7 @@
+chrV 20924143
+chrX 17718854
+chrIV 17493784
+chrII 15279324
+chrI 15072421
+chrIII 13783682
+chrM 13794
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/ce8.len
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/resources/assemblies/ce8.len Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,7 @@
+chrV 20924143
+chrX 17718854
+chrIV 17493784
+chrII 15279323
+chrI 15072421
+chrIII 13783685
+chrM 13794
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/ce9.len
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/resources/assemblies/ce9.len Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,7 @@
+chrV 20924143
+chrX 17718854
+chrIV 17493784
+chrII 15279323
+chrI 15072421
+chrIII 13783685
+chrM 13794
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/dm1.len
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/resources/assemblies/dm1.len Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,11 @@
+chr4 1237870
+chrU 8248647
+chrX 21780003
+chr2L 22217931
+chr2R 20302755
+chr2h 1651714
+chr3L 23352213
+chr3R 27890790
+chr3h 1961095
+chrXh 359526
+chrYh 321294
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/dm2.len
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/resources/assemblies/dm2.len Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,13 @@
+chr4 1281640
+chrM 19517
+chrU 8724946
+chrX 22224390
+chr2L 22407834
+chr2R 20766785
+chr2h 1694122
+chr3L 23771897
+chr3R 27905053
+chr3h 2955737
+chr4h 88110
+chrXh 359526
+chrYh 396896
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/dm3.len
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/resources/assemblies/dm3.len Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,15 @@
+chr2L 23011544
+chr2LHet 368872
+chr2R 21146708
+chr2RHet 3288761
+chr3L 24543557
+chr3LHet 2555491
+chr3R 27905053
+chr3RHet 2517507
+chr4 1351857
+chrU 10049037
+chrUextra 29004656
+chrX 22422827
+chrXHet 204112
+chrYHet 347038
+chrM 19517
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/hg15.len
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/resources/assemblies/hg15.len Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,44 @@
+chr1 245203898
+chr2 243315028
+chr3 199411731
+chr4 191610523
+chr5 180967295
+chr6 170740541
+chr7 158431299
+chr8 145908738
+chr9 134505819
+chrM 16571
+chrX 152634166
+chrY 50961097
+chr1_random 12562665
+chr2_random 1464032
+chr3_random 423185
+chr4_random 1219494
+chr6_random 12061844
+chr7_random 1057565
+chr8_random 427716
+chr9_random 2536476
+chrX_random 4859112
+chrY_random 191708
+chr10 135480874
+chr11 134978784
+chr12 133464434
+chr13 114151656
+chr14 105311216
+chr15 100114055
+chr16 89995999
+chr17 81691216
+chr18 77753510
+chr19 63790860
+chr20 63644868
+chr21 46976537
+chr22 49476972
+chr10_random 710249
+chr11_random 150110
+chr12_random 590431
+chr13_random 414659
+chr15_random 366089
+chr16_random 24360
+chr17_random 337440
+chr19_random 301858
+chrUn_random 611077
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/hg16.len
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/resources/assemblies/hg16.len Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,42 @@
+chr1 246127941
+chr2 243615958
+chr3 199344050
+chr4 191731959
+chr5 181034922
+chr6 170914576
+chr7 158545518
+chr8 146308819
+chr9 136372045
+chrM 16571
+chrX 153692391
+chrY 50286555
+chr1_random 6515988
+chr2_random 1104831
+chr3_random 749256
+chr4_random 648024
+chr5_random 143687
+chr6_random 2055751
+chr7_random 632637
+chr8_random 1499381
+chr9_random 2766341
+chrX_random 3403558
+chr10 135037215
+chr11 134482954
+chr12 132078379
+chr13 113042980
+chr14 105311216
+chr15 100256656
+chr16 90041932
+chr17 81860266
+chr18 76115139
+chr19 63811651
+chr20 63741868
+chr21 46976097
+chr22 49396972
+chr10_random 1043775
+chr13_random 189598
+chr15_random 1132826
+chr17_random 2549222
+chr18_random 4262
+chr19_random 92689
+chrUn_random 3349625
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/hg17.len
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/resources/assemblies/hg17.len Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,46 @@
+chr10 135413628
+chr10_random 113275
+chr11 134452384
+chr12 132449811
+chr12_random 466818
+chr13 114142980
+chr13_random 186858
+chr14 106368585
+chr15 100338915
+chr15_random 784346
+chr16 88827254
+chr16_random 105485
+chr17 78774742
+chr17_random 2618010
+chr18 76117153
+chr18_random 4262
+chr19 63811651
+chr19_random 301858
+chr1 245522847
+chr1_random 3897131
+chr20 62435964
+chr21 46944323
+chr22 49554710
+chr22_random 257318
+chr2 243018229
+chr2_random 418158
+chr3 199505740
+chr3_random 970716
+chr4 191411218
+chr4_random 1030282
+chr5 180857866
+chr5_random 143687
+chr6 170975699
+chr6_random 1875562
+chr6_hla_hap1 139182
+chr6_hla_hap2 150447
+chr7 158628139
+chr7_random 778964
+chr8 146274826
+chr8_random 943810
+chr9 138429268
+chr9_random 1312665
+chrM 16571
+chrX 154824264
+chrX_random 1719168
+chrY 57701691
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/hg18.len
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/resources/assemblies/hg18.len Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,49 @@
+chr1 247249719
+chr1_random 1663265
+chr10 135374737
+chr10_random 113275
+chr11 134452384
+chr11_random 215294
+chr12 132349534
+chr13 114142980
+chr13_random 186858
+chr14 106368585
+chr15 100338915
+chr15_random 784346
+chr16 88827254
+chr16_random 105485
+chr17 78774742
+chr17_random 2617613
+chr18 76117153
+chr18_random 4262
+chr19 63811651
+chr19_random 301858
+chr2 242951149
+chr2_random 185571
+chr20 62435964
+chr21 46944323
+chr21_random 1679693
+chr22 49691432
+chr22_random 257318
+chr22_h2_hap1 63661
+chr3 199501827
+chr3_random 749256
+chr4 191273063
+chr4_random 842648
+chr5 180857866
+chr5_random 143687
+chr5_h2_hap1 1794870
+chr6 170899992
+chr6_random 1875562
+chr6_cox_hap1 4731698
+chr6_qbl_hap2 4565931
+chr7 158821424
+chr7_random 549659
+chr8 146274826
+chr8_random 943810
+chr9 140273252
+chr9_random 1146434
+chrM 16571
+chrX 154913754
+chrX_random 1719168
+chrY 57772954
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/hg19.len
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/resources/assemblies/hg19.len Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,93 @@
+chr1 249250621
+chr2 243199373
+chr3 198022430
+chr4 191154276
+chr5 180915260
+chr6 171115067
+chr7 159138663
+chrX 155270560
+chr8 146364022
+chr9 141213431
+chr10 135534747
+chr11 135006516
+chr12 133851895
+chr13 115169878
+chr14 107349540
+chr15 102531392
+chr16 90354753
+chr17 81195210
+chr18 78077248
+chr20 63025520
+chrY 59373566
+chr19 59128983
+chr22 51304566
+chr21 48129895
+chr6_ssto_hap7 4928567
+chr6_mcf_hap5 4833398
+chr6_cox_hap2 4795371
+chr6_mann_hap4 4683263
+chr6_apd_hap1 4622290
+chr6_qbl_hap6 4611984
+chr6_dbb_hap3 4610396
+chr17_ctg5_hap1 1680828
+chr4_ctg9_hap1 590426
+chr1_gl000192_random 547496
+chrUn_gl000225 211173
+chr4_gl000194_random 191469
+chr4_gl000193_random 189789
+chr9_gl000200_random 187035
+chrUn_gl000222 186861
+chrUn_gl000212 186858
+chr7_gl000195_random 182896
+chrUn_gl000223 180455
+chrUn_gl000224 179693
+chrUn_gl000219 179198
+chr17_gl000205_random 174588
+chrUn_gl000215 172545
+chrUn_gl000216 172294
+chrUn_gl000217 172149
+chr9_gl000199_random 169874
+chrUn_gl000211 166566
+chrUn_gl000213 164239
+chrUn_gl000220 161802
+chrUn_gl000218 161147
+chr19_gl000209_random 159169
+chrUn_gl000221 155397
+chrUn_gl000214 137718
+chrUn_gl000228 129120
+chrUn_gl000227 128374
+chr1_gl000191_random 106433
+chr19_gl000208_random 92689
+chr9_gl000198_random 90085
+chr17_gl000204_random 81310
+chrUn_gl000233 45941
+chrUn_gl000237 45867
+chrUn_gl000230 43691
+chrUn_gl000242 43523
+chrUn_gl000243 43341
+chrUn_gl000241 42152
+chrUn_gl000236 41934
+chrUn_gl000240 41933
+chr17_gl000206_random 41001
+chrUn_gl000232 40652
+chrUn_gl000234 40531
+chr11_gl000202_random 40103
+chrUn_gl000238 39939
+chrUn_gl000244 39929
+chrUn_gl000248 39786
+chr8_gl000196_random 38914
+chrUn_gl000249 38502
+chrUn_gl000246 38154
+chr17_gl000203_random 37498
+chr8_gl000197_random 37175
+chrUn_gl000245 36651
+chrUn_gl000247 36422
+chr9_gl000201_random 36148
+chrUn_gl000235 34474
+chrUn_gl000239 33824
+chr21_gl000210_random 27682
+chrUn_gl000231 27386
+chrUn_gl000229 19913
+chrM 16571
+chrUn_gl000226 15008
+chr18_gl000207_random 4262
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/hg19Haps.len
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/resources/assemblies/hg19Haps.len Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,9 @@
+chr6_ssto_hap7 4928567
+chr6_mcf_hap5 4833398
+chr6_cox_hap2 4795371
+chr6_mann_hap4 4683263
+chr6_apd_hap1 4622290
+chr6_qbl_hap6 4611984
+chr6_dbb_hap3 4610396
+chr17_ctg5_hap1 1680828
+chr4_ctg9_hap1 590426
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/hg19Patch2.len
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/resources/assemblies/hg19Patch2.len Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,80 @@
+chr6_ssto_hap7 4928567
+chr6_mcf_hap5 4833398
+chr6_cox_hap2 4795371
+chr6_mann_hap4 4683263
+chr6_apd_hap1 4622290
+chr6_qbl_hap6 4611984
+chr6_dbb_hap3 4610396
+chr17_ctg5_hap1 1680828
+chr5_ctg1_gl339449 1620324
+chr4_ctg9_hap1 590426
+chr17_gl383560 534288
+chr17_gl383558 457041
+chr8_gl383535 429806
+chr17_gl383561 406963
+chr10_gl383543 392792
+chr15_ctg8_gl383555 388773
+chr19_ctg3_gl383573 385657
+chr4_ctg6_gl383528 376187
+chr1_ctg31_gl383520 366579
+chr17_gl383559 338640
+chr9_gl339450 330164
+chr10_ctg5_gl383546 309802
+chr15_ctg4_gl383554 296527
+chr18_ctg1_gl383567 289831
+chr17_ctg1_gl383563 270261
+chr17_ctg4_gl383565 223995
+chr8_gl383536 203777
+chr21_ctg1_gl383579 201198
+chr18_ctg2_gl383571 198278
+chr16_ctg3_gl383556 192462
+chr19_ctg3_gl383576 188024
+chr12_ctg5_gl383551 184319
+chr1_ctg31_gl383518 182439
+chr3_ctg2_gl383526 180671
+chr10_ctg2_gl383545 179254
+chr5_ctg5_gl383531 173459
+chr3_gl383523 171362
+chr9_ctg35_gl383541 171286
+chr19_ctg3_gl383575 170227
+chr12_ctg2_gl383550 169178
+chr18_ctg2_gl383569 167950
+chr12_gl383548 165247
+chr18_ctg1_gl383570 164789
+chr4_ctg12_gl383527 164536
+chr9_ctg1_gl383539 162988
+chr18_ctg2_gl383572 159547
+chr22_ctg1_gl383582 158507
+chr19_ctg3_gl383574 155864
+chr12_ctg2_gl383553 154881
+chr11_ctg1_gl383547 154407
+chr2_ctg1_gl383521 143390
+chr12_ctg2_gl383552 138655
+chr17_ctg4_gl383564 133151
+chr20_ctg1_gl383577 128385
+chr10_gl383544 128378
+chr6_ctg5_gl383533 124736
+chr2_ctg12_gl383522 123821
+chr4_ctg9_gl383529 121345
+chr12_ctg2_gl383549 120804
+chr7_ctg6_gl383534 119383
+chr21_ctg1_gl383581 116690
+chr1_ctg31_gl383519 110268
+chr18_ctg2_gl383568 104552
+chr5_ctg2_gl383530 101241
+chr22_ctg2_gl383583 96924
+chr17_ctg4_gl383566 90219
+chr16_ctg3_gl383557 89672
+chr5_ctg1_gl383532 82728
+chr3_gl383524 78793
+chr21_ctg1_gl383580 74652
+chr9_ctg35_gl383540 71551
+chr3_gl383525 65063
+chr21_ctg1_gl383578 63917
+chr9_gl383537 62435
+chr9_ctg35_gl383542 60032
+chr1_gl383517 49352
+chr1_gl383516 49316
+chr9_gl383538 49281
+chr17_gl383562 45551
+chrM_rCRS 16569
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/klac.len
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/resources/assemblies/klac.len Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,6 @@
+1 1062590
+2 1320834
+3 1753957
+4 1715506
+5 2234072
+6 2602197
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/kwal.len
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/resources/assemblies/kwal.len Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,459 @@
+0 2534
+1 125497
+2 14630
+3 14849
+4 21406
+5 143962
+6 27307
+7 88161
+8 132901
+9 16396
+10 8070
+11 186703
+12 36232
+13 51137
+14 15683
+15 19814
+16 24938
+17 58820
+18 38681
+19 5673
+20 23346
+21 4497
+22 41879
+23 29929
+24 38007
+25 7906
+26 32971
+27 213938
+28 44808
+29 35672
+30 18684
+31 57206
+32 39731
+33 128244
+34 41627
+35 25640
+36 83302
+37 18219
+38 7667
+39 19053
+40 3209
+41 26587
+42 27452
+43 129376
+44 73166
+45 12013
+46 86564
+47 106408
+48 11182
+49 9044
+50 17620
+51 17937
+52 12313
+53 13758
+54 21810
+55 238839
+56 2172
+57 2068
+58 24309
+59 27367
+60 19249
+61 49414
+62 2239
+63 9166
+64 3092
+65 5670
+66 2379
+67 89261
+68 119088
+69 16610
+70 68860
+71 7266
+72 40707
+73 49099
+74 3103
+75 15753
+76 37215
+77 9752
+78 2842
+79 3547
+80 8340
+81 2898
+82 26275
+83 1877
+84 7360
+85 10758
+86 12945
+87 2482
+88 1710
+89 10942
+90 2738
+91 4243
+92 4063
+93 4079
+94 95425
+95 1533
+96 26470
+97 1680
+98 8165
+99 1842
+100 10872
+101 72566
+102 41877
+103 25474
+104 80558
+105 89805
+106 18077
+107 7530
+108 62247
+109 3586
+110 8739
+111 2464
+112 12564
+113 4895
+114 68417
+115 2717
+116 36429
+117 33291
+118 43283
+119 32251
+120 6350
+121 27512
+122 3350
+123 92481
+124 139895
+125 7256
+126 69178
+127 2478
+128 65621
+129 16657
+130 116273
+131 4418
+132 42306
+133 2406
+134 7442
+135 34971
+136 5638
+137 25742
+138 24660
+139 33008
+140 12961
+141 3891
+142 11359
+143 4509
+144 14574
+145 12379
+146 1563
+147 14893
+148 40168
+149 38705
+150 11968
+151 8479
+152 45612
+153 41502
+154 3140
+155 7073
+156 9905
+157 20593
+158 4160
+159 193906
+160 62941
+161 118475
+162 6963
+163 22133
+164 16355
+165 75530
+166 54174
+167 1343
+168 12950
+169 3447
+170 2919
+171 62747
+172 18589
+173 35297
+174 21491
+175 27381
+176 72161
+177 20372
+178 2700
+179 3322
+180 14134
+181 28845
+182 12905
+183 95360
+184 183765
+185 88813
+186 33036
+187 8378
+188 85033
+189 25272
+190 55902
+191 32868
+192 15238
+193 7566
+194 18007
+195 55872
+196 40080
+197 67181
+198 33220
+199 2793
+200 3391
+201 3701
+202 26101
+203 3511
+204 59973
+205 19265
+206 71746
+207 60023
+208 13067
+209 16995
+210 23815
+211 28487
+212 33526
+213 3586
+214 8067
+215 40367
+216 6559
+217 4358
+218 20016
+219 49821
+220 4268
+223 1302
+224 93571
+225 50086
+226 2886
+227 52355
+228 16270
+229 17925
+230 23564
+231 18755
+232 31964
+233 1570
+234 2415
+235 14560
+236 1731
+237 81585
+238 28707
+239 17167
+240 2875
+241 25088
+242 31259
+243 26745
+244 154632
+245 115160
+246 72184
+247 33539
+248 57737
+249 14547
+250 33679
+251 31357
+252 103558
+253 45320
+254 49503
+255 143040
+256 2466
+257 4108
+258 2372
+259 1928
+260 167397
+261 15852
+262 1441
+263 1554
+264 2637
+265 24142
+266 3777
+267 7711
+268 18551
+269 4004
+270 8972
+271 26934
+272 87860
+273 19114
+274 30786
+275 9656
+278 8868
+279 3258
+280 21868
+281 1988
+282 4323
+283 1223
+284 2472
+285 6576
+286 5548
+287 3198
+288 4014
+289 9582
+290 162263
+291 2221
+292 1850
+293 1652
+294 20909
+295 17606
+296 2866
+297 1704
+298 9311
+299 1009
+301 4475
+303 9229
+304 1977
+305 11008
+311 23764
+312 4784
+313 1296
+314 4092
+316 8619
+317 2626
+318 2050
+319 1424
+320 5110
+322 6341
+323 4249
+324 1824
+325 1783
+326 6231
+327 5048
+328 4865
+329 1570
+330 3539
+331 13212
+332 1641
+333 5872
+334 5842
+335 5050
+336 43798
+337 1403
+338 1507
+339 2056
+340 1548
+341 1516
+343 2948
+344 93162
+345 10302
+346 1452
+347 4043
+348 2486
+349 2696
+350 1996
+351 6210
+352 747
+353 5694
+354 4998
+355 4074
+356 4769
+357 4339
+358 36291
+359 9937
+360 2677
+361 2847
+362 1661
+363 52128
+364 3720
+365 1654
+366 2713
+367 1250
+368 3279
+369 7143
+372 8172
+373 1057
+376 113992
+377 1076
+378 2288
+379 1144
+380 4811
+381 9891
+386 4220
+387 1417
+388 41838
+389 1218
+390 2234
+391 1105
+392 871
+393 3493
+394 1983
+395 1310
+396 28400
+397 919
+398 1362
+399 3442
+400 1525
+401 1671
+402 1120
+403 799
+404 1763
+405 1818
+406 1786
+407 1123
+408 1388
+409 839
+410 2870
+411 1955
+412 2189
+413 1100
+414 2057
+415 991
+416 3094
+417 3187
+418 1185
+419 3118
+420 1230
+421 1421
+422 1603
+423 1641
+424 1882
+425 1479
+426 4008
+427 1785
+428 2536
+429 1193
+430 2549
+431 1682
+432 3994
+433 1014
+434 745
+435 1117
+436 3520
+437 1677
+438 676
+439 2979
+440 1726
+441 5119
+442 5142
+443 935
+444 1354
+446 2597
+447 2611
+448 1179
+449 5365
+450 1259
+451 5395
+452 1972
+453 3195
+454 816
+455 7081
+456 1241
+457 21922
+458 1100
+459 927
+460 1100
+461 5552
+462 5577
+463 5460
+665 2006
+666 1381
+667 1781
+668 1407
+690 4541
+691 2971
+692 1226
+693 1100
+694 1218
+695 5394
+696 4542
+697 14183
+698 5428
+699 577
+700 2530
+710 16854
+711 2634
+712 5627
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/sacCer1.len
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/resources/assemblies/sacCer1.len Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,17 @@
+chr1 230208
+chr10 745446
+chr11 666445
+chr12 1078173
+chr13 924430
+chr14 784328
+chr15 1091285
+chr16 948060
+chr2 813136
+chr3 316613
+chr4 1531914
+chr5 576869
+chr6 270148
+chr7 1090944
+chr8 562639
+chr9 439885
+chrM 85779
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/sacCer2.len
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/resources/assemblies/sacCer2.len Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,18 @@
+chrIV 1531919
+chrXV 1091289
+chrVII 1090947
+chrXII 1078175
+chrXVI 948062
+chrXIII 924429
+chrII 813178
+chrXIV 784333
+chrX 745742
+chrXI 666454
+chrV 576869
+chrVIII 562643
+chrIX 439885
+chrIII 316617
+chrVI 270148
+chrI 230208
+chrM 85779
+2micron 6318
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/assemblies/sacCer3.len
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/resources/assemblies/sacCer3.len Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,17 @@
+chrI 230218
+chrII 813184
+chrIII 316620
+chrIV 1531933
+chrIX 439888
+chrV 576874
+chrVI 270161
+chrVII 1090940
+chrVIII 562643
+chrX 745751
+chrXI 666816
+chrXII 1078177
+chrXIII 924431
+chrXIV 784333
+chrXV 1091291
+chrXVI 948066
+chrM 85779
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/._add_icon.png
b
Binary file java-genomics-toolkit/resources/images/._add_icon.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/._add_icon_dark.png
b
Binary file java-genomics-toolkit/resources/images/._add_icon_dark.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/._arrow-circle.png
b
Binary file java-genomics-toolkit/resources/images/._arrow-circle.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/._beachball.png
b
Binary file java-genomics-toolkit/resources/images/._beachball.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/._bug.png
b
Binary file java-genomics-toolkit/resources/images/._bug.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/._delete_icon_dark.png
b
Binary file java-genomics-toolkit/resources/images/._delete_icon_dark.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/._delete_icon_grey.png
b
Binary file java-genomics-toolkit/resources/images/._delete_icon_grey.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/._eye_icon.png
b
Binary file java-genomics-toolkit/resources/images/._eye_icon.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/._eye_icon_dark.png
b
Binary file java-genomics-toolkit/resources/images/._eye_icon_dark.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/._eye_icon_grey.png
b
Binary file java-genomics-toolkit/resources/images/._eye_icon_grey.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/._folder.png
b
Binary file java-genomics-toolkit/resources/images/._folder.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/._folder_page.png
b
Binary file java-genomics-toolkit/resources/images/._folder_page.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/._icon_error_sml.gif
b
Binary file java-genomics-toolkit/resources/images/._icon_error_sml.gif has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/._icon_info_sml.gif
b
Binary file java-genomics-toolkit/resources/images/._icon_info_sml.gif has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/._icon_success_sml.gif
b
Binary file java-genomics-toolkit/resources/images/._icon_success_sml.gif has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/._icon_warning_sml.gif
b
Binary file java-genomics-toolkit/resources/images/._icon_warning_sml.gif has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/._information-white.png
b
Binary file java-genomics-toolkit/resources/images/._information-white.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/._mag_glass.png
b
Binary file java-genomics-toolkit/resources/images/._mag_glass.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/._osx-spinner.gif
b
Binary file java-genomics-toolkit/resources/images/._osx-spinner.gif has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/._pencil_icon.png
b
Binary file java-genomics-toolkit/resources/images/._pencil_icon.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/._pencil_icon_dark.png
b
Binary file java-genomics-toolkit/resources/images/._pencil_icon_dark.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/._pencil_icon_grey.png
b
Binary file java-genomics-toolkit/resources/images/._pencil_icon_grey.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/._sticky-note-text.png
b
Binary file java-genomics-toolkit/resources/images/._sticky-note-text.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/add_icon.png
b
Binary file java-genomics-toolkit/resources/images/add_icon.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/add_icon_dark.png
b
Binary file java-genomics-toolkit/resources/images/add_icon_dark.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/arrow-circle.png
b
Binary file java-genomics-toolkit/resources/images/arrow-circle.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/beachball.png
b
Binary file java-genomics-toolkit/resources/images/beachball.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/bug.png
b
Binary file java-genomics-toolkit/resources/images/bug.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/delete_icon_dark.png
b
Binary file java-genomics-toolkit/resources/images/delete_icon_dark.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/delete_icon_grey.png
b
Binary file java-genomics-toolkit/resources/images/delete_icon_grey.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/eye_icon.png
b
Binary file java-genomics-toolkit/resources/images/eye_icon.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/eye_icon_dark.png
b
Binary file java-genomics-toolkit/resources/images/eye_icon_dark.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/eye_icon_grey.png
b
Binary file java-genomics-toolkit/resources/images/eye_icon_grey.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/folder.png
b
Binary file java-genomics-toolkit/resources/images/folder.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/folder_page.png
b
Binary file java-genomics-toolkit/resources/images/folder_page.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/icon_error_sml.gif
b
Binary file java-genomics-toolkit/resources/images/icon_error_sml.gif has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/icon_info_sml.gif
b
Binary file java-genomics-toolkit/resources/images/icon_info_sml.gif has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/icon_success_sml.gif
b
Binary file java-genomics-toolkit/resources/images/icon_success_sml.gif has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/icon_warning_sml.gif
b
Binary file java-genomics-toolkit/resources/images/icon_warning_sml.gif has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/information-white.png
b
Binary file java-genomics-toolkit/resources/images/information-white.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/mag_glass.png
b
Binary file java-genomics-toolkit/resources/images/mag_glass.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/osx-spinner.gif
b
Binary file java-genomics-toolkit/resources/images/osx-spinner.gif has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/pencil_icon.png
b
Binary file java-genomics-toolkit/resources/images/pencil_icon.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/pencil_icon_dark.png
b
Binary file java-genomics-toolkit/resources/images/pencil_icon_dark.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/pencil_icon_grey.png
b
Binary file java-genomics-toolkit/resources/images/pencil_icon_grey.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/images/sticky-note-text.png
b
Binary file java-genomics-toolkit/resources/images/sticky-note-text.png has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/resources/toolConf.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/resources/toolConf.xml Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This is the tool configuration file for the ToolRunner GUI -->
+<tools>
+ <section name="Converters">
+ <tool name="IntervalToWig" class="edu.unc.genomics.converters.IntervalToWig" />
+ <tool name="RomanNumeralize" class="edu.unc.genomics.converters.RomanNumeralize" />
+ </section>
+
+ <section name="NGS">
+ <tool name="Autocorrelation" class="edu.unc.genomics.ngs.Autocorrelation" />
+ <tool name="BaseAlignCounts" class="edu.unc.genomics.ngs.BaseAlignCounts" />
+ <tool name="FindAbsoluteMaxima" class="edu.unc.genomics.ngs.FindAbsoluteMaxima" />
+ <tool name="IntervalLengthDistribution" class="edu.unc.genomics.ngs.IntervalLengthDistribution" />
+ <tool name="IntervalStats" class="edu.unc.genomics.ngs.IntervalStats" />
+ <tool name="PowerSpectrum" class="edu.unc.genomics.ngs.PowerSpectrum" />
+ <tool name="RollingReadLength" class="edu.unc.genomics.ngs.RollingReadLength" />
+ </section>
+
+ <section name="Nucleosomes">
+ <tool name="FindBoundaryNucleosomes" class="edu.unc.genomics.nucleosomes.FindBoundaryNucleosomes" />
+ <tool name="GreedyCaller" class="edu.unc.genomics.nucleosomes.GreedyCaller" />
+ <tool name="MapDyads" class="edu.unc.genomics.nucleosomes.MapDyads" />
+ <tool name="NRLCalculator" class="edu.unc.genomics.nucleosomes.NRLCalculator" />
+ <tool name="Phasogram" class="edu.unc.genomics.nucleosomes.Phasogram" />
+ </section>
+
+ <section name="Visualization">
+ <tool name="IntervalAverager" class="edu.unc.genomics.visualization.IntervalAverager" />
+ <tool name="KMeans" class="edu.unc.genomics.visualization.KMeans" />
+ <tool name="MatrixAligner" class="edu.unc.genomics.visualization.MatrixAligner" />
+ </section>
+
+ <section name="WigMath">
+ <tool name="Add" class="edu.unc.genomics.wigmath.Add" />
+ <tool name="Average" class="edu.unc.genomics.wigmath.Average" />
+ <tool name="Divide" class="edu.unc.genomics.wigmath.Divide" />
+ <tool name="GaussianSmooth" class="edu.unc.genomics.wigmath.GaussianSmooth" />
+ <tool name="LogTransform" class="edu.unc.genomics.wigmath.LogTransform" />
+ <tool name="MovingAverageSmooth" class="edu.unc.genomics.wigmath.MovingAverageSmooth" />
+ <tool name="Multiply" class="edu.unc.genomics.wigmath.Multiply" />
+ <tool name="Scale" class="edu.unc.genomics.wigmath.Scale" />
+ <tool name="Subtract" class="edu.unc.genomics.wigmath.Subtract" />
+ <tool name="WigSummary" class="edu.unc.genomics.wigmath.WigSummary" />
+ <tool name="ZScore" class="edu.unc.genomics.wigmath.ZScore" />
+ </section>
+</tools>
\ No newline at end of file
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/._edu
b
Binary file java-genomics-toolkit/src/._edu has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/._unc
b
Binary file java-genomics-toolkit/src/edu/._unc has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/._config
b
Binary file java-genomics-toolkit/src/edu/unc/._config has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/._genomics
b
Binary file java-genomics-toolkit/src/edu/unc/._genomics has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/._utils
b
Binary file java-genomics-toolkit/src/edu/unc/._utils has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/config/._GalaxyConfig.java
b
Binary file java-genomics-toolkit/src/edu/unc/config/._GalaxyConfig.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/config/GalaxyConfig.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/config/GalaxyConfig.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,42 @@
+package edu.unc.config;
+
+import java.io.IOException;
+import java.nio.file.Path;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.w3c.dom.Document;
+import org.xml.sax.SAXException;
+
+public class GalaxyConfig {
+
+ /**
+  * Parse a Galaxy configuration file
+  * @param p
+  * @return
+  * @throws ParserConfigurationException 
+  * @throws IOException 
+  * @throws SAXException 
+  */
+ public static GalaxyConfig parse(Path p) throws ParserConfigurationException, SAXException, IOException {
+ DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
+ Document doc = dBuilder.parse(p.toFile());
+ return parse(doc);
+ }
+
+ /**
+  * Parse a Galaxy configuration XML
+  * @param doc
+  * @return
+  */
+ public static GalaxyConfig parse(Document doc) {
+ GalaxyConfig config = new GalaxyConfig();
+
+ // TODO Implement parser
+
+ return config;
+ }
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/._AssemblyConverter.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/._AssemblyConverter.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/._AssemblyFactory.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/._AssemblyFactory.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/._CommandLineTool.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/._CommandLineTool.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/._CommandLineToolException.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/._CommandLineToolException.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/._IntervalFileConverter.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/._IntervalFileConverter.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/._IntervalFileFactory.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/._IntervalFileFactory.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/._PathConverter.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/._PathConverter.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/._PathFactory.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/._PathFactory.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/._PositiveIntegerValidator.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/._PositiveIntegerValidator.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/._ReadablePathValidator.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/._ReadablePathValidator.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/._WigFileConverter.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/._WigFileConverter.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/._WigFileFactory.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/._WigFileFactory.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/._converters
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/._converters has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/._ngs
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/._ngs has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/._nucleosomes
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/._nucleosomes has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/._visualization
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/._visualization has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/._wigmath
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/._wigmath has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/AssemblyConverter.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/AssemblyConverter.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,43 @@
+package edu.unc.genomics;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.zip.DataFormatException;
+
+import com.beust.jcommander.IStringConverter;
+import com.beust.jcommander.ParameterException;
+
+/**
+ * @author timpalpant
+ *
+ */
+public class AssemblyConverter implements IStringConverter<Assembly> {
+
+ public static final Path ASSEMBLIES_DIR = Paths.get("resources", "assemblies");
+
+ @Override
+ public Assembly convert(String value) throws ParameterException {
+ // Look for the assembly in the resources/assemblies directory
+ Path p = ASSEMBLIES_DIR.resolve(value+".len");
+
+ // If it does not exist in the assemblies directory, check if it is a path to a file
+ if (!Files.isReadable(p)) {
+ PathConverter converter = new PathConverter();
+ p = converter.convert(value);
+ // If it does not exist, then throw an exception that the assembly cannot be found
+ if (!Files.isReadable(p)) {
+ throw new ParameterException("Cannot find Assembly file: " + value);
+ }
+ }
+
+ // Attempt to load the assembly from file
+ try {
+ return new Assembly(p);
+ } catch (IOException | DataFormatException e) {
+ throw new ParameterException("Error loading Assembly from file: " + p);
+ }
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/AssemblyFactory.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/AssemblyFactory.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,26 @@
+/**
+ * 
+ */
+package edu.unc.genomics;
+
+import com.beust.jcommander.IStringConverterFactory;
+
+/**
+ * @author timpalpant
+ *
+ */
+public class AssemblyFactory implements IStringConverterFactory {
+
+ /* (non-Javadoc)
+  * @see com.beust.jcommander.IStringConverterFactory#getConverter(java.lang.Class)
+  */
+ @Override
+ public Class<AssemblyConverter> getConverter(Class forType) {
+ if (forType.equals(Assembly.class)) {
+ return AssemblyConverter.class;
+ } else {
+ return null;
+ }
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/CommandLineTool.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/CommandLineTool.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,73 @@
+package edu.unc.genomics;
+
+import java.io.IOException;
+
+import com.beust.jcommander.JCommander;
+import com.beust.jcommander.ParameterException;
+
+/**
+ * A command-line script
+ * @author timpalpant
+ *
+ */
+public abstract class CommandLineTool {
+
+ /**
+  * JCommander command-line argument parser
+  */
+ private final JCommander jc = new JCommander(this);
+
+ public CommandLineTool() {
+ // Add factories for parsing Paths, Assemblies, IntervalFiles, and WigFiles
+ jc.addConverterFactory(new PathFactory());
+ jc.addConverterFactory(new AssemblyFactory());
+ jc.addConverterFactory(new IntervalFileFactory());
+ jc.addConverterFactory(new WigFileFactory());
+
+ // Set the program name to be the class name
+ jc.setProgramName(this.getClass().getSimpleName());
+ }
+
+ /**
+  * The default bite-size to use for applications that process files in chunks
+  */
+ public static final int DEFAULT_CHUNK_SIZE = 500_000;
+
+ /**
+  * Do the main computation of this tool
+  * @throws IOException
+  */
+ public abstract void run() throws IOException;
+
+ /**
+  * Parse command-line arguments and run the tool
+  * Exit on parameter exceptions
+  * @param args
+  */
+ public void instanceMain(String[] args) throws CommandLineToolException {
+ try {
+ toolRunnerMain(args);
+ } catch (ParameterException e) {
+ System.err.println(e.getMessage());
+ jc.usage();
+ System.exit(-1);
+ }
+ }
+
+ /**
+  * Parse command-line arguments and run the tool
+  * @param args
+  * @throws ParameterException if there are invalid/missing parameters
+  * @throws CommandLineToolException if an exception occurs while running the tool
+  */
+ public void toolRunnerMain(String[] args) throws ParameterException, CommandLineToolException {
+ jc.parse(args);
+
+ try {
+ run();
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw new CommandLineToolException("IO error while running tool");
+ }
+ }
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/CommandLineToolException.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/CommandLineToolException.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,58 @@
+package edu.unc.genomics;
+
+/**
+ * @author timpalpant
+ *
+ */
+public class CommandLineToolException extends RuntimeException {
+
+ /**
+  * 
+  */
+ private static final long serialVersionUID = 4740440799806133636L;
+
+ /**
+  * 
+  */
+ public CommandLineToolException() {
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+  * @param message
+  */
+ public CommandLineToolException(String message) {
+ super(message);
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+  * @param cause
+  */
+ public CommandLineToolException(Throwable cause) {
+ super(cause);
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+  * @param message
+  * @param cause
+  */
+ public CommandLineToolException(String message, Throwable cause) {
+ super(message, cause);
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+  * @param message
+  * @param cause
+  * @param enableSuppression
+  * @param writableStackTrace
+  */
+ public CommandLineToolException(String message, Throwable cause,
+ boolean enableSuppression, boolean writableStackTrace) {
+ super(message, cause, enableSuppression, writableStackTrace);
+ // TODO Auto-generated constructor stub
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/IntervalFileConverter.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/IntervalFileConverter.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,28 @@
+package edu.unc.genomics;
+
+import java.io.IOException;
+import java.nio.file.Path;
+
+import com.beust.jcommander.IStringConverter;
+import com.beust.jcommander.ParameterException;
+
+import edu.unc.genomics.io.IntervalFile;
+
+/**
+ * @author timpalpant
+ *
+ */
+public class IntervalFileConverter implements IStringConverter<IntervalFile<? extends Interval>> {
+
+ @Override
+ public IntervalFile<? extends Interval> convert(String value) throws ParameterException {
+ PathConverter converter = new PathConverter();
+ Path p = converter.convert(value);
+ try {
+ return IntervalFile.autodetect(p);
+ } catch (IOException e) {
+ throw new ParameterException("IOException while attempting to autodetect interval file type");
+ }
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/IntervalFileFactory.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/IntervalFileFactory.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,25 @@
+package edu.unc.genomics;
+
+import com.beust.jcommander.IStringConverterFactory;
+
+import edu.unc.genomics.io.IntervalFile;
+
+/**
+ * @author timpalpant
+ *
+ */
+public class IntervalFileFactory implements IStringConverterFactory {
+
+ /* (non-Javadoc)
+  * @see com.beust.jcommander.IStringConverterFactory#getConverter(java.lang.Class)
+  */
+ @Override
+ public Class<IntervalFileConverter> getConverter(Class forType) {
+ if (forType.equals(IntervalFile.class)) {
+ return IntervalFileConverter.class;
+ } else {
+ return null;
+ }
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/PathConverter.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/PathConverter.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,19 @@
+package edu.unc.genomics;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import com.beust.jcommander.IStringConverter;
+
+/**
+ * @author timpalpant
+ *
+ */
+public class PathConverter implements IStringConverter<Path> {
+
+ @Override
+ public Path convert(String value) {
+ return Paths.get(value);
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/PathFactory.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/PathFactory.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,27 @@
+/**
+ * 
+ */
+package edu.unc.genomics;
+
+import java.nio.file.Path;
+
+import com.beust.jcommander.IStringConverterFactory;
+
+/**
+ * @author timpalpant
+ *
+ */
+public class PathFactory implements IStringConverterFactory {
+ /* (non-Javadoc)
+  * @see com.beust.jcommander.IStringConverterFactory#getConverter(java.lang.Class)
+  */
+ @Override
+ public Class<PathConverter> getConverter(Class forType) {
+ if (forType.equals(Path.class)) {
+ return PathConverter.class;
+ } else {
+ return null;
+ }
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/PositiveIntegerValidator.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/PositiveIntegerValidator.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,23 @@
+package edu.unc.genomics;
+
+import com.beust.jcommander.IParameterValidator;
+import com.beust.jcommander.ParameterException;
+
+/**
+ * @author timpalpant
+ *
+ */
+public class PositiveIntegerValidator implements IParameterValidator {
+
+ /* (non-Javadoc)
+  * @see com.beust.jcommander.IParameterValidator#validate(java.lang.String, java.lang.String)
+  */
+ @Override
+ public void validate(String name, String value) throws ParameterException {
+ int n = Integer.parseInt(value);
+ if (n <= 0) {
+ throw new ParameterException("Parameter "+name+" must be > 0 (was "+value+")");
+ }
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/ReadablePathValidator.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/ReadablePathValidator.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,30 @@
+/**
+ * 
+ */
+package edu.unc.genomics;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+import com.beust.jcommander.IParameterValidator;
+import com.beust.jcommander.ParameterException;
+
+/**
+ * @author timpalpant
+ *
+ */
+public class ReadablePathValidator implements IParameterValidator {
+
+ /* (non-Javadoc)
+  * @see com.beust.jcommander.IParameterValidator#validate(java.lang.String, java.lang.String)
+  */
+ @Override
+ public void validate(String name, String value) throws ParameterException {
+ PathConverter converter = new PathConverter();
+ Path p = converter.convert(value);
+ if (!Files.isReadable(p)) {
+ throw new ParameterException("Parameter " + name + " should be a readable file");
+ }
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/WigFileConverter.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/WigFileConverter.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,29 @@
+package edu.unc.genomics;
+
+import java.io.IOException;
+import java.nio.file.Path;
+
+import com.beust.jcommander.IStringConverter;
+import com.beust.jcommander.ParameterException;
+
+import edu.unc.genomics.io.WigFile;
+import edu.unc.genomics.io.WigFileException;
+
+/**
+ * @author timpalpant
+ *
+ */
+public class WigFileConverter implements IStringConverter<WigFile> {
+
+ @Override
+ public WigFile convert(String value) throws ParameterException {
+ PathConverter converter = new PathConverter();
+ Path p = converter.convert(value);
+ try {
+ return WigFile.autodetect(p);
+ } catch (WigFileException | IOException e) {
+ throw new ParameterException("Error autodetecting and initializing BigWig/Wig file");
+ }
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/WigFileFactory.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/WigFileFactory.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,25 @@
+package edu.unc.genomics;
+
+import com.beust.jcommander.IStringConverterFactory;
+
+import edu.unc.genomics.io.WigFile;
+
+/**
+ * @author timpalpant
+ *
+ */
+public class WigFileFactory implements IStringConverterFactory {
+
+ /* (non-Javadoc)
+  * @see com.beust.jcommander.IStringConverterFactory#getConverter(java.lang.Class)
+  */
+ @Override
+ public Class<WigFileConverter> getConverter(Class forType) {
+ if (forType.equals(WigFile.class)) {
+ return WigFileConverter.class;
+ } else {
+ return null;
+ }
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/converters/._IntervalToWig.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/converters/._IntervalToWig.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/converters/._RomanNumeralize.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/converters/._RomanNumeralize.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/converters/IntervalToWig.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/converters/IntervalToWig.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,91 @@
+package edu.unc.genomics.converters;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Iterator;
+
+import org.apache.log4j.Logger;
+
+import com.beust.jcommander.Parameter;
+
+import edu.ucsc.genome.TrackHeader;
+import edu.unc.genomics.Assembly;
+import edu.unc.genomics.Interval;
+import edu.unc.genomics.CommandLineTool;
+import edu.unc.genomics.ValuedInterval;
+import edu.unc.genomics.io.IntervalFile;
+
+public class IntervalToWig extends CommandLineTool {
+
+ private static final Logger log = Logger.getLogger(IntervalToWig.class);
+
+ @Parameter(names = {"-i", "--input"}, description = "Input file (Bed/BedGraph)", required = true)
+ public IntervalFile<? extends Interval> intervalFile;
+ @Parameter(names = {"-a", "--assembly"}, description = "Genome assembly", required = true)
+ public Assembly assembly;
+ @Parameter(names = {"-o", "--output"}, description = "Output file (Wig)", required = true)
+ public Path outputFile;
+
+ @Override
+ public void run() throws IOException {
+ log.info(intervalFile.count() + " entries in input");
+
+ log.debug("Initializing output file");
+ try (BufferedWriter writer = Files.newBufferedWriter(outputFile, Charset.defaultCharset())) {
+ // Write the Wiggle track header to the output file
+ TrackHeader header = new TrackHeader("wiggle_0");
+ header.setName("Converted " + intervalFile.getPath().getFileName());
+ header.setDescription("Converted " + intervalFile.getPath().getFileName());
+ writer.write(header.toString());
+ writer.newLine();
+
+ // Process each chromosome in the assembly
+ for (String chr : assembly) {
+ log.debug("Processing chromosome " + chr);
+ // Write the contig header to the output file
+ writer.write("fixedStep chrom="+chr+" start=1 step=1 span=1");
+ writer.newLine();
+
+ int start = 1;
+ while (start < assembly.getChrLength(chr)) {
+ int stop = start + DEFAULT_CHUNK_SIZE - 1;
+ int length = stop - start + 1;
+ int[] count = new int[length];
+ float[] sum = new float[length];
+
+ Iterator<? extends Interval> it = intervalFile.query(chr, start, stop);
+ while (it.hasNext()) {
+ ValuedInterval entry = (ValuedInterval) it.next();
+ if (entry.getValue() != null) {
+ for (int i = entry.getStart(); i <= entry.getStop(); i++) {
+ sum[i-start] += entry.getValue().floatValue();
+ count[i-start]++;
+ }
+ }
+ }
+
+ // Write the average at each base pair to the output file
+ for (int i = 0; i < sum.length; i++) {
+ if (count[i] == 0) {
+ writer.write(String.valueOf(Float.NaN));
+ } else {
+ writer.write(String.valueOf(sum[i]/count[i]));
+ }
+ writer.newLine();
+ }
+
+ // Process the next chunk
+ start = stop + 1;
+ }
+ }
+ }
+ }
+
+ public static void main(String[] args) {
+ new IntervalToWig().instanceMain(args);
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/converters/RomanNumeralize.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/converters/RomanNumeralize.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,61 @@
+package edu.unc.genomics.converters;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.log4j.Logger;
+
+import com.beust.jcommander.Parameter;
+
+import edu.unc.genomics.CommandLineTool;
+import edu.unc.genomics.ReadablePathValidator;
+import edu.unc.utils.RomanNumeral;
+
+public class RomanNumeralize extends CommandLineTool {
+
+ private static final Logger log = Logger.getLogger(RomanNumeralize.class);
+
+ @Parameter(names = {"-i", "--input"}, description = "Input file", required = true, validateWith = ReadablePathValidator.class)
+ public Path inputFile;
+ @Parameter(names = {"-o", "--output"}, description = "Output file", required = true)
+ public Path outputFile;
+
+ /**
+  * Pattern for finding "chr12" tokens (will find "chr1" through "chr99")
+  */
+ Pattern p = Pattern.compile("/chr[\\d]{1,2}/i");
+
+ @Override
+ public void run() throws IOException {
+ try (BufferedReader reader = Files.newBufferedReader(inputFile, Charset.defaultCharset());
+  BufferedWriter writer = Files.newBufferedWriter(outputFile, Charset.defaultCharset())) {
+ log.debug("Copying input to output and replacing with Roman Numerals");
+ String line;
+ while ((line = reader.readLine()) != null) {
+ Matcher m = p.matcher(line);
+ StringBuffer converted = new StringBuffer(line.length());
+ while (m.find()) {
+ String chrNum = line.substring(m.start()+3, m.end());
+ int arabic = Integer.parseInt(chrNum);
+ String roman = RomanNumeral.int2roman(arabic);
+ m.appendReplacement(converted, "chr"+roman);
+ }
+ m.appendTail(converted);
+
+ writer.write(converted.toString());
+ writer.newLine();
+ }
+ }
+ }
+
+ public static void main(String[] args) {
+ new RomanNumeralize().instanceMain(args);
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/ngs/._Autocorrelation.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/ngs/._Autocorrelation.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/ngs/._BaseAlignCounts.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/ngs/._BaseAlignCounts.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/ngs/._FindAbsoluteMaxima.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/ngs/._FindAbsoluteMaxima.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/ngs/._IntervalLengthDistribution.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/ngs/._IntervalLengthDistribution.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/ngs/._IntervalStats.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/ngs/._IntervalStats.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/ngs/._PowerSpectrum.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/ngs/._PowerSpectrum.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/ngs/._RollingReadLength.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/ngs/._RollingReadLength.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/ngs/Autocorrelation.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/ngs/Autocorrelation.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,84 @@
+package edu.unc.genomics.ngs;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Iterator;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.log4j.Logger;
+import org.broad.igv.bbfile.WigItem;
+
+import com.beust.jcommander.Parameter;
+
+import edu.emory.mathcs.jtransforms.fft.FloatFFT_1D;
+import edu.unc.genomics.CommandLineTool;
+import edu.unc.genomics.Interval;
+import edu.unc.genomics.PositiveIntegerValidator;
+import edu.unc.genomics.io.IntervalFile;
+import edu.unc.genomics.io.WigFile;
+import edu.unc.genomics.io.WigFileException;
+
+public class Autocorrelation extends CommandLineTool {
+
+ private static final Logger log = Logger.getLogger(Autocorrelation.class);
+
+ @Parameter(names = {"-i", "--input"}, description = "Input file", required = true)
+ public WigFile wig;
+ @Parameter(names = {"-l", "--loci"}, description = "Genomic loci (Bed format)", required = true)
+ public IntervalFile<? extends Interval> loci;
+ @Parameter(names = {"-o", "--output"}, description = "Output file", required = true)
+ public Path outputFile;
+ @Parameter(names = {"-m", "--max"}, description = "Autocorrelation limit (bp)", validateWith = PositiveIntegerValidator.class)
+ public int limit = 200;
+
+ private void abs2(float[] data) {
+ for (int i = 0; i < data.length; i+=2) {
+ data[i] = data[i]*data[i] + data[i+1]*data[i+1];
+ data[i+1] = 0;
+ }
+ }
+
+ @Override
+ public void run() throws IOException {
+ try (BufferedWriter writer = Files.newBufferedWriter(outputFile, Charset.defaultCharset())) {
+ log.debug("Computing autocorrelation for each window");
+ int skipped = 0;
+ for (Interval interval : loci) {
+ if (interval.length() < limit) {
+ log.debug("Skipping interval: " + interval.toString());
+ skipped++;
+ continue;
+ }
+
+ Iterator<WigItem> wigIter;
+ try {
+ wigIter = wig.query(interval);
+ } catch (IOException | WigFileException e) {
+ log.debug("Skipping interval: " + interval.toString());
+ skipped++;
+ continue;
+ }
+
+ float[] data = WigFile.flattenData(wigIter, interval.getStart(), interval.getStop());
+
+ // Compute the autocorrelation with the Wiener-Khinchin theorem
+ FloatFFT_1D fft = new FloatFFT_1D(data.length);
+ fft.realForward(data);
+ abs2(data);
+ fft.realInverse(data, true);
+
+ writer.write(StringUtils.join(data, "\t"));
+ writer.newLine();
+ }
+
+ log.info("Skipped " + skipped + " intervals");
+ }
+ }
+
+ public static void main(String[] args) {
+ new Autocorrelation().instanceMain(args);
+ }
+}
\ No newline at end of file
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/ngs/BaseAlignCounts.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/ngs/BaseAlignCounts.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,94 @@
+package edu.unc.genomics.ngs;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Iterator;
+
+import org.apache.log4j.Logger;
+
+import com.beust.jcommander.Parameter;
+
+import edu.ucsc.genome.TrackHeader;
+import edu.unc.genomics.Assembly;
+import edu.unc.genomics.CommandLineTool;
+import edu.unc.genomics.Interval;
+import edu.unc.genomics.io.IntervalFile;
+
+public class BaseAlignCounts extends CommandLineTool {
+
+ private static final Logger log = Logger.getLogger(BaseAlignCounts.class);
+
+ @Parameter(names = {"-i", "--input"}, description = "Input file (reads)", required = true)
+ public IntervalFile<? extends Interval> intervalFile;
+ @Parameter(names = {"-a", "--assembly"}, description = "Genome assembly", required = true)
+ public Assembly assembly;
+ @Parameter(names = {"-x", "--extend"}, description = "Extend reads from 5' end (default = read length)")
+ public Integer extend;
+ @Parameter(names = {"-o", "--output"}, description = "Output file (Wig)", required = true)
+ public Path outputFile;
+
+ @Override
+ public void run() throws IOException {
+ log.debug("Initializing output file");
+ int mapped = 0;
+ try (BufferedWriter writer = Files.newBufferedWriter(outputFile, Charset.defaultCharset())) {
+ // Write the Wiggle track header to the output file
+ TrackHeader header = new TrackHeader("wiggle_0");
+ header.setName("Converted " + intervalFile.getPath().getFileName());
+ header.setDescription("Converted " + intervalFile.getPath().getFileName());
+ writer.write(header.toString());
+ writer.newLine();
+
+ // Process each chromosome in the assembly
+ for (String chr : assembly) {
+ log.debug("Processing chromosome " + chr);
+ // Write the contig header to the output file
+ writer.write("fixedStep chrom="+chr+" start=1 step=1 span=1");
+ writer.newLine();
+
+ int start = 1;
+ while (start < assembly.getChrLength(chr)) {
+ int stop = start + DEFAULT_CHUNK_SIZE - 1;
+ int length = stop - start + 1;
+ int[] count = new int[length];
+
+ Iterator<? extends Interval> it = intervalFile.query(chr, start, stop);
+ while (it.hasNext()) {
+ Interval entry = it.next();
+ int entryStop = entry.getStop();
+ if (extend != null) {
+ if (entry.isWatson()) {
+ entryStop = entry.getStart() + extend;
+ } else {
+ entryStop = entry.getStart() - extend;
+ }
+ }
+
+ for (int i = entry.getStart(); i <= entryStop; i++) {
+ count[i-start]++;
+ }
+ mapped++;
+ }
+
+ // Write the count at each base pair to the output file
+ for (int i = 0; i < count.length; i++) {
+ writer.write(count[i]);
+ writer.newLine();
+ }
+
+ // Process the next chunk
+ start = stop + 1;
+ }
+ }
+ }
+
+ log.info("Mapped "+mapped+" reads");
+ }
+
+ public static void main(String[] args) {
+ new BaseAlignCounts().instanceMain(args);
+ }
+}
\ No newline at end of file
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/ngs/FindAbsoluteMaxima.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/ngs/FindAbsoluteMaxima.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,99 @@
+package edu.unc.genomics.ngs;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.broad.igv.bbfile.WigItem;
+
+import com.beust.jcommander.Parameter;
+
+import edu.unc.genomics.CommandLineTool;
+import edu.unc.genomics.Interval;
+import edu.unc.genomics.io.IntervalFile;
+import edu.unc.genomics.io.WigFile;
+import edu.unc.genomics.io.WigFileException;
+
+public class FindAbsoluteMaxima extends CommandLineTool {
+
+ private static final Logger log = Logger.getLogger(FindAbsoluteMaxima.class);
+
+ @Parameter(description = "Input files", required = true)
+ public List<String> inputFiles = new ArrayList<String>();
+ @Parameter(names = {"-l", "--loci"}, description = "Loci file (Bed)", required = true)
+ public IntervalFile<? extends Interval> lociFile;
+ @Parameter(names = {"-o", "--output"}, description = "Output file", required = true)
+ public Path outputFile;
+
+ private List<WigFile> wigs = new ArrayList<>();
+
+ @Override
+ public void run() throws IOException {
+ log.debug("Initializing input Wig file(s)");
+ for (String inputFile : inputFiles) {
+ try {
+ WigFile wig = WigFile.autodetect(Paths.get(inputFile));
+ wigs.add(wig);
+ } catch (WigFileException e) {
+ log.error("Error initializing Wig input file: " + inputFile);
+ e.printStackTrace();
+ throw new RuntimeException("Error initializing Wig input file: " + inputFile);
+ }
+ }
+
+ log.debug("Initializing output file");
+ int count = 0, skipped = 0;
+ try (BufferedWriter writer = Files.newBufferedWriter(outputFile, Charset.defaultCharset())) {
+ writer.write("#Chr\tStart\tStop\tID\tValue\tStrand");
+ for (String inputFile : inputFiles) {
+ Path p = Paths.get(inputFile);
+ writer.write("\t" + p.getFileName().toString());
+ }
+ writer.newLine();
+
+ log.debug("Iterating over all intervals and finding maxima");
+ for (Interval interval : lociFile) {
+ writer.write(interval.toBed());
+ for (WigFile wig : wigs) {
+ float maxValue = -Float.MAX_VALUE;
+ int maxima = -1;
+ try {
+ Iterator<WigItem> results = wig.query(interval);
+ while (results.hasNext()) {
+ WigItem item = results.next();
+ if (item.getWigValue() > maxValue) {
+ maxValue = item.getWigValue();
+ maxima = (item.getStartBase() + item.getEndBase()) / 2;
+ }
+ }
+ writer.write("\t" + maxima);
+ } catch (WigFileException e) {
+ writer.write("\t" + Float.NaN);
+ skipped++;
+ }
+ }
+ writer.newLine();
+ count++;
+ }
+ }
+
+ lociFile.close();
+ for (WigFile wig : wigs) {
+ wig.close();
+ }
+ log.info(count + " intervals processed");
+ log.info(skipped + " interval skipped");
+ }
+
+ public static void main(String[] args) {
+ new FindAbsoluteMaxima().instanceMain(args);
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/ngs/IntervalLengthDistribution.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/ngs/IntervalLengthDistribution.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,59 @@
+package edu.unc.genomics.ngs;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+import org.apache.commons.math.stat.Frequency;
+import org.apache.log4j.Logger;
+
+import com.beust.jcommander.Parameter;
+
+import edu.unc.genomics.CommandLineTool;
+import edu.unc.genomics.Interval;
+import edu.unc.genomics.io.IntervalFile;
+
+public class IntervalLengthDistribution extends CommandLineTool {
+
+ private static final Logger log = Logger.getLogger(IntervalLengthDistribution.class);
+
+ @Parameter(names = {"-i", "--input"}, description = "Interval file", required = true)
+ public IntervalFile<? extends Interval> inputFile;
+ @Parameter(names = {"-o", "--output"}, description = "Output file", required = true)
+ public Path outputFile;
+
+
+ @Override
+ public void run() throws IOException {
+ log.debug("Generating histogram of interval lengths");
+ Frequency freq = new Frequency();
+ int min = Integer.MAX_VALUE;
+ int max = -1;
+ for (Interval i : inputFile) {
+ int L = i.length();
+ freq.addValue(L);
+
+ if (L < min) {
+ min = L;
+ }
+ if (L > max) {
+ max = L;
+ }
+ }
+
+ log.debug("Writing histogram output");
+ try (BufferedWriter writer = Files.newBufferedWriter(outputFile, Charset.defaultCharset())) {
+ for (int i = min; i <= max; i++) {
+ writer.write(i+"\t"+freq.getCount(i));
+ writer.newLine();
+ }
+ }
+ }
+
+ public static void main(String[] args) {
+ new IntervalLengthDistribution().instanceMain(args);
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/ngs/IntervalStats.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/ngs/IntervalStats.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,102 @@
+package edu.unc.genomics.ngs;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.math.stat.descriptive.SummaryStatistics;
+import org.apache.log4j.Logger;
+import org.broad.igv.bbfile.WigItem;
+
+import com.beust.jcommander.Parameter;
+
+import edu.unc.genomics.CommandLineTool;
+import edu.unc.genomics.Interval;
+import edu.unc.genomics.io.IntervalFile;
+import edu.unc.genomics.io.WigFile;
+import edu.unc.genomics.io.WigFileException;
+
+public class IntervalStats extends CommandLineTool {
+
+ private static final Logger log = Logger.getLogger(IntervalStats.class);
+
+ @Parameter(description = "Input files", required = true)
+ public List<String> inputFiles = new ArrayList<String>();
+ @Parameter(names = {"-l", "--loci"}, description = "Loci file (Bed)", required = true)
+ public IntervalFile<? extends Interval> lociFile;
+ @Parameter(names = {"-o", "--output"}, description = "Output file", required = true)
+ public Path outputFile;
+
+ private List<WigFile> wigs = new ArrayList<>();
+
+ @Override
+ public void run() throws IOException {
+ log.debug("Initializing input Wig file(s)");
+ for (String inputFile : inputFiles) {
+ try {
+ WigFile wig = WigFile.autodetect(Paths.get(inputFile));
+ wigs.add(wig);
+ } catch (WigFileException e) {
+ log.error("Error initializing Wig input file: " + inputFile);
+ e.printStackTrace();
+ throw new RuntimeException("Error initializing Wig input file: " + inputFile);
+ }
+ }
+
+ log.debug("Initializing output file");
+ int count = 0, skipped = 0;
+ try (BufferedWriter writer = Files.newBufferedWriter(outputFile, Charset.defaultCharset())) {
+ writer.write("#Chr\tStart\tStop\tID\tValue\tStrand");
+ for (String inputFile : inputFiles) {
+ Path p = Paths.get(inputFile);
+ writer.write("\t" + p.getFileName().toString());
+ }
+ writer.newLine();
+
+ log.debug("Iterating over all intervals and computing statistics");
+ SummaryStatistics stats = new SummaryStatistics();
+ for (Interval interval : lociFile) {
+ List<Double> means = new ArrayList<>(wigs.size());
+ for (WigFile wig : wigs) {
+ stats.clear();
+ try {
+ Iterator<WigItem> result = wig.query(interval);
+ while(result.hasNext()) {
+ WigItem item = result.next();
+ for (int i = item.getStartBase(); i <= item.getEndBase(); i++) {
+ stats.addValue(item.getWigValue());
+ }
+ }
+ means.add(stats.getMean());
+ } catch (WigFileException e) {
+ means.add(Double.NaN);
+ skipped++;
+ }
+ }
+
+ writer.write(interval.toBed() + "\t" + StringUtils.join(means, "\t"));
+ writer.newLine();
+ count++;
+ }
+ }
+
+ lociFile.close();
+ for (WigFile wig : wigs) {
+ wig.close();
+ }
+ log.info(count + " intervals processed");
+ log.info(skipped + " interval skipped");
+ }
+
+ public static void main(String[] args) {
+ new IntervalStats().instanceMain(args);
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/ngs/PowerSpectrum.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/ngs/PowerSpectrum.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,106 @@
+package edu.unc.genomics.ngs;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Iterator;
+
+import org.apache.log4j.Logger;
+import org.broad.igv.bbfile.WigItem;
+
+import com.beust.jcommander.Parameter;
+
+import edu.emory.mathcs.jtransforms.fft.FloatFFT_1D;
+import edu.unc.genomics.CommandLineTool;
+import edu.unc.genomics.Interval;
+import edu.unc.genomics.io.IntervalFile;
+import edu.unc.genomics.io.WigFile;
+import edu.unc.genomics.io.WigFileException;
+
+public class PowerSpectrum extends CommandLineTool {
+
+ private static final Logger log = Logger.getLogger(PowerSpectrum.class);
+
+ @Parameter(names = {"-i", "--input"}, description = "Input file (Wig)", required = true)
+ public WigFile inputFile;
+ @Parameter(names = {"-l", "--loci"}, description = "Genomic loci (Bed format)", required = true)
+ public IntervalFile<? extends Interval> loci;
+ @Parameter(names = {"-o", "--output"}, description = "Output file (tabular)", required = true)
+ public Path outputFile;
+
+ /**
+  * Computes the power spectrum from FFT data
+  * taking into accound even/odd length arrays
+  * refer to JTransforms documentation for layout of the FFT data
+  * @param f
+  * @return
+  */
+ private float[] abs2(float[] f) {
+ int n = f.length;
+ float[] ps = new float[n/2+1];
+ // DC component
+ ps[0] = (f[0]*f[0]) / (n*n); 
+
+ // Even
+ if (n % 2 == 0) {
+ for (int k = 1; k < n/2; k++) {
+ ps[k] = f[2*k]*f[2*k] + f[2*k+1]*f[2*k+1];
+ }
+ ps[n/2] = f[1]*f[1];
+ // Odd
+ } else {
+ for (int k = 1; k < (n-1)/2; k++) {
+ ps[k] = f[2*k]*f[2*k] + f[2*k+1]*f[2*k+1];
+ }
+
+ ps[(n-1)/2] = f[n-1]*f[n-1] + f[1]*f[1];
+ }
+
+ return ps;
+ }
+
+ public void run() throws IOException {
+ try (BufferedWriter writer = Files.newBufferedWriter(outputFile, Charset.defaultCharset())) {
+ log.debug("Computing power spectrum for each window");
+ int skipped = 0;
+ for (Interval interval : loci) {
+ Iterator<WigItem> wigIter;
+ try {
+ wigIter = inputFile.query(interval);
+ } catch (IOException | WigFileException e) {
+ log.debug("Skipping interval: " + interval.toString());
+ skipped++;
+ continue;
+ }
+
+ float[] data = WigFile.flattenData(wigIter, interval.getStart(), interval.getStop());
+ // Compute the power spectrum
+ FloatFFT_1D fft = new FloatFFT_1D(data.length);
+ fft.realForward(data);
+ float[] ps = abs2(data);
+ // and normalize the power spectrum
+ float sum = 0;
+ for (int i = 1; i < ps.length; i++) {
+ sum += ps[i];
+ }
+ for (int i = 1; i < ps.length; i++) {
+ ps[i] /= sum;
+ }
+
+ writer.write(interval.toBed());
+ for (int i = 1; i < Math.min(ps.length, 40); i++) {
+ writer.write("\t"+ps[i]);
+ }
+ writer.newLine();
+ }
+
+ log.info("Skipped " + skipped + " intervals");
+ }
+ }
+
+ public static void main(String[] args) {
+ new PowerSpectrum().instanceMain(args);
+ }
+}
\ No newline at end of file
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/ngs/RollingReadLength.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/ngs/RollingReadLength.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,89 @@
+package edu.unc.genomics.ngs;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Iterator;
+
+import org.apache.log4j.Logger;
+
+import com.beust.jcommander.Parameter;
+
+import edu.ucsc.genome.TrackHeader;
+import edu.unc.genomics.Assembly;
+import edu.unc.genomics.CommandLineTool;
+import edu.unc.genomics.Interval;
+import edu.unc.genomics.io.IntervalFile;
+
+public class RollingReadLength extends CommandLineTool {
+
+ private static final Logger log = Logger.getLogger(RollingReadLength.class);
+
+ @Parameter(names = {"-i", "--input"}, description = "Input file (reads)", required = true)
+ public IntervalFile<? extends Interval> intervalFile;
+ @Parameter(names = {"-a", "--assembly"}, description = "Genome assembly", required = true)
+ public Assembly assembly;
+ @Parameter(names = {"-o", "--output"}, description = "Output file (Wig)", required = true)
+ public Path outputFile;
+
+ @Override
+ public void run() throws IOException {
+ log.debug("Initializing output file");
+ int mapped = 0;
+ try (BufferedWriter writer = Files.newBufferedWriter(outputFile, Charset.defaultCharset())) {
+ // Write the Wiggle track header to the output file
+ TrackHeader header = new TrackHeader("wiggle_0");
+ header.setName("Converted " + intervalFile.getPath().getFileName());
+ header.setDescription("Converted " + intervalFile.getPath().getFileName());
+ writer.write(header.toString());
+ writer.newLine();
+
+ // Process each chromosome in the assembly
+ for (String chr : assembly) {
+ log.debug("Processing chromosome " + chr);
+ // Write the contig header to the output file
+ writer.write("fixedStep chrom="+chr+" start=1 step=1 span=1");
+ writer.newLine();
+
+ int start = 1;
+ while (start < assembly.getChrLength(chr)) {
+ int stop = start + DEFAULT_CHUNK_SIZE - 1;
+ int length = stop - start + 1;
+ int[] sum = new int[length];
+ int[] count = new int[length];
+
+ Iterator<? extends Interval> it = intervalFile.query(chr, start, stop);
+ while (it.hasNext()) {
+ Interval entry = it.next();
+ for (int i = entry.getStart(); i <= entry.getStop(); i++) {
+ sum[i-start] += entry.length();
+ count[i-start]++;
+ }
+ mapped++;
+ }
+
+ // Write the average at each base pair to the output file
+ for (int i = 0; i < sum.length; i++) {
+ if (count[i] == 0) {
+ writer.write(String.valueOf(Float.NaN));
+ } else {
+ writer.write(String.valueOf(sum[i]/count[i]));
+ }
+ writer.newLine();
+ }
+
+ // Process the next chunk
+ start = stop + 1;
+ }
+ }
+ }
+
+ log.info("Mapped "+mapped+" reads");
+ }
+
+ public static void main(String[] args) {
+ new RollingReadLength().instanceMain(args);
+ }
+}
\ No newline at end of file
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/._FindBoundaryNucleosomes.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/._FindBoundaryNucleosomes.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/._GreedyCaller.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/._GreedyCaller.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/._MapDyads.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/._MapDyads.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/._NRLCalculator.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/._NRLCalculator.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/._NucleosomeCall.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/._NucleosomeCall.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/._NucleosomeCallsFile.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/._NucleosomeCallsFile.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/._Phasogram.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/._Phasogram.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/FindBoundaryNucleosomes.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/FindBoundaryNucleosomes.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,98 @@
+package edu.unc.genomics.nucleosomes;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+
+import com.beust.jcommander.Parameter;
+
+import edu.unc.genomics.CommandLineTool;
+import edu.unc.genomics.Interval;
+import edu.unc.genomics.ReadablePathValidator;
+import edu.unc.genomics.io.IntervalFile;
+
+public class FindBoundaryNucleosomes extends CommandLineTool {
+
+ private static final Logger log = Logger.getLogger(FindBoundaryNucleosomes.class);
+
+ @Parameter(names = {"-i", "--input"}, description = "Input file (nucleosome calls)", required = true, validateWith = ReadablePathValidator.class)
+ public Path inputFile;
+ @Parameter(names = {"-l", "--loci"}, description = "Boundary loci (Bed format)", required = true)
+ public IntervalFile<? extends Interval> lociFile;
+ @Parameter(names = {"-o", "--output"}, description = "Output file", required = true)
+ public Path outputFile;
+
+ private Map<String,List<NucleosomeCall>> nucs = new HashMap<>();
+
+ private List<NucleosomeCall> getIntervalNucleosomes(Interval i) {
+ List<NucleosomeCall> intervalNucs = new ArrayList<>();
+ for (NucleosomeCall call : nucs.get(i.getChr())) {
+ if (call.getDyad() >= i.low() && call.getDyad() <= i.high()) {
+ intervalNucs.add(call);
+ }
+ }
+
+ return intervalNucs;
+ }
+
+ @Override
+ public void run() throws IOException {
+ log.debug("Initializing input file");
+ NucleosomeCallsFile nucsFile = new NucleosomeCallsFile(inputFile);
+ log.debug("Loading all nucleosomes");
+ for (NucleosomeCall nuc : nucsFile) {
+ if (nuc == null) continue;
+ if (!nucs.containsKey(nuc.getChr())) {
+ nucs.put(nuc.getChr(), new ArrayList<NucleosomeCall>());
+ }
+ nucs.get(nuc.getChr()).add(nuc);
+ }
+ nucsFile.close();
+
+ log.debug("Initializing output file");
+ int skipped = 0;
+ try (BufferedWriter writer = Files.newBufferedWriter(outputFile, Charset.defaultCharset())) {
+ log.debug("Finding boundary nucleosomes for each interval");
+ NucleosomeCall.DyadComparator comparator = new NucleosomeCall.DyadComparator();
+ for (Interval interval : lociFile) {
+ writer.write(interval.toBed());
+
+ // Get all of the nucleosomes within this interval
+ List<NucleosomeCall> intervalNucs = getIntervalNucleosomes(interval);
+
+ if (intervalNucs.size() > 0) {
+ // Sort the list by nucleosome position
+ Collections.sort(intervalNucs, comparator);
+ if (interval.isCrick()) {
+ Collections.reverse(intervalNucs);
+ }
+
+ int fivePrime = intervalNucs.get(0).getDyad();
+ int threePrime = intervalNucs.get(intervalNucs.size()-1).getDyad();
+ writer.write("\t"+fivePrime+"\t"+threePrime);
+ } else {
+ skipped++;
+ writer.write("\tNA\tNA");
+ }
+
+ writer.newLine();
+ }
+ }
+
+ lociFile.close();
+ log.info("Skipped "+skipped+" intervals with 0 nucleosomes");
+ }
+
+ public static void main(String[] args) {
+ new FindBoundaryNucleosomes().instanceMain(args);
+ }
+}
\ No newline at end of file
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/GreedyCaller.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/GreedyCaller.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,120 @@
+package edu.unc.genomics.nucleosomes;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Iterator;
+
+import org.apache.log4j.Logger;
+import org.broad.igv.bbfile.WigItem;
+
+import com.beust.jcommander.Parameter;
+import edu.unc.genomics.CommandLineTool;
+import edu.unc.genomics.CommandLineToolException;
+import edu.unc.genomics.ReadablePathValidator;
+import edu.unc.genomics.io.WigFile;
+import edu.unc.genomics.io.WigFileException;
+import edu.unc.utils.SortUtils;
+
+public class GreedyCaller extends CommandLineTool {
+
+ private static final Logger log = Logger.getLogger(GreedyCaller.class);
+
+ private static final int CHUNK_SIZE = 500_000;
+
+ @Parameter(names = {"-d", "--dyads"}, description = "Dyad counts file", required = true, validateWith = ReadablePathValidator.class)
+ public WigFile dyadsFile;
+ @Parameter(names = {"-s", "--smoothed"}, description = "Smoothed dyad counts file", required = true, validateWith = ReadablePathValidator.class)
+ public WigFile smoothedDyadsFile;
+ @Parameter(names = {"-n", "--size"}, description = "Nucleosome size (bp)")
+ public int nucleosomeSize = 147;
+ @Parameter(names = {"-o", "--output"}, description = "Output file", required = true)
+ public Path outputFile;
+
+ public void run() throws IOException {
+ int halfNuc = nucleosomeSize / 2;
+
+ try (BufferedWriter writer = Files.newBufferedWriter(outputFile, Charset.defaultCharset())) {
+ for (String chr : smoothedDyadsFile.chromosomes()) {
+ log.debug("Processing chromosome "+chr);
+ int chunkStart = smoothedDyadsFile.getChrStart(chr);
+ int chrStop = smoothedDyadsFile.getChrStop(chr);
+ while (chunkStart < chrStop) {
+ int chunkStop = chunkStart + CHUNK_SIZE;
+ int paddedStart = chunkStart - nucleosomeSize;
+ int paddedStop = chunkStop + nucleosomeSize;
+ log.debug("Processing chunk "+chunkStart+"-"+chunkStop);
+
+ log.debug("Loading data and sorting");
+ Iterator<WigItem> dyadsIter;
+ Iterator<WigItem> smoothedIter;
+ try {
+ dyadsIter = dyadsFile.query(chr, paddedStart, paddedStop);
+ smoothedIter = smoothedDyadsFile.query(chr, paddedStart, paddedStop);
+ } catch (IOException | WigFileException e) {
+ e.printStackTrace();
+ throw new CommandLineToolException("Error loading data from Wig file");
+ }
+
+ float[] dyads = WigFile.flattenData(dyadsIter, paddedStart, paddedStop);
+ float[] smoothed = WigFile.flattenData(smoothedIter, paddedStart, paddedStop);
+ int[] sortedIndices = SortUtils.indexSort(smoothed);
+
+ // Proceed through the data in descending order
+ log.debug("Calling nucleosomes");
+ for (int j = sortedIndices.length; j >= 0; j++) {
+ int i = sortedIndices[j];
+ int dyad = paddedStart + i;
+
+ if (smoothed[i] > 0) {
+ int nucStart = Math.max(1, dyad-halfNuc);
+ int nucStop = Math.min(dyad+halfNuc, chrStop);
+ NucleosomeCall call = new NucleosomeCall(chr, nucStart, nucStop);
+ call.setDyad(dyad);
+
+ double occupancy = 0;
+ double weightedSum = 0;
+ double smoothedSum = 0;
+ double sumOfSquares = 0;
+ for (int bp = nucStart; bp <= nucStop; bp++) {
+ occupancy += dyads[bp-paddedStart];
+ weightedSum += bp * dyads[bp-paddedStart];
+ smoothedSum += smoothed[bp-paddedStart];
+ sumOfSquares += bp * bp * dyads[bp-paddedStart];
+ }
+ call.setOccupancy(occupancy);
+
+ if (occupancy > 0) {
+ call.setDyadMean(Math.round(weightedSum/occupancy));
+ call.setConditionalPosition(smoothed[i] / smoothedSum);
+ double variance = (sumOfSquares - weightedSum*call.getDyadMean()) / occupancy;
+ call.setDyadStdev(Math.sqrt(variance));
+
+ // Only write nucleosomes within the current chunk to disk
+ if (chunkStart <= dyad && dyad <= chunkStop) {
+ writer.write(call.toString());
+ writer.newLine();
+ }
+
+ // Don't allow nucleosome calls overlapping this nucleosome
+ int low = Math.max(i-nucleosomeSize, 0);
+ int high = Math.min(i-nucleosomeSize, paddedStop-1);
+ for (int k = low; k <= high; k++) {
+ smoothed[k] = 0;
+ }
+ }
+ }
+ }
+
+ chunkStart = chunkStop + 1;
+ }
+ }
+ }
+ }
+
+ public static void main(String[] args) {
+ new GreedyCaller().instanceMain(args);
+ }
+}
\ No newline at end of file
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/MapDyads.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/MapDyads.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,88 @@
+package edu.unc.genomics.nucleosomes;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Iterator;
+
+import org.apache.log4j.Logger;
+
+import com.beust.jcommander.Parameter;
+
+import edu.ucsc.genome.TrackHeader;
+import edu.unc.genomics.Assembly;
+import edu.unc.genomics.CommandLineTool;
+import edu.unc.genomics.Interval;
+import edu.unc.genomics.PositiveIntegerValidator;
+import edu.unc.genomics.io.IntervalFile;
+
+public class MapDyads extends CommandLineTool {
+
+ private static final Logger log = Logger.getLogger(MapDyads.class);
+
+ @Parameter(names = {"-i", "--input"}, description = "Input file (reads)", required = true)
+ public IntervalFile<? extends Interval> inputFile;
+ @Parameter(names = {"-s", "--size"}, description = "Mononucleosome length (default: read length)", validateWith = PositiveIntegerValidator.class)
+ public Integer nucleosomeSize;
+ @Parameter(names = {"-a", "--assembly"}, description = "Genome assembly", required = true)
+ public Assembly assembly;
+ @Parameter(names = {"-o", "--output"}, description = "Output file (Wig)", required = true)
+ public Path outputFile;
+
+ @Override
+ public void run() throws IOException {
+ log.debug("Initializing output file");
+ int mapped = 0;
+ try (BufferedWriter writer = Files.newBufferedWriter(outputFile, Charset.defaultCharset())) {
+ // Write the Wiggle track header to the output file
+ TrackHeader header = new TrackHeader("wiggle_0");
+ header.setName("Converted " + inputFile.getPath().getFileName());
+ header.setDescription("Converted " + inputFile.getPath().getFileName());
+ writer.write(header.toString());
+ writer.newLine();
+
+ // Process each chromosome in the assembly
+ for (String chr : assembly) {
+ log.debug("Processing chromosome " + chr);
+ // Write the contig header to the output file
+ writer.write("fixedStep chrom="+chr+" start=1 step=1 span=1");
+ writer.newLine();
+
+ int start = 1;
+ while (start < assembly.getChrLength(chr)) {
+ int stop = start + DEFAULT_CHUNK_SIZE - 1;
+ int length = stop - start + 1;
+ int[] count = new int[length];
+
+ Iterator<? extends Interval> it = inputFile.query(chr, start, stop);
+ while (it.hasNext()) {
+ Interval entry = it.next();
+ if (nucleosomeSize == null) {
+ count[entry.center()-start]++;
+ } else {
+ count[entry.getStart()+nucleosomeSize-start]++;
+ }
+ mapped++;
+ }
+
+ // Write the average at each base pair to the output file
+ for (int i = 0; i < count.length; i++) {
+ writer.write(count[i]);
+ writer.newLine();
+ }
+
+ // Process the next chunk
+ start = stop + 1;
+ }
+ }
+ }
+
+ log.info("Mapped "+mapped+" reads");
+ }
+
+ public static void main(String[] args) {
+ new MapDyads().instanceMain(args);
+ }
+}
\ No newline at end of file
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/NRLCalculator.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/NRLCalculator.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,93 @@
+package edu.unc.genomics.nucleosomes;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+
+import com.beust.jcommander.Parameter;
+
+import edu.unc.genomics.CommandLineTool;
+import edu.unc.genomics.Interval;
+import edu.unc.genomics.ReadablePathValidator;
+import edu.unc.genomics.io.IntervalFile;
+
+public class NRLCalculator extends CommandLineTool {
+
+ private static final Logger log = Logger.getLogger(NRLCalculator.class);
+
+ @Parameter(names = {"-i", "--input"}, description = "Input file (nucleosome calls)", required = true, validateWith = ReadablePathValidator.class)
+ public Path inputFile;
+ @Parameter(names = {"-l", "--loci"}, description = "Genomic loci (Bed format)", required = true)
+ public IntervalFile<? extends Interval> lociFile;
+ @Parameter(names = {"-o", "--output"}, description = "Output file (NRL for each gene)", required = true)
+ public Path outputFile;
+
+ private Map<String,List<NucleosomeCall>> nucs = new HashMap<>();
+
+ private List<NucleosomeCall> getIntervalNucleosomes(Interval i) {
+ List<NucleosomeCall> intervalNucs = new ArrayList<>();
+ for (NucleosomeCall call : nucs.get(i.getChr())) {
+ if (call.getDyad() >= i.low() && call.getDyad() <= i.high()) {
+ intervalNucs.add(call);
+ }
+ }
+
+ return intervalNucs;
+ }
+
+ @Override
+ public void run() throws IOException {
+ log.debug("Initializing input file");
+ NucleosomeCallsFile nucsFile = new NucleosomeCallsFile(inputFile);
+ log.debug("Loading all nucleosomes");
+ for (NucleosomeCall nuc : nucsFile) {
+ if (nuc == null) continue;
+ if (!nucs.containsKey(nuc.getChr())) {
+ nucs.put(nuc.getChr(), new ArrayList<NucleosomeCall>());
+ }
+ nucs.get(nuc.getChr()).add(nuc);
+ }
+ nucsFile.close();
+
+ log.debug("Initializing output file");
+ try (BufferedWriter writer = Files.newBufferedWriter(outputFile, Charset.defaultCharset())) {
+ log.debug("Calculating nucleosome spacing for each interval");
+ NucleosomeCall.DyadComparator comparator = new NucleosomeCall.DyadComparator();
+ for (Interval interval : lociFile) {
+ writer.write(interval.toBed());
+
+ // Get all of the nucleosomes within this interval
+ List<NucleosomeCall> intervalNucs = getIntervalNucleosomes(interval);
+
+ if (intervalNucs.size() > 1) {
+ // Sort the list by nucleosome position
+ Collections.sort(intervalNucs, comparator);
+ if (interval.isCrick()) {
+ Collections.reverse(intervalNucs);
+ }
+
+ for (int i = 1; i < Math.min(intervalNucs.size(), 10); i++) {
+ writer.write("\t" + Math.abs(intervalNucs.get(i).getDyad()-intervalNucs.get(i-1).getDyad()));
+ }
+ }
+
+ writer.newLine();
+ }
+ }
+
+ lociFile.close();
+ }
+
+ public static void main(String[] args) throws IOException {
+ new NRLCalculator().instanceMain(args);
+ }
+}
\ No newline at end of file
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/NucleosomeCall.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/NucleosomeCall.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,174 @@
+package edu.unc.genomics.nucleosomes;
+
+import java.util.Comparator;
+
+import edu.unc.genomics.ValuedInterval;
+import edu.unc.genomics.io.IntervalFileFormatException;
+
+/**
+ * @author timpalpant
+ *
+ */
+public class NucleosomeCall extends ValuedInterval implements Comparable<NucleosomeCall> {
+
+ private static final long serialVersionUID = 6522702303121259979L;
+
+ private int dyad;
+ private double dyadStdev;
+ private double dyadMean;
+ private double conditionalPosition;
+ private int length;
+ private double lengthStdev;
+
+ /**
+  * @param chr
+  * @param start
+  * @param stop
+  */
+ public NucleosomeCall(String chr, int start, int stop) {
+ super(chr, start, stop);
+ }
+
+ public static NucleosomeCall parse(String line) {
+ if (line.startsWith("#")) return null;
+
+ String[] entry = line.split("\t");
+ if (entry.length < 10) {
+ throw new IntervalFileFormatException("Invalid nucleosome call has < 10 columns");
+ }
+
+ String chr = entry[0];
+ int start = Integer.parseInt(entry[1]);
+ int stop = Integer.parseInt(entry[2]);
+
+ NucleosomeCall call = new NucleosomeCall(chr, start, stop);
+ call.setLength(Integer.parseInt(entry[3]));
+ call.setLengthStdev(Double.parseDouble(entry[4]));
+ call.setDyad(Integer.parseInt(entry[5]));
+ call.setDyadStdev(Double.parseDouble(entry[6]));
+ call.setConditionalPosition(Double.parseDouble(entry[7]));
+ call.setDyadMean(Double.parseDouble(entry[8]));
+ call.setValue(Double.parseDouble(entry[9]));
+
+ return call;
+ }
+
+ @Override
+ public String toString() {
+ return chr+"\t"+start+"\t"+stop+"\t"+length()+"\t"+lengthStdev+"\t"+dyad+"\t"+dyadStdev+"\t"+conditionalPosition+"\t"+dyadMean+"\t"+occupancy();
+ }
+
+ /**
+  * @return the dyad
+  */
+ public int getDyad() {
+ return dyad;
+ }
+
+ /**
+  * @param dyad the dyad to set
+  */
+ public void setDyad(int dyad) {
+ this.dyad = dyad;
+ }
+
+ /**
+  * @return the dyadStdev
+  */
+ public double getDyadStdev() {
+ return dyadStdev;
+ }
+
+ /**
+  * @param dyadStdev the dyadStdev to set
+  */
+ public void setDyadStdev(double dyadStdev) {
+ this.dyadStdev = dyadStdev;
+ }
+
+ /**
+  * @return the dyadMean
+  */
+ public double getDyadMean() {
+ return dyadMean;
+ }
+
+ /**
+  * @param dyadMean the dyadMean to set
+  */
+ public void setDyadMean(double dyadMean) {
+ this.dyadMean = dyadMean;
+ }
+
+ /**
+  * @return the conditionalPosition
+  */
+ public double getConditionalPosition() {
+ return conditionalPosition;
+ }
+
+ /**
+  * @param conditionalPosition the conditionalPosition to set
+  */
+ public void setConditionalPosition(double conditionalPosition) {
+ this.conditionalPosition = conditionalPosition;
+ }
+
+ /**
+  * @return the length
+  */
+ public int getLength() {
+ return length;
+ }
+
+ /**
+  * @param length the length to set
+  */
+ public void setLength(int length) {
+ this.length = length;
+ }
+
+ /**
+  * @return the lengthStdev
+  */
+ public double getLengthStdev() {
+ return lengthStdev;
+ }
+
+ /**
+  * @param lengthStdev the lengthStdev to set
+  */
+ public void setLengthStdev(double lengthStdev) {
+ this.lengthStdev = lengthStdev;
+ }
+
+ public double occupancy() {
+ return value;
+ }
+
+ public void setOccupancy(double value) {
+ this.value = value;
+ }
+
+ @Override
+ public int compareTo(NucleosomeCall o) {
+ DyadComparator comparator = new DyadComparator();
+ return comparator.compare(this, o);
+ }
+
+ public static class DyadComparator implements Comparator<NucleosomeCall> {
+
+ @Override
+ public int compare(NucleosomeCall o1, NucleosomeCall o2) {
+ if (o1.getDyad() == o2.getDyad()) {
+ return 0;
+ } else if (o1.getDyad() < o2.getDyad()) {
+ return -1;
+ } else {
+ return 1;
+ }
+ }
+
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/NucleosomeCallsFile.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/NucleosomeCallsFile.java Mon Feb 13 21:55:55 2012 -0500
b
@@ -0,0 +1,31 @@
+/**
+ * 
+ */
+package edu.unc.genomics.nucleosomes;
+
+import java.io.IOException;
+import java.nio.file.Path;
+
+import edu.unc.genomics.IntervalFactory;
+import edu.unc.genomics.io.TextIntervalFile;
+
+/**
+ * @author timpalpant
+ *
+ */
+public class NucleosomeCallsFile extends TextIntervalFile<NucleosomeCall> {
+
+ public NucleosomeCallsFile(Path p) throws IOException {
+ super(p, new NucleosomeCallFactory());
+ }
+
+ public static class NucleosomeCallFactory implements IntervalFactory<NucleosomeCall> {
+
+ @Override
+ public NucleosomeCall parse(String line) {
+ return NucleosomeCall.parse(line);
+ }
+
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/Phasogram.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/nucleosomes/Phasogram.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,71 @@
+package edu.unc.genomics.nucleosomes;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+import org.apache.log4j.Logger;
+
+import com.beust.jcommander.Parameter;
+
+import edu.unc.genomics.CommandLineTool;
+import edu.unc.genomics.CommandLineToolException;
+import edu.unc.genomics.io.WigFile;
+import edu.unc.genomics.io.WigFileException;
+
+public class Phasogram extends CommandLineTool {
+
+ private static final Logger log = Logger.getLogger(Phasogram.class);
+
+ @Parameter(names = {"-i", "--input"}, description = "Input wig file (read counts)", required = true)
+ public WigFile inputFile;
+ @Parameter(names = {"-m", "--max"}, description = "Maximum phase shift", required = true)
+ public int maxPhase;
+ @Parameter(names = {"-o", "--output"}, description = "Output file (histogram)", required = true)
+ public Path outputFile;
+
+ public void run() throws IOException {
+ long[] phaseCounts = new long[maxPhase+1];
+
+ // Process each chromosome in the assembly
+ for (String chr : inputFile.chromosomes()) {
+ log.debug("Processing chromosome " + chr);
+
+ int start = inputFile.getChrStart(chr);
+ while (start < inputFile.getChrStop(chr)) {
+ int stop = start + DEFAULT_CHUNK_SIZE - 1;
+
+ try {
+ float[] data = WigFile.flattenData(inputFile.query(chr, start, stop), start, stop);
+ for (int i = 0; i < data.length-maxPhase; i++) {
+ for (int j = 0; j <= maxPhase; j++) {
+ phaseCounts[j] += data[i];
+ }
+ }
+
+ } catch (WigFileException e) {
+ log.fatal("Error querying data from Wig file!");
+ e.printStackTrace();
+ throw new CommandLineToolException("Error querying data from Wig file!");
+ }
+
+ // Process the next chunk
+ start = stop - maxPhase + 1;
+ }
+ }
+
+ log.debug("Writing output to disk");
+ try (BufferedWriter writer = Files.newBufferedWriter(outputFile, Charset.defaultCharset())) {
+ for (int i = 0; i < phaseCounts.length; i++) {
+ writer.write(i+"\t"+phaseCounts[i]);
+ writer.newLine();
+ }
+ }
+ }
+
+ public static void main(String[] args) {
+ new Phasogram().instanceMain(args);
+ }
+}
\ No newline at end of file
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/visualization/._IntervalAverager.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/visualization/._IntervalAverager.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/visualization/._KMeans.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/visualization/._KMeans.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/visualization/._KMeansRow.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/visualization/._KMeansRow.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/visualization/._MatrixAligner.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/visualization/._MatrixAligner.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/visualization/._StripMatrix.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/visualization/._StripMatrix.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/visualization/IntervalAverager.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/visualization/IntervalAverager.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,118 @@
+package edu.unc.genomics.visualization;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.log4j.Logger;
+import org.broad.igv.bbfile.WigItem;
+
+import com.beust.jcommander.Parameter;
+
+import edu.unc.genomics.BedEntry;
+import edu.unc.genomics.CommandLineTool;
+import edu.unc.genomics.ReadablePathValidator;
+import edu.unc.genomics.io.BedFile;
+import edu.unc.genomics.io.WigFile;
+import edu.unc.genomics.io.WigFileException;
+
+public class IntervalAverager extends CommandLineTool {
+
+ private static final Logger log = Logger.getLogger(IntervalAverager.class);
+
+ @Parameter(names = {"-i", "--input"}, description = "Input file (Wig)", required = true)
+ public WigFile inputFile;
+ @Parameter(names = {"-l", "--loci"}, description = "Loci file (Bed)", required = true, validateWith = ReadablePathValidator.class)
+ public Path lociFile;
+ @Parameter(names = {"-o", "--output"}, description = "Output file (matrix2png format)", required = true)
+ public Path outputFile;
+
+ private List<BedEntry> loci;
+
+ @Override
+ public void run() throws IOException {
+ log.debug("Loading alignment intervals");
+ try (BedFile bed = new BedFile(lociFile)) {
+ loci = bed.loadAll();
+ }
+
+ // Compute the matrix dimensions
+ int leftMax = Integer.MIN_VALUE;
+ int rightMax = Integer.MIN_VALUE;
+ for (BedEntry entry : loci) {
+ int left = Math.abs(entry.getValue().intValue()-entry.getStart());
+ int right = Math.abs(entry.getValue().intValue()-entry.getStop());
+ if (left > leftMax) {
+ leftMax = left;
+ }
+ if (right > rightMax) {
+ rightMax = right;
+ }
+ }
+
+ int m = loci.size();
+ int n = leftMax + rightMax + 1;
+ int alignmentPoint = leftMax;
+ log.info("Intervals aligned into: " + m+"x"+n + " matrix");
+ log.info("Alignment point: " + alignmentPoint);
+
+ float[] sum = new float[n];
+ int[] counts = new int[n];
+ int count = 0, skipped = 0;
+ log.debug("Iterating over all intervals");
+ for (BedEntry entry : loci) {
+ Iterator<WigItem> result = null;
+ try {
+ result = inputFile.query(entry);
+ } catch (WigFileException e) {
+ skipped++;
+ continue;
+ }
+
+ float[] data = WigFile.flattenData(result, entry.getStart(), entry.getStop());
+ // Reverse if on the Crick strand
+ if (entry.isCrick()) {
+ ArrayUtils.reverse(data);
+ }
+
+ // Locus alignment point (entry value) should be positioned over the global alignment point
+ int n1 = alignmentPoint - Math.abs(entry.getValue().intValue()-entry.getStart());
+ int n2 = alignmentPoint + Math.abs(entry.getValue().intValue()-entry.getStop());
+ for (int bp = n1; bp <= n2; bp++) {
+ sum[bp] += data[bp-n1];
+ counts[bp]++;
+ }
+ }
+
+ inputFile.close();
+ log.info(count + " intervals processed");
+ log.info(skipped + " intervals skipped");
+
+ log.debug("Computing average");
+ float[] avg = new float[n];
+ for (int i = 0; i < n; i++) {
+ if (counts[i] == 0) {
+ avg[i] = Float.NaN;
+ } else {
+ avg[i] = sum[i] / counts[i];
+ }
+ }
+
+ log.debug("Writing average to output");
+ try (BufferedWriter writer = Files.newBufferedWriter(outputFile, Charset.defaultCharset())) {
+ for (int i = 0; i < n; i++) {
+ writer.write(i-alignmentPoint + "\t" + avg[i]);
+ writer.newLine();
+ }
+ }
+ }
+
+ public static void main(String[] args) {
+ new IntervalAverager().instanceMain(args);
+ }
+}
\ No newline at end of file
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/visualization/KMeans.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/visualization/KMeans.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,120 @@
+package edu.unc.genomics.visualization;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.math.stat.clustering.Cluster;
+import org.apache.commons.math.stat.clustering.KMeansPlusPlusClusterer;
+import org.apache.log4j.Logger;
+
+import com.beust.jcommander.Parameter;
+
+import edu.unc.genomics.CommandLineTool;
+import edu.unc.genomics.ReadablePathValidator;
+import edu.unc.genomics.io.IntervalFileSnifferException;
+import edu.unc.genomics.io.WigFileException;
+
+public class KMeans extends CommandLineTool {
+
+ private static final Logger log = Logger.getLogger(KMeans.class);
+
+ @Parameter(names = {"-i", "--input"}, description = "Input file (matrix2png format)", required = true, validateWith = ReadablePathValidator.class)
+ public Path inputFile;
+ @Parameter(names = {"-k", "--clusters"}, description = "Number of clusters")
+ public int k = 10;
+ @Parameter(names = {"-1", "--min"}, description = "Minimum column to use for clustering")
+ public int minCol = 1;
+ @Parameter(names = {"-2", "--max"}, description = "Maximum column to use for clustering")
+ public Integer maxCol;
+ @Parameter(names = {"-o", "--output"}, description = "Output file (clustered matrix2png format)", required = true)
+ public Path outputFile;
+
+ private Map<String, String> rows = new HashMap<String, String>();
+ private List<KMeansRow> data = new ArrayList<KMeansRow>();
+
+ @Override
+ public void run() throws IOException {
+ log.debug("Loading data from the input matrix");
+ String headerLine = "";
+ try (BufferedReader reader = Files.newBufferedReader(inputFile, Charset.defaultCharset())) {
+ // Header line
+ int lineNum = 1;
+ headerLine = reader.readLine();
+ int numColsInMatrix = StringUtils.countMatches(headerLine, "\t");
+
+ // Validate the range info
+ if (maxCol != null) {
+ if (maxCol > numColsInMatrix) {
+ throw new RuntimeException("Invalid range of data specified for clustering ("+maxCol+" > "+numColsInMatrix+")");
+ }
+ } else {
+ maxCol = numColsInMatrix;
+ }
+
+ // Loop over the rows and load the data
+ String line;
+ while ((line = reader.readLine()) != null) {
+ lineNum++;
+ if (StringUtils.countMatches(line, "\t") != numColsInMatrix) {
+ throw new RuntimeException("Irregular input matrix does not have same number of columns on line " + lineNum);
+ }
+
+ int delim = line.indexOf('\t');
+ String id = line.substring(0, delim);
+ String[] row = line.substring(delim+1).split("\t");
+ String[] subset = Arrays.copyOfRange(row, minCol, maxCol);
+ float[] rowData = new float[subset.length];
+ for (int i = 0; i < subset.length; i++) {
+ try {
+ rowData[i] = Float.parseFloat(subset[i]);
+ } catch (NumberFormatException e) {
+ rowData[i] = Float.NaN;
+ }
+ }
+ data.add(new KMeansRow(id, rowData));
+ rows.put(id, line);
+ }
+ }
+
+ // Perform the clustering
+ log.debug("Clustering the data");
+ Random rng = new Random();
+ KMeansPlusPlusClusterer<KMeansRow> clusterer = new KMeansPlusPlusClusterer<KMeansRow>(rng);
+ List<Cluster<KMeansRow>> clusters = clusterer.cluster(data, k, 50);
+
+ // Write to output
+ log.debug("Writing clustered data to output file");
+ try (BufferedWriter writer = Files.newBufferedWriter(outputFile, Charset.defaultCharset())) {
+ writer.write(headerLine);
+ writer.newLine();
+ int n = 1;
+ int count = 1;
+ for (Cluster<KMeansRow> cluster : clusters) {
+ int numRowsInCluster = cluster.getPoints().size();
+ int stop = count + numRowsInCluster - 1;
+ log.info("Cluster "+(n++)+": rows "+count+"-"+stop);
+ count = stop+1;
+ for (KMeansRow row : cluster.getPoints()) {
+ writer.write(rows.get(row.getId()));
+ writer.newLine();
+ }
+ }
+ }
+ }
+
+ public static void main(String[] args) throws IOException, WigFileException, IntervalFileSnifferException {
+ new KMeans().instanceMain(args);
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/visualization/KMeansRow.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/visualization/KMeansRow.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,110 @@
+package edu.unc.genomics.visualization;
+
+import java.io.Serializable;
+import java.util.Collection;
+
+import org.apache.commons.math.stat.clustering.Clusterable;
+
+/**
+ * @author timpalpant
+ * Holds a row of data for the KMeans program
+ */
+class KMeansRow implements Clusterable<KMeansRow>, Serializable {
+
+ private static final long serialVersionUID = -323598431692368500L;
+
+ private final String id;
+ /** Point coordinates. */
+  private final float[] point;
+
+ /**
+   * Build an instance wrapping an float array.
+   * <p>The wrapped array is referenced, it is <em>not</em> copied.</p>
+   * @param point the n-dimensional point in integer space
+   */
+ public KMeansRow(final String id, final float[] point) {
+ this.point = point;
+ this.id = id;
+ }
+
+  /**
+   * Get the n-dimensional point in float space.
+   * @return a reference (not a copy!) to the wrapped array
+   */
+  public float[] getPoint() {
+      return point;
+  }
+
+  /** {@inheritDoc} */
+  public double distanceFrom(final KMeansRow p) {
+   double sumSquares = 0;
+   float[] otherPoint = p.getPoint();
+   for (int i = 0; i < point.length; i++) {
+   sumSquares += Math.pow(point[i]-otherPoint[i], 2);
+   }
+      return Math.sqrt(sumSquares);
+  }
+
+  /** {@inheritDoc} */
+  public KMeansRow centroidOf(final Collection<KMeansRow> points) {
+      float[] centroid = new float[getPoint().length];
+      for (KMeansRow p : points) {
+          for (int i = 0; i < centroid.length; i++) {
+              centroid[i] += p.getPoint()[i];
+          }
+      }
+      for (int i = 0; i < centroid.length; i++) {
+          centroid[i] /= points.size();
+      }
+      return new KMeansRow(id, centroid);
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public boolean equals(final Object other) {
+      if (!(other instanceof KMeansRow)) {
+          return false;
+      }
+      final float[] otherPoint = ((KMeansRow) other).getPoint();
+      if (point.length != otherPoint.length) {
+          return false;
+      }
+      for (int i = 0; i < point.length; i++) {
+          if (point[i] != otherPoint[i]) {
+              return false;
+          }
+      }
+      return true;
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public int hashCode() {
+      int hashCode = 0;
+      for (Float i : point) {
+          hashCode += i.hashCode() * 13 + 7;
+      }
+      return hashCode;
+  }
+
+  /**
+   * {@inheritDoc}
+   * @since 2.1
+   */
+  @Override
+  public String toString() {
+      final StringBuilder buff = new StringBuilder(id);
+      for (float value : getPoint()) {
+       buff.append("\t").append(value);
+      }
+      return buff.toString();
+  }
+
+ /**
+  * @return the id
+  */
+ public String getId() {
+ return id;
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/visualization/MatrixAligner.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/visualization/MatrixAligner.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,145 @@
+package edu.unc.genomics.visualization;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.log4j.Logger;
+import org.broad.igv.bbfile.WigItem;
+
+import com.beust.jcommander.Parameter;
+
+import edu.unc.genomics.BedEntry;
+import edu.unc.genomics.CommandLineTool;
+import edu.unc.genomics.ReadablePathValidator;
+import edu.unc.genomics.io.BedFile;
+import edu.unc.genomics.io.WigFile;
+import edu.unc.genomics.io.WigFileException;
+
+public class MatrixAligner extends CommandLineTool {
+
+ private static final Logger log = Logger.getLogger(MatrixAligner.class);
+
+ @Parameter(names = {"-i", "--input"}, description = "Input file (Wig)", required = true)
+ public WigFile inputFile;
+ @Parameter(names = {"-l", "--loci"}, description = "Loci file (Bed)", required = true, validateWith = ReadablePathValidator.class)
+ public Path lociFile;
+ @Parameter(names = {"-m", "--max"}, description = "Truncate width (base pairs)")
+ public Integer maxWidth;
+ @Parameter(names = {"-o", "--output"}, description = "Output file (matrix2png format)", required = true)
+ public Path outputFile;
+
+ private List<BedEntry> loci;
+
+ @Override
+ public void run() throws IOException {
+ log.debug("Loading alignment intervals");
+ try (BedFile bed = new BedFile(lociFile)) {
+ loci = bed.loadAll();
+ }
+
+ // Compute the matrix dimensions
+ int leftMax = Integer.MIN_VALUE;
+ int rightMax = Integer.MIN_VALUE;
+ for (BedEntry entry : loci) {
+ int left = Math.abs(entry.getValue().intValue()-entry.getStart());
+ int right = Math.abs(entry.getValue().intValue()-entry.getStop());
+ if (left > leftMax) {
+ leftMax = left;
+ }
+ if (right > rightMax) {
+ rightMax = right;
+ }
+ }
+
+ int m = loci.size();
+ int n = leftMax + rightMax + 1;
+ int alignmentPoint = leftMax;
+ log.info("Intervals aligned into: " + m+"x"+n + " matrix");
+ log.info("Alignment point: " + alignmentPoint);
+
+ int leftBound = 0;
+ int rightBound = n-1;
+ if (maxWidth != null && maxWidth < n) {
+ log.info("Truncated to: " + m+"x"+maxWidth);
+ int leftAlignDistance = alignmentPoint;
+ int rightAlignDistance = n - alignmentPoint - 1;
+ int halfMax = maxWidth / 2;
+
+ if (halfMax < leftAlignDistance && halfMax < rightAlignDistance) {
+ leftBound = alignmentPoint - halfMax;
+ rightBound = alignmentPoint + halfMax;
+ } else {
+ if (leftAlignDistance <= rightAlignDistance) {
+ rightBound = maxWidth;
+ } else {
+ leftBound = n - maxWidth;
+ }
+ }
+ }
+
+ log.debug("Initializing output file");
+ int count = 0, skipped = 0;
+ try (BufferedWriter writer = Files.newBufferedWriter(outputFile, Charset.defaultCharset())) {
+ writer.write("ID");
+ for (int i = leftBound-alignmentPoint; i <= rightBound-alignmentPoint; i++) {
+ writer.write("\t"+i);
+ }
+ writer.newLine();
+
+ log.debug("Iterating over all intervals");
+ String[] row = new String[n];
+ for (BedEntry entry : loci) {
+ Iterator<WigItem> result = null;
+ try {
+ result = inputFile.query(entry);
+ } catch (WigFileException e) {
+ skipped++;
+ continue;
+ }
+
+ float[] data = WigFile.flattenData(result, entry.getStart(), entry.getStop());
+ // Reverse if on the crick strand
+ if (entry.isCrick()) {
+ ArrayUtils.reverse(data);
+ }
+
+ // Position the data in the matrix
+ // Locus alignment point (entry value) should be positioned over the matrix alignment point
+ int n1 = alignmentPoint - Math.abs(entry.getValue().intValue()-entry.getStart());
+ int n2 = alignmentPoint + Math.abs(entry.getValue().intValue()-entry.getStop());
+ assert data.length == n2-n1+1;
+
+ Arrays.fill(row, "-");
+ for (int i = 0; i < data.length; i++) {
+ if (!Float.isNaN(data[i])) {
+ row[n1+i] = String.valueOf(data[i]);
+ }
+ }
+
+ // Write to output
+ String id = ((entry.getId() == null) ? entry.getId() : "Row "+(count++));
+ writer.write(id);
+ for (int i = leftBound; i <= rightBound; i++) {
+ writer.write("\t"+row[i]);
+ }
+ writer.newLine();
+ }
+ }
+
+ inputFile.close();
+ log.info(count + " intervals processed");
+ log.info(skipped + " intervals skipped");
+ }
+
+ public static void main(String[] args) {
+ new MatrixAligner().instanceMain(args);
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/visualization/StripMatrix.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/visualization/StripMatrix.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,56 @@
+package edu.unc.genomics.visualization;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+import org.apache.log4j.Logger;
+
+import com.beust.jcommander.Parameter;
+
+import edu.unc.genomics.CommandLineTool;
+import edu.unc.genomics.ReadablePathValidator;
+
+public class StripMatrix extends CommandLineTool {
+
+ private static final Logger log = Logger.getLogger(StripMatrix.class);
+
+ @Parameter(names = {"-i", "--input"}, description = "Input file (matrix2png format)", required = true, validateWith = ReadablePathValidator.class)
+ public Path inputFile;
+ @Parameter(names = {"-o", "--output"}, description = "Output file (tabular)", required = true)
+ public Path outputFile;
+
+ public void run() throws IOException {
+ try (BufferedReader reader = Files.newBufferedReader(inputFile, Charset.defaultCharset())) {
+ try (BufferedWriter writer = Files.newBufferedWriter(outputFile, Charset.defaultCharset())) {
+ String line = reader.readLine();
+ // Always copy the first (header) line
+ writer.write(line);
+ writer.newLine();
+ while ((line = reader.readLine()) != null) {
+ String[] row = line.split("\t");
+ for (int i = 1; i < row.length; i++) {
+ String cell = row[i];
+ if (cell.equalsIgnoreCase("-")) {
+ writer.write("NaN");
+ } else {
+ writer.write(cell);
+ }
+
+ if (i > 1) {
+ writer.write("\t");
+ }
+ }
+ writer.newLine();
+ }
+ }
+ }
+ }
+
+ public static void main(String[] args) {
+ new StripMatrix().instanceMain(args);
+ }
+}
\ No newline at end of file
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/wigmath/._Add.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/wigmath/._Add.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/wigmath/._Average.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/wigmath/._Average.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/wigmath/._Divide.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/wigmath/._Divide.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/wigmath/._GaussianSmooth.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/wigmath/._GaussianSmooth.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/wigmath/._LogTransform.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/wigmath/._LogTransform.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/wigmath/._MovingAverageSmooth.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/wigmath/._MovingAverageSmooth.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/wigmath/._Multiply.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/wigmath/._Multiply.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/wigmath/._Scale.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/wigmath/._Scale.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/wigmath/._Subtract.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/wigmath/._Subtract.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/wigmath/._WigMathTool.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/wigmath/._WigMathTool.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/wigmath/._WigSummary.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/wigmath/._WigSummary.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/wigmath/._ZScore.java
b
Binary file java-genomics-toolkit/src/edu/unc/genomics/wigmath/._ZScore.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/wigmath/Add.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/wigmath/Add.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,76 @@
+package edu.unc.genomics.wigmath;
+
+import java.io.IOException;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.broad.igv.bbfile.WigItem;
+
+import com.beust.jcommander.Parameter;
+
+import edu.unc.genomics.CommandLineToolException;
+import edu.unc.genomics.io.WigFile;
+import edu.unc.genomics.io.WigFileException;
+
+public class Add extends WigMathTool {
+
+ private static final Logger log = Logger.getLogger(Add.class);
+
+ @Parameter(description = "Input files", required = true)
+ public List<String> inputFiles = new ArrayList<String>();
+
+ @Override
+ public void setup() {
+ if (inputFiles.size() < 2) {
+ throw new CommandLineToolException("No reason to add < 2 files.");
+ }
+
+ log.debug("Initializing input files");
+ for (String inputFile : inputFiles) {
+ try {
+ addInputFile(WigFile.autodetect(Paths.get(inputFile)));
+ } catch (IOException | WigFileException e) {
+ log.error("Error initializing input Wig file: " + inputFile);
+ e.printStackTrace();
+ throw new CommandLineToolException(e.getMessage());
+ }
+ }
+ log.debug("Initialized " + inputs.size() + " input files");
+ }
+
+ @Override
+ public float[] compute(String chr, int start, int stop) throws IOException, WigFileException {
+ log.debug("Computing sum for chunk "+chr+":"+start+"-"+stop);
+
+ int length = stop - start + 1;
+ float[] sum = new float[length];
+
+ for (WigFile wig : inputs) {
+ Iterator<WigItem> data = wig.query(chr, start, stop);
+ while (data.hasNext()) {
+ WigItem item = data.next();
+ for (int i = item.getStartBase(); i <= item.getEndBase(); i++) {
+ if (i-start >= 0 && i-start < sum.length) {
+ sum[i-start] += item.getWigValue();
+ }
+ }
+ }
+ }
+
+ return sum;
+ }
+
+
+ /**
+  * @param args
+  * @throws WigFileException 
+  * @throws IOException 
+  */
+ public static void main(String[] args) throws IOException, WigFileException {
+ new Add().instanceMain(args);
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/wigmath/Average.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/wigmath/Average.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,84 @@
+package edu.unc.genomics.wigmath;
+
+import java.io.IOException;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.broad.igv.bbfile.WigItem;
+
+import com.beust.jcommander.Parameter;
+
+import edu.unc.genomics.CommandLineToolException;
+import edu.unc.genomics.io.WigFile;
+import edu.unc.genomics.io.WigFileException;
+
+public class Average extends WigMathTool {
+
+ private static final Logger log = Logger.getLogger(Average.class);
+
+ @Parameter(description = "Input files", required = true)
+ public List<String> inputFiles = new ArrayList<String>();
+
+ int numFiles;
+
+ @Override
+ public void setup() {
+ if (inputFiles.size() < 2) {
+ throw new CommandLineToolException("No reason to add < 2 files.");
+ }
+
+ log.debug("Initializing input files");
+ for (String inputFile : inputFiles) {
+ try {
+ addInputFile(WigFile.autodetect(Paths.get(inputFile)));
+ } catch (IOException | WigFileException e) {
+ log.error("Error initializing input Wig file: " + inputFile);
+ e.printStackTrace();
+ throw new CommandLineToolException(e.getMessage());
+ }
+ }
+ log.debug("Initialized " + inputs.size() + " input files");
+
+ numFiles = inputs.size();
+ }
+
+ @Override
+ public float[] compute(String chr, int start, int stop) throws IOException, WigFileException {
+ log.debug("Computing average for chunk "+chr+":"+start+"-"+stop);
+
+ int length = stop - start + 1;
+ float[] avg = new float[length];
+
+ for (WigFile wig : inputs) {
+ Iterator<WigItem> data = wig.query(chr, start, stop);
+ while (data.hasNext()) {
+ WigItem item = data.next();
+ for (int i = item.getStartBase(); i <= item.getEndBase(); i++) {
+ if (i-start >= 0 && i-start < avg.length) {
+ avg[i-start] += item.getWigValue();
+ }
+ }
+ }
+ }
+
+ for (int i = 0; i < avg.length; i++) {
+ avg[i] = avg[i] / numFiles;
+ }
+
+ return avg;
+ }
+
+
+ /**
+  * @param args
+  * @throws WigFileException 
+  * @throws IOException 
+  */
+ public static void main(String[] args) throws IOException, WigFileException {
+ new Average().instanceMain(args);
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/wigmath/Divide.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/wigmath/Divide.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,64 @@
+package edu.unc.genomics.wigmath;
+
+import java.io.IOException;
+import java.util.Iterator;
+
+import org.apache.log4j.Logger;
+import org.broad.igv.bbfile.WigItem;
+
+import com.beust.jcommander.Parameter;
+
+import edu.unc.genomics.io.WigFile;
+import edu.unc.genomics.io.WigFileException;
+
+public class Divide extends WigMathTool {
+
+ private static final Logger log = Logger.getLogger(Divide.class);
+
+ @Parameter(names = {"-n", "--numerator"}, description = "Dividend / Numerator (file 1)", required = true)
+ public WigFile dividendFile;
+ @Parameter(names = {"-d", "--denominator"}, description = "Divisor / Denominator (file 2)", required = true)
+ public WigFile divisorFile;
+
+ @Override
+ public void setup() {
+ inputs.add(dividendFile);
+ inputs.add(divisorFile);
+ log.debug("Initialized " + inputs.size() + " input files");
+ }
+
+ @Override
+ public float[] compute(String chr, int start, int stop) throws IOException, WigFileException {
+ log.debug("Computing difference for chunk "+chr+":"+start+"-"+stop);
+
+ Iterator<WigItem> dividendData = dividendFile.query(chr, start, stop);
+ Iterator<WigItem> divisorData = divisorFile.query(chr, start, stop);
+
+ float[] result = WigFile.flattenData(dividendData, start, stop);
+ while (divisorData.hasNext()) {
+ WigItem item = divisorData.next();
+ for (int i = item.getStartBase(); i <= item.getEndBase(); i++) {
+ if (i-start >= 0 && i-start < result.length) {
+ if (item.getWigValue() != 0) {
+ result[i-start] /= item.getWigValue();
+ } else {
+ result[i-start] = Float.NaN;
+ }
+ }
+ }
+ }
+
+ return result;
+ }
+
+
+ /**
+  * @param args
+  * @throws WigFileException 
+  * @throws IOException 
+  */
+ public static void main(String[] args) throws IOException, WigFileException {
+ new Divide().instanceMain(args);
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/wigmath/GaussianSmooth.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/wigmath/GaussianSmooth.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,74 @@
+package edu.unc.genomics.wigmath;
+
+import java.io.IOException;
+import java.util.Iterator;
+
+import org.apache.log4j.Logger;
+import org.broad.igv.bbfile.WigItem;
+
+import com.beust.jcommander.Parameter;
+
+import edu.unc.genomics.io.WigFile;
+import edu.unc.genomics.io.WigFileException;
+
+public class GaussianSmooth extends WigMathTool {
+
+ private static final Logger log = Logger.getLogger(GaussianSmooth.class);
+
+ @Parameter(names = {"-i", "--input"}, description = "Input file", required = true)
+ public WigFile inputFile;
+ @Parameter(names = {"-s", "--stdev"}, description = "Standard deviation of Gaussian (bp)")
+ public int stdev = 20;
+
+ float[] filter;
+
+ @Override
+ public void setup() {
+ inputs.add(inputFile);
+
+ // Use a window size equal to +/- 3 SD's
+ filter = new float[6*stdev+1];
+ float sum = 0;
+ for (int i = 0; i < filter.length; i++) {
+ float x = i - 3*stdev;
+ float value = (float) Math.exp(-(x*x) / (2*stdev*stdev));
+ filter[i] = value;
+ sum += value;
+ }
+ for (int i = 0; i < filter.length; i++) {
+ filter[i] /= sum;
+ }
+ }
+
+ @Override
+ public float[] compute(String chr, int start, int stop) throws IOException, WigFileException {
+ log.debug("Smoothing chunk "+chr+":"+start+"-"+stop);
+
+ // Pad the query for smoothing
+ int paddedStart = Math.max(start-3*stdev, inputFile.getChrStart(chr));
+ int paddedStop = Math.min(stop+3*stdev, inputFile.getChrStop(chr));
+ Iterator<WigItem> result = inputFile.query(chr, paddedStart, paddedStop);
+ float[] data = WigFile.flattenData(result, start-3*stdev, stop+3*stdev);
+
+ // Convolve the data with the filter
+ float[] smoothed = new float[stop-start+1];
+ for (int i = 0; i < smoothed.length; i++) {
+ for (int j = 0; j < filter.length; j++) {
+ smoothed[i] += data[i+j] * filter[j];
+ }
+ }
+
+ return smoothed;
+ }
+
+
+ /**
+  * @param args
+  * @throws WigFileException 
+  * @throws IOException 
+  */
+ public static void main(String[] args) throws IOException, WigFileException {
+ new GaussianSmooth().instanceMain(args);
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/wigmath/LogTransform.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/wigmath/LogTransform.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,55 @@
+package edu.unc.genomics.wigmath;
+
+import java.io.IOException;
+import java.util.Iterator;
+
+import org.apache.log4j.Logger;
+import org.broad.igv.bbfile.WigItem;
+
+import com.beust.jcommander.Parameter;
+
+import edu.unc.genomics.io.WigFile;
+import edu.unc.genomics.io.WigFileException;
+
+public class LogTransform extends WigMathTool {
+
+ private static final Logger log = Logger.getLogger(LogTransform.class);
+
+ @Parameter(names = {"-i", "--input"}, description = "Input file", required = true)
+ public WigFile inputFile;
+ @Parameter(names = {"-b", "--base"}, description = "Logarithm base (default = 2)")
+ public double base = 2;
+
+ private double baseChange;
+
+ @Override
+ public void setup() {
+ baseChange = Math.log(base);
+ inputs.add(inputFile);
+ }
+
+ @Override
+ public float[] compute(String chr, int start, int stop) throws IOException, WigFileException {
+ log.debug("Computing difference for chunk "+chr+":"+start+"-"+stop);
+
+ Iterator<WigItem> data = inputFile.query(chr, start, stop);
+ float[] result = WigFile.flattenData(data, start, stop);
+
+ for (int i = 0; i < result.length; i++) {
+ result[i] = (float) (Math.log(result[i]) / baseChange);
+ }
+
+ return result;
+ }
+
+
+ /**
+  * @param args
+  * @throws WigFileException 
+  * @throws IOException 
+  */
+ public static void main(String[] args) throws IOException, WigFileException {
+ new LogTransform().instanceMain(args);
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/wigmath/MovingAverageSmooth.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/wigmath/MovingAverageSmooth.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,67 @@
+package edu.unc.genomics.wigmath;
+
+import java.io.IOException;
+import java.util.Iterator;
+
+import org.apache.commons.math.stat.descriptive.DescriptiveStatistics;
+import org.apache.log4j.Logger;
+import org.broad.igv.bbfile.WigItem;
+
+import com.beust.jcommander.Parameter;
+
+import edu.unc.genomics.PositiveIntegerValidator;
+import edu.unc.genomics.io.WigFile;
+import edu.unc.genomics.io.WigFileException;
+
+public class MovingAverageSmooth extends WigMathTool {
+
+ private static final Logger log = Logger.getLogger(MovingAverageSmooth.class);
+
+ @Parameter(names = {"-i", "--input"}, description = "Input file", required = true)
+ public WigFile inputFile;
+ @Parameter(names = {"-w", "--width"}, description = "Width of kernel (bp)")
+ public int width = 10;
+
+ WigFile input;
+ DescriptiveStatistics stats;
+
+ @Override
+ public void setup() {
+ inputs.add(inputFile);
+
+ log.debug("Initializing statistics");
+ stats = new DescriptiveStatistics();
+ stats.setWindowSize(width);
+ }
+
+ @Override
+ public float[] compute(String chr, int start, int stop) throws IOException, WigFileException {
+ log.debug("Smoothing chunk "+chr+":"+start+"-"+stop);
+ // Pad the query so that we can provide values for the ends
+ int queryStart = Math.max(start-width/2, input.getChrStart(chr));
+ int queryStop = Math.min(stop+width/2, input.getChrStop(chr));
+ Iterator<WigItem> result = input.query(chr, queryStart, queryStop);
+ float[] data = WigFile.flattenData(result, queryStart, queryStop);
+
+ float[] smoothed = new float[stop-start+1];
+ for (int bp = start; bp <= stop; bp++) {
+ stats.addValue(data[bp-queryStart]);
+ if (bp-start-width/2 >= 0) {
+ smoothed[bp-start-width/2] = (float) stats.getMean();
+ }
+ }
+
+ return smoothed;
+ }
+
+
+ /**
+  * @param args
+  * @throws WigFileException 
+  * @throws IOException 
+  */
+ public static void main(String[] args) throws IOException, WigFileException {
+ new MovingAverageSmooth().instanceMain(args);
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/wigmath/Multiply.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/wigmath/Multiply.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,73 @@
+package edu.unc.genomics.wigmath;
+
+import java.io.IOException;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.broad.igv.bbfile.WigItem;
+
+import com.beust.jcommander.Parameter;
+
+import edu.unc.genomics.io.WigFile;
+import edu.unc.genomics.io.WigFileException;
+
+public class Multiply extends WigMathTool {
+
+ private static final Logger log = Logger.getLogger(Multiply.class);
+
+ @Parameter(description = "Input files", required = true)
+ public List<String> inputFiles = new ArrayList<String>();
+
+ @Override
+ public void setup() {
+ log.debug("Initializing input files");
+ for (String inputFile : inputFiles) {
+ try {
+ addInputFile(WigFile.autodetect(Paths.get(inputFile)));
+ } catch (IOException | WigFileException e) {
+ log.error("Error initializing input Wig file: " + inputFile);
+ e.printStackTrace();
+ System.exit(-1);
+ }
+ }
+ log.debug("Initialized " + inputs.size() + " input files");
+ }
+
+ @Override
+ public float[] compute(String chr, int start, int stop) throws IOException, WigFileException {
+ log.debug("Computing sum for chunk "+chr+":"+start+"-"+stop);
+
+ int length = stop - start + 1;
+ float[] product = new float[length];
+ Arrays.fill(product, 1);
+
+ for (WigFile wig : inputs) {
+ Iterator<WigItem> data = wig.query(chr, start, stop);
+ while (data.hasNext()) {
+ WigItem item = data.next();
+ for (int i = item.getStartBase(); i <= item.getEndBase(); i++) {
+ if (i-start >= 0 && i-start < product.length) {
+ product[i-start] *= item.getWigValue();
+ }
+ }
+ }
+ }
+
+ return product;
+ }
+
+
+ /**
+  * @param args
+  * @throws WigFileException 
+  * @throws IOException 
+  */
+ public static void main(String[] args) throws IOException, WigFileException {
+ new Multiply().instanceMain(args);
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/wigmath/Scale.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/wigmath/Scale.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,57 @@
+package edu.unc.genomics.wigmath;
+
+import java.io.IOException;
+import java.util.Iterator;
+
+import org.apache.log4j.Logger;
+import org.broad.igv.bbfile.WigItem;
+
+import com.beust.jcommander.Parameter;
+
+import edu.unc.genomics.io.WigFile;
+import edu.unc.genomics.io.WigFileException;
+
+public class Scale extends WigMathTool {
+
+ private static final Logger log = Logger.getLogger(Scale.class);
+
+ @Parameter(names = {"-i", "--input"}, description = "Input file", required = true)
+ public WigFile inputFile;
+ @Parameter(names = {"-m", "--multiplier"}, description = "Multiplier (scale factor, default = 1/mean)")
+ public Double multiplier;
+
+
+ @Override
+ public void setup() {
+ inputs.add(inputFile);
+
+ if (multiplier == null) {
+ multiplier = inputFile.numBases() / inputFile.total();
+ }
+ }
+
+ @Override
+ public float[] compute(String chr, int start, int stop) throws IOException, WigFileException {
+ log.debug("Computing difference for chunk "+chr+":"+start+"-"+stop);
+
+ Iterator<WigItem> data = inputFile.query(chr, start, stop);
+ float[] result = WigFile.flattenData(data, start, stop);
+
+ for (int i = 0; i < result.length; i++) {
+ result[i] = (float) (multiplier * result[i]);
+ }
+
+ return result;
+ }
+
+
+ /**
+  * @param args
+  * @throws WigFileException 
+  * @throws IOException 
+  */
+ public static void main(String[] args) throws IOException, WigFileException {
+ new Scale().instanceMain(args);
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/wigmath/Subtract.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/wigmath/Subtract.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,61 @@
+package edu.unc.genomics.wigmath;
+
+import java.io.IOException;
+import java.util.Iterator;
+
+import org.apache.log4j.Logger;
+import org.broad.igv.bbfile.WigItem;
+
+import com.beust.jcommander.Parameter;
+
+import edu.unc.genomics.io.WigFile;
+import edu.unc.genomics.io.WigFileException;
+
+public class Subtract extends WigMathTool {
+
+ private static final Logger log = Logger.getLogger(Subtract.class);
+
+ @Parameter(names = {"-m", "--minuend"}, description = "Minuend (top - file 1)", required = true)
+ public WigFile minuendFile;
+ @Parameter(names = {"-s", "--subtrahend"}, description = "Subtrahend (bottom - file 2)", required = true)
+ public WigFile subtrahendFile;
+
+ @Override
+ public void setup() {
+ log.debug("Initializing input files");
+ inputs.add(minuendFile);
+ inputs.add(subtrahendFile);
+ log.debug("Initialized " + inputs.size() + " input files");
+ }
+
+ @Override
+ public float[] compute(String chr, int start, int stop) throws IOException, WigFileException {
+ log.debug("Computing difference for chunk "+chr+":"+start+"-"+stop);
+
+ Iterator<WigItem> minuendData = minuendFile.query(chr, start, stop);
+ Iterator<WigItem> subtrahendData = subtrahendFile.query(chr, start, stop);
+
+ float[] result = WigFile.flattenData(minuendData, start, stop);
+ while (subtrahendData.hasNext()) {
+ WigItem item = subtrahendData.next();
+ for (int i = item.getStartBase(); i <= item.getEndBase(); i++) {
+ if (i-start >= 0 && i-start < result.length) {
+ result[i-start] -= item.getWigValue();
+ }
+ }
+ }
+
+ return result;
+ }
+
+
+ /**
+  * @param args
+  * @throws WigFileException 
+  * @throws IOException 
+  */
+ public static void main(String[] args) throws IOException, WigFileException {
+ new Subtract().instanceMain(args);
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/wigmath/WigMathTool.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/wigmath/WigMathTool.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,170 @@
+package edu.unc.genomics.wigmath;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.log4j.Logger;
+
+import com.beust.jcommander.Parameter;
+
+import edu.unc.genomics.CommandLineTool;
+import edu.unc.genomics.io.WigFile;
+import edu.unc.genomics.io.WigFileException;
+
+/**
+ * Abstract class for writing programs to do computation on Wig files
+ * Concrete subclasses must implement the compute method
+ * 
+ * @author timpalpant
+ *
+ */
+public abstract class WigMathTool extends CommandLineTool {
+
+ private static final Logger log = Logger.getLogger(WigMathTool.class);
+
+ public static final int DEFAULT_CHUNK_SIZE = 500_000;
+
+ // TODO: Variable resolution output
+
+ @Parameter(names = {"-o", "--output"}, description = "Output file", required = true)
+ public Path outputFile;
+
+ protected List<WigFile> inputs = new ArrayList<WigFile>();
+
+ public void addInputFile(WigFile wig) {
+ inputs.add(wig);
+ }
+
+ /**
+  * Setup the computation. Should add all input Wig files
+  * with addInputFile() during setup
+  */
+ public abstract void setup();
+
+ /**
+  * Do the computation on a chunk and return the results
+  * Must return (stop-start+1) values
+  * 
+  * @param chr
+  * @param start
+  * @param stop
+  * @return the results of the computation for this chunk
+  * @throws IOException
+  * @throws WigFileException
+  */
+ public abstract float[] compute(String chr, int start, int stop)
+  throws IOException, WigFileException;
+
+ @Override
+ public void run() throws IOException {
+ log.debug("Executing setup operations");
+ setup();
+
+ log.debug("Processing files and writing result to disk");
+ try (BufferedWriter writer = Files.newBufferedWriter(outputFile, Charset.defaultCharset())) {
+ // Write the Wig header
+ writer.write("track type=wiggle_0");
+ writer.newLine();
+
+ Set<String> chromosomes = getCommonChromosomes(inputs);
+ log.debug("Found " + chromosomes.size() + " chromosomes in common between all inputs");
+ for (String chr : chromosomes) {
+ int start = getMaxChrStart(inputs, chr);
+ int stop = getMinChrStop(inputs, chr);
+ log.debug("Processing chromosome " + chr + " region " + start + "-" + stop);
+
+ // Write the chromosome header to output
+ writer.write("fixedStep chrom="+chr+" start="+start+" step=1 span=1");
+ writer.newLine();
+
+ // Process the chromosome in chunks
+ int bp = start;
+ while (bp < stop) {
+ int chunkStart = bp;
+ int chunkStop = Math.min(bp+DEFAULT_CHUNK_SIZE-1, stop);
+ int expectedLength = chunkStop - chunkStart + 1;
+ log.debug("Processing chunk "+chr+":"+chunkStart+"-"+chunkStop);
+
+ float[] result = null;
+ try {
+ result = compute(chr, chunkStart, chunkStop);
+ } catch (WigFileException e) {
+ log.fatal("Wig file error while processing chunk " + chr + " region " + start + "-" + stop);
+ e.printStackTrace();
+ throw new RuntimeException("Wig file error while processing chunk " + chr + " region " + start + "-" + stop);
+ }
+
+ if (result.length != expectedLength) {
+ log.error("Expected result length="+expectedLength+", got="+result.length);
+ throw new RuntimeException("Result is not the expected length!");
+ }
+
+ for (int i = 0; i < result.length; i++) {
+ writer.write(Float.toString(result[i]));
+ writer.newLine();
+ }
+
+ bp = chunkStop + 1;
+ }
+ }
+ }
+
+ for (WigFile wig : inputs) {
+ wig.close();
+ }
+ }
+
+ public int getMaxChrStart(List<WigFile> wigs, String chr) {
+ int max = -1;
+ for (WigFile wig : wigs) {
+ if (wig.getChrStart(chr) > max) {
+ max = wig.getChrStart(chr);
+ }
+ }
+
+ return max;
+ }
+
+ public int getMinChrStop(List<WigFile> wigs, String chr) {
+ if (wigs.size() == 0) {
+ return -1;
+ }
+
+ int min = Integer.MAX_VALUE;
+ for (WigFile wig : wigs) {
+ if (wig.getChrStop(chr) < min) {
+ min = wig.getChrStop(chr);
+ }
+ }
+
+ return min;
+ }
+
+ public Set<String> getCommonChromosomes(List<WigFile> wigs) {
+ if (wigs.size() == 0) {
+ return new HashSet<String>();
+ }
+
+ Set<String> chromosomes = wigs.get(0).chromosomes();
+ Iterator<String> it = chromosomes.iterator();
+ while(it.hasNext()) {
+ String chr = it.next();
+ for (WigFile wig : wigs) {
+ if (!wig.includes(chr)) {
+ it.remove();
+ break;
+ }
+ }
+ }
+
+ return chromosomes;
+ }
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/wigmath/WigSummary.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/wigmath/WigSummary.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,44 @@
+package edu.unc.genomics.wigmath;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+import org.apache.log4j.Logger;
+
+import com.beust.jcommander.Parameter;
+
+import edu.unc.genomics.CommandLineTool;
+import edu.unc.genomics.io.WigFile;
+import edu.unc.genomics.io.WigFileException;
+import edu.unc.genomics.ngs.Autocorrelation;
+
+public class WigSummary extends CommandLineTool {
+
+ private static final Logger log = Logger.getLogger(Autocorrelation.class);
+
+ @Parameter(names = {"-i", "--input"}, description = "Input file", required = true)
+ public WigFile inputFile;
+ @Parameter(names = {"-o", "--output"}, description = "Output file")
+ public Path outputFile;
+
+ public void run() throws IOException {
+ String summary = inputFile.toString();
+
+ if (outputFile != null) {
+ log.debug("Writing to output file");
+ try (BufferedWriter writer = Files.newBufferedWriter(outputFile, Charset.defaultCharset())) {
+ writer.write(summary);
+ }
+ } else {
+ System.out.println(summary);
+ }
+ }
+
+ public static void main(String[] args) throws IOException, WigFileException {
+ new WigSummary().instanceMain(args);
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/genomics/wigmath/ZScore.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/genomics/wigmath/ZScore.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,60 @@
+package edu.unc.genomics.wigmath;
+
+import java.io.IOException;
+import java.util.Iterator;
+
+import org.apache.log4j.Logger;
+import org.broad.igv.bbfile.WigItem;
+
+import com.beust.jcommander.Parameter;
+
+import edu.unc.genomics.CommandLineToolException;
+import edu.unc.genomics.io.WigFile;
+import edu.unc.genomics.io.WigFileException;
+
+public class ZScore extends WigMathTool {
+
+ private static final Logger log = Logger.getLogger(ZScore.class);
+
+ @Parameter(names = {"-i", "--input"}, description = "Input file", required = true)
+ public WigFile inputFile;
+
+ double mean;
+ double stdev;
+
+ @Override
+ public void setup() {
+ inputs.add(inputFile);
+
+ mean = inputFile.mean();
+ stdev = inputFile.stdev();
+ if(stdev == 0) {
+ log.error("Cannot Z-score a file with stdev = 0!");
+ throw new CommandLineToolException("Cannot Z-score a file with stdev = 0!");
+ }
+ }
+
+ @Override
+ public float[] compute(String chr, int start, int stop) throws IOException, WigFileException {
+ log.debug("Computing difference for chunk "+chr+":"+start+"-"+stop);
+ Iterator<WigItem> data = inputFile.query(chr, start, stop);
+ float[] result = WigFile.flattenData(data, start, stop);
+
+ for (int i = 0; i < result.length; i++) {
+ result[i] = (float)((result[i] - mean) / stdev);
+ }
+
+ return result;
+ }
+
+
+ /**
+  * @param args
+  * @throws WigFileException 
+  * @throws IOException 
+  */
+ public static void main(String[] args) throws IOException, WigFileException {
+ new ZScore().instanceMain(args);
+ }
+
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/utils/._RomanNumeral.java
b
Binary file java-genomics-toolkit/src/edu/unc/utils/._RomanNumeral.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/utils/._SortUtils.java
b
Binary file java-genomics-toolkit/src/edu/unc/utils/._SortUtils.java has changed
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/utils/RomanNumeral.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/utils/RomanNumeral.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,57 @@
+package edu.unc.utils;
+
+// Rudimentary Class for doing Arabic Integer -> Roman Numeral conversion
+// Adapted by Timothy Palpant
+// File   : gui/componenents/calculators/Roman.java
+// Description: A static method for converting binary integers to Roman numbers.
+// Illustrates: Static inner value class, StringBuffer, throw exceptions.
+// Author : Fred Swartz - 2006-12-29 - Placed in public domain.
+public class RomanNumeral {
+
+ // This could be alternatively be done with parallel arrays.
+ // Another alternative would be Pair<Integer, String>
+ final static RomanValue[] ROMAN_VALUE_TABLE = {
+ new RomanValue(1000, "M"),
+ new RomanValue( 900, "CM"),
+ new RomanValue( 500, "D"),
+ new RomanValue( 400, "CD"),
+ new RomanValue( 100, "C"),
+ new RomanValue(  90, "XC"),
+ new RomanValue(  50, "L"),
+ new RomanValue(  40, "XL"),
+ new RomanValue(  10, "X"),
+ new RomanValue(   9, "IX"),
+ new RomanValue(   5, "V"),
+ new RomanValue(   4, "IV"),
+ new RomanValue(   1, "I")
+ };
+
+ public static String int2roman(int n) {
+ if (n >= 4000  || n < 1) {
+ throw new NumberFormatException("Numbers must be in range 1-3999");
+ }
+ StringBuilder result = new StringBuilder(10);
+
+ //... Start with largest value, and work toward smallest.
+ for (RomanValue equiv : ROMAN_VALUE_TABLE) {
+ //... Remove as many of this value as possible (maybe none).
+ while (n >= equiv.intVal) {
+ n -= equiv.intVal;            // Subtract value.
+ result.append(equiv.romVal);  // Add roman equivalent.
+ }
+ }
+ return result.toString();
+ }
+
+ private static class RomanValue {
+ //... No need to make this fields private because they are
+ //    used only in this private value class.
+ int    intVal;     // Integer value.
+ String romVal;     // Equivalent roman numeral.
+
+ RomanValue(int dec, String rom) {
+ this.intVal = dec;
+ this.romVal = rom;
+ }
+ }
+}
\ No newline at end of file
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/src/edu/unc/utils/SortUtils.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/src/edu/unc/utils/SortUtils.java Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,60 @@
+package edu.unc.utils;
+
+/**
+ * Custom sorting utilities
+ * see: http://stackoverflow.com/questions/951848/java-array-sort-quick-way-to-get-a-sorted-list-of-indices-of-an-array
+ * @author timpalpant
+ *
+ */
+public class SortUtils {
+ public static int[] indexSort(float[] main) {
+ int[] index = new int[main.length];
+ for (int i = 0; i < index.length; i++) {
+ index[i] = i;
+ }
+
+ quicksort(main, index, 0, index.length-1);
+
+ return index;
+ }
+
+ // quicksort a[left] to a[right]
+ public static void quicksort(float[] a, int[] index, int left, int right) {
+ if (right <= left)
+ return;
+ int i = partition(a, index, left, right);
+ quicksort(a, index, left, i - 1);
+ quicksort(a, index, i + 1, right);
+ }
+
+ // partition a[left] to a[right], assumes left < right
+ private static int partition(float[] a, int[] index, int left, int right) {
+ int i = left - 1;
+ int j = right;
+ while (true) {
+ while (a[index[++i]] < a[index[right]])
+ // find item on left to swap
+ ; // a[right] acts as sentinel
+ while (a[index[right]] < a[index[--j]])
+ // find item on right to swap
+ if (j == left)
+ break; // don't go out-of-bounds
+ if (i >= j)
+ break; // check if pointers cross
+ exch(a, index, i, j); // swap two elements into place
+ }
+ exch(a, index, i, right); // swap with partition element
+ return i;
+ }
+
+ // exchange a[i] and a[j]
+ private static void exch(float[] a, int[] index, int i, int j) {
+ // Don't swap the data
+ // float swap = a[i];
+ // a[i] = a[j];
+ // a[j] = swap;
+ int b = index[i];
+ index[i] = index[j];
+ index[j] = b;
+ }
+}
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/stubFile.sh
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/stubFile.sh Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,4 @@
+#!/usr/bin/env bash
+
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+java -Dlog4j.configuration=log4j.properties -cp "$DIR/../Resources/Java/*" edu.unc.genomics.ToolRunner
\ No newline at end of file
b
diff -r 000000000000 -r 1daf3026d231 java-genomics-toolkit/toolRunner.sh
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java-genomics-toolkit/toolRunner.sh Mon Feb 13 21:55:55 2012 -0500
[
@@ -0,0 +1,14 @@
+#!/usr/bin/env bash
+
+if [ $# -eq 0 ]
+then
+  echo "USAGE: toolRunner.sh APPNAME [ARGS]";
+  exit;
+fi
+
+if [ "$1" = "list" ]
+then
+  find src/edu/unc/genomics/**/*.java -exec basename -s .java {} \;
+fi
+
+java -Dlog4j.configuration=log4j.properties -cp .:build:lib/* edu.unc.genomics."$@"
\ No newline at end of file