Skip to content

Commit

Permalink
Merge branch 'feature/#11' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
PoslavskySV committed Sep 1, 2015
2 parents b3fd046 + 64d6ad9 commit 843bcd6
Show file tree
Hide file tree
Showing 8 changed files with 68 additions and 26 deletions.
4 changes: 3 additions & 1 deletion CHANGELOG_CURRENT
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
Added export options -vHitsWithoutScores (same for J and D genes)
Added export options -vHitsWithoutScores (same for J and D genes)

Added compression for .vdjca and .clns files (when specifying additional ".gz" extension: e.g. "mixcr align inut.fastq output.vdjca.gz" etc.)
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,7 @@
import com.milaboratory.mixcr.reference.AlleleResolver;
import com.milaboratory.util.Factory;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.*;

public interface AlignmentsProvider {
OutputPortCloseable<VDJCAlignments> create();
Expand Down Expand Up @@ -65,7 +62,7 @@ public static AlignmentsProvider createProvider(final String file, final AlleleR
public VDJCAlignmentsReader create() {
try {
return new VDJCAlignmentsReader(file, alleleResolver);
} catch (FileNotFoundException e) {
} catch (IOException e) {
throw new RuntimeException(e);
}
}
Expand All @@ -78,7 +75,7 @@ public static AlignmentsProvider createProvider(final File file, final AlleleRes
public VDJCAlignmentsReader create() {
try {
return new VDJCAlignmentsReader(file, alleleResolver);
} catch (FileNotFoundException e) {
} catch (IOException e) {
throw new RuntimeException(e);
}
}
Expand Down
21 changes: 16 additions & 5 deletions src/main/java/com/milaboratory/mixcr/basictypes/CloneSetIO.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,21 @@ public final class CloneSetIO {
static final int MAGIC_LENGTH = 14;
static final byte[] MAGIC_BYTES = MAGIC.getBytes(StandardCharsets.US_ASCII);

public static class CloneSetWriter implements CanReportProgressAndStage {
public static class CloneSetWriter implements CanReportProgressAndStage, Closeable {
final String stage = "Writing clones";
final PrimitivO output;
final CloneSet cloneSet;
final int size;
volatile int current;

public CloneSetWriter(CloneSet cloneSet, String fileName) throws IOException {
this(cloneSet, new File(fileName));
}

public CloneSetWriter(CloneSet cloneSet, File file) throws IOException {
this(cloneSet, IOUtil.createOS(file));
}

public CloneSetWriter(CloneSet cloneSet, OutputStream outputStream) {
this.output = new PrimitivO(outputStream);
this.cloneSet = cloneSet;
Expand Down Expand Up @@ -89,6 +97,11 @@ public void write() {
++current;
}
}

@Override
public void close() {
output.close();
}
}

public static void read(CloneSet cloneSet, File file) throws IOException {
Expand Down Expand Up @@ -119,13 +132,11 @@ public static void write(CloneSet cloneSet, OutputStream outputStream) {
}

public static CloneSet read(String fileName, AlleleResolver alleleResolver) throws IOException {
try (InputStream inputStream = new BufferedInputStream(new FileInputStream(fileName), 32768)) {
return read(inputStream, alleleResolver);
}
return read(new File(fileName), alleleResolver);
}

public static CloneSet read(File file, AlleleResolver alleleResolver) throws IOException {
try (InputStream inputStream = new BufferedInputStream(new FileInputStream(file), 32768)) {
try (InputStream inputStream = IOUtil.createIS(file)) {
return read(inputStream, alleleResolver);
}
}
Expand Down
30 changes: 30 additions & 0 deletions src/main/java/com/milaboratory/mixcr/basictypes/IOUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
*/
package com.milaboratory.mixcr.basictypes;

import com.milaboratory.core.io.CompressionType;
import com.milaboratory.core.sequence.NucleotideSequence;
import com.milaboratory.mixcr.reference.Allele;
import com.milaboratory.mixcr.reference.AlleleId;
Expand All @@ -36,6 +37,7 @@
import com.milaboratory.primitivio.PrimitivI;
import com.milaboratory.primitivio.PrimitivO;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

Expand Down Expand Up @@ -93,4 +95,32 @@ public static List<Allele> readAlleleReferences(PrimitivI input, AlleleResolver

return alleles;
}

public static InputStream createIS(String file) throws IOException {
return createIS(CompressionType.detectCompressionType(file), new FileInputStream(file));
}

public static InputStream createIS(File file) throws IOException {
return createIS(CompressionType.detectCompressionType(file), new FileInputStream(file));
}

public static InputStream createIS(CompressionType ct, InputStream is) throws IOException {
if (ct == CompressionType.None)
return new BufferedInputStream(is, 65536);
else return ct.createInputStream(is, 65536);
}

public static OutputStream createOS(String file) throws IOException {
return createOS(CompressionType.detectCompressionType(file), new FileOutputStream(file));
}

public static OutputStream createOS(File file) throws IOException {
return createOS(CompressionType.detectCompressionType(file), new FileOutputStream(file));
}

public static OutputStream createOS(CompressionType ct, OutputStream os) throws IOException {
if (ct == CompressionType.None)
return new BufferedOutputStream(os, 65536);
else return ct.createOutputStream(os, 65536);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
package com.milaboratory.mixcr.basictypes;

import cc.redberry.pipe.OutputPortCloseable;
import com.milaboratory.core.io.CompressionType;
import com.milaboratory.mixcr.reference.Allele;
import com.milaboratory.mixcr.reference.AlleleResolver;
import com.milaboratory.mixcr.vdjaligners.VDJCAlignerParameters;
Expand All @@ -53,12 +54,12 @@ public class VDJCAlignmentsReader implements OutputPortCloseable<VDJCAlignments>
final long size;
final CountingInputStream countingInputStream;

public VDJCAlignmentsReader(String fileName, AlleleResolver alleleResolver) throws FileNotFoundException {
public VDJCAlignmentsReader(String fileName, AlleleResolver alleleResolver) throws IOException {
this(new File(fileName), alleleResolver);
}

public VDJCAlignmentsReader(File file, AlleleResolver alleleResolver) throws FileNotFoundException {
this(new BufferedInputStream(new FileInputStream(file), 65536), alleleResolver, file.length());
public VDJCAlignmentsReader(File file, AlleleResolver alleleResolver) throws IOException {
this(IOUtil.createIS(file), alleleResolver, file.length());
}

public VDJCAlignmentsReader(InputStream input, AlleleResolver alleleResolver) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,16 @@
*/
package com.milaboratory.mixcr.basictypes;

import com.milaboratory.core.io.CompressionType;
import com.milaboratory.mixcr.reference.Allele;
import com.milaboratory.mixcr.vdjaligners.VDJCAligner;
import com.milaboratory.mixcr.vdjaligners.VDJCAlignerParameters;
import com.milaboratory.primitivio.PrimitivO;

import java.io.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import java.util.List;

Expand All @@ -45,12 +49,12 @@ public final class VDJCAlignmentsWriter implements AutoCloseable {
long numberOfProcessedReads = -1;
boolean header = false, closed = false;

public VDJCAlignmentsWriter(String fileName) throws FileNotFoundException {
this(new BufferedOutputStream(new FileOutputStream(fileName), 65536));
public VDJCAlignmentsWriter(String fileName) throws IOException {
this(new File(fileName));
}

public VDJCAlignmentsWriter(File file) throws FileNotFoundException {
this(new BufferedOutputStream(new FileOutputStream(file), 65536));
public VDJCAlignmentsWriter(File file) throws IOException {
this(IOUtil.createOS(file));
}

public VDJCAlignmentsWriter(OutputStream output) {
Expand Down
6 changes: 1 addition & 5 deletions src/main/java/com/milaboratory/mixcr/cli/ActionAssemble.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,6 @@
import com.milaboratory.primitivio.PipeWriter;
import com.milaboratory.util.SmartProgressReporter;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
Expand Down Expand Up @@ -86,8 +83,7 @@ public void go(ActionHelper helper) throws Exception {
assembler, actionParameters.threads);
SmartProgressReporter.startProgressReport(assemblerRunner);
assemblerRunner.run();
try (OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(actionParameters.getOutputFileName()), 65536)) {
CloneSetIO.CloneSetWriter writer = new CloneSetIO.CloneSetWriter(assemblerRunner.getCloneSet(), outputStream);
try (CloneSetIO.CloneSetWriter writer = new CloneSetIO.CloneSetWriter(assemblerRunner.getCloneSet(), actionParameters.getOutputFileName())) {
SmartProgressReporter.startProgressReport(writer);
writer.write();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import com.milaboratory.mixcr.basictypes.Clone;
import com.milaboratory.mixcr.basictypes.CloneSet;
import com.milaboratory.mixcr.basictypes.CloneSetIO;
import com.milaboratory.mixcr.basictypes.IOUtil;
import com.milaboratory.mixcr.export.InfoWriter;
import com.milaboratory.mixcr.reference.LociLibraryManager;
import com.milaboratory.util.CanReportProgressAndStage;
Expand All @@ -48,7 +49,7 @@ public ActionExportClones() {

@Override
public void go0() throws Exception {
try (InputStream inputStream = new BufferedInputStream(new FileInputStream(parameters.inputFile), 65536);
try (InputStream inputStream = IOUtil.createIS(parameters.inputFile);
InfoWriter<Clone> writer = new InfoWriter<>(parameters.outputFile)) {
CloneSet set = CloneSetIO.read(inputStream, LociLibraryManager.getDefault());
writer.attachInfoProviders((List) parameters.exporters);
Expand Down

0 comments on commit 843bcd6

Please sign in to comment.