[med-svn] [Git][med-team/libgoby-java][master] 13 commits: Using the Debian packaged implementation of bzip2
Pierre Gruet
gitlab at salsa.debian.org
Tue Nov 10 17:06:10 GMT 2020
Pierre Gruet pushed to branch master at Debian Med / libgoby-java
Commits:
a4e59332 by Pierre Gruet at 2020-10-19T17:32:32+02:00
Using the Debian packaged implementation of bzip2
- - - - -
0e08c04c by Pierre Gruet at 2020-10-19T17:33:15+02:00
Changing old invocations of classes of fastutil
- - - - -
812a84ea by Pierre Gruet at 2020-10-19T17:33:58+02:00
Using GeneratedMessageV3 of protobuf instead of GeneratedMessage
- - - - -
acd6c100 by Pierre Gruet at 2020-10-19T17:35:17+02:00
Adding dependencies to build goby-io
- - - - -
61862a5e by Pierre Gruet at 2020-11-10T17:55:19+01:00
Updating dependencies and their management in d/maven.rules and d/maven.ignoreRules
- - - - -
65957a40 by Pierre Gruet at 2020-11-10T18:00:10+01:00
Using classes of commons-cli instead of unpackaged ones
- - - - -
e3db8e80 by Pierre Gruet at 2020-11-10T18:01:06+01:00
Using the correct SamReader api
- - - - -
b8d5e182 by Pierre Gruet at 2020-11-10T18:01:44+01:00
Computing the Fisher p-value with a Debian-packaged tool
- - - - -
e2f3d3b9 by Pierre Gruet at 2020-11-10T18:02:30+01:00
Reading class GeneTranscriptRelationships from Goby archive
- - - - -
cfd4e5b3 by Pierre Gruet at 2020-11-10T18:03:05+01:00
Catch the IOException launched by close() method of LineIterator
- - - - -
3a6ba786 by Pierre Gruet at 2020-11-10T18:03:59+01:00
Modify a few tests when requiring unpackaged tools
- - - - -
295b3cbb by Pierre Gruet at 2020-11-10T18:05:35+01:00
Creating a symlink to test-data to perform the tests
- - - - -
1e72a3f1 by Pierre Gruet at 2020-11-10T18:05:51+01:00
Updating the TODO in d/changelog
- - - - -
16 changed files:
- debian/changelog
- debian/control
- debian/maven.ignoreRules
- debian/maven.rules
- + debian/patches/adapting_to_old_fastutil.patch
- debian/patches/adding_dependencies.patch
- + debian/patches/catch_IOException_LineIterator.patch
- + debian/patches/computing_Fisher_test_pvalue.patch
- + debian/patches/exclude_not_runnable_tests.patch
- + debian/patches/inclusions_in_SplitTranscriptsMode.patch
- debian/patches/series
- + debian/patches/using_GeneratedMessageV3.patch
- + debian/patches/using_commons-cli.patch
- + debian/patches/using_correct_SamReader_api.patch
- + debian/patches/using_jbzip2.patch
- debian/rules
Changes:
=====================================
debian/changelog
=====================================
@@ -2,14 +2,12 @@ libgoby-java (3.3.1+dfsg-1) UNRELEASED; urgency=medium
* Initial release (Closes: #<bug>)
TODO:
- - at least four packages are missing:
- * edu.cornell.med.icb.identifier
- * it.unimi.dsi.lang
- * it.unimi.dsi.logging
- * it.unimi.dsi.io
+ - Packaging variationanalysis by Campagnelab, needed by goby.
+ - Go on investigating non-passing tests
+ (begun in debian/patches/exclude_not_runnable_tests.patch)
- I have put some dependencies in debian/maven.ignoreRules but it may be
wrong.
- See also https://lists.debian.org/debian-med/2013/02/msg00152.html,
although written for a previous upstream version of goby.
- -- Pierre Gruet <pgtdebian at free.fr> Mon, 24 Aug 2020 11:48:00 +0200
+ -- Pierre Gruet <pgtdebian at free.fr> Tue, 10 Nov 2020 17:50:48 +0100
=====================================
debian/control
=====================================
@@ -17,6 +17,7 @@ Build-Depends: debhelper-compat (= 13),
libcommons-lang-java,
libcommons-logging-java,
libcommons-math-java,
+ libcommons-cli-java,
liblog4j1.2-java,
libexec-maven-plugin-java,
libmaven-assembly-plugin-java,
@@ -29,7 +30,19 @@ Build-Depends: debhelper-compat (= 13),
libhtsjdk-java,
libfastutil-java,
protobuf-compiler,
- libjsap-java
+ libjsap-java,
+ libdsiutils-java,
+ libicb-utils-java,
+ libreflections-java,
+ libpj-java,
+ libprotobuf-dev,
+ libpcre3-dev,
+ pkg-config,
+ r-cran-rjava,
+ libeasymock-java <!nocheck>,
+ junit4 <!nocheck>,
+ testng <!nocheck>,
+ libpicard-java <!nocheck>
Standards-Version: 4.5.0
Vcs-Browser: https://anonscm.debian.org/cgit/debian-med/libgoby-java.git
Vcs-Git: https://anonscm.debian.org/git/debian-med/libgoby-java.git
=====================================
debian/maven.ignoreRules
=====================================
@@ -3,7 +3,9 @@ org.sonatype.plugins nexus-staging-maven-plugin * * * *
kr.motd.maven os-maven-plugin * * * *
pl.project13.maven git-commit-id-plugin * * * *
org.apache.maven.plugins maven-verifier-plugin * * * *
-org.campagnelab.icb icb-utils * * * *
-it.unimi.dsi dsiutils * * * *
-org.reflections reflections * * * *
com.github.lucarosellini.rJava JRI * * * *
+org.deeplearning4j * * * * *
+edu.mssm.crover cli * * * *
+edu.cornell.med.icb tisim-api * * * *
+org.nd4j * * * * *
+junit-addons junit-addons * * * *
=====================================
debian/maven.rules
=====================================
@@ -5,3 +5,10 @@ org.apache.maven.plugins maven-antrun-plugin jar s/.*/1.8/ * *
org.codehaus.mojo build-helper-maven-plugin jar s/.*/3.0.0/ * *
org.apache.maven.plugins maven-dependency-plugin jar s/.*/3.1.1/ * *
org.apache.maven.plugins maven-javadoc-plugin jar s/.*/3.0.1/ * *
+it.unimi.dsi dsiutils jar s/.*/debian/ * *
+org.campagnelab.icb icb-utils jar s/.*/debian/ * *
+org.reflections reflections jar s/.*/debian/ * *
+s/org.campagnelab.ext/com.martiansoftware/ jsap jar s/.*/debian/ * *
+junit junit jar s/.*/4.x/ * *
+org.easymock easymock jar s/.*/debian/ * *
+com.github.samtools htsjdk jar s/.*/debian/ * *
=====================================
debian/patches/adapting_to_old_fastutil.patch
=====================================
@@ -0,0 +1,40 @@
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/alignments/ConcatSortedAlignmentReader.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/alignments/ConcatSortedAlignmentReader.java
+@@ -20,7 +20,7 @@
+
+ package org.campagnelab.goby.alignments;
+
+-import it.unimi.dsi.fastutil.AbstractPriorityQueue;
++import it.unimi.dsi.fastutil.PriorityQueue;
+ import it.unimi.dsi.fastutil.objects.ObjectArrayPriorityQueue;
+ import it.unimi.dsi.fastutil.objects.ObjectHeapPriorityQueue;
+ import org.apache.commons.logging.Log;
+@@ -40,7 +40,7 @@
+ */
+ public class ConcatSortedAlignmentReader extends ConcatAlignmentReader {
+
+- AbstractPriorityQueue<Bucket> entryHeap;
++ PriorityQueue<Bucket> entryHeap;
+ private static AlignmentPositionComparator comparator = new AlignmentPositionComparator();
+ private boolean[] nextLoadedForReader;
+ private Bucket[] buckets;
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/alignments/processors/LocalSortProcessor.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/alignments/processors/LocalSortProcessor.java
+@@ -21,7 +21,7 @@
+ import edu.cornell.med.icb.identifier.IndexedIdentifier;
+ import org.campagnelab.goby.alignments.Alignments;
+ import org.campagnelab.goby.reads.RandomAccessSequenceInterface;
+-import it.unimi.dsi.fastutil.AbstractPriorityQueue;
++import it.unimi.dsi.fastutil.PriorityQueue;
+ import it.unimi.dsi.fastutil.objects.ObjectHeapPriorityQueue;
+
+ import java.io.IOException;
+@@ -38,7 +38,7 @@
+ * Time: 10:49 AM
+ */
+ public class LocalSortProcessor implements AlignmentProcessorInterface {
+- AbstractPriorityQueue<Alignments.AlignmentEntry> entryHeap;
++ PriorityQueue<Alignments.AlignmentEntry> entryHeap;
+ AlignmentProcessorInterface delegate;
+ /**
+ * We store at most alignments for 30 consecutive genomic positions. 30 is chosen because it is much larger than
=====================================
debian/patches/adding_dependencies.patch
=====================================
@@ -1,6 +1,6 @@
Description: Adding missing dependencies to goby-io/pom.xml
Author: Pierre Gruet <pgtdebian at free.fr>
-Last-Update: 2020-08-24
+Last-Update: 2020-10-31
--- a/goby-io/pom.xml
+++ b/goby-io/pom.xml
@@ -29,3 +29,59 @@ Last-Update: 2020-08-24
</dependencies>
</project>
+--- a/goby-distribution/pom.xml
++++ b/goby-distribution/pom.xml
+@@ -140,6 +140,11 @@
+ <version>2.6</version>
+ </dependency>
+ <dependency>
++ <groupId>commons-cli</groupId>
++ <artifactId>commons-cli</artifactId>
++ <version>debian</version>
++ </dependency>
++ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.1.1</version>
+@@ -193,7 +198,9 @@
+ <dependency>
+ <groupId>org.rosuda.REngine</groupId>
+ <artifactId>REngine</artifactId>
+- <version>2.1.0</version>
++ <version>debian</version>
++ <scope>system</scope>
++ <systemPath>/usr/lib/R/site-library/rJava/jri/JRI.jar</systemPath>
+ </dependency>
+ <dependency>
+ <groupId>com.github.lucarosellini.rJava</groupId>
+@@ -240,9 +247,7 @@
+ <dependency>
+ <groupId>edu.rit.pj</groupId>
+ <artifactId>pj</artifactId>
+- <version>1.0</version>
+- <scope>system</scope>
+- <systemPath>${basedir}/../lib/pj20091226.jar</systemPath>
++ <version>debian</version>
+ </dependency>
+ <dependency>
+ <groupId>edu.mssm.crover</groupId>
+@@ -339,10 +344,18 @@
+ </dependency>
+
+ <dependency>
++ <groupId>org.testng</groupId>
++ <artifactId>testng</artifactId>
++ <version>debian</version>
++ <scope>test</scope>
++ </dependency>
++
++ <dependency>
+ <groupId>com.github.broadinstitute</groupId>
+ <artifactId>picard</artifactId>
+ <version>2.6.0</version>
+- <scope>test</scope>
++ <scope>system</scope>
++ <systemPath>/usr/share/java/picard.jar</systemPath>
+ </dependency>
+ <dependency>
+ <groupId>it.unimi.dsi</groupId>
=====================================
debian/patches/catch_IOException_LineIterator.patch
=====================================
@@ -0,0 +1,21 @@
+Description: Catch the IOException launched by close() method of LineIterator
+Author: Pierre Gruet <pgtdebian at free.fr>
+Forwarded: no
+Last-Update: 2020-11-03
+
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/modes/EmpiricalPMode.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/modes/EmpiricalPMode.java
+@@ -342,7 +342,12 @@
+ Object next = it.next();
+ lineCount++;
+ }
+- it.close();
++ try {
++ it.close();
++ } catch (IOException e) {
++ System.err.println("Could not close LineIterator on " + inputFilename);
++ System.exit(1);
++ }
+ return lineCount;
+ }
+
=====================================
debian/patches/computing_Fisher_test_pvalue.patch
=====================================
@@ -0,0 +1,33 @@
+Description: Computing the Fisher p-value with a Debian-packaged tool
+Author: Pierre Gruet <pgtdebian at free.fr>
+Forwarded: not-needed
+Last-Update: 2020-11-01
+
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/stats/FisherExactTestCalculator.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/stats/FisherExactTestCalculator.java
+@@ -18,8 +18,8 @@
+
+ package org.campagnelab.goby.stats;
+
+-import gominer.Fisher;
+ import it.unimi.dsi.fastutil.objects.ObjectArraySet;
++import org.campagnelab.goby.R.FisherExact;
+
+ /**
+ * Calculates Fisher exact test P-value for an observed count difference between comparison
+@@ -98,8 +98,13 @@
+ * @return 2-tailed gominer.Fisher p value
+ */
+ // public double fisher(final int totalChanged, final int changedInNode, final int total, final int inNode) {
+- final Fisher fisher = new Fisher();
+- final double pValue = fisher.fisher(totalCountInA, sumCountInA, totalCountInA + totalCountInB, sumCountInA + sumCountInB);
++ int count00 = sumCountInA;
++ int count10 = totalCountInA - sumCountInA;
++ int count01 = sumCountInB;
++ int count11 = sumCountInA + totalCountInB - count00 - count01;
++ final FisherExact.Result result =
++ FisherExact.fexact(count00, count10, count01, count11);
++ final double pValue = result.getPValue();
+
+
+ /* Test : fisher.fisher(40,10,100,30)=
=====================================
debian/patches/exclude_not_runnable_tests.patch
=====================================
@@ -0,0 +1,123 @@
+Description: modify a few tests when requiring unpackaged tools
+ junitx.framework is not packaged, the test files TestSplicedSamHelper.java and
+ TestAlignmentReader.java, that use it, are deactivated in
+ goby-distribution/pom.xml.
+ We also exclude TestGobyPaperTop5000s.java in this pom, as data files that it
+ uses are not provided in the source.
+ Two tests in TestSamRecordParser are skipped for the same reason.
+ gominer is not packaged, the tests using it are slightly modified.
+Author: Pierre Gruet <pgtdebian at free.fr>
+Forwarded: no
+Last-Update: 2020-11-08
+
+--- a/goby-distribution/pom.xml
++++ b/goby-distribution/pom.xml
+@@ -39,6 +39,10 @@
+ <configuration>
+ <source>${java.version}</source>
+ <target>${java.version}</target>
++ <testExcludes>
++ <exclude>**/TestSplicedSamHelper.java</exclude>
++ <exclude>**/TestAlignmentReader.java</exclude>
++ </testExcludes>
+ </configuration>
+ </plugin>
+ <plugin>
+@@ -73,6 +77,16 @@
+ </executions>
+ </plugin>
+ <plugin>
++ <groupId>org.apache.maven.plugins</groupId>
++ <artifactId>maven-surefire-plugin</artifactId>
++ <version>debian</version>
++ <configuration>
++ <excludes>
++ <exclude>**/TestGobyPaperTop5000s.java</exclude>
++ </excludes>
++ </configuration>
++ </plugin>
++ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <version>2.6</version>
+ <configuration>
+--- a/goby-distribution/src/test/java/org/campagnelab/goby/R/TestFisherExact.java
++++ b/goby-distribution/src/test/java/org/campagnelab/goby/R/TestFisherExact.java
+@@ -18,7 +18,6 @@
+
+ package org.campagnelab.goby.R;
+
+-import gominer.Fisher;
+ import org.apache.commons.lang.ArrayUtils;
+ import org.junit.AfterClass;
+ import static org.junit.Assert.assertEquals;
+@@ -151,18 +150,6 @@
+ result.getAlternativeHypothesis());
+ }
+
+- /**
+- * Validates that the R implementation returns the same p-value for a simple
+- * example set.
+- */
+- @Test
+- public void twoTailed() {
+- final Fisher gominer = new Fisher();
+- final double gominerPValue = gominer.fisher(40, 10, 100, 30);
+-
+- final double fisherExactPValue = FisherExact.twoTailed(40, 10, 100, 30);
+- assertEquals("R result does not match gominer", gominerPValue, fisherExactPValue, EPSILON);
+- }
+
+ /**
+ * If R libraries are not set up properly these tests cannot be run.
+--- a/goby-distribution/src/test/java/org/campagnelab/goby/stats/TestStatistics.java
++++ b/goby-distribution/src/test/java/org/campagnelab/goby/stats/TestStatistics.java
+@@ -19,7 +19,6 @@
+ package org.campagnelab.goby.stats;
+
+ import org.campagnelab.goby.R.FisherExact;
+-import gominer.Fisher;
+ import it.unimi.dsi.fastutil.objects.ObjectArrayList;
+ import it.unimi.dsi.lang.MutableString;
+ import org.apache.commons.math.MathException;
+@@ -371,15 +370,11 @@
+ assertEquals("fisher test equal expected result", 0.5044757698516504, results.getStatistic(info, fisher.statisticIds.get(0)), 0.001);
+
+
+- final Fisher fisherTest = new Fisher();
+ final int totalCountInA = 1700;
+ final int totalCountInB = 170; // equal total in each group
+ final int sumCountInA = 90;
+ final int sumCountInB = 45; // half the counts in sample B
+
+- fisherTest.fisher(totalCountInA, sumCountInA, totalCountInA + totalCountInB, sumCountInA + sumCountInB);
+-
+- final double pValue = fisherTest.getTwotail();
+ final double proportionTotalA = divide(totalCountInA, (totalCountInA + totalCountInB));
+ final double proportionTotalB = divide(totalCountInB, (totalCountInA + totalCountInB));
+ final ChiSquareTest chisquare = new ChiSquareTestImpl();
+--- a/goby-distribution/src/test/java/org/campagnelab/goby/readers/sam/TestSamRecordParser.java
++++ b/goby-distribution/src/test/java/org/campagnelab/goby/readers/sam/TestSamRecordParser.java
+@@ -29,6 +29,7 @@
+ import org.apache.commons.io.FilenameUtils;
+ import org.slf4j.Logger;
+ import org.junit.BeforeClass;
++import org.junit.Ignore;
+ import org.junit.Test;
+ import org.slf4j.LoggerFactory;
+
+@@ -425,6 +426,7 @@
+ *
+ * @throws IOException error
+ */
++ @Ignore
+ @Test
+ public void testRoundTripTrickySpliced18() throws IOException {
+ final RoundTripAlignment rtc = new RoundTripAlignment();
+@@ -672,6 +674,7 @@
+ *
+ * @throws java.io.IOException error
+ */
++ @Ignore
+ @Test
+ public void testTestTargetIndexCreation() throws IOException {
+ final RoundTripAlignment rtc = new RoundTripAlignment();
=====================================
debian/patches/inclusions_in_SplitTranscriptsMode.patch
=====================================
@@ -0,0 +1,17 @@
+Description: reading class GeneTranscriptRelationships from Goby archive
+ The above-named class is in the archive of Goby and thus does not need to be read elsewhere.
+Author: Pierre Gruet <pgtdebian at free.fr>
+Forwarded: no
+Last-Update: 2020-11-02
+
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/modes/SplitTranscriptsMode.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/modes/SplitTranscriptsMode.java
+@@ -24,7 +24,7 @@
+ import org.campagnelab.goby.readers.FastXEntry;
+ import org.campagnelab.goby.readers.FastXReader;
+ import edu.cornell.med.icb.identifier.IndexedIdentifier;
+-import edu.cornell.med.icb.tissueinfo.similarity.GeneTranscriptRelationships;
++import org.campagnelab.goby.alignments.filters.GeneTranscriptRelationships;
+ import it.unimi.dsi.fastutil.ints.Int2IntMap;
+ import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
+ import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
=====================================
debian/patches/series
=====================================
@@ -1,2 +1,11 @@
protoc.patch
adding_dependencies.patch
+using_jbzip2.patch
+adapting_to_old_fastutil.patch
+using_GeneratedMessageV3.patch
+using_commons-cli.patch
+using_correct_SamReader_api.patch
+computing_Fisher_test_pvalue.patch
+inclusions_in_SplitTranscriptsMode.patch
+catch_IOException_LineIterator.patch
+exclude_not_runnable_tests.patch
=====================================
debian/patches/using_GeneratedMessageV3.patch
=====================================
@@ -0,0 +1,178 @@
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/alignments/AlignmentCollectionHandler.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/alignments/AlignmentCollectionHandler.java
+@@ -20,7 +20,7 @@
+
+ import com.google.protobuf.ByteString;
+ import com.google.protobuf.CodedInputStream;
+-import com.google.protobuf.GeneratedMessage;
++import com.google.protobuf.GeneratedMessageV3;
+ import com.google.protobuf.Message;
+ import org.campagnelab.goby.compression.*;
+ import org.campagnelab.goby.compression.FastArithmeticCoder;
+@@ -177,7 +177,7 @@
+ }
+
+ @Override
+- public GeneratedMessage parse(final InputStream uncompressedStream) throws IOException {
++ public GeneratedMessageV3 parse(final InputStream uncompressedStream) throws IOException {
+ final byte[] bytes = IOUtils.toByteArray(uncompressedStream);
+ final CodedInputStream codedInput = CodedInputStream.newInstance(bytes);
+ codedInput.setSizeLimit(Integer.MAX_VALUE);
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/compression/FastBufferedMessageChunksReader.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/compression/FastBufferedMessageChunksReader.java
+@@ -20,7 +20,7 @@
+
+ package org.campagnelab.goby.compression;
+
+-import com.google.protobuf.GeneratedMessage;
++import com.google.protobuf.GeneratedMessageV3;
+ import org.campagnelab.goby.exception.GobyRuntimeException;
+ import it.unimi.dsi.fastutil.bytes.ByteSet;
+ import it.unimi.dsi.fastutil.io.FastBufferedInputStream;
+@@ -215,7 +215,7 @@
+ * @return True if the input has more entries, False otherwise.
+ */
+ @Override
+- public boolean hasNext(final GeneratedMessage collection, final int collectionSize) {
++ public boolean hasNext(final GeneratedMessageV3 collection, final int collectionSize) {
+ if (collection == null || entryIndex >= collectionSize) {
+ if (input != null) {
+ try {
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/compression/MessageChunksReader.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/compression/MessageChunksReader.java
+@@ -20,7 +20,7 @@
+
+ package org.campagnelab.goby.compression;
+
+-import com.google.protobuf.GeneratedMessage;
++import com.google.protobuf.GeneratedMessageV3;
+ import org.campagnelab.goby.exception.GobyRuntimeException;
+ import org.apache.commons.io.IOUtils;
+ import org.apache.commons.logging.Log;
+@@ -85,7 +85,7 @@
+ * @param collectionSize The size of the current collection (can be zero).
+ * @return True if the input has more entries, False otherwise.
+ */
+- public boolean hasNext(final GeneratedMessage collection, final int collectionSize) {
++ public boolean hasNext(final GeneratedMessageV3 collection, final int collectionSize) {
+ if (collection == null || entryIndex >= collectionSize) {
+ if (in == null) {
+ compressedBytes = null;
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/compression/MessageChunksWriter.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/compression/MessageChunksWriter.java
+@@ -124,7 +124,7 @@
+ * @param collectionBuilder The builder prepared with the growing collection of entries.
+ * @throws IOException if there was an error writing the entries
+ */
+- public void writeAsNeeded(final com.google.protobuf.GeneratedMessage.Builder collectionBuilder) {
++ public void writeAsNeeded(final com.google.protobuf.GeneratedMessageV3.Builder collectionBuilder) {
+
+ writeAsNeeded(collectionBuilder, 1);
+ }
+@@ -139,7 +139,7 @@
+ * was just appended.
+ * @throws IOException if there was an error writing the entries
+ */
+- public synchronized long writeAsNeeded(final com.google.protobuf.GeneratedMessage.Builder collectionBuilder,
++ public synchronized long writeAsNeeded(final com.google.protobuf.GeneratedMessageV3.Builder collectionBuilder,
+ final int multiplicity) {
+ totalEntriesWritten += Math.max(1, multiplicity);
+ if (++numAppended >= numEntriesPerChunk) {
+@@ -162,7 +162,7 @@
+ *
+ * @param collectionBuilder The builder prepared with the growing collection of entries.
+ */
+- public synchronized void flush(final com.google.protobuf.GeneratedMessage.Builder collectionBuilder) {
++ public synchronized void flush(final com.google.protobuf.GeneratedMessageV3.Builder collectionBuilder) {
+ // Write the separation between two chunks: eight bytes with value 0xFF.
+
+ // If we are flushing a completely empty file, that's OK, the flush() should occur.
+@@ -221,7 +221,7 @@
+ * @param collectionBuilder The builder prepared with the growing collection of entries.
+ * @throws IOException if there is a problem closing the stream unerlying stream
+ */
+- public void close(final com.google.protobuf.GeneratedMessage.Builder collectionBuilder)
++ public void close(final com.google.protobuf.GeneratedMessageV3.Builder collectionBuilder)
+ throws IOException {
+ flush(collectionBuilder);
+ out.writeByte(0xFF); // termination codec is always GZIP
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/compression/ProtobuffCollectionHandler.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/compression/ProtobuffCollectionHandler.java
+@@ -18,7 +18,7 @@
+
+ package org.campagnelab.goby.compression;
+
+-import com.google.protobuf.GeneratedMessage;
++import com.google.protobuf.GeneratedMessageV3;
+ import com.google.protobuf.Message;
+
+ import java.io.ByteArrayOutputStream;
+@@ -46,7 +46,7 @@
+ */
+ public int getType();
+
+- public GeneratedMessage parse(InputStream uncompressedStream) throws IOException;
++ public GeneratedMessageV3 parse(InputStream uncompressedStream) throws IOException;
+
+ /**
+ * Transform a collection to a stream of compressed bits, and return the left-over collection.
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/compression/SequenceBaseInfoCollectionHandler.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/compression/SequenceBaseInfoCollectionHandler.java
+@@ -1,7 +1,7 @@
+ package org.campagnelab.goby.compression;
+
+ import com.google.protobuf.CodedInputStream;
+-import com.google.protobuf.GeneratedMessage;
++import com.google.protobuf.GeneratedMessageV3;
+ import com.google.protobuf.Message;
+ import org.apache.commons.io.IOUtils;
+
+@@ -21,7 +21,7 @@
+ }
+
+ @Override
+- public GeneratedMessage parse(final InputStream compressedBytes) throws IOException {
++ public GeneratedMessageV3 parse(final InputStream compressedBytes) throws IOException {
+ final byte[] bytes = IOUtils.toByteArray(compressedBytes);
+ final CodedInputStream codedInput = CodedInputStream.newInstance(bytes);
+ codedInput.setSizeLimit(Integer.MAX_VALUE);
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/compression/SequenceSegmentInfoCollectionHandler.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/compression/SequenceSegmentInfoCollectionHandler.java
+@@ -1,7 +1,7 @@
+ package org.campagnelab.goby.compression;
+
+ import com.google.protobuf.CodedInputStream;
+-import com.google.protobuf.GeneratedMessage;
++import com.google.protobuf.GeneratedMessageV3;
+ import com.google.protobuf.Message;
+ import org.apache.commons.io.IOUtils;
+ import org.campagnelab.dl.varanalysis.protobuf.BaseInformationRecords;
+@@ -27,7 +27,7 @@
+ }
+
+ @Override
+- public GeneratedMessage parse(InputStream uncompressedStream) throws IOException {
++ public GeneratedMessageV3 parse(InputStream uncompressedStream) throws IOException {
+ final byte[] bytes = IOUtils.toByteArray(uncompressedStream);
+ final CodedInputStream codedInput = CodedInputStream.newInstance(bytes);
+ codedInput.setSizeLimit(Integer.MAX_VALUE);
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/reads/ReadProtobuffCollectionHandler.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/reads/ReadProtobuffCollectionHandler.java
+@@ -19,7 +19,7 @@
+ package org.campagnelab.goby.reads;
+
+ import com.google.protobuf.CodedInputStream;
+-import com.google.protobuf.GeneratedMessage;
++import com.google.protobuf.GeneratedMessageV3;
+ import com.google.protobuf.Message;
+ import org.campagnelab.goby.compression.ProtobuffCollectionHandler;
+ import org.apache.commons.io.IOUtils;
+@@ -42,7 +42,7 @@
+ }
+
+ @Override
+- public GeneratedMessage parse(final InputStream compressedBytes) throws IOException {
++ public GeneratedMessageV3 parse(final InputStream compressedBytes) throws IOException {
+ final byte[] bytes = IOUtils.toByteArray(compressedBytes);
+ final CodedInputStream codedInput = CodedInputStream.newInstance(bytes);
+ codedInput.setSizeLimit(Integer.MAX_VALUE);
=====================================
debian/patches/using_commons-cli.patch
=====================================
@@ -0,0 +1,849 @@
+Description: using classes of commons-cli instead of unpackaged ones
+Author: Pierre Gruet <pgtdebian at free.fr>
+Forwarded: not-needed
+Last-Update: 2020-11-02
+
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/algorithmic/algorithm/dmr/EstimatedDistribution.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/algorithmic/algorithm/dmr/EstimatedDistribution.java
+@@ -19,7 +19,7 @@
+ package org.campagnelab.goby.algorithmic.algorithm.dmr;
+
+ import org.campagnelab.goby.algorithmic.algorithm.FenwickTree;
+-import edu.mssm.crover.cli.CLI;
++import org.apache.commons.cli.*;
+ import it.unimi.dsi.fastutil.ints.IntArrayList;
+ import it.unimi.dsi.fastutil.io.BinIO;
+ import it.unimi.dsi.fastutil.objects.ObjectArrayList;
+@@ -240,68 +240,113 @@
+ }
+
+ public static void main(final String[] args) throws IOException {
+- boolean printDensity = CLI.isKeywordGiven(args, "--print-density");
+- boolean printObservations = CLI.isKeywordGiven(args, "--print-observations");
+- String filename = CLI.getOption(args, "-f", null);
+- String outputFilename = CLI.getOption(args, "-o", "out.tsv");
+- PrintWriter outWriter = new PrintWriter(new FileWriter(outputFilename));
+- if (printDensity) {
+- EstimatedDistribution estimated = null;
+-
+- try {
+- estimated = load(filename);
+- String statName = estimated.getStatAdaptor().statName();
+- System.out.println("Statistic=" + statName);
+- System.out.println("binning strategy=" + estimated.getBinningStrategy().getName());
+- int index = 0;
+- outWriter.println("midPointSumTotal\tsumTotal range\t" + statName + "\tcount-at-" + statName);
+- final BinningStrategy binningStrategy = estimated.getBinningStrategy();
+- for (final FenwickTree tree : estimated.densitities) {
+- if (tree != null) {
+- int low = binningStrategy.getLowerBound(index);
+- int high = binningStrategy.getUpperBound(index);
+-
+- int midPointSumTotal = binningStrategy.getMidpoint(index);
+- System.out.printf("low=%d high=%d midPoint=%d %n", low, high, midPointSumTotal);
+- final long maxCumulative = tree.getCumulativeCount(tree.size() - 2);
+- for (int scaledStatistic = 0; scaledStatistic < tree.size() - 1; scaledStatistic++) {
+- final long cumulativeCountAt = tree.getCumulativeCount(scaledStatistic);
+- final long cumulativeCountAfter = tree.getCumulativeCount(scaledStatistic + 1);
+-
+- outWriter.printf("%d\t[%d-%d]\t%g\t%d%n", midPointSumTotal, binningStrategy.getLowerBound(index),
+- binningStrategy.getUpperBound(index), estimated.unscale(scaledStatistic), cumulativeCountAfter - cumulativeCountAt);
+- if (cumulativeCountAfter == maxCumulative) {
+- break;
++ Options options = new Options();
++
++ Option pDensity = new Option("printDensity", "print-density", false, "print density");
++ pDensity.setRequired(false);
++ options.addOption(pDensity);
++
++ Option pObservations = new Option("printObservations", "print-observations", false, "print observations");
++ pObservations.setRequired(false);
++ options.addOption(pObservations);
++
++ Option fname = new Option("filename", "filename", true, "filename");
++ fname.setRequired(false);
++ options.addOption(fname);
++
++ Option o = new Option("o", "o", true, "output filename");
++ o.setRequired(false);
++ options.addOption(o);
++
++ CommandLineParser parser = new DefaultParser();
++ CommandLine cmd;
++ String filename;
++ String outputFilename;
++ boolean printDensity;
++ boolean printObservations;
++
++ try {
++ cmd = parser.parse(options, args);
++ printDensity = cmd.hasOption("printDensity");
++
++ printObservations = cmd.hasOption("printObservations");
++
++ if (cmd.hasOption("f")) {
++ filename = cmd.getOptionValue("f");
++ }
++ else {
++ filename = null;
++ }
++
++ if (cmd.hasOption("o")) {
++ outputFilename = cmd.getOptionValue("o");
++ }
++ else {
++ outputFilename = new String("out.tsv");
++ }
++
++ PrintWriter outWriter = new PrintWriter(new FileWriter(outputFilename));
++ if (printDensity) {
++ EstimatedDistribution estimated = null;
++
++ try {
++ estimated = load(filename);
++ String statName = estimated.getStatAdaptor().statName();
++ System.out.println("Statistic=" + statName);
++ System.out.println("binning strategy=" + estimated.getBinningStrategy().getName());
++ int index = 0;
++ outWriter.println("midPointSumTotal\tsumTotal range\t" + statName + "\tcount-at-" + statName);
++ final BinningStrategy binningStrategy = estimated.getBinningStrategy();
++ for (final FenwickTree tree : estimated.densitities) {
++ if (tree != null) {
++ int low = binningStrategy.getLowerBound(index);
++ int high = binningStrategy.getUpperBound(index);
++
++ int midPointSumTotal = binningStrategy.getMidpoint(index);
++ System.out.printf("low=%d high=%d midPoint=%d %n", low, high, midPointSumTotal);
++ final long maxCumulative = tree.getCumulativeCount(tree.size() - 2);
++ for (int scaledStatistic = 0; scaledStatistic < tree.size() - 1; scaledStatistic++) {
++ final long cumulativeCountAt = tree.getCumulativeCount(scaledStatistic);
++ final long cumulativeCountAfter = tree.getCumulativeCount(scaledStatistic + 1);
++
++ outWriter.printf("%d\t[%d-%d]\t%g\t%d%n", midPointSumTotal, binningStrategy.getLowerBound(index),
++ binningStrategy.getUpperBound(index), estimated.unscale(scaledStatistic), cumulativeCountAfter - cumulativeCountAt);
++ if (cumulativeCountAfter == maxCumulative) {
++ break;
++ }
+ }
+ }
+- }
+- index++;
++ index++;
+
++ }
++ outWriter.close();
++ } catch (Exception e) {
++ e.printStackTrace();
++ System.exit(1);
+ }
+- outWriter.close();
+- } catch (Exception e) {
+- e.printStackTrace();
+- System.exit(1);
+- }
+
+- }
+- if (printObservations) {
++ }
++ if (printObservations) {
+
+- EstimatedDistribution estimated = null;
++ EstimatedDistribution estimated = null;
+
+- try {
+- estimated = load(filename);
+- String statName = estimated.getStatAdaptor().statName();
+- outWriter.println("tscaled-" + statName + "\t" + statName + "\tcovariates\n");
+- for (final Observation observation : estimated.getObservations()) {
+- outWriter.printf("%d\t%d\t%g\t%s%n", observation.scaledStatistic,
+- estimated.unscale(observation.scaledStatistic), IntArrayList.wrap(observation.covariates));
++ try {
++ estimated = load(filename);
++ String statName = estimated.getStatAdaptor().statName();
++ outWriter.println("tscaled-" + statName + "\t" + statName + "\tcovariates\n");
++ for (final Observation observation : estimated.getObservations()) {
++ outWriter.printf("%d\t%d\t%g\t%s%n", observation.scaledStatistic,
++ estimated.unscale(observation.scaledStatistic), IntArrayList.wrap(observation.covariates));
++ }
++ outWriter.close();
++ } catch (ClassNotFoundException e) {
++ e.printStackTrace();
++ System.exit(1);
+ }
+- outWriter.close();
+- } catch (ClassNotFoundException e) {
+- e.printStackTrace();
+- System.exit(1);
+ }
++ } catch (ParseException e) {
++ System.out.println(e.getMessage());
++ System.exit(1);
+ }
+ }
+
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/cli/FoldChangeForExonPairs.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/cli/FoldChangeForExonPairs.java
+@@ -19,7 +19,7 @@
+ package org.campagnelab.goby.cli;
+
+ import edu.cornell.med.icb.io.TSVReader;
+-import edu.mssm.crover.cli.CLI;
++import org.apache.commons.cli.*;
+
+ import java.io.FileReader;
+ import java.io.FileNotFoundException;
+@@ -46,38 +46,109 @@
+ }
+
+ private void process(String[] args) throws FileNotFoundException {
+- String inputFilenames = CLI.getOption(args, "--data", "expression-data.tsv,expression-data2.tsv");
+- String pairsFilename = CLI.getOption(args, "--pairs", "pairs.tsv");
+- String log2AverageId = CLI.getOption(args, "--group", "average log2_RPKM group UHR(BUQ)");
+- String outputFilename = CLI.getOption(args, "--output", "/data/gc-weights/exons/out.tsv");
+- String averageCountId = CLI.getOption(args, "--threshold-id", "average count group Brain");
+- int thresholdValue = CLI.getIntOption(args, "--threshold-value", 20);
+-
+- // String groupB= CLI.getOption(args,"-2","average RPKM group UHR(BUQ)");
+- int log2AverageColumnIndex = -1;
+- Object2DoubleMap<MutableString> exonExpressionData;
+-
+-
+- ObjectArrayList<Pair> pairs = loadPairs(pairsFilename);
+- PrintWriter output = new PrintWriter(outputFilename);
+- output.printf("experiment\texonId1\texonId2\tlog2RpkmExon1-log2RpkmExon2%n");
+- for (String inputFilename : inputFilenames.split("[,]")) {
+-
+- System.out.println("Processing " + inputFilename);
+- exonExpressionData = loadData(inputFilename, log2AverageId, averageCountId, thresholdValue);
+- System.out.println("Size: " + exonExpressionData.size());
+- System.out.println("Writing data..");
+- for (Pair pair : pairs) {
+- //calculate log2 RPKM exonId1 - exonId2:
+- if (exonExpressionData.containsKey(pair.exonId1) && exonExpressionData.containsKey(pair.exonId2)) {
+- double log2FoldChangeExons = exonExpressionData.get(pair.exonId1) - exonExpressionData.get(pair.exonId2);
+- output.printf("%s\t%s\t%s\t%g%n", FilenameUtils.getBaseName(inputFilename),
+- pair.exonId1, pair.exonId2, log2FoldChangeExons);
+- }
++ Options options = new Options();
++
++ Option oData = new Option("data", "data", true, "data");
++ oData.setRequired(false);
++ options.addOption(oData);
++
++ Option oPairs = new Option("pairs", "pairs", true, "pairs");
++ oPairs.setRequired(false);
++ options.addOption(oPairs);
++
++ Option oGroup = new Option("group", "group", true, "group");
++ oGroup.setRequired(false);
++ options.addOption(oGroup);
++
++ Option oOutput = new Option("output", "output", true, "output");
++ oOutput.setRequired(false);
++ options.addOption(oOutput);
++
++ Option oThresId = new Option("thresholdId", "threshold-id", true, "threshold id");
++ oThresId.setRequired(false);
++ options.addOption(oThresId);
++
++ Option oThresVal = new Option("thresholdVal", "threshold-value", true, "threshold value");
++ oThresVal.setRequired(false);
++ options.addOption(oThresVal);
++
++ CommandLineParser parser = new DefaultParser();
++ CommandLine cmd;
++ String inputFilenames;
++ String pairsFilename;
++ String log2AverageId;
++ String outputFilename;
++ String averageCountId;
++ int thresholdValue;
++
++ try {
++ cmd = parser.parse(options, args);
+
++ if (cmd.hasOption("data")) {
++ inputFilenames = cmd.getOptionValue("data");
++ }
++ else {
++ inputFilenames = new String("expression-data.tsv,expression-data2.tsv");
++ }
++ if (cmd.hasOption("pairs")) {
++ pairsFilename = cmd.getOptionValue("pairs");
++ }
++ else {
++ pairsFilename = new String("pairs.tsv");
++ }
++ if (cmd.hasOption("group")) {
++ log2AverageId = cmd.getOptionValue("group");
++ }
++ else {
++ log2AverageId = new String("average log2_RPKM group UHR(BUQ)");
++ }
++ if (cmd.hasOption("output")) {
++ outputFilename = cmd.getOptionValue("output");
++ }
++ else {
++ outputFilename = new String("/data/gc-weights/exons/out.tsv");
++ }
++ if (cmd.hasOption("thresholdId")) {
++ averageCountId = cmd.getOptionValue("thresholdId");
++ }
++ else {
++ averageCountId = new String("average count group Brain");
++ }
++ if (cmd.hasOption("thresholdVal")) {
++ thresholdValue = Integer.parseInt(cmd.getOptionValue("thresholdVal"));
++ }
++ else {
++ thresholdValue = 20;
+ }
+- }
+
++ // String groupB= CLI.getOption(args,"-2","average RPKM group UHR(BUQ)");
++ int log2AverageColumnIndex = -1;
++ Object2DoubleMap<MutableString> exonExpressionData;
++
++
++ ObjectArrayList<Pair> pairs = loadPairs(pairsFilename);
++ PrintWriter output = new PrintWriter(outputFilename);
++ output.printf("experiment\texonId1\texonId2\tlog2RpkmExon1-log2RpkmExon2%n");
++ for (String inputFilename : inputFilenames.split("[,]")) {
++
++ System.out.println("Processing " + inputFilename);
++ exonExpressionData = loadData(inputFilename, log2AverageId, averageCountId, thresholdValue);
++ System.out.println("Size: " + exonExpressionData.size());
++ System.out.println("Writing data..");
++ for (Pair pair : pairs) {
++ //calculate log2 RPKM exonId1 - exonId2:
++ if (exonExpressionData.containsKey(pair.exonId1) && exonExpressionData.containsKey(pair.exonId2)) {
++ double log2FoldChangeExons = exonExpressionData.get(pair.exonId1) - exonExpressionData.get(pair.exonId2);
++ output.printf("%s\t%s\t%s\t%g%n", FilenameUtils.getBaseName(inputFilename),
++ pair.exonId1, pair.exonId2, log2FoldChangeExons);
++ }
++
++ }
++ }
++ } catch (ParseException e) {
++ System.out.println(e.getMessage());
++ System.exit(1);
++ }
+ }
+
+ private ObjectArrayList<Pair> loadPairs(String pairsFilename) throws FileNotFoundException {
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/cli/PlantIndels.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/cli/PlantIndels.java
+@@ -19,7 +19,7 @@
+ package org.campagnelab.goby.cli;
+
+ import org.campagnelab.goby.parsers.FastaParser;
+-import edu.mssm.crover.cli.CLI;
++import org.apache.commons.cli.*;
+ import it.unimi.dsi.lang.MutableString;
+
+ import java.io.*;
+@@ -40,26 +40,128 @@
+ private int numIndels;
+
+ public static void main(final String args[]) throws IOException {
+- final String fastaReference = CLI.getOption(args, "-r", null);
+- final String outputFilename = CLI.getOption(args, "-o", "out.fq");
+- final String regionIndelTruth = CLI.getOption(args, "-t", "indel-truth.tsv");
+- // reference sequence to use
+- final String refChoice = CLI.getOption(args, "-c", "22");
+- int from = CLI.getIntOption(args, "-s", 0);
+- int to = CLI.getIntOption(args, "-e", 0);
+
+- if (to < from) {
+- System.err.println("argument to -e must be larger than argument to -s");
+- System.exit(1);
+- }
+- final int indelLength = CLI.getIntOption(args, "-l", 3);
++ Options options = new Options();
++
++ Option oR = new Option("r", "r", true, "r");
++ oR.setRequired(false);
++ options.addOption(oR);
++
++ Option oO = new Option("o", "o", true, "o");
++ oO.setRequired(false);
++ options.addOption(oO);
++
++ Option oT = new Option("t", "t", true, "t");
++ oT.setRequired(false);
++ options.addOption(oT);
++
++ Option oC = new Option("c", "c", true, "c");
++ oC.setRequired(false);
++ options.addOption(oC);
++
++ Option oS = new Option("s", "s", true, "s");
++ oS.setRequired(false);
++ options.addOption(oS);
++
++ Option oE = new Option("e", "e", true, "e");
++ oE.setRequired(false);
++ options.addOption(oE);
++
++ Option oL = new Option("l", "l", true, "l");
++ oL.setRequired(false);
++ options.addOption(oL);
++
++ Option oM = new Option("m", "m", true, "m");
++ oM.setRequired(false);
++ options.addOption(oM);
++
++ Option oRd = new Option("readDeletion", "read-deletion", false, "readDeletion");
++ oRd.setRequired(false);
++ options.addOption(oRd);
++
++ Option oN = new Option("n", "n", true, "n");
++ oN.setRequired(false);
++ options.addOption(oN);
++
++ CommandLineParser parser = new DefaultParser();
++ CommandLine cmd;
++ final String fastaReference;
++ final String outputFilename;
++ final String regionIndelTruth;
++ // reference sequence to use
++ final String refChoice;
++ int from;
++ int to;
++ final int indelLength;
+ PlantIndels processor = new PlantIndels();
+- processor.outputFilename = outputFilename;
+- processor.insert = !CLI.isKeywordGiven(args, "--read-deletion");
+- processor.numIndels=CLI.getIntOption(args,"-n",5);
+- processor.process(refChoice, fastaReference, from, to, indelLength, regionIndelTruth);
+
++ try {
++ cmd = parser.parse(options, args);
+
++ if (cmd.hasOption("r")) {
++ fastaReference = cmd.getOptionValue("r");
++ }
++ else {
++ fastaReference = null;
++ }
++ if (cmd.hasOption("o")) {
++ outputFilename = cmd.getOptionValue("o");
++ }
++ else {
++ outputFilename = new String("out.fq");
++ }
++ if (cmd.hasOption("t")) {
++ regionIndelTruth = cmd.getOptionValue("t");
++ }
++ else {
++ regionIndelTruth = new String("indel-truth.tsv");
++ }
++ if (cmd.hasOption("c")) {
++ refChoice = cmd.getOptionValue("c");
++ }
++ else {
++ refChoice = new String("22");
++ }
++ if (cmd.hasOption("s")) {
++ from = Integer.parseInt(cmd.getOptionValue("s"));
++ }
++ else {
++ from = 0;
++ }
++ if (cmd.hasOption("e")) {
++ to = Integer.parseInt(cmd.getOptionValue("e"));
++ }
++ else {
++ to = 0;
++ }
++
++ if (to < from) {
++ System.err.println("argument to -e must be larger than argument to -s");
++ System.exit(1);
++ }
++
++ if (cmd.hasOption("l")) {
++ indelLength = Integer.parseInt(cmd.getOptionValue("l"));
++ }
++ else {
++ indelLength = 3;
++ }
++
++ processor.outputFilename = outputFilename;
++ processor.insert = !cmd.hasOption("readDeletion");
++
++ if (cmd.hasOption("n")) {
++ processor.numIndels = Integer.parseInt(cmd.getOptionValue("n"));
++ }
++ else {
++ processor.numIndels = 5;
++ }
++
++ processor.process(refChoice, fastaReference, from, to, indelLength, regionIndelTruth);
++ } catch (ParseException e) {
++ System.out.println(e.getMessage());
++ System.exit(1);
++ }
+ }
+
+ public void process(String refChoice, String fastaReference, int from, int to, int indelLength, String regionIndelTruth) throws IOException {
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/cli/SimulateBisulfiteReads.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/cli/SimulateBisulfiteReads.java
+@@ -20,7 +20,7 @@
+
+ import org.campagnelab.goby.reads.QualityEncoding;
+ import org.campagnelab.goby.parsers.FastaParser;
+-import edu.mssm.crover.cli.CLI;
++import org.apache.commons.cli.*;
+ import it.unimi.dsi.fastutil.doubles.DoubleArrayList;
+ import it.unimi.dsi.fastutil.doubles.DoubleIterator;
+ import it.unimi.dsi.fastutil.doubles.DoubleList;
+@@ -72,32 +72,152 @@
+
+ public static void main(String[] args) throws IOException {
+
+- String fastaReference = CLI.getOption(args, "-r", null);
+- String outputFilename = CLI.getOption(args, "-o", "out.fq");
+- String regionTrueRates = CLI.getOption(args, "-t", "true-methylation.tsv");
++ Options options = new Options();
++
++ Option oR = new Option("r", "r", true, "r");
++ oR.setRequired(false);
++ options.addOption(oR);
++
++ Option oO = new Option("o", "o", true, "o");
++ oO.setRequired(false);
++ options.addOption(oO);
++
++ Option oT = new Option("t", "t", true, "t");
++ oT.setRequired(false);
++ options.addOption(oT);
++
++ Option oC = new Option("c", "c", true, "c");
++ oC.setRequired(false);
++ options.addOption(oC);
++
++ Option oS = new Option("s", "s", true, "s");
++ oS.setRequired(false);
++ options.addOption(oS);
++
++ Option oE = new Option("e", "e", true, "e");
++ oE.setRequired(false);
++ options.addOption(oE);
++
++ Option oL = new Option("l", "l", true, "l");
++ oL.setRequired(false);
++ options.addOption(oL);
++
++ Option oM = new Option("m", "m", true, "m");
++ oM.setRequired(false);
++ options.addOption(oM);
++
++ Option oBs = new Option("bisulfite", "bisulfite", false, "bisulfite");
++ oBs.setRequired(false);
++ options.addOption(oBs);
++
++ Option oStrand = new Option("strand", "strand", true, "strand");
++ oStrand.setRequired(false);
++ options.addOption(oStrand);
++
++ Option oN = new Option("n", "n", true, "n");
++ oN.setRequired(false);
++ options.addOption(oN);
++
++ CommandLineParser parser = new DefaultParser();
++ CommandLine cmd;
++ String fastaReference;
++ String outputFilename;
++ String regionTrueRates;
+ // reference sequence to use
+- String refChoice = CLI.getOption(args, "-c", "22");
+- int from = CLI.getIntOption(args, "-s", 0);
+- int to = CLI.getIntOption(args, "-e", 0);
+- if (to < from) {
+- System.err.println("argument to -e must be larger than argument to -s");
+- System.exit(1);
+- }
+- int readLength = CLI.getIntOption(args, "-l", 50);
+- String methylationRateFilename = CLI.getOption(args, "-m", "methylation-rates.tsv");
++ String refChoice;
++ int from;
++ int to;
++ int readLength;
++ String methylationRateFilename;
++ String strandChoice;
+ SimulateBisulfiteReads processor = new SimulateBisulfiteReads();
+- final boolean bisulfite = CLI.isKeywordGiven(args, "--bisulfite");
+- String strandChoice = CLI.getOption(args, "--strand", "both");
++ final boolean bisulfite;
+
+- processor.configure(bisulfite, strandChoice);
+- processor.bisulfiteTreatment = bisulfite;
+- processor.readLength = readLength;
+- processor.outputFilename = outputFilename;
+- processor.regionTrueRates = regionTrueRates;
+- processor.numRepeats = CLI.getIntOption(args, "-n", 10000);
+-
+- processor.process(refChoice, fastaReference, from, to, methylationRateFilename);
++ try {
++ cmd = parser.parse(options, args);
+
++ if (cmd.hasOption("r")) {
++ fastaReference = cmd.getOptionValue("r");
++ }
++ else {
++ fastaReference = null;
++ }
++ if (cmd.hasOption("o")) {
++ outputFilename = cmd.getOptionValue("o");
++ }
++ else {
++ outputFilename = new String("out.fq");
++ }
++ if (cmd.hasOption("t")) {
++ regionTrueRates = cmd.getOptionValue("t");
++ }
++ else {
++ regionTrueRates = new String("true-methylation.tsv");
++ }
++ if (cmd.hasOption("c")) {
++ refChoice = cmd.getOptionValue("c");
++ }
++ else {
++ refChoice = new String("22");
++ }
++ if (cmd.hasOption("s")) {
++ from = Integer.parseInt(cmd.getOptionValue("s"));
++ }
++ else {
++ from = 0;
++ }
++ if (cmd.hasOption("e")) {
++ to = Integer.parseInt(cmd.getOptionValue("e"));
++ }
++ else {
++ to = 0;
++ }
++
++ if (to < from) {
++ System.err.println("argument to -e must be larger than argument to -s");
++ System.exit(1);
++ }
++
++ if (cmd.hasOption("l")) {
++ readLength = Integer.parseInt(cmd.getOptionValue("l"));
++ }
++ else {
++ readLength = 50;
++ }
++ if (cmd.hasOption("m")) {
++ methylationRateFilename = cmd.getOptionValue("c");
++ }
++ else {
++ methylationRateFilename = new String("methylation-rates.tsv");
++ }
++
++ bisulfite = cmd.hasOption("biSulfite");
++
++ if (cmd.hasOption("strand")) {
++ strandChoice = cmd.getOptionValue("strang");
++ }
++ else {
++ strandChoice = new String("both");
++ }
++
++ processor.configure(bisulfite, strandChoice);
++ processor.bisulfiteTreatment = bisulfite;
++ processor.readLength = readLength;
++ processor.outputFilename = outputFilename;
++ processor.regionTrueRates = regionTrueRates;
++
++ if (cmd.hasOption("n")) {
++ processor.numRepeats = Integer.parseInt(cmd.getOptionValue("n"));
++ }
++ else {
++ processor.numRepeats = 10000;
++ }
++
++ processor.process(refChoice, fastaReference, from, to, methylationRateFilename);
++ } catch (ParseException e) {
++ System.out.println(e.getMessage());
++ System.exit(1);
++ }
+ }
+
+ public void configure(boolean bisulfite, String strandChoice) {
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/methylation/MethylSimilarityScan.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/methylation/MethylSimilarityScan.java
+@@ -20,7 +20,7 @@
+
+ import org.campagnelab.goby.cli.DoInParallel;
+ import edu.cornell.med.icb.io.TSVReader;
+-import edu.mssm.crover.cli.CLI;
++import org.apache.commons.cli.*;
+ import it.unimi.dsi.fastutil.floats.FloatArrayList;
+ import it.unimi.dsi.fastutil.ints.*;
+ import it.unimi.dsi.fastutil.io.BinIO;
+@@ -63,40 +63,92 @@
+ }
+
+ private void process(String[] args) throws IOException {
+- String inputFilename = CLI.getOption(args, "-i", "/data/lister/mc_h1.tsv");
+- this.windowWidths = CLI.getOption(args, "-w", "10");
+- this.maxBestHits = CLI.getIntOption(args, "-h", 100);
+- String outputFilename = CLI.getOption(args, "-o", "out.tsv");
+- final MethylationData data = load(inputFilename);
+- File outputFile = new File(outputFilename);
+- boolean outputFileExists = outputFile.exists();
+-// append:
+- PrintWriter output = new PrintWriter(new FileWriter(outputFilename, true));
+
++ Options options = new Options();
+
+- if (!outputFileExists) {
+- output.write("windowSize\tlocation\tchromosome\tforward strand start\tforward strand end\treverse strand start\treverse strand end\teffective window size\tstatistic\n");
+- }
+- for (String windowWidthString : windowWidths.split("[,]")) {
+- final int windowWidth = Integer.parseInt(windowWidthString);
+- System.out.println("Processing window size=" + windowWidth);
+- final HitBoundedPriorityQueue hits = new HitBoundedPriorityQueue(maxBestHits);
+- DoInParallel scan = new DoInParallel() {
+- @Override
+- public void action(DoInParallel forDataAccess, String chromosome, int loopIndex) {
+- compareStrands(hits, data, windowWidth, new MutableString(chromosome));
+- }
+- };
++ Option oI = new Option("i", "i", true, "i");
++ oI.setRequired(false);
++ options.addOption(oI);
++
++ Option oW = new Option("w", "w", true, "w");
++ oW.setRequired(false);
++ options.addOption(oW);
++
++ Option oH = new Option("h", "h", true, "h");
++ oH.setRequired(false);
++ options.addOption(oH);
++
++ Option oO = new Option("o", "o", true, "o");
++ oO.setRequired(false);
++ options.addOption(oO);
++
++ CommandLineParser parser = new DefaultParser();
++ CommandLine cmd;
++ String inputFilename;
++ String outputFilename;
++
++ try {
++ cmd = parser.parse(options, args);
++
++ if (cmd.hasOption("i")) {
++ inputFilename = cmd.getOptionValue("i");
++ }
++ else {
++ inputFilename = new String("/data/lister/mc_h1.tsv");
++ }
++ if (cmd.hasOption("w")) {
++ this.windowWidths = cmd.getOptionValue("w");
++ }
++ else {
++ this.windowWidths = new String("10");
++ }
++ if (cmd.hasOption("h")) {
++ this.maxBestHits = Integer.parseInt(cmd.getOptionValue("h"));
++ }
++ else {
++ this.maxBestHits = 100;
++ }
++ if (cmd.hasOption("o")) {
++ outputFilename = cmd.getOptionValue("o");
++ }
++ else {
++ outputFilename = new String("out.tsv");
++ }
+
+- try {
+- scan.execute(true, data.getChromosomeStrings());
+- } catch (Exception e) {
+- e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
++ final MethylationData data = load(inputFilename);
++ File outputFile = new File(outputFilename);
++ boolean outputFileExists = outputFile.exists();
++ // append:
++ PrintWriter output = new PrintWriter(new FileWriter(outputFilename, true));
++
++
++ if (!outputFileExists) {
++ output.write("windowSize\tlocation\tchromosome\tforward strand start\tforward strand end\treverse strand start\treverse strand end\teffective window size\tstatistic\n");
+ }
++ for (String windowWidthString : windowWidths.split("[,]")) {
++ final int windowWidth = Integer.parseInt(windowWidthString);
++ System.out.println("Processing window size=" + windowWidth);
++ final HitBoundedPriorityQueue hits = new HitBoundedPriorityQueue(maxBestHits);
++ DoInParallel scan = new DoInParallel() {
++ @Override
++ public void action(DoInParallel forDataAccess, String chromosome, int loopIndex) {
++ compareStrands(hits, data, windowWidth, new MutableString(chromosome));
++ }
++ };
++
++ try {
++ scan.execute(true, data.getChromosomeStrings());
++ } catch (Exception e) {
++ e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
++ }
+
+- printResults(hits, windowWidth, data, output);
++ printResults(hits, windowWidth, data, output);
++ }
++ output.close();
++ } catch (ParseException e) {
++ System.out.println(e.getMessage());
++ System.exit(1);
+ }
+- output.close();
+ }
+
+
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/modes/PercentMismatchesQualityFilter.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/modes/PercentMismatchesQualityFilter.java
+@@ -20,7 +20,7 @@
+
+ package org.campagnelab.goby.modes;
+
+-import edu.mssm.crover.cli.CLI;
++import org.apache.commons.cli.*;
+ import org.apache.commons.lang.StringUtils;
+ import org.campagnelab.goby.alignments.Alignments;
+ import org.campagnelab.goby.alignments.filters.AlignmentQualityFilter;
+@@ -62,8 +62,28 @@
+
+ public void setParameters(final String parameters) {
+ final String[] args = StringUtils.defaultString(parameters).split("[',=]");
+- qualityThresholdPercent = CLI.getDoubleOption(args, "threshold", 0.05d);
+- System.err.println("Setting quality threshold to " + qualityThresholdPercent);
++ Options options = new Options();
++
++ Option threshold = new Option("threshold", "threshold", true, "threshold");
++ threshold.setRequired(false);
++ options.addOption(threshold);
++ CommandLineParser parser = new DefaultParser();
++ CommandLine cmd;
++
++ try {
++ cmd = parser.parse(options, args);
++
++ if (cmd.hasOption("threshold")) {
++ qualityThresholdPercent = Double.parseDouble(cmd.getOptionValue("threshold"));
++ }
++ else {
++ qualityThresholdPercent = 0.05d;
++ }
++ System.err.println("Setting quality threshold to " + qualityThresholdPercent);
++ } catch (ParseException e) {
++ System.out.println(e.getMessage());
++ System.exit(1);
++ }
+ }
+
+ public void printUsage(final PrintStream out) {
=====================================
debian/patches/using_correct_SamReader_api.patch
=====================================
@@ -0,0 +1,344 @@
+Description: using the correct SamReader api
+Author: Pierre Gruet <pgtdebian at free.fr>
+Origin: https://sources.debian.org/src/fastqc/0.11.9+dfsg-4/debian/patches/htsjdk-api.patch
+Forwarded: no
+Last-Update: 2020-11-06
+
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/modes/SAMComparisonMode.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/modes/SAMComparisonMode.java
+@@ -32,9 +32,7 @@
+ import org.campagnelab.goby.util.dynoptions.RegisterThis;
+ import htsjdk.samtools.ValidationStringency;
+ import it.unimi.dsi.logging.ProgressLogger;
+-import htsjdk.samtools.SAMFileReader;
+-import htsjdk.samtools.SAMRecord;
+-import htsjdk.samtools.SAMRecordIterator;
++import htsjdk.samtools.*;
+ import org.slf4j.Logger;
+ import org.slf4j.LoggerFactory;
+
+@@ -284,12 +282,15 @@
+ }
+
+ System.out.println("Comparing source bam and destination bam");
+- final SAMFileReader sourceParser = new SAMFileReader(new FileInputStream(sourceBamFile));
+- final SAMFileReader destParser = new SAMFileReader(new FileInputStream(destBamFile));
++ final SamInputResource sirSource = SamInputResource.of(new FileInputStream(sourceBamFile));
++ final SamReaderFactory srfSource = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT);
++ final SamInputResource sirDest = SamInputResource.of(new FileInputStream(destBamFile));
++ final SamReaderFactory srfDest = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT);
++
++ final SamReader sourceParser = srfSource.open(sirSource);
++ final SamReader destParser = srfDest.open(sirDest);
+ // We need to set the validation to silent because an incomplete file (if the source isn't the entire file)
+ // we can see errors that wouldn't exist in a real conversion.
+- sourceParser.setValidationStringency(ValidationStringency.SILENT);
+- destParser.setValidationStringency(ValidationStringency.SILENT);
+ final SAMRecordIterator sourceIterator = sourceParser.iterator();
+ final SAMRecordIterator destIterator = destParser.iterator();
+ AlignmentReaderImpl gobyReader = null;
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/modes/SAMToCompactMode.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/modes/SAMToCompactMode.java
+@@ -242,10 +242,11 @@
+ final ProgressLogger progress = new ProgressLogger(LOG);
+ progress.displayFreeMemory = true;
+ // the following is required to set validation to SILENT before loading the header (done in the SAMFileReader constructor)
+- SAMFileReader.setDefaultValidationStringency(ValidationStringency.SILENT);
+-
+ final InputStream stream = "-".equals(inputFile) ? System.in : new FileInputStream(inputFile);
+- final SAMFileReader parser = new SAMFileReader(stream);
++ final SamInputResource sir = SamInputResource.of(stream);
++ final SamReaderFactory srf = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT);
++
++ final SamReader parser = srf.open(sir);
+ // transfer read groups to Goby header:
+ final SAMFileHeader samHeader = parser.getFileHeader();
+ final IndexedIdentifier readGroups = new IndexedIdentifier();
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/modes/SAMToCompactOldMode.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/modes/SAMToCompactOldMode.java
+@@ -128,8 +128,10 @@
+ final int[] readLengths = createReadLengthArray();
+
+ final ProgressLogger progress = new ProgressLogger(LOG);
+- final SAMFileReader parser = new SAMFileReader(new File(inputFile));
+- parser.setValidationStringency(ValidationStringency.SILENT);
++ final SamInputResource sir = SamInputResource.of(new File(inputFile));
++ final SamReaderFactory srf = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT);
++
++ final SamReader parser = srf.open(sir);
+
+ progress.start();
+
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/modes/SAMToCompactSamHelperMode.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/modes/SAMToCompactSamHelperMode.java
+@@ -231,10 +231,11 @@
+ final ProgressLogger progress = new ProgressLogger(LOG);
+ progress.displayFreeMemory = true;
+ // the following is required to set validation to SILENT before loading the header (done in the SAMFileReader constructor)
+- SAMFileReader.setDefaultValidationStringency(ValidationStringency.SILENT);
+-
+ final InputStream stream = "-".equals(inputFile) ? System.in : new FileInputStream(inputFile);
+- final SAMFileReader parser = new SAMFileReader(stream);
++ final SamInputResource sir = SamInputResource.of(stream);
++ SamReaderFactory srf = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT);
++
++ final SamReader parser = srf.open(sir);
+ // transfer read groups to Goby header:
+ final SAMFileHeader samHeader = parser.getFileHeader();
+ final IndexedIdentifier readGroups = new IndexedIdentifier();
+@@ -827,4 +828,4 @@
+ }
+
+
+-}
+\ No newline at end of file
++}
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/modes/SamExtractReadsMode.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/modes/SamExtractReadsMode.java
+@@ -30,8 +30,7 @@
+ import htsjdk.samtools.ValidationStringency;
+ import it.unimi.dsi.lang.MutableString;
+ import it.unimi.dsi.logging.ProgressLogger;
+-import htsjdk.samtools.SAMFileReader;
+-import htsjdk.samtools.SAMRecord;
++import htsjdk.samtools.*;
+ import org.slf4j.Logger;
+ import org.slf4j.LoggerFactory;
+
+@@ -142,8 +141,10 @@
+ try {
+ final ProgressLogger progress = new ProgressLogger(LOG);
+ // the following is required to set validation to SILENT before loading the header (done in the SAMFileReader constructor)
+- SAMFileReader.setDefaultValidationStringency(ValidationStringency.SILENT);
+- final SAMFileReader parser = new SAMFileReader(new File(inputFilename), null);
++ final SamInputResource sir = SamInputResource.of(new File(inputFilename));
++ final SamReaderFactory srf = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT);
++
++ final SamReader parser = srf.open(sir);
+
+ progress.start();
+
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/modes/SampleQualityScoresMode.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/modes/SampleQualityScoresMode.java
+@@ -29,8 +29,7 @@
+ import it.unimi.dsi.fastutil.ints.IntArrayList;
+ import it.unimi.dsi.fastutil.ints.IntList;
+ import it.unimi.dsi.lang.MutableString;
+-import htsjdk.samtools.SAMFileReader;
+-import htsjdk.samtools.SAMRecord;
++import htsjdk.samtools.*;
+ import org.apache.commons.lang.ArrayUtils;
+ import org.apache.commons.logging.Log;
+ import org.apache.commons.logging.LogFactory;
+@@ -350,8 +349,10 @@
+ private int processSamReadsFile(final String inputFilename) throws IOException {
+ // Create directory for output file if it doesn't already exist
+ int i = 0;
+- SAMFileReader.setDefaultValidationStringency(ValidationStringency.SILENT);
+- final SAMFileReader parser = new SAMFileReader(new FileInputStream(inputFilename));
++ final SamInputResource sir = SamInputResource.of(new FileInputStream(inputFilename));
++ final SamReaderFactory srf = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT);
++
++ final SamReader parser = srf.open(sir);
+ for (final SAMRecord samRecord : new SAMRecordIterable(parser.iterator())) {
+ final String quality = samRecord.getBaseQualityString();
+ if (quality != null && quality.length() != 0) {
+--- a/goby-distribution/src/test/java/org/campagnelab/goby/readers/sam/RoundTripAlignment.java
++++ b/goby-distribution/src/test/java/org/campagnelab/goby/readers/sam/RoundTripAlignment.java
+@@ -32,9 +32,7 @@
+ import org.campagnelab.goby.reads.RandomAccessSequenceTestSupport;
+ import htsjdk.samtools.ValidationStringency;
+ import it.unimi.dsi.logging.ProgressLogger;
+-import htsjdk.samtools.SAMFileReader;
+-import htsjdk.samtools.SAMRecord;
+-import htsjdk.samtools.SAMRecordIterator;
++import htsjdk.samtools.*;
+ import org.apache.commons.io.FilenameUtils;
+ import org.slf4j.Logger;
+ import org.slf4j.LoggerFactory;
+@@ -172,12 +170,15 @@
+ }
+
+ LOG.info("Comparing source bam and destination bam");
+- final SAMFileReader sourceParser = new SAMFileReader(new FileInputStream(sourceBamFilename));
+- final SAMFileReader destParser = new SAMFileReader(new FileInputStream(destBamFilename));
++ final SamInputResource sirSource = SamInputResource.of(new FileInputStream(sourceBamFilename));
++ final SamReaderFactory srfSource = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT);
++ final SamInputResource sirDest = SamInputResource.of(new FileInputStream(destBamFilename));
++ final SamReaderFactory srfDest = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT);
++
++ final SamReader sourceParser = srfSource.open(sirSource);
++ final SamReader destParser = srfDest.open(sirDest);
+ // We need to set the validation to silent because an incomplete file (if the source isn't the entire file)
+ // we can see errors that wouldn't exist in a real conversion.
+- sourceParser.setValidationStringency(ValidationStringency.SILENT);
+- destParser.setValidationStringency(ValidationStringency.SILENT);
+ final SAMRecordIterator sourceIterator = sourceParser.iterator();
+ final SAMRecordIterator destIterator = destParser.iterator();
+ AlignmentReaderImpl gobyReader = null;
+--- a/goby-distribution/src/test/java/org/campagnelab/goby/readers/sam/TestSamRecordParser.java
++++ b/goby-distribution/src/test/java/org/campagnelab/goby/readers/sam/TestSamRecordParser.java
+@@ -25,8 +25,7 @@
+ import htsjdk.samtools.ValidationStringency;
+ import it.unimi.dsi.lang.MutableString;
+ import junit.framework.Assert;
+-import htsjdk.samtools.SAMFileReader;
+-import htsjdk.samtools.SAMRecord;
++import htsjdk.samtools.*;
+ import org.apache.commons.io.FilenameUtils;
+ import org.slf4j.Logger;
+ import org.junit.BeforeClass;
+@@ -65,8 +64,10 @@
+ // like 9 no genome
+ public void testSamToCompactTrickCase9NoGenome() throws IOException {
+ final String inputFile = "test-data/splicedsamhelper/tricky-spliced-9.sam";
+- final SAMFileReader parser = new SAMFileReader(new FileInputStream(inputFile));
+- parser.setValidationStringency(ValidationStringency.SILENT);
++ final SamInputResource sir = SamInputResource.of(new FileInputStream(inputFile));
++ final SamReaderFactory srf = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT);
++
++ final SamReader parser = srf.open(sir);
+ final SamRecordParser recordParser = new SamRecordParser();
+ for (final SAMRecord samRecord : new SAMRecordIterable(parser.iterator())) {
+
+@@ -84,8 +85,10 @@
+ public void testSamToCompactTrickCase10NoGenome() throws IOException {
+
+ final String inputFile = "test-data/splicedsamhelper/tricky-spliced-10.sam";
+- final SAMFileReader parser = new SAMFileReader(new FileInputStream(inputFile));
+- parser.setValidationStringency(ValidationStringency.SILENT);
++ final SamInputResource sir = SamInputResource.of(new FileInputStream(inputFile));
++ final SamReaderFactory srf = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT);
++
++ final SamReader parser = srf.open(sir);
+ final SamRecordParser recordParser = new SamRecordParser();
+ for (final SAMRecord samRecord : new SAMRecordIterable(parser.iterator())) {
+
+@@ -103,8 +106,10 @@
+ @Test
+ public void testSamToCompactTrickCase11() throws IOException {
+ final String inputFile = "test-data/splicedsamhelper/tricky-spliced-11.sam";
+- final SAMFileReader parser = new SAMFileReader(new FileInputStream(inputFile));
+- parser.setValidationStringency(ValidationStringency.SILENT);
++ final SamInputResource sir = SamInputResource.of(new FileInputStream(inputFile));
++ final SamReaderFactory srf = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT);
++
++ final SamReader parser = srf.open(sir);
+ final SamRecordParser recordParser = new SamRecordParser();
+ for (final SAMRecord samRecord : new SAMRecordIterable(parser.iterator())) {
+
+@@ -121,8 +126,11 @@
+ public void testSamToCompactTrickCase12NoGenome() throws IOException {
+
+ final String inputFile = "test-data/splicedsamhelper/tricky-spliced-12.sam";
+- final SAMFileReader parser = new SAMFileReader(new FileInputStream(inputFile));
+ final SamRecordParser recordParser = new SamRecordParser();
++ final SamInputResource sir = SamInputResource.of(new FileInputStream(inputFile));
++ final SamReaderFactory srf = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT);
++
++ final SamReader parser = srf.open(sir);
+ for (final SAMRecord samRecord : new SAMRecordIterable(parser.iterator())) {
+
+ final GobySamRecord gobySamRecord = recordParser.processRead(samRecord);
+@@ -146,7 +154,10 @@
+ public void testSamToCompactTrickCase13NoGenomeSoftClips() throws IOException {
+
+ final String inputFile = "test-data/splicedsamhelper/tricky-spliced-13.sam";
+- final SAMFileReader parser = new SAMFileReader(new FileInputStream(inputFile));
++ final SamInputResource sir = SamInputResource.of(new FileInputStream(inputFile));
++ final SamReaderFactory srf = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT);
++
++ final SamReader parser = srf.open(sir);
+ final SamRecordParser recordParser = new SamRecordParser();
+ for (final SAMRecord samRecord : new SAMRecordIterable(parser.iterator())) {
+
+@@ -179,8 +190,10 @@
+ public void testSamToCompactTrickCase13SoftClipsWithGenome() throws IOException {
+
+ final String inputFile = "test-data/splicedsamhelper/tricky-spliced-14.sam";
+- final SAMFileReader parser = new SAMFileReader(new FileInputStream(inputFile));
+- parser.setValidationStringency(ValidationStringency.SILENT);
++ final SamInputResource sir = SamInputResource.of(new FileInputStream(inputFile));
++ final SamReaderFactory srf = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT);
++
++ final SamReader parser = srf.open(sir);
+
+ final SamRecordParser recordParser = new SamRecordParser();
+
+@@ -209,7 +222,10 @@
+ public void testSamToCompactTrickCase15NoGenomeThreeSplice() throws IOException {
+
+ final String inputFile = "test-data/splicedsamhelper/tricky-spliced-15.sam";
+- final SAMFileReader parser = new SAMFileReader(new FileInputStream(inputFile));
++ final SamInputResource sir = SamInputResource.of(new FileInputStream(inputFile));
++ final SamReaderFactory srf = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT);
++
++ final SamReader parser = srf.open(sir);
+ final SamRecordParser recordParser = new SamRecordParser();
+ for (final SAMRecord samRecord : new SAMRecordIterable(parser.iterator())) {
+ final GobySamRecord gobySamRecord = recordParser.processRead(samRecord);
+@@ -247,8 +263,10 @@
+ public void testSamToCompactTrickCase16() throws IOException {
+
+ final String inputFile = "test-data/splicedsamhelper/tricky-spliced-16.sam";
+- final SAMFileReader parser = new SAMFileReader(new FileInputStream(inputFile));
+- parser.setValidationStringency(ValidationStringency.SILENT);
++ final SamInputResource sir = SamInputResource.of(new FileInputStream(inputFile));
++ final SamReaderFactory srf = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT);
++
++ final SamReader parser = srf.open(sir);
+ final SamRecordParser recordParser = new SamRecordParser();
+ for (final SAMRecord samRecord : new SAMRecordIterable(parser.iterator())) {
+ final GobySamRecord gobySamRecord = recordParser.processRead(samRecord);
+@@ -337,8 +355,10 @@
+ @Test
+ public void testSamToCompactTrickCase17() throws IOException {
+ final String inputFile = "test-data/splicedsamhelper/tricky-spliced-17.sam";
+- final SAMFileReader parser = new SAMFileReader(new FileInputStream(inputFile));
+- parser.setValidationStringency(ValidationStringency.SILENT);
++ final SamInputResource sir = SamInputResource.of(new FileInputStream(inputFile));
++ final SamReaderFactory srf = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT);
++
++ final SamReader parser = srf.open(sir);
+ final SamRecordParser recordParser = new SamRecordParser();
+ for (final SAMRecord samRecord : new SAMRecordIterable(parser.iterator())) {
+ final GobySamRecord gobySamRecord = recordParser.processRead(samRecord);
+@@ -422,8 +442,10 @@
+ @Test
+ public void testDelNonSplice1() throws IOException {
+ final String inputFile = "test-data/splicedsamhelper/del-nonsplice-1.sam";
+- final SAMFileReader parser = new SAMFileReader(new FileInputStream(inputFile));
+- parser.setValidationStringency(ValidationStringency.SILENT);
++ final SamInputResource sir = SamInputResource.of(new FileInputStream(inputFile));
++ final SamReaderFactory srf = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT);
++
++ final SamReader parser = srf.open(sir);
+ final SamRecordParser recordParser = new SamRecordParser();
+ for (final SAMRecord samRecord : new SAMRecordIterable(parser.iterator())) {
+ final GobySamRecord gobySamRecord = recordParser.processRead(samRecord);
+@@ -453,8 +475,10 @@
+ @Test
+ public void testLeftPadding1() throws IOException {
+ final String inputFile = "test-data/splicedsamhelper/leftpad-nosplice-1.sam";
+- final SAMFileReader parser = new SAMFileReader(new FileInputStream(inputFile));
+- parser.setValidationStringency(ValidationStringency.SILENT);
++ final SamInputResource sir = SamInputResource.of(new FileInputStream(inputFile));
++ final SamReaderFactory srf = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT);
++
++ final SamReader parser = srf.open(sir);
+ final SamRecordParser recordParser = new SamRecordParser();
+ for (final SAMRecord samRecord : new SAMRecordIterable(parser.iterator())) {
+ final GobySamRecord gobySamRecord = recordParser.processRead(samRecord);
+@@ -491,8 +515,10 @@
+ @Test
+ public void testSeqVarReads() throws IOException {
+ final String inputFile = "test-data/seq-var-test/seq-var-reads-gsnap.sam";
+- final SAMFileReader parser = new SAMFileReader(new FileInputStream(inputFile));
+- parser.setValidationStringency(ValidationStringency.SILENT);
++ final SamInputResource sir = SamInputResource.of(new FileInputStream(inputFile));
++ final SamReaderFactory srf = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT);
++
++ final SamReader parser = srf.open(sir);
+ final SamRecordParser recordParser = new SamRecordParser();
+ final PositionToBasesMap<PerQueryAlignmentData> seqvarDataMap = TestIteratedSortedAlignment2.readSeqVarFile(
+ "test-data/seq-var-test/seq-var-reads-gsnap.seqvar");
=====================================
debian/patches/using_jbzip2.patch
=====================================
@@ -0,0 +1,48 @@
+--- a/goby-distribution/src/main/java/org/campagnelab/goby/compression/BZip2ChunkCodec.java
++++ b/goby-distribution/src/main/java/org/campagnelab/goby/compression/BZip2ChunkCodec.java
+@@ -19,8 +19,8 @@
+ package org.campagnelab.goby.compression;
+
+ import com.google.protobuf.Message;
+-import org.apache.tools.bzip2.CBZip2InputStream;
+-import org.apache.tools.bzip2.CBZip2OutputStream;
++import org.itadaki.bzip2.BZip2InputStream;
++import org.itadaki.bzip2.BZip2OutputStream;
+
+ import java.io.*;
+
+@@ -76,7 +76,7 @@
+
+
+ byteBuffer.write(magicSignature);
+- final OutputStream bZip2OutputStream = new CBZip2OutputStream(byteBuffer);
++ final OutputStream bZip2OutputStream = new BZip2OutputStream(byteBuffer);
+ readCollection.writeTo(bZip2OutputStream);
+ bZip2OutputStream.flush();
+ bZip2OutputStream.close();
+@@ -93,7 +93,7 @@
+ }
+
+ // remove the magic numbers:
+- final CBZip2InputStream uncompressStream = new CBZip2InputStream(new ByteArrayInputStream(bytes, 3, bytes.length));
++ final BZip2InputStream uncompressStream = new BZip2InputStream(new ByteArrayInputStream(bytes, 3, bytes.length), false);
+ try {
+ return parser.parse(uncompressStream);
+ } finally {
+--- a/goby-io/pom.xml
++++ b/goby-io/pom.xml
+@@ -451,6 +451,14 @@
+ <version>debian</version>
+ </dependency>
+
++ <dependency>
++ <groupId>org.itadaki</groupId>
++ <artifactId>bzip2</artifactId>
++ <version>0.9.1</version>
++ <scope>system</scope>
++ <systemPath>/usr/share/java/jbzip2-0.9.1.jar</systemPath>
++ </dependency>
++
+ </dependencies>
+
+ </project>
=====================================
debian/rules
=====================================
@@ -16,3 +16,15 @@
# dh_auto_configure
# ln -s ../debian/buildsupport/build.xml buildsupport/build.xml
# ln -s ../debian/buildsupport/gitant buildsupport/gitant
+
+override_dh_auto_clean:
+ dh_auto_clean
+ $(RM) goby-distribution/test-data
+
+override_dh_auto_test:
+ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
+ # Create a symlink to the directory with test data for tests run from the
+ # goby-distribution directory.
+ ln -s ../test-data goby-distribution/test-data
+ dh_auto_test
+endif
View it on GitLab: https://salsa.debian.org/med-team/libgoby-java/-/compare/e007855ad41bb8220531536dc66c3e679a17df41...1e72a3f187f726b1f77b1b27323c42aa69ca70cb
--
View it on GitLab: https://salsa.debian.org/med-team/libgoby-java/-/compare/e007855ad41bb8220531536dc66c3e679a17df41...1e72a3f187f726b1f77b1b27323c42aa69ca70cb
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20201110/989aa813/attachment-0001.html>
More information about the debian-med-commit
mailing list