diff -Nru mitcr-1.0.2/.flow mitcr-1.0.3/.flow --- mitcr-1.0.2/.flow 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/.flow 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -[branchname] -master = default -develop = develop -feature = feature/ -release = release/ -hotfix = hotfix/ -support = support/ - diff -Nru mitcr-1.0.2/.hg_archival.txt mitcr-1.0.3/.hg_archival.txt --- mitcr-1.0.2/.hg_archival.txt 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/.hg_archival.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -repo: 844e945cd218ff60d9c7f5a006248ec49aa58a16 -node: 4018053dcaa1bb3bf00f79f85beef3778a3f0004 -branch: default -tag: v1.0.2 diff -Nru mitcr-1.0.2/.hgignore mitcr-1.0.3/.hgignore --- mitcr-1.0.2/.hgignore 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/.hgignore 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -target/ -nbactions.*\.xml$ -nb-configuration.xml$ -\.log$ -\.log\. -\.iml$ -.idea\/ -\.DS_Store$ diff -Nru mitcr-1.0.2/.hgtags mitcr-1.0.3/.hgtags --- mitcr-1.0.2/.hgtags 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/.hgtags 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -a4c341c82927419185658d70ad2ebb2722b067c4 v1.0 -be7bfb9355909c516c0924b9e44fb32c7ff33276 d_segment_rc -cb429a954d695e15200132061c4757d035defe6c v1.0.1 diff -Nru mitcr-1.0.2/debian/changelog mitcr-1.0.3/debian/changelog --- mitcr-1.0.2/debian/changelog 2013-09-17 14:52:58.000000000 +0000 +++ mitcr-1.0.3/debian/changelog 2013-10-10 20:27:44.000000000 +0000 @@ -1,3 +1,9 @@ +mitcr (1.0.3-1~saucy) saucy; urgency=low + + * Release 1.0.3 + + -- Dmitriy Bolotin Thu, 10 Oct 2013 19:15:56 +0400 + mitcr (1.0.2-10~saucy) saucy; urgency=low * Corrections to start script diff -Nru mitcr-1.0.2/debian/control mitcr-1.0.3/debian/control --- mitcr-1.0.2/debian/control 2013-09-17 14:52:58.000000000 +0000 +++ mitcr-1.0.3/debian/control 2013-10-10 20:27:44.000000000 +0000 @@ -4,7 +4,7 @@ Maintainer: Dmitriy Bolotin Uploaders: Dmitriy Bolotin Build-Depends: debhelper (>= 7), cdbs, openjdk-7-jdk, maven-debian-helper (>= 1.5) -Build-Depends-Indep: libcommons-cli-java, libmicommons-java, libtrove3-java (>= 3.0.3), +Build-Depends-Indep: libcommons-cli-java, libmicommons-java (>= 1.0.3), libtrove3-java (>= 3.0.3), junit4, openjdk-7-doc, libmaven-javadoc-plugin-java Standards-Version: 3.9.2 Vcs-Svn: svn://svn.debian.org/svn/pkg-java/trunk/mitcr diff -Nru mitcr-1.0.2/debian/maven.properties mitcr-1.0.3/debian/maven.properties --- mitcr-1.0.2/debian/maven.properties 2013-09-17 14:52:58.000000000 +0000 +++ mitcr-1.0.3/debian/maven.properties 2013-10-10 20:27:44.000000000 +0000 @@ -2,7 +2,7 @@ # For example: # maven.test.skip=true -timestamp=15-08-2013 13:39 +0400 +timestamp=09-10-2013 10:05 +0200 hgBranch=default -changeSetDate=2013-08-12 15:19 +0400 -changeSet=4018053dcaa1 +changeSetDate=2013-10-09 10:03 +0200 +changeSet=21d90ccd8c0d diff -Nru mitcr-1.0.2/debian/patches/01_pom_cleanup.patch mitcr-1.0.3/debian/patches/01_pom_cleanup.patch --- mitcr-1.0.2/debian/patches/01_pom_cleanup.patch 2013-09-17 14:52:58.000000000 +0000 +++ mitcr-1.0.3/debian/patches/01_pom_cleanup.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,237 +0,0 @@ -Description: pom cleanup - TODO: Put a short summary on the line above and replace this paragraph - with a longer explanation of this change. Complete the meta-information - with other relevant fields (see below for details). To make it easier, the - information below has been extracted from the changelog. Adjust it or drop - it. - . - mitcr (1.0.2-1) UNRELEASED; urgency=low - . - * Initial release (Closes: #nnnn) -Author: Dmitriy Bolotin - ---- -The information above should follow the Patch Tagging Guidelines, please -checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here -are templates for supplementary fields that you might want to add: - -Origin: , -Bug: -Bug-Debian: http://bugs.debian.org/ -Bug-Ubuntu: https://launchpad.net/bugs/ -Forwarded: -Reviewed-By: -Last-Update: - ---- mitcr-1.0.2.orig/pom.xml -+++ mitcr-1.0.2/pom.xml -@@ -28,12 +28,6 @@ - jar - MiTCR - -- -- org.sonatype.oss -- oss-parent -- 7 -- -- - - MiTCR is an open source software package aimed at extraction of information - on repertoire of T-cell clones from Next Generation Sequencing (NGS) data. -@@ -107,7 +101,6 @@ - - - UTF-8 -- yyyy-MM-dd HH:mm Z - - - -@@ -116,116 +109,9 @@ - https://bitbucket.org/milaboratory/mitcr/src/?at=v1.0.2 - - -- -- -- vcs.info -- -- -- -- -- -- -- ${basedir}/.hg -- -- -- -- -- -- -- maven-antrun-plugin -- 1.7 -- -- -- validate -- -- -- -- -- true -- -- -- run -- -- -- -- -- -- -- -- -- -- -- -- no.vcs.info -- -- -- -- -- -- -- ${basedir}/.hg -- -- -- -- -- -- -- maven-antrun-plugin -- 1.7 -- -- -- validate -- -- -- -- -- -- -- true -- -- -- run -- -- -- -- -- -- -- -- -- - - - -- com.keyboardsamurais.maven -- maven-timestamp-plugin -- 1.0 -- -- timestamp -- dd-MM-yyyy HH:mm Z -- -- -- -- -- create -- -- -- -- -- -- - org.apache.maven.plugins - maven-jar-plugin - 2.3.1 -@@ -245,70 +131,6 @@ - - - -- org.apache.maven.plugins -- maven-shade-plugin -- 2.0 -- -- -- package -- -- shade -- -- -- false -- true -- -- -- org.jdom:jdom -- -- ** -- -- -- -- *:* -- -- META-INF/localization/* -- META-INF/*.txt -- META-INF/*.xml -- JDOMAbout*.class -- -- -- -- -- -- -- com.milaboratory.mitcr.cli.Main -- -- -- META-INF/README -- README.txt -- -- -- META-INF/LICENSE -- LICENSE.txt -- -- -- META-INF/AUTHORS -- AUTHORS.txt -- -- -- META-INF/NOTICE -- NOTICE.txt -- -- -- true -- distribution -- -- -- -- -- -- - org.apache.maven.plugins - maven-resources-plugin - 2.4.3 diff -Nru mitcr-1.0.2/debian/patches/02_test_ignore.patch mitcr-1.0.3/debian/patches/02_test_ignore.patch --- mitcr-1.0.2/debian/patches/02_test_ignore.patch 2013-09-17 14:52:58.000000000 +0000 +++ mitcr-1.0.3/debian/patches/02_test_ignore.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,43 +0,0 @@ -Description: - TODO: Put a short summary on the line above and replace this paragraph - with a longer explanation of this change. Complete the meta-information - with other relevant fields (see below for details). To make it easier, the - information below has been extracted from the changelog. Adjust it or drop - it. - . - mitcr (1.0.2-2~precise) precise; urgency=low - . - * Initial release -Author: Dmitriy Bolotin - ---- -The information above should follow the Patch Tagging Guidelines, please -checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here -are templates for supplementary fields that you might want to add: - -Origin: , -Bug: -Bug-Debian: http://bugs.debian.org/ -Bug-Ubuntu: https://launchpad.net/bugs/ -Forwarded: -Reviewed-By: -Last-Update: - ---- mitcr-1.0.2.orig/src/test/java/com/milaboratory/mitcr/clonegenerator/AverageQualityCalculatorTest.java -+++ mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/clonegenerator/AverageQualityCalculatorTest.java -@@ -3,6 +3,7 @@ package com.milaboratory.mitcr.clonegene - import org.apache.commons.math.random.*; - import org.apache.commons.math.stat.descriptive.SummaryStatistics; - import org.junit.Assert; -+import org.junit.Ignore; - import org.junit.Test; - - public class AverageQualityCalculatorTest { -@@ -25,6 +26,7 @@ public class AverageQualityCalculatorTes - Assert.assertEquals(0.5, ss.getStandardDeviation(), 0.05); - } - -+ @Ignore - @Test - public void test2() throws Exception { - RandomGenerator rg = new Well19937a(); diff -Nru mitcr-1.0.2/debian/patches/03_su_script.patch mitcr-1.0.3/debian/patches/03_su_script.patch --- mitcr-1.0.2/debian/patches/03_su_script.patch 2013-09-17 14:52:58.000000000 +0000 +++ mitcr-1.0.3/debian/patches/03_su_script.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,92 +0,0 @@ -Description: - TODO: Put a short summary on the line above and replace this paragraph - with a longer explanation of this change. Complete the meta-information - with other relevant fields (see below for details). To make it easier, the - information below has been extracted from the changelog. Adjust it or drop - it. - . - mitcr (1.0.2-9~SERIES) SERIES; urgency=low - . - * Free memory calculation algorithm fixed -Author: Dmitriy Bolotin - ---- -The information above should follow the Patch Tagging Guidelines, please -checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here -are templates for supplementary fields that you might want to add: - -Origin: , -Bug: -Bug-Debian: http://bugs.debian.org/ -Bug-Ubuntu: https://launchpad.net/bugs/ -Forwarded: -Reviewed-By: -Last-Update: - ---- /dev/null -+++ mitcr-1.0.2/src/scripts/mitcr -@@ -0,0 +1,49 @@ -+#!/bin/bash -+ -+freem=`free -m | sed 's/\s\+/ /g' | cut -d' ' -f4 | head -n 2 | tail -n 1 | tr -d '\n'` -+buffersm=`free -m | sed 's/\s\+/ /g' | cut -d' ' -f6 | head -n 2 | tail -n 1 | tr -d '\n'` -+cachedm=`free -m | sed 's/\s\+/ /g' | cut -d' ' -f7 | head -n 2 | tail -n 1 | tr -d '\n'` -+ -+free_memory=`echo "$freem+$buffersm+$cachedm" | bc` -+ -+java_memory=`echo "$free_memory*9/10" | bc` -+ -+classpath="/usr/share/java/micommons.jar:/usr/share/java/redberry-pipe.jar:/usr/share/java/jdom1.jar:/usr/share/java/commons-compress.jar:/usr/share/java/commons-math.jar:/usr/share/java/commons-cli.jar:/usr/share/java/trove3.jar:/usr/share/java/mitcr.jar" -+xmx="${java_memory}m" -+params=("$@") -+ -+java_path=`ls -1 /usr/lib/jvm | grep java-7-openjdk | grep -v common | tr -d '\n'` -+if [ -z "$java_path" ]; then -+ java_path=`ls -1 /usr/lib/jvm | grep java-7 | head -n 1 | tr -d '\n'` -+fi -+java_path="/usr/lib/jvm/${java_path}/bin/java" -+ -+if [ ! -f "$java_path" ]; then -+ echo "Can't find Java 7 on your system." -+fi -+ -+auto_memory=true -+ -+for ((n=0; n < ${#params[@]}; n++)) -+do -+ if [[ "${params[$n]}" == -Xmx* ]] -+ then -+ xmx="${params[$n]:4}" -+ unset params[$n] -+ auto_memory=false -+ fi -+done -+ -+if $auto_memory ; then -+ echo "Max java heap space automatically set to ${xmx} (90% of free memory). Use '-Xmx' option to adjust this value." -+else -+ echo "Java heap space set to ${xmx}." -+fi -+ -+options="-XX:+AggressiveOpts" -+ -+if [[ `uname -i` == "x86_64" ]]; then -+ options="$options -XX:+DoEscapeAnalysis" -+fi -+ -+eval "${java_path} -Dexecutable=mitcr $options -cp $classpath -Xmx${xmx} com.milaboratory.mitcr.cli.Main ${params[@]}" ---- mitcr-1.0.2.orig/src/main/java/com/milaboratory/mitcr/cli/Main.java -+++ mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/cli/Main.java -@@ -439,9 +439,9 @@ public class Main { - } - }); - final String executable = System.getProperty("executable", "java -jar mitcr.jar"); -- err.println("usage: " + executable + " -preset [options] input_file output_file.cls"); -- err.println(" " + executable + " -preset [options] input_file output_file.txt"); -- err.println(" " + executable + " -preset [options] -export newPresetName"); -+ err.println("usage: " + executable + " -pset [options] input_file output_file.cls"); -+ err.println(" " + executable + " -pset [options] input_file output_file.txt"); -+ err.println(" " + executable + " -pset [options] -export newPresetName"); - err.println(); - - formatter.printOptions(new PrintWriter(err, true), 85, options, 2, 3); diff -Nru mitcr-1.0.2/debian/patches/pom_cleanup.patch mitcr-1.0.3/debian/patches/pom_cleanup.patch --- mitcr-1.0.2/debian/patches/pom_cleanup.patch 1970-01-01 00:00:00.000000000 +0000 +++ mitcr-1.0.3/debian/patches/pom_cleanup.patch 2013-10-10 20:27:44.000000000 +0000 @@ -0,0 +1,237 @@ +Description: + TODO: Put a short summary on the line above and replace this paragraph + with a longer explanation of this change. Complete the meta-information + with other relevant fields (see below for details). To make it easier, the + information below has been extracted from the changelog. Adjust it or drop + it. + . + mitcr (1.0.3-1~SERIES) SERIES; urgency=low + . + * Release 1.0.3 +Author: Dmitriy Bolotin + +--- +The information above should follow the Patch Tagging Guidelines, please +checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here +are templates for supplementary fields that you might want to add: + +Origin: , +Bug: +Bug-Debian: http://bugs.debian.org/ +Bug-Ubuntu: https://launchpad.net/bugs/ +Forwarded: +Reviewed-By: +Last-Update: + +--- mitcr-1.0.3.orig/pom.xml ++++ mitcr-1.0.3/pom.xml +@@ -29,12 +29,6 @@ + MiTCR + http://mitcr.milaboratory.com/ + +- +- org.sonatype.oss +- oss-parent +- 7 +- +- + + MiTCR is an open source software package aimed at extraction of information + on repertoire of T-cell clones from Next Generation Sequencing (NGS) data. +@@ -122,119 +116,9 @@ + http://dev.milaboratory.com/ + + +- +- +- vcs.info +- +- +- +- +- +- +- ${basedir}/../.hg +- +- +- +- +- +- +- maven-antrun-plugin +- 1.7 +- +- +- validate +- +- +- +- +- true +- +- +- run +- +- +- +- +- +- +- org.codehaus.mojo +- buildnumber-maven-plugin +- 1.1 +- +- +- validate +- +- hgchangeset +- +- +- +- +- ./.. +- +- +- +- +- +- +- +- no.vcs.info +- +- +- +- +- +- +- ${basedir}/../.hg +- +- +- +- +- +- +- maven-antrun-plugin +- 1.7 +- +- +- validate +- +- +- +- +- +- +- true +- +- +- run +- +- +- +- +- +- +- +- +- + + + +- com.keyboardsamurais.maven +- maven-timestamp-plugin +- 1.0 +- +- timestamp +- dd-MM-yyyy HH:mm Z +- +- +- +- +- create +- +- +- +- +- +- + org.apache.maven.plugins + maven-jar-plugin + 2.3.1 +@@ -254,76 +138,6 @@ + + + +- org.apache.maven.plugins +- maven-shade-plugin +- 2.0 +- +- +- package +- +- shade +- +- +- false +- true +- +- +- org.jdom:jdom +- +- ** +- +- +- +- com.milaboratory:micommons +- +- ** +- +- +- +- *:* +- +- META-INF/localization/* +- META-INF/*.txt +- META-INF/*.xml +- JDOMAbout*.class +- +- +- +- +- +- +- com.milaboratory.mitcr.cli.Main +- +- +- META-INF/README +- README.txt +- +- +- META-INF/LICENSE +- LICENSE.txt +- +- +- META-INF/AUTHORS +- AUTHORS.txt +- +- +- META-INF/NOTICE +- NOTICE.txt +- +- +- true +- distribution +- +- +- +- +- +- + org.apache.maven.plugins + maven-resources-plugin + 2.4.3 diff -Nru mitcr-1.0.2/debian/patches/series mitcr-1.0.3/debian/patches/series --- mitcr-1.0.2/debian/patches/series 2013-09-17 14:52:58.000000000 +0000 +++ mitcr-1.0.3/debian/patches/series 2013-10-10 20:27:44.000000000 +0000 @@ -1,3 +1 @@ -01_pom_cleanup.patch -02_test_ignore.patch -03_su_script.patch +pom_cleanup.patch diff -Nru mitcr-1.0.2/l4j.xml mitcr-1.0.3/l4j.xml --- mitcr-1.0.2/l4j.xml 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/l4j.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,43 +0,0 @@ - - - false - console - /Volumes/Data/Projects/MiLaboratory/mitcr/target/mitcr.jar - /Volumes/Data/Projects/MiLaboratory/mitcr/target/mitcr.exe - - - - normal - http://java.com/download - - false - false - - - - - 1.7.0 - - preferJre - 70 - - \ No newline at end of file diff -Nru mitcr-1.0.2/pom.xml mitcr-1.0.3/pom.xml --- mitcr-1.0.2/pom.xml 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/pom.xml 2013-10-09 08:03:10.000000000 +0000 @@ -24,9 +24,10 @@ com.milaboratory mitcr - 1.0.2 + 1.0.3 jar MiTCR + http://mitcr.milaboratory.com/ org.sonatype.oss @@ -85,7 +86,7 @@ com.milaboratory micommons - 0.9 + 1.0.3 commons-cli @@ -112,10 +113,15 @@ scm:hg:http://bitbucket.org/milaboratory/mitcr - v1.0.2 - https://bitbucket.org/milaboratory/mitcr/src/?at=v1.0.2 + v1.0.3 + https://bitbucket.org/milaboratory/mitcr/src/?at=v1.0.3 + + YouTrack + http://dev.milaboratory.com/ + + vcs.info @@ -125,7 +131,7 @@ - ${basedir}/.hg + ${basedir}/../.hg @@ -139,7 +145,7 @@ validate - + true @@ -150,7 +156,7 @@ - + + ./.. + + @@ -175,7 +184,7 @@ - ${basedir}/.hg + ${basedir}/../.hg @@ -265,6 +274,12 @@ + com.milaboratory:micommons + + ** + + + *:* META-INF/localization/* Binary files /tmp/5_yOnfIyun/mitcr-1.0.2/src/.DS_Store and /tmp/kGPchmFFbO/mitcr-1.0.3/src/.DS_Store differ Binary files /tmp/5_yOnfIyun/mitcr-1.0.2/src/main/.DS_Store and /tmp/kGPchmFFbO/mitcr-1.0.3/src/main/.DS_Store differ diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/core/clone/CloneImpl.java mitcr-1.0.3/src/main/java/com/milaboratory/core/clone/CloneImpl.java --- mitcr-1.0.2/src/main/java/com/milaboratory/core/clone/CloneImpl.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/core/clone/CloneImpl.java 2013-10-09 08:03:10.000000000 +0000 @@ -39,7 +39,7 @@ */ public class CloneImpl implements Clone { protected final int id; - protected final NucleotideSQPair cdr3; + protected NucleotideSQPair cdr3; //V = 0; J = 1; D = 2 protected final BitArray[] barcodes = new BitArray[3]; protected int[] segmentCoords; diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/core/clone/CloneSet.java mitcr-1.0.3/src/main/java/com/milaboratory/core/clone/CloneSet.java --- mitcr-1.0.2/src/main/java/com/milaboratory/core/clone/CloneSet.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/core/clone/CloneSet.java 2013-10-09 08:03:10.000000000 +0000 @@ -34,7 +34,7 @@ * @author Bolotin Dmitriy (bolotin.dmitriy@gmail.com) * @author Shugay Mikhail (mikhail.shugay@gmail.com) */ -public interface CloneSet { +public interface CloneSet extends Iterable { /** * Gets total number of CDR3-containing sequences in dataset * diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/core/clone/CloneSetImpl.java mitcr-1.0.3/src/main/java/com/milaboratory/core/clone/CloneSetImpl.java --- mitcr-1.0.2/src/main/java/com/milaboratory/core/clone/CloneSetImpl.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/core/clone/CloneSetImpl.java 2013-10-09 08:03:10.000000000 +0000 @@ -100,6 +100,11 @@ } @Override + public Iterator iterator() { + return (Iterator) clones.iterator(); + } + + @Override public SegmentGroupContainer getSegmentGroupContainer(SegmentGroupType type) { return segmentContainers[type.id()]; } diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/core/io/CloneSetIO.java mitcr-1.0.3/src/main/java/com/milaboratory/core/io/CloneSetIO.java --- mitcr-1.0.2/src/main/java/com/milaboratory/core/io/CloneSetIO.java 1970-01-01 00:00:00.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/core/io/CloneSetIO.java 2013-10-09 08:03:10.000000000 +0000 @@ -0,0 +1,266 @@ +/* + * MiTCR + * + * Copyright (c) 2010-2013: + * Bolotin Dmitriy + * Chudakov Dmitriy + * + * MiTCR is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package com.milaboratory.core.io; + +import com.milaboratory.core.clone.Clone; +import com.milaboratory.core.clone.CloneImpl; +import com.milaboratory.core.clone.CloneSet; +import com.milaboratory.core.clone.CloneSetImpl; +import com.milaboratory.core.segment.*; +import com.milaboratory.core.sequence.NucleotideSQPair; +import com.milaboratory.core.sequence.nucleotide.NucleotideSequence; +import com.milaboratory.core.sequence.quality.QualityFormat; +import com.milaboratory.core.sequence.quality.SequenceQualityPhred; +import com.milaboratory.mitcr.cli.ExportDetalizationLevel; +import com.milaboratory.mitcr.cli.ParametersIO; +import com.milaboratory.mitcr.pipeline.Parameters; +import com.milaboratory.util.BitArray; +import com.milaboratory.util.CompressionType; +import com.milaboratory.util.TablePrintStreamAdapter; + +import java.io.*; +import java.util.ArrayList; +import java.util.List; + +public final class CloneSetIO { + public static final String CURRENT_FULL_MAGIC_PREFIX = "MiTCRFullExportV1.1"; + + private CloneSetIO() { + } + + public static void printHeader(TablePrintStreamAdapter table, ExportDetalizationLevel detalization) { + switch (detalization) { + case Full: + table.row("Read count", "Percentage", "CDR3 nucleotide sequence", "CDR3 nucleotide quality", "Min quality", + "CDR3 amino acid sequence", "V alleles", "V segments", "J alleles", "J segments", + "D alleles", "D segments", "Last V nucleotide position ", "First D nucleotide position", "Last D nucleotide position", + "First J nucleotide position", "VD insertions", "DJ insertions", "Total insertions"); + return; + case Medium: + table.row("Read count", "Percentage", "CDR3 nucleotide sequence", + "CDR3 amino acid sequence", "V segments", "J segments", + "D segments", "Last V nucleotide position ", "First D nucleotide position", "Last D nucleotide position", + "First J nucleotide position", "VD insertions", "DJ insertions", "Total insertions"); + return; + case Simple: + table.row("Read count", "Percentage", "CDR3 nucleotide sequence", + "CDR3 amino acid sequence", "V segments", "J segments", + "D segments"); + return; + } + } + + public static void printClone(TablePrintStreamAdapter table, Clone clone, ExportDetalizationLevel detalization) { + switch (detalization) { + case Full: + table.row(clone.getCount(), clone.getPart(), clone.getCDR3().getSequence(), clone.getCDR3().getQuality(), + clone.getCDR3().getQuality().minValue(), + clone.getCDR3AA(), clone.getVAlleles(), clone.getVSegments(), clone.getJAlleles(), clone.getJSegments(), + clone.getDAlleles(), clone.getDSegments(), clone.getVEnd(), clone.getDStart(), clone.getDEnd(), + clone.getJStart(), clone.insertionsVD(), clone.insertionsDJ(), clone.insertionsTotal()); + return; + case Medium: + table.row(clone.getCount(), clone.getPart(), clone.getCDR3().getSequence(), + clone.getCDR3AA(), clone.getVSegments(), clone.getJSegments(), + clone.getDSegments(), clone.getVEnd(), clone.getDStart(), clone.getDEnd(), + clone.getJStart(), clone.insertionsVD(), clone.insertionsDJ(), clone.insertionsTotal()); + return; + case Simple: + table.row(clone.getCount(), clone.getPart(), clone.getCDR3().getSequence(), + clone.getCDR3AA(), clone.getVSegments(), clone.getJSegments(), + clone.getDSegments()); + } + } + + public static void exportCloneSet(TablePrintStreamAdapter table, CloneSet cloneSet, + ExportDetalizationLevel detalization) { + exportCloneSet(table, cloneSet, detalization, null, null); + } + + public static void exportCloneSet(TablePrintStreamAdapter table, CloneSet cloneSet, + ExportDetalizationLevel detalization, Parameters params, String inputAddress) { + if (detalization == ExportDetalizationLevel.Full) { + table.row(CURRENT_FULL_MAGIC_PREFIX, cloneSet.getSpecies().name(), + cloneSet.getGene().getXmlRepresentation(), inputAddress, + params == null ? + null : ParametersIO.exportParametersToString(params)); + } + printHeader(table, detalization); + for (Clone clone : cloneSet.getClones()) + printClone(table, clone, detalization); + } + + public static void exportCloneSet(PrintStream stream, CloneSet cloneSet, + ExportDetalizationLevel detalization) { + exportCloneSet(stream, cloneSet, detalization, null, null); + } + + public static void exportCloneSet(PrintStream stream, CloneSet cloneSet, + ExportDetalizationLevel detalization, Parameters params, String inputAddress) { + exportCloneSet(new TablePrintStreamAdapter(stream), cloneSet, detalization, params, inputAddress); + } + + public static void exportCloneSet(String fileName, CloneSet cloneSet, + ExportDetalizationLevel detalization, CompressionType ct) throws IOException { + exportCloneSet(fileName, cloneSet, detalization, null, null, ct); + } + + public static void exportCloneSet(String fileName, CloneSet cloneSet, + ExportDetalizationLevel detalization, Parameters params, String inputAddress, CompressionType ct) throws IOException { + try (PrintStream ps = new PrintStream(ct.createOutputStream(new FileOutputStream(fileName)))) { + exportCloneSet(ps, cloneSet, detalization, params, inputAddress); + } + } + + //TODO fix + + /** + * Reads clone set formatted as tab-delimited table using {@link com.milaboratory.core.io.CloneSetIO#exportCloneSet(String, + * com.milaboratory.core.clone.CloneSet, ExportDetalizationLevel)} with detalization level equals to {@link + * ExportDetalizationLevel#Full}. + * + * @param fileName file name + * @return resulting clone set + */ + public static CloneSet importCloneSet(String fileName) throws IOException { + CompressionType ct = CompressionType.None; + if (fileName.endsWith(".gz")) + ct = CompressionType.GZIP; + return importCloneSet(new FileInputStream(fileName), ct); + } + + public static CloneSet importCloneSet(InputStream stream) throws IOException { + return importCloneSet(stream, CompressionType.None); + } + + public static CloneSet importCloneSet(InputStream stream, CompressionType ct) throws IOException { + return importCloneSet(ct.createInputStream(stream), DefaultSegmentLibrary.load()); + } + + public static CloneSet importCloneSet(InputStream stream, SegmentLibrary library) throws IOException { + + BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); + + String line = reader.readLine(); + + //Checking MagicPrefix + int format = -1; + if (line.startsWith(CloneSetIO.CURRENT_FULL_MAGIC_PREFIX)) + format = 1; + + if (line.startsWith("MiTCRFullExportV1.0")) + format = 0; + + if (format == -1) + throw new IOException("Wrong file format."); + + String[] splitLine = line.split("\t"); + + //Retrieving gene and species from header + Species species; + try { + species = Species.valueOf(splitLine[1]); + } catch (IllegalArgumentException iae) { + throw new IOException("Wrong file format."); + } + Gene gene = Gene.fromXML(splitLine[2]); + if (gene == null) + throw new IOException("Wrong file format."); + + //Redundant check + if ((splitLine = reader.readLine().split("\t")).length != 19) + throw new IOException("Bad number of columns in header."); + + /* + Format summary: + + 0 clone.getCount(), + 1 clone.getPart(), + 2 clone.getCDR3().getSequence(), + 3 clone.getCDR3().getQuality(), + 4 clone.getCDR3().getQuality().minValue(), + 5 clone.getCDR3AA(), + 6 clone.getVAlleles(), + 7 clone.getVSegments(), + 8 clone.getJAlleles(), + 9 clone.getJSegments(), + 10 clone.getDAlleles(), + 11 clone.getDSegments(), + 12 clone.getVEnd(), + 13 clone.getDStart(), + 14 clone.getDEnd(), + 15 clone.getJStart(), + 16 clone.insertionsVD(), + 17 clone.insertionsDJ(), + 18 clone.insertionsTotal() + */ + + + int id = 0; + + //SegmentLibrary library = DefaultSegmentLibrary.load(); + final SegmentGroupContainer vContainer = library.getGroup(species, gene, SegmentGroupType.Variable), + jContainer = library.getGroup(species, gene, SegmentGroupType.Joining), + dContainer = gene.hasDSegment() ? library.getGroup(species, gene, SegmentGroupType.Diversity) : null; + + List clones = new ArrayList<>(); + CloneImpl clone; + while ((line = reader.readLine()) != null) { + splitLine = line.split("\t"); + + //Retrieving reads count + long count = Long.parseLong(splitLine[0]); + + //Retrieving segments for current clone + BitArray vBarcode = new BitArray(vContainer.getAllelesCount()); + for (String vSegmentName : splitLine[6].split(",")) + vBarcode.set(vContainer.getAlleleByName(vSegmentName.trim()).getIndex()); + + BitArray jBarcode = new BitArray(jContainer.getAllelesCount()); + for (String jSegmentName : splitLine[8].split(",")) + jBarcode.set(jContainer.getAlleleByName(jSegmentName.trim()).getIndex()); + + BitArray dBarcode = null; + if (dContainer != null) { + dBarcode = new BitArray(dContainer.getAllelesCount()); + if (!splitLine[10].isEmpty()) + for (String dSegment : splitLine[10].split(",")) + dBarcode.set(dContainer.getAlleleByName(dSegment.trim()).getIndex()); + } + BitArray[] segmentBarcodes = new BitArray[]{vBarcode, jBarcode, dBarcode}; + + //Retrieving segments layout for current clone + int[] segmentCoords; + if (Integer.parseInt(splitLine[13]) > -1) + segmentCoords = new int[]{Integer.parseInt(splitLine[12]), Integer.parseInt(splitLine[13]), + Integer.parseInt(splitLine[14]), Integer.parseInt(splitLine[15])}; + else + segmentCoords = new int[]{Integer.parseInt(splitLine[12]), Integer.parseInt(splitLine[15])}; + + clone = new CloneImpl(id++, new NucleotideSQPair(new NucleotideSequence(splitLine[2]), + new SequenceQualityPhred(splitLine[3], QualityFormat.Phred33)), count, segmentBarcodes, segmentCoords); + clones.add(clone); + } + + //Creating clone set + return new CloneSetImpl<>(clones, gene, species, vContainer, jContainer, dContainer); + } +} diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/core/util/CloneSetsComparator.java mitcr-1.0.3/src/main/java/com/milaboratory/core/util/CloneSetsComparator.java --- mitcr-1.0.2/src/main/java/com/milaboratory/core/util/CloneSetsComparator.java 1970-01-01 00:00:00.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/core/util/CloneSetsComparator.java 2013-10-09 08:03:10.000000000 +0000 @@ -0,0 +1,37 @@ +package com.milaboratory.core.util; + +import com.milaboratory.core.clone.Clone; +import com.milaboratory.core.clone.CloneSet; +import com.milaboratory.core.sequence.nucleotide.NucleotideSequence; + +import java.util.HashMap; + +public class CloneSetsComparator { + public static final CloneSetsComparisonResult compare(CloneSet csFrom, CloneSet csTo) { + int mClones = 0, nClones = 0, mSequences = 0, nSequences = 0; + Clone cFrom; + + //Adding all from clone to has map + HashMap fromClones = new HashMap<>(csFrom.getClones().size()); + for (Clone clone : csFrom) + fromClones.put(clone.getCDR3().getSequence(), clone); + + for (Clone cTo : csTo) { + cFrom = fromClones.remove(cTo.getCDR3().getSequence()); + if (cFrom == null) { + ++nClones; + nSequences += cTo.getCount(); + } + } + mClones = fromClones.size(); + for (Clone clone : fromClones.values()) + mSequences += clone.getCount(); + + assert csFrom.getClones().size() + nClones - mClones == csTo.getClones().size(); + assert csFrom.getTotalCount() + nSequences - mSequences == csTo.getTotalCount(); + + double difference = 1.0 * (nSequences + mSequences) / (csFrom.getTotalCount() + csTo.getTotalCount()); + + return new CloneSetsComparisonResult(nClones, mClones, nSequences, mSequences, difference); + } +} diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/core/util/CloneSetsComparisonResult.java mitcr-1.0.3/src/main/java/com/milaboratory/core/util/CloneSetsComparisonResult.java --- mitcr-1.0.2/src/main/java/com/milaboratory/core/util/CloneSetsComparisonResult.java 1970-01-01 00:00:00.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/core/util/CloneSetsComparisonResult.java 2013-10-09 08:03:10.000000000 +0000 @@ -0,0 +1,14 @@ +package com.milaboratory.core.util; + +public class CloneSetsComparisonResult { + public final int newClones, missedClones, newSequences, missedSequences; + public final double difference; + + public CloneSetsComparisonResult(int newClones, int missedClones, int newSequences, int missedSequences, double difference) { + this.newClones = newClones; + this.missedClones = missedClones; + this.newSequences = newSequences; + this.missedSequences = missedSequences; + this.difference = difference; + } +} diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/core/util/CompareCloneSets.java mitcr-1.0.3/src/main/java/com/milaboratory/core/util/CompareCloneSets.java --- mitcr-1.0.2/src/main/java/com/milaboratory/core/util/CompareCloneSets.java 1970-01-01 00:00:00.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/core/util/CompareCloneSets.java 2013-10-09 08:03:10.000000000 +0000 @@ -0,0 +1,24 @@ +package com.milaboratory.core.util; + +import com.milaboratory.core.clone.CloneSet; +import com.milaboratory.core.io.CloneSetIO; + +public class CompareCloneSets { + public static void main(String[] args) throws Exception { + CloneSet cs1 = CloneSetIO.importCloneSet(args[1]), + cs2 = CloneSetIO.importCloneSet(args[2]); + CloneSetsComparisonResult result = CloneSetsComparator.compare(cs1, cs2); + + switch (args[0]) { + case "d": + System.out.println(result.difference); + break; + case "v": + System.out.println("Clones: +" + result.newClones + + " | -" + result.missedClones + ""); + System.out.println("Sequences: +" + result.newSequences + + " | -" + result.missedSequences); + System.out.println("Difference = " + result.difference); + } + } +} diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/SimpleTest.java mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/SimpleTest.java --- mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/SimpleTest.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/SimpleTest.java 2013-10-09 08:03:10.000000000 +0000 @@ -24,8 +24,8 @@ import com.milaboratory.core.clone.CloneSetClustered; import com.milaboratory.core.segment.Gene; import com.milaboratory.core.segment.Species; +import com.milaboratory.core.sequence.quality.QualityFormat; import com.milaboratory.core.sequencing.io.fastq.SFastqReader; -import com.milaboratory.core.sequencing.io.fastq.quality.QualityStringFormat; import com.milaboratory.mitcr.cdrextraction.CDR3ExtractorParameters; import com.milaboratory.mitcr.cdrextraction.Strand; import com.milaboratory.mitcr.clonegenerator.LQMappingCloneGeneratorParameters; @@ -52,11 +52,12 @@ SFastqReader reads = new SFastqReader(input, args.length > 1 ? - QualityStringFormat.Illumina13 : QualityStringFormat.Illumina18, compressionType); + QualityFormat.Phred33 : QualityFormat.Phred64, compressionType); new Thread(new ProgressReporter("Processing sequences: ", reads)).start(); - Parameters parameters = new Parameters(Gene.TRB, Species.HomoSapiens, new CDR3ExtractorParameters(new VJSegmentMapperParameters(AlignmentDirection.Both, -4, 1, 12, 3), + Parameters parameters = new Parameters(Gene.TRB, Species.HomoSapiens, + new CDR3ExtractorParameters(new VJSegmentMapperParameters(AlignmentDirection.Both, -4, 1, 12, 3), new VJSegmentMapperParameters(AlignmentDirection.InsideCDR3, -3, 2, 7, -2), //new VJSegmentMapperParameters(-1, 4, 12, -2, AlignmentDirection.TrivialAlignment), new DSegmentMapperParameters(6), Strand.Both, true)); diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/cdrextraction/CoreCDR3Extractor.java mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/cdrextraction/CoreCDR3Extractor.java --- mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/cdrextraction/CoreCDR3Extractor.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/cdrextraction/CoreCDR3Extractor.java 2013-10-09 08:03:10.000000000 +0000 @@ -59,7 +59,7 @@ if (phe < cys) return null; try { - return data.getSubPairCopy(cys, phe + 1).getDeepCopy(); + return data.getRange(cys, phe + 1); } catch (IndexOutOfBoundsException ex) { //Very rear event, so Exception usage in this place does make sense. return null; } diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/cli/BuildInformation.java mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/cli/BuildInformation.java --- mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/cli/BuildInformation.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/cli/BuildInformation.java 2013-10-09 08:03:10.000000000 +0000 @@ -21,7 +21,7 @@ package com.milaboratory.mitcr.cli; public class BuildInformation { - String scmChangeset, scmDate, scmBranch, version, jdk, builtBy, buildDate; + public final String scmChangeset, scmDate, scmBranch, version, jdk, builtBy, buildDate; public BuildInformation(String scmChangeset, String scmDate, String scmBranch, String version, String jdk, String builtBy, String buildDate) { this.scmChangeset = scmChangeset; diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/cli/BuildInformationProvider.java mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/cli/BuildInformationProvider.java --- mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/cli/BuildInformationProvider.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/cli/BuildInformationProvider.java 2013-10-09 08:03:10.000000000 +0000 @@ -52,10 +52,17 @@ } } catch (Exception e) { e.printStackTrace(); - System.out.println("SS1"); + //System.out.println("SS1"); return null; } - System.out.println("SS2"); + //System.out.println("SS2"); return null; } + + public static String getVersion() { + BuildInformation buildInformation = get(); + if (buildInformation == null) + return null; + return buildInformation.version; + } } diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/cli/Main.java mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/cli/Main.java --- mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/cli/Main.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/cli/Main.java 2013-10-09 08:03:10.000000000 +0000 @@ -23,12 +23,13 @@ import cc.redberry.pipe.OutputPort; import cc.redberry.pipe.util.CountLimitingOutputPort; import com.milaboratory.core.clone.CloneSetClustered; +import com.milaboratory.core.io.CloneSetIO; import com.milaboratory.core.segment.DefaultSegmentLibrary; import com.milaboratory.core.segment.Gene; import com.milaboratory.core.segment.SegmentLibrary; import com.milaboratory.core.segment.Species; +import com.milaboratory.core.sequence.quality.QualityFormat; import com.milaboratory.core.sequencing.io.fastq.SFastqReader; -import com.milaboratory.core.sequencing.io.fastq.quality.QualityStringFormat; import com.milaboratory.core.sequencing.read.SSequencingRead; import com.milaboratory.mitcr.clonegenerator.AccumulatorType; import com.milaboratory.mitcr.clonegenerator.BasicCloneGeneratorParameters; @@ -70,7 +71,8 @@ LIMIT_OPTION = "limit", REPORT_OPTION = "report", REPORTING_LEVEL_OPTION = "level", - SOLEXA_OPTION = "solexa", + PHRED33_OPTION = "phred33", + PHRED64_OPTION = "phred64", INCLUDE_CYS_PHE_OPTION = "cysphe", PRINT_DEBUG_OPTION = "debug", PRINT_VERSION_OPTION = "v", @@ -100,16 +102,16 @@ orderingMap.put(EXPORT_OPTION, o++); orderingMap.put(REPORT_OPTION, o++); orderingMap.put(REPORTING_LEVEL_OPTION, o++); - orderingMap.put(SOLEXA_OPTION, o++); + orderingMap.put(PHRED33_OPTION, o++); + orderingMap.put(PHRED64_OPTION, o++); orderingMap.put(THREADS_OPTION, o++); orderingMap.put(COMPRESSED_OPTION, o++); orderingMap.put(PRINT_HELP_OPTION, o++); orderingMap.put(PRINT_VERSION_OPTION, o++); orderingMap.put(PRINT_DEBUG_OPTION, o++); - options.addOption(OptionBuilder.withArgName("preset name") - .hasArg().withDescription("set of pipeline parameters to use") + .hasArg().withDescription("preset of pipeline parameters to use") .create(PARAMETERS_SET_OPTION)); options.addOption(OptionBuilder.withArgName("species") @@ -174,8 +176,14 @@ .create(REPORTING_LEVEL_OPTION)); options.addOption(OptionBuilder - .hasArg(false).withDescription("if input file is in old illumina format with 64 byte offset for quality string") - .create(SOLEXA_OPTION)); + .hasArg(false).withDescription("add this option if input file is in old illumina format with 64 byte offset for quality " + + "string (MiTCR will try to automatically detect file format if one of the \"-phredXX\" options is not provided)") + .create(PHRED64_OPTION)); + + options.addOption(OptionBuilder + .hasArg(false).withDescription("add this option if input file is in Phred+33 format for quality values " + + "(MiTCR will try to automatically detect file format if one of the \"-phredXX\" options is not provided)") + .create(PHRED33_OPTION)); options.addOption(OptionBuilder.withArgName("threads") .hasArg().withDescription("specifies the number of CDR3 extraction threads (default = number of available CPU cores)") @@ -359,20 +367,30 @@ return; } + //TODO This also done inside SFastqReader constructor CompressionType compressionType = CompressionType.None; if (inputFileName.endsWith(".gz")) compressionType = CompressionType.GZIP; - QualityStringFormat format = QualityStringFormat.Illumina18; - if (cl.hasOption(SOLEXA_OPTION)) - format = QualityStringFormat.Illumina13; + QualityFormat format = null; // If variable remains null file format will be detected automatically + if (cl.hasOption(PHRED33_OPTION)) + format = QualityFormat.Phred33; + if (cl.hasOption(PHRED64_OPTION)) + if (format == null) + format = QualityFormat.Phred64; + else { + err.println("Options: -" + PHRED33_OPTION + " and -" + PHRED64_OPTION + " are mutually exclusive"); + return; + } + - SFastqReader reads = new SFastqReader(input, - format, compressionType); + SFastqReader reads = format == null ? + new SFastqReader(input, compressionType) : + new SFastqReader(input, format, compressionType); OutputPort inputToPipeline = reads; if (input_limit >= 0) - inputToPipeline = new CountLimitingOutputPort(inputToPipeline, input_limit); + inputToPipeline = new CountLimitingOutputPort<>(inputToPipeline, input_limit); SegmentLibrary library = DefaultSegmentLibrary.load(); @@ -382,7 +400,7 @@ pipeline.setThreads(threads); pipeline.setAnalysisListener(statisticsAggregator); - new Thread(new SmartProgressReporter(pipeline, err)).start(); + new Thread(new SmartProgressReporter(pipeline, err)).start(); // Printing status to the standard error stream pipeline.run(); @@ -419,13 +437,13 @@ CompressionType compressionType1 = CompressionType.None; if (outputFileName.endsWith(".gz")) compressionType1 = CompressionType.GZIP; - TabDelimitedExporter.exportCloneSet(outputFileName, cloneSet, detalization, compressionType1); + CloneSetIO.exportCloneSet(outputFileName, cloneSet, detalization, params, input.getAbsolutePath(), compressionType1); } } catch (ParseException | RuntimeException | IOException e) { - e.printStackTrace(); - err.println("Error occurred while parsing parameters."); + err.println("Error occurred in the analysis pipeline."); err.println(); - printHelp(); + e.printStackTrace(); + //printHelp(); } } @@ -439,9 +457,9 @@ } }); final String executable = System.getProperty("executable", "java -jar mitcr.jar"); - err.println("usage: " + executable + " -preset [options] input_file output_file.cls"); - err.println(" " + executable + " -preset [options] input_file output_file.txt"); - err.println(" " + executable + " -preset [options] -export newPresetName"); + err.println("usage: " + executable + " -pset [options] input_file output_file.cls"); + err.println(" " + executable + " -pset [options] input_file output_file.txt"); + err.println(" " + executable + " -pset [options] -export newPresetName"); err.println(); formatter.printOptions(new PrintWriter(err, true), 85, options, 2, 3); diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/cli/ParametersIO.java mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/cli/ParametersIO.java --- mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/cli/ParametersIO.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/cli/ParametersIO.java 2013-10-09 08:03:10.000000000 +0000 @@ -31,8 +31,24 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.io.StringReader; public class ParametersIO { + public static String exportParametersToString(Parameters parameters) { + Format format = Format.getCompactFormat(); + return new XMLOutputter(format).outputString(parameters.asXML()); + } + + public static Parameters importParametersFromString(String string) { + try { + SAXBuilder builder = new SAXBuilder(); + Document document = builder.build(new StringReader(string)); + return Parameters.fromXML(document.getRootElement()); + } catch (JDOMException | IOException ae) { + throw new RuntimeException(ae); + } + } + public static void exportParameters(Parameters parameters, String fileName) { Format format = Format.getPrettyFormat(); format.setLineSeparator("\n"); diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/cli/TabDelimitedExporter.java mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/cli/TabDelimitedExporter.java --- mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/cli/TabDelimitedExporter.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/cli/TabDelimitedExporter.java 1970-01-01 00:00:00.000000000 +0000 @@ -1,103 +0,0 @@ -/* - * MiTCR - * - * Copyright (c) 2010-2013: - * Bolotin Dmitriy - * Chudakov Dmitriy - * - * MiTCR is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation, either version 3 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ -package com.milaboratory.mitcr.cli; - -import com.milaboratory.core.clone.Clone; -import com.milaboratory.core.clone.CloneSet; -import com.milaboratory.util.CompressionType; -import com.milaboratory.util.TablePrintStreamAdapter; - -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintStream; - -public final class TabDelimitedExporter { - public static final String FULL_MAGIC_PREFIX = "MiTCRFullExportV1.0"; - - private TabDelimitedExporter() { - } - - public static void printHeader(TablePrintStreamAdapter table, ExportDetalizationLevel detalization) { - switch (detalization) { - case Full: - table.row("Read count", "Percentage", "CDR3 nucleotide sequence", "CDR3 nucleotide quality", "Min quality", - "CDR3 amino acid sequence", "V alleles", "V segments", "J alleles", "J segments", - "D alleles", "D segments", "Last V nucleotide position ", "First D nucleotide position", "Last D nucleotide position", - "First J nucleotide position", "VD insertions", "DJ insertions", "Total insertions"); - return; - case Medium: - table.row("Read count", "Percentage", "CDR3 nucleotide sequence", - "CDR3 amino acid sequence", "V segments", "J segments", - "D segments", "Last V nucleotide position ", "First D nucleotide position", "Last D nucleotide position", - "First J nucleotide position", "VD insertions", "DJ insertions", "Total insertions"); - return; - case Simple: - table.row("Read count", "Percentage", "CDR3 nucleotide sequence", - "CDR3 amino acid sequence", "V segments", "J segments", - "D segments"); - return; - } - } - - public static void printClone(TablePrintStreamAdapter table, Clone clone, ExportDetalizationLevel detalization) { - switch (detalization) { - case Full: - table.row(clone.getCount(), clone.getPart(), clone.getCDR3().getSequence(), clone.getCDR3().getQuality(), - clone.getCDR3().getQuality().minRawQuality(), - clone.getCDR3AA(), clone.getVAlleles(), clone.getVSegments(), clone.getJAlleles(), clone.getJSegments(), - clone.getDAlleles(), clone.getDSegments(), clone.getVEnd(), clone.getDStart(), clone.getDEnd(), - clone.getJStart(), clone.insertionsVD(), clone.insertionsDJ(), clone.insertionsTotal()); - return; - case Medium: - table.row(clone.getCount(), clone.getPart(), clone.getCDR3().getSequence(), - clone.getCDR3AA(), clone.getVSegments(), clone.getJSegments(), - clone.getDSegments(), clone.getVEnd(), clone.getDStart(), clone.getDEnd(), - clone.getJStart(), clone.insertionsVD(), clone.insertionsDJ(), clone.insertionsTotal()); - return; - case Simple: - table.row(clone.getCount(), clone.getPart(), clone.getCDR3().getSequence(), - clone.getCDR3AA(), clone.getVSegments(), clone.getJSegments(), - clone.getDSegments()); - } - } - - public static void exportCloneSet(TablePrintStreamAdapter table, CloneSet cloneSet, ExportDetalizationLevel detalization) { - if (detalization == ExportDetalizationLevel.Full) - table.row(FULL_MAGIC_PREFIX, cloneSet.getSpecies().name(), cloneSet.getGene().getXmlRepresentation()); - printHeader(table, detalization); - for (Clone clone : cloneSet.getClones()) - printClone(table, clone, detalization); - } - - public static void exportCloneSet(PrintStream stream, CloneSet cloneSet, ExportDetalizationLevel detalization) { - exportCloneSet(new TablePrintStreamAdapter(stream), cloneSet, detalization); - } - - public static void exportCloneSet(String fileName, CloneSet cloneSet, ExportDetalizationLevel detalization) throws IOException { - exportCloneSet(fileName, cloneSet, detalization, CompressionType.None); - } - - public static void exportCloneSet(String fileName, CloneSet cloneSet, ExportDetalizationLevel detalization, CompressionType ct) throws IOException { - try (PrintStream ps = new PrintStream(ct.createOutputStream(new FileOutputStream(fileName)))) { - exportCloneSet(ps, cloneSet, detalization); - } - } -} diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/cli/TabDelimitedImporter.java mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/cli/TabDelimitedImporter.java --- mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/cli/TabDelimitedImporter.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/cli/TabDelimitedImporter.java 1970-01-01 00:00:00.000000000 +0000 @@ -1,168 +0,0 @@ -/* - * MiTCR - * - * Copyright (c) 2010-2013: - * Bolotin Dmitriy - * Chudakov Dmitriy - * - * MiTCR is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation, either version 3 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ -package com.milaboratory.mitcr.cli; - -import com.milaboratory.core.clone.Clone; -import com.milaboratory.core.clone.CloneImpl; -import com.milaboratory.core.clone.CloneSet; -import com.milaboratory.core.clone.CloneSetImpl; -import com.milaboratory.core.segment.*; -import com.milaboratory.core.sequence.NucleotideSQPair; -import com.milaboratory.core.sequence.nucleotide.NucleotideSequenceImpl; -import com.milaboratory.core.sequencing.io.fastq.quality.QualityStringFormat; -import com.milaboratory.util.BitArray; -import com.milaboratory.util.CompressionType; - -import java.io.*; -import java.util.ArrayList; -import java.util.List; - -/** - * 1/7/13 MS (mikhail.shugay@gmail.com) - */ -public final class TabDelimitedImporter { - private TabDelimitedImporter() { - } - - /** - * Reads clone set formatted as tab-delimited table using {@link TabDelimitedExporter#exportCloneSet(String, - * com.milaboratory.core.clone.CloneSet, ExportDetalizationLevel)} with detalization level equals to {@link - * ExportDetalizationLevel#Full}. - * - * @param fileName file name - * @return resulting clone set - */ - public static CloneSet importCloneSet(String fileName) throws IOException { - CompressionType ct = CompressionType.None; - if (fileName.endsWith(".gz")) - ct = CompressionType.GZIP; - return importCloneSet(ct.createInputStream(new FileInputStream(fileName))); - } - - public static CloneSet importCloneSet(InputStream stream) throws IOException { - return importCloneSet(stream, DefaultSegmentLibrary.load()); - } - - public static CloneSet importCloneSet(InputStream stream, SegmentLibrary library) throws IOException { - - BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); - - String line = reader.readLine(); - - //Checking first bytes - if (!line.startsWith(TabDelimitedExporter.FULL_MAGIC_PREFIX)) - throw new IOException("Wrong file format."); - - String[] splitLine = line.split("\t"); - - //Retrieving gene and species from header - Species species; - try { - species = Species.valueOf(splitLine[1]); - } catch (IllegalArgumentException iae) { - throw new IOException("Wrong file format."); - } - Gene gene = Gene.fromXML(splitLine[2]); - if (gene == null) - throw new IOException("Wrong file format."); - - //Redundant check - if ((splitLine = reader.readLine().split("\t")).length != 19) - throw new IOException("Bad number of columns in header."); - - /* - Format summary: - - 0 clone.getCount(), - 1 clone.getPart(), - 2 clone.getCDR3().getSequence(), - 3 clone.getCDR3().getQuality(), - 4 clone.getCDR3().getQuality().minRawQuality(), - 5 clone.getCDR3AA(), - 6 clone.getVAlleles(), - 7 clone.getVSegments(), - 8 clone.getJAlleles(), - 9 clone.getJSegments(), - 10 clone.getDAlleles(), - 11 clone.getDSegments(), - 12 clone.getVEnd(), - 13 clone.getDStart(), - 14 clone.getDEnd(), - 15 clone.getJStart(), - 16 clone.insertionsVD(), - 17 clone.insertionsDJ(), - 18 clone.insertionsTotal() - */ - - - //Std Sanger quality format with 33 offset - final QualityStringFormat format = QualityStringFormat.Illumina18u; - - int id = 0; - - //SegmentLibrary library = DefaultSegmentLibrary.load(); - final SegmentGroupContainer vContainer = library.getGroup(species, gene, SegmentGroupType.Variable), - jContainer = library.getGroup(species, gene, SegmentGroupType.Joining), - dContainer = gene.hasDSegment() ? library.getGroup(species, gene, SegmentGroupType.Diversity) : null; - - List clones = new ArrayList<>(); - CloneImpl clone; - while ((line = reader.readLine()) != null) { - splitLine = line.split("\t"); - - //Retrieving reads count - long count = Long.parseLong(splitLine[0]); - - //Retrieving segments for current clone - BitArray vBarcode = new BitArray(vContainer.getAllelesCount()); - for (String vSegmentName : splitLine[6].split(",")) - vBarcode.set(vContainer.getAlleleByName(vSegmentName.trim()).getIndex()); - - BitArray jBarcode = new BitArray(jContainer.getAllelesCount()); - for (String jSegmentName : splitLine[8].split(",")) - jBarcode.set(jContainer.getAlleleByName(jSegmentName.trim()).getIndex()); - - BitArray dBarcode = null; - if (dContainer != null) { - dBarcode = new BitArray(dContainer.getAllelesCount()); - if (!splitLine[10].isEmpty()) - for (String dSegment : splitLine[10].split(",")) - dBarcode.set(dContainer.getAlleleByName(dSegment.trim()).getIndex()); - } - BitArray[] segmentBarcodes = new BitArray[]{vBarcode, jBarcode, dBarcode}; - - //Retrieving segments layout for current clone - int[] segmentCoords; - if (Integer.parseInt(splitLine[13]) > -1) - segmentCoords = new int[]{Integer.parseInt(splitLine[12]), Integer.parseInt(splitLine[13]), - Integer.parseInt(splitLine[14]), Integer.parseInt(splitLine[15])}; - else - segmentCoords = new int[]{Integer.parseInt(splitLine[12]), Integer.parseInt(splitLine[15])}; - - clone = new CloneImpl(id++, new NucleotideSQPair(NucleotideSequenceImpl.fromSequence(splitLine[2]), - format.getQualityFactory().create(splitLine[3].getBytes())), count, segmentBarcodes, segmentCoords); - clones.add(clone); - } - - //Creating clone set - return new CloneSetImpl<>(clones, gene, species, vContainer, jContainer, dContainer); - } -} diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/clonegenerator/AccumulatorClone.java mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/clonegenerator/AccumulatorClone.java --- mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/clonegenerator/AccumulatorClone.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/clonegenerator/AccumulatorClone.java 2013-10-09 08:03:10.000000000 +0000 @@ -2,6 +2,7 @@ import com.milaboratory.core.clone.CloneImpl; import com.milaboratory.core.sequence.NucleotideSQPair; +import com.milaboratory.core.sequence.nucleotide.NucleotideSequence; import com.milaboratory.mitcr.cdrextraction.CDR3ExtractionResult; import com.milaboratory.mitcr.vdjmapping.SegmentMappingResult; @@ -12,9 +13,11 @@ public abstract class AccumulatorClone extends CloneImpl { long additionalCount = 0; + final NucleotideSequence sequence; AccumulatorClone(int id, NucleotideSQPair cdr3, boolean saveLinks) { - super(id, cdr3); + super(id, null); + sequence = cdr3.getSequence(); if (saveLinks) links = new ArrayList<>(); else diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/clonegenerator/AccumulatorCloneAvrg.java mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/clonegenerator/AccumulatorCloneAvrg.java --- mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/clonegenerator/AccumulatorCloneAvrg.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/clonegenerator/AccumulatorCloneAvrg.java 2013-10-09 08:03:10.000000000 +0000 @@ -8,27 +8,33 @@ import static com.milaboratory.mitcr.clonegenerator.AverageQualityCalculator.nextValues; public abstract class AccumulatorCloneAvrg extends AccumulatorClone { + byte[] accumulator; + public AccumulatorCloneAvrg(int id, NucleotideSQPair cdr3, boolean saveLinks) { super(id, cdr3, saveLinks); + accumulator = new byte[cdr3.size()]; } @Override synchronized void include(CDR3ExtractionResult result, boolean additional) { super.include(result, additional); - //Returns a link to the underlying byte array, so it could be used here for - //accumulation of average values - //IMPORTANT: because of this quality object of clone is invalid before clone compilation - final byte[] avrgStorage = ((SequenceQualityPhred) cdr3.getQuality()).getRawData(); + ////Returns a link to the underlying byte array, so it could be used here for + ////accumulation of average values + ////IMPORTANT: because of this quality object of clone is invalid before clone compilation + //final byte[] avrgStorage = cdr3.getQuality().getInnerData(); //Adding observed values - nextValues(avrgStorage, count - 1, - ((SequenceQualityPhred) result.getCDR3().getQuality()).getRawData()); + nextValues(accumulator, count - 1, + result.getCDR3().getQuality().getInnerData()); } @Override void compile(float barcodeAggregationFactor) { //Now the quality object is valid - convertValues(((SequenceQualityPhred) cdr3.getQuality()).getRawData()); + //convertValues(cdr3.getQuality().getInnerData()); + convertValues(accumulator); + cdr3 = new NucleotideSQPair(sequence, new SequenceQualityPhred(accumulator)); + accumulator = null; } } diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/clonegenerator/AccumulatorCloneMax.java mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/clonegenerator/AccumulatorCloneMax.java --- mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/clonegenerator/AccumulatorCloneMax.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/clonegenerator/AccumulatorCloneMax.java 2013-10-09 08:03:10.000000000 +0000 @@ -1,17 +1,31 @@ package com.milaboratory.mitcr.clonegenerator; import com.milaboratory.core.sequence.NucleotideSQPair; +import com.milaboratory.core.sequence.quality.SequenceQualityPhred; import com.milaboratory.mitcr.cdrextraction.CDR3ExtractionResult; public abstract class AccumulatorCloneMax extends AccumulatorClone { + final byte[] quality; + public AccumulatorCloneMax(int id, NucleotideSQPair cdr3, boolean saveLinks) { super(id, cdr3, saveLinks); + quality = new byte[cdr3.size()]; } @Override synchronized void include(CDR3ExtractionResult result, boolean additional) { super.include(result, additional); - cdr3.getQuality().mergeWith(result.getCDR3().getQuality()); + byte val; + for (int i = 0; i < quality.length; ++i) + if (quality[i] < (val = result.getCDR3().getQuality().value(i))) + quality[i] = val; + + //cdr3.getQuality().mergeWith(result.getCDR3().getQuality()); + } + + @Override + void compile(float barcodeAggregationFactor) { + cdr3 = new NucleotideSQPair(sequence, new SequenceQualityPhred(quality)); } } diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/clonegenerator/AccumulatorCloneMaxCompressed.java mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/clonegenerator/AccumulatorCloneMaxCompressed.java --- mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/clonegenerator/AccumulatorCloneMaxCompressed.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/clonegenerator/AccumulatorCloneMaxCompressed.java 2013-10-09 08:03:10.000000000 +0000 @@ -37,6 +37,9 @@ @Override void compile(float barcodeAggregationFactor) { + //Needed to compile quality values + super.compile(barcodeAggregationFactor); + for (int i = 0; i < 3; ++i) if (barcodeAccumulators[i] == null) barcodes[i] = null; diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/clonegenerator/AccumulatorCloneMaxStrict.java mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/clonegenerator/AccumulatorCloneMaxStrict.java --- mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/clonegenerator/AccumulatorCloneMaxStrict.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/clonegenerator/AccumulatorCloneMaxStrict.java 2013-10-09 08:03:10.000000000 +0000 @@ -62,6 +62,9 @@ @Override void compile(float barcodeAggregationFactor) { + //Needed to compile quality values + super.compile(barcodeAggregationFactor); + for (int i = 0; i < 3; ++i) if (bcAggregators[i] == null) barcodes[i] = null; diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/clonegenerator/AverageQualityCalculator.java mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/clonegenerator/AverageQualityCalculator.java --- mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/clonegenerator/AverageQualityCalculator.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/clonegenerator/AverageQualityCalculator.java 2013-10-09 08:03:10.000000000 +0000 @@ -6,7 +6,7 @@ public class AverageQualityCalculator { /** * This method is intended to calculate average value of sequence of numbers between 0 and 63 using only 1 byte of - * information. The only additional information is number of observations. + * information. The only additional information needed is a number of observations. * *

Performance: resulting value error with 95% probability will be: (1) less than 1 point for small sample sizes * and (2) less than 2.2 points for big samples. One iteration takes about 100 cycles on the Core i7 processor.

@@ -69,7 +69,7 @@ private static ThreadLocal tlRandomGenerator = new ThreadLocal() { @Override protected RandomGenerator initialValue() { - return new MersenneTwister(); + return new MersenneTwister(75586L); //Fixed value for calculation reproducibility } }; diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/clonegenerator/BasicCloneGenerator.java mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/clonegenerator/BasicCloneGenerator.java --- mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/clonegenerator/BasicCloneGenerator.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/clonegenerator/BasicCloneGenerator.java 2013-10-09 08:03:10.000000000 +0000 @@ -140,7 +140,7 @@ initializeFromResult(cdr3ExtractionResult); node.clone = cloneFactory.create(this.clonesCount.getAndIncrement(), - cdr3ExtractionResult.getCDR3().getDeepCopy(), saveBackwardLinks); + cdr3ExtractionResult.getCDR3(), saveBackwardLinks); //The new clone was created created = true; @@ -161,6 +161,19 @@ return created; } + @Override + public final void preInitialize(SegmentGroupContainer v, SegmentGroupContainer j, SegmentGroupContainer d) { + segmentContainers.compareAndSet(0, null, v); + segmentContainers.compareAndSet(1, null, j); + gene.compareAndSet(null, v.getGroup().getGene()); + if (gene.get().hasDSegment()) + segmentContainers.compareAndSet(2, null, d); + + initialized.set(segmentContainers.get(0) != null && + segmentContainers.get(1) != null && + (!gene.get().hasDSegment() || segmentContainers.get(2) != null)); + } + private void initializeFromResult(CDR3ExtractionResult result) { if (segmentContainers.get(0) == null) { segmentContainers.compareAndSet(0, null, result.getVMappingResult().getContainer()); diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/clonegenerator/CloneGenerator.java mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/clonegenerator/CloneGenerator.java --- mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/clonegenerator/CloneGenerator.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/clonegenerator/CloneGenerator.java 2013-10-09 08:03:10.000000000 +0000 @@ -22,6 +22,7 @@ import cc.redberry.pipe.InputPortUninterruptible; import com.milaboratory.core.clone.CloneSet; +import com.milaboratory.core.segment.SegmentGroupContainer; import com.milaboratory.mitcr.cdrextraction.CDR3ExtractionResult; /** @@ -32,6 +33,17 @@ */ public interface CloneGenerator extends InputPortUninterruptible> { /** + * In normal conditions clone generator can get information about gene and particular set of gene segments from the + * input stream of extraction results, but in some conditions (if there where no CDR3s or no D segment was mapped) + * it requires explicit initialization usint this method. + * + * @param v segment group container for V segments + * @param j segment group container for J segments + * @param d segment group container for D segments + */ + void preInitialize(SegmentGroupContainer v, SegmentGroupContainer j, SegmentGroupContainer d); + + /** * Build and gets the resulting clone set. Should be called after this port is closed (null was put) * * @return set of generated clone diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/clsexport/io/serializers/NucleotideSQPairIO.java mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/clsexport/io/serializers/NucleotideSQPairIO.java --- mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/clsexport/io/serializers/NucleotideSQPairIO.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/clsexport/io/serializers/NucleotideSQPairIO.java 2013-10-09 08:03:10.000000000 +0000 @@ -20,11 +20,11 @@ */ package com.milaboratory.mitcr.clsexport.io.serializers; +import com.milaboratory.core.sequence.NucleotideSQPair; +import com.milaboratory.core.sequence.nucleotide.NucleotideSequence; +import com.milaboratory.core.sequence.quality.SequenceQualityPhred; import com.milaboratory.mitcr.clsexport.io.BinaryContainerReader; import com.milaboratory.mitcr.clsexport.io.BinaryContainerWriter; -import com.milaboratory.core.sequence.NucleotideSQPair; -import com.milaboratory.core.sequence.SequenceQuality; -import com.milaboratory.core.sequence.nucleotide.NucleotideSequenceImpl; import java.io.DataInput; import java.io.DataOutput; @@ -49,8 +49,8 @@ @Override public Object read(DataInput input) throws IOException { - NucleotideSequenceImpl sequence = (NucleotideSequenceImpl) NucleotideSequenceIO.INSTANCE.read(input); - SequenceQuality quality = (SequenceQuality) SequenceQualityIO.INSTANCE.read(input); + NucleotideSequence sequence = (NucleotideSequence) NucleotideSequenceIO.INSTANCE.read(input); + SequenceQualityPhred quality = (SequenceQualityPhred) SequenceQualityIO.INSTANCE.read(input); return new NucleotideSQPair(sequence, quality); } diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/clsexport/io/serializers/NucleotideSequenceIO.java mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/clsexport/io/serializers/NucleotideSequenceIO.java --- mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/clsexport/io/serializers/NucleotideSequenceIO.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/clsexport/io/serializers/NucleotideSequenceIO.java 2013-10-09 08:03:10.000000000 +0000 @@ -20,10 +20,10 @@ */ package com.milaboratory.mitcr.clsexport.io.serializers; +import com.milaboratory.core.sequence.nucleotide.NucleotideSequence; import com.milaboratory.mitcr.clsexport.io.BinaryContainerReader; import com.milaboratory.mitcr.clsexport.io.BinaryContainerWriter; import com.milaboratory.mitcr.clsexport.io.WrongStructureException; -import com.milaboratory.core.sequence.nucleotide.NucleotideSequenceImpl; import com.milaboratory.util.Bit2Array; import java.io.DataInput; @@ -48,12 +48,12 @@ if (s != 'S') throw new WrongStructureException(); Bit2Array storage = Bit2ArrayIO.read(input); - return NucleotideSequenceImpl.fromStorage(storage); + return new NucleotideSequence(storage); } @Override public boolean canWrite(Object object) { - return object.getClass() == NucleotideSequenceImpl.class; + return object.getClass() == NucleotideSequence.class; } @Override @@ -63,8 +63,8 @@ @Override public void write(DataOutput output, Object object) throws IOException { - NucleotideSequenceImpl sequence = (NucleotideSequenceImpl) object; + NucleotideSequence sequence = (NucleotideSequence) object; output.writeByte('S'); - Bit2ArrayIO.write(output, sequence.getInnerStorage()); + Bit2ArrayIO.write(output, sequence.getInnerData()); } } diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/clsexport/io/serializers/SequenceQualityIO.java mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/clsexport/io/serializers/SequenceQualityIO.java --- mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/clsexport/io/serializers/SequenceQualityIO.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/clsexport/io/serializers/SequenceQualityIO.java 2013-10-09 08:03:10.000000000 +0000 @@ -20,9 +20,9 @@ */ package com.milaboratory.mitcr.clsexport.io.serializers; +import com.milaboratory.core.sequence.quality.SequenceQualityPhred; import com.milaboratory.mitcr.clsexport.io.BinaryContainerReader; import com.milaboratory.mitcr.clsexport.io.BinaryContainerWriter; -import com.milaboratory.core.sequence.quality.SequenceQualityPhred; import java.io.DataInput; import java.io.DataOutput; @@ -67,8 +67,8 @@ if (object.getClass() == SequenceQualityPhred.class) { SequenceQualityPhred sq = (SequenceQualityPhred) object; output.writeByte(0); - output.writeInt(sq.getRawData().length); - output.write(sq.getRawData()); + output.writeInt(sq.size()); + output.write(sq.getInnerData()); } } } diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/pipeline/FullPipeline.java mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/pipeline/FullPipeline.java --- mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/pipeline/FullPipeline.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/pipeline/FullPipeline.java 2013-10-09 08:03:10.000000000 +0000 @@ -28,6 +28,7 @@ import com.milaboratory.core.clone.CloneSet; import com.milaboratory.core.clone.CloneSetClustered; import com.milaboratory.core.segment.DefaultSegmentLibrary; +import com.milaboratory.core.segment.SegmentGroupType; import com.milaboratory.core.segment.SegmentLibrary; import com.milaboratory.core.sequencing.read.SSequencingRead; import com.milaboratory.mitcr.cdrextraction.CDR3ExtractionResult; @@ -146,6 +147,11 @@ parameters.getQualityInterpretationStrategy(), saveBackwardLinks, executorService, listener == null ? null : listener.getCloneGeneratorListener()); + //Initialization of CloneGenerator + generator.preInitialize(library.getGroup(parameters.getSpecies(), parameters.getGene(), SegmentGroupType.Variable), + library.getGroup(parameters.getSpecies(), parameters.getGene(), SegmentGroupType.Joining), + library.getGroup(parameters.getSpecies(), parameters.getGene(), SegmentGroupType.Diversity)); + //Setting progress reporter stage = "Individual sequence analysis & clone generation"; diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/pipeline/Parameters.java mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/pipeline/Parameters.java --- mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/pipeline/Parameters.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/pipeline/Parameters.java 2013-10-09 08:03:10.000000000 +0000 @@ -23,6 +23,7 @@ import com.milaboratory.core.segment.Gene; import com.milaboratory.core.segment.Species; import com.milaboratory.mitcr.cdrextraction.CDR3ExtractorParameters; +import com.milaboratory.mitcr.cli.BuildInformationProvider; import com.milaboratory.mitcr.clonegenerator.BasicCloneGeneratorParameters; import com.milaboratory.mitcr.clonegenerator.CloneGeneratorParameters; import com.milaboratory.mitcr.clonegenerator.CloneGeneratorParametersDeserializer; @@ -39,6 +40,7 @@ * @author Shugay Mikhail (mikhail.shugay@gmail.com) */ public final class Parameters { + public static final String FORMAT_VERSION = "1.0"; private Gene gene; private Species species; private QualityInterpretationStrategy qualityInterpretationStrategy = new DummyQualityInterpretationStrategy(); //Do not take quality information into account while processing sequences @@ -88,6 +90,16 @@ } public static Parameters fromXML(Element e) { + //Extracting format information + String format = e.getChildTextTrim("format"); + + if (format == null) //Backward compatibility + format = "1.0"; + + //Checking for compatibility + if (!format.equals(FORMAT_VERSION)) + throw new RuntimeException("Unsupported parameters format version."); + Element clusterizer = e.getChild("clusterizer"); return new Parameters(Gene.fromXML(e.getChildTextTrim("gene")), Species.valueOf(e.getChildTextTrim("species")), @@ -103,6 +115,11 @@ } public Element asXML(Element e) { + //Adding format information + e.addContent(new Element("format").setText(FORMAT_VERSION)); + String version = BuildInformationProvider.getVersion(); + if (version != null) + e.addContent(new Element("exportedByVersion").setText(version)); e.addContent(new Element("gene").setText(gene.getXmlRepresentation())); e.addContent(new Element("species").setText(species.name())); e.addContent(qualityInterpretationStrategy.asXML(new Element("qualityInterpretationStrategy"))); diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/qualitystrategy/IlluminaQualityInterpretationStrategy.java mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/qualitystrategy/IlluminaQualityInterpretationStrategy.java --- mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/qualitystrategy/IlluminaQualityInterpretationStrategy.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/qualitystrategy/IlluminaQualityInterpretationStrategy.java 2013-10-09 08:03:10.000000000 +0000 @@ -97,7 +97,7 @@ @Override public boolean isBad(int position) { - return nucleotideSQPair.getQuality().rawQualityValue(position) < threshold; + return nucleotideSQPair.getQuality().value(position) < threshold; } }; } @@ -121,7 +121,7 @@ @Override public boolean isBad(int position) { - return read.getData().getQuality().rawQualityValue(position) < threshold; + return read.getData().getQuality().value(position) < threshold; } }; } diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/vdjmapping/DSegmentMapper.java mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/vdjmapping/DSegmentMapper.java --- mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/vdjmapping/DSegmentMapper.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/vdjmapping/DSegmentMapper.java 2013-10-09 08:03:10.000000000 +0000 @@ -24,7 +24,6 @@ import com.milaboratory.core.segment.SegmentGroupContainer; import com.milaboratory.core.sequence.NucleotideSQPair; import com.milaboratory.core.sequence.nucleotide.NucleotideSequence; -import com.milaboratory.core.sequence.util.NucleotideRCSequence; import com.milaboratory.util.BitArray; import java.util.ArrayList; @@ -51,7 +50,7 @@ wrappers.add(new SegmentSequenceWrapper(al.getSequence(), al)); if (searchRC) wrappers.add(new SegmentSequenceWrapper( - new NucleotideRCSequence(al.getSequence()), al)); + al.getSequence().getReverseComplement(), al)); } this.wrappers = wrappers.toArray(new SegmentSequenceWrapper[wrappers.size()]); } diff -Nru mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/vdjmapping/VDJSegmentsMapper.java mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/vdjmapping/VDJSegmentsMapper.java --- mitcr-1.0.2/src/main/java/com/milaboratory/mitcr/vdjmapping/VDJSegmentsMapper.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/main/java/com/milaboratory/mitcr/vdjmapping/VDJSegmentsMapper.java 2013-10-09 08:03:10.000000000 +0000 @@ -21,7 +21,6 @@ package com.milaboratory.mitcr.vdjmapping; import com.milaboratory.core.sequence.NucleotideSQPair; -import com.milaboratory.core.sequence.util.NucleotideSubSequence; /** * A joint mapper for V, J and D(optional) segments. @@ -81,8 +80,7 @@ int to = results[1].getSegmentBorderFrom() - 1; if (from < to) { //search for d gene between v end and j start - NucleotideSubSequence subSequence = new NucleotideSubSequence(wrapper.getSequence(), from, to - from + 1); - dResult = dMapper.map(subSequence); + dResult = dMapper.map(wrapper.getSequence().getRange(from, to + 1)); if (dResult != null) { dResult.segmentBorderFrom += from; dResult.segmentBorderTo += from; diff -Nru mitcr-1.0.2/src/scripts/mitcr mitcr-1.0.3/src/scripts/mitcr --- mitcr-1.0.2/src/scripts/mitcr 1970-01-01 00:00:00.000000000 +0000 +++ mitcr-1.0.3/src/scripts/mitcr 2013-10-09 08:03:10.000000000 +0000 @@ -0,0 +1,49 @@ +#!/bin/bash + +freem=`free -m | sed 's/\s\+/ /g' | cut -d' ' -f4 | head -n 2 | tail -n 1 | tr -d '\n'` +buffersm=`free -m | sed 's/\s\+/ /g' | cut -d' ' -f6 | head -n 2 | tail -n 1 | tr -d '\n'` +cachedm=`free -m | sed 's/\s\+/ /g' | cut -d' ' -f7 | head -n 2 | tail -n 1 | tr -d '\n'` + +free_memory=`echo "$freem+$buffersm+$cachedm" | bc` + +java_memory=`echo "$free_memory*9/10" | bc` + +classpath="/usr/share/java/micommons.jar:/usr/share/java/redberry-pipe.jar:/usr/share/java/jdom1.jar:/usr/share/java/commons-compress.jar:/usr/share/java/commons-math.jar:/usr/share/java/commons-cli.jar:/usr/share/java/trove3.jar:/usr/share/java/mitcr.jar" +xmx="${java_memory}m" +params=("$@") + +java_path=`ls -1 /usr/lib/jvm | grep java-7-openjdk | grep -v common | tr -d '\n'` +if [ -z "$java_path" ]; then + java_path=`ls -1 /usr/lib/jvm | grep java-7 | head -n 1 | tr -d '\n'` +fi +java_path="/usr/lib/jvm/${java_path}/bin/java" + +if [ ! -f "$java_path" ]; then + echo "Can't find Java 7 on your system." +fi + +auto_memory=true + +for ((n=0; n < ${#params[@]}; n++)) +do + if [[ "${params[$n]}" == -Xmx* ]] + then + xmx="${params[$n]:4}" + unset params[$n] + auto_memory=false + fi +done + +if $auto_memory ; then + echo "Max java heap space automatically set to ${xmx} (90% of free memory). Use '-Xmx' option to adjust this value." +else + echo "Java heap space set to ${xmx}." +fi + +options="-XX:+AggressiveOpts" + +if [[ `uname -i` == "x86_64" ]]; then + options="$options -XX:+DoEscapeAnalysis" +fi + +eval "${java_path} -Dexecutable=mitcr $options -cp $classpath -Xmx${xmx} com.milaboratory.mitcr.cli.Main ${params[@]}" diff -Nru mitcr-1.0.2/src/test/java/com/milaboratory/core/io/CloneSetIOTest.java mitcr-1.0.3/src/test/java/com/milaboratory/core/io/CloneSetIOTest.java --- mitcr-1.0.2/src/test/java/com/milaboratory/core/io/CloneSetIOTest.java 1970-01-01 00:00:00.000000000 +0000 +++ mitcr-1.0.3/src/test/java/com/milaboratory/core/io/CloneSetIOTest.java 2013-10-09 08:03:10.000000000 +0000 @@ -0,0 +1,62 @@ +/* + * MiTCR + * + * Copyright (c) 2010-2013: + * Bolotin Dmitriy + * Chudakov Dmitriy + * + * MiTCR is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package com.milaboratory.core.io; + +import com.milaboratory.core.clone.Clone; +import com.milaboratory.core.clone.CloneSet; +import com.milaboratory.mitcr.cli.ExportDetalizationLevel; +import org.junit.Assert; +import org.junit.Test; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.io.PrintStream; +import java.util.HashSet; +import java.util.zip.GZIPInputStream; + +import static com.milaboratory.core.io.CloneSetIO.exportCloneSet; +import static com.milaboratory.core.io.CloneSetIO.importCloneSet; + +public class CloneSetIOTest { + @Test + public void testExportImport() throws Exception { + //Reading test cloneSet + InputStream stream = this.getClass().getClassLoader().getResourceAsStream("test_cloneSet.txt.gz"); + GZIPInputStream unzippedStream = new GZIPInputStream(stream); + CloneSet cloneSet = importCloneSet(unzippedStream); + unzippedStream.close(); + + //Creating set of clones + HashSet clones = new HashSet<>(cloneSet.getClones()); + + //Writing and then reading the clone set + final ByteArrayOutputStream os = new ByteArrayOutputStream(); + exportCloneSet(new PrintStream(os), cloneSet, ExportDetalizationLevel.Full); + final byte[] result = os.toByteArray(); + final ByteArrayInputStream is = new ByteArrayInputStream(result); + final CloneSet testCloneSet = importCloneSet(is); + + //Testing that deserialization result is the same as serialization + Assert.assertEquals(cloneSet.getTotalCount(), testCloneSet.getTotalCount()); + Assert.assertTrue(clones.containsAll(testCloneSet.getClones())); + } +} diff -Nru mitcr-1.0.2/src/test/java/com/milaboratory/core/util/CloneSetsComparatorTest.java mitcr-1.0.3/src/test/java/com/milaboratory/core/util/CloneSetsComparatorTest.java --- mitcr-1.0.2/src/test/java/com/milaboratory/core/util/CloneSetsComparatorTest.java 1970-01-01 00:00:00.000000000 +0000 +++ mitcr-1.0.3/src/test/java/com/milaboratory/core/util/CloneSetsComparatorTest.java 2013-10-09 08:03:10.000000000 +0000 @@ -0,0 +1,29 @@ +package com.milaboratory.core.util; + +import com.milaboratory.core.clone.CloneSet; +import com.milaboratory.core.io.CloneSetIO; +import com.milaboratory.util.CompressionType; +import junit.framework.Assert; +import org.junit.Test; + +public class CloneSetsComparatorTest { + private CloneSet loadCloneSet(String fileName) throws Exception { + return CloneSetIO.importCloneSet( + this.getClass().getClassLoader(). + getResourceAsStream(fileName), CompressionType.GZIP); + } + + @Test + public void test1() throws Exception { + CloneSet cloneSetFlex1 = loadCloneSet("o_good_flex1.txt.gz"), + cloneSetFlex2 = loadCloneSet("o_good_flex2.txt.gz"), + cloneSetJPrimer1 = loadCloneSet("o_good_jprimer1.txt.gz"), + cloneSetJPrimer2 = loadCloneSet("o_good_jprimer2.txt.gz"); + + Assert.assertEquals(0.0, CloneSetsComparator.compare(cloneSetFlex1, cloneSetFlex2).difference, 1E-10); + Assert.assertEquals(0.0, CloneSetsComparator.compare(cloneSetJPrimer1, cloneSetJPrimer2).difference, 1E-10); + + //Commutativity test + Assert.assertEquals(CloneSetsComparator.compare(cloneSetJPrimer2, cloneSetFlex1).difference, CloneSetsComparator.compare(cloneSetFlex1, cloneSetJPrimer2).difference, 1E-10); + } +} diff -Nru mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/MiTCRTestUtils.java mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/MiTCRTestUtils.java --- mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/MiTCRTestUtils.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/MiTCRTestUtils.java 2013-10-09 08:03:10.000000000 +0000 @@ -20,9 +20,9 @@ */ package com.milaboratory.mitcr; +import com.milaboratory.core.sequence.quality.QualityFormat; import com.milaboratory.core.sequencing.io.SSequencingDataReader; import com.milaboratory.core.sequencing.io.fastq.SFastqReader; -import com.milaboratory.core.sequencing.io.fastq.quality.QualityStringFormat; import com.milaboratory.mitcr.cdrextraction.CDR3ExtractorParameters; import com.milaboratory.mitcr.cdrextraction.Strand; import com.milaboratory.mitcr.vdjmapping.AlignmentDirection; @@ -40,7 +40,7 @@ public static SSequencingDataReader getSampleTReader() { try { return new SFastqReader(MiTCRTestUtils.class.getClassLoader().getSystemResourceAsStream("good_ds_test.fastq.gz"), - QualityStringFormat.Illumina18, CompressionType.GZIP); + QualityFormat.Phred33, CompressionType.GZIP); } catch (IOException ex) { throw new RuntimeException(ex); } @@ -52,7 +52,7 @@ public static SSequencingDataReader getSampleFReader() { try { return new SFastqReader(MiTCRTestUtils.class.getClassLoader().getSystemResourceAsStream("cdr3_sample.fastq.gz"), - QualityStringFormat.Illumina18, CompressionType.GZIP); + QualityFormat.Phred33, CompressionType.GZIP); } catch (IOException ex) { throw new RuntimeException(ex); } @@ -69,6 +69,6 @@ } public static SSequencingDataReader getReaderFromString(String readsContent) throws IOException { - return new SFastqReader(new ByteArrayInputStream(readsContent.getBytes()), QualityStringFormat.Illumina18, CompressionType.None); + return new SFastqReader(new ByteArrayInputStream(readsContent.getBytes()), QualityFormat.Phred33, CompressionType.None); } } diff -Nru mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/cdrextraction/CDR3ExtractorFactoryTest.java mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/cdrextraction/CDR3ExtractorFactoryTest.java --- mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/cdrextraction/CDR3ExtractorFactoryTest.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/cdrextraction/CDR3ExtractorFactoryTest.java 2013-10-09 08:03:10.000000000 +0000 @@ -29,10 +29,9 @@ import com.milaboratory.core.sequence.aminoacid.AminoAcidAlphabet; import com.milaboratory.core.sequence.aminoacid.CDRAminoAcidSequence; import com.milaboratory.core.sequence.nucleotide.NucleotideSequence; -import com.milaboratory.core.sequence.nucleotide.NucleotideSequenceImpl; +import com.milaboratory.core.sequence.quality.QualityFormat; import com.milaboratory.core.sequencing.io.SSequencingDataReader; import com.milaboratory.core.sequencing.io.fastq.SFastqReader; -import com.milaboratory.core.sequencing.io.fastq.quality.QualityStringFormat; import com.milaboratory.core.sequencing.read.SSequencingRead; import com.milaboratory.mitcr.pipeline.ParameterPresets; import com.milaboratory.mitcr.qualitystrategy.DummyQualityInterpretationStrategy; @@ -51,7 +50,7 @@ @Test public void testEmptyBarcode() throws Exception { String sequenceString = "TTTTGATTGCTGGCACAGAAGTACACAGATGTCTGGGAGGGAGCAGCCGACTCCAGCCTGAGCGAGAACTCC"; - NucleotideSequence sequence = NucleotideSequenceImpl.fromSequence(sequenceString); + NucleotideSequence sequence = new NucleotideSequence(sequenceString); NucleotideSQPair pair = new NucleotideSQPair(sequence); CDR3ExtractorFromSQPair extractor = new CDR3ExtractorFromSQPair(Species.HomoSapiens, Gene.TRB, ParameterPresets.getFlex().getCDR3ExtractorParameters(), DefaultSegmentLibrary.load(), new DummyQualityInterpretationStrategy()); @@ -65,7 +64,7 @@ public void testExactMatch() throws URISyntaxException, IOException, InterruptedException { SSequencingDataReader reads = new SFastqReader(ClassLoader.getSystemResourceAsStream("cdr3_sample.fastq.gz"), - QualityStringFormat.Illumina18, CompressionType.GZIP); + QualityFormat.Phred33, CompressionType.GZIP); CDR3ExtractorFactory extractorFactory = new CDR3ExtractorFactoryFromSRead(Species.HomoSapiens, Gene.TRB, getFlexCDR3ExtractionParameters(), library, diff -Nru mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/cdrextraction/CDR3ExtractorTest.java mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/cdrextraction/CDR3ExtractorTest.java --- mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/cdrextraction/CDR3ExtractorTest.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/cdrextraction/CDR3ExtractorTest.java 2013-10-09 08:03:10.000000000 +0000 @@ -28,9 +28,9 @@ import com.milaboratory.core.sequence.NucleotideSQPair; import com.milaboratory.core.sequence.aminoacid.AminoAcidAlphabet; import com.milaboratory.core.sequence.aminoacid.CDRAminoAcidSequence; +import com.milaboratory.core.sequence.quality.QualityFormat; import com.milaboratory.core.sequencing.io.SSequencingDataReader; import com.milaboratory.core.sequencing.io.fastq.SFastqReader; -import com.milaboratory.core.sequencing.io.fastq.quality.QualityStringFormat; import com.milaboratory.core.sequencing.read.SSequencingRead; import com.milaboratory.mitcr.qualitystrategy.DummyQualityInterpretationStrategy; import com.milaboratory.mitcr.qualitystrategy.IlluminaQualityInterpretationStrategy; @@ -80,7 +80,7 @@ @Test public void testIllumina() throws URISyntaxException, IOException, InterruptedException { File sample = new File(ClassLoader.getSystemResource("cdr3_sample.fastq.gz").toURI()); - SSequencingDataReader reader = new SFastqReader(sample, QualityStringFormat.Illumina18, CompressionType.GZIP); + SSequencingDataReader reader = new SFastqReader(sample, QualityFormat.Phred33, CompressionType.GZIP); CDR3Extractor extractor; extractor = new CDR3ExtractorFromSRead(Species.HomoSapiens, Gene.TRB, @@ -111,7 +111,7 @@ @Test public void testDifference() throws Exception { File sample = new File(ClassLoader.getSystemResource("cdr3_sample.fastq.gz").toURI()); - SSequencingDataReader reader = new SFastqReader(sample, QualityStringFormat.Illumina18, CompressionType.GZIP); + SSequencingDataReader reader = new SFastqReader(sample, QualityFormat.Phred33, CompressionType.GZIP); CDR3Extractor extractor = new CDR3ExtractorFromSRead(Species.HomoSapiens, Gene.TRB, getFlexCDR3ExtractionParameters(), library, @@ -134,7 +134,7 @@ int count = 0; - //SFastqWriter writer = new SFastqWriter(System.out, QualityStringFormat.Illumina18, CompressionType.None); + //SFastqWriter writer = new SFastqWriter(System.out, QualityFormat.Illumina18, CompressionType.None); while ((result = results.take()) != null) { if (result.getCDR3() == null) diff -Nru mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/cli/ParametersIOTest.java mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/cli/ParametersIOTest.java --- mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/cli/ParametersIOTest.java 1970-01-01 00:00:00.000000000 +0000 +++ mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/cli/ParametersIOTest.java 2013-10-09 08:03:10.000000000 +0000 @@ -0,0 +1,21 @@ +package com.milaboratory.mitcr.cli; + +import com.milaboratory.mitcr.pipeline.ParameterPresets; +import com.milaboratory.mitcr.pipeline.Parameters; +import org.junit.Assert; +import org.junit.Test; + +public class ParametersIOTest { + @Test + public void test1() throws Exception { + Parameters params = ParameterPresets. + getFlex(); + String paramsString = ParametersIO. + exportParametersToString(params); + Assert.assertEquals(-1, + paramsString.indexOf('\n')); + Assert.assertEquals(params, + ParametersIO.importParametersFromString(paramsString)); + + } +} diff -Nru mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/cli/TabDelimitedImporterTest.java mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/cli/TabDelimitedImporterTest.java --- mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/cli/TabDelimitedImporterTest.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/cli/TabDelimitedImporterTest.java 1970-01-01 00:00:00.000000000 +0000 @@ -1,58 +0,0 @@ -/* - * MiTCR - * - * Copyright (c) 2010-2013: - * Bolotin Dmitriy - * Chudakov Dmitriy - * - * MiTCR is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation, either version 3 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ -package com.milaboratory.mitcr.cli; - -import com.milaboratory.core.clone.Clone; -import com.milaboratory.core.clone.CloneSet; -import org.junit.Assert; -import org.junit.Test; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.InputStream; -import java.io.PrintStream; -import java.util.HashSet; -import java.util.zip.GZIPInputStream; - -public class TabDelimitedImporterTest { - @Test - public void testExportImport() throws Exception { - //Reading test cloneSet - InputStream stream = this.getClass().getClassLoader().getResourceAsStream("test_cloneSet.txt.gz"); - GZIPInputStream unzippedStream = new GZIPInputStream(stream); - CloneSet cloneSet = TabDelimitedImporter.importCloneSet(unzippedStream); - unzippedStream.close(); - - //Creating set of clones - HashSet clones = new HashSet<>(cloneSet.getClones()); - - //Writing and then reading the clone set - final ByteArrayOutputStream os = new ByteArrayOutputStream(); - TabDelimitedExporter.exportCloneSet(new PrintStream(os), cloneSet, ExportDetalizationLevel.Full); - final byte[] result = os.toByteArray(); - final ByteArrayInputStream is = new ByteArrayInputStream(result); - final CloneSet testCloneSet = TabDelimitedImporter.importCloneSet(is); - - //Testing that deserialization result is the same as serialization - Assert.assertEquals(cloneSet.getTotalCount(), testCloneSet.getTotalCount()); - Assert.assertTrue(clones.containsAll(testCloneSet.getClones())); - } -} diff -Nru mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/clonegenerator/AverageQualityCalculatorTest.java mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/clonegenerator/AverageQualityCalculatorTest.java --- mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/clonegenerator/AverageQualityCalculatorTest.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/clonegenerator/AverageQualityCalculatorTest.java 2013-10-09 08:03:10.000000000 +0000 @@ -8,7 +8,7 @@ public class AverageQualityCalculatorTest { @Test public void test1() throws Exception { - RandomGenerator rg = new MersenneTwister(); + RandomGenerator rg = new MersenneTwister(234562); SummaryStatistics ss = new SummaryStatistics(); byte accumulator = 0; @@ -27,8 +27,8 @@ @Test public void test2() throws Exception { - RandomGenerator rg = new Well19937a(); - RandomData rdg = new RandomDataImpl(new Well44497a()); + RandomGenerator rg = new Well19937a(223441); + RandomData rdg = new RandomDataImpl(new Well44497a(454213)); final int sampleSize = 2000; diff -Nru mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/clonegenerator/BasicCloneGeneratorTest.java mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/clonegenerator/BasicCloneGeneratorTest.java --- mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/clonegenerator/BasicCloneGeneratorTest.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/clonegenerator/BasicCloneGeneratorTest.java 2013-10-09 08:03:10.000000000 +0000 @@ -27,9 +27,9 @@ import com.milaboratory.core.segment.Gene; import com.milaboratory.core.segment.SegmentGroupType; import com.milaboratory.core.segment.Species; +import com.milaboratory.core.sequence.quality.QualityFormat; import com.milaboratory.core.sequencing.io.SSequencingDataReader; import com.milaboratory.core.sequencing.io.fastq.SFastqReader; -import com.milaboratory.core.sequencing.io.fastq.quality.QualityStringFormat; import com.milaboratory.core.sequencing.read.SSequencingRead; import com.milaboratory.mitcr.cdrextraction.CDR3ExtractionResult; import com.milaboratory.mitcr.cdrextraction.CDR3ExtractorFromSRead; @@ -50,7 +50,7 @@ @Test public void testExactMatch() throws URISyntaxException, IOException, InterruptedException { File sample = new File(ClassLoader.getSystemResource("cdr3_sample.fastq.gz").toURI()); - SSequencingDataReader reader = new SFastqReader(sample, QualityStringFormat.Illumina18, CompressionType.GZIP); + SSequencingDataReader reader = new SFastqReader(sample, QualityFormat.Phred33, CompressionType.GZIP); TestCGListener listener = new TestCGListener(); @@ -121,7 +121,7 @@ private CloneSet getCloneSet(AccumulatorCloneFactory factory) throws URISyntaxException, IOException, InterruptedException { File sample = new File(ClassLoader.getSystemResource("cdr3_sample.fastq.gz").toURI()); - SSequencingDataReader reader = new SFastqReader(sample, QualityStringFormat.Illumina18, CompressionType.GZIP); + SSequencingDataReader reader = new SFastqReader(sample, QualityFormat.Phred33, CompressionType.GZIP); TestCGListener listener = new TestCGListener(); diff -Nru mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/clonegenerator/LQMappingCloneGeneratorTest.java mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/clonegenerator/LQMappingCloneGeneratorTest.java --- mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/clonegenerator/LQMappingCloneGeneratorTest.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/clonegenerator/LQMappingCloneGeneratorTest.java 2013-10-09 08:03:10.000000000 +0000 @@ -26,9 +26,9 @@ import com.milaboratory.core.clone.CloneSet; import com.milaboratory.core.segment.Gene; import com.milaboratory.core.segment.Species; +import com.milaboratory.core.sequence.quality.QualityFormat; import com.milaboratory.core.sequencing.io.SSequencingDataReader; import com.milaboratory.core.sequencing.io.fastq.SFastqReader; -import com.milaboratory.core.sequencing.io.fastq.quality.QualityStringFormat; import com.milaboratory.core.sequencing.read.SSequencingRead; import com.milaboratory.mitcr.cdrextraction.CDR3ExtractionResult; import com.milaboratory.mitcr.cdrextraction.CDR3ExtractorFromSRead; @@ -62,7 +62,7 @@ @Test public void test0() throws InterruptedException, IOException, URISyntaxException { File sample = new File(ClassLoader.getSystemResource("cdr3_sample.fastq.gz").toURI()); - SSequencingDataReader reader = new SFastqReader(sample, QualityStringFormat.Illumina18, CompressionType.GZIP); + SSequencingDataReader reader = new SFastqReader(sample, QualityFormat.Phred33, CompressionType.GZIP); CDR3ExtractorFromSRead extractor = new CDR3ExtractorFromSRead(Species.HomoSapiens, Gene.TRB, getFlexCDR3ExtractionParameters(), library, @@ -156,7 +156,7 @@ @Test public void testProportional() throws Exception { //File sample = new File(ClassLoader.getSystemResource("cdr3_sample.fastq.gz").toURI()); - //SSequencingDataReader reader = new SFastqReader(sample, QualityStringFormat.Illumina18, CompressionType.GZIP); + //SSequencingDataReader reader = new SFastqReader(sample, QualityFormat.Illumina18, CompressionType.GZIP); // | | //TGCAGCGCACACATGAACACAGAAGCTTTCTTT - clone 1 //TGCAGCGCTCACATGAACACTGAAGCTTTCTTT - clone 2 diff -Nru mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/clusterization/PenaltyBasedFastClusterizerTest.java mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/clusterization/PenaltyBasedFastClusterizerTest.java --- mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/clusterization/PenaltyBasedFastClusterizerTest.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/clusterization/PenaltyBasedFastClusterizerTest.java 2013-10-09 08:03:10.000000000 +0000 @@ -31,7 +31,7 @@ import com.milaboratory.core.sequence.util.SequencesUtils; import com.milaboratory.core.sequencing.io.SSequencingDataReader; import com.milaboratory.core.sequencing.io.fastq.SFastqReader; -import com.milaboratory.core.sequencing.io.fastq.quality.QualityStringFormat; +import com.milaboratory.core.sequence.quality.QualityFormat; import com.milaboratory.core.sequencing.read.SSequencingRead; import com.milaboratory.mitcr.cdrextraction.CDR3ExtractionResult; import com.milaboratory.mitcr.cdrextraction.CDR3ExtractorFromSRead; @@ -57,7 +57,7 @@ @Test public void firstTest() throws InterruptedException, URISyntaxException, IOException { File sample = new File(ClassLoader.getSystemResource("cdr3_sample.fastq.gz").toURI()); - SSequencingDataReader reader = new SFastqReader(sample, QualityStringFormat.Illumina18, CompressionType.GZIP); + SSequencingDataReader reader = new SFastqReader(sample, QualityFormat.Phred33, CompressionType.GZIP); CDR3ExtractorFromSRead extractor = new CDR3ExtractorFromSRead(Species.HomoSapiens, Gene.TRB, getFlexCDR3ExtractionParameters(), library, diff -Nru mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/pipeline/FullPipelineTest.java mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/pipeline/FullPipelineTest.java --- mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/pipeline/FullPipelineTest.java 1970-01-01 00:00:00.000000000 +0000 +++ mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/pipeline/FullPipelineTest.java 2013-10-09 08:03:10.000000000 +0000 @@ -0,0 +1,35 @@ +package com.milaboratory.mitcr.pipeline; + +import com.milaboratory.core.clone.CloneSet; +import com.milaboratory.core.io.CloneSetIO; +import com.milaboratory.core.sequencing.io.fastq.SFastqReader; +import com.milaboratory.core.util.CloneSetsComparator; +import com.milaboratory.util.CompressionType; +import org.junit.Assert; +import org.junit.Test; + +public class FullPipelineTest { + private CloneSet loadCloneSet(String fileName) throws Exception { + return CloneSetIO.importCloneSet( + this.getClass().getClassLoader(). + getResourceAsStream(fileName), CompressionType.GZIP); + } + + private void test(Parameters params, String referenceName) throws Exception { + FullPipeline pipeline = new FullPipeline(new SFastqReader(this.getClass().getClassLoader(). + getResourceAsStream("good_ds_test.fastq.gz"), CompressionType.GZIP), params); + pipeline.run(); + CloneSet csResult = pipeline.getResult(); + Assert.assertEquals(0.0, CloneSetsComparator.compare(csResult, loadCloneSet(referenceName)).difference, 0.005); + } + + @Test + public void testFlex1() throws Exception { + test(ParameterPresets.getFlex(), "o_good_flex1.txt.gz"); + } + + @Test + public void testJPrimer1() throws Exception { + test(ParameterPresets.getJPrimer(), "o_good_jprimer1.txt.gz"); + } +} diff -Nru mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/vdjmapping/AbstractMapperTest.java mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/vdjmapping/AbstractMapperTest.java --- mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/vdjmapping/AbstractMapperTest.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/vdjmapping/AbstractMapperTest.java 2013-10-09 08:03:10.000000000 +0000 @@ -22,7 +22,7 @@ import com.milaboratory.core.segment.SegmentLibrary; import com.milaboratory.core.sequencing.io.fastq.SFastqReader; -import com.milaboratory.core.sequencing.io.fastq.quality.QualityStringFormat; +import com.milaboratory.core.sequence.quality.QualityFormat; import com.milaboratory.core.sequencing.read.SSequencingRead; import com.milaboratory.util.CompressionType; import org.junit.BeforeClass; @@ -81,7 +81,7 @@ library = SegmentLibrary.readFromFile(segmentsFile); SFastqReader reader = new SFastqReader(new ByteArrayInputStream(readsForTest.getBytes()), - QualityStringFormat.Illumina18, CompressionType.None); + QualityFormat.Phred33, CompressionType.None); SSequencingRead read; List readsList = new ArrayList<>(); @@ -99,13 +99,13 @@ /*private static SequenceWrapper getWrapper(String fileName, boolean mark) { try { - FASTQReaderOld reader = new FASTQReaderOld(fileName, QualityStringFormat.Illumina15); + FASTQReaderOld reader = new FASTQReaderOld(fileName, QualityFormat.Illumina15); NucleotideSQPair pair = reader.next().getData(); BitArray ba = new BitArray(pair.size()); ba.clearAll(); if (mark) for (int i = 0; i < pair.size(); ++i) - if (pair.getQuality().rawQualityValue(i) < 10) + if (pair.getQuality().value(i) < 10) ba.set(i); SequenceWrapper wrapper = new SequenceWrapper(ba, pair); reader.close(); diff -Nru mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/vdjmapping/DSegmentMapperTest.java mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/vdjmapping/DSegmentMapperTest.java --- mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/vdjmapping/DSegmentMapperTest.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/vdjmapping/DSegmentMapperTest.java 2013-10-09 08:03:10.000000000 +0000 @@ -5,8 +5,6 @@ import com.milaboratory.core.segment.SegmentGroupType; import com.milaboratory.core.segment.Species; import com.milaboratory.core.sequence.nucleotide.NucleotideSequence; -import com.milaboratory.core.sequence.nucleotide.NucleotideSequenceImpl; -import com.milaboratory.core.sequence.util.NucleotideRCSequence; import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -16,8 +14,8 @@ public void testGeneral() throws Exception { String seq0str = "TGCAGCGTACCGGGGGGCTCAAATGAAAAACTGTTTTTT"; - NucleotideSequence seq0 = NucleotideSequenceImpl.fromSequence(seq0str); - NucleotideSequence seq0rc = new NucleotideRCSequence(seq0); + NucleotideSequence seq0 = new NucleotideSequence(seq0str); + NucleotideSequence seq0rc = seq0.getReverseComplement(); DSegmentMapper mapperT = new DSegmentMapper(DefaultSegmentLibrary.load().getGroup(Species.HomoSapiens, Gene.TRB, SegmentGroupType.Diversity), 5, true); DSegmentMapper mapperF = new DSegmentMapper(DefaultSegmentLibrary.load().getGroup(Species.HomoSapiens, Gene.TRB, SegmentGroupType.Diversity), 5, false); diff -Nru mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/vdjmapping/SimplestAlignmentTest.java mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/vdjmapping/SimplestAlignmentTest.java --- mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/vdjmapping/SimplestAlignmentTest.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/vdjmapping/SimplestAlignmentTest.java 2013-10-09 08:03:10.000000000 +0000 @@ -1,7 +1,6 @@ package com.milaboratory.mitcr.vdjmapping; import com.milaboratory.core.sequence.nucleotide.NucleotideSequence; -import com.milaboratory.core.sequence.nucleotide.NucleotideSequenceImpl; import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -10,8 +9,8 @@ public class SimplestAlignmentTest { @Test public void test1() throws Exception { - NucleotideSequence target = NucleotideSequenceImpl.fromSequence("ATTAGACA"), - query = NucleotideSequenceImpl.fromSequence("ATTAGACA"); + NucleotideSequence target = new NucleotideSequence("ATTAGACA"), + query = new NucleotideSequence("ATTAGACA"); SimplestAlignment alignment = SimplestAlignment.build(target, query, 3); assertEquals(target.size(), alignment.length); assertEquals(0, alignment.targetFrom); @@ -20,8 +19,8 @@ @Test public void test2() throws Exception { - NucleotideSequence target = NucleotideSequenceImpl.fromSequence("ATTAGACA"), - query = NucleotideSequenceImpl.fromSequence("ATTGGACA"); + NucleotideSequence target = new NucleotideSequence("ATTAGACA"), + query = new NucleotideSequence("ATTGGACA"); SimplestAlignment alignment = SimplestAlignment.build(target, query, 3); assertEquals(4, alignment.length); assertEquals(4, alignment.targetFrom); @@ -30,8 +29,8 @@ @Test public void test3() throws Exception { - NucleotideSequence target = NucleotideSequenceImpl.fromSequence("ACA"), - query = NucleotideSequenceImpl.fromSequence("ATTGGACA"); + NucleotideSequence target = new NucleotideSequence("ACA"), + query = new NucleotideSequence("ATTGGACA"); SimplestAlignment alignment = SimplestAlignment.build(target, query, 3); assertEquals(3, alignment.length); assertEquals(0, alignment.targetFrom); @@ -40,16 +39,16 @@ @Test public void test4() throws Exception { - NucleotideSequence target = NucleotideSequenceImpl.fromSequence("ACA"), - query = NucleotideSequenceImpl.fromSequence("ATTGGACA"); + NucleotideSequence target = new NucleotideSequence("ACA"), + query = new NucleotideSequence("ATTGGACA"); SimplestAlignment alignment = SimplestAlignment.build(target, query, 4); assertNull(alignment); } @Test public void test5() throws Exception { - NucleotideSequence target = NucleotideSequenceImpl.fromSequence("ATTAGACA"), - query = NucleotideSequenceImpl.fromSequence("AGTGGAGA"); + NucleotideSequence target = new NucleotideSequence("ATTAGACA"), + query = new NucleotideSequence("AGTGGAGA"); SimplestAlignment alignment = SimplestAlignment.build(target, query, 3); assertEquals(3, alignment.length); assertEquals(3, alignment.targetFrom); @@ -58,8 +57,8 @@ @Test public void test6() throws Exception { - NucleotideSequence target = NucleotideSequenceImpl.fromSequence("ATTAGACA"), - query = NucleotideSequenceImpl.fromSequence("AGAC"); + NucleotideSequence target = new NucleotideSequence("ATTAGACA"), + query = new NucleotideSequence("AGAC"); SimplestAlignment alignment = SimplestAlignment.build(target, query, 3); assertEquals(4, alignment.length); assertEquals(3, alignment.targetFrom); diff -Nru mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/vdjmapping/tree/UniDirectionSegmentMapperTest.java mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/vdjmapping/tree/UniDirectionSegmentMapperTest.java --- mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/vdjmapping/tree/UniDirectionSegmentMapperTest.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/vdjmapping/tree/UniDirectionSegmentMapperTest.java 2013-10-09 08:03:10.000000000 +0000 @@ -24,7 +24,6 @@ package com.milaboratory.mitcr.vdjmapping.tree; import com.milaboratory.core.sequence.nucleotide.NucleotideSequence; -import com.milaboratory.core.sequence.util.NucleotideSubSequence; import com.milaboratory.core.sequencing.read.SSequencingRead; import com.milaboratory.mitcr.qualitystrategy.IlluminaQualityInterpretationStrategy; import com.milaboratory.mitcr.vdjmapping.*; @@ -41,7 +40,7 @@ VJSegmentMapper mapper = VJSegmentMapperFactory.createMapperForSReads(container, params, new IlluminaQualityInterpretationStrategy((byte) 20)); VJSegmentMappingResult result = mapper.map(reads[3]); String assertSequence = "TTCTACATCTGCAGT"; - NucleotideSequence c = new NucleotideSubSequence(reads[3].getData().getSequence(), result.getRefPoint() - 12, 15); + NucleotideSequence c = reads[3].getData().getSequence().getRange(result.getRefPoint() - 12, result.getRefPoint() + 3); Assert.assertEquals(assertSequence, c.toString()); } @@ -51,7 +50,7 @@ VJSegmentMapper mapper = VJSegmentMapperFactory.createMapperForSReads(container, params, new IlluminaQualityInterpretationStrategy((byte) 20)); VJSegmentMappingResult result = mapper.map(reads[3]); String assertSequence = "GTGCCCATCCTGAAGACAGCAGCTTCTACATCTGCAGT"; - NucleotideSequence c = new NucleotideSubSequence(reads[3].getData().getSequence(), result.getRefPoint() - 35, 38); + NucleotideSequence c = reads[3].getData().getSequence().getRange(result.getRefPoint() - 35, result.getRefPoint() + 3); Assert.assertEquals(assertSequence, c.toString()); } diff -Nru mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/vdjmapping/trivial/TrivialSegmentMapperTest.java mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/vdjmapping/trivial/TrivialSegmentMapperTest.java --- mitcr-1.0.2/src/test/java/com/milaboratory/mitcr/vdjmapping/trivial/TrivialSegmentMapperTest.java 2013-08-12 11:19:38.000000000 +0000 +++ mitcr-1.0.3/src/test/java/com/milaboratory/mitcr/vdjmapping/trivial/TrivialSegmentMapperTest.java 2013-10-09 08:03:10.000000000 +0000 @@ -24,7 +24,7 @@ import com.milaboratory.core.segment.SegmentGroupContainer; import com.milaboratory.core.segment.Species; import com.milaboratory.core.sequence.NucleotideSQPair; -import com.milaboratory.core.sequence.nucleotide.NucleotideSequenceImpl; +import com.milaboratory.core.sequence.nucleotide.NucleotideSequence; import com.milaboratory.mitcr.pipeline.ParameterPresets; import com.milaboratory.mitcr.pipeline.Parameters; import com.milaboratory.mitcr.qualitystrategy.DummyQualityInterpretationStrategy; @@ -44,7 +44,7 @@ @Test public void testFirst() throws Exception { NucleotideSQPair testSequence = new NucleotideSQPair( - NucleotideSequenceImpl.fromSequence("TCTGAGTCAACAGTCTCCAGAATAAGGACGGAGCATTTTCCCCTGACCCTGGAG" + + new NucleotideSequence("TCTGAGTCAACAGTCTCCAGAATAAGGACGGAGCATTTTCCCCTGACCCTGGAG" + // TGTGCCAGCAGCGAGAGACAGGGGACGCAGTATTTT "TCTGCCAGGCCCTCACATACCTCTCAGTCCCTCTGTGCCAGCAGCGAGAGACAGGGGACGCAGTATTTTGGCCCAGGCACCCGGCTGACAGTGCTC")); @@ -69,7 +69,7 @@ // VVVVVVVVVVVVV............................. // GGAGTTGGCTGCTCCCTCCCAGACATCTGTGTACTTCTGTGCCAGCAGT - TRBV6-6*02 // GCTGTCGGCTGCTCCCTCCCAGACATCTGTGTACTTCTGTGCCAGCAGTTactc - TRBV6-5*01 - NucleotideSequenceImpl.fromSequence("TGCTCCCTCCCAGACATCTGTGTACTTCTGTGCCAGCAGTTCCCTAGCGGGAGAGCACGAGCAGTACTTC")); + new NucleotideSequence("TGCTCCCTCCCAGACATCTGTGTACTTCTGTGCCAGCAGTTCCCTAGCGGGAGAGCACGAGCAGTACTTC")); IlluminaQualityInterpretationStrategy ill = new IlluminaQualityInterpretationStrategy((byte) 25); VJSegmentMappingResult resultVJ; @@ -94,7 +94,7 @@ // VVVVVVVVVVVVV............................. // GGAGTTGGCTGCTCCCTCCCAGACATCTGTGTACTTCTGTGCCAGCAGT - TRBV6-6*02 // GCTGTCGGCTGCTCCCTCCCAGACATCTGTGTACTTCTGTGCCAGCAGTTactc - TRBV6-5*01 - NucleotideSequenceImpl.fromSequence("TGCTCCCTCCCAGACATCTGTGTACTTCTGTGCCAGAAGTTCCCTAGCGGGAGAGCACGAGCAGTACTTC")); + new NucleotideSequence("TGCTCCCTCCCAGACATCTGTGTACTTCTGTGCCAGAAGTTCCCTAGCGGGAGAGCACGAGCAGTACTTC")); IlluminaQualityInterpretationStrategy ill = new IlluminaQualityInterpretationStrategy((byte) 25); VJSegmentMappingResult resultVJ; @@ -119,7 +119,7 @@ // VVVVVVVVVVVVV............................. // GGAGTTGGCTGCTCCCTCCCAGACATCTGTGTACTTCTGTGCCAGCAGT - TRBV6-6*02 // GCTGTCGGCTGCTCCCTCCCAGACATCTGTGTACTTCTGTGCCAGCAGTTactc - TRBV6-5*01 - NucleotideSequenceImpl.fromSequence("TGCTCCCTCCCAGACATCTGTGTACTTCTGTGCCAGCACTTCCCTAGCGGGAGAGCACGAGCAGTACTTC")); + new NucleotideSequence("TGCTCCCTCCCAGACATCTGTGTACTTCTGTGCCAGCACTTCCCTAGCGGGAGAGCACGAGCAGTACTTC")); IlluminaQualityInterpretationStrategy ill = new IlluminaQualityInterpretationStrategy((byte) 25); VJSegmentMappingResult resultVJ; @@ -146,19 +146,19 @@ // VVVVVVVVVVVVV............................. // GGAGTTGGCTGCTCCCTCCCAGACATCTGTGTACTTCTGTGCCAGCAGT - // GCTGTCGGCTGCTCCCTCCCAGACATCTGTGTACTTCTGTGCCAGCAGTTactc - TRBV6-5*01 - NucleotideSequenceImpl.fromSequence("TGCTCCCTCCCAGACATCTGTGTACTTCTGTGCCAGCAGTTCTCTAGCGGGAGAGCACGAGCAGTACTTC")), + new NucleotideSequence("TGCTCCCTCCCAGACATCTGTGTACTTCTGTGCCAGCAGTTCTCTAGCGGGAGAGCACGAGCAGTACTTC")), vCDR3Chimera1 = new NucleotideSQPair( // ?????????? VVVVVVVVVVVV.............................. - NucleotideSequenceImpl.fromSequence("GTACTTCTGTTGCTCCCTCCCAGACATCTGTGTACTTCTGTGCCAGCAGTTCTCTAGCGGGAGAGCACGAGCAGTACTTC")), + new NucleotideSequence("GTACTTCTGTTGCTCCCTCCCAGACATCTGTGTACTTCTGTGCCAGCAGTTCTCTAGCGGGAGAGCACGAGCAGTACTTC")), vCDR3Chimera2 = new NucleotideSQPair( // ???????????? VVVVVVVVVVVV.............................. - NucleotideSequenceImpl.fromSequence("TGTGCCAGCAGTTGCTCCCTCCCAGACATCTGTGTACTTCTGTGCCAGCAGTTCTCTAGCGGGAGAGCACGAGCAGTACTTC")), + new NucleotideSequence("TGTGCCAGCAGTTGCTCCCTCCCAGACATCTGTGTACTTCTGTGCCAGCAGTTCTCTAGCGGGAGAGCACGAGCAGTACTTC")), vCDR3Chimera3 = new NucleotideSQPair( // ??????????????????? VVVVVVVVVVVV.............................. - NucleotideSequenceImpl.fromSequence("TGTGTACTTCTGTGCCAGCTGCTCCCTCCCAGACATCTGTGTACTTCTGTGCCAGCAGTTCTCTAGCGGGAGAGCACGAGCAGTACTTC")), + new NucleotideSequence("TGTGTACTTCTGTGCCAGCTGCTCCCTCCCAGACATCTGTGTACTTCTGTGCCAGCAGTTCTCTAGCGGGAGAGCACGAGCAGTACTTC")), vCDR3Chimera4 = new NucleotideSQPair( // ??????????????????? * * VVVVVVVVVVVV.............................. - NucleotideSequenceImpl.fromSequence("TGTGTACTTCTGTGCCAGCTGCTCCCTCCCAGTCATCTGTGTTCTTCTGTGCCAGCAGTTCTCTAGCGGGAGAGCACGAGCAGTACTTC")); + new NucleotideSequence("TGTGTACTTCTGTGCCAGCTGCTCCCTCCCAGTCATCTGTGTTCTTCTGTGCCAGCAGTTCTCTAGCGGGAGAGCACGAGCAGTACTTC")); IlluminaQualityInterpretationStrategy ill = new IlluminaQualityInterpretationStrategy((byte) 25); @@ -200,7 +200,7 @@ TrivialSegmentMapper mapper = new TrivialSegmentMapper(container, -1, 4, 12, 2, AlignmentDirection.Both); - NucleotideSQPair sequence = new NucleotideSQPair(NucleotideSequenceImpl.fromSequence(seqInt)); + NucleotideSQPair sequence = new NucleotideSQPair(new NucleotideSequence(seqInt)); VJSegmentMappingResult resultVJ; @@ -220,24 +220,24 @@ // |0 |10 |20 |30 |40 |50 |60 // ............................JJJJJJJJJJJJJJJ // CTCCTACGAGCAGTACTTCGGGCCGGGCACCAGGCTCACGGTCACAG - TRBJ2-7*01 - NucleotideSequenceImpl.fromSequence("TGTGCCAGCAGTTCTCTAGCGGGAGAGCACGAGCAGTACTTCGGGCCGGGCACCAGGCTCACGGTCACAG")), + new NucleotideSequence("TGTGCCAGCAGTTCTCTAGCGGGAGAGCACGAGCAGTACTTCGGGCCGGGCACCAGGCTCACGGTCACAG")), jCDR3Chimera1 = new NucleotideSQPair( // |0 |10 |20 |30 |40 |50 |60 |70 |80 // ...........................JJJJJJJJJJJJJJJ - NucleotideSequenceImpl.fromSequence("CCAGGCTCACGGTCACAGTGTGCCAGCAGTTCTCTAGCGGGAGAGCACGAGCAGTACTTCGGGCCGGGCACCAGGCTCACGGTCACAG")), + new NucleotideSequence("CCAGGCTCACGGTCACAGTGTGCCAGCAGTTCTCTAGCGGGAGAGCACGAGCAGTACTTCGGGCCGGGCACCAGGCTCACGGTCACAG")), jCDR3MM1 = new NucleotideSQPair( // |0 |10 |20 |30 |40 |50 |60 // ...........................JJJ*JJJJJJJJJJJ - NucleotideSequenceImpl.fromSequence("TGTGCCAGCAGTTCTCTAGCGGGAGAGCACAAGCAGTACTTCGGGCCGGGCACCAGGCTCACGGTCACAG")), + new NucleotideSequence("TGTGCCAGCAGTTCTCTAGCGGGAGAGCACAAGCAGTACTTCGGGCCGGGCACCAGGCTCACGGTCACAG")), jCDR3MM2 = new NucleotideSQPair( // ...........................JJJ*JJJJJJ*JJJJ - NucleotideSequenceImpl.fromSequence("TGTGCCAGCAGTTCTCTAGCGGGAGAGCACGAGCAGTGCTTCGGGCCGGGCACCAGGCTCACGGTCACAG")), + new NucleotideSequence("TGTGCCAGCAGTTCTCTAGCGGGAGAGCACGAGCAGTGCTTCGGGCCGGGCACCAGGCTCACGGTCACAG")), jCDR3MM3 = new NucleotideSQPair( // ...........................JJJ*JJJJJJJJJJJ - NucleotideSequenceImpl.fromSequence("TGTGCCAGCAGTTCTCTAGCGGGAGAGCACGAGGAGTACTTCGGGCCGGGCACCAGGCTCACGGTCACAG")), + new NucleotideSequence("TGTGCCAGCAGTTCTCTAGCGGGAGAGCACGAGGAGTACTTCGGGCCGGGCACCAGGCTCACGGTCACAG")), jCDR3Chimera4 = new NucleotideSQPair( // ??????????????????...........................JJJJJJJJJJJJJJJ - NucleotideSequenceImpl.fromSequence("CTTCGGGCCGGGCGCCAATGTGCCAGCAGTTCTCTAGCGGGAGAGCACGAGCAGTACTTCGGG")); + new NucleotideSequence("CTTCGGGCCGGGCGCCAATGTGCCAGCAGTTCTCTAGCGGGAGAGCACGAGCAGTACTTCGGG")); IlluminaQualityInterpretationStrategy ill = new IlluminaQualityInterpretationStrategy((byte) 25); Binary files /tmp/5_yOnfIyun/mitcr-1.0.2/src/test/resources/o_good_flex1.txt.gz and /tmp/kGPchmFFbO/mitcr-1.0.3/src/test/resources/o_good_flex1.txt.gz differ Binary files /tmp/5_yOnfIyun/mitcr-1.0.2/src/test/resources/o_good_flex2.txt.gz and /tmp/kGPchmFFbO/mitcr-1.0.3/src/test/resources/o_good_flex2.txt.gz differ Binary files /tmp/5_yOnfIyun/mitcr-1.0.2/src/test/resources/o_good_jprimer1.txt.gz and /tmp/kGPchmFFbO/mitcr-1.0.3/src/test/resources/o_good_jprimer1.txt.gz differ Binary files /tmp/5_yOnfIyun/mitcr-1.0.2/src/test/resources/o_good_jprimer2.txt.gz and /tmp/kGPchmFFbO/mitcr-1.0.3/src/test/resources/o_good_jprimer2.txt.gz differ