From 1f5a4f87ebd7ff91afbe44c68a5d3f2fcb17d371 Mon Sep 17 00:00:00 2001 From: Dmitry Bolotin Date: Sun, 18 Nov 2018 18:49:52 +0300 Subject: [PATCH 01/19] Next development cycle v3.0.4 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b9c611f37..400029336 100644 --- a/pom.xml +++ b/pom.xml @@ -33,7 +33,7 @@ com.milaboratory mixcr - 3.0.3 + 3.0.4-SNAPSHOT jar MiXCR From ee5919d0dd15137d2d27fdc62f06228ee0188d26 Mon Sep 17 00:00:00 2001 From: Alexander230 Date: Fri, 30 Nov 2018 18:29:08 +0300 Subject: [PATCH 02/19] Use common picocli-CLI classes from milib. (#462) * Use common CLI classes from milib. * Milib updates. * Bugfixes in picocli classes in milib. * Bugfixes with serialization and input validation. * Serialization compatibility bugfixes. * Targeted approach, compatibility tests. WIP. Requires discussion. * Some serialization fixes. * Serialization and backward compatibility fixes. * Backward compatibility test binaries updated. * Upgrade for milib and repseqio submodules. * Additional upgrades of submodules. --- milib | 2 +- pom.xml | 2 +- repseqio | 2 +- .../mixcr/basictypes/ActionConfiguration.java | 40 ---- .../mixcr/basictypes/ClnAReader.java | 35 ++- .../mixcr/basictypes/ClnAWriter.java | 8 +- .../mixcr/basictypes/ClnsReader.java | 13 +- .../mixcr/basictypes/ClnsWriter.java | 8 +- .../mixcr/basictypes/CloneSetIO.java | 8 +- .../milaboratory/mixcr/basictypes/IOUtil.java | 107 +++------ .../basictypes/PipelineConfiguration.java | 207 ------------------ .../PipelineConfigurationReader.java | 57 ----- .../PipelineConfigurationReaderMiXCR.java | 80 +++++++ .../PipelineConfigurationWriter.java | 6 - .../basictypes/VDJCAlignmentsReader.java | 11 +- .../basictypes/VDJCAlignmentsWriter.java | 7 +- .../basictypes/VDJCAlignmentsWriterI.java | 2 + .../milaboratory/mixcr/cli/ABaseCommand.java | 41 ---- .../com/milaboratory/mixcr/cli/ACommand.java | 83 ------- .../milaboratory/mixcr/cli/ACommandMiXCR.java | 17 ++ .../mixcr/cli/ACommandSimpleExport.java | 27 --- .../mixcr/cli/ACommandSimpleExportMiXCR.java | 17 ++ .../mixcr/cli/ACommandWithOutput.java | 34 --- .../mixcr/cli/ACommandWithOutputMiXCR.java | 15 ++ .../mixcr/cli/ACommandWithSmartOverwrite.java | 103 --------- .../cli/ACommandWithSmartOverwriteMiXCR.java | 18 ++ ...mandWithSmartOverwriteWithSingleInput.java | 47 ---- ...ithSmartOverwriteWithSingleInputMiXCR.java | 29 +++ .../milaboratory/mixcr/cli/CommandAlign.java | 19 +- .../mixcr/cli/CommandAlignmentsDiff.java | 2 +- .../mixcr/cli/CommandAlignmentsStats.java | 2 +- .../mixcr/cli/CommandAnalyze.java | 7 +- .../mixcr/cli/CommandAssemble.java | 15 +- .../mixcr/cli/CommandAssembleContigs.java | 14 +- .../cli/CommandAssemblePartialAlignments.java | 15 +- .../mixcr/cli/CommandClonesDiff.java | 2 +- .../milaboratory/mixcr/cli/CommandExport.java | 11 +- .../cli/CommandExportAlignmentsPretty.java | 2 +- .../mixcr/cli/CommandExportClonesPretty.java | 2 +- .../mixcr/cli/CommandExportClonesReads.java | 2 +- .../mixcr/cli/CommandExportReads.java | 2 +- .../milaboratory/mixcr/cli/CommandExtend.java | 21 +- .../mixcr/cli/CommandFilterAlignments.java | 14 +- .../milaboratory/mixcr/cli/CommandInfo.java | 19 +- .../mixcr/cli/CommandListLibraries.java | 2 +- .../milaboratory/mixcr/cli/CommandMain.java | 8 +- .../mixcr/cli/CommandMergeAlignments.java | 22 +- .../mixcr/cli/CommandPipelineInfo.java | 11 +- .../milaboratory/mixcr/cli/CommandSlice.java | 32 +-- .../mixcr/cli/CommandSortAlignments.java | 13 +- .../mixcr/cli/CommandVersionInfo.java | 2 +- .../java/com/milaboratory/mixcr/cli/Main.java | 1 + .../milaboratory/mixcr/cli/MiXCRCommand.java | 16 ++ .../cli/SerializerCompatibilityUtil.java | 104 +++++++++ .../mixcr/cli/ValidationException.java | 16 -- .../PartialAlignmentsAssemblerParameters.java | 2 - .../mixcr/util/MiXCRVersionInfo.java | 107 +++++---- .../mixcr/basictypes/ClnAReaderTest.java | 9 +- .../tests/BackwardCompatibilityTests.java | 16 +- .../mixcr/util/MiXCRVersionInfoTest.java | 2 +- .../backward_compatibility/3.0.3/test.clna | Bin 0 -> 43846 bytes .../backward_compatibility/3.0.3/test.clns | Bin 0 -> 36423 bytes .../backward_compatibility/3.0.3/test.vdjca | Bin 0 -> 37615 bytes .../backward_compatibility/3.0.4/test.clna | Bin 0 -> 44097 bytes .../backward_compatibility/3.0.4/test.clns | Bin 0 -> 36674 bytes .../backward_compatibility/3.0.4/test.vdjca | Bin 0 -> 37757 bytes 66 files changed, 630 insertions(+), 908 deletions(-) delete mode 100644 src/main/java/com/milaboratory/mixcr/basictypes/ActionConfiguration.java delete mode 100644 src/main/java/com/milaboratory/mixcr/basictypes/PipelineConfiguration.java delete mode 100644 src/main/java/com/milaboratory/mixcr/basictypes/PipelineConfigurationReader.java create mode 100644 src/main/java/com/milaboratory/mixcr/basictypes/PipelineConfigurationReaderMiXCR.java delete mode 100644 src/main/java/com/milaboratory/mixcr/basictypes/PipelineConfigurationWriter.java delete mode 100644 src/main/java/com/milaboratory/mixcr/cli/ABaseCommand.java delete mode 100644 src/main/java/com/milaboratory/mixcr/cli/ACommand.java create mode 100644 src/main/java/com/milaboratory/mixcr/cli/ACommandMiXCR.java delete mode 100644 src/main/java/com/milaboratory/mixcr/cli/ACommandSimpleExport.java create mode 100644 src/main/java/com/milaboratory/mixcr/cli/ACommandSimpleExportMiXCR.java delete mode 100644 src/main/java/com/milaboratory/mixcr/cli/ACommandWithOutput.java create mode 100644 src/main/java/com/milaboratory/mixcr/cli/ACommandWithOutputMiXCR.java delete mode 100644 src/main/java/com/milaboratory/mixcr/cli/ACommandWithSmartOverwrite.java create mode 100644 src/main/java/com/milaboratory/mixcr/cli/ACommandWithSmartOverwriteMiXCR.java delete mode 100644 src/main/java/com/milaboratory/mixcr/cli/ACommandWithSmartOverwriteWithSingleInput.java create mode 100644 src/main/java/com/milaboratory/mixcr/cli/ACommandWithSmartOverwriteWithSingleInputMiXCR.java create mode 100644 src/main/java/com/milaboratory/mixcr/cli/MiXCRCommand.java create mode 100644 src/main/java/com/milaboratory/mixcr/cli/SerializerCompatibilityUtil.java delete mode 100644 src/main/java/com/milaboratory/mixcr/cli/ValidationException.java create mode 100644 src/test/resources/backward_compatibility/3.0.3/test.clna create mode 100644 src/test/resources/backward_compatibility/3.0.3/test.clns create mode 100644 src/test/resources/backward_compatibility/3.0.3/test.vdjca create mode 100644 src/test/resources/backward_compatibility/3.0.4/test.clna create mode 100644 src/test/resources/backward_compatibility/3.0.4/test.clns create mode 100644 src/test/resources/backward_compatibility/3.0.4/test.vdjca diff --git a/milib b/milib index 6b321c4e0..d6221957b 160000 --- a/milib +++ b/milib @@ -1 +1 @@ -Subproject commit 6b321c4e0a24e24e532ea4b4517394e7a33cb4d3 +Subproject commit d6221957b45a6c57d74744177feef5b68c86829a diff --git a/pom.xml b/pom.xml index 400029336..0363355e3 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,7 @@ UTF-8 - 1.9 + 1.10-SNAPSHOT diff --git a/repseqio b/repseqio index 6352d08f2..bf6cd3bc9 160000 --- a/repseqio +++ b/repseqio @@ -1 +1 @@ -Subproject commit 6352d08f260cf036e35d026cacd4870c9c482ae9 +Subproject commit bf6cd3bc93bb1c3a6d9796587d93c60a8de9dbe6 diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/ActionConfiguration.java b/src/main/java/com/milaboratory/mixcr/basictypes/ActionConfiguration.java deleted file mode 100644 index 595262ed6..000000000 --- a/src/main/java/com/milaboratory/mixcr/basictypes/ActionConfiguration.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.milaboratory.mixcr.basictypes; - -import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.JsonSubTypes; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.milaboratory.mixcr.cli.*; -import com.milaboratory.primitivio.annotations.Serializable; - -/** - * A data structure which holds the whole set of parameters which affect specific MiXCR action. - */ -@JsonAutoDetect( - fieldVisibility = JsonAutoDetect.Visibility.ANY, - isGetterVisibility = JsonAutoDetect.Visibility.NONE, - getterVisibility = JsonAutoDetect.Visibility.NONE) -@JsonTypeInfo( - use = JsonTypeInfo.Id.NAME, - include = JsonTypeInfo.As.PROPERTY, - property = "type") -@JsonSubTypes({ - @JsonSubTypes.Type(value = CommandAlign.AlignConfiguration.class, name = "align-configuration"), - @JsonSubTypes.Type(value = CommandAssemble.AssembleConfiguration.class, name = "assemble-configuration"), - @JsonSubTypes.Type(value = CommandAssembleContigs.AssembleContigsConfiguration.class, name = "assemble-contig-configuration"), - @JsonSubTypes.Type(value = CommandAssemblePartialAlignments.AssemblePartialConfiguration.class, name = "assemble-partial-configuration"), - @JsonSubTypes.Type(value = CommandExtend.ExtendConfiguration.class, name = "extend-configuration"), - @JsonSubTypes.Type(value = CommandMergeAlignments.MergeConfiguration.class, name = "merge-configuration"), - @JsonSubTypes.Type(value = CommandFilterAlignments.FilterConfiguration.class, name = "filter-configuration"), - @JsonSubTypes.Type(value = CommandSortAlignments.SortConfiguration.class, name = "sort-configuration"), - @JsonSubTypes.Type(value = CommandSlice.SliceConfiguration.class, name = "slice-configuration") -}) -@Serializable(asJson = true) -public interface ActionConfiguration> { - String actionName(); - - /** Action version string */ - default String versionId() { return ""; } - - /** Compatible with other configuration */ - default boolean compatibleWith(Conf other) { return equals(other); } -} \ No newline at end of file diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/ClnAReader.java b/src/main/java/com/milaboratory/mixcr/basictypes/ClnAReader.java index d3423acb2..f78649db3 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/ClnAReader.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/ClnAReader.java @@ -31,6 +31,7 @@ import cc.redberry.pipe.OutputPort; import cc.redberry.pipe.OutputPortCloseable; import cc.redberry.pipe.util.CountLimitingOutputPort; +import com.milaboratory.cli.PipelineConfiguration; import com.milaboratory.mixcr.assembler.CloneAssemblerParameters; import com.milaboratory.mixcr.basictypes.ClnsReader.GT2GFAdapter; import com.milaboratory.mixcr.vdjaligners.VDJCAlignerParameters; @@ -58,12 +59,12 @@ import java.util.List; import java.util.concurrent.atomic.AtomicLong; +import static com.milaboratory.mixcr.cli.SerializerCompatibilityUtil.add_v3_0_3_CustomSerializers; + /** * Reader of CLNA file format. */ -public final class ClnAReader implements - PipelineConfigurationReader, - AutoCloseable { +public final class ClnAReader extends PipelineConfigurationReaderMiXCR implements AutoCloseable { public static final int DEFAULT_CHUNK_SIZE = 262144; final int chunkSize; /** @@ -122,10 +123,6 @@ public ClnAReader(Path path, VDJCLibraryRegistry libraryRegistry, int chunkSize) buf.get(magicBytes); String magicString = new String(magicBytes, StandardCharsets.US_ASCII); - if (!magicString.equals(ClnAWriter.MAGIC)) - throw new IllegalArgumentException("Wrong file type. Magic = " + magicString + - ", expected = " + ClnAWriter.MAGIC); - // Reading number of clones this.numberOfClones = buf.getInt(); @@ -143,6 +140,17 @@ public ClnAReader(Path path, VDJCLibraryRegistry libraryRegistry, int chunkSize) // Reading index data input = new PrimitivI(new InputDataStream(indexBegin, fSize - 8)); + switch (magicString) { + case ClnAWriter.MAGIC_V3: + add_v3_0_3_CustomSerializers(input); + break; + case ClnAWriter.MAGIC: + break; + default: + throw new IllegalArgumentException("Wrong file type. Magic = " + magicString + + ", expected = " + ClnAWriter.MAGIC); + } + this.index = new long[numberOfClones + 2]; this.counts = new long[numberOfClones + 2]; long previousValue = 0; @@ -155,7 +163,18 @@ public ClnAReader(Path path, VDJCLibraryRegistry libraryRegistry, int chunkSize) // Reading gene features - input = new PrimitivI(new InputDataStream(ClnAWriter.MAGIC_LENGTH + 4, firstClonePosition)); + input = new PrimitivI(new InputDataStream(ClnAWriter.MAGIC_LENGTH + 4, + firstClonePosition)); + switch (magicString) { + case ClnAWriter.MAGIC_V3: + add_v3_0_3_CustomSerializers(input); + break; + case ClnAWriter.MAGIC: + break; + default: + throw new IllegalStateException(); + } + this.versionInfo = input.readUTF(); this.configuration = input.readObject(PipelineConfiguration.class); this.alignerParameters = input.readObject(VDJCAlignerParameters.class); diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/ClnAWriter.java b/src/main/java/com/milaboratory/mixcr/basictypes/ClnAWriter.java index 5b45a016b..ec6f8c593 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/ClnAWriter.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/ClnAWriter.java @@ -32,6 +32,9 @@ import cc.redberry.pipe.OutputPort; import cc.redberry.pipe.OutputPortCloseable; import cc.redberry.pipe.util.CountingOutputPort; +import com.milaboratory.cli.AppVersionInfo; +import com.milaboratory.cli.PipelineConfiguration; +import com.milaboratory.cli.PipelineConfigurationWriter; import com.milaboratory.mixcr.util.MiXCRVersionInfo; import com.milaboratory.primitivio.PipeDataInputReader; import com.milaboratory.primitivio.PrimitivI; @@ -59,7 +62,8 @@ public final class ClnAWriter implements PipelineConfigurationWriter, AutoCloseable, CanReportProgressAndStage { static final String MAGIC_V3 = "MiXCR.CLNA.V03"; - static final String MAGIC = MAGIC_V3; + static final String MAGIC_V4 = "MiXCR.CLNA.V04"; + static final String MAGIC = MAGIC_V4; static final int MAGIC_LENGTH = MAGIC.length(); //14 /** @@ -120,7 +124,7 @@ public synchronized void writeClones(CloneSet cloneSet) { // Writing version information output.writeUTF(MiXCRVersionInfo.get() - .getVersionString(MiXCRVersionInfo.OutputType.ToFile)); + .getVersionString(AppVersionInfo.OutputType.ToFile)); // Writing full pipeline configuration output.writeObject(configuration); diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/ClnsReader.java b/src/main/java/com/milaboratory/mixcr/basictypes/ClnsReader.java index d4542f3c6..886c06939 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/ClnsReader.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/ClnsReader.java @@ -1,5 +1,6 @@ package com.milaboratory.mixcr.basictypes; +import com.milaboratory.cli.PipelineConfiguration; import com.milaboratory.mixcr.assembler.CloneAssemblerParameters; import com.milaboratory.mixcr.vdjaligners.VDJCAlignerParameters; import com.milaboratory.primitivio.PrimitivI; @@ -12,18 +13,17 @@ import java.util.EnumMap; import java.util.List; -import static com.milaboratory.mixcr.basictypes.ClnsWriter.MAGIC; -import static com.milaboratory.mixcr.basictypes.ClnsWriter.MAGIC_LENGTH; +import static com.milaboratory.mixcr.basictypes.ClnsWriter.*; +import static com.milaboratory.mixcr.cli.SerializerCompatibilityUtil.add_v3_0_3_CustomSerializers; /** * */ -public class ClnsReader implements PipelineConfigurationReader, - AutoCloseable { +public class ClnsReader extends PipelineConfigurationReaderMiXCR implements AutoCloseable { private final PrimitivI input; private final VDJCLibraryRegistry libraryRegistry; - public ClnsReader(PrimitivI input, VDJCLibraryRegistry libraryRegistry) { + private ClnsReader(PrimitivI input, VDJCLibraryRegistry libraryRegistry) { this.input = input; this.libraryRegistry = libraryRegistry; } @@ -61,6 +61,9 @@ private synchronized void init() { // SerializersManager serializersManager = input.getSerializersManager(); switch (magicString) { + case MAGIC_V7: + add_v3_0_3_CustomSerializers(input); + break; case MAGIC: break; default: diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/ClnsWriter.java b/src/main/java/com/milaboratory/mixcr/basictypes/ClnsWriter.java index 1d2cbd192..1da7ca743 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/ClnsWriter.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/ClnsWriter.java @@ -1,5 +1,8 @@ package com.milaboratory.mixcr.basictypes; +import com.milaboratory.cli.AppVersionInfo; +import com.milaboratory.cli.PipelineConfiguration; +import com.milaboratory.cli.PipelineConfigurationWriter; import com.milaboratory.mixcr.util.MiXCRVersionInfo; import com.milaboratory.primitivio.PrimitivO; import com.milaboratory.util.CanReportProgressAndStage; @@ -19,7 +22,8 @@ public class ClnsWriter implements PipelineConfigurationWriter, CanReportProgressAndStage, Closeable { static final String MAGIC_V7 = "MiXCR.CLNS.V07"; - static final String MAGIC = MAGIC_V7; + static final String MAGIC_V8 = "MiXCR.CLNS.V08"; + static final String MAGIC = MAGIC_V8; static final int MAGIC_LENGTH = 14; static final byte[] MAGIC_BYTES = MAGIC.getBytes(StandardCharsets.US_ASCII); @@ -71,7 +75,7 @@ public void write() { // Writing version information output.writeUTF( MiXCRVersionInfo.get().getVersionString( - MiXCRVersionInfo.OutputType.ToFile)); + AppVersionInfo.OutputType.ToFile)); // Writing analysis meta-information output.writeObject(configuration); diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/CloneSetIO.java b/src/main/java/com/milaboratory/mixcr/basictypes/CloneSetIO.java index 9d8dd54d5..f7265d509 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/CloneSetIO.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/CloneSetIO.java @@ -36,6 +36,8 @@ import java.io.InputStream; import java.util.Objects; +import static com.milaboratory.mixcr.basictypes.IOUtil.*; + public final class CloneSetIO { public static CloneSet read(String file) throws IOException { return read(file, VDJCLibraryRegistry.getDefault()); @@ -50,12 +52,12 @@ public static CloneSet read(String file, VDJCLibraryRegistry libraryRegistry) th } public static CloneSet read(File file, VDJCLibraryRegistry libraryRegistry) throws IOException { - switch (Objects.requireNonNull(IOUtil.getFileInfo(file)).fileType) { - case ClnA: + switch (Objects.requireNonNull(fileInfoExtractorInstance.getFileInfo(file)).fileType) { + case MAGIC_CLNA: try (ClnAReader r = new ClnAReader(file.toPath(), libraryRegistry)) { return r.readCloneSet(); } - case Clns: + case MAGIC_CLNS: try (ClnsReader r = new ClnsReader(file, libraryRegistry)) { return r.getCloneSet(); } diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/IOUtil.java b/src/main/java/com/milaboratory/mixcr/basictypes/IOUtil.java index aa463697c..922033631 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/IOUtil.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/IOUtil.java @@ -29,6 +29,8 @@ */ package com.milaboratory.mixcr.basictypes; +import com.milaboratory.cli.BinaryFileInfo; +import com.milaboratory.cli.BinaryFileInfoExtractor; import com.milaboratory.core.io.CompressionType; import com.milaboratory.core.sequence.NucleotideSequence; import com.milaboratory.primitivio.PrimitivI; @@ -48,15 +50,18 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Objects; public class IOUtil { public static final int BEGIN_MAGIC_LENGTH = 14; public static final int BEGIN_MAGIC_LENGTH_SHORT = 10; + public static final String MAGIC_VDJC = "MiXCR.VDJC"; + public static final String MAGIC_CLNS = "MiXCR.CLNS"; + public static final String MAGIC_CLNA = "MiXCR.CLNA"; public static final String END_MAGIC = "#MiXCR.File.End#"; private static final byte[] END_MAGIC_BYTES = END_MAGIC.getBytes(StandardCharsets.US_ASCII); public static final int END_MAGIC_LENGTH = END_MAGIC_BYTES.length; + public static final MiXCRFileInfoExtractor fileInfoExtractorInstance = new MiXCRFileInfoExtractor(); public static byte[] getEndMagicBytes() { return END_MAGIC_BYTES.clone(); @@ -161,91 +166,47 @@ public static OutputStream createOS(CompressionType ct, OutputStream os) throws else return ct.createOutputStream(os, 65536); } - public static MiXCRFileInfo getFileInfo(String fileName) { - return getFileInfo(new File(fileName)); - } - - public static MiXCRFileInfo getFileInfo(File file) { - try { - Path path = file.toPath(); + public static final class MiXCRFileInfoExtractor implements BinaryFileInfoExtractor { + private MiXCRFileInfoExtractor() {} - if (!Files.isRegularFile(path)) - return null; + @Override + public BinaryFileInfo getFileInfo(File file) { + try { + Path path = file.toPath(); - try (FileChannel channel = FileChannel.open(path, StandardOpenOption.READ)) { - if (channel.size() < BEGIN_MAGIC_LENGTH + END_MAGIC_LENGTH) + if (!Files.isRegularFile(path)) return null; - byte[] beginMagic = new byte[BEGIN_MAGIC_LENGTH]; - channel.read(ByteBuffer.wrap(beginMagic)); - String magicFull = new String(beginMagic, StandardCharsets.US_ASCII); - String magicShort = new String(beginMagic, 0, BEGIN_MAGIC_LENGTH_SHORT, StandardCharsets.US_ASCII); - MiXCRFileType type; - switch (magicShort) { - case "MiXCR.VDJC": - type = MiXCRFileType.VDJCA; - break; - case "MiXCR.CLNS": - type = MiXCRFileType.Clns; - break; - case "MiXCR.CLNA": - type = MiXCRFileType.ClnA; - break; - default: + try (FileChannel channel = FileChannel.open(path, StandardOpenOption.READ)) { + if (channel.size() < BEGIN_MAGIC_LENGTH + END_MAGIC_LENGTH) return null; - } - byte[] endMagic = new byte[END_MAGIC_LENGTH]; - channel.read(ByteBuffer.wrap(endMagic), channel.size() - END_MAGIC_LENGTH); - return new MiXCRFileInfo(type, magicFull, Arrays.equals(endMagic, getEndMagicBytes())); + byte[] beginMagic = new byte[BEGIN_MAGIC_LENGTH]; + channel.read(ByteBuffer.wrap(beginMagic)); + String magicFull = new String(beginMagic, StandardCharsets.US_ASCII); + String magicShort = new String(beginMagic, 0, BEGIN_MAGIC_LENGTH_SHORT, + StandardCharsets.US_ASCII); + + if (!magicShort.equals(MAGIC_VDJC) && !magicShort.equals(MAGIC_CLNS) + && !magicShort.equals(MAGIC_CLNA)) + return null; + + byte[] endMagic = new byte[END_MAGIC_LENGTH]; + channel.read(ByteBuffer.wrap(endMagic), channel.size() - END_MAGIC_LENGTH); + return new MiXCRFileInfo(magicShort, magicFull, Arrays.equals(endMagic, getEndMagicBytes())); + } + } catch (IOException e) { + throw new RuntimeException(e); } - } catch (IOException e) { - throw new RuntimeException(e); } } - public enum MiXCRFileType { - Clns, ClnA, VDJCA - } - /** * Represent MiXCR binary file information (type, magic bytes, and whether it passes integrity test) */ - public static final class MiXCRFileInfo { - /** - * MiXCR file type, or null if not a MiXCR file format. - */ - public final MiXCRFileType fileType; - - /** - * Full magic bytes string. - */ - public final String fullMagic; - - /** - * True if file integrity check succeeded. The command generated the file was not prematurely interrupted. - */ - public final boolean valid; - - public MiXCRFileInfo(MiXCRFileType fileType, String fullMagic, boolean valid) { - this.fileType = fileType; - this.fullMagic = fullMagic; - this.valid = valid; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof MiXCRFileInfo)) return false; - MiXCRFileInfo that = (MiXCRFileInfo) o; - return valid == that.valid && - fileType == that.fileType && - Objects.equals(fullMagic, that.fullMagic); - } - - @Override - public int hashCode() { - return Objects.hash(fileType, fullMagic, valid); + public static final class MiXCRFileInfo extends BinaryFileInfo { + public MiXCRFileInfo(String fileType, String fullMagic, boolean valid) { + super(fileType, fullMagic, valid); } } } diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/PipelineConfiguration.java b/src/main/java/com/milaboratory/mixcr/basictypes/PipelineConfiguration.java deleted file mode 100644 index 334275928..000000000 --- a/src/main/java/com/milaboratory/mixcr/basictypes/PipelineConfiguration.java +++ /dev/null @@ -1,207 +0,0 @@ -package com.milaboratory.mixcr.basictypes; - -import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.milaboratory.mixcr.util.MiXCRVersionInfo; -import com.milaboratory.primitivio.PrimitivI; -import com.milaboratory.primitivio.PrimitivO; -import com.milaboratory.primitivio.Serializer; -import com.milaboratory.primitivio.annotations.Serializable; -import com.milaboratory.util.LightFileDescriptor; - -import java.nio.file.Paths; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; -import java.util.stream.Stream; - -/** - * This class stores the sequence of analysis steps (that is their unique configurations) applied to the raw fastq file - * to obtain vdjca/clna/clns file: two files with the same pipelines must be identical. - */ -@Serializable(by = PipelineConfiguration.IO.class) // use binary serializer by default (better compression) -@JsonAutoDetect( // enable json format for output purposes - fieldVisibility = JsonAutoDetect.Visibility.ANY, - isGetterVisibility = JsonAutoDetect.Visibility.NONE, - getterVisibility = JsonAutoDetect.Visibility.NONE) -public final class PipelineConfiguration { - /** - * A sequence of analysis steps performed on the input file - */ - public final PipelineStep[] pipelineSteps; - - /** - * @param pipelineSteps pipeline steps - */ - @JsonCreator - public PipelineConfiguration(@JsonProperty("pipelineSteps") PipelineStep[] pipelineSteps) { - this.pipelineSteps = pipelineSteps; - } - - /** Returns the last written action */ - public ActionConfiguration lastConfiguration() { - return pipelineSteps[pipelineSteps.length - 1].configuration; - } - - /** Whether configurations are fully compatible */ - public boolean compatibleWith(PipelineConfiguration oth) { - if (oth == null) - return false; - if (pipelineSteps.length != oth.pipelineSteps.length) - return false; - for (int i = 0; i < pipelineSteps.length; ++i) - if (!pipelineSteps[i].compatibleWith(oth.pipelineSteps[i])) - return false; - return true; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - PipelineConfiguration that = (PipelineConfiguration) o; - return Arrays.equals(pipelineSteps, that.pipelineSteps); - } - - @Override - public int hashCode() { - return Arrays.hashCode(pipelineSteps); - } - - /** Appends a new pipeline step */ - public static PipelineConfiguration - appendStep(PipelineConfiguration history, - List inputFiles, - ActionConfiguration configuration) { - - MiXCRVersionInfo versionString = MiXCRVersionInfo.get(); - - LightFileDescriptor[] inputDescriptors = inputFiles - .stream() - .map(f -> LightFileDescriptor.calculate(Paths.get(f))) - .toArray(LightFileDescriptor[]::new); - - return new PipelineConfiguration( - Stream.concat( - Stream.of(history.pipelineSteps), - Stream.of(new PipelineStep(versionString, inputDescriptors, configuration)) - ).toArray(PipelineStep[]::new)); - } - - /** Creates initial history */ - public static PipelineConfiguration - mkInitial(List inputFiles, - ActionConfiguration configuration) { - MiXCRVersionInfo versionString = MiXCRVersionInfo.get(); - LightFileDescriptor[] inputDescriptors = inputFiles.stream().map(f -> LightFileDescriptor.calculate(Paths.get(f))).toArray(LightFileDescriptor[]::new); - return new PipelineConfiguration( - new PipelineStep[]{new PipelineStep(versionString, inputDescriptors, configuration)}); - } - - /** A single step in the analysis pipeline */ - @Serializable(by = PipelineStep.IO.class) - @JsonAutoDetect( - fieldVisibility = JsonAutoDetect.Visibility.ANY, - isGetterVisibility = JsonAutoDetect.Visibility.NONE, - getterVisibility = JsonAutoDetect.Visibility.NONE) - public static final class PipelineStep { - /** - * Version of MiXCR used - */ - public final MiXCRVersionInfo versionOfMiXCR; - /** - * Hash sum of the input file (not exactly fastq, it may be e.g. vdjca input file for the assemblePartial step) - */ - public final LightFileDescriptor[] inputFilesDescriptors; - /** - * Step configuration - */ - public final ActionConfiguration configuration; - - @JsonCreator - public PipelineStep( - @JsonProperty("versionOfMiXCR") MiXCRVersionInfo versionOfMiXCR, - @JsonProperty("inputFilesDescriptors") LightFileDescriptor[] inputFilesDescriptors, - @JsonProperty("configuration") ActionConfiguration configuration) { - this.versionOfMiXCR = versionOfMiXCR; - this.inputFilesDescriptors = inputFilesDescriptors; - this.configuration = configuration; - } - - /** Compatible with other configuration */ - public boolean compatibleWith(PipelineStep other) { - return other != null - && Arrays.equals(inputFilesDescriptors, other.inputFilesDescriptors) - && configuration.getClass().equals(other.configuration.getClass()) - && configuration.compatibleWith(other.configuration); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - PipelineStep that = (PipelineStep) o; - return Objects.equals(versionOfMiXCR, that.versionOfMiXCR) && - Arrays.equals(inputFilesDescriptors, that.inputFilesDescriptors) && - Objects.equals(configuration, that.configuration); - } - - @Override - public int hashCode() { - int result = Objects.hash(versionOfMiXCR, configuration); - result = 31 * result + Arrays.hashCode(inputFilesDescriptors); - return result; - } - - public static final class IO implements Serializer { - @Override - public void write(PrimitivO output, PipelineStep object) { - output.writeObject(object.versionOfMiXCR); - output.writeObject(object.inputFilesDescriptors); - output.writeObject(object.configuration); - } - - @Override - public PipelineStep read(PrimitivI input) { - MiXCRVersionInfo versionOfMiXCR = input.readObject(MiXCRVersionInfo.class); - LightFileDescriptor[] inputFilesDescriptors = input.readObject(LightFileDescriptor[].class); - ActionConfiguration configuration = input.readObject(ActionConfiguration.class); - return new PipelineStep(versionOfMiXCR, inputFilesDescriptors, configuration); - } - - @Override - public boolean isReference() { - return true; - } - - @Override - public boolean handlesReference() { - return false; - } - } - } - - public static final class IO implements Serializer { - @Override - public void write(PrimitivO output, PipelineConfiguration object) { - output.writeObject(object.pipelineSteps); - } - - @Override - public PipelineConfiguration read(PrimitivI input) { - PipelineStep[] pipelineSteps = input.readObject(PipelineStep[].class); - return new PipelineConfiguration(pipelineSteps); - } - - @Override - public boolean isReference() { - return true; - } - - @Override - public boolean handlesReference() { - return false; - } - } -} diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/PipelineConfigurationReader.java b/src/main/java/com/milaboratory/mixcr/basictypes/PipelineConfigurationReader.java deleted file mode 100644 index 00428db48..000000000 --- a/src/main/java/com/milaboratory/mixcr/basictypes/PipelineConfigurationReader.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.milaboratory.mixcr.basictypes; - -import io.repseq.core.VDJCLibraryRegistry; - -/** - * - */ -public interface PipelineConfigurationReader { - PipelineConfiguration getPipelineConfiguration(); - - /** - * Read pipeline configuration from file or return null - */ - static PipelineConfiguration fromFileOrNull(String fileName, IOUtil.MiXCRFileInfo fileInfo) { - if (fileInfo == null) - return null; - if (!fileInfo.valid) - return null; - try { - return fromFile(fileName, fileInfo); - } catch (Throwable ignored) {} - return null; - } - - static PipelineConfiguration fromFile(String fileName) { - IOUtil.MiXCRFileInfo fileInfo = IOUtil.getFileInfo(fileName); - if (!fileInfo.valid) - throw new RuntimeException("File " + fileName + " corrupted."); - return fromFile(fileName, fileInfo); - } - - /** - * Read pipeline configuration from file or throw exception - */ - static PipelineConfiguration fromFile(String fileName, IOUtil.MiXCRFileInfo fileInfo) { - try { - switch (fileInfo.fileType) { - case VDJCA: - try (VDJCAlignmentsReader reader = new VDJCAlignmentsReader(fileName)) { - return reader.getPipelineConfiguration(); - } - case Clns: - try (ClnsReader reader = new ClnsReader(fileName, VDJCLibraryRegistry.getDefault())) { - return reader.getPipelineConfiguration(); - } - case ClnA: - try (ClnAReader reader = new ClnAReader(fileName, VDJCLibraryRegistry.getDefault())) { - return reader.getPipelineConfiguration(); - } - default: - throw new RuntimeException("Not a MiXCR file"); - } - } catch (Throwable t) { - throw new RuntimeException(t); - } - } -} diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/PipelineConfigurationReaderMiXCR.java b/src/main/java/com/milaboratory/mixcr/basictypes/PipelineConfigurationReaderMiXCR.java new file mode 100644 index 000000000..63a051f13 --- /dev/null +++ b/src/main/java/com/milaboratory/mixcr/basictypes/PipelineConfigurationReaderMiXCR.java @@ -0,0 +1,80 @@ +package com.milaboratory.mixcr.basictypes; + +import com.milaboratory.cli.BinaryFileInfo; +import com.milaboratory.cli.PipelineConfiguration; +import com.milaboratory.cli.PipelineConfigurationReader; +import io.repseq.core.VDJCLibraryRegistry; + +import static com.milaboratory.mixcr.basictypes.IOUtil.*; + +/** + * + */ +public class PipelineConfigurationReaderMiXCR implements PipelineConfigurationReader { + public static final PipelineConfigurationReaderMiXCR pipelineConfigurationReaderInstance = + new PipelineConfigurationReaderMiXCR(); + + protected PipelineConfigurationReaderMiXCR() {} + + @Override + public PipelineConfiguration fromFileOrNull(String fileName, BinaryFileInfo fileInfo) { + return sFromFileOrNull(fileName, fileInfo); + } + + @Override + public PipelineConfiguration fromFile(String fileName) { + return sFromFile(fileName); + } + + @Override + public PipelineConfiguration fromFile(String fileName, BinaryFileInfo fileInfo) { + return sFromFile(fileName, fileInfo); + } + + /** + * Read pipeline configuration from file or return null + */ + public static PipelineConfiguration sFromFileOrNull(String fileName, BinaryFileInfo fileInfo) { + if (fileInfo == null) + return null; + if (!fileInfo.valid) + return null; + try { + return sFromFile(fileName, fileInfo); + } catch (Throwable ignored) {} + return null; + } + + public static PipelineConfiguration sFromFile(String fileName) { + BinaryFileInfo fileInfo = fileInfoExtractorInstance.getFileInfo(fileName); + if (!fileInfo.valid) + throw new RuntimeException("File " + fileName + " corrupted."); + return sFromFile(fileName, fileInfo); + } + + /** + * Read pipeline configuration from file or throw exception + */ + public static PipelineConfiguration sFromFile(String fileName, BinaryFileInfo fileInfo) { + try { + switch (fileInfo.fileType) { + case MAGIC_VDJC: + try (VDJCAlignmentsReader reader = new VDJCAlignmentsReader(fileName)) { + return reader.getPipelineConfiguration(); + } + case MAGIC_CLNS: + try (ClnsReader reader = new ClnsReader(fileName, VDJCLibraryRegistry.getDefault())) { + return reader.getPipelineConfiguration(); + } + case MAGIC_CLNA: + try (ClnAReader reader = new ClnAReader(fileName, VDJCLibraryRegistry.getDefault())) { + return reader.getPipelineConfiguration(); + } + default: + throw new RuntimeException("Not a MiXCR file"); + } + } catch (Throwable t) { + throw new RuntimeException(t); + } + } +} diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/PipelineConfigurationWriter.java b/src/main/java/com/milaboratory/mixcr/basictypes/PipelineConfigurationWriter.java deleted file mode 100644 index 33fec5fdd..000000000 --- a/src/main/java/com/milaboratory/mixcr/basictypes/PipelineConfigurationWriter.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.milaboratory.mixcr.basictypes; - -/** - * - */ -public interface PipelineConfigurationWriter {} diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsReader.java b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsReader.java index 023e75f3f..c3fffedfb 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsReader.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsReader.java @@ -30,6 +30,7 @@ package com.milaboratory.mixcr.basictypes; import cc.redberry.pipe.OutputPortCloseable; +import com.milaboratory.cli.PipelineConfiguration; import com.milaboratory.mixcr.vdjaligners.VDJCAlignerParameters; import com.milaboratory.primitivio.PrimitivI; import com.milaboratory.util.CanReportProgress; @@ -46,9 +47,9 @@ import java.util.Objects; import static com.milaboratory.mixcr.basictypes.VDJCAlignmentsWriter.*; +import static com.milaboratory.mixcr.cli.SerializerCompatibilityUtil.add_v3_0_3_CustomSerializers; -public final class VDJCAlignmentsReader implements - PipelineConfigurationReader, +public final class VDJCAlignmentsReader extends PipelineConfigurationReaderMiXCR implements OutputPortCloseable, CanReportProgress { private static final int DEFAULT_BUFFER_SIZE = 1048576; // 1 MB @@ -136,10 +137,14 @@ void init(Map geneFeatureRefs) { // SerializersManager serializersManager = input.getSerializersManager(); switch (magicString) { + case MAGIC_V13: + add_v3_0_3_CustomSerializers(input); + break; case MAGIC: break; default: - throw new RuntimeException("Unsupported file format; .vdjca file of version " + new String(magic) + " while you are running MiXCR " + MAGIC); + throw new RuntimeException("Unsupported file format; .vdjca file of version " + new String(magic) + + " while you are running MiXCR " + MAGIC); } versionInfo = input.readUTF(); diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsWriter.java b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsWriter.java index aec7c13c6..d4c23f35b 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsWriter.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsWriter.java @@ -29,6 +29,8 @@ */ package com.milaboratory.mixcr.basictypes; +import com.milaboratory.cli.AppVersionInfo; +import com.milaboratory.cli.PipelineConfiguration; import com.milaboratory.mixcr.util.MiXCRVersionInfo; import com.milaboratory.mixcr.vdjaligners.VDJCAligner; import com.milaboratory.mixcr.vdjaligners.VDJCAlignerParameters; @@ -49,7 +51,8 @@ public final class VDJCAlignmentsWriter implements VDJCAlignmentsWriterI { public static final int DEFAULT_ENCODER_THREADS = 3; static final String MAGIC_V13 = "MiXCR.VDJC.V13"; - static final String MAGIC = MAGIC_V13; + static final String MAGIC_V14 = "MiXCR.VDJC.V14"; + static final String MAGIC = MAGIC_V14; static final int MAGIC_LENGTH = 14; static final byte[] MAGIC_BYTES = MAGIC.getBytes(StandardCharsets.US_ASCII); @@ -157,7 +160,7 @@ public void header(VDJCAlignerParameters parameters, List genes, // Writing version information output.writeUTF( MiXCRVersionInfo.get().getVersionString( - MiXCRVersionInfo.OutputType.ToFile)); + AppVersionInfo.OutputType.ToFile)); // Writing parameters output.writeObject(parameters); diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsWriterI.java b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsWriterI.java index ec0f84bd4..3a5d008d4 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsWriterI.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsWriterI.java @@ -29,6 +29,8 @@ */ package com.milaboratory.mixcr.basictypes; +import com.milaboratory.cli.PipelineConfiguration; +import com.milaboratory.cli.PipelineConfigurationWriter; import com.milaboratory.mixcr.vdjaligners.VDJCAlignerParameters; import io.repseq.core.VDJCGene; diff --git a/src/main/java/com/milaboratory/mixcr/cli/ABaseCommand.java b/src/main/java/com/milaboratory/mixcr/cli/ABaseCommand.java deleted file mode 100644 index b7d760248..000000000 --- a/src/main/java/com/milaboratory/mixcr/cli/ABaseCommand.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.milaboratory.mixcr.cli; - -import picocli.CommandLine; -import picocli.CommandLine.Model.CommandSpec; -import picocli.CommandLine.Option; -import picocli.CommandLine.Spec; - -import java.util.stream.Collectors; - -/** - * - */ -public class ABaseCommand { - @Spec - public CommandSpec spec; // injected by picocli - - @Option(names = {"-h", "--help"}, - hidden = true) - public void requestHelp(boolean b) { - throwValidationException("ERROR: -h / --help is not supported: use `mixcr help [command]` for command usage."); - } - - /** Throws validation exception */ - public void throwValidationException(String message, boolean printHelp) { - throw new ValidationException(spec.commandLine(), message, printHelp); - } - - /** Throws validation exception */ - public void throwValidationException(String message) { - throwValidationException(message, true); - } - - /** Throws execution exception */ - public void throwExecutionException(String message) { - throw new CommandLine.ExecutionException(spec.commandLine(), message); - } - - public String getCommandLineArguments() { - return spec.commandLine().getParseResult().originalArgs().stream().collect(Collectors.joining(" ")); - } -} diff --git a/src/main/java/com/milaboratory/mixcr/cli/ACommand.java b/src/main/java/com/milaboratory/mixcr/cli/ACommand.java deleted file mode 100644 index 070bffb3a..000000000 --- a/src/main/java/com/milaboratory/mixcr/cli/ACommand.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.milaboratory.mixcr.cli; - -import com.milaboratory.mixcr.basictypes.IOUtil; -import picocli.CommandLine.Option; - -import java.io.File; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -/** - * - */ -public abstract class ACommand extends ABaseCommand implements Runnable { - /** queue of warning messages */ - private List warningsQueue = new ArrayList<>(); - /** flag that signals we are entered the run method */ - private boolean running; - - @Option(names = {"-nw", "--no-warnings"}, - description = "suppress all warning messages") - public boolean quiet = false; - - @Option(description = "Verbose warning messages.", - names = {"--verbose"}) - public boolean verbose = false; - - /** Warning message */ - public void warn(String message) { - if (quiet) - return; - - if (!running) - // add to a queue - warningsQueue.add(message); - else - // print immediately - printWarn(message); - } - - private void printWarn(String message) { - if (!quiet) - System.err.println(message); - } - - /** list of intput files */ - protected List getInputFiles() {return Collections.emptyList();} - - /** list of output files produces as result */ - protected List getOutputFiles() {return Collections.emptyList();} - - /** Validate injected parameters and options */ - public void validate() { - for (String in : getInputFiles()) { - if (!new File(in).exists()) - throwValidationException("ERROR: input file \"" + in + "\" does not exist.", false); - IOUtil.MiXCRFileInfo info = IOUtil.getFileInfo(in); - if (info != null && !info.valid) - throwValidationException("ERROR: input file \"" + in + "\" is corrupted.", false); - } - } - - @Override - public final void run() { - validate(); - if (!quiet) - for (String m : warningsQueue) - printWarn(m); - - - running = true; - try { - run0(); - } catch (RuntimeException e) { - throw e; - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** Do actual job */ - public abstract void run0() throws Exception; -} diff --git a/src/main/java/com/milaboratory/mixcr/cli/ACommandMiXCR.java b/src/main/java/com/milaboratory/mixcr/cli/ACommandMiXCR.java new file mode 100644 index 000000000..4054d90d8 --- /dev/null +++ b/src/main/java/com/milaboratory/mixcr/cli/ACommandMiXCR.java @@ -0,0 +1,17 @@ +package com.milaboratory.mixcr.cli; + +import com.milaboratory.cli.ACommand; + +/** + * + */ +public abstract class ACommandMiXCR extends ACommand implements MiXCRCommand { + public ACommandMiXCR() { + super("mixcr"); + } + + @Override + public void validateInfo(String inputFile) { + MiXCRCommand.super.validateInfo(inputFile); + } +} diff --git a/src/main/java/com/milaboratory/mixcr/cli/ACommandSimpleExport.java b/src/main/java/com/milaboratory/mixcr/cli/ACommandSimpleExport.java deleted file mode 100644 index f1733ced0..000000000 --- a/src/main/java/com/milaboratory/mixcr/cli/ACommandSimpleExport.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.milaboratory.mixcr.cli; - -import picocli.CommandLine.Parameters; - -import java.util.Collections; -import java.util.List; - -/** - * - */ -public abstract class ACommandSimpleExport extends ACommandWithOutput { - @Parameters(index = "0", description = "input_file") - public String in; - - @Parameters(index = "1", description = "[output_file]", arity = "0..1") - public String out = null; - - @Override - public List getInputFiles() { - return Collections.singletonList(in); - } - - @Override - protected List getOutputFiles() { - return out == null ? Collections.emptyList() : Collections.singletonList(out); - } -} diff --git a/src/main/java/com/milaboratory/mixcr/cli/ACommandSimpleExportMiXCR.java b/src/main/java/com/milaboratory/mixcr/cli/ACommandSimpleExportMiXCR.java new file mode 100644 index 000000000..118c770ca --- /dev/null +++ b/src/main/java/com/milaboratory/mixcr/cli/ACommandSimpleExportMiXCR.java @@ -0,0 +1,17 @@ +package com.milaboratory.mixcr.cli; + +import com.milaboratory.cli.ACommandSimpleExport; + +/** + * + */ +public abstract class ACommandSimpleExportMiXCR extends ACommandSimpleExport implements MiXCRCommand { + public ACommandSimpleExportMiXCR() { + super("mixcr"); + } + + @Override + public void validateInfo(String inputFile) { + MiXCRCommand.super.validateInfo(inputFile); + } +} diff --git a/src/main/java/com/milaboratory/mixcr/cli/ACommandWithOutput.java b/src/main/java/com/milaboratory/mixcr/cli/ACommandWithOutput.java deleted file mode 100644 index 2efb2a365..000000000 --- a/src/main/java/com/milaboratory/mixcr/cli/ACommandWithOutput.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.milaboratory.mixcr.cli; - -import picocli.CommandLine.Option; - -import java.io.File; - -/** A command which produce output files */ -public abstract class ACommandWithOutput extends ACommand { - @Option(names = {"-f", "--force-overwrite"}, - description = "Force overwrite of output file(s).") - public boolean forceOverwrite = false; - - @Option(names = {"--force"}, hidden = true) - public void setForce(boolean value) { - if (value) { - warn("--force option is deprecated; use --force-overwrite instead."); - forceOverwrite = true; - } - } - - @Override - public void validate() { - super.validate(); - for (String f : getOutputFiles()) - if (new File(f).exists()) - handleExistenceOfOutputFile(f); - } - - /** Specifies behaviour in the case with output exists (default is to throw exception) */ - public void handleExistenceOfOutputFile(String outFileName) { - if (!forceOverwrite) - throwValidationException("File \"" + outFileName + "\" already exists. Use -f / --force-overwrite option to overwrite it.", false); - } -} diff --git a/src/main/java/com/milaboratory/mixcr/cli/ACommandWithOutputMiXCR.java b/src/main/java/com/milaboratory/mixcr/cli/ACommandWithOutputMiXCR.java new file mode 100644 index 000000000..a1369da1e --- /dev/null +++ b/src/main/java/com/milaboratory/mixcr/cli/ACommandWithOutputMiXCR.java @@ -0,0 +1,15 @@ +package com.milaboratory.mixcr.cli; + +import com.milaboratory.cli.ACommandWithOutput; + +/** A command which produce output files */ +public abstract class ACommandWithOutputMiXCR extends ACommandWithOutput implements MiXCRCommand { + public ACommandWithOutputMiXCR() { + super("mixcr"); + } + + @Override + public void validateInfo(String inputFile) { + MiXCRCommand.super.validateInfo(inputFile); + } +} diff --git a/src/main/java/com/milaboratory/mixcr/cli/ACommandWithSmartOverwrite.java b/src/main/java/com/milaboratory/mixcr/cli/ACommandWithSmartOverwrite.java deleted file mode 100644 index bc21f9b93..000000000 --- a/src/main/java/com/milaboratory/mixcr/cli/ACommandWithSmartOverwrite.java +++ /dev/null @@ -1,103 +0,0 @@ -package com.milaboratory.mixcr.cli; - -import com.milaboratory.mixcr.basictypes.ActionConfiguration; -import com.milaboratory.mixcr.basictypes.IOUtil; -import com.milaboratory.mixcr.basictypes.PipelineConfiguration; -import com.milaboratory.mixcr.basictypes.PipelineConfigurationReader; -import picocli.CommandLine; -import picocli.CommandLine.Option; - -/** A command which allows resuming execution */ -public abstract class ACommandWithSmartOverwrite extends ACommandWithOutput { - @Option(names = "--overwrite-if-required", - description = "Overwrite output file if it is corrupted or if it was generated from different input file " + - "or with different parameters. -f / --force-overwrite overrides this option.") - public boolean overwriteIfRequired = false; - - /** returns the unique run configuration */ - public abstract ActionConfiguration getConfiguration(); - - /** returns the full pipeline configuration that will be written to the output file */ - public abstract PipelineConfiguration getFullPipelineConfiguration(); - - public final String getOutput() { - return getOutputFiles().get(0); - } - - private boolean outputFileInfoInitialized = false; - private IOUtil.MiXCRFileInfo outputFileInfo = null; - - public IOUtil.MiXCRFileInfo getOutputFileInfo() { - if (getOutputFiles().size() != 1) throw new RuntimeException(); - if (!outputFileInfoInitialized) { - outputFileInfo = IOUtil.getFileInfo(getOutput()); - outputFileInfoInitialized = true; - } - return outputFileInfo; - } - - @Override - public void validate() { - super.validate(); - if (getOutputFiles().size() != 1) - throwValidationException("single output file expected"); - } - - /** whether to skip execution or not */ - private boolean skipExecution = false; - - @Override - public void handleExistenceOfOutputFile(String outFileName) { - if (forceOverwrite) - // rewrite anyway - return; - - // analysis supposed to be performed now - PipelineConfiguration expectedPipeline = getFullPipelineConfiguration(); - // history written in existing file - PipelineConfiguration actualPipeline = PipelineConfigurationReader.fromFileOrNull(outFileName, getOutputFileInfo()); - - if (actualPipeline != null - && expectedPipeline != null - && actualPipeline.compatibleWith(expectedPipeline)) { - - String exists = "File " + outFileName + " already exists and contains correct " + - "binary data obtained from the specified input file. "; - - if (!overwriteIfRequired) - throwValidationException(exists + - "Use --overwrite-if-required option to skip execution (output file will remain unchanged) or " + - "use -f / --force-overwrite option to force overwrite it.", false); - else { - warn("Skipping " + expectedPipeline.lastConfiguration().actionName() + ". " + exists); - - // print warns in case different MiXCR versions - for (int i = 0; i < expectedPipeline.pipelineSteps.length; i++) { - ActionConfiguration - prev = actualPipeline.pipelineSteps[i].configuration, - curr = expectedPipeline.pipelineSteps[i].configuration; - if (!prev.versionId().equals(curr.versionId())) - warn(String.format("WARNING (--overwrite-if-required): %s was performed with previous MiXCR version (%s). " + - "Consider re-running analysis using --force-overwrite option.", - prev.actionName(), - actualPipeline.pipelineSteps[i].versionOfMiXCR)); - } - - skipExecution = true; // nothing to do in run0, just exit - return; - } - } - if (overwriteIfRequired) - return; - super.handleExistenceOfOutputFile(outFileName); - } - - @Override - public final void run0() throws Exception { - if (skipExecution) - return; - run1(); - } - - public abstract void run1() throws Exception; -} diff --git a/src/main/java/com/milaboratory/mixcr/cli/ACommandWithSmartOverwriteMiXCR.java b/src/main/java/com/milaboratory/mixcr/cli/ACommandWithSmartOverwriteMiXCR.java new file mode 100644 index 000000000..06870e966 --- /dev/null +++ b/src/main/java/com/milaboratory/mixcr/cli/ACommandWithSmartOverwriteMiXCR.java @@ -0,0 +1,18 @@ +package com.milaboratory.mixcr.cli; + +import com.milaboratory.cli.ACommandWithSmartOverwrite; + +import static com.milaboratory.mixcr.basictypes.IOUtil.fileInfoExtractorInstance; +import static com.milaboratory.mixcr.basictypes.PipelineConfigurationReaderMiXCR.pipelineConfigurationReaderInstance; + +/** A command which allows resuming execution */ +public abstract class ACommandWithSmartOverwriteMiXCR extends ACommandWithSmartOverwrite implements MiXCRCommand { + public ACommandWithSmartOverwriteMiXCR() { + super("mixcr", fileInfoExtractorInstance, pipelineConfigurationReaderInstance); + } + + @Override + public void validateInfo(String inputFile) { + MiXCRCommand.super.validateInfo(inputFile); + } +} diff --git a/src/main/java/com/milaboratory/mixcr/cli/ACommandWithSmartOverwriteWithSingleInput.java b/src/main/java/com/milaboratory/mixcr/cli/ACommandWithSmartOverwriteWithSingleInput.java deleted file mode 100644 index de2dbb339..000000000 --- a/src/main/java/com/milaboratory/mixcr/cli/ACommandWithSmartOverwriteWithSingleInput.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.milaboratory.mixcr.cli; - -import com.milaboratory.mixcr.basictypes.IOUtil; -import com.milaboratory.mixcr.basictypes.PipelineConfiguration; -import com.milaboratory.mixcr.basictypes.PipelineConfigurationReader; -import picocli.CommandLine.Parameters; - -import java.util.Collections; -import java.util.List; - -/** - * - */ -public abstract class ACommandWithSmartOverwriteWithSingleInput extends ACommandWithSmartOverwrite { - @Parameters(index = "0", description = "input file") - public String in; - - @Parameters(index = "1", description = "output file") - public String out; - - @Override - public final List getOutputFiles() { - return Collections.singletonList(out); - } - - @Override - public final List getInputFiles() { - return Collections.singletonList(in); - } - - private boolean inputFileInfoInitialized = false; - private IOUtil.MiXCRFileInfo inputFileInfo = null; - - public IOUtil.MiXCRFileInfo getInputFileInfo() { - if (getInputFiles().size() != 1) throw new RuntimeException(); - if (!inputFileInfoInitialized) { - inputFileInfo = IOUtil.getFileInfo(in); - inputFileInfoInitialized = true; - } - return inputFileInfo; - } - - @Override - public PipelineConfiguration getFullPipelineConfiguration() { - return PipelineConfiguration.appendStep(PipelineConfigurationReader.fromFile(in, getInputFileInfo()), getInputFiles(), getConfiguration()); - } -} diff --git a/src/main/java/com/milaboratory/mixcr/cli/ACommandWithSmartOverwriteWithSingleInputMiXCR.java b/src/main/java/com/milaboratory/mixcr/cli/ACommandWithSmartOverwriteWithSingleInputMiXCR.java new file mode 100644 index 000000000..4b9c92524 --- /dev/null +++ b/src/main/java/com/milaboratory/mixcr/cli/ACommandWithSmartOverwriteWithSingleInputMiXCR.java @@ -0,0 +1,29 @@ +package com.milaboratory.mixcr.cli; + +import com.milaboratory.cli.ACommandWithSmartOverwriteWithSingleInput; +import com.milaboratory.cli.PipelineConfiguration; +import com.milaboratory.mixcr.util.MiXCRVersionInfo; + +import static com.milaboratory.mixcr.basictypes.IOUtil.fileInfoExtractorInstance; +import static com.milaboratory.mixcr.basictypes.PipelineConfigurationReaderMiXCR.pipelineConfigurationReaderInstance; + +/** + * + */ +public abstract class ACommandWithSmartOverwriteWithSingleInputMiXCR extends ACommandWithSmartOverwriteWithSingleInput + implements MiXCRCommand { + public ACommandWithSmartOverwriteWithSingleInputMiXCR() { + super("mixcr", fileInfoExtractorInstance, pipelineConfigurationReaderInstance); + } + + @Override + public void validateInfo(String inputFile) { + MiXCRCommand.super.validateInfo(inputFile); + } + + @Override + public PipelineConfiguration getFullPipelineConfiguration() { + return PipelineConfiguration.appendStep(pipelineConfigurationReader.fromFile(in, getInputFileInfo()), + getInputFiles(), getConfiguration(), MiXCRVersionInfo.getAppVersionInfo()); + } +} diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandAlign.java b/src/main/java/com/milaboratory/mixcr/cli/CommandAlign.java index 161e74fe4..8691de276 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandAlign.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandAlign.java @@ -8,8 +8,9 @@ import cc.redberry.pipe.util.CountLimitingOutputPort; import cc.redberry.pipe.util.OrderedOutputPort; import cc.redberry.pipe.util.StatusReporter; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.*; +import com.milaboratory.cli.ActionConfiguration; +import com.milaboratory.cli.PipelineConfiguration; import com.milaboratory.core.PairedEndReadsLayout; import com.milaboratory.core.Target; import com.milaboratory.core.io.sequence.SequenceRead; @@ -23,6 +24,7 @@ import com.milaboratory.core.io.sequence.fastq.SingleFastqWriter; import com.milaboratory.core.sequence.NucleotideSequence; import com.milaboratory.mixcr.basictypes.*; +import com.milaboratory.mixcr.util.MiXCRVersionInfo; import com.milaboratory.mixcr.vdjaligners.VDJCAligner; import com.milaboratory.mixcr.vdjaligners.VDJCAlignerParameters; import com.milaboratory.mixcr.vdjaligners.VDJCAlignmentResult; @@ -48,7 +50,7 @@ sortOptions = false, separator = " ", description = "Builds alignments with V,D,J and C genes for input sequencing reads.") -public class CommandAlign extends ACommandWithSmartOverwrite { +public class CommandAlign extends ACommandWithSmartOverwriteMiXCR { static final String ALIGN_COMMAND_NAME = "align"; @Parameters(arity = "2..3", descriptionKey = "file", @@ -221,7 +223,8 @@ public SequenceReaderCloseable createReader() throws IOE @Override public PipelineConfiguration getFullPipelineConfiguration() { - return PipelineConfiguration.mkInitial(getInputFiles(), getConfiguration()); + return PipelineConfiguration.mkInitial(getInputFiles(), getConfiguration(), + MiXCRVersionInfo.getAppVersionInfo()); } @Override @@ -234,6 +237,14 @@ public ActionConfiguration getConfiguration() { } /** Set of parameters that completely (uniquely) determine align action */ + @JsonAutoDetect( + fieldVisibility = JsonAutoDetect.Visibility.ANY, + isGetterVisibility = JsonAutoDetect.Visibility.NONE, + getterVisibility = JsonAutoDetect.Visibility.NONE) + @JsonTypeInfo( + use = JsonTypeInfo.Id.CLASS, + include = JsonTypeInfo.As.PROPERTY, + property = "type") public static class AlignConfiguration implements ActionConfiguration { /** * Aligner parameters diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandAlignmentsDiff.java b/src/main/java/com/milaboratory/mixcr/cli/CommandAlignmentsDiff.java index f7f0502d7..7594884d7 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandAlignmentsDiff.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandAlignmentsDiff.java @@ -22,7 +22,7 @@ sortOptions = false, separator = " ", description = "Calculates the difference between two .vdjca files.") -public class CommandAlignmentsDiff extends ACommandWithOutput { +public class CommandAlignmentsDiff extends ACommandWithOutputMiXCR { @Parameters(description = "input_file1", index = "0") public String in1; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandAlignmentsStats.java b/src/main/java/com/milaboratory/mixcr/cli/CommandAlignmentsStats.java index 0f66f9c6f..a328e8d2b 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandAlignmentsStats.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandAlignmentsStats.java @@ -27,7 +27,7 @@ hidden = true, separator = " ", description = "Alignments statistics.") -public class CommandAlignmentsStats extends ACommand { +public class CommandAlignmentsStats extends ACommandMiXCR { @Parameters(index = "0", description = "input_file.vdjca") public String in; @Parameters(index = "1", description = "[output.txt]", arity = "0..1") diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandAnalyze.java b/src/main/java/com/milaboratory/mixcr/cli/CommandAnalyze.java index 9cbee44f4..0477b852f 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandAnalyze.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandAnalyze.java @@ -1,5 +1,6 @@ package com.milaboratory.mixcr.cli; +import com.milaboratory.cli.ACommandWithOutput; import com.milaboratory.mixcr.assembler.CloneAssemblerParameters; import com.milaboratory.mixcr.vdjaligners.VDJCAlignerParameters; import io.repseq.core.Chains; @@ -15,7 +16,7 @@ import java.util.*; import java.util.stream.Collectors; -public abstract class CommandAnalyze extends ACommandWithOutput { +public abstract class CommandAnalyze extends ACommandWithOutputMiXCR { private static T parse0(Class clazz, String v) { T[] ts = clazz.getEnumConstants(); for (T t : ts) @@ -258,8 +259,8 @@ public String getReport() { private T inheritOptionsAndValidate(T parameters) { if (forceOverwrite) parameters.forceOverwrite = true; - if (parameters instanceof ACommandWithSmartOverwrite) - ((ACommandWithSmartOverwrite) parameters).overwriteIfRequired = true; + if (parameters instanceof ACommandWithSmartOverwriteMiXCR) + ((ACommandWithSmartOverwriteMiXCR) parameters).overwriteIfRequired = true; parameters.quiet = true; parameters.validate(); diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandAssemble.java b/src/main/java/com/milaboratory/mixcr/cli/CommandAssemble.java index de31297be..49ecb1ad4 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandAssemble.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandAssemble.java @@ -1,8 +1,9 @@ package com.milaboratory.mixcr.cli; import cc.redberry.pipe.util.StatusReporter; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.*; +import com.milaboratory.cli.ActionConfiguration; +import com.milaboratory.cli.PipelineConfiguration; import com.milaboratory.mixcr.assembler.*; import com.milaboratory.mixcr.basictypes.*; import com.milaboratory.mixcr.vdjaligners.VDJCAlignerParameters; @@ -24,7 +25,7 @@ sortOptions = true, separator = " ", description = "Assemble clones.") -public class CommandAssemble extends ACommandWithSmartOverwriteWithSingleInput { +public class CommandAssemble extends ACommandWithSmartOverwriteWithSingleInputMiXCR { static final String ASSEMBLE_COMMAND_NAME = "assemble"; @Option(description = "Clone assembling parameters", @@ -217,6 +218,14 @@ public void run1() throws Exception { } } + @JsonAutoDetect( + fieldVisibility = JsonAutoDetect.Visibility.ANY, + isGetterVisibility = JsonAutoDetect.Visibility.NONE, + getterVisibility = JsonAutoDetect.Visibility.NONE) + @JsonTypeInfo( + use = JsonTypeInfo.Id.CLASS, + include = JsonTypeInfo.As.PROPERTY, + property = "type") public static class AssembleConfiguration implements ActionConfiguration { public final CloneAssemblerParameters assemblerParameters; public final boolean clna; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandAssembleContigs.java b/src/main/java/com/milaboratory/mixcr/cli/CommandAssembleContigs.java index c7154e14a..d58c4d2cc 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandAssembleContigs.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandAssembleContigs.java @@ -3,8 +3,8 @@ import cc.redberry.pipe.CUtils; import cc.redberry.pipe.OutputPort; import cc.redberry.pipe.blocks.ParallelProcessor; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.*; +import com.milaboratory.cli.ActionConfiguration; import com.milaboratory.mixcr.assembler.CloneAssemblerParameters; import com.milaboratory.mixcr.assembler.CloneFactory; import com.milaboratory.mixcr.assembler.fullseq.FullSeqAssembler; @@ -30,7 +30,7 @@ sortOptions = true, separator = " ", description = "Assemble full sequences.") -public class CommandAssembleContigs extends ACommandWithSmartOverwriteWithSingleInput { +public class CommandAssembleContigs extends ACommandWithSmartOverwriteWithSingleInputMiXCR { static final String ASSEMBLE_CONTIGS_COMMAND_NAME = "assembleContigs"; public int threads = Runtime.getRuntime().availableProcessors(); @@ -178,6 +178,14 @@ public void run1() throws Exception { Util.writeJsonReport(jsonReport, reportWrapper); } + @JsonAutoDetect( + fieldVisibility = JsonAutoDetect.Visibility.ANY, + isGetterVisibility = JsonAutoDetect.Visibility.NONE, + getterVisibility = JsonAutoDetect.Visibility.NONE) + @JsonTypeInfo( + use = JsonTypeInfo.Id.CLASS, + include = JsonTypeInfo.As.PROPERTY, + property = "type") public static class AssembleContigsConfiguration implements ActionConfiguration { public final FullSeqAssemblerParameters assemblerParameters; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandAssemblePartialAlignments.java b/src/main/java/com/milaboratory/mixcr/cli/CommandAssemblePartialAlignments.java index 470dff1fa..996c25e2f 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandAssemblePartialAlignments.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandAssemblePartialAlignments.java @@ -1,8 +1,7 @@ package com.milaboratory.mixcr.cli; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.milaboratory.mixcr.basictypes.ActionConfiguration; +import com.fasterxml.jackson.annotation.*; +import com.milaboratory.cli.ActionConfiguration; import com.milaboratory.mixcr.basictypes.VDJCAlignmentsReader; import com.milaboratory.mixcr.basictypes.VDJCAlignmentsWriter; import com.milaboratory.mixcr.partialassembler.PartialAlignmentsAssembler; @@ -21,7 +20,7 @@ sortOptions = true, separator = " ", description = "Assembles partially aligned reads into longer sequences.") -public class CommandAssemblePartialAlignments extends ACommandWithSmartOverwriteWithSingleInput { +public class CommandAssemblePartialAlignments extends ACommandWithSmartOverwriteWithSingleInputMiXCR { static final String ASSEMBLE_PARTIAL_COMMAND_NAME = "assemblePartial"; @Option(names = "-O", description = "Overrides default parameter values.") @@ -122,6 +121,14 @@ public void run1() throws Exception { } } + @JsonAutoDetect( + fieldVisibility = JsonAutoDetect.Visibility.ANY, + isGetterVisibility = JsonAutoDetect.Visibility.NONE, + getterVisibility = JsonAutoDetect.Visibility.NONE) + @JsonTypeInfo( + use = JsonTypeInfo.Id.CLASS, + include = JsonTypeInfo.As.PROPERTY, + property = "type") public static class AssemblePartialConfiguration implements ActionConfiguration { public final PartialAlignmentsAssemblerParameters parameters; public final boolean dropPartial; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandClonesDiff.java b/src/main/java/com/milaboratory/mixcr/cli/CommandClonesDiff.java index 6f1f1340a..698b77e62 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandClonesDiff.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandClonesDiff.java @@ -18,7 +18,7 @@ separator = " ", sortOptions = true, description = "Calculates the difference between two .clns files.") -public class CommandClonesDiff extends ACommandWithOutput { +public class CommandClonesDiff extends ACommandWithOutputMiXCR { @Parameters(description = "input1.clns", index = "0") public String in1; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandExport.java b/src/main/java/com/milaboratory/mixcr/cli/CommandExport.java index b1f406739..db7a2aff5 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandExport.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandExport.java @@ -29,10 +29,11 @@ import static cc.redberry.primitives.FilterUtil.ACCEPT_ALL; import static cc.redberry.primitives.FilterUtil.and; +import static com.milaboratory.mixcr.basictypes.IOUtil.*; @Command(separator = " ") -public abstract class CommandExport extends ACommandSimpleExport { +public abstract class CommandExport extends ACommandSimpleExportMiXCR { /** type class */ private final Class clazz; @@ -155,18 +156,18 @@ void run1(List> exporters) throws Excepti AutoCloseable reader = null; OutputPort source = null; - switch (IOUtil.getFileInfo(in).fileType) { - case VDJCA: + switch (fileInfoExtractorInstance.getFileInfo(in).fileType) { + case MAGIC_VDJC: VDJCAlignmentsReader vdjcaReader = new VDJCAlignmentsReader(in, VDJCLibraryRegistry.getDefault()); reader = vdjcaReader; source = vdjcaReader; break; - case ClnA: + case MAGIC_CLNA: ClnAReader clnaReader = new ClnAReader(in, VDJCLibraryRegistry.getDefault()); reader = clnaReader; source = clnaReader.readAllAlignments(); break; - case Clns: + case MAGIC_CLNS: throwExecutionException("Can't export alignments from *.clns file: " + in); default: throwExecutionException("Unknown file type: " + in); diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandExportAlignmentsPretty.java b/src/main/java/com/milaboratory/mixcr/cli/CommandExportAlignmentsPretty.java index 12f97bcfa..dfa459b19 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandExportAlignmentsPretty.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandExportAlignmentsPretty.java @@ -31,7 +31,7 @@ sortOptions = true, separator = " ", description = "Export verbose information about alignments.") -public class CommandExportAlignmentsPretty extends ACommandSimpleExport { +public class CommandExportAlignmentsPretty extends ACommandSimpleExportMiXCR { @Option(description = "Output only top hits", names = {"-t", "--top"}) public boolean onlyTop = false; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandExportClonesPretty.java b/src/main/java/com/milaboratory/mixcr/cli/CommandExportClonesPretty.java index de2dd5354..a54daaa3d 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandExportClonesPretty.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandExportClonesPretty.java @@ -25,7 +25,7 @@ sortOptions = true, separator = " ", description = "Export verbose information about clones.") -public class CommandExportClonesPretty extends ACommandSimpleExport { +public class CommandExportClonesPretty extends ACommandSimpleExportMiXCR { public static final int LINE_LENGTH = 80; public static final int LINE_OFFSET = 7; public static final int MAX_LENGTH = 2 * LINE_OFFSET + LINE_LENGTH; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandExportClonesReads.java b/src/main/java/com/milaboratory/mixcr/cli/CommandExportClonesReads.java index edb88d323..b96d018d5 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandExportClonesReads.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandExportClonesReads.java @@ -32,7 +32,7 @@ "Output file name will be transformed into '_R1'/'_R2' pair in case of paired end reads. Use cloneId = -1 to " + "export alignments not assigned to any clone (not assembled). If no clone ids are specified (only input " + "and output filenames are specified) all reads assigned to clonotypes will be exported.") -public class CommandExportClonesReads extends ACommandWithOutput { +public class CommandExportClonesReads extends ACommandWithOutputMiXCR { @Parameters(index = "0", description = "input_file.clna") public String in; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandExportReads.java b/src/main/java/com/milaboratory/mixcr/cli/CommandExportReads.java index 1a804185b..0c6da0911 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandExportReads.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandExportReads.java @@ -20,7 +20,7 @@ sortOptions = true, separator = " ", description = "Export original reads from vdjca file.") -public class CommandExportReads extends ACommandWithOutput { +public class CommandExportReads extends ACommandWithOutputMiXCR { @Parameters(description = "input.vdjca [output_R1.fastq[.gz] [output_R2.fastq[.gz]]]", arity = "1..3") public List inOut; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandExtend.java b/src/main/java/com/milaboratory/mixcr/cli/CommandExtend.java index d74814643..17260a226 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandExtend.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandExtend.java @@ -4,9 +4,9 @@ import cc.redberry.pipe.OutputPort; import cc.redberry.pipe.blocks.ParallelProcessor; import cc.redberry.pipe.util.OrderedOutputPort; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.*; import com.fasterxml.jackson.core.JsonProcessingException; +import com.milaboratory.cli.ActionConfiguration; import com.milaboratory.core.alignment.AlignmentScoring; import com.milaboratory.core.sequence.NucleotideSequence; import com.milaboratory.mixcr.basictypes.*; @@ -23,13 +23,14 @@ import java.util.List; import java.util.Objects; +import static com.milaboratory.mixcr.basictypes.IOUtil.*; import static com.milaboratory.mixcr.cli.CommandExtend.EXTEND_COMMAND_NAME; @Command(name = EXTEND_COMMAND_NAME, sortOptions = true, separator = " ", description = "Impute alignments or clones with germline sequences.") -public class CommandExtend extends ACommandWithSmartOverwriteWithSingleInput { +public class CommandExtend extends ACommandWithSmartOverwriteWithSingleInputMiXCR { static final String EXTEND_COMMAND_NAME = "extend"; @Option(description = "Apply procedure only to alignments with specific immunological-receptor chains.", @@ -94,13 +95,13 @@ public ActionConfiguration getConfiguration() { @Override public void run1() throws Exception { switch (getInputFileInfo().fileType) { - case VDJCA: + case MAGIC_VDJC: processVDJCA(); break; - case Clns: + case MAGIC_CLNS: processClns(); break; - case ClnA: + case MAGIC_CLNA: throwValidationException("Operation is not supported for ClnA files."); break; default: @@ -188,6 +189,14 @@ public void finish() throws JsonProcessingException { } } + @JsonAutoDetect( + fieldVisibility = JsonAutoDetect.Visibility.ANY, + isGetterVisibility = JsonAutoDetect.Visibility.NONE, + getterVisibility = JsonAutoDetect.Visibility.NONE) + @JsonTypeInfo( + use = JsonTypeInfo.Id.CLASS, + include = JsonTypeInfo.As.PROPERTY, + property = "type") public static class ExtendConfiguration implements ActionConfiguration { final Chains chains; final byte extensionQuality; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandFilterAlignments.java b/src/main/java/com/milaboratory/mixcr/cli/CommandFilterAlignments.java index 6c2bdde92..1d1d425a3 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandFilterAlignments.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandFilterAlignments.java @@ -4,8 +4,8 @@ import cc.redberry.pipe.OutputPort; import cc.redberry.pipe.util.CountLimitingOutputPort; import cc.redberry.primitives.Filter; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.*; +import com.milaboratory.cli.ActionConfiguration; import com.milaboratory.core.sequence.NSequenceWithQuality; import com.milaboratory.core.sequence.NucleotideSequence; import com.milaboratory.mixcr.basictypes.*; @@ -30,7 +30,7 @@ sortOptions = true, separator = " ", description = "Filter alignments.") -public class CommandFilterAlignments extends ACommandWithSmartOverwriteWithSingleInput { +public class CommandFilterAlignments extends ACommandWithSmartOverwriteWithSingleInputMiXCR { static final String FILTER_ALIGNMENTS_COMMAND_NAME = "filterAlignments"; @Option(description = "Specifies immunological protein chain gene for an alignment. If many, " + @@ -192,6 +192,14 @@ public boolean accept(VDJCAlignments object) { } } + @JsonAutoDetect( + fieldVisibility = JsonAutoDetect.Visibility.ANY, + isGetterVisibility = JsonAutoDetect.Visibility.NONE, + getterVisibility = JsonAutoDetect.Visibility.NONE) + @JsonTypeInfo( + use = JsonTypeInfo.Id.CLASS, + include = JsonTypeInfo.As.PROPERTY, + property = "type") public static class FilterConfiguration implements ActionConfiguration { public final Chains chains; public final boolean chimerasOnly; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandInfo.java b/src/main/java/com/milaboratory/mixcr/cli/CommandInfo.java index 4192152c7..28b0bc96f 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandInfo.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandInfo.java @@ -2,7 +2,6 @@ import cc.redberry.pipe.CUtils; import com.milaboratory.mixcr.basictypes.IOUtil; -import com.milaboratory.mixcr.basictypes.IOUtil.MiXCRFileType; import com.milaboratory.mixcr.basictypes.VDJCAlignments; import com.milaboratory.mixcr.basictypes.VDJCAlignmentsReader; import com.milaboratory.mixcr.util.PrintStreamTableAdapter; @@ -17,12 +16,14 @@ import java.nio.file.Paths; import java.util.List; +import static com.milaboratory.mixcr.basictypes.IOUtil.*; + @Command(name = "info", sortOptions = true, hidden = true, separator = " ", description = "Outputs information about mixcr binary file.") -public class CommandInfo extends ACommand { +public class CommandInfo extends ACommandMiXCR { @Parameters(description = "binary_file{.vdjca|.clns}...", arity = "1..*") public List input; @@ -36,18 +37,18 @@ public boolean isTableView() { private IOUtil.MiXCRFileInfo info0 = null; - public MiXCRFileType getType() { + public String getType() { if (info0 == null) - info0 = IOUtil.getFileInfo(input.get(0)); + info0 = (IOUtil.MiXCRFileInfo) fileInfoExtractorInstance.getFileInfo(input.get(0)); return info0.fileType; } @Override public void validate() { super.validate(); - MiXCRFileType type = getType(); + String type = getType(); for (String fileName : input) - if (IOUtil.getFileInfo(fileName).fileType != type) + if (!fileInfoExtractorInstance.getFileInfo(fileName).fileType.equals(type)) throwValidationException("Mixed file types: " + fileName); } @@ -60,11 +61,11 @@ public void run0() throws Exception { throw new RuntimeException("Only table output is supported. Use -t option."); switch (getType()) { - case ClnA: - case Clns: + case MAGIC_CLNA: + case MAGIC_CLNS: processClones(); break; - case VDJCA: + case MAGIC_VDJC: processAlignments(); break; } diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandListLibraries.java b/src/main/java/com/milaboratory/mixcr/cli/CommandListLibraries.java index 37200045c..d949cff87 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandListLibraries.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandListLibraries.java @@ -13,7 +13,7 @@ hidden = true, separator = " ", description = "List all available library by scanning all library search paths.") -public class CommandListLibraries extends ACommand { +public class CommandListLibraries extends ACommandMiXCR { @Override public void run0() { VDJCLibraryRegistry.getDefault().loadAllLibraries(); diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandMain.java b/src/main/java/com/milaboratory/mixcr/cli/CommandMain.java index 1e13d7c0f..42df407e3 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandMain.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandMain.java @@ -1,5 +1,7 @@ package com.milaboratory.mixcr.cli; +import com.milaboratory.cli.ABaseCommand; +import com.milaboratory.cli.AppVersionInfo; import com.milaboratory.mixcr.util.MiXCRVersionInfo; import io.repseq.core.VDJCLibraryRegistry; import picocli.CommandLine; @@ -13,6 +15,10 @@ versionProvider = CommandMain.VersionProvider.class, separator = " ") public class CommandMain extends ABaseCommand { + CommandMain() { + super("mixcr"); + } + @Option(names = {"-v", "--version"}, versionHelp = true, description = "print version information and exit") @@ -32,7 +38,7 @@ public String[] getVersion() throws Exception { lines.addAll(Arrays.asList(MiXCRVersionInfo .get() - .getVersionString(MiXCRVersionInfo.OutputType.ToConsole, true) + .getVersionString(AppVersionInfo.OutputType.ToConsole, true) .split("\n"))); lines.add(""); diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandMergeAlignments.java b/src/main/java/com/milaboratory/mixcr/cli/CommandMergeAlignments.java index 02770edd3..bf7b11df0 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandMergeAlignments.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandMergeAlignments.java @@ -2,9 +2,11 @@ import cc.redberry.pipe.CUtils; import cc.redberry.pipe.OutputPort; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.*; +import com.milaboratory.cli.ActionConfiguration; +import com.milaboratory.cli.PipelineConfiguration; import com.milaboratory.mixcr.basictypes.*; +import com.milaboratory.mixcr.util.MiXCRVersionInfo; import com.milaboratory.util.CanReportProgress; import com.milaboratory.util.SmartProgressReporter; import io.repseq.core.VDJCLibraryRegistry; @@ -23,7 +25,7 @@ sortOptions = true, separator = " ", description = "Merge several *.vdjca files with alignments into a single alignments file.") -public class CommandMergeAlignments extends ACommandWithSmartOverwrite { +public class CommandMergeAlignments extends ACommandWithSmartOverwriteMiXCR { static final String MERGE_ALIGNMENTS_COMMAND_NAME = "mergeAlignments"; @Parameters(description = "[input_file1.vdjca [input_file2.vdjca ....]] output_file.vdjca", arity = "2..*") @@ -45,12 +47,14 @@ protected List getOutputFiles() { public ActionConfiguration getConfiguration() { return configuration != null ? configuration - : (configuration = new MergeConfiguration(getInputFiles().stream().map(PipelineConfigurationReader::fromFile).toArray(PipelineConfiguration[]::new))); + : (configuration = new MergeConfiguration(getInputFiles().stream() + .map(PipelineConfigurationReaderMiXCR::sFromFile).toArray(PipelineConfiguration[]::new))); } @Override public PipelineConfiguration getFullPipelineConfiguration() { - return PipelineConfiguration.mkInitial(getInputFiles(), getConfiguration()); + return PipelineConfiguration.mkInitial(getInputFiles(), getConfiguration(), + MiXCRVersionInfo.getAppVersionInfo()); } @Override @@ -66,6 +70,14 @@ public void run1() throws Exception { } } + @JsonAutoDetect( + fieldVisibility = JsonAutoDetect.Visibility.ANY, + isGetterVisibility = JsonAutoDetect.Visibility.NONE, + getterVisibility = JsonAutoDetect.Visibility.NONE) + @JsonTypeInfo( + use = JsonTypeInfo.Id.CLASS, + include = JsonTypeInfo.As.PROPERTY, + property = "type") public static class MergeConfiguration implements ActionConfiguration { final PipelineConfiguration[] sources; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandPipelineInfo.java b/src/main/java/com/milaboratory/mixcr/cli/CommandPipelineInfo.java index 705f8b33d..36a954ff4 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandPipelineInfo.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandPipelineInfo.java @@ -1,8 +1,8 @@ package com.milaboratory.mixcr.cli; import com.fasterxml.jackson.core.JsonProcessingException; -import com.milaboratory.mixcr.basictypes.PipelineConfiguration; -import com.milaboratory.mixcr.basictypes.PipelineConfigurationReader; +import com.milaboratory.cli.PipelineConfiguration; +import com.milaboratory.mixcr.basictypes.PipelineConfigurationReaderMiXCR; import com.milaboratory.mixcr.util.PrintStreamTableAdapter; import com.milaboratory.util.GlobalObjectMappers; import com.milaboratory.util.LightFileDescriptor; @@ -18,7 +18,7 @@ hidden = true, separator = " ", description = "List all available library by scanning all library search paths.") -public class CommandPipelineInfo extends ACommand { +public class CommandPipelineInfo extends ACommandMiXCR { @Parameters(description = "binary_file{.vdjca|.clns|.clna}...") public String input; @@ -35,11 +35,12 @@ public void run0() throws Exception { } public static void analysisPipelineInfoJson(String file) throws JsonProcessingException { - System.out.println(GlobalObjectMappers.PRETTY.writeValueAsString(PipelineConfigurationReader.fromFile(file))); + System.out.println(GlobalObjectMappers.PRETTY.writeValueAsString(PipelineConfigurationReaderMiXCR + .sFromFile(file))); } public static void analysisPipelineInfo(String file) { - PipelineConfiguration pipeline = PipelineConfigurationReader.fromFile(file); + PipelineConfiguration pipeline = PipelineConfigurationReaderMiXCR.sFromFile(file); System.out.println("Pipeline:"); final PrintStreamTableAdapter tableAdapter = new PrintStreamTableAdapter(System.out); for (int i = 0; i < pipeline.pipelineSteps.length; ++i) { diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandSlice.java b/src/main/java/com/milaboratory/mixcr/cli/CommandSlice.java index 08acdf565..d92d4230a 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandSlice.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandSlice.java @@ -3,28 +3,25 @@ import cc.redberry.pipe.CUtils; import cc.redberry.pipe.OutputPort; import cc.redberry.pipe.util.FlatteningOutputPort; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.*; +import com.milaboratory.cli.ActionConfiguration; import com.milaboratory.mixcr.basictypes.*; import gnu.trove.map.hash.TIntIntHashMap; import gnu.trove.set.hash.TLongHashSet; import io.repseq.core.VDJCLibraryRegistry; -import picocli.CommandLine; -import picocli.CommandLine.Option; +import picocli.CommandLine.*; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; +import java.util.*; import java.util.concurrent.atomic.AtomicLong; +import static com.milaboratory.mixcr.basictypes.IOUtil.*; import static com.milaboratory.mixcr.cli.CommandSlice.SLICE_COMMAND_NAME; -@CommandLine.Command(name = SLICE_COMMAND_NAME, +@Command(name = SLICE_COMMAND_NAME, sortOptions = true, separator = " ", description = "Slice ClnA file.") -public class CommandSlice extends ACommandWithSmartOverwriteWithSingleInput { +public class CommandSlice extends ACommandWithSmartOverwriteWithSingleInputMiXCR { static final String SLICE_COMMAND_NAME = "slice"; @Option(description = "List of read (for .vdjca) / clone (for .clns/.clna) ids to export.", @@ -41,18 +38,17 @@ public void run1() throws Exception { Collections.sort(ids); switch (getInputFileInfo().fileType) { - case VDJCA: + case MAGIC_VDJC: sliceVDJCA(); break; - case Clns: + case MAGIC_CLNS: throwValidationException("Operation is not yet supported for Clns files."); break; - case ClnA: + case MAGIC_CLNA: sliceClnA(); break; default: throwValidationException("Not supported file type."); - } } @@ -124,6 +120,14 @@ void sliceClnA() throws Exception { } } + @JsonAutoDetect( + fieldVisibility = JsonAutoDetect.Visibility.ANY, + isGetterVisibility = JsonAutoDetect.Visibility.NONE, + getterVisibility = JsonAutoDetect.Visibility.NONE) + @JsonTypeInfo( + use = JsonTypeInfo.Id.CLASS, + include = JsonTypeInfo.As.PROPERTY, + property = "type") public static class SliceConfiguration implements ActionConfiguration { final long[] ids; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandSortAlignments.java b/src/main/java/com/milaboratory/mixcr/cli/CommandSortAlignments.java index 99b9506b1..8ffd1d384 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandSortAlignments.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandSortAlignments.java @@ -4,7 +4,8 @@ import cc.redberry.pipe.OutputPort; import cc.redberry.pipe.OutputPortCloseable; import cc.redberry.pipe.util.CountingOutputPort; -import com.milaboratory.mixcr.basictypes.ActionConfiguration; +import com.fasterxml.jackson.annotation.*; +import com.milaboratory.cli.ActionConfiguration; import com.milaboratory.mixcr.basictypes.VDJCAlignments; import com.milaboratory.mixcr.basictypes.VDJCAlignmentsReader; import com.milaboratory.mixcr.basictypes.VDJCAlignmentsWriter; @@ -29,7 +30,7 @@ sortOptions = true, separator = " ", description = "Sort alignments in vdjca file by read id.") -public class CommandSortAlignments extends ACommandWithSmartOverwriteWithSingleInput { +public class CommandSortAlignments extends ACommandWithSmartOverwriteWithSingleInputMiXCR { static final String SORT_ALIGNMENTS_COMMAND_NAME = "sortAlignments"; @Override @@ -90,6 +91,14 @@ public OutputPort read(InputStream stream) { } } + @JsonAutoDetect( + fieldVisibility = JsonAutoDetect.Visibility.ANY, + isGetterVisibility = JsonAutoDetect.Visibility.NONE, + getterVisibility = JsonAutoDetect.Visibility.NONE) + @JsonTypeInfo( + use = JsonTypeInfo.Id.CLASS, + include = JsonTypeInfo.As.PROPERTY, + property = "type") public static class SortConfiguration implements ActionConfiguration { @Override public String actionName() { diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandVersionInfo.java b/src/main/java/com/milaboratory/mixcr/cli/CommandVersionInfo.java index 1f267c8d6..d8e70105b 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandVersionInfo.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandVersionInfo.java @@ -11,7 +11,7 @@ @Command(name = "versionInfo", separator = " ", description = "Output information about MiXCR version which generated the file.") -public class CommandVersionInfo extends ACommand { +public class CommandVersionInfo extends ACommandMiXCR { @Parameters(description = "input_file") public String inputFile; diff --git a/src/main/java/com/milaboratory/mixcr/cli/Main.java b/src/main/java/com/milaboratory/mixcr/cli/Main.java index a28e1af76..d3d072fee 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/Main.java +++ b/src/main/java/com/milaboratory/mixcr/cli/Main.java @@ -1,5 +1,6 @@ package com.milaboratory.mixcr.cli; +import com.milaboratory.cli.ValidationException; import com.milaboratory.util.TempFileManager; import com.milaboratory.util.VersionInfo; import io.repseq.core.VDJCLibraryRegistry; diff --git a/src/main/java/com/milaboratory/mixcr/cli/MiXCRCommand.java b/src/main/java/com/milaboratory/mixcr/cli/MiXCRCommand.java new file mode 100644 index 000000000..de30346ec --- /dev/null +++ b/src/main/java/com/milaboratory/mixcr/cli/MiXCRCommand.java @@ -0,0 +1,16 @@ +package com.milaboratory.mixcr.cli; + +import com.milaboratory.cli.BinaryFileInfo; + +import static com.milaboratory.mixcr.basictypes.IOUtil.fileInfoExtractorInstance; + +public interface MiXCRCommand { + void throwValidationException(String message, boolean printHelp); + + /** Validate injected parameters and options */ + default void validateInfo(String inputFile) { + BinaryFileInfo info = fileInfoExtractorInstance.getFileInfo(inputFile); + if (info != null && !info.valid) + throwValidationException("ERROR: input file \"" + inputFile + "\" is corrupted.", false); + } +} diff --git a/src/main/java/com/milaboratory/mixcr/cli/SerializerCompatibilityUtil.java b/src/main/java/com/milaboratory/mixcr/cli/SerializerCompatibilityUtil.java new file mode 100644 index 000000000..31903970c --- /dev/null +++ b/src/main/java/com/milaboratory/mixcr/cli/SerializerCompatibilityUtil.java @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail, + * Popov Aleksandr (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact the Inventors using one of the following + * email addresses: chudakovdm@mail.ru, chudakovdm@gmail.com + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ +package com.milaboratory.mixcr.cli; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.fasterxml.jackson.databind.node.TextNode; +import com.milaboratory.cli.ActionConfiguration; +import com.milaboratory.cli.AppVersionInfo; +import com.milaboratory.primitivio.JSONSerializer; +import com.milaboratory.primitivio.PrimitivI; +import com.milaboratory.util.GlobalObjectMappers; + +import java.io.IOException; +import java.util.*; + +public final class SerializerCompatibilityUtil { + private SerializerCompatibilityUtil() { + } + + private static final HashMap v3_0_3_Table = new HashMap<>(); + + static { + v3_0_3_Table.put("\"align-configuration\"", + "com.milaboratory.mixcr.cli.CommandAlign$AlignConfiguration"); + v3_0_3_Table.put("\"assemble-configuration\"", + "com.milaboratory.mixcr.cli.CommandAssemble$AssembleConfiguration"); + v3_0_3_Table.put("\"assemble-contig-configuration\"", + "com.milaboratory.mixcr.cli.CommandAssembleContigs$AssembleContigsConfiguration"); + v3_0_3_Table.put("\"assemble-partial-configuration\"", + "com.milaboratory.mixcr.cli.CommandAssemblePartialAlignments$AssemblePartialConfiguration"); + v3_0_3_Table.put("\"extend-configuration\"", + "com.milaboratory.mixcr.cli.CommandExtend$ExtendConfiguration"); + v3_0_3_Table.put("\"merge-configuration\"", + "com.milaboratory.mixcr.cli.CommandMergeAlignments$MergeConfiguration"); + v3_0_3_Table.put("\"filter-configuration\"", + "com.milaboratory.mixcr.cli.CommandFilterAlignments$FilterConfiguration"); + v3_0_3_Table.put("\"sort-configuration\"", + "com.milaboratory.mixcr.cli.CommandSortAlignments$SortConfiguration"); + v3_0_3_Table.put("\"slice-configuration\"", + "com.milaboratory.mixcr.cli.CommandSlice$SliceConfiguration"); + } + + public static void add_v3_0_3_CustomSerializers(PrimitivI input) { + input.getSerializersManager().registerCustomSerializer(AppVersionInfo.class, + new JSONSerializer(AppVersionInfo.class, s -> { + try { + JsonNode jsonNode = GlobalObjectMappers.ONE_LINE.readTree(s); + ObjectNode componentVersions = GlobalObjectMappers.ONE_LINE.createObjectNode(); + ((ObjectNode) jsonNode).set("componentVersions", componentVersions); + componentVersions.set("mixcr", ((ObjectNode) jsonNode).remove("mixcr")); + componentVersions.set("milib", ((ObjectNode) jsonNode).remove("milib")); + componentVersions.set("repseqio", ((ObjectNode) jsonNode).remove("repseqio")); + ObjectNode componentStringVersions = GlobalObjectMappers.ONE_LINE.createObjectNode(); + ((ObjectNode) jsonNode).set("componentStringVersions", componentStringVersions); + componentStringVersions.set("builtInLibrary", ((ObjectNode) jsonNode) + .remove("builtInLibrary")); + ((ObjectNode) jsonNode).set("type", + new TextNode("com.milaboratory.cli.AppVersionInfo")); + return jsonNode.toString(); + } catch (IOException e) { + throw new RuntimeException(e); + } + })); + input.getSerializersManager().registerCustomSerializer(ActionConfiguration.class, + new JSONSerializer(ActionConfiguration.class, s -> { + try { + JsonNode jsonNode = GlobalObjectMappers.ONE_LINE.readTree(s); + String typeName = jsonNode.get("type").toString(); + if (v3_0_3_Table.containsKey(typeName)) + ((ObjectNode) jsonNode).set("type", new TextNode(v3_0_3_Table.get(typeName))); + return jsonNode.toString(); + } catch (IOException e) { + throw new RuntimeException(e); + } + })); + } +} diff --git a/src/main/java/com/milaboratory/mixcr/cli/ValidationException.java b/src/main/java/com/milaboratory/mixcr/cli/ValidationException.java deleted file mode 100644 index 3e321eebd..000000000 --- a/src/main/java/com/milaboratory/mixcr/cli/ValidationException.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.milaboratory.mixcr.cli; - -import picocli.CommandLine; -import picocli.CommandLine.ParameterException; - -/** - * - */ -public class ValidationException extends ParameterException { - public final boolean printHelp; - - public ValidationException(CommandLine commandLine, String msg, boolean printHelp) { - super(commandLine, msg); - this.printHelp = printHelp; - } -} diff --git a/src/main/java/com/milaboratory/mixcr/partialassembler/PartialAlignmentsAssemblerParameters.java b/src/main/java/com/milaboratory/mixcr/partialassembler/PartialAlignmentsAssemblerParameters.java index daa268e24..a6f90ad92 100644 --- a/src/main/java/com/milaboratory/mixcr/partialassembler/PartialAlignmentsAssemblerParameters.java +++ b/src/main/java/com/milaboratory/mixcr/partialassembler/PartialAlignmentsAssemblerParameters.java @@ -34,8 +34,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.milaboratory.core.merger.MergerParameters; -import com.milaboratory.mixcr.basictypes.ActionConfiguration; -import com.milaboratory.primitivio.annotations.Serializable; import com.milaboratory.util.GlobalObjectMappers; import java.io.IOException; diff --git a/src/main/java/com/milaboratory/mixcr/util/MiXCRVersionInfo.java b/src/main/java/com/milaboratory/mixcr/util/MiXCRVersionInfo.java index 5674a5f12..24277fa73 100644 --- a/src/main/java/com/milaboratory/mixcr/util/MiXCRVersionInfo.java +++ b/src/main/java/com/milaboratory/mixcr/util/MiXCRVersionInfo.java @@ -29,9 +29,9 @@ */ package com.milaboratory.mixcr.util; -import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.milaboratory.primitivio.annotations.Serializable; +import com.fasterxml.jackson.annotation.*; +import com.milaboratory.cli.AppVersionInfo; +import com.milaboratory.cli.AppVersionInfo.OutputType; import com.milaboratory.util.VersionInfo; import io.repseq.core.VDJCLibraryRegistry; import org.apache.commons.io.IOUtils; @@ -39,81 +39,72 @@ import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; -import java.util.Objects; +import java.util.*; @JsonAutoDetect( fieldVisibility = JsonAutoDetect.Visibility.ANY, isGetterVisibility = JsonAutoDetect.Visibility.NONE, getterVisibility = JsonAutoDetect.Visibility.NONE) -@Serializable(asJson = true) +@JsonTypeInfo( + use = JsonTypeInfo.Id.NAME, + include = JsonTypeInfo.As.PROPERTY, + property = "type") public final class MiXCRVersionInfo { - private final VersionInfo mixcr, milib, repseqio; - private final String builtInLibrary; - - private MiXCRVersionInfo(@JsonProperty("mixcr") VersionInfo mixcr, - @JsonProperty("milib") VersionInfo milib, - @JsonProperty("repseqio") VersionInfo repseqio, - @JsonProperty("builtInLibrary") String builtInLibrary) { - this.mixcr = mixcr; - this.milib = milib; - this.repseqio = repseqio; - this.builtInLibrary = builtInLibrary; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - MiXCRVersionInfo that = (MiXCRVersionInfo) o; - return Objects.equals(mixcr, that.mixcr) && - Objects.equals(milib, that.milib) && - Objects.equals(repseqio, that.repseqio) && - Objects.equals(builtInLibrary, that.builtInLibrary); - } + private static volatile MiXCRVersionInfo instance = null; + private final AppVersionInfo appVersionInfo; - @Override - public int hashCode() { - return Objects.hash(mixcr, milib, repseqio, builtInLibrary); + private MiXCRVersionInfo(@JsonProperty("appVersionInfo") AppVersionInfo appVersionInfo) { + this.appVersionInfo = appVersionInfo; } - private static volatile MiXCRVersionInfo instance = null; - public static MiXCRVersionInfo get() { if (instance == null) synchronized (MiXCRVersionInfo.class) { if (instance == null) { + HashMap componentVersions = new HashMap<>(); + HashMap componentStringVersions = new HashMap<>(); String libName = ""; - try (InputStream stream = VDJCLibraryRegistry.class.getResourceAsStream("/libraries/default.alias")) { + try (InputStream stream = VDJCLibraryRegistry.class + .getResourceAsStream("/libraries/default.alias")) { if (stream != null) libName = IOUtils.toString(stream, StandardCharsets.UTF_8); - } catch (IOException e) { + } catch (IOException ignored) { } - VersionInfo mixcr = VersionInfo.getVersionInfoForArtifact("mixcr"); - VersionInfo milib = VersionInfo.getVersionInfoForArtifact("milib"); - VersionInfo repseqio = VersionInfo.getVersionInfoForArtifact("repseqio"); - instance = new MiXCRVersionInfo(mixcr, milib, repseqio, libName); + componentVersions.put("mixcr", VersionInfo.getVersionInfoForArtifact("mixcr")); + componentVersions.put("milib", VersionInfo.getVersionInfoForArtifact("milib")); + componentVersions.put("repseqio", VersionInfo.getVersionInfoForArtifact("repseqio")); + componentStringVersions.put("builtInLibrary", libName); + AppVersionInfo.init(componentVersions, componentStringVersions); + instance = new MiXCRVersionInfo(AppVersionInfo.get()); } } return instance; } + public static AppVersionInfo getAppVersionInfo() { + get(); // initialize AppVersionInfo if not initialized + return AppVersionInfo.get(); + } + public String getShortestVersionString() { - String builder = mixcr.getVersion() + + VersionInfo mixcr = appVersionInfo.getComponentVersions().get("mixcr"); + return mixcr.getVersion() + "; built=" + mixcr.getTimestamp() + "; rev=" + mixcr.getRevision() + "; lib=" + - builtInLibrary; - - return builder; - } - - public String getVersionString(OutputType outputType) { - return getVersionString(outputType, false); + appVersionInfo.getComponentStringVersions().get("builtInLibrary"); } public String getVersionString(OutputType outputType, boolean full) { + Map componentVersions = appVersionInfo.getComponentVersions(); + Map componentStringVersions = appVersionInfo.getComponentStringVersions(); + VersionInfo mixcr = componentVersions.get("mixcr"); + VersionInfo milib = componentVersions.get("milib"); + VersionInfo repseqio = componentVersions.get("repseqio"); + String builtInLibrary = componentStringVersions.get("builtInLibrary"); + StringBuilder builder = new StringBuilder(); builder.append("MiXCR v") @@ -154,14 +145,20 @@ public String getVersionString(OutputType outputType, boolean full) { return builder.toString(); } - public enum OutputType { - ToConsole("\n", true), ToFile("; ", false); - final String delimiter; - final boolean componentsWord; + public String getVersionString(OutputType outputType) { + return getVersionString(outputType, false); + } - OutputType(String delimiter, boolean componentsWord) { - this.delimiter = delimiter; - this.componentsWord = componentsWord; - } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + MiXCRVersionInfo that = (MiXCRVersionInfo)o; + return appVersionInfo.equals(that.appVersionInfo); + } + + @Override + public int hashCode() { + return appVersionInfo.hashCode(); } } diff --git a/src/test/java/com/milaboratory/mixcr/basictypes/ClnAReaderTest.java b/src/test/java/com/milaboratory/mixcr/basictypes/ClnAReaderTest.java index 40aca380c..0f1fcdf4f 100644 --- a/src/test/java/com/milaboratory/mixcr/basictypes/ClnAReaderTest.java +++ b/src/test/java/com/milaboratory/mixcr/basictypes/ClnAReaderTest.java @@ -2,6 +2,7 @@ import cc.redberry.pipe.CUtils; import cc.redberry.pipe.OutputPort; +import com.milaboratory.cli.AppVersionInfo; import com.milaboratory.mixcr.assembler.AlignmentsMappingMerger; import com.milaboratory.mixcr.assembler.CloneAssemblerParametersPresets; import com.milaboratory.mixcr.assembler.ReadToCloneMapping; @@ -40,7 +41,8 @@ public void test1() throws Exception { ClnAReader reader = new ClnAReader(file.toPath(), VDJCLibraryRegistry.getDefault(), 17); - assertEquals(MiXCRVersionInfo.get().getVersionString(MiXCRVersionInfo.OutputType.ToFile), reader.getVersionInfo()); + assertEquals(MiXCRVersionInfo.get().getVersionString(AppVersionInfo.OutputType.ToFile), + reader.getVersionInfo()); assertEquals(align.alignments.size(), reader.numberOfAlignments()); assertEquals(assemble.cloneSet.size(), reader.numberOfClones()); @@ -77,7 +79,8 @@ public void test2Empty() throws Exception { ClnAReader reader = new ClnAReader(file.toPath(), VDJCLibraryRegistry.getDefault(), 17); - assertEquals(MiXCRVersionInfo.get().getVersionString(MiXCRVersionInfo.OutputType.ToFile), reader.getVersionInfo()); + assertEquals(MiXCRVersionInfo.get().getVersionString(AppVersionInfo.OutputType.ToFile), + reader.getVersionInfo()); assertEquals(align.alignments.size(), reader.numberOfAlignments()); assertEquals(0, reader.numberOfClones()); @@ -99,4 +102,4 @@ static int count(OutputPort port) { ++c; return c; } -} \ No newline at end of file +} diff --git a/src/test/java/com/milaboratory/mixcr/tests/BackwardCompatibilityTests.java b/src/test/java/com/milaboratory/mixcr/tests/BackwardCompatibilityTests.java index 4c072bc53..012864fd2 100644 --- a/src/test/java/com/milaboratory/mixcr/tests/BackwardCompatibilityTests.java +++ b/src/test/java/com/milaboratory/mixcr/tests/BackwardCompatibilityTests.java @@ -43,10 +43,8 @@ public class BackwardCompatibilityTests { @Test public void testAlignments() throws Exception { - // assertGoodVDJCA("/backward_compatibility/2.1.0/test.vdjca.gz", 76); - // assertGoodVDJCA("/backward_compatibility/2.1.2/test.vdjca.gz", 76); - // assertGoodVDJCA("/backward_compatibility/2.1.2-kAligner2/test.vdjca.gz", 78); - // assertGoodVDJCA("/backward_compatibility/2.1.7/test.vdjca.gz", 76); + assertGoodVDJCA("/backward_compatibility/3.0.4/test.vdjca", 8); + assertGoodVDJCA("/backward_compatibility/3.0.3/test.vdjca", 8); } public static void assertGoodVDJCA(String resource, int size) throws IOException { @@ -67,11 +65,11 @@ public static void assertGoodVDJCA(String resource, int size) throws IOException } @Test - public void testBC16Cloneset() throws Exception { - // assertGoodCLNS("/backward_compatibility/2.1.0/test.clns.gz", 22, 17, 22.0); - // assertGoodCLNS("/backward_compatibility/2.1.2/test.clns.gz", 22, 17, 22.0); - // assertGoodCLNS("/backward_compatibility/2.1.2-kAligner2/test.clns.gz", 21, 16, 21.0); - // assertGoodCLNS("/backward_compatibility/2.1.7/test.clns.gz", 22, 17, 22.0); + public void testCloneset() throws Exception { + assertGoodCLNS("/backward_compatibility/3.0.4/test.clna", 2, 2, 2); + assertGoodCLNS("/backward_compatibility/3.0.4/test.clns", 2, 2, 2); + assertGoodCLNS("/backward_compatibility/3.0.3/test.clns", 2, 2, 2); + assertGoodCLNS("/backward_compatibility/3.0.3/test.clna", 2, 2, 2); } public static void assertGoodCLNS(String resource, int size, int good, double sumCount) throws IOException { diff --git a/src/test/java/com/milaboratory/mixcr/util/MiXCRVersionInfoTest.java b/src/test/java/com/milaboratory/mixcr/util/MiXCRVersionInfoTest.java index 5e50d4fdb..ee92493d5 100644 --- a/src/test/java/com/milaboratory/mixcr/util/MiXCRVersionInfoTest.java +++ b/src/test/java/com/milaboratory/mixcr/util/MiXCRVersionInfoTest.java @@ -18,4 +18,4 @@ public void testSerialize1() throws IOException { MiXCRVersionInfo v = GlobalObjectMappers.PRETTY.readValue(pretty, MiXCRVersionInfo.class); assertEquals(version, v); } -} \ No newline at end of file +} diff --git a/src/test/resources/backward_compatibility/3.0.3/test.clna b/src/test/resources/backward_compatibility/3.0.3/test.clna new file mode 100644 index 0000000000000000000000000000000000000000..167e3eeb054c2350296bf55899265984e3ec03ed GIT binary patch literal 43846 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 literal 0 HcmV?d00001 diff --git a/src/test/resources/backward_compatibility/3.0.3/test.clns b/src/test/resources/backward_compatibility/3.0.3/test.clns new file mode 100644 index 0000000000000000000000000000000000000000..712e8faf7ac96ac14e4b3ee6973fc16ad304cac0 GIT binary patch literal 36423 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 aFa7`P_15;{O@q5SuPaU#IL2G9AOjy literal 0 HcmV?d00001 diff --git a/src/test/resources/backward_compatibility/3.0.4/test.clns b/src/test/resources/backward_compatibility/3.0.4/test.clns new file mode 100644 index 0000000000000000000000000000000000000000..258eb0f87ab44c614ff1f4d27aec6a246887abd9 GIT binary patch literal 36674 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 b@FkcN%YU`T_R2M*ySlHaOqIKFC&T#v!%@v= literal 0 HcmV?d00001 From 211e722bfc7245aa798d3e891444ca03e76cfda2 Mon Sep 17 00:00:00 2001 From: Stanislav Poslavsky Date: Tue, 18 Dec 2018 19:46:29 +0300 Subject: [PATCH 03/19] This fixes #469 (#474) --- .../mixcr/basictypes/VDJCObject.java | 61 ++++++++++++------- 1 file changed, 40 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCObject.java b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCObject.java index 2595717ae..59914315b 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCObject.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCObject.java @@ -373,14 +373,18 @@ public CaseSensitiveNucleotideSequence getIncompleteFeature(GeneFeature geneFeat if (!lAl.getSequence1Range().contains(positionInRef)) { // add lowercase piece of germline assert lAl.getSequence1Range().getFrom() > positionInRef; - leftParts.add(new IncompleteSequencePart(lHit, true, iLeftTarget, positionInRef, lAl.getSequence1Range().getFrom())); + IncompleteSequencePart part = new IncompleteSequencePart(lHit, true, iLeftTarget, positionInRef, lAl.getSequence1Range().getFrom()); + if (part.begin != part.end) + leftParts.add(part); positionInRef = lAl.getSequence1Range().getFrom(); } assert lAl.getSequence1Range().containsBoundary(positionInRef); - leftParts.add(new IncompleteSequencePart(lHit, false, iLeftTarget, + IncompleteSequencePart part = new IncompleteSequencePart(lHit, false, iLeftTarget, aabs(lAl.convertToSeq2Position(positionInRef)), - lAl.getSequence2Range().getTo())); + lAl.getSequence2Range().getTo()); + if (part.begin != part.end) + leftParts.add(part); positionInRef = lAl.getSequence1Range().getTo(); } @@ -417,14 +421,18 @@ public CaseSensitiveNucleotideSequence getIncompleteFeature(GeneFeature geneFeat if (!rAl.getSequence1Range().contains(positionInRef)) { // add lowercase piece of germline assert rAl.getSequence1Range().getTo() <= positionInRef; - rightParts.add(new IncompleteSequencePart(rHit, true, iRightTarget, rAl.getSequence1Range().getTo(), positionInRef)); // +1 to include positionInRef + IncompleteSequencePart part = new IncompleteSequencePart(rHit, true, iRightTarget, rAl.getSequence1Range().getTo(), positionInRef); // +1 to include positionInRef + if (part.begin != part.end) + rightParts.add(part); positionInRef = rAl.getSequence1Range().getTo(); } assert rAl.getSequence1Range().containsBoundary(positionInRef); - rightParts.add(new IncompleteSequencePart(rHit, false, iRightTarget, + IncompleteSequencePart part = new IncompleteSequencePart(rHit, false, iRightTarget, rAl.getSequence2Range().getFrom(), - aabs(rAl.convertToSeq2Position(positionInRef)))); + aabs(rAl.convertToSeq2Position(positionInRef))); + if (part.begin != part.end) + rightParts.add(part); positionInRef = rAl.getSequence1Range().getFrom(); } @@ -458,27 +466,37 @@ public CaseSensitiveNucleotideSequence getIncompleteFeature(GeneFeature geneFeat if (lHit == rHit) { Alignment lAl = lHit.getAlignment(lLast.iTarget); - if (lAl.getSequence1Range().contains(rPositionInRef)) - leftParts.set(leftParts.size() - 1, - new IncompleteSequencePart(lHit, false, lLast.iTarget, lLast.begin, - aabs(lAl.convertToSeq2Position(rPositionInRef)))); - else { - assert rPositionInRef > lAl.getSequence1Range().getTo(); - leftParts.add(new IncompleteSequencePart(lHit, true, + if (lAl.getSequence1Range().contains(rPositionInRef)) { + IncompleteSequencePart part = new IncompleteSequencePart(lHit, false, lLast.iTarget, lLast.begin, + aabs(lAl.convertToSeq2Position(rPositionInRef))); + if (part.begin == part.end) + leftParts.remove(leftParts.size() - 1); + else + leftParts.set(leftParts.size() - 1, part); + } else { + assert rPositionInRef >= lAl.getSequence1Range().getTo(); + IncompleteSequencePart part = new IncompleteSequencePart(lHit, true, lLast.iTarget, - lAl.getSequence1Range().getTo(), rPositionInRef)); + lAl.getSequence1Range().getTo(), rPositionInRef); + if (part.begin != part.end) + leftParts.add(part); } Alignment rAl = lHit.getAlignment(rLast.iTarget); - if (rAl.getSequence1Range().contains(lPositionInRef)) - rightParts.set(0, - new IncompleteSequencePart(rHit, false, rLast.iTarget, - aabs(rAl.convertToSeq2Position(lPositionInRef)), rLast.end)); - else { + if (rAl.getSequence1Range().contains(lPositionInRef)) { + IncompleteSequencePart part = new IncompleteSequencePart(rHit, false, rLast.iTarget, + aabs(rAl.convertToSeq2Position(lPositionInRef)), rLast.end); + if (part.begin == part.end) + rightParts.remove(0); + else + rightParts.set(0, part); + } else { assert lPositionInRef < rAl.getSequence1Range().getFrom(); - rightParts.add(0, new IncompleteSequencePart(rHit, true, + IncompleteSequencePart part = new IncompleteSequencePart(rHit, true, rLast.iTarget, - lPositionInRef, rAl.getSequence1Range().getFrom())); + lPositionInRef, rAl.getSequence1Range().getFrom()); + if (part.begin != part.end) + rightParts.add(0, part); } assert same(leftParts, rightParts) : "\n" + leftParts + "\n" + rightParts; @@ -552,6 +570,7 @@ private static final class IncompleteSequencePart { final int begin, end; IncompleteSequencePart(VDJCHit hit, boolean germline, int iTarget, int begin, int end) { + assert begin <= end; this.hit = hit; this.germline = germline; this.iTarget = iTarget; From e7290f06e185177c649351aeb40218679f01cad7 Mon Sep 17 00:00:00 2001 From: Dmitry Bolotin Date: Tue, 18 Dec 2018 19:55:00 +0300 Subject: [PATCH 04/19] New integration tests. --- .travis.yml | 2 +- itests.sh | 34 ++++++++++++++++++++++------------ 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/.travis.yml b/.travis.yml index c2ab96149..cc030c408 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,7 +14,7 @@ before_install: - mv .cache ./repseqio/.cache - cd repseqio && mvn clean install -DskipTests -B && cd .. - mv ./repseqio/.cache .cache - + - ./ensure-test-data.sh script: - mvn test -B && ./itests.sh test diff --git a/itests.sh b/itests.sh index 65294f006..957f845c9 100755 --- a/itests.sh +++ b/itests.sh @@ -75,6 +75,8 @@ mkdir ${dir}/test_target cp ${dir}/src/test/resources/sequences/*.fastq ${dir}/test_target/ cd ${dir}/test_target/ +ln -s ../src/test/resources/sequences/big/CD4M1_test_R1.fastq.gz ${dir}/test_target/CD4M1_test_R1.fastq.gz +ln -s ../src/test/resources/sequences/big/CD4M1_test_R2.fastq.gz ${dir}/test_target/CD4M1_test_R2.fastq.gz PATH=${dir}:${PATH} @@ -86,7 +88,7 @@ function go_assemble { mixcr assemble -r $1.clns.report $1.vdjca $1.clns for c in TCR IG TRB TRA TRG TRD IGH IGL IGK ALL do - mixcr exportClones -c ${c} -s $1.clns $1.clns.${c}.txt + mixcr exportClones -c ${c} $1.clns $1.clns.${c}.txt done } @@ -103,15 +105,23 @@ fi # UseCase 1 if [[ $run_tests == true ]]; then - echo "Running test case 1" - mixcr align -s hs -OvParameters.geneFeatureToAlign=VGeneWithP -OsaveOriginalReads=true test_R1.fastq test_R2.fastq case1.vdjca - mixcr assemble case1.vdjca case1.clns - - mixcr exportAlignments -nFeatureImputed VDJRegion -descrsR1 -descrsR2 case1.vdjca case1.alignments.txt - - echo "Running test case 2" - mixcr analyze shotgun -f --species hs --contig-assembly --impute-germline-on-export --starting-material rna test_R1.fastq test_R2.fastq case2 - - echo "Running test case 3" - mixcr analyze amplicon --receptor-type tra --impute-germline-on-export -s hs --starting-material rna --contig-assembly --5-end v-primers --3-end j-primers --adapters no-adapters test_R1.fastq test_R2.fastq case3 +# echo "Running test case 1" +# mixcr align -s hs -OvParameters.geneFeatureToAlign=VGeneWithP -OsaveOriginalReads=true test_R1.fastq test_R2.fastq case1.vdjca +# mixcr assemble case1.vdjca case1.clns +# +# mixcr exportAlignments -nFeatureImputed VDJRegion -descrsR1 -descrsR2 case1.vdjca case1.alignments.txt +# +# echo "Running test case 2" +# mixcr analyze shotgun -f --species hs --contig-assembly --impute-germline-on-export --starting-material rna test_R1.fastq test_R2.fastq case2 +# +# echo "Running test case 3" +# mixcr analyze amplicon --receptor-type tra --impute-germline-on-export -s hs --starting-material rna --contig-assembly --5-end v-primers --3-end j-primers --adapters no-adapters test_R1.fastq test_R2.fastq case3 + + echo "Running test case 4" + mixcr analyze amplicon --receptor-type tra --impute-germline-on-export -s hs --starting-material rna --contig-assembly --5-end v-primers --3-end j-primers --adapters adapters-present CD4M1_test_R1.fastq.gz CD4M1_test_R2.fastq.gz case4 + # Checking skip steps behaviour + mixcr analyze amplicon --receptor-type tra --impute-germline-on-export -s hs --starting-material rna --contig-assembly --5-end v-primers --3-end j-primers --adapters adapters-present CD4M1_test_R1.fastq.gz CD4M1_test_R2.fastq.gz case4 + + echo "Running test case 5" + mixcr analyze amplicon --receptor-type tra --align '-OseparateByC=true' --align '-OseparateByV=true' --align '-OseparateByJ=true' --impute-germline-on-export -s hs --starting-material rna --contig-assembly --5-end v-primers --3-end j-primers --adapters adapters-present CD4M1_test_R1.fastq.gz CD4M1_test_R2.fastq.gz case4 fi From df454c611f2e5e8f0a5f69e4d504ba49b6d4bb18 Mon Sep 17 00:00:00 2001 From: Stanislav Poslavsky Date: Tue, 18 Dec 2018 22:22:31 +0300 Subject: [PATCH 05/19] Fix for -nFeatureImputed in export --- .../java/com/milaboratory/mixcr/basictypes/VDJCObject.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCObject.java b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCObject.java index 59914315b..cca46f2be 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCObject.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCObject.java @@ -461,9 +461,6 @@ public CaseSensitiveNucleotideSequence getIncompleteFeature(GeneFeature geneFeat lLast = leftParts.get(leftParts.size() - 1), rLast = rightParts.get(0); - assert !lLast.germline; - assert !rLast.germline; - if (lHit == rHit) { Alignment lAl = lHit.getAlignment(lLast.iTarget); if (lAl.getSequence1Range().contains(rPositionInRef)) { From 52e920f6ad74fd18505df441bf17a13c479d1c83 Mon Sep 17 00:00:00 2001 From: Dmitry Bolotin Date: Wed, 19 Dec 2018 01:55:39 +0300 Subject: [PATCH 06/19] Separation of integration tests into dedicated files. --- itests.sh | 52 ++++++++++++++++++++++++++++--------------------- itests/case1.sh | 6 ++++++ itests/case2.sh | 5 +++++ itests/case3.sh | 5 +++++ itests/case4.sh | 9 +++++++++ itests/case5.sh | 5 +++++ 6 files changed, 60 insertions(+), 22 deletions(-) create mode 100755 itests/case1.sh create mode 100755 itests/case2.sh create mode 100755 itests/case3.sh create mode 100755 itests/case4.sh create mode 100755 itests/case5.sh diff --git a/itests.sh b/itests.sh index 957f845c9..ddd017684 100755 --- a/itests.sh +++ b/itests.sh @@ -1,7 +1,6 @@ #!/bin/bash -set -e -set -o pipefail +set -eo pipefail # "Integration" tests for MiXCR # Test standard analysis pipeline results @@ -102,26 +101,35 @@ if [[ $create_standard_results == true ]]; then done fi -# UseCase 1 +function run_test() { + cd ${dir}/test_target + echo "========================" + echo "Running: $1" + echo "========================" + + if ../itests/${1}; then + echo "========================" + echo "$1 executed successfully" + else + echo "========================" + echo "$1 executed with error" + touch ${1}.error + fi + echo "========================" +} if [[ $run_tests == true ]]; then -# echo "Running test case 1" -# mixcr align -s hs -OvParameters.geneFeatureToAlign=VGeneWithP -OsaveOriginalReads=true test_R1.fastq test_R2.fastq case1.vdjca -# mixcr assemble case1.vdjca case1.clns -# -# mixcr exportAlignments -nFeatureImputed VDJRegion -descrsR1 -descrsR2 case1.vdjca case1.alignments.txt -# -# echo "Running test case 2" -# mixcr analyze shotgun -f --species hs --contig-assembly --impute-germline-on-export --starting-material rna test_R1.fastq test_R2.fastq case2 -# -# echo "Running test case 3" -# mixcr analyze amplicon --receptor-type tra --impute-germline-on-export -s hs --starting-material rna --contig-assembly --5-end v-primers --3-end j-primers --adapters no-adapters test_R1.fastq test_R2.fastq case3 - - echo "Running test case 4" - mixcr analyze amplicon --receptor-type tra --impute-germline-on-export -s hs --starting-material rna --contig-assembly --5-end v-primers --3-end j-primers --adapters adapters-present CD4M1_test_R1.fastq.gz CD4M1_test_R2.fastq.gz case4 - # Checking skip steps behaviour - mixcr analyze amplicon --receptor-type tra --impute-germline-on-export -s hs --starting-material rna --contig-assembly --5-end v-primers --3-end j-primers --adapters adapters-present CD4M1_test_R1.fastq.gz CD4M1_test_R2.fastq.gz case4 - - echo "Running test case 5" - mixcr analyze amplicon --receptor-type tra --align '-OseparateByC=true' --align '-OseparateByV=true' --align '-OseparateByJ=true' --impute-germline-on-export -s hs --starting-material rna --contig-assembly --5-end v-primers --3-end j-primers --adapters adapters-present CD4M1_test_R1.fastq.gz CD4M1_test_R2.fastq.gz case4 + run_test case1.sh + run_test case2.sh + run_test case3.sh + run_test case4.sh + run_test case5.sh + + if ls ${dir}/test_target/*.error 1> /dev/null 2>&1; then + echo "There are tests with errors." + exit 1 + else + echo "All tests finished successfully." + exit 0 + fi fi diff --git a/itests/case1.sh b/itests/case1.sh new file mode 100755 index 000000000..f33e082f6 --- /dev/null +++ b/itests/case1.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +set -euxo pipefail + +mixcr align -s hs -OvParameters.geneFeatureToAlign=VGeneWithP -OsaveOriginalReads=true test_R1.fastq test_R2.fastq case1.vdjca +mixcr assemble case1.vdjca case1.clns diff --git a/itests/case2.sh b/itests/case2.sh new file mode 100755 index 000000000..ca722808d --- /dev/null +++ b/itests/case2.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +set -euxo pipefail + +mixcr analyze shotgun -f --species hs --contig-assembly --impute-germline-on-export --starting-material rna test_R1.fastq test_R2.fastq case2 diff --git a/itests/case3.sh b/itests/case3.sh new file mode 100755 index 000000000..6d53f1f32 --- /dev/null +++ b/itests/case3.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +set -euxo pipefail + +mixcr analyze amplicon --receptor-type tra --impute-germline-on-export -s hs --starting-material rna --contig-assembly --5-end v-primers --3-end j-primers --adapters no-adapters test_R1.fastq test_R2.fastq case3 \ No newline at end of file diff --git a/itests/case4.sh b/itests/case4.sh new file mode 100755 index 000000000..f7e3bfcfd --- /dev/null +++ b/itests/case4.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +set -euxo pipefail + +# Checking generic pipeline with relatively big input files +mixcr analyze amplicon --receptor-type tra --impute-germline-on-export -s hs --starting-material rna --contig-assembly --5-end v-primers --3-end j-primers --adapters adapters-present CD4M1_test_R1.fastq.gz CD4M1_test_R2.fastq.gz case4 + +# Checking skip steps behaviour +mixcr analyze amplicon --receptor-type tra --impute-germline-on-export -s hs --starting-material rna --contig-assembly --5-end v-primers --3-end j-primers --adapters adapters-present CD4M1_test_R1.fastq.gz CD4M1_test_R2.fastq.gz case4 diff --git a/itests/case5.sh b/itests/case5.sh new file mode 100755 index 000000000..40da730c1 --- /dev/null +++ b/itests/case5.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +set -euxo pipefail + +mixcr analyze amplicon --receptor-type tra --assemble '-OseparateByC=true' --assemble '-OseparateByV=true' --assemble '-OseparateByJ=true' --impute-germline-on-export -s hs --starting-material rna --contig-assembly --5-end v-primers --3-end j-primers --adapters adapters-present CD4M1_test_R1.fastq.gz CD4M1_test_R2.fastq.gz case5 From 5c97c4843108ddfaefb39dcd729d5fe2f828af86 Mon Sep 17 00:00:00 2001 From: Stanislav Poslavsky Date: Wed, 19 Dec 2018 15:56:00 +0300 Subject: [PATCH 07/19] This fixes #476 --- .../com/milaboratory/mixcr/cli/CommandAnalyze.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandAnalyze.java b/src/main/java/com/milaboratory/mixcr/cli/CommandAnalyze.java index 0477b852f..279d4841f 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandAnalyze.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandAnalyze.java @@ -50,6 +50,10 @@ public String key() { public String description() { return description; } + + static _StartingMaterial parse(String v) { + return parse0(_StartingMaterial.class, v); + } } @@ -221,11 +225,17 @@ public void setChains(String chains) { this.chains = c.chains; } + public _StartingMaterial startingMaterial; + @Option(names = "--starting-material", completionCandidates = _StartingMaterialCandidates.class, description = "Starting material. @|bold Possible values: ${COMPLETION-CANDIDATES}|@", required = true) - public _StartingMaterial startingMaterial; + public void setStartingMaterial(String value) { + startingMaterial = _StartingMaterial.parse(value); + if (startingMaterial == null) + throwValidationException("Illegal value for --starting-material parameter: " + value); + } @Option(names = "--impute-germline-on-export", description = "Export germline segments") public boolean exportGermline = false; From 96f4c25c7d41b295ee88672f4e34c3cdeefcfde6 Mon Sep 17 00:00:00 2001 From: Dmitry Bolotin Date: Wed, 19 Dec 2018 21:58:13 +0300 Subject: [PATCH 08/19] This fixes #475 (#479) --- milib | 2 +- repseqio | 2 +- src/main/java/com/milaboratory/mixcr/cli/CommandAnalyze.java | 5 +++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/milib b/milib index d6221957b..59d6e7551 160000 --- a/milib +++ b/milib @@ -1 +1 @@ -Subproject commit d6221957b45a6c57d74744177feef5b68c86829a +Subproject commit 59d6e75517ca0e6cc26ef44db46c836ffc55fe79 diff --git a/repseqio b/repseqio index bf6cd3bc9..8dc2583e6 160000 --- a/repseqio +++ b/repseqio @@ -1 +1 @@ -Subproject commit bf6cd3bc93bb1c3a6d9796587d93c60a8de9dbe6 +Subproject commit 8dc2583e61742a3f3a8bfc5f0ffbeb9dd454e9bc diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandAnalyze.java b/src/main/java/com/milaboratory/mixcr/cli/CommandAnalyze.java index 279d4841f..73f13a70a 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandAnalyze.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandAnalyze.java @@ -1,6 +1,7 @@ package com.milaboratory.mixcr.cli; import com.milaboratory.cli.ACommandWithOutput; +import com.milaboratory.cli.ACommandWithSmartOverwrite; import com.milaboratory.mixcr.assembler.CloneAssemblerParameters; import com.milaboratory.mixcr.vdjaligners.VDJCAlignerParameters; import io.repseq.core.Chains; @@ -269,8 +270,8 @@ public String getReport() { private T inheritOptionsAndValidate(T parameters) { if (forceOverwrite) parameters.forceOverwrite = true; - if (parameters instanceof ACommandWithSmartOverwriteMiXCR) - ((ACommandWithSmartOverwriteMiXCR) parameters).overwriteIfRequired = true; + if (parameters instanceof ACommandWithSmartOverwrite) + ((ACommandWithSmartOverwrite) parameters).overwriteIfRequired = true; parameters.quiet = true; parameters.validate(); From a8f470aa8abbdcfb46b21ef0ea7033761831b29b Mon Sep 17 00:00:00 2001 From: Dmitry Bolotin Date: Wed, 19 Dec 2018 22:08:17 +0300 Subject: [PATCH 09/19] Fix for #468 (#477) * WIP * Possible fix for #468. * Final fix for wrong clonotype sorting. This fixes #468 * Some comments. Research done. This fix requires integration test to validate wrong behaviour. Will be commited in separate PR. * Test. * Additional fix. --- itests.sh | 13 ++-- itests/case5.sh | 22 ++++++- .../mixcr/assembler/AssemblerUtils.java | 18 ++++++ .../mixcr/assembler/CloneAssembler.java | 62 +++++++++++++++++-- 4 files changed, 104 insertions(+), 11 deletions(-) diff --git a/itests.sh b/itests.sh index ddd017684..7194da324 100755 --- a/itests.sh +++ b/itests.sh @@ -48,6 +48,8 @@ case $os in ;; esac +tests=("case1" "case2" "case3" "case4" "case5") + create_standard_results=false run_tests=false while [[ $# > 0 ]] @@ -61,6 +63,9 @@ do test) run_tests=true ;; + case*) + tests=("$key") + ;; *) echo "Unknown option $key"; exit 1 @@ -119,11 +124,9 @@ function run_test() { } if [[ $run_tests == true ]]; then - run_test case1.sh - run_test case2.sh - run_test case3.sh - run_test case4.sh - run_test case5.sh + for testName in ${tests[@]} ; do + run_test "${testName}.sh" + done if ls ${dir}/test_target/*.error 1> /dev/null 2>&1; then echo "There are tests with errors." diff --git a/itests/case5.sh b/itests/case5.sh index 40da730c1..c2ffcd142 100755 --- a/itests/case5.sh +++ b/itests/case5.sh @@ -2,4 +2,24 @@ set -euxo pipefail -mixcr analyze amplicon --receptor-type tra --assemble '-OseparateByC=true' --assemble '-OseparateByV=true' --assemble '-OseparateByJ=true' --impute-germline-on-export -s hs --starting-material rna --contig-assembly --5-end v-primers --3-end j-primers --adapters adapters-present CD4M1_test_R1.fastq.gz CD4M1_test_R2.fastq.gz case5 +gzip -dc CD4M1_test_R1.fastq.gz CD4M1_test_R1.fastq.gz | tr 'N' 'A' > case5_R1.fastq +gzip -dc CD4M1_test_R2.fastq.gz CD4M1_test_R2.fastq.gz | tr 'N' 'A' > case5_R2.fastq + +mixcr analyze amplicon --assemble '-OseparateByC=true' --assemble '-OseparateByV=true' --assemble '-OseparateByJ=true' --impute-germline-on-export -s hs --starting-material rna --contig-assembly --5-end v-primers --3-end j-primers --adapters adapters-present case5_R1.fastq case5_R2.fastq case5 +#mixcr analyze amplicon --assemble '-OcloneClusteringParameters=null' --impute-germline-on-export -s hs --starting-material rna --contig-assembly --5-end v-primers --3-end j-primers --adapters adapters-present case5_R1.fastq case5_R2.fastq case5 + +mixcr exportAlignments -f -readIds -cloneIdWithMappingType case5.clna case5.als.txt + +sort --field-separator='\t' --key=1 -n case5.als.txt | tail -n +2 > case5.als.sorted.txt + +lines=$(cat case5.als.sorted.txt | wc -l) + +head -n $((lines/2)) case5.als.sorted.txt | cut -f2 > case5.als.sorted.1.txt +tail -n $((lines/2)) case5.als.sorted.txt | cut -f2 > case5.als.sorted.2.txt + +if cmp case5.als.sorted.1.txt case5.als.sorted.2.txt; then + echo "All good" +else + echo "Results are different" + diff case5.als.sorted.1.txt case5.als.sorted.2.txt +fi diff --git a/src/main/java/com/milaboratory/mixcr/assembler/AssemblerUtils.java b/src/main/java/com/milaboratory/mixcr/assembler/AssemblerUtils.java index db605c0d4..122f4eeaa 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/AssemblerUtils.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/AssemblerUtils.java @@ -42,6 +42,17 @@ public static long mappingVariantsCount(int numberOfBadPoints, int maxAllowedMut return variants; } + /** + * Calculates maximal number of registered mismatches for the number of possible mismatch positions, to control the + * probability of non-specific mapping in cases with big number of low quality positions. Maximal probability of + * random mapping is defined through the numberOfVariants parameter. + * + * Basically, if the target read has only one low quality position and you found the clonotype with the different + * nucleotide in exactly this position, it is not the same as if the sequence had all low quality positions and you + * found the clonotype differing in one of them. In the first case you had only 3 possible sequences to match with, + * and in the second case - 3*L, where L is the length of the clonal sequence. To address for this effect, MiXCR + * controls the number of possible matching sequence, instead of a raw number of allowed mismatches. + */ public static class MappingThresholdCalculator { final int[] values; final int oneThreshold; @@ -61,6 +72,13 @@ public MappingThresholdCalculator(long numberOfVariants, int maxN) { this.values = thresholds.toArray(); } + /** + * Returns maximal number of allowed mismatches to keep the number of possible mapping variants lower then the + * value of numberOfVariants parameter, provided in constructor. + * + * @param N number of low quality positions + * @return + */ public int getThreshold(int N) { if (N < values.length) return values[N]; diff --git a/src/main/java/com/milaboratory/mixcr/assembler/CloneAssembler.java b/src/main/java/com/milaboratory/mixcr/assembler/CloneAssembler.java index d4955dc34..245932a7b 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/CloneAssembler.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/CloneAssembler.java @@ -48,6 +48,7 @@ import com.milaboratory.util.Factory; import com.milaboratory.util.HashFunctions; import com.milaboratory.util.RandomUtil; +import gnu.trove.iterator.TIntIntIterator; import gnu.trove.iterator.TObjectFloatIterator; import gnu.trove.map.hash.TIntIntHashMap; import gnu.trove.map.hash.TObjectFloatHashMap; @@ -61,6 +62,31 @@ import static io.repseq.core.GeneFeature.*; +/** + * Clone assembly steps: + * + * - Initial clone assembly: + * Iteration over alignments to assemble clonotypes into {@link CloneAccumulatorContainer} (groups of clonotypes with the same + * clonal sequence). Each {@link CloneAccumulatorContainer} consists of a map {@link VJCSignature} -> {@link CloneAccumulator}. + * {@link CloneAccumulatorContainer} may be populated with several {@link CloneAccumulator} if one of the + * {@link CloneAssemblerParameters#separateByV} / J / C is true, otherwise each {@link CloneAccumulatorContainer} + * contains exactly one {@link CloneAccumulator}. + * Alignments having nucleotides with quality scores lower then the threshold, are deferred for processing in the mapping step, + * by saving their ids into special on-disk (to save memory) log structure, that will be used on the mapping step to pick only + * alignments, skipped on this step. + * Initial clone assembly is performed by pushing clonotypes into {@link InitialAssembler}. + * + * - Mapping low quality reads: + * Second iteration over alignments, only alignments deferred on the initial assemble step are taken into processing here. + * Clonal sequence are mapped with the algorithm implemented in {@link DeferredAlignmentsMapper}. + * + * - Pre-clustering. This step performs "clustering" between clonotypes with the same clonal sequence (clonotypes inside + * the same {@link CloneAccumulatorContainer}). To reduce artificial diversity due to the mis-identification of V/J/C genes, + * both because of experimental artifacts and alignment errors. This step do nothing if + * + * - Clustering. Grouping of clonotypes with similar clonal sequences, and high ratio between their counts, to eliminate the + * artificial diversity. + */ public final class CloneAssembler implements CanReportProgress, AutoCloseable { final CloneAssemblerParameters parameters; // Accumulators and generators (atomics) @@ -74,6 +100,10 @@ public final class CloneAssembler implements CanReportProgress, AutoCloseable { private final List cloneList = new ArrayList<>(); final AssemblerEventLogger globalLogger; private AssemblerEventLogger deferredAlignmentsLogger; + /** + * Mapping between initial clonotype id (one that was written to globalLogger) and final clonotype id, + * to be used in alignment-to-clone mapping tracking + */ private TIntIntHashMap idMapping; private volatile SequenceTreeMap> mappingTree; private ArrayList clusteredClonesAccumulators; @@ -269,7 +299,9 @@ public NucleotideSequence getSequence(CloneAccumulator object) { final Cluster cluster = clusters.get(i); final CloneAccumulator head = cluster.getHead(); idMapping.put(head.getCloneIndex(), i); + // i - new index of head clone head.setCloneIndex(i); + // k - index to be set for all child clonotypes final int k = ~i; cluster.processAllChildren(new TObjectProcedure>() { @Override @@ -283,6 +315,7 @@ public boolean execute(Cluster object) { }); clusteredClonesAccumulators.add(head); } + this.progressReporter = null; } @@ -417,9 +450,13 @@ private final class DeferredAlignmentsMapper implements VoidProcessor> iterator = @@ -435,9 +472,9 @@ public void process(VDJCAlignments input) { long count = 0; while ((assembledClones = iterator.next()) != null) for (CloneAccumulatorContainer container : assembledClones) { + CloneAccumulator acc = container.accumulators.get(extractSignature(input)); // Version of isCompatible without mutations is used here because // ony substitutions possible in this place - CloneAccumulator acc = container.accumulators.get(extractSignature(input)); if (acc != null && clonalSequence.isCompatible(acc.getSequence())) { if (minMismatches == -1) minMismatches = iterator.getMismatches(); @@ -521,17 +558,32 @@ void buildClones() { new CloneFactory(parameters.getCloneFactoryParameters(), parameters.getAssemblingFeatures(), usedGenes, featuresToAlign); Collection source; - if (clusteredClonesAccumulators != null) + if (clusteredClonesAccumulators != null && + // addReadsCountOnClustering=true may change clone counts + // This fixes #468 + // If AddReadsCountOnClustering is enabled resorting will be performed for the dataset + !parameters.isAddReadsCountOnClustering()) source = clusteredClonesAccumulators; else { - idMapping = new TIntIntHashMap(); + TIntIntHashMap newIdMapping = new TIntIntHashMap(); //sort clones by count (if not yet sorted by clustering) - CloneAccumulator[] sourceArray = cloneList.toArray(new CloneAccumulator[cloneList.size()]); + CloneAccumulator[] sourceArray = clusteredClonesAccumulators == null + ? cloneList.toArray(new CloneAccumulator[cloneList.size()]) + : clusteredClonesAccumulators.toArray(new CloneAccumulator[clusteredClonesAccumulators.size()]); Arrays.sort(sourceArray, CLONE_ACCUMULATOR_COMPARATOR); for (int i = 0; i < sourceArray.length; i++) { - idMapping.put(sourceArray[i].getCloneIndex(), i); + newIdMapping.put(sourceArray[i].getCloneIndex(), i); sourceArray[i].setCloneIndex(i); } + if (idMapping == null) + idMapping = newIdMapping; + else { + for (TIntIntIterator it = idMapping.iterator(); it.hasNext(); ) { + it.advance(); + if (newIdMapping.containsKey(it.value())) + it.setValue(newIdMapping.get(it.value())); + } + } source = Arrays.asList(sourceArray); } realClones = new Clone[source.size()]; From 90ba34a24a396a9045cb960bcb21df80476463ad Mon Sep 17 00:00:00 2001 From: Dmitry Bolotin Date: Wed, 19 Dec 2018 22:44:55 +0300 Subject: [PATCH 10/19] Possible fix for integration test syntax, current changelog, this year in license in README. --- CHANGELOG_CURRENT | 4 ++++ README.md | 2 +- itests/case5.sh | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG_CURRENT b/CHANGELOG_CURRENT index e69de29bb..9f9264cff 100644 --- a/CHANGELOG_CURRENT +++ b/CHANGELOG_CURRENT @@ -0,0 +1,4 @@ +Fixed problem with possibly incorrect clone-to-alignment mapping and clonotype sorting. The problem manifests itself in rare cercumstances, with `-OseparateByV/J/C=true` (Special thanks to Victor Greiff @GreiffLab for finding the bug and helping with testing) +Integration with new MiLib abstraction for CLI, to automatically infer when reanalysis is nedded and when not (this mechanism extracts paramteres from the target files, and checks if current command line sets the same options, if the options are the same, mixcr skips the step, otherwize restarts the analysis) +`analyze` command now is case-insensitive for all options like `--starting-material` +Fixed exception arising in rare cases with sequence imputation on the export step \ No newline at end of file diff --git a/README.md b/README.md index 63b7ac16d..73285832d 100644 --- a/README.md +++ b/README.md @@ -104,7 +104,7 @@ To build MiXCR from source: ## License -Copyright (c) 2014-2015, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail +Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail (here and after addressed as Inventors) All Rights Reserved diff --git a/itests/case5.sh b/itests/case5.sh index c2ffcd142..d264ab7f1 100755 --- a/itests/case5.sh +++ b/itests/case5.sh @@ -10,7 +10,7 @@ mixcr analyze amplicon --assemble '-OseparateByC=true' --assemble '-OseparateByV mixcr exportAlignments -f -readIds -cloneIdWithMappingType case5.clna case5.als.txt -sort --field-separator='\t' --key=1 -n case5.als.txt | tail -n +2 > case5.als.sorted.txt +sort -t $'\t' --key=1 -n case5.als.txt | tail -n +2 > case5.als.sorted.txt lines=$(cat case5.als.sorted.txt | wc -l) From 7e26a26d7c0ea47426bc824e2fd68aa049dcbc9f Mon Sep 17 00:00:00 2001 From: Stanislav Poslavsky Date: Thu, 27 Dec 2018 13:21:38 +0300 Subject: [PATCH 11/19] This fixes #481 --- src/main/java/com/milaboratory/mixcr/basictypes/ClnAReader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/ClnAReader.java b/src/main/java/com/milaboratory/mixcr/basictypes/ClnAReader.java index f78649db3..01ef06ef8 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/ClnAReader.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/ClnAReader.java @@ -156,7 +156,7 @@ public ClnAReader(Path path, VDJCLibraryRegistry libraryRegistry, int chunkSize) long previousValue = 0; long totalAlignmentsCount = 0L; for (int i = 0; i < numberOfClones + 2; i++) { - previousValue = index[i] = previousValue + input.readVarInt(); + previousValue = index[i] = previousValue + input.readVarLong(); totalAlignmentsCount += counts[i] = input.readVarLong(); } this.totalAlignmentsCount = totalAlignmentsCount; From 889576f19a2847e6611563e4e9eb282024724b87 Mon Sep 17 00:00:00 2001 From: Stanislav Poslavsky Date: Thu, 27 Dec 2018 13:45:11 +0300 Subject: [PATCH 12/19] This fixes #465 --- .../com/milaboratory/mixcr/cli/CommandAlignmentsDiff.java | 4 ++-- .../java/com/milaboratory/mixcr/cli/CommandClonesDiff.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandAlignmentsDiff.java b/src/main/java/com/milaboratory/mixcr/cli/CommandAlignmentsDiff.java index 7594884d7..85aef6807 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandAlignmentsDiff.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandAlignmentsDiff.java @@ -29,8 +29,8 @@ public class CommandAlignmentsDiff extends ACommandWithOutputMiXCR { @Parameters(description = "input_file2", index = "1") public String in2; - @Parameters(description = "report", index = "2") - public String report; + @Parameters(description = "report", index = "2", arity = "0..1") + public String report = null; @Option(names = {"-o1", "--only-in-first"}, description = "output for alignments contained only " + "in the first .vdjca file") diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandClonesDiff.java b/src/main/java/com/milaboratory/mixcr/cli/CommandClonesDiff.java index 698b77e62..ecdd34c0b 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandClonesDiff.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandClonesDiff.java @@ -25,7 +25,7 @@ public class CommandClonesDiff extends ACommandWithOutputMiXCR { @Parameters(description = "input2.clns", index = "1") public String in2; - @Parameters(description = "[report]", index = "2") + @Parameters(description = "[report]", index = "2", arity = "0..1") public String report = null; @Option(names = {"-v"}, description = "Use V gene in clone comparison (include it as a clone key along " + From 82d93e09eb5ff309aa6c7137964e5dee733bea99 Mon Sep 17 00:00:00 2001 From: Stanislav Poslavsky Date: Thu, 27 Dec 2018 14:36:09 +0300 Subject: [PATCH 13/19] Allow for custom `cloneClusteringParameters.searchParameters` in assemble --- .../com/milaboratory/mixcr/cli/JsonOverrider.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/com/milaboratory/mixcr/cli/JsonOverrider.java b/src/main/java/com/milaboratory/mixcr/cli/JsonOverrider.java index 33a38f22e..bf82f3da5 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/JsonOverrider.java +++ b/src/main/java/com/milaboratory/mixcr/cli/JsonOverrider.java @@ -124,6 +124,14 @@ public static boolean override0(JsonNode node, String path, String value) { overrideWarn(fieldName, value); return setToNull; } + + JsonNode valueTree = null; + if (value.startsWith("{") && value.endsWith("}")) { + try { + valueTree = GlobalObjectMappers.ONE_LINE.readTree(value); + } catch (Throwable ignored) {} + } + if (valueNode instanceof ArrayNode) { ArrayNode arrayNode = (ArrayNode) valueNode; List oldValues = new ArrayList<>(); @@ -150,6 +158,9 @@ public static boolean override0(JsonNode node, String path, String value) { if (settingTheSame) overrideWarn(fieldName, value); return true; + } else if (valueTree != null) { + oNode.set(fieldName, valueTree); + return true; } else if (valueNode.isTextual()) { if (valueNode.asText().equals(value)) overrideWarn(fieldName, value); From 20d981022d4902056dd7107c8a67053837fafd99 Mon Sep 17 00:00:00 2001 From: Dmitry Bolotin Date: Sun, 6 Jan 2019 18:30:51 +0300 Subject: [PATCH 14/19] Cosmetic refactoring. --- ...dExportClonesReads.java => CommandExportReadsForClones.java} | 2 +- src/main/java/com/milaboratory/mixcr/cli/Main.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename src/main/java/com/milaboratory/mixcr/cli/{CommandExportClonesReads.java => CommandExportReadsForClones.java} (98%) diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandExportClonesReads.java b/src/main/java/com/milaboratory/mixcr/cli/CommandExportReadsForClones.java similarity index 98% rename from src/main/java/com/milaboratory/mixcr/cli/CommandExportClonesReads.java rename to src/main/java/com/milaboratory/mixcr/cli/CommandExportReadsForClones.java index b96d018d5..2c4eb417f 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandExportClonesReads.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandExportReadsForClones.java @@ -32,7 +32,7 @@ "Output file name will be transformed into '_R1'/'_R2' pair in case of paired end reads. Use cloneId = -1 to " + "export alignments not assigned to any clone (not assembled). If no clone ids are specified (only input " + "and output filenames are specified) all reads assigned to clonotypes will be exported.") -public class CommandExportClonesReads extends ACommandWithOutputMiXCR { +public class CommandExportReadsForClones extends ACommandWithOutputMiXCR { @Parameters(index = "0", description = "input_file.clna") public String in; diff --git a/src/main/java/com/milaboratory/mixcr/cli/Main.java b/src/main/java/com/milaboratory/mixcr/cli/Main.java index d3d072fee..25807276c 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/Main.java +++ b/src/main/java/com/milaboratory/mixcr/cli/Main.java @@ -118,7 +118,7 @@ public static CommandLine mkCmd() { .addSubcommand("exportClones", CommandExport.mkClonesSpec()) .addSubcommand("exportClonesPretty", CommandExportClonesPretty.class) - .addSubcommand("exportReadsForClones", CommandExportClonesReads.class) + .addSubcommand("exportReadsForClones", CommandExportReadsForClones.class) .addSubcommand("exportReads", CommandExportReads.class) .addSubcommand("mergeAlignments", CommandMergeAlignments.class) From 12a4e652044c4e5854b129790060fe822e92a4e6 Mon Sep 17 00:00:00 2001 From: Dmitry Bolotin Date: Sun, 6 Jan 2019 18:40:15 +0300 Subject: [PATCH 15/19] Fix for zero-length blocks in clna files. This fixes #482 --- CHANGELOG_CURRENT | 3 ++- .../mixcr/basictypes/AlignmentsIO.java | 5 +++++ .../basictypes/BasicVDJCAlignmentReader.java | 6 +++--- .../BasicVDJCAlignmentWriterFactory.java | 15 +++++++++++---- .../milaboratory/mixcr/basictypes/ClnAWriter.java | 12 +++++++++--- 5 files changed, 30 insertions(+), 11 deletions(-) diff --git a/CHANGELOG_CURRENT b/CHANGELOG_CURRENT index 9f9264cff..8bae16d77 100644 --- a/CHANGELOG_CURRENT +++ b/CHANGELOG_CURRENT @@ -1,4 +1,5 @@ -Fixed problem with possibly incorrect clone-to-alignment mapping and clonotype sorting. The problem manifests itself in rare cercumstances, with `-OseparateByV/J/C=true` (Special thanks to Victor Greiff @GreiffLab for finding the bug and helping with testing) +Fixed problem with possibly incorrect clone-to-alignment mapping and clonotype sorting. The problem manifests itself in rare cercumstances, with `-OseparateByV/J/C=true` (special thanks to Victor Greiff @GreiffLab for finding the bug and helping with testing) +Fixes exception while reading alignments from `clna` files (thanks to Dr. Ma @JohnMCMa for finding the bug and providing the data to reproduce it) Integration with new MiLib abstraction for CLI, to automatically infer when reanalysis is nedded and when not (this mechanism extracts paramteres from the target files, and checks if current command line sets the same options, if the options are the same, mixcr skips the step, otherwize restarts the analysis) `analyze` command now is case-insensitive for all options like `--starting-material` Fixed exception arising in rare cases with sequence imputation on the export step \ No newline at end of file diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/AlignmentsIO.java b/src/main/java/com/milaboratory/mixcr/basictypes/AlignmentsIO.java index 277a143ff..4a1270622 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/AlignmentsIO.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/AlignmentsIO.java @@ -135,6 +135,8 @@ public static long readLongBE(ByteBuffer buffer) { */ public static void writeBlock(Collection alignments, PrimitivOState outputState, LZ4Compressor compressor, XXHash32 xxHash32, BlockBuffers buffers) { + if (alignments.size() == 0) + throw new IllegalArgumentException("Writing empty block."); buffers.ensureRawBufferSize(alignments.size() * AVERAGE_ALIGNMENT_SIZE); ByteArrayDataOutput dataOutput = new ByteArrayDataOutput(buffers.rawBuffer); @@ -280,6 +282,9 @@ public static List readBlock(BufferReader reader, PrimitivIState if (checksum != xxHash32.hash(buffers.rawBuffer, 0, rawSize, HASH_SEED)) throw new RuntimeException("Checksum verification failed. Malformed file."); + if (numberOfAlignments == 0) + throw new IllegalArgumentException("Zero-alignments block."); + PrimitivI input = inputState.createPrimitivI(new ByteBufferDataInputAdapter( ByteBuffer.wrap(buffers.rawBuffer, 0, rawSize))); diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/BasicVDJCAlignmentReader.java b/src/main/java/com/milaboratory/mixcr/basictypes/BasicVDJCAlignmentReader.java index 2024585f1..3881c1dce 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/BasicVDJCAlignmentReader.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/BasicVDJCAlignmentReader.java @@ -120,12 +120,12 @@ public synchronized VDJCAlignments take() { if (als == null) { closed = true; return null; - } else + } else { alignmentsIterator = als.iterator(); + assert alignmentsIterator.hasNext(); + } } - assert alignmentsIterator.hasNext(); - return alignmentsIterator.next(); } catch (IOException e) { throw new RuntimeException(e); diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/BasicVDJCAlignmentWriterFactory.java b/src/main/java/com/milaboratory/mixcr/basictypes/BasicVDJCAlignmentWriterFactory.java index fcfd75744..bc31fe4c4 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/BasicVDJCAlignmentWriterFactory.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/BasicVDJCAlignmentWriterFactory.java @@ -198,8 +198,13 @@ public synchronized void writeAsync(List alignments) { } } - private void waitPreviousBlock() throws InterruptedException { - lastBlockWriteLatch.await(); + public void waitPreviousBlock() { + try { + lastBlockWriteLatch.await(); + } catch (InterruptedException e) { + error = true; + throw new RuntimeException(e); + } } /** @@ -220,7 +225,7 @@ public synchronized void writeSync(List alignments) { // Write buffers.writeTo(outputStream); - } catch (IOException | InterruptedException e) { + } catch (IOException e) { error = true; throw new RuntimeException(e); } @@ -237,7 +242,7 @@ public void close() { outputStream.close(); closed.countDown(); - } catch (InterruptedException | IOException e) { + } catch (IOException e) { throw new RuntimeException(e); } } @@ -277,6 +282,8 @@ private final static class BlockToEncode { public BlockToEncode(List content, CountDownLatch previousBlockWriteLatch, PrimitivOState outputState, OutputStream outputStream) { + if (content != null && content.size() == 0) + throw new IllegalArgumentException("Zero length block."); this.content = content; this.previousBlockWriteLatch = previousBlockWriteLatch; this.outputState = outputState; diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/ClnAWriter.java b/src/main/java/com/milaboratory/mixcr/basictypes/ClnAWriter.java index ec6f8c593..e80db8050 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/ClnAWriter.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/ClnAWriter.java @@ -293,18 +293,24 @@ public synchronized void writeAlignmentsAndIndex() { List block = new ArrayList<>(); // Writing alignments and writing indices for (VDJCAlignments alignments : CUtils.it(sortedAlignments)) { + boolean blockFlushed = false; + // Block is full if (block.size() == AlignmentsIO.DEFAULT_ALIGNMENTS_IN_BLOCK) { writer.writeAsync(block); block = new ArrayList<>(); + blockFlushed = true; } // End of clone if (currentCloneIndex != alignments.cloneIndex) { - // This will also wait for the previous block (if async write was issued) to be flushed to the stream - writer.writeSync(block); - block = new ArrayList<>(); + if (!blockFlushed) { + // This will also wait for the previous block (if async write was issued) to be flushed to the stream + writer.writeSync(block); + block = new ArrayList<>(); + } else + writer.waitPreviousBlock(); ++currentCloneIndex; if (currentCloneIndex != alignments.cloneIndex) From 28484a05bb087ca3ea7512fe5c7b4902e3a0786e Mon Sep 17 00:00:00 2001 From: Dmitry Bolotin Date: Wed, 16 Jan 2019 00:03:26 +0300 Subject: [PATCH 16/19] Chain distribution statistics in assemble. --- CHANGELOG_CURRENT | 1 + .../java/com/milaboratory/mixcr/cli/CloneAssemblerReport.java | 3 +++ 2 files changed, 4 insertions(+) diff --git a/CHANGELOG_CURRENT b/CHANGELOG_CURRENT index 8bae16d77..9bed190a9 100644 --- a/CHANGELOG_CURRENT +++ b/CHANGELOG_CURRENT @@ -1,5 +1,6 @@ Fixed problem with possibly incorrect clone-to-alignment mapping and clonotype sorting. The problem manifests itself in rare cercumstances, with `-OseparateByV/J/C=true` (special thanks to Victor Greiff @GreiffLab for finding the bug and helping with testing) Fixes exception while reading alignments from `clna` files (thanks to Dr. Ma @JohnMCMa for finding the bug and providing the data to reproduce it) Integration with new MiLib abstraction for CLI, to automatically infer when reanalysis is nedded and when not (this mechanism extracts paramteres from the target files, and checks if current command line sets the same options, if the options are the same, mixcr skips the step, otherwize restarts the analysis) +Report for the `assemble` command now contains chain distribution statistics `analyze` command now is case-insensitive for all options like `--starting-material` Fixed exception arising in rare cases with sequence imputation on the export step \ No newline at end of file diff --git a/src/main/java/com/milaboratory/mixcr/cli/CloneAssemblerReport.java b/src/main/java/com/milaboratory/mixcr/cli/CloneAssemblerReport.java index 0b4539f09..864d24fda 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CloneAssemblerReport.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CloneAssemblerReport.java @@ -249,5 +249,8 @@ public void writeReport(ReportHelper helper) { .writeField("Clonotypes eliminated by PCR error correction", clonesClustered.get()) .writeField("Clonotypes dropped as low quality", clonesDropped.get()) .writeField("Clonotypes pre-clustered due to the similar VJC-lists", clonesPreClustered.get()); + + // Writing distribution by chains + chainStats.writeReport(helper); } } From 06d5523f238d217f842e7fe42fe0dcfb6a672e5f Mon Sep 17 00:00:00 2001 From: Bolotin Dmitriy Date: Wed, 30 Jan 2019 21:41:22 +0300 Subject: [PATCH 17/19] Copyright + minor pre-release pom corrections. --- milib | 2 +- pom.xml | 33 +++++++++---------- repseqio | 2 +- .../assembler/AlignmentsMappingMerger.java | 29 ++++++++++++++++ .../mixcr/assembler/AlignmentsProvider.java | 2 +- .../mixcr/assembler/AssembledReadsPort.java | 2 +- .../mixcr/assembler/AssemblerEvent.java | 2 +- .../mixcr/assembler/AssemblerEventLogger.java | 2 +- .../mixcr/assembler/AssemblerUtils.java | 2 +- .../mixcr/assembler/CloneAccumulator.java | 2 +- .../mixcr/assembler/CloneAssembler.java | 2 +- .../assembler/CloneAssemblerListener.java | 2 +- .../assembler/CloneAssemblerParameters.java | 2 +- .../CloneAssemblerParametersPresets.java | 2 +- .../mixcr/assembler/CloneAssemblerRunner.java | 2 +- .../assembler/CloneClusteringParameters.java | 2 +- .../assembler/CloneClusteringStrategy.java | 2 +- .../mixcr/assembler/CloneFactory.java | 2 +- .../assembler/CloneFactoryParameters.java | 2 +- .../mixcr/assembler/ClusteringFilter.java | 2 +- .../assembler/DClonalAlignerParameters.java | 2 +- .../mixcr/assembler/ReadToCloneMapping.java | 2 +- .../RelativeConcentrationFilter.java | 2 +- .../VDJCAlignmentsReaderWrapper.java | 2 +- .../assembler/VJCClonalAlignerParameters.java | 2 +- .../assembler/fullseq/FullSeqAssembler.java | 29 ++++++++++++++++ .../fullseq/FullSeqAssemblerParameters.java | 29 ++++++++++++++++ .../fullseq/FullSeqAssemblerReport.java | 29 ++++++++++++++++ .../assembler/fullseq/PointSequence.java | 29 ++++++++++++++++ .../mixcr/basictypes/AlignmentsIO.java | 2 +- .../basictypes/BasicVDJCAlignmentReader.java | 2 +- .../BasicVDJCAlignmentWriterFactory.java | 2 +- .../mixcr/basictypes/ClnAReader.java | 7 ++-- .../mixcr/basictypes/ClnAWriter.java | 7 ++-- .../mixcr/basictypes/ClnsReader.java | 29 ++++++++++++++++ .../mixcr/basictypes/ClnsWriter.java | 29 ++++++++++++++++ .../mixcr/basictypes/ClonalSequence.java | 2 +- .../basictypes/ClonalUpdatableParameters.java | 2 +- .../milaboratory/mixcr/basictypes/Clone.java | 2 +- .../mixcr/basictypes/CloneSet.java | 2 +- .../mixcr/basictypes/CloneSetIO.java | 2 +- .../mixcr/basictypes/CompatibilityIO.java | 2 +- .../mixcr/basictypes/HasFeatureToAlign.java | 2 +- .../mixcr/basictypes/HasGene.java | 2 +- .../com/milaboratory/mixcr/basictypes/IO.java | 2 +- .../milaboratory/mixcr/basictypes/IOUtil.java | 2 +- .../milaboratory/mixcr/basictypes/Merger.java | 2 +- .../PipelineConfigurationReaderMiXCR.java | 29 ++++++++++++++++ .../mixcr/basictypes/SequenceHistory.java | 29 ++++++++++++++++ .../mixcr/basictypes/TargetPartitioning.java | 2 +- .../mixcr/basictypes/VDJCAlignments.java | 2 +- .../basictypes/VDJCAlignmentsFormatter.java | 2 +- .../basictypes/VDJCAlignmentsReader.java | 2 +- .../basictypes/VDJCAlignmentsWriter.java | 2 +- .../basictypes/VDJCAlignmentsWriterI.java | 2 +- .../mixcr/basictypes/VDJCHit.java | 2 +- .../mixcr/basictypes/VDJCObject.java | 2 +- .../basictypes/VDJCPartitionedSequence.java | 2 +- .../milaboratory/mixcr/cli/ACommandMiXCR.java | 29 ++++++++++++++++ .../mixcr/cli/ACommandSimpleExportMiXCR.java | 29 ++++++++++++++++ .../mixcr/cli/ACommandWithOutputMiXCR.java | 29 ++++++++++++++++ .../cli/ACommandWithSmartOverwriteMiXCR.java | 29 ++++++++++++++++ ...ithSmartOverwriteWithSingleInputMiXCR.java | 29 ++++++++++++++++ .../mixcr/cli/AbstractCommandReport.java | 2 +- .../milaboratory/mixcr/cli/AlignerReport.java | 2 +- .../mixcr/cli/ChainUsageStats.java | 2 +- .../mixcr/cli/CloneAssemblerReport.java | 2 +- .../milaboratory/mixcr/cli/CommandAlign.java | 29 ++++++++++++++++ .../mixcr/cli/CommandAlignmentsDiff.java | 29 ++++++++++++++++ .../mixcr/cli/CommandAlignmentsStats.java | 29 ++++++++++++++++ .../mixcr/cli/CommandAnalyze.java | 29 ++++++++++++++++ .../mixcr/cli/CommandAssemble.java | 29 ++++++++++++++++ .../mixcr/cli/CommandAssembleContigs.java | 29 ++++++++++++++++ .../cli/CommandAssemblePartialAlignments.java | 29 ++++++++++++++++ .../mixcr/cli/CommandClonesDiff.java | 29 ++++++++++++++++ .../milaboratory/mixcr/cli/CommandExport.java | 29 ++++++++++++++++ .../cli/CommandExportAlignmentsPretty.java | 29 ++++++++++++++++ .../mixcr/cli/CommandExportClonesPretty.java | 29 ++++++++++++++++ .../mixcr/cli/CommandExportReads.java | 29 ++++++++++++++++ .../cli/CommandExportReadsForClones.java | 29 ++++++++++++++++ .../milaboratory/mixcr/cli/CommandExtend.java | 29 ++++++++++++++++ .../mixcr/cli/CommandFilterAlignments.java | 29 ++++++++++++++++ .../milaboratory/mixcr/cli/CommandInfo.java | 29 ++++++++++++++++ .../mixcr/cli/CommandListLibraries.java | 29 ++++++++++++++++ .../milaboratory/mixcr/cli/CommandMain.java | 29 ++++++++++++++++ .../mixcr/cli/CommandMergeAlignments.java | 29 ++++++++++++++++ .../mixcr/cli/CommandPipelineInfo.java | 29 ++++++++++++++++ .../milaboratory/mixcr/cli/CommandReport.java | 2 +- .../milaboratory/mixcr/cli/CommandSlice.java | 29 ++++++++++++++++ .../mixcr/cli/CommandSortAlignments.java | 29 ++++++++++++++++ .../mixcr/cli/CommandVersionInfo.java | 29 ++++++++++++++++ .../mixcr/cli/CommonDescriptions.java | 2 +- .../milaboratory/mixcr/cli/CommonOptions.java | 29 ++++++++++++++++ .../milaboratory/mixcr/cli/JsonOverrider.java | 2 +- .../java/com/milaboratory/mixcr/cli/Main.java | 29 ++++++++++++++++ .../milaboratory/mixcr/cli/MiXCRCommand.java | 29 ++++++++++++++++ .../com/milaboratory/mixcr/cli/Report.java | 2 +- .../milaboratory/mixcr/cli/ReportHelper.java | 2 +- .../milaboratory/mixcr/cli/ReportWrapper.java | 2 +- .../cli/SerializerCompatibilityUtil.java | 9 ++--- .../java/com/milaboratory/mixcr/cli/Util.java | 2 +- .../mixcr/cli/afiltering/AFilter.java | 2 +- .../mixcr/export/AbstractField.java | 2 +- .../mixcr/export/AbstractFieldExtractor.java | 2 +- .../mixcr/export/FeatureExtractors.java | 2 +- .../com/milaboratory/mixcr/export/Field.java | 2 +- .../mixcr/export/FieldExtractor.java | 2 +- .../export/FieldExtractorWithParameters.java | 2 +- .../mixcr/export/FieldExtractors.java | 2 +- .../mixcr/export/FieldParameterless.java | 2 +- .../mixcr/export/FieldWithParameters.java | 2 +- .../milaboratory/mixcr/export/InfoWriter.java | 2 +- .../milaboratory/mixcr/export/OutputMode.java | 2 +- .../mixcr/info/AlignmentInfoCollector.java | 2 +- .../info/GeneFeatureCoverageCollector.java | 2 +- .../info/ReferencePointCoverageCollector.java | 2 +- .../mixcr/partialassembler/AlignedTarget.java | 2 +- .../mixcr/partialassembler/BPoint.java | 2 +- .../PartialAlignmentsAssembler.java | 2 +- .../PartialAlignmentsAssemblerAligner.java | 2 +- .../PartialAlignmentsAssemblerParameters.java | 2 +- .../mixcr/partialassembler/RangeSet.java | 2 +- .../mixcr/partialassembler/TargetMerger.java | 2 +- .../mixcr/partialassembler/VDJCMultiRead.java | 2 +- .../mixcr/util/AlignedStringsBuilder.java | 2 +- .../mixcr/util/MiXCRVersionInfo.java | 2 +- .../mixcr/util/PrintStreamTableAdapter.java | 2 +- .../com/milaboratory/mixcr/util/RunMiXCR.java | 2 +- .../util/VDJCAlignmentsDifferenceReader.java | 2 +- .../mixcr/util/VDJCObjectExtender.java | 2 +- .../ClonalGeneAlignmentParameters.java | 2 +- .../mixcr/vdjaligners/DAlignerParameters.java | 2 +- .../vdjaligners/GeneAlignmentParameters.java | 2 +- .../GeneAlignmentParametersAbstract.java | 2 +- .../vdjaligners/KGeneAlignmentParameters.java | 2 +- .../mixcr/vdjaligners/PreVDJCHit.java | 2 +- .../mixcr/vdjaligners/SingleDAligner.java | 2 +- .../mixcr/vdjaligners/VDJCAligner.java | 2 +- .../vdjaligners/VDJCAlignerAbstract.java | 2 +- .../vdjaligners/VDJCAlignerEventListener.java | 2 +- .../mixcr/vdjaligners/VDJCAlignerPVFirst.java | 2 +- .../vdjaligners/VDJCAlignerParameters.java | 2 +- .../mixcr/vdjaligners/VDJCAlignerS.java | 2 +- .../vdjaligners/VDJCAlignerWithMerge.java | 2 +- .../vdjaligners/VDJCAlignmentFailCause.java | 2 +- .../vdjaligners/VDJCAlignmentResult.java | 2 +- .../vdjaligners/VDJCParametersPresets.java | 2 +- .../mixcr/vdjaligners/VJAlignmentOrder.java | 2 +- .../mixcr/assembler/AssemblerUtilsTest.java | 2 +- .../CloneAssemblerParametersPresetsTest.java | 2 +- .../CloneAssemblerParametersTest.java | 2 +- .../assembler/CloneAssemblerRunnerTest.java | 2 +- .../CloneClusteringParametersTest.java | 2 +- .../assembler/CloneFactoryParametersTest.java | 2 +- .../mixcr/assembler/ClusteringFilterTest.java | 2 +- .../VJCClonalAlignerParametersTest.java | 2 +- .../fullseq/FullSeqAssemblerTest.java | 29 ++++++++++++++++ .../mixcr/basictypes/ClnAReaderTest.java | 29 ++++++++++++++++ .../mixcr/basictypes/ClonalSequenceTest.java | 2 +- .../milaboratory/mixcr/basictypes/IOTest.java | 2 +- .../mixcr/basictypes/MergerTest.java | 2 +- .../mixcr/basictypes/SequenceHistoryTest.java | 7 ++-- .../VDJCAlignmentsFormatterTest.java | 7 ++-- .../mixcr/basictypes/VDJCObjectTest.java | 29 ++++++++++++++++ .../mixcr/cli/AlignerReportTest.java | 2 +- .../mixcr/cli/CommandAnalyzeTest.java | 29 ++++++++++++++++ .../mixcr/cli/JsonOverriderTest.java | 2 +- .../com/milaboratory/mixcr/cli/MainTest.java | 29 ++++++++++++++++ .../com/milaboratory/mixcr/cli/UtilTest.java | 2 +- .../mixcr/export/FieldExtractorsTest.java | 2 +- ...PartialAlignmentsAssemblerAlignerTest.java | 2 +- .../PartialAlignmentsAssemblerTest.java | 2 +- .../mixcr/partialassembler/RangeSetTest.java | 2 +- .../partialassembler/TargetMergerTest.java | 2 +- .../tests/BackwardCompatibilityTests.java | 2 +- .../mixcr/tests/MiXCRTestUtils.java | 2 +- .../mixcr/tests/TargetBuilder.java | 2 +- .../mixcr/tests/TargetBuilderTest.java | 2 +- .../mixcr/util/AlignedStringsBuilderTest.java | 2 +- .../mixcr/util/MiXCRVersionInfoTest.java | 29 ++++++++++++++++ .../milaboratory/mixcr/util/RunMiXCRTest.java | 2 +- .../VDJCAlignmentsDifferenceReaderTest.java | 2 +- .../mixcr/util/VDJCObjectExtenderTest.java | 2 +- .../vdjaligners/DAlignerParametersTest.java | 2 +- .../KGeneAlignmentParametersTest.java | 2 +- .../vdjaligners/VDJCAlignerPVFirstTest.java | 2 +- .../VDJCAlignerParametersTest.java | 2 +- .../mixcr/vdjaligners/VDJCAlignerSTest.java | 2 +- .../vdjaligners/VDJCAlignerWithMergeTest.java | 2 +- .../VDJCParametersPresetsTest.java | 2 +- 190 files changed, 1508 insertions(+), 172 deletions(-) diff --git a/milib b/milib index 59d6e7551..cd564d4bf 160000 --- a/milib +++ b/milib @@ -1 +1 @@ -Subproject commit 59d6e75517ca0e6cc26ef44db46c836ffc55fe79 +Subproject commit cd564d4bf5c81be66d0bf168ad4e520e5c00a7c1 diff --git a/pom.xml b/pom.xml index 0363355e3..dc110f357 100644 --- a/pom.xml +++ b/pom.xml @@ -1,6 +1,6 @@ - + 4.0.0 com.milaboratory @@ -37,22 +38,16 @@ jar MiXCR - - org.sonatype.oss - oss-parent - 7 - - UTF-8 - 1.10-SNAPSHOT + 1.10 io.repseq repseqio - 1.3 + 1.3.1 com.milaboratory @@ -189,13 +184,13 @@ org.apache.maven.plugins maven-surefire-plugin - 2.17 + 2.22.1 org.apache.maven.plugins maven-jar-plugin - 2.2 + 3.1.1 @@ -208,11 +203,10 @@ org.apache.maven.plugins maven-compiler-plugin - 2.3.2 + 3.8.0 1.8 1.8 - true @@ -228,7 +222,7 @@ org.apache.maven.plugins maven-shade-plugin - 2.4 + 3.2.1 pre-integration-test @@ -271,12 +265,15 @@ - + - + false - + com.milaboratory.mixcr.cli.Main diff --git a/repseqio b/repseqio index 8dc2583e6..143eeb334 160000 --- a/repseqio +++ b/repseqio @@ -1 +1 @@ -Subproject commit 8dc2583e61742a3f3a8bfc5f0ffbeb9dd454e9bc +Subproject commit 143eeb334e19402a670674f35dededf475b9c533 diff --git a/src/main/java/com/milaboratory/mixcr/assembler/AlignmentsMappingMerger.java b/src/main/java/com/milaboratory/mixcr/assembler/AlignmentsMappingMerger.java index 94c10cf46..d8d836f30 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/AlignmentsMappingMerger.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/AlignmentsMappingMerger.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.assembler; import cc.redberry.pipe.OutputPort; diff --git a/src/main/java/com/milaboratory/mixcr/assembler/AlignmentsProvider.java b/src/main/java/com/milaboratory/mixcr/assembler/AlignmentsProvider.java index 3f6a99265..c8729d9b8 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/AlignmentsProvider.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/AlignmentsProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/assembler/AssembledReadsPort.java b/src/main/java/com/milaboratory/mixcr/assembler/AssembledReadsPort.java index 1bb6104b7..ea8ef5637 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/AssembledReadsPort.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/AssembledReadsPort.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/assembler/AssemblerEvent.java b/src/main/java/com/milaboratory/mixcr/assembler/AssemblerEvent.java index 94d1fb159..8191aeb4a 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/AssemblerEvent.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/AssemblerEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/assembler/AssemblerEventLogger.java b/src/main/java/com/milaboratory/mixcr/assembler/AssemblerEventLogger.java index 4e49e2379..183aa1dda 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/AssemblerEventLogger.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/AssemblerEventLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/assembler/AssemblerUtils.java b/src/main/java/com/milaboratory/mixcr/assembler/AssemblerUtils.java index 122f4eeaa..fd3995fed 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/AssemblerUtils.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/AssemblerUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/assembler/CloneAccumulator.java b/src/main/java/com/milaboratory/mixcr/assembler/CloneAccumulator.java index 8ea301331..4937d8448 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/CloneAccumulator.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/CloneAccumulator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/assembler/CloneAssembler.java b/src/main/java/com/milaboratory/mixcr/assembler/CloneAssembler.java index 245932a7b..28267209e 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/CloneAssembler.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/CloneAssembler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerListener.java b/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerListener.java index cc8869ab7..b53bcf4ec 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerListener.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerListener.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerParameters.java b/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerParameters.java index c1eea44c4..653ca9c14 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerParameters.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerParameters.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerParametersPresets.java b/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerParametersPresets.java index dd6ccd3ba..9bd46c5fc 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerParametersPresets.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerParametersPresets.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerRunner.java b/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerRunner.java index c4f5f3a97..1e8b1ff43 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerRunner.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerRunner.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/assembler/CloneClusteringParameters.java b/src/main/java/com/milaboratory/mixcr/assembler/CloneClusteringParameters.java index 34390630f..8da0750f1 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/CloneClusteringParameters.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/CloneClusteringParameters.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/assembler/CloneClusteringStrategy.java b/src/main/java/com/milaboratory/mixcr/assembler/CloneClusteringStrategy.java index cd8823bae..b8dc997ea 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/CloneClusteringStrategy.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/CloneClusteringStrategy.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/assembler/CloneFactory.java b/src/main/java/com/milaboratory/mixcr/assembler/CloneFactory.java index d151b0734..f7b8c5645 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/CloneFactory.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/CloneFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/assembler/CloneFactoryParameters.java b/src/main/java/com/milaboratory/mixcr/assembler/CloneFactoryParameters.java index 42081d1a6..f7f6299f1 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/CloneFactoryParameters.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/CloneFactoryParameters.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/assembler/ClusteringFilter.java b/src/main/java/com/milaboratory/mixcr/assembler/ClusteringFilter.java index 55007eefd..399181ae8 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/ClusteringFilter.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/ClusteringFilter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/assembler/DClonalAlignerParameters.java b/src/main/java/com/milaboratory/mixcr/assembler/DClonalAlignerParameters.java index 42898d678..bd84a5088 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/DClonalAlignerParameters.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/DClonalAlignerParameters.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/assembler/ReadToCloneMapping.java b/src/main/java/com/milaboratory/mixcr/assembler/ReadToCloneMapping.java index 2fd85f4ba..1244f6d9e 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/ReadToCloneMapping.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/ReadToCloneMapping.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/assembler/RelativeConcentrationFilter.java b/src/main/java/com/milaboratory/mixcr/assembler/RelativeConcentrationFilter.java index 24689b273..093f0ec58 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/RelativeConcentrationFilter.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/RelativeConcentrationFilter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/assembler/VDJCAlignmentsReaderWrapper.java b/src/main/java/com/milaboratory/mixcr/assembler/VDJCAlignmentsReaderWrapper.java index c83e81955..bcee93ad1 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/VDJCAlignmentsReaderWrapper.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/VDJCAlignmentsReaderWrapper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/assembler/VJCClonalAlignerParameters.java b/src/main/java/com/milaboratory/mixcr/assembler/VJCClonalAlignerParameters.java index c4846a1a8..c64283392 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/VJCClonalAlignerParameters.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/VJCClonalAlignerParameters.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/assembler/fullseq/FullSeqAssembler.java b/src/main/java/com/milaboratory/mixcr/assembler/fullseq/FullSeqAssembler.java index 5bf69b783..16c416e11 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/fullseq/FullSeqAssembler.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/fullseq/FullSeqAssembler.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.assembler.fullseq; import cc.redberry.pipe.CUtils; diff --git a/src/main/java/com/milaboratory/mixcr/assembler/fullseq/FullSeqAssemblerParameters.java b/src/main/java/com/milaboratory/mixcr/assembler/fullseq/FullSeqAssemblerParameters.java index 846c107ed..6f3a89379 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/fullseq/FullSeqAssemblerParameters.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/fullseq/FullSeqAssemblerParameters.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.assembler.fullseq; import com.fasterxml.jackson.annotation.JsonAutoDetect; diff --git a/src/main/java/com/milaboratory/mixcr/assembler/fullseq/FullSeqAssemblerReport.java b/src/main/java/com/milaboratory/mixcr/assembler/fullseq/FullSeqAssemblerReport.java index cf1198ff2..dd3c7f010 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/fullseq/FullSeqAssemblerReport.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/fullseq/FullSeqAssemblerReport.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.assembler.fullseq; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/src/main/java/com/milaboratory/mixcr/assembler/fullseq/PointSequence.java b/src/main/java/com/milaboratory/mixcr/assembler/fullseq/PointSequence.java index e81e67119..0ac02b6c7 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/fullseq/PointSequence.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/fullseq/PointSequence.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.assembler.fullseq; import com.milaboratory.core.sequence.NSequenceWithQuality; diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/AlignmentsIO.java b/src/main/java/com/milaboratory/mixcr/basictypes/AlignmentsIO.java index 4a1270622..736330215 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/AlignmentsIO.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/AlignmentsIO.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/BasicVDJCAlignmentReader.java b/src/main/java/com/milaboratory/mixcr/basictypes/BasicVDJCAlignmentReader.java index 3881c1dce..8a4a1875b 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/BasicVDJCAlignmentReader.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/BasicVDJCAlignmentReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/BasicVDJCAlignmentWriterFactory.java b/src/main/java/com/milaboratory/mixcr/basictypes/BasicVDJCAlignmentWriterFactory.java index bc31fe4c4..8dab181ef 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/BasicVDJCAlignmentWriterFactory.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/BasicVDJCAlignmentWriterFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/ClnAReader.java b/src/main/java/com/milaboratory/mixcr/basictypes/ClnAReader.java index 01ef06ef8..3eb0bf930 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/ClnAReader.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/ClnAReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2017, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * @@ -10,8 +10,9 @@ * three paragraphs appear in all copies. * * Those desiring to incorporate this work into commercial products or use for - * commercial purposes should contact the Inventors using one of the following - * email addresses: chudakovdm@mail.ru, chudakovdm@gmail.com + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. * * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/ClnAWriter.java b/src/main/java/com/milaboratory/mixcr/basictypes/ClnAWriter.java index e80db8050..4996e2ff7 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/ClnAWriter.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/ClnAWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2017, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * @@ -10,8 +10,9 @@ * three paragraphs appear in all copies. * * Those desiring to incorporate this work into commercial products or use for - * commercial purposes should contact the Inventors using one of the following - * email addresses: chudakovdm@mail.ru, chudakovdm@gmail.com + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. * * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/ClnsReader.java b/src/main/java/com/milaboratory/mixcr/basictypes/ClnsReader.java index 886c06939..1f7e0b5c5 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/ClnsReader.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/ClnsReader.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.basictypes; import com.milaboratory.cli.PipelineConfiguration; diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/ClnsWriter.java b/src/main/java/com/milaboratory/mixcr/basictypes/ClnsWriter.java index 1da7ca743..769cc607e 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/ClnsWriter.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/ClnsWriter.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.basictypes; import com.milaboratory.cli.AppVersionInfo; diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/ClonalSequence.java b/src/main/java/com/milaboratory/mixcr/basictypes/ClonalSequence.java index 591fb9f84..214c6ddaf 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/ClonalSequence.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/ClonalSequence.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/ClonalUpdatableParameters.java b/src/main/java/com/milaboratory/mixcr/basictypes/ClonalUpdatableParameters.java index f57477b8e..594ea2581 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/ClonalUpdatableParameters.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/ClonalUpdatableParameters.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/Clone.java b/src/main/java/com/milaboratory/mixcr/basictypes/Clone.java index b0b9270de..fa3d37ea8 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/Clone.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/Clone.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/CloneSet.java b/src/main/java/com/milaboratory/mixcr/basictypes/CloneSet.java index 2419cd94d..da302e54a 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/CloneSet.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/CloneSet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/CloneSetIO.java b/src/main/java/com/milaboratory/mixcr/basictypes/CloneSetIO.java index f7265d509..62af31c17 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/CloneSetIO.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/CloneSetIO.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/CompatibilityIO.java b/src/main/java/com/milaboratory/mixcr/basictypes/CompatibilityIO.java index 97799ed6a..97197d656 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/CompatibilityIO.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/CompatibilityIO.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/HasFeatureToAlign.java b/src/main/java/com/milaboratory/mixcr/basictypes/HasFeatureToAlign.java index c0c35b213..8522110bd 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/HasFeatureToAlign.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/HasFeatureToAlign.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/HasGene.java b/src/main/java/com/milaboratory/mixcr/basictypes/HasGene.java index 870baab2e..d9807d5eb 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/HasGene.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/HasGene.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/IO.java b/src/main/java/com/milaboratory/mixcr/basictypes/IO.java index c88bc8082..59225267d 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/IO.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/IO.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/IOUtil.java b/src/main/java/com/milaboratory/mixcr/basictypes/IOUtil.java index 922033631..211f6d4c2 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/IOUtil.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/IOUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/Merger.java b/src/main/java/com/milaboratory/mixcr/basictypes/Merger.java index 3d0792e4a..9f20bb93d 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/Merger.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/Merger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/PipelineConfigurationReaderMiXCR.java b/src/main/java/com/milaboratory/mixcr/basictypes/PipelineConfigurationReaderMiXCR.java index 63a051f13..d58e03686 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/PipelineConfigurationReaderMiXCR.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/PipelineConfigurationReaderMiXCR.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.basictypes; import com.milaboratory.cli.BinaryFileInfo; diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/SequenceHistory.java b/src/main/java/com/milaboratory/mixcr/basictypes/SequenceHistory.java index b85119980..10e40b88c 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/SequenceHistory.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/SequenceHistory.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.basictypes; import com.fasterxml.jackson.annotation.*; diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/TargetPartitioning.java b/src/main/java/com/milaboratory/mixcr/basictypes/TargetPartitioning.java index 44754fc0b..a0da2257d 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/TargetPartitioning.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/TargetPartitioning.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignments.java b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignments.java index 66a750eaf..129cc2f00 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignments.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignments.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsFormatter.java b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsFormatter.java index 0865f1b36..201dde695 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsFormatter.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsReader.java b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsReader.java index c3fffedfb..519b2e8d9 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsReader.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsWriter.java b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsWriter.java index d4c23f35b..34ddb2798 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsWriter.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsWriterI.java b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsWriterI.java index 3a5d008d4..08991c51e 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsWriterI.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsWriterI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCHit.java b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCHit.java index 04d3b21d4..f0f1ee38d 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCHit.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCHit.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCObject.java b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCObject.java index cca46f2be..1e6b0dce8 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCObject.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCObject.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCPartitionedSequence.java b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCPartitionedSequence.java index ff5409572..529b81af3 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCPartitionedSequence.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCPartitionedSequence.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/cli/ACommandMiXCR.java b/src/main/java/com/milaboratory/mixcr/cli/ACommandMiXCR.java index 4054d90d8..368aecf7b 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/ACommandMiXCR.java +++ b/src/main/java/com/milaboratory/mixcr/cli/ACommandMiXCR.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import com.milaboratory.cli.ACommand; diff --git a/src/main/java/com/milaboratory/mixcr/cli/ACommandSimpleExportMiXCR.java b/src/main/java/com/milaboratory/mixcr/cli/ACommandSimpleExportMiXCR.java index 118c770ca..34af93e2c 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/ACommandSimpleExportMiXCR.java +++ b/src/main/java/com/milaboratory/mixcr/cli/ACommandSimpleExportMiXCR.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import com.milaboratory.cli.ACommandSimpleExport; diff --git a/src/main/java/com/milaboratory/mixcr/cli/ACommandWithOutputMiXCR.java b/src/main/java/com/milaboratory/mixcr/cli/ACommandWithOutputMiXCR.java index a1369da1e..17f908d3b 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/ACommandWithOutputMiXCR.java +++ b/src/main/java/com/milaboratory/mixcr/cli/ACommandWithOutputMiXCR.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import com.milaboratory.cli.ACommandWithOutput; diff --git a/src/main/java/com/milaboratory/mixcr/cli/ACommandWithSmartOverwriteMiXCR.java b/src/main/java/com/milaboratory/mixcr/cli/ACommandWithSmartOverwriteMiXCR.java index 06870e966..c68471dd9 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/ACommandWithSmartOverwriteMiXCR.java +++ b/src/main/java/com/milaboratory/mixcr/cli/ACommandWithSmartOverwriteMiXCR.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import com.milaboratory.cli.ACommandWithSmartOverwrite; diff --git a/src/main/java/com/milaboratory/mixcr/cli/ACommandWithSmartOverwriteWithSingleInputMiXCR.java b/src/main/java/com/milaboratory/mixcr/cli/ACommandWithSmartOverwriteWithSingleInputMiXCR.java index 4b9c92524..c673cb348 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/ACommandWithSmartOverwriteWithSingleInputMiXCR.java +++ b/src/main/java/com/milaboratory/mixcr/cli/ACommandWithSmartOverwriteWithSingleInputMiXCR.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import com.milaboratory.cli.ACommandWithSmartOverwriteWithSingleInput; diff --git a/src/main/java/com/milaboratory/mixcr/cli/AbstractCommandReport.java b/src/main/java/com/milaboratory/mixcr/cli/AbstractCommandReport.java index 3998ea1b5..af05f122d 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/AbstractCommandReport.java +++ b/src/main/java/com/milaboratory/mixcr/cli/AbstractCommandReport.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/cli/AlignerReport.java b/src/main/java/com/milaboratory/mixcr/cli/AlignerReport.java index 4a6e5fee3..5cd1efa39 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/AlignerReport.java +++ b/src/main/java/com/milaboratory/mixcr/cli/AlignerReport.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/cli/ChainUsageStats.java b/src/main/java/com/milaboratory/mixcr/cli/ChainUsageStats.java index c5c5639d5..32a6286b2 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/ChainUsageStats.java +++ b/src/main/java/com/milaboratory/mixcr/cli/ChainUsageStats.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/cli/CloneAssemblerReport.java b/src/main/java/com/milaboratory/mixcr/cli/CloneAssemblerReport.java index 864d24fda..6f2668f27 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CloneAssemblerReport.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CloneAssemblerReport.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandAlign.java b/src/main/java/com/milaboratory/mixcr/cli/CommandAlign.java index 8691de276..8c637b39c 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandAlign.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandAlign.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import cc.redberry.pipe.CUtils; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandAlignmentsDiff.java b/src/main/java/com/milaboratory/mixcr/cli/CommandAlignmentsDiff.java index 85aef6807..c7e4d9e18 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandAlignmentsDiff.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandAlignmentsDiff.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import cc.redberry.pipe.CUtils; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandAlignmentsStats.java b/src/main/java/com/milaboratory/mixcr/cli/CommandAlignmentsStats.java index a328e8d2b..394602bcc 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandAlignmentsStats.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandAlignmentsStats.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import cc.redberry.pipe.CUtils; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandAnalyze.java b/src/main/java/com/milaboratory/mixcr/cli/CommandAnalyze.java index 73f13a70a..ca01f76ed 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandAnalyze.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandAnalyze.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import com.milaboratory.cli.ACommandWithOutput; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandAssemble.java b/src/main/java/com/milaboratory/mixcr/cli/CommandAssemble.java index 49ecb1ad4..4afecbaa4 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandAssemble.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandAssemble.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import cc.redberry.pipe.util.StatusReporter; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandAssembleContigs.java b/src/main/java/com/milaboratory/mixcr/cli/CommandAssembleContigs.java index d58c4d2cc..3478b2bd3 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandAssembleContigs.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandAssembleContigs.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import cc.redberry.pipe.CUtils; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandAssemblePartialAlignments.java b/src/main/java/com/milaboratory/mixcr/cli/CommandAssemblePartialAlignments.java index 996c25e2f..d2f1febf2 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandAssemblePartialAlignments.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandAssemblePartialAlignments.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import com.fasterxml.jackson.annotation.*; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandClonesDiff.java b/src/main/java/com/milaboratory/mixcr/cli/CommandClonesDiff.java index ecdd34c0b..53ed2660c 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandClonesDiff.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandClonesDiff.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import com.milaboratory.core.sequence.NucleotideSequence; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandExport.java b/src/main/java/com/milaboratory/mixcr/cli/CommandExport.java index db7a2aff5..383cc919e 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandExport.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandExport.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import cc.redberry.pipe.OutputPort; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandExportAlignmentsPretty.java b/src/main/java/com/milaboratory/mixcr/cli/CommandExportAlignmentsPretty.java index dfa459b19..b8c649de3 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandExportAlignmentsPretty.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandExportAlignmentsPretty.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import cc.redberry.pipe.CUtils; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandExportClonesPretty.java b/src/main/java/com/milaboratory/mixcr/cli/CommandExportClonesPretty.java index a54daaa3d..745f9484b 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandExportClonesPretty.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandExportClonesPretty.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import cc.redberry.primitives.Filter; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandExportReads.java b/src/main/java/com/milaboratory/mixcr/cli/CommandExportReads.java index 0c6da0911..76737d4d5 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandExportReads.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandExportReads.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import cc.redberry.pipe.CUtils; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandExportReadsForClones.java b/src/main/java/com/milaboratory/mixcr/cli/CommandExportReadsForClones.java index 2c4eb417f..128c4fad4 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandExportReadsForClones.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandExportReadsForClones.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import cc.redberry.pipe.CUtils; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandExtend.java b/src/main/java/com/milaboratory/mixcr/cli/CommandExtend.java index 17260a226..971ec6a23 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandExtend.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandExtend.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import cc.redberry.pipe.CUtils; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandFilterAlignments.java b/src/main/java/com/milaboratory/mixcr/cli/CommandFilterAlignments.java index 1d1d425a3..b51a5bad3 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandFilterAlignments.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandFilterAlignments.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import cc.redberry.pipe.CUtils; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandInfo.java b/src/main/java/com/milaboratory/mixcr/cli/CommandInfo.java index 28b0bc96f..626152361 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandInfo.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandInfo.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import cc.redberry.pipe.CUtils; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandListLibraries.java b/src/main/java/com/milaboratory/mixcr/cli/CommandListLibraries.java index d949cff87..cff48e227 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandListLibraries.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandListLibraries.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import io.repseq.core.VDJCLibrary; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandMain.java b/src/main/java/com/milaboratory/mixcr/cli/CommandMain.java index 42df407e3..06e5c002b 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandMain.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandMain.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import com.milaboratory.cli.ABaseCommand; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandMergeAlignments.java b/src/main/java/com/milaboratory/mixcr/cli/CommandMergeAlignments.java index bf7b11df0..088f89187 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandMergeAlignments.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandMergeAlignments.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import cc.redberry.pipe.CUtils; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandPipelineInfo.java b/src/main/java/com/milaboratory/mixcr/cli/CommandPipelineInfo.java index 36a954ff4..5bdb07f57 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandPipelineInfo.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandPipelineInfo.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import com.fasterxml.jackson.core.JsonProcessingException; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandReport.java b/src/main/java/com/milaboratory/mixcr/cli/CommandReport.java index 6bafdebde..bf4e227c2 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandReport.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandReport.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandSlice.java b/src/main/java/com/milaboratory/mixcr/cli/CommandSlice.java index d92d4230a..b7deac6c2 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandSlice.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandSlice.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import cc.redberry.pipe.CUtils; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandSortAlignments.java b/src/main/java/com/milaboratory/mixcr/cli/CommandSortAlignments.java index 8ffd1d384..7e2e744aa 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandSortAlignments.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandSortAlignments.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import cc.redberry.pipe.CUtils; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommandVersionInfo.java b/src/main/java/com/milaboratory/mixcr/cli/CommandVersionInfo.java index d8e70105b..fc92c1621 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommandVersionInfo.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommandVersionInfo.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import com.milaboratory.mixcr.basictypes.ClnAReader; diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommonDescriptions.java b/src/main/java/com/milaboratory/mixcr/cli/CommonDescriptions.java index 66d2ce263..9fa6b171e 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommonDescriptions.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommonDescriptions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/cli/CommonOptions.java b/src/main/java/com/milaboratory/mixcr/cli/CommonOptions.java index 0f83cfd6c..7d1df2429 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/CommonOptions.java +++ b/src/main/java/com/milaboratory/mixcr/cli/CommonOptions.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import picocli.CommandLine; diff --git a/src/main/java/com/milaboratory/mixcr/cli/JsonOverrider.java b/src/main/java/com/milaboratory/mixcr/cli/JsonOverrider.java index bf82f3da5..b07bc8738 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/JsonOverrider.java +++ b/src/main/java/com/milaboratory/mixcr/cli/JsonOverrider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/cli/Main.java b/src/main/java/com/milaboratory/mixcr/cli/Main.java index 25807276c..3467fbfea 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/Main.java +++ b/src/main/java/com/milaboratory/mixcr/cli/Main.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import com.milaboratory.cli.ValidationException; diff --git a/src/main/java/com/milaboratory/mixcr/cli/MiXCRCommand.java b/src/main/java/com/milaboratory/mixcr/cli/MiXCRCommand.java index de30346ec..6fd8460bb 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/MiXCRCommand.java +++ b/src/main/java/com/milaboratory/mixcr/cli/MiXCRCommand.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import com.milaboratory.cli.BinaryFileInfo; diff --git a/src/main/java/com/milaboratory/mixcr/cli/Report.java b/src/main/java/com/milaboratory/mixcr/cli/Report.java index e83eaba3b..a8ded1b2d 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/Report.java +++ b/src/main/java/com/milaboratory/mixcr/cli/Report.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/cli/ReportHelper.java b/src/main/java/com/milaboratory/mixcr/cli/ReportHelper.java index f75aaf531..e22b25896 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/ReportHelper.java +++ b/src/main/java/com/milaboratory/mixcr/cli/ReportHelper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/cli/ReportWrapper.java b/src/main/java/com/milaboratory/mixcr/cli/ReportWrapper.java index 0556d10be..6bf3d4a9d 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/ReportWrapper.java +++ b/src/main/java/com/milaboratory/mixcr/cli/ReportWrapper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/cli/SerializerCompatibilityUtil.java b/src/main/java/com/milaboratory/mixcr/cli/SerializerCompatibilityUtil.java index 31903970c..9f9a0c41d 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/SerializerCompatibilityUtil.java +++ b/src/main/java/com/milaboratory/mixcr/cli/SerializerCompatibilityUtil.java @@ -1,6 +1,6 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail, - * Popov Aleksandr (here and after addressed as Inventors) + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) * All Rights Reserved * * Permission to use, copy, modify and distribute any part of this program for @@ -10,8 +10,9 @@ * three paragraphs appear in all copies. * * Those desiring to incorporate this work into commercial products or use for - * commercial purposes should contact the Inventors using one of the following - * email addresses: chudakovdm@mail.ru, chudakovdm@gmail.com + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. * * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, diff --git a/src/main/java/com/milaboratory/mixcr/cli/Util.java b/src/main/java/com/milaboratory/mixcr/cli/Util.java index 4c151c6ce..234d7ac51 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/Util.java +++ b/src/main/java/com/milaboratory/mixcr/cli/Util.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/cli/afiltering/AFilter.java b/src/main/java/com/milaboratory/mixcr/cli/afiltering/AFilter.java index f6294fc72..50873d95a 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/afiltering/AFilter.java +++ b/src/main/java/com/milaboratory/mixcr/cli/afiltering/AFilter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/export/AbstractField.java b/src/main/java/com/milaboratory/mixcr/export/AbstractField.java index 5f5c4faf8..f05a6aa61 100644 --- a/src/main/java/com/milaboratory/mixcr/export/AbstractField.java +++ b/src/main/java/com/milaboratory/mixcr/export/AbstractField.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/export/AbstractFieldExtractor.java b/src/main/java/com/milaboratory/mixcr/export/AbstractFieldExtractor.java index 205eefe67..d10b31ac7 100644 --- a/src/main/java/com/milaboratory/mixcr/export/AbstractFieldExtractor.java +++ b/src/main/java/com/milaboratory/mixcr/export/AbstractFieldExtractor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/export/FeatureExtractors.java b/src/main/java/com/milaboratory/mixcr/export/FeatureExtractors.java index 50430e24e..272a8844c 100644 --- a/src/main/java/com/milaboratory/mixcr/export/FeatureExtractors.java +++ b/src/main/java/com/milaboratory/mixcr/export/FeatureExtractors.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/export/Field.java b/src/main/java/com/milaboratory/mixcr/export/Field.java index c8b98003d..aa84c8f34 100644 --- a/src/main/java/com/milaboratory/mixcr/export/Field.java +++ b/src/main/java/com/milaboratory/mixcr/export/Field.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/export/FieldExtractor.java b/src/main/java/com/milaboratory/mixcr/export/FieldExtractor.java index c77ffb2ee..c2e1c3188 100644 --- a/src/main/java/com/milaboratory/mixcr/export/FieldExtractor.java +++ b/src/main/java/com/milaboratory/mixcr/export/FieldExtractor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/export/FieldExtractorWithParameters.java b/src/main/java/com/milaboratory/mixcr/export/FieldExtractorWithParameters.java index 5421b7b85..9c78e3470 100644 --- a/src/main/java/com/milaboratory/mixcr/export/FieldExtractorWithParameters.java +++ b/src/main/java/com/milaboratory/mixcr/export/FieldExtractorWithParameters.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/export/FieldExtractors.java b/src/main/java/com/milaboratory/mixcr/export/FieldExtractors.java index bf3a3d93f..967b7681e 100644 --- a/src/main/java/com/milaboratory/mixcr/export/FieldExtractors.java +++ b/src/main/java/com/milaboratory/mixcr/export/FieldExtractors.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/export/FieldParameterless.java b/src/main/java/com/milaboratory/mixcr/export/FieldParameterless.java index fc0749f1e..a6a93d3a0 100644 --- a/src/main/java/com/milaboratory/mixcr/export/FieldParameterless.java +++ b/src/main/java/com/milaboratory/mixcr/export/FieldParameterless.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/export/FieldWithParameters.java b/src/main/java/com/milaboratory/mixcr/export/FieldWithParameters.java index 63feac157..2d5c7af1a 100644 --- a/src/main/java/com/milaboratory/mixcr/export/FieldWithParameters.java +++ b/src/main/java/com/milaboratory/mixcr/export/FieldWithParameters.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/export/InfoWriter.java b/src/main/java/com/milaboratory/mixcr/export/InfoWriter.java index 25a37e316..2a54784e1 100644 --- a/src/main/java/com/milaboratory/mixcr/export/InfoWriter.java +++ b/src/main/java/com/milaboratory/mixcr/export/InfoWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/export/OutputMode.java b/src/main/java/com/milaboratory/mixcr/export/OutputMode.java index 887c45788..f361d9686 100644 --- a/src/main/java/com/milaboratory/mixcr/export/OutputMode.java +++ b/src/main/java/com/milaboratory/mixcr/export/OutputMode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/info/AlignmentInfoCollector.java b/src/main/java/com/milaboratory/mixcr/info/AlignmentInfoCollector.java index 1248594f1..a7470ac41 100644 --- a/src/main/java/com/milaboratory/mixcr/info/AlignmentInfoCollector.java +++ b/src/main/java/com/milaboratory/mixcr/info/AlignmentInfoCollector.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/info/GeneFeatureCoverageCollector.java b/src/main/java/com/milaboratory/mixcr/info/GeneFeatureCoverageCollector.java index b62a24b2c..2035010f0 100644 --- a/src/main/java/com/milaboratory/mixcr/info/GeneFeatureCoverageCollector.java +++ b/src/main/java/com/milaboratory/mixcr/info/GeneFeatureCoverageCollector.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/info/ReferencePointCoverageCollector.java b/src/main/java/com/milaboratory/mixcr/info/ReferencePointCoverageCollector.java index 241515757..ff5a70ffc 100644 --- a/src/main/java/com/milaboratory/mixcr/info/ReferencePointCoverageCollector.java +++ b/src/main/java/com/milaboratory/mixcr/info/ReferencePointCoverageCollector.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/partialassembler/AlignedTarget.java b/src/main/java/com/milaboratory/mixcr/partialassembler/AlignedTarget.java index 51c1a6d90..37f7d46bc 100644 --- a/src/main/java/com/milaboratory/mixcr/partialassembler/AlignedTarget.java +++ b/src/main/java/com/milaboratory/mixcr/partialassembler/AlignedTarget.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/partialassembler/BPoint.java b/src/main/java/com/milaboratory/mixcr/partialassembler/BPoint.java index 29ec32c36..f7e7cab7c 100644 --- a/src/main/java/com/milaboratory/mixcr/partialassembler/BPoint.java +++ b/src/main/java/com/milaboratory/mixcr/partialassembler/BPoint.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/partialassembler/PartialAlignmentsAssembler.java b/src/main/java/com/milaboratory/mixcr/partialassembler/PartialAlignmentsAssembler.java index 82258a20b..61d2eb38a 100644 --- a/src/main/java/com/milaboratory/mixcr/partialassembler/PartialAlignmentsAssembler.java +++ b/src/main/java/com/milaboratory/mixcr/partialassembler/PartialAlignmentsAssembler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/partialassembler/PartialAlignmentsAssemblerAligner.java b/src/main/java/com/milaboratory/mixcr/partialassembler/PartialAlignmentsAssemblerAligner.java index 0422af7c0..847844ca6 100644 --- a/src/main/java/com/milaboratory/mixcr/partialassembler/PartialAlignmentsAssemblerAligner.java +++ b/src/main/java/com/milaboratory/mixcr/partialassembler/PartialAlignmentsAssemblerAligner.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/partialassembler/PartialAlignmentsAssemblerParameters.java b/src/main/java/com/milaboratory/mixcr/partialassembler/PartialAlignmentsAssemblerParameters.java index a6f90ad92..e45d59f8d 100644 --- a/src/main/java/com/milaboratory/mixcr/partialassembler/PartialAlignmentsAssemblerParameters.java +++ b/src/main/java/com/milaboratory/mixcr/partialassembler/PartialAlignmentsAssemblerParameters.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/partialassembler/RangeSet.java b/src/main/java/com/milaboratory/mixcr/partialassembler/RangeSet.java index 6c8f7a2a7..78bc7ed93 100644 --- a/src/main/java/com/milaboratory/mixcr/partialassembler/RangeSet.java +++ b/src/main/java/com/milaboratory/mixcr/partialassembler/RangeSet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/partialassembler/TargetMerger.java b/src/main/java/com/milaboratory/mixcr/partialassembler/TargetMerger.java index 614ccaea1..a25afd494 100644 --- a/src/main/java/com/milaboratory/mixcr/partialassembler/TargetMerger.java +++ b/src/main/java/com/milaboratory/mixcr/partialassembler/TargetMerger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/partialassembler/VDJCMultiRead.java b/src/main/java/com/milaboratory/mixcr/partialassembler/VDJCMultiRead.java index 4adae4c08..e4bc7e5a1 100644 --- a/src/main/java/com/milaboratory/mixcr/partialassembler/VDJCMultiRead.java +++ b/src/main/java/com/milaboratory/mixcr/partialassembler/VDJCMultiRead.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/util/AlignedStringsBuilder.java b/src/main/java/com/milaboratory/mixcr/util/AlignedStringsBuilder.java index be58c2799..c42655f00 100644 --- a/src/main/java/com/milaboratory/mixcr/util/AlignedStringsBuilder.java +++ b/src/main/java/com/milaboratory/mixcr/util/AlignedStringsBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/util/MiXCRVersionInfo.java b/src/main/java/com/milaboratory/mixcr/util/MiXCRVersionInfo.java index 24277fa73..78b434217 100644 --- a/src/main/java/com/milaboratory/mixcr/util/MiXCRVersionInfo.java +++ b/src/main/java/com/milaboratory/mixcr/util/MiXCRVersionInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/util/PrintStreamTableAdapter.java b/src/main/java/com/milaboratory/mixcr/util/PrintStreamTableAdapter.java index 2ec78cd7d..21ffe3b92 100644 --- a/src/main/java/com/milaboratory/mixcr/util/PrintStreamTableAdapter.java +++ b/src/main/java/com/milaboratory/mixcr/util/PrintStreamTableAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/util/RunMiXCR.java b/src/main/java/com/milaboratory/mixcr/util/RunMiXCR.java index 3948b3c24..73dc2ba18 100644 --- a/src/main/java/com/milaboratory/mixcr/util/RunMiXCR.java +++ b/src/main/java/com/milaboratory/mixcr/util/RunMiXCR.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/util/VDJCAlignmentsDifferenceReader.java b/src/main/java/com/milaboratory/mixcr/util/VDJCAlignmentsDifferenceReader.java index 641a96aa3..44749510f 100644 --- a/src/main/java/com/milaboratory/mixcr/util/VDJCAlignmentsDifferenceReader.java +++ b/src/main/java/com/milaboratory/mixcr/util/VDJCAlignmentsDifferenceReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/util/VDJCObjectExtender.java b/src/main/java/com/milaboratory/mixcr/util/VDJCObjectExtender.java index 3c7f01314..5782b5e02 100644 --- a/src/main/java/com/milaboratory/mixcr/util/VDJCObjectExtender.java +++ b/src/main/java/com/milaboratory/mixcr/util/VDJCObjectExtender.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/vdjaligners/ClonalGeneAlignmentParameters.java b/src/main/java/com/milaboratory/mixcr/vdjaligners/ClonalGeneAlignmentParameters.java index dd51f089d..dea5f4930 100644 --- a/src/main/java/com/milaboratory/mixcr/vdjaligners/ClonalGeneAlignmentParameters.java +++ b/src/main/java/com/milaboratory/mixcr/vdjaligners/ClonalGeneAlignmentParameters.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/vdjaligners/DAlignerParameters.java b/src/main/java/com/milaboratory/mixcr/vdjaligners/DAlignerParameters.java index 4f650d53b..290b82214 100644 --- a/src/main/java/com/milaboratory/mixcr/vdjaligners/DAlignerParameters.java +++ b/src/main/java/com/milaboratory/mixcr/vdjaligners/DAlignerParameters.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/vdjaligners/GeneAlignmentParameters.java b/src/main/java/com/milaboratory/mixcr/vdjaligners/GeneAlignmentParameters.java index 3a6e12049..b4baece08 100644 --- a/src/main/java/com/milaboratory/mixcr/vdjaligners/GeneAlignmentParameters.java +++ b/src/main/java/com/milaboratory/mixcr/vdjaligners/GeneAlignmentParameters.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/vdjaligners/GeneAlignmentParametersAbstract.java b/src/main/java/com/milaboratory/mixcr/vdjaligners/GeneAlignmentParametersAbstract.java index 43b87e0ba..09ed8983b 100644 --- a/src/main/java/com/milaboratory/mixcr/vdjaligners/GeneAlignmentParametersAbstract.java +++ b/src/main/java/com/milaboratory/mixcr/vdjaligners/GeneAlignmentParametersAbstract.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/vdjaligners/KGeneAlignmentParameters.java b/src/main/java/com/milaboratory/mixcr/vdjaligners/KGeneAlignmentParameters.java index 14e96b7e5..23ca05b88 100644 --- a/src/main/java/com/milaboratory/mixcr/vdjaligners/KGeneAlignmentParameters.java +++ b/src/main/java/com/milaboratory/mixcr/vdjaligners/KGeneAlignmentParameters.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/vdjaligners/PreVDJCHit.java b/src/main/java/com/milaboratory/mixcr/vdjaligners/PreVDJCHit.java index b89870ce4..7b77f40cc 100644 --- a/src/main/java/com/milaboratory/mixcr/vdjaligners/PreVDJCHit.java +++ b/src/main/java/com/milaboratory/mixcr/vdjaligners/PreVDJCHit.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/vdjaligners/SingleDAligner.java b/src/main/java/com/milaboratory/mixcr/vdjaligners/SingleDAligner.java index fe7d0bb7c..daab178c0 100644 --- a/src/main/java/com/milaboratory/mixcr/vdjaligners/SingleDAligner.java +++ b/src/main/java/com/milaboratory/mixcr/vdjaligners/SingleDAligner.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAligner.java b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAligner.java index cbf96e5f4..761b40ea9 100644 --- a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAligner.java +++ b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAligner.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerAbstract.java b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerAbstract.java index 17da0f5e7..65dd95dca 100644 --- a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerAbstract.java +++ b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerAbstract.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerEventListener.java b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerEventListener.java index fc1cc8b63..b805dc040 100644 --- a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerEventListener.java +++ b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerEventListener.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerPVFirst.java b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerPVFirst.java index 7d64f2450..3dc357ec7 100644 --- a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerPVFirst.java +++ b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerPVFirst.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerParameters.java b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerParameters.java index e693586e1..f3e7150a4 100644 --- a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerParameters.java +++ b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerParameters.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerS.java b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerS.java index 411c8e97d..313afc136 100644 --- a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerS.java +++ b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerS.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerWithMerge.java b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerWithMerge.java index 5edf66de2..22cfc615c 100644 --- a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerWithMerge.java +++ b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerWithMerge.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignmentFailCause.java b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignmentFailCause.java index 919049621..3d108bec1 100644 --- a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignmentFailCause.java +++ b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignmentFailCause.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignmentResult.java b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignmentResult.java index 166391a0c..610a19419 100644 --- a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignmentResult.java +++ b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignmentResult.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCParametersPresets.java b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCParametersPresets.java index 0d7c8b79a..686ed4126 100644 --- a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCParametersPresets.java +++ b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCParametersPresets.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/main/java/com/milaboratory/mixcr/vdjaligners/VJAlignmentOrder.java b/src/main/java/com/milaboratory/mixcr/vdjaligners/VJAlignmentOrder.java index 55264ba3a..431a96dc6 100644 --- a/src/main/java/com/milaboratory/mixcr/vdjaligners/VJAlignmentOrder.java +++ b/src/main/java/com/milaboratory/mixcr/vdjaligners/VJAlignmentOrder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/assembler/AssemblerUtilsTest.java b/src/test/java/com/milaboratory/mixcr/assembler/AssemblerUtilsTest.java index d16dc71df..4f50266e7 100644 --- a/src/test/java/com/milaboratory/mixcr/assembler/AssemblerUtilsTest.java +++ b/src/test/java/com/milaboratory/mixcr/assembler/AssemblerUtilsTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/assembler/CloneAssemblerParametersPresetsTest.java b/src/test/java/com/milaboratory/mixcr/assembler/CloneAssemblerParametersPresetsTest.java index 060cf7b00..434828b95 100644 --- a/src/test/java/com/milaboratory/mixcr/assembler/CloneAssemblerParametersPresetsTest.java +++ b/src/test/java/com/milaboratory/mixcr/assembler/CloneAssemblerParametersPresetsTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/assembler/CloneAssemblerParametersTest.java b/src/test/java/com/milaboratory/mixcr/assembler/CloneAssemblerParametersTest.java index 9b8b9abfd..2e610cbf8 100644 --- a/src/test/java/com/milaboratory/mixcr/assembler/CloneAssemblerParametersTest.java +++ b/src/test/java/com/milaboratory/mixcr/assembler/CloneAssemblerParametersTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/assembler/CloneAssemblerRunnerTest.java b/src/test/java/com/milaboratory/mixcr/assembler/CloneAssemblerRunnerTest.java index 7310c3477..391ea78b0 100644 --- a/src/test/java/com/milaboratory/mixcr/assembler/CloneAssemblerRunnerTest.java +++ b/src/test/java/com/milaboratory/mixcr/assembler/CloneAssemblerRunnerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/assembler/CloneClusteringParametersTest.java b/src/test/java/com/milaboratory/mixcr/assembler/CloneClusteringParametersTest.java index a89ec0b42..877c8aed4 100644 --- a/src/test/java/com/milaboratory/mixcr/assembler/CloneClusteringParametersTest.java +++ b/src/test/java/com/milaboratory/mixcr/assembler/CloneClusteringParametersTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/assembler/CloneFactoryParametersTest.java b/src/test/java/com/milaboratory/mixcr/assembler/CloneFactoryParametersTest.java index f386fb293..166dcf04c 100644 --- a/src/test/java/com/milaboratory/mixcr/assembler/CloneFactoryParametersTest.java +++ b/src/test/java/com/milaboratory/mixcr/assembler/CloneFactoryParametersTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/assembler/ClusteringFilterTest.java b/src/test/java/com/milaboratory/mixcr/assembler/ClusteringFilterTest.java index 892a6ddaa..1e25f3111 100644 --- a/src/test/java/com/milaboratory/mixcr/assembler/ClusteringFilterTest.java +++ b/src/test/java/com/milaboratory/mixcr/assembler/ClusteringFilterTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/assembler/VJCClonalAlignerParametersTest.java b/src/test/java/com/milaboratory/mixcr/assembler/VJCClonalAlignerParametersTest.java index 07f449acd..8f415662d 100644 --- a/src/test/java/com/milaboratory/mixcr/assembler/VJCClonalAlignerParametersTest.java +++ b/src/test/java/com/milaboratory/mixcr/assembler/VJCClonalAlignerParametersTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/assembler/fullseq/FullSeqAssemblerTest.java b/src/test/java/com/milaboratory/mixcr/assembler/fullseq/FullSeqAssemblerTest.java index 91dffc0ec..09e294def 100644 --- a/src/test/java/com/milaboratory/mixcr/assembler/fullseq/FullSeqAssemblerTest.java +++ b/src/test/java/com/milaboratory/mixcr/assembler/fullseq/FullSeqAssemblerTest.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.assembler.fullseq; import cc.redberry.pipe.CUtils; diff --git a/src/test/java/com/milaboratory/mixcr/basictypes/ClnAReaderTest.java b/src/test/java/com/milaboratory/mixcr/basictypes/ClnAReaderTest.java index 0f1fcdf4f..83b872f6b 100644 --- a/src/test/java/com/milaboratory/mixcr/basictypes/ClnAReaderTest.java +++ b/src/test/java/com/milaboratory/mixcr/basictypes/ClnAReaderTest.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.basictypes; import cc.redberry.pipe.CUtils; diff --git a/src/test/java/com/milaboratory/mixcr/basictypes/ClonalSequenceTest.java b/src/test/java/com/milaboratory/mixcr/basictypes/ClonalSequenceTest.java index aac45b722..ff036b0f3 100644 --- a/src/test/java/com/milaboratory/mixcr/basictypes/ClonalSequenceTest.java +++ b/src/test/java/com/milaboratory/mixcr/basictypes/ClonalSequenceTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/basictypes/IOTest.java b/src/test/java/com/milaboratory/mixcr/basictypes/IOTest.java index 8be8b20aa..bb72c5318 100644 --- a/src/test/java/com/milaboratory/mixcr/basictypes/IOTest.java +++ b/src/test/java/com/milaboratory/mixcr/basictypes/IOTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/basictypes/MergerTest.java b/src/test/java/com/milaboratory/mixcr/basictypes/MergerTest.java index 4f5c3cf5e..d46da144c 100644 --- a/src/test/java/com/milaboratory/mixcr/basictypes/MergerTest.java +++ b/src/test/java/com/milaboratory/mixcr/basictypes/MergerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/basictypes/SequenceHistoryTest.java b/src/test/java/com/milaboratory/mixcr/basictypes/SequenceHistoryTest.java index 7faf70345..5095bdf12 100644 --- a/src/test/java/com/milaboratory/mixcr/basictypes/SequenceHistoryTest.java +++ b/src/test/java/com/milaboratory/mixcr/basictypes/SequenceHistoryTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2017, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * @@ -10,8 +10,9 @@ * three paragraphs appear in all copies. * * Those desiring to incorporate this work into commercial products or use for - * commercial purposes should contact the Inventors using one of the following - * email addresses: chudakovdm@mail.ru, chudakovdm@gmail.com + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. * * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, diff --git a/src/test/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsFormatterTest.java b/src/test/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsFormatterTest.java index 66963d8a2..d512ce8b9 100644 --- a/src/test/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsFormatterTest.java +++ b/src/test/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsFormatterTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * @@ -10,8 +10,9 @@ * three paragraphs appear in all copies. * * Those desiring to incorporate this work into commercial products or use for - * commercial purposes should contact the Inventors using one of the following - * email addresses: chudakovdm@mail.ru, chudakovdm@gmail.com + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. * * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, diff --git a/src/test/java/com/milaboratory/mixcr/basictypes/VDJCObjectTest.java b/src/test/java/com/milaboratory/mixcr/basictypes/VDJCObjectTest.java index 557daf46a..b0c7e3f7e 100644 --- a/src/test/java/com/milaboratory/mixcr/basictypes/VDJCObjectTest.java +++ b/src/test/java/com/milaboratory/mixcr/basictypes/VDJCObjectTest.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.basictypes; import com.milaboratory.core.sequence.NSequenceWithQuality; diff --git a/src/test/java/com/milaboratory/mixcr/cli/AlignerReportTest.java b/src/test/java/com/milaboratory/mixcr/cli/AlignerReportTest.java index 7e0d82cfa..5fd7d5677 100644 --- a/src/test/java/com/milaboratory/mixcr/cli/AlignerReportTest.java +++ b/src/test/java/com/milaboratory/mixcr/cli/AlignerReportTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/cli/CommandAnalyzeTest.java b/src/test/java/com/milaboratory/mixcr/cli/CommandAnalyzeTest.java index ccfe47a23..f2f447f38 100644 --- a/src/test/java/com/milaboratory/mixcr/cli/CommandAnalyzeTest.java +++ b/src/test/java/com/milaboratory/mixcr/cli/CommandAnalyzeTest.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import com.milaboratory.mixcr.util.RunMiXCR; diff --git a/src/test/java/com/milaboratory/mixcr/cli/JsonOverriderTest.java b/src/test/java/com/milaboratory/mixcr/cli/JsonOverriderTest.java index 586efe270..7f3976627 100644 --- a/src/test/java/com/milaboratory/mixcr/cli/JsonOverriderTest.java +++ b/src/test/java/com/milaboratory/mixcr/cli/JsonOverriderTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/cli/MainTest.java b/src/test/java/com/milaboratory/mixcr/cli/MainTest.java index 6c921d9bf..7599cdf3c 100644 --- a/src/test/java/com/milaboratory/mixcr/cli/MainTest.java +++ b/src/test/java/com/milaboratory/mixcr/cli/MainTest.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.cli; import org.junit.Ignore; diff --git a/src/test/java/com/milaboratory/mixcr/cli/UtilTest.java b/src/test/java/com/milaboratory/mixcr/cli/UtilTest.java index d38c6f4e0..53106b723 100644 --- a/src/test/java/com/milaboratory/mixcr/cli/UtilTest.java +++ b/src/test/java/com/milaboratory/mixcr/cli/UtilTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/export/FieldExtractorsTest.java b/src/test/java/com/milaboratory/mixcr/export/FieldExtractorsTest.java index b6801f7c5..fa62d340a 100644 --- a/src/test/java/com/milaboratory/mixcr/export/FieldExtractorsTest.java +++ b/src/test/java/com/milaboratory/mixcr/export/FieldExtractorsTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/partialassembler/PartialAlignmentsAssemblerAlignerTest.java b/src/test/java/com/milaboratory/mixcr/partialassembler/PartialAlignmentsAssemblerAlignerTest.java index d81d74652..bc5086b2e 100644 --- a/src/test/java/com/milaboratory/mixcr/partialassembler/PartialAlignmentsAssemblerAlignerTest.java +++ b/src/test/java/com/milaboratory/mixcr/partialassembler/PartialAlignmentsAssemblerAlignerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/partialassembler/PartialAlignmentsAssemblerTest.java b/src/test/java/com/milaboratory/mixcr/partialassembler/PartialAlignmentsAssemblerTest.java index 845406e0a..354193fbb 100644 --- a/src/test/java/com/milaboratory/mixcr/partialassembler/PartialAlignmentsAssemblerTest.java +++ b/src/test/java/com/milaboratory/mixcr/partialassembler/PartialAlignmentsAssemblerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/partialassembler/RangeSetTest.java b/src/test/java/com/milaboratory/mixcr/partialassembler/RangeSetTest.java index fd5bac4e3..728c7e1eb 100644 --- a/src/test/java/com/milaboratory/mixcr/partialassembler/RangeSetTest.java +++ b/src/test/java/com/milaboratory/mixcr/partialassembler/RangeSetTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/partialassembler/TargetMergerTest.java b/src/test/java/com/milaboratory/mixcr/partialassembler/TargetMergerTest.java index f6ea0d48c..791f1c02d 100644 --- a/src/test/java/com/milaboratory/mixcr/partialassembler/TargetMergerTest.java +++ b/src/test/java/com/milaboratory/mixcr/partialassembler/TargetMergerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/tests/BackwardCompatibilityTests.java b/src/test/java/com/milaboratory/mixcr/tests/BackwardCompatibilityTests.java index 012864fd2..9cb1d954b 100644 --- a/src/test/java/com/milaboratory/mixcr/tests/BackwardCompatibilityTests.java +++ b/src/test/java/com/milaboratory/mixcr/tests/BackwardCompatibilityTests.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/tests/MiXCRTestUtils.java b/src/test/java/com/milaboratory/mixcr/tests/MiXCRTestUtils.java index f10867e4f..e7b2beed3 100644 --- a/src/test/java/com/milaboratory/mixcr/tests/MiXCRTestUtils.java +++ b/src/test/java/com/milaboratory/mixcr/tests/MiXCRTestUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/tests/TargetBuilder.java b/src/test/java/com/milaboratory/mixcr/tests/TargetBuilder.java index 06c5298fe..fa6e8f7d7 100644 --- a/src/test/java/com/milaboratory/mixcr/tests/TargetBuilder.java +++ b/src/test/java/com/milaboratory/mixcr/tests/TargetBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/tests/TargetBuilderTest.java b/src/test/java/com/milaboratory/mixcr/tests/TargetBuilderTest.java index cc42c218d..ce607fec6 100644 --- a/src/test/java/com/milaboratory/mixcr/tests/TargetBuilderTest.java +++ b/src/test/java/com/milaboratory/mixcr/tests/TargetBuilderTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/util/AlignedStringsBuilderTest.java b/src/test/java/com/milaboratory/mixcr/util/AlignedStringsBuilderTest.java index 40ff01116..15ca72a36 100644 --- a/src/test/java/com/milaboratory/mixcr/util/AlignedStringsBuilderTest.java +++ b/src/test/java/com/milaboratory/mixcr/util/AlignedStringsBuilderTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/util/MiXCRVersionInfoTest.java b/src/test/java/com/milaboratory/mixcr/util/MiXCRVersionInfoTest.java index ee92493d5..ae97bb864 100644 --- a/src/test/java/com/milaboratory/mixcr/util/MiXCRVersionInfoTest.java +++ b/src/test/java/com/milaboratory/mixcr/util/MiXCRVersionInfoTest.java @@ -1,3 +1,32 @@ +/* + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * (here and after addressed as Inventors) + * All Rights Reserved + * + * Permission to use, copy, modify and distribute any part of this program for + * educational, research and non-profit purposes, by non-profit institutions + * only, without fee, and without a written agreement is hereby granted, + * provided that the above copyright notice, this paragraph and the following + * three paragraphs appear in all copies. + * + * Those desiring to incorporate this work into commercial products or use for + * commercial purposes should contact MiLaboratory LLC, which owns exclusive + * rights for distribution of this program for commercial purposes, using the + * following email address: licensing@milaboratory.com. + * + * IN NO EVENT SHALL THE INVENTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, + * ARISING OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE INVENTORS HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE INVENTORS HAS + * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + * MODIFICATIONS. THE INVENTORS MAKES NO REPRESENTATIONS AND EXTENDS NO + * WARRANTIES OF ANY KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A + * PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY + * PATENT, TRADEMARK OR OTHER RIGHTS. + */ package com.milaboratory.mixcr.util; import com.milaboratory.util.GlobalObjectMappers; diff --git a/src/test/java/com/milaboratory/mixcr/util/RunMiXCRTest.java b/src/test/java/com/milaboratory/mixcr/util/RunMiXCRTest.java index 829feadf4..ff5fee3a0 100644 --- a/src/test/java/com/milaboratory/mixcr/util/RunMiXCRTest.java +++ b/src/test/java/com/milaboratory/mixcr/util/RunMiXCRTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/util/VDJCAlignmentsDifferenceReaderTest.java b/src/test/java/com/milaboratory/mixcr/util/VDJCAlignmentsDifferenceReaderTest.java index 52a33a456..5d1e1e373 100644 --- a/src/test/java/com/milaboratory/mixcr/util/VDJCAlignmentsDifferenceReaderTest.java +++ b/src/test/java/com/milaboratory/mixcr/util/VDJCAlignmentsDifferenceReaderTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/util/VDJCObjectExtenderTest.java b/src/test/java/com/milaboratory/mixcr/util/VDJCObjectExtenderTest.java index cf964ea0d..3deaab4b7 100644 --- a/src/test/java/com/milaboratory/mixcr/util/VDJCObjectExtenderTest.java +++ b/src/test/java/com/milaboratory/mixcr/util/VDJCObjectExtenderTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/vdjaligners/DAlignerParametersTest.java b/src/test/java/com/milaboratory/mixcr/vdjaligners/DAlignerParametersTest.java index 9f91881a2..00305e4c6 100644 --- a/src/test/java/com/milaboratory/mixcr/vdjaligners/DAlignerParametersTest.java +++ b/src/test/java/com/milaboratory/mixcr/vdjaligners/DAlignerParametersTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/vdjaligners/KGeneAlignmentParametersTest.java b/src/test/java/com/milaboratory/mixcr/vdjaligners/KGeneAlignmentParametersTest.java index b209b17a1..7ec95f9df 100644 --- a/src/test/java/com/milaboratory/mixcr/vdjaligners/KGeneAlignmentParametersTest.java +++ b/src/test/java/com/milaboratory/mixcr/vdjaligners/KGeneAlignmentParametersTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerPVFirstTest.java b/src/test/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerPVFirstTest.java index 3fcf86cad..866b9a6d2 100644 --- a/src/test/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerPVFirstTest.java +++ b/src/test/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerPVFirstTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerParametersTest.java b/src/test/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerParametersTest.java index c7bc4eb10..a3e84cf36 100644 --- a/src/test/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerParametersTest.java +++ b/src/test/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerParametersTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerSTest.java b/src/test/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerSTest.java index 4f6e0b1b0..27f0145cd 100644 --- a/src/test/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerSTest.java +++ b/src/test/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerSTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerWithMergeTest.java b/src/test/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerWithMergeTest.java index d131475e3..f897e6de3 100644 --- a/src/test/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerWithMergeTest.java +++ b/src/test/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerWithMergeTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * diff --git a/src/test/java/com/milaboratory/mixcr/vdjaligners/VDJCParametersPresetsTest.java b/src/test/java/com/milaboratory/mixcr/vdjaligners/VDJCParametersPresetsTest.java index 585a83747..2db39c701 100644 --- a/src/test/java/com/milaboratory/mixcr/vdjaligners/VDJCParametersPresetsTest.java +++ b/src/test/java/com/milaboratory/mixcr/vdjaligners/VDJCParametersPresetsTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2018, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail + * Copyright (c) 2014-2019, Bolotin Dmitry, Chudakov Dmitry, Shugay Mikhail * (here and after addressed as Inventors) * All Rights Reserved * From bad0d2578c453359484d8e96ca7a0d5bcffeb438 Mon Sep 17 00:00:00 2001 From: Stanislav Poslavsky Date: Wed, 13 Feb 2019 20:12:40 +0300 Subject: [PATCH 18/19] Update install.rst --- doc/install.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/install.rst b/doc/install.rst index d90af739b..6597c9a28 100644 --- a/doc/install.rst +++ b/doc/install.rst @@ -17,8 +17,15 @@ To install MiXCR using Homebrew just type the following commands: :: brew tap milaboratory/all + brew install mixcr3 + +To install the old MiXCR 2.x series you can use + +:: + brew install mixcr + Installation on Mac OS X / Linux / FreeBSD from zip distribution ---------------------------------------------------------------- From b84feba4f90cb0b8ce17e0879e021decd483c209 Mon Sep 17 00:00:00 2001 From: Bolotin Dmitriy Date: Fri, 15 Feb 2019 00:36:39 +0300 Subject: [PATCH 19/19] Release v3.0.4 --- CHANGELOG | 17 +++++++++++++++++ CHANGELOG_CURRENT | 6 ------ pom.xml | 14 +++++--------- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index e3aa9954c..acf1dd2fa 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,4 +1,21 @@ +MiXCR 3.0.4 (15 Feb 2019) +======================== + +-- Fixed problem with possibly incorrect clone-to-alignment mapping and clonotype sorting. The + problem manifests itself in rare cercumstances, with `-OseparateByV/J/C=true` (special thanks to + Victor Greiff @GreiffLab for finding the bug and helping with testing) +-- Fixes exception while reading alignments from `clna` files (thanks to Dr. Ma @JohnMCMa for + finding the bug and providing the data to reproduce it) +-- Integration with new MiLib abstraction for CLI, to automatically infer when reanalysis is nedded + and when not (this mechanism extracts paramteres from the target files, and checks if current + command line sets the same options, if the options are the same, mixcr skips the step, otherwize + restarts the analysis) +-- Report for the `assemble` command now contains chain distribution statistics +-- `analyze` command now is case-insensitive for all options like `--starting-material` +-- Fixed exception arising in rare cases with sequence imputation on the export step + + MiXCR 3.0.3 (18 Nov 2018) ======================== diff --git a/CHANGELOG_CURRENT b/CHANGELOG_CURRENT index 9bed190a9..e69de29bb 100644 --- a/CHANGELOG_CURRENT +++ b/CHANGELOG_CURRENT @@ -1,6 +0,0 @@ -Fixed problem with possibly incorrect clone-to-alignment mapping and clonotype sorting. The problem manifests itself in rare cercumstances, with `-OseparateByV/J/C=true` (special thanks to Victor Greiff @GreiffLab for finding the bug and helping with testing) -Fixes exception while reading alignments from `clna` files (thanks to Dr. Ma @JohnMCMa for finding the bug and providing the data to reproduce it) -Integration with new MiLib abstraction for CLI, to automatically infer when reanalysis is nedded and when not (this mechanism extracts paramteres from the target files, and checks if current command line sets the same options, if the options are the same, mixcr skips the step, otherwize restarts the analysis) -Report for the `assemble` command now contains chain distribution statistics -`analyze` command now is case-insensitive for all options like `--starting-material` -Fixed exception arising in rare cases with sequence imputation on the export step \ No newline at end of file diff --git a/pom.xml b/pom.xml index dc110f357..c81aeba1b 100644 --- a/pom.xml +++ b/pom.xml @@ -28,13 +28,12 @@ ~ PARTICULAR PURPOSE, OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY ~ PATENT, TRADEMARK OR OTHER RIGHTS. --> - + 4.0.0 com.milaboratory mixcr - 3.0.4-SNAPSHOT + 3.0.4 jar MiXCR @@ -265,15 +264,12 @@ - + - + false - + com.milaboratory.mixcr.cli.Main