diff --git a/CHANGELOG b/CHANGELOG index b4d206954..61956f99f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,4 +1,24 @@ +MiXCR 1.7 (29 Dec 2015) +======================== + +-- New feature (#8 and #36) that allows to extract actual reads that were used in each clone (for + more details see documentation) +-- Import of custom gene segment sequences (`mixcr importSegments ...`) +-- Automated import of IMGT refenrence segment sequences (`mixcr importFromIMGT ...`) +-- Beta feature: new aligner with support of big gaps (see "New aligner" section in documentation). +-- Added new action `exportReads` which export initial reads aggregated by each clones to separate + .fastq files +-- Added new export options for `exportAlignments`: `-cloneId` (prints clone ID that aggregated + corresponding alignment) and `-mapping` (same, with additional info on mapping type) +-- Added new export option for `exportClones`: `-mapping` will pring all alignment IDs that were + aggreafated by clone +-- Added option `-n` (print only first n rows) to all `export` commands +-- Added new assembler option: minimal clonal sequence length (`-OminimalClonalSequenceLength=...`) +-- minor: minor improvements and bug fixes +-- minor: version information embedded into jar file (try `mixcr -v`) + + MiXCR 1.6 ( 6 Oct 2015) ======================== diff --git a/README.md b/README.md index 6d8b4e9fc..34c643d9b 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,71 @@ -Detailed documentation can be found at https://mixcr.readthedocs.org/. +## Overview ---- +MiXCR is a universal software for fast and accurate analysis of raw T- or B- cell receptor repertoire sequencing data. -*Please cite:* +## Installation + +#### Using Homebrew on Mac OS X or Linux (linuxbrew) + + brew tap milaboratory/all + brew install mixcr + +#### Manual install (any OS) + +* unzip the archive with MiXCR (see [release page](https://github.com/milaboratory/mixcr/releases)) +* add extracted folder to your ``PATH`` variable + * or add symbolic link for ``mixcr`` script to your ``bin`` folder + * or use MiXCR directly by specifying full path to the executable script + +#### Requiraments + +* Any OS with Java support (Linux, Windows, Mac OS X, etc..) +* Java 1.7 or higher + +## Usage + +Here is a very simple example of analysis of raw RepSeq data: + + mixcr align -r log.txt input_R1.fastq.gz input_R2.fastq.gz alignments.vdjca + mixcr assemble -r log.txt alignments.vdjca clones.clns + mixcr exportClones clones.clns clones.txt + +this sequence of commands will produce a tab-delimited list of clones (`clones.txt`) assembled by their CDR3 sequences with extensive information on their abondancies, V, D and J genes etc. + +For more details see documentation. + +## Documentation + +Detailed documentation can be found at https://mixcr.readthedocs.org/ + +## License + +Copyright (c) 2014-2015, 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 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. + +## Cite Bolotin, Dmitriy A., Stanislav Poslavsky, Igor Mitrophanov, Mikhail Shugay, Ilgar Z. Mamedov, Ekaterina V. Putintseva, and Dmitriy M. Chudakov. "MiXCR: software for comprehensive adaptive immunity profiling." *Nature methods* 12, no. 5 (**2015**): 380-381. diff --git a/doc/align.rst b/doc/align.rst index 50c46cb4e..01bd1e44b 100644 --- a/doc/align.rst +++ b/doc/align.rst @@ -1,3 +1,7 @@ +.. |br| raw:: html + +
+ .. _ref-align: Alignment @@ -28,46 +32,52 @@ Command line parameters The following table contains description of command line options for ``align``: -+----------------------------------+----------------------------+------------------------------------------------------------+ -| Option | Default value | Description | -+==================================+============================+============================================================+ -| ``-h``, ``--help`` | | Print help message. | -+----------------------------------+----------------------------+------------------------------------------------------------+ -| ``-r``, ``--report`` | | Report file name. If this option is not | -| | | specified, no report file be produced. | -+----------------------------------+----------------------------+------------------------------------------------------------+ -| ``-l``, ``--loci`` | ``ALL`` | Target immunological loci list separated by "``,``". | -| | | Available values: ``IGH``, ``IGL``, ``IGK``, ``TRA``, | -| | | ``TRB``, ``TRG``, ``TRD``, ``IG`` (for all immunoglobulin | -| | | loci), ``TCR`` (for all T-cell receptor loci), ``ALL`` | -| | | (for all loci) . | -+----------------------------------+----------------------------+------------------------------------------------------------+ -| ``-s``, ``--species`` | ``HomoSapiens`` | Species (organism). Possible values: ``hsa`` (or | -| | | ``HomoSapiens``) and ``mmu`` (or ``MusMusculus``). | -+----------------------------------+----------------------------+------------------------------------------------------------+ -| ``-p``, ``--parameters`` | ``default`` | Preset of parameters. Possible values: ``default`` and | -| | | ``rna-seq``. The ``rna-seq`` preset are specifically | -| | | optimized for analysis of Rna-Seq data | -| | | :ref:`(see below) ` | -+----------------------------------+----------------------------+------------------------------------------------------------+ -| ``-i``, ``--diff-loci`` | | Accept alignments with different loci of V and J genes | -| | | (by default such alignments are dropped). | -+----------------------------------+----------------------------+------------------------------------------------------------+ -| ``-t``, ``--threads`` | number of | Number of processing threads. | -| | available CPU cores | | -+----------------------------------+----------------------------+------------------------------------------------------------+ -| ``-n``, ``--limit`` | | Limit number of sequences that will be analysed (only | -| | | first ``-n`` sequences will be processed from input | -| | | file(s)). | -+----------------------------------+----------------------------+------------------------------------------------------------+ -| ``-a``, ``--save-description`` | | Copy read(s) description line from ``.fastq`` or | -| | | ``.fasta`` to ``.vdjca`` file (can be then exported with | -| | | ``-descrR1`` and ``-descrR2`` options in | -| | | :ref:`exportAlignments ` action). | -+----------------------------------+----------------------------+------------------------------------------------------------+ -| ``-Oparameter=value`` | | Overrides default value of aligner ``parameter`` | -| | | (see next subsection). | -+----------------------------------+----------------------------+------------------------------------------------------------+ ++-------------------------------------+----------------------------+------------------------------------------------------------+ +| Option | Default value | Description | ++=====================================+============================+============================================================+ +| ``-h``, ``--help`` | | Print help message. | ++-------------------------------------+----------------------------+------------------------------------------------------------+ +| ``-r {file}`` |br| | | Report file name. If this option is not | +| ``--report ...`` | | specified, no report file be produced. | ++-------------------------------------+----------------------------+------------------------------------------------------------+ +| ``-l {loci}`` |br| | ``ALL`` | Target immunological loci list separated by "``,``". | +| ``--loci ...`` | | Available values: ``IGH``, ``IGL``, ``IGK``, ``TRA``, | +| | | ``TRB``, ``TRG``, ``TRD``, ``IG`` (for all immunoglobulin | +| | | loci), ``TCR`` (for all T-cell receptor loci), ``ALL`` | +| | | (for all loci) . | ++-------------------------------------+----------------------------+------------------------------------------------------------+ +| ``-s {speciesName}`` |br| | ``HomoSapiens`` | Species (organism). Possible values: ``hsa`` (or | +| ``--species ...`` | | ``HomoSapiens``) and ``mmu`` (or ``MusMusculus``), or any | +| | | that was provided during import of segments (see | +| | | :ref:`import segments `) | ++-------------------------------------+----------------------------+------------------------------------------------------------+ +| ``-p {parameterName}`` |br| | ``default`` | Preset of parameters. Possible values: ``default`` and | +| ``--parameters ...`` | | ``rna-seq``. The ``rna-seq`` preset are specifically | +| | | optimized for analysis of Rna-Seq data | +| | | :ref:`(see below) ` | ++-------------------------------------+----------------------------+------------------------------------------------------------+ +| ``-i``, ``--diff-loci`` | | Accept alignments with different loci of V and J genes | +| | | (by default such alignments are dropped). | ++-------------------------------------+----------------------------+------------------------------------------------------------+ +| ``-t {numberOfThreads}`` |br| | number of | Number of processing threads. | +| ``--threads ...`` | available CPU cores | | ++-------------------------------------+----------------------------+------------------------------------------------------------+ +| ``-n {numberOfReads}`` |br| | | Limit number of sequences that will be analysed (only | +| ``--limit ...`` | | first ``-n`` sequences will be processed from input | +| | | file(s)). | ++-------------------------------------+----------------------------+------------------------------------------------------------+ +| ``-a``, ``--save-description`` | | Copy read(s) description line from ``.fastq`` or | +| | | ``.fasta`` to ``.vdjca`` file (can be then exported with | +| | | ``-descrR1`` and ``-descrR2`` options in | +| | | :ref:`exportAlignments ` action). | ++-------------------------------------+----------------------------+------------------------------------------------------------+ +| ``-g``, ``--save-reads`` | | Copy read(s) from ``.fastq`` or ``.fasta`` to ``.vdjca`` | +| | | file (this is required for exporting reads aggregated by | +| | | clones; see :ref:`this section `). | ++-------------------------------------+----------------------------+------------------------------------------------------------+ +| ``-Oparameter=value`` | | Overrides default value of aligner ``parameter`` | +| | | (see next subsection). | ++-------------------------------------+----------------------------+------------------------------------------------------------+ All parameters are optional. @@ -103,11 +113,14 @@ Other global aligner parameters are: +------------------------------------+---------------+---------------------------------------------------------------------------------------+ | Parameter | Default value | Description | +====================================+===============+=======================================================================================+ -| ``minSumScore`` | ``120.0`` | Minimal total alignment score value of V and J genes. | +| ``minSumScore`` | ``120.0`` | Minimal total alignment score value of V and J genes. | +------------------------------------+---------------+---------------------------------------------------------------------------------------+ -| ``maxHits`` | ``5`` | Maximal number of hits for each gene type: if input sequence align to more than | +| ``maxHits`` | ``5`` | Maximal number of hits for each gene type: if input sequence align to more than | | | | ``maxHits`` targets, then only top ``maxHits`` hits will be kept. | +------------------------------------+---------------+---------------------------------------------------------------------------------------+ +| ``minimalClonalSequenceLength`` | ``12`` | Minimal clonal sequence length (e.g. minimal sequence of CDR3 to be used for clone | +| | | assembly) | ++------------------------------------+---------------+---------------------------------------------------------------------------------------+ | ``vjAlignmentOrder`` | ``VThenJ`` | Order in which V and J genes aligned in target (possible values ``JThenV`` and | | (*only for single-end* | | ``VThenJ``). Parameter affects only *single-read* alignments and alignments of | | *analysis*) | | overlapped paired-end reads. Non-overlaping paired-end reads are always processed in | @@ -194,8 +207,8 @@ parameters. It contains the following parameters: | | | other elements equal to ``mismatch`` | | | | - ``raw`` --- a complete set of 16 matrix elements should be specified; | | | | forĀ  example: | -| | | ``raw(5,-9,-9,-9,-9,5,-9,-9,-9,-9,5,-9,-9,-9,-9,5)`` | -| | | (*equivalent to the default value*) | +| | | ``raw(5,-9,-9,-9,-9,5,-9,-9,-9,-9,5,-9,-9,-9,-9,5)`` | +| | | (*equivalent to the default value*) | +------------------+----------------------------------------+-----------------------------------------------------------------------------+ | ``gapPenalty`` | ``-12`` | Penalty for gap. | +------------------+----------------------------------------+-----------------------------------------------------------------------------+ diff --git a/doc/assemble.rst b/doc/assemble.rst index 137f87466..569403d4c 100644 --- a/doc/assemble.rst +++ b/doc/assemble.rst @@ -1,3 +1,7 @@ +.. |br| raw:: html + +
+ .. _ref-assemble: Assemble clones @@ -79,17 +83,22 @@ Command line parameters The command line options of ``assemble`` are the following: -+-------------------------+-------------------------------+--------------------------------------------------------------------------------+ -| Option | Default value | Description | -+=========================+===============================+================================================================================+ -| ``-h``, ``--help`` | | Print help message. | -+-------------------------+-------------------------------+--------------------------------------------------------------------------------+ -| ``-r``, ``--report`` | | Report file name. If this option is not specified, no report file be produced. | -+-------------------------+-------------------------------+--------------------------------------------------------------------------------+ -| ``-t``, ``--threads`` | number of available CPU cores | Number of processing threads. | -+-------------------------+-------------------------------+--------------------------------------------------------------------------------+ -| ``-Oparameter=value`` | | Overrides default value of assembler ``parameter`` (see next subsection). | -+-------------------------+-------------------------------+--------------------------------------------------------------------------------+ ++-------------------------------------+-------------------------------+--------------------------------------------------------------------------------+ +| Option | Default value | Description | ++=====================================+===============================+================================================================================+ +| ``-h``, ``--help`` | | Print help message. | ++-------------------------------------+-------------------------------+--------------------------------------------------------------------------------+ +| ``-r {file}`` |br| | | Report file name. If this option is not specified, no report file be produced. | +| ``--report ...`` | | | ++-------------------------------------+-------------------------------+--------------------------------------------------------------------------------+ +| ``-t {numberOfProcessors}`` |br| | number of available CPU cores | Number of processing threads. | +| ``--threads ...`` | | | ++-------------------------------------+-------------------------------+--------------------------------------------------------------------------------+ +| ``-i {indexFile}`` |br| | | Specify file which will store information about particular reads aggreagated | +| ``--index ...`` | | by each clone (mapping readId -> cloneId). | ++-------------------------------------+-------------------------------+--------------------------------------------------------------------------------+ +| ``-Oparameter=value`` | | Overrides default value of assembler ``parameter`` (see next subsection). | ++-------------------------------------+-------------------------------+--------------------------------------------------------------------------------+ All parameters are optional. diff --git a/doc/export.rst b/doc/export.rst index 714d372cf..ae6569fa4 100644 --- a/doc/export.rst +++ b/doc/export.rst @@ -73,20 +73,33 @@ Command line parameters The list of command line parameters for both ``exportAlignments`` and ``exportClones`` is the following: -+---------------------+-------------------------------------------------------------------+ -| Option | Description | -+=====================+===================================================================+ -| -h, --help | print help message | -+---------------------+-------------------------------------------------------------------+ -| -f, --fields | list available fields that can be exported | -+---------------------+-------------------------------------------------------------------+ -| -p, --preset | select predefined set of fields to export (``full`` or ``min``) | -+---------------------+-------------------------------------------------------------------+ -| -pf, --presetFile | load file with a list of fields to export | -+---------------------+-------------------------------------------------------------------+ -| -s, --no-spaces | output short versions of column headers which facilitates analysis| -| | with Pandas, R/DataFrames or other data tables processing library | -+---------------------+-------------------------------------------------------------------+ ++-----------------------------+-------------------------------------------------------------------+ +| Option | Description | ++=============================+===================================================================+ +| ``-h``, ``--help`` | print help message | ++-----------------------------+-------------------------------------------------------------------+ +| ``-f``, ``--fields`` | list available fields that can be exported | ++-----------------------------+-------------------------------------------------------------------+ +| ``-p``, ``--preset`` | select predefined set of fields to export (``full`` or ``min``) | ++-----------------------------+-------------------------------------------------------------------+ +| ``-pf``, ``--preset-file`` | load file with a list of fields to export | ++-----------------------------+-------------------------------------------------------------------+ +| ``-l``, ``--list-fields`` | list availabel fields that can be exported | ++-----------------------------+-------------------------------------------------------------------+ +| ``-s``, ``--no-spaces`` | output short versions of column headers which facilitates analysis| +| | with Pandas, R/DataFrames or other data tables processing library | ++-----------------------------+-------------------------------------------------------------------+ + +The line parameters are only for ``exportClones``: + ++------------------------------------+-------------------------------------------------------------------+ +| ``-o``, ``--filter-out-of-frames`` | Exclude out of frames (fractions will be recalculated) | ++------------------------------------+-------------------------------------------------------------------+ +| ``-t``, ``--filter-stops`` | Exclude sequences containing stop codons (fractions will be | +| | recalculated) | ++------------------------------------+-------------------------------------------------------------------+ + + Available fields ---------------- @@ -159,39 +172,52 @@ The following fields can be exported both for alignments and clones: The following fields are specific for alignments: -+---------------+-----------------------------------------------------------------------------------------------------------------------------+ -| Field | Description | -+===============+=============================================================================================================================+ -| ``-sequence`` | Aligned sequence (initial read), or 2 sequences in case of paired-end reads. | -+---------------+-----------------------------------------------------------------------------------------------------------------------------+ -| ``-quality`` | Initial read quality, or 2 qualities in case of paired-end reads. | -+---------------+-----------------------------------------------------------------------------------------------------------------------------+ -| ``-readId`` | Index of source read (in e.g. ``.fastq`` file) for alignment. | -+---------------+-----------------------------------------------------------------------------------------------------------------------------+ -| ``-targets`` | Number of targets, i.e. 1 in case of single reads and 2 in case of paired-end reads. | -+---------------+-----------------------------------------------------------------------------------------------------------------------------+ -| ``-descrR1`` | Description line from initial ``.fasta`` or ``.fastq`` file of the first read (only available if ``--save-description`` was | -| | used in :ref:`align ` command). | -+---------------+-----------------------------------------------------------------------------------------------------------------------------+ -| ``-descrR2`` | Description line from initial ``.fastq`` file of the second read (only available if ``--save-description`` was used in | -| | :ref:`align ` command). | -+---------------+-----------------------------------------------------------------------------------------------------------------------------+ ++-----------------------------+------------------------------------------------------------------------------------------------------------+ +| Field | Description | ++=============================+============================================================================================================+ +| ``-sequence`` | Aligned sequence (initial read), or 2 sequences in case of paired-end reads. | ++-----------------------------+------------------------------------------------------------------------------------------------------------+ +| ``-quality`` | Initial read quality, or 2 qualities in case of paired-end reads. | ++-----------------------------+------------------------------------------------------------------------------------------------------------+ +| ``-readId`` | Index of source read (in e.g. ``.fastq`` file) for alignment. | ++-----------------------------+------------------------------------------------------------------------------------------------------------+ +| ``-targets`` | Number of targets, i.e. 1 in case of single reads and 2 in case of paired-end reads. | ++-----------------------------+------------------------------------------------------------------------------------------------------------+ +| ``-descrR1`` | Description line from initial ``.fasta`` or ``.fastq`` file of the first read (only available if | +| | ``--save-description`` was used in :ref:`align ` command). | ++-----------------------------+------------------------------------------------------------------------------------------------------------+ +| ``-descrR2`` | Description line from initial ``.fastq`` file of the second read (only available if ``--save-description`` | +| | was used in :ref:`align ` command). | ++-----------------------------+------------------------------------------------------------------------------------------------------------+ +| ``-cloneId [file]`` | Id of clone that aggregated this alignment. The index file must be specified (this file can be built with | +| | ``--index [file]`` option for :ref:`align ` command). For examples see | +| | :ref:`this paragraph `. | ++-----------------------------+------------------------------------------------------------------------------------------------------------+ +| ``-cloneIdWithMappinfType`` | Id of clone that aggregated this alignment with additional information about mapping type. The index | +| ``[file]`` | file must be specified (this file can be built with ``--index [file]`` option for | +| | :ref:`align ` command). For examples see :ref:`this paragraph `. | ++-----------------------------+------------------------------------------------------------------------------------------------------------+ The following fields are specific for clones: -+---------------+----------------------------------------------------------------------------------------+ -| Field | Description | -+===============+========================================================================================+ -| ``-count`` | Clone count. | -+---------------+----------------------------------------------------------------------------------------+ -| ``-fraction`` | Clone fraction. | -+---------------+----------------------------------------------------------------------------------------+ -| ``-sequence`` | Clonal sequence (or several sequences in case of multi-featured assembling). | -+---------------+----------------------------------------------------------------------------------------+ -| ``-quality`` | Clonal sequence quality (or several qualities in case of multi-featured assembling). | -+---------------+----------------------------------------------------------------------------------------+ -| ``-targets`` | Number of targets, i.e. number of gene regions used to assemble clones. | -+---------------+----------------------------------------------------------------------------------------+ ++---------------------+----------------------------------------------------------------------------------------+ +| Field | Description | ++=====================+========================================================================================+ +| ``-count`` | Clone count. | ++---------------------+----------------------------------------------------------------------------------------+ +| ``-fraction`` | Clone fraction. | ++---------------------+----------------------------------------------------------------------------------------+ +| ``-sequence`` | Clonal sequence (or several sequences in case of multi-featured assembling). | ++---------------------+----------------------------------------------------------------------------------------+ +| ``-quality`` | Clonal sequence quality (or several qualities in case of multi-featured assembling). | ++---------------------+----------------------------------------------------------------------------------------+ +| ``-targets`` | Number of targets, i.e. number of gene regions used to assemble clones. | ++---------------------+----------------------------------------------------------------------------------------+ +| ``-readIds [file]`` | IDs of reads that were aggregated by clone. The index file must be specified (this | +| | file can be built with ``--index [file]`` option for :ref:`align ` | +| | command). For examples see :ref:`this paragraph `. | ++---------------------+----------------------------------------------------------------------------------------+ + Default anchor point positions ------------------------------ @@ -540,3 +566,116 @@ Using of ``--verbose`` option will produce alignments in s slightly different fo + + +.. _ref-exporting-reads: + +Exporting reads aggregated by clones +------------------------------------ + +MiXCR allows to preserve mapping between initial reads and final clonotypes. There are several options how to access this information. + +In any way, first one need to specify additonal option ``--index`` for the :ref:`assemble ` command: + +:: + + mixcr assemble --index index_file alignments.vdjca output.clns + +This will tell MiXCR to store mapping in the file ``index_file``. Now one can use ``index_file`` in order to access this information. For example using ``-cloneId`` option for ``exportAlignments`` command: + +:: + + mixcr exportAlignments -p min -cloneId index_file alignments.vdjca alignments.txt + +will print additional column with id of the clone which contains corresponding alignment: + + ++----------------+----------------+-------+----------+ +| Best V hit | Best D hit | ... | CloneId | ++================+================+=======+==========+ +| IGHV4-34\*\00 | | ... | 321 | ++----------------+----------------+-------+----------+ +| IGHV2-23\*\00 | IGHD2\*\21 | ... | | ++----------------+----------------+-------+----------+ +| IGHV4-34\*\00 | IGHD2\*\21 | ... | 22143 | ++----------------+----------------+-------+----------+ +| ... | ... | ... | ... | ++----------------+----------------+-------+----------+ + +For more information one can export mapping type as well: + +:: + + mixcr exportAlignments -p min -cloneIdWithMappingType index_file alignments.vdjca alignments.txt + +which will give something like: + ++----------------+----------------+-------+----------------------+ +| Best V hit | Best D hit | ... | Clone mapping | ++================+================+=======+======================+ +| IGHV4-34\*\00 | | ... | 321:core | ++----------------+----------------+-------+----------------------+ +| IGHV2-23\*\00 | IGHD2\*\21 | ... | dropped | ++----------------+----------------+-------+----------------------+ +| IGHV4-34\*\00 | IGHD2\*\21 | ... | 22143:clustered | ++----------------+----------------+-------+----------------------+ +| IGHV4-34\*\00 | IGHD2\*\21 | ... | 23:mapped | ++----------------+----------------+-------+----------------------+ +| ... | ... | ... | ... | ++----------------+----------------+-------+----------------------+ + + +One can also export all read IDs that were aggregated by eah clone. For this one can use ``-readIds`` export options for ``exportClones`` action: + +:: + + mixcr exportAlignments -p min -readIds index_file clones.clns clones.txt + +This will add a column with full enumeration of all reads that were absorbed by particular clone: + + ++----------+-------------+----------------+-----+--------------------------------+ +| Clone ID | Clone count | Best V hit | ... | Reads | ++==========+=============+================+=====+================================+ +| 0 | 7213 | IGHV4-34\*\00 | ... | 56,74,92,96,101,119,169,183... | ++----------+-------------+----------------+-----+--------------------------------+ +| 1 | 2951 | IGHV2-23\*\00 | ... | 46,145,194,226,382,451,464... | ++----------+-------------+----------------+-----+--------------------------------+ +| 2 | 2269 | IGHV4-34\*\00 | ... | 58,85,90,103,113,116,122,123...| ++----------+-------------+----------------+-----+--------------------------------+ +| 3 | 124 | IGHV4-34\*\00 | ... | 240,376,496,617,715,783,813... | ++----------+-------------+----------------+-----+--------------------------------+ +| ... | | ... | ... | ... | ++----------+-------------+----------------+-----+--------------------------------+ + +Note, that resulting txt file may be very huge since all read numbers that were successfully assembled will be printed. + + +Finally, one can export reads aggregated by each clone into separate ``.fastq`` file. For that one need first to specify additional ``-g`` option for :ref:`align ` command: + +:: + + mixcr align -g -l IGH input.fastq alignments.vdjca.gz + +With this option MiXCR will store original reads in the ``.vdjca`` file. Then one can export reads corresponding for particular clone with ``exportReads`` command. For example, export all reads that were assembled into the first clone (clone with cloneId = 1): + +:: + + mixcr exportReads index_file alignments.vdjca.gz 0 reads.fastq.gz + +This will create file ``reads_clns0.fastq.gz`` (or two files ``reads_clns0_R1.fastq.gz`` and ``reads_clns0_R2.fastq.gz`` if the original data were paired) with all reads that were aggregated by the first clone. One can export reads for several clones at a time: + +:: + + mixcr exportReads index_file alignments.vdjca.gz 0 1 2 33 54 reads.fastq.gz + +This will create several files (``reads_clns0.fastq.gz``, ``reads_clns1.fastq.gz`` etc.) for each clone with cloneId equal to 0, 1, 2, 33 and 54 respectively. + + + + + + + + + diff --git a/doc/importSegments.rst b/doc/importSegments.rst new file mode 100644 index 000000000..3b274fdd3 --- /dev/null +++ b/doc/importSegments.rst @@ -0,0 +1,148 @@ +.. _ref-importSegments: + +.. |br| raw:: html + +
+ +Importing gene segment sequences +================================ + +.. tip:: + + The ``mixcr importFromIMGT`` command is the simplest way to import reference segment sequences from IMGT. (*see documnetation below*) + +.. _ref-auto-imgt: + +Automated import of reference sequences from IMGT +------------------------------------------------- + +To simplify import of IMGT reference sequences we developed an interactive bash script that will automatically download and import all possible reference sequences for a selected species. + +The sctipt can be invoked using ``mixcr importFromIMGT`` command, or can be found in the root folder of MiXCR distribution zip file (``importFromIMGT.sh``). + +Script has the following dependacies: + +- wget +- pup (see installation instractions here_) + +.. _here: https://github.com/EricChiang/pup#install + +To use the script, just execute it from any folder to where you have a write access: + +:: + + mixcr importFromIMGT + +or execute it directly + +:: + + /path/to/unzipped/mixcr/importIMGT.sh + +It will ask you to accept the copyright rules of IMGT website, to select a species and to provide it's common names. After doing this, script will automatically download all required files from IMGT website and import them to a local loci library. + +During execution script will create log files for each type of imported segment. See below for example log file. + +After import reference sequences can be used as follows: + +:: + + mixcr align --library local -s macaca .... + + +Import of V, D and J gene sequences from a file +----------------------------------------------- + +If you need to analyse data from species that are not covered by MiXCR built-it reference V, D, J genes library, or you just want to use alternative reference library, you can convert specially formatted fasta files to MiXCR loci-library format by using ``importSegments`` action. + +Here is the examaple command: + +:: + + mixcr importSegments -p imgt -v human_TRBV.fasta -j human_TRBJ.fasta \ + -d human_TRBD.fasta -l TRB -s 9606:hs -r report.txt + +This command will import IMGT formatted fasta files (like those that can be downloade on this_ page) and import it to a local loci library file (stored in ``~/.mixcr/local.ll``). + +.. _this: http://www.imgt.org/vquest/refseqh.html + +Command line parameters +^^^^^^^^^^^^^^^^^^^^^^^ + +Here is the list of command line parameters for ``importSegments`` action: + ++------------------------------------+-------------------------------------------------------------------+ +| Option | Description | ++====================================+===================================================================+ +| ``-p {params}`` |br| | select the parameters of import. Parameters determine how to | +| ``--parameters {params}`` | parse fasta headers and how to extract information about anchor | +| | points (e.g. using specific positions in sequences with IMGT gaps | +| | or searching for a specific patterns in gene seqeuence). | +| | |br| |br| currently, the only possible value is ``imgt`` | ++------------------------------------+-------------------------------------------------------------------+ +| ``-v {file}`` | specify fasta-formatted file with sequences ov V genes | ++------------------------------------+-------------------------------------------------------------------+ +| ``-d {file}`` | specify fasta-formatted file with sequences ov D genes | ++------------------------------------+-------------------------------------------------------------------+ +| ``-j {file}`` | specify fasta-formatted file with sequences ov J genes | ++------------------------------------+-------------------------------------------------------------------+ +| ``-l {locus}`` |br| | determines which immunological locus data is being imported | +| ``--locus {locus}`` | |br| |br| | +| | possible values: ``TRA``, ``TRB``, ``TRG``, ``TRD``, | +| | ``IGH``, ``IGL``, ``IGK`` | ++------------------------------------+-------------------------------------------------------------------+ +| ``-s {taxonID:commName1:..}`` |br| | specify NCBI Taxonomy ID (e.g. 9606 for human) and a list of | +| ``--species {...}`` | common species names for organism to be imported |br| |br| | +| | example: ``9606:hs:hsa:human:homsap`` | ++------------------------------------+-------------------------------------------------------------------+ +| ``-r {reportFile}`` |br| | specify report file. |br| Report contains comprehancive error and | +| ``--report {reportFile}`` | warning log of importing procedure and amino-acid and nucleotide | +| | alignments of allelic variants imported from file, along with | +| | information ot infered positions of anchor points for all | +| | imported genes (see below) | ++------------------------------------+-------------------------------------------------------------------+ +| ``-f`` | force overwrite already existing locus records in the output file | ++------------------------------------+-------------------------------------------------------------------+ + + +Report file +^^^^^^^^^^^ + +It is very important to manually check results of importing, as this process involves several empirical steps like search of an anchor points using patterns in the sequence. MiXCR produces comprehansive report file with errors and warnings arised during importing and well-formatted nucleotide and amino acid alignments of allelic variants of V, D and J genes which are marked up with anchor points, so any mistakes can be easily detected. + +Here is the example report file record: + +.. raw:: html + +
+
+    TRBV4-1
+    =======
+                        <FR1                                                                      FR1><C
+     TRBV4-1*01 [F]   0 GACACTGAAGTTACCCAGACACCAAAACACCTGGTCATGGGAATGACAAATAAGAAGTCTTTGAAATGTGAACAACATAT 79
+     TRBV4-1*02 [F]   0                                                                               .. 1
+
+                        DR1     CDR1><FR2                                           FR2><CDR2        CDR
+     TRBV4-1*01 [F]  80 GGGGCACAGGGCTATGTATTGGTACAAGCAGAAAGCTAAGAAGCCACCGGAGCTCATGTTTGTCTACAGCTATGAGAAAC 159
+     TRBV4-1*02 [F]   2 ............A................................................................... 81
+
+                        2><FR3
+     TRBV4-1*01 [F] 160 TCTCTATAAATGAAAGTGTGCCAAGTCGCTTCTCACCTGAATGCCCCAACAGCTCTCTCTTAAACCTTCACCTACACGCC 239
+     TRBV4-1*02 [F]  82 ................................................................................ 161
+
+                                                  FR3><CDR3          V>
+     TRBV4-1*01 [F] 240 CTGCAGCCAGAAGACTCAGCCCTGTATCTCTGCGCCAGCAGCCAAGA 286
+     TRBV4-1*02 [F] 162 ..............................................- 207
+
+
+     **********
+
+                       <FR1                  FR1>CDR1><FR2         FR2><CDR2><FR3
+     TRBV4-1*01 [F]  0 DTEVTQTPKHLVMGMTNKKSLKCEQHMGHRAMYWYKQKAKKPPELMFVYSYEKLSINESVPSRFSPECPNSSLLNLHLHA 79
+     TRBV4-1*02 [F]  0                           ...................................................... 53
+
+                             FR3><CDR3
+     TRBV4-1*01 [F] 80 LQPEDSALYLCASSQ_ 95
+     TRBV4-1*02 [F] 54 ................ 69
+
+    
\ No newline at end of file diff --git a/doc/index.rst b/doc/index.rst index 09debab56..df8c03b6e 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -1,5 +1,7 @@ +.. rubric:: asdasd + MiXCR: a universal tool for fast and accurate analysis of T- and B- cell receptor repertoire sequencing data -============================================================================================================ +------------------------------------------------------------------------------------------------------------ MiXCR is a universal framework that processes big immunome data from raw sequences to quantitated clonotypes. MiXCR efficiently handles @@ -9,7 +11,11 @@ supports both partial- and full-length profiling and employs all available RNA or DNA information, including sequences upstream of V and downstream of J gene segments. +MiXCR is free for academic and non-profit use (see :ref:`License `). + + .. figure:: _static/mixcr.png + :align: center :width: 80% *MiXCR pipeline. The workflow from IG or T-cell receptor data sets to final clonotypes is shown* @@ -18,12 +24,16 @@ Table of contents: ------------------ .. toctree:: - :maxdepth: 2 + :hidden: + :maxdepth: 1 install quickstart align assemble export + newAligner + importSegments geneFeatures - appendix \ No newline at end of file + appendix + license \ No newline at end of file diff --git a/doc/install.rst b/doc/install.rst index 22a316c45..3689eb9f2 100644 --- a/doc/install.rst +++ b/doc/install.rst @@ -8,6 +8,18 @@ System requirements - Java version 7 or higher (download from `Oracle web site `_) - 1--16 Gb RAM (depending on number of clones in the sample) +Installation on Mac OS X / Linux using Homebrew +----------------------------------------------- + +`Homebrew `_ is a simple package manager developed for Mac OS X and also `ported `_ to Linux. +To install MiXCR using Homebrew just type the following commands: + +:: + + brew tap milaboratory/all + brew install mixcr + + Installation on Mac OS X / Linux ------------------------------------ diff --git a/doc/license.rst b/doc/license.rst new file mode 100644 index 000000000..464b20a53 --- /dev/null +++ b/doc/license.rst @@ -0,0 +1,31 @@ +.. _license: + +License +------- + +Copyright (c) 2014-2015, 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 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. diff --git a/doc/newAligner.rst b/doc/newAligner.rst new file mode 100644 index 000000000..0cca33b57 --- /dev/null +++ b/doc/newAligner.rst @@ -0,0 +1,18 @@ +.. _ref-kAligner2: + +(BETA) KAligner2: New aligner with big gaps support +=================================================== + +.. danger:: + + This feature is provided for beta testing, and not recommended for production use! + +To process data using new aligner, apply special paramenter pre-sets as follows: + +:: + + mixcr align -p kaligner2 .... + mixcr assemble -p default_affine .... + .... + +Any other parameters can also be provided along with ``-p ...`` option. diff --git a/doc/quickstart.rst b/doc/quickstart.rst index e4ccb5fb7..f8cc311f1 100644 --- a/doc/quickstart.rst +++ b/doc/quickstart.rst @@ -225,4 +225,46 @@ Other analysis stages can be executed without any additional parameters: > mixcr assemble alignments.vdjca clones.clns - > mixcr exportClones clones.clns clones.txt \ No newline at end of file + > mixcr exportClones clones.clns clones.txt + + +.. _ref-exampleBackwardLinks: + + +Saving links between initial reads and clones +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In this example we demonstrate how to extract initial read headers for assembled clonotypes. On the ``align`` step additional ``--save-description`` option should be specified in order to store headers from reads in the resulting ``.vdjca`` file: + +.. code-block:: console + + > mixcr align --save-description input_R1.fastq input_R2.fastq alignments.vdjca + +On the ``assemble`` stage it is necessary to specify file for the index (which stores mapping from reads to clonotypes): + +.. code-block:: console + + > mixcr assemble --index indexFile alignments.vdjca clones.clns + +Having this, it is possible to export original read headers with corresponding clone IDs: + +.. code-block:: console + + > mixcr exportAlignments -cloneId indexFile -descrR1 -descrR2 alignments.vdjca alignments.txt + +The resulting file ``alignments.txt`` will looks like: + + ++-----------+-----------------+-----------------+ +| Clone ID | Description R1 | Description R2 | ++===========+=================+=================+ +| 10 | header_1_R1 | header_1_R2 | ++-----------+-----------------+-----------------+ +| | header_2_R1 | header_2_R2 | ++-----------+-----------------+-----------------+ +| 2313 | header_3_R1 | header_3_R2 | ++-----------+-----------------+-----------------+ +| 88142 | header_5_R1 | header_5_R2 | ++-----------+-----------------+-----------------+ +| ... | ... | ... | ++-----------+-----------------+-----------------+ \ No newline at end of file diff --git a/importFromIMGT.sh b/importFromIMGT.sh new file mode 100755 index 000000000..6d06dbd41 --- /dev/null +++ b/importFromIMGT.sh @@ -0,0 +1,111 @@ +#/bin/bash + +mixcr="mixcr" + +while [[ $# > 0 ]] +do + key="$1" + shift + case $key in + -mixcr) + mixcr="$1" + shift + ;; + *) + echo "Unknown option: ${key}" >2 + exit 1 + ;; + esac +done + +echo "By using this script you agree to the terms of use of IMGT website. (see http://www.imgt.org/ for details)." +echo -n "Press ENTER to continue or other key to exit..." +read -n 1 c +if [[ "$c" != "" ]]; then + echo "" + exit 1; +fi + +type wget >/dev/null 2>&1 || { echo >&2 "This script requires \"wget\". Try \"brew install wget\" or \"apt-get install wget\"." ; exit 1; } +type pup >/dev/null 2>&1 || { echo >&2 "This script requires \"pup\". Try \"brew install https://raw.githubusercontent.com/EricChiang/pup/master/pup.rb\" or \"go get github.com/ericchiang/pup\"." ; exit 1; } + +wg="wget --load-cookies imgt-cookies.txt --save-cookies imgt-cookies.txt -qO-" + +speciesA=() + +while read sp; +do + speciesA+=("$sp") +done < <($wg 'http://imgt.org/genedb/' | pup '#Species option attr{value}' | grep -v any ) + +speciesCount="${#speciesA[@]}" + +echo "Available species:" +for i in $(seq 0 $((speciesCount-1))); +do + echo "($i) ${speciesA[$i]}" +done + +read -p "Please select species (e.g. '5' for ${speciesA[5]}): " speciesId +species=${speciesA[$speciesId]} +echo "You selected: ${species}." +read -p "Please enter a list of common species names for ${species} delimited by ':' to be used in -s option in 'mixcr align ...' (e.g. 'hsa:hs:homosapiens:human'): " commonNames + +echo -n "Getting taxonId for ${species} from NCBI... " + +prefix='http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=taxonomy&term=' +url=$(echo ${species} | sed 's/ /%20/g') +url="${prefix}${url}" +taxonId=$(wget -qO- "$url" | xmllint --xpath '/eSearchResult/IdList/Id/text()' -) +echo "OK. TaxonId=${taxonId}" + +echo "Creating directory for downloaded files (./imgt_downloads/)" +mkdir -p ./imgt_downloads/ + +speciesNoSpaces=$(echo ${species} | sed 's/ /_/g') +filePrefix="./imgt_downloads/${speciesNoSpaces}_" + +echo "Downloading files:" +genes=("IGHV" "IGHD" "IGHJ" "IGKV" "IGKJ" "IGLV" "IGLJ" "TRAV" "TRAJ" "TRBV" "TRBD" "TRBJ" "TRDV" "TRDD" "TRDJ" "TRGV" "TRGJ") +loci=("IGH" "IGK" "IGL" "TRA" "TRB" "TRG" "TRD") +for gene in ${genes[@]}; +do + url="http://www.imgt.org/IMGT_GENE-DB/GENElect?query=7.14+${gene}&species=${species}" + file="${filePrefix}${gene}.fasta" + $wg ${url} | pup -p 'pre:last-of-type' | sed "/^$/d" | sed "/<.*pre>/d" | sed 's/ *//' > ${file} + if [[ ! -s ${file} ]]; + then + echo "${file} is empty." + locus=${gene:0:3} + if [[ "${gene:3:4}" != "D" ]]; + then + loci=("${loci[@]/$locus}") + fi + else + echo "${file} successfully downloaded." + fi +done + +echo "Importing loci:" + +for locus in ${loci[@]} +do + echo ${locus} + comm="${mixcr} importSegments -f -s ${taxonId}:${commonNames} -l ${locus} -r report_${speciesNoSpaces}_${locus}.txt" + for gene in $(echo ${genes[@]} | tr ' ' '\n' | grep $locus) + do + geneLower=$(echo $gene | tr '[:upper:]' '[:lower:]') + file="${filePrefix}${gene}.fasta" + comm="${comm} -${geneLower:3:4} ${file}" + done + $comm +done + +sParam=$(echo ${commonNames} | sed 's/:.*$//') +if [ -z "$sParam" ] ; then + sParam="$taxonId" +fi + +echo "" +echo "To use imported segments invoke mixcr with the following parameters:" +echo "mixcr align --library local -s ${sParam} ..." diff --git a/log b/log new file mode 100644 index 000000000..2bd0781a6 --- /dev/null +++ b/log @@ -0,0 +1,3491 @@ +[INFO] Scanning for projects... +[INFO] +[INFO] ------------------------------------------------------------------------ +[INFO] Building MiXCR 1.7-SNAPSHOT +[INFO] ------------------------------------------------------------------------ +[INFO] +[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ mixcr --- +[INFO] Deleting /Volumes/Data/Projects/MiLaboratory/mixcr/target +[INFO] +[INFO] --- maven-enforcer-plugin:1.0:enforce (enforce-maven) @ mixcr --- +[INFO] +[INFO] --- buildnumber-maven-plugin:1.4:create (create-buildnumber) @ mixcr --- +[INFO] ShortRevision tag detected. The value is '7'. +[INFO] Executing: /bin/sh -c cd '/Volumes/Data/Projects/MiLaboratory/mixcr' && 'git' 'rev-parse' '--verify' '--short=7' 'HEAD' +[INFO] Working directory: /Volumes/Data/Projects/MiLaboratory/mixcr +[INFO] Storing buildNumber: c03fb3e at timestamp: 1450948592757 +[INFO] Storing buildScmBranch: feature/kaligner2 +[INFO] +[INFO] --- buildnumber-maven-plugin:1.4:create-metadata (create-metadata) @ mixcr --- +[INFO] ShortRevision tag detected. The value is '7'. +[INFO] Executing: /bin/sh -c cd '/Volumes/Data/Projects/MiLaboratory/mixcr' && 'git' 'rev-parse' '--verify' '--short=7' 'HEAD' +[INFO] Working directory: /Volumes/Data/Projects/MiLaboratory/mixcr +[INFO] +[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ mixcr --- +[INFO] Using 'UTF-8' encoding to copy filtered resources. +[INFO] Copying 5 resources +[INFO] Copying 1 resource +[INFO] +[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ mixcr --- +[INFO] Compiling 123 source files to /Volumes/Data/Projects/MiLaboratory/mixcr/target/classes +[INFO] ------------------------------------------------------------- +[ERROR] COMPILATION ERROR : +[INFO] ------------------------------------------------------------- +[ERROR] Failure executing javac, but could not parse the error: +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/PartitionedSequence.java]] +[parsing completed 16ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/util/RunMiXCR.java]] +[parsing completed 6ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/AssemblerEvent.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ReportHelper.java]] +[parsing completed 2ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ActionMergeAlignments.java]] +[parsing completed 3ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerSJFirst.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/afiltering/AFilter.java]] +[parsing completed 2ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/export/OutputMode.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/IOUtil.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/Species.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/CloneSet.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/TargetPartitioning.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/AlignmentsProvider.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/AssemblerEventLogger.java]] +[parsing completed 3ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ActionAlignmentsStat.java]] +[parsing completed 4ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/ClonalSequence.java]] +[parsing completed 5ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/GeneType.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/JsonOverrider.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerAbstract.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/VDJCHit.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/Allele.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/CloneAccumulator.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/export/FieldExtractorWithParameters.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/util/VersionInfoProvider.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAligner.java]] +[parsing completed 2ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/export/AbstractField.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/util/ParserException.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/IO.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/info/ReferencePointCoverageCollector.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/PartitionedSequenceCached.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/GeneGroup.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/ReferenceCompatibilityIO.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/export/InfoWriter.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/util/ParseUtil.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/SingleDAligner.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/AssembledReadsPort.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerParametersPresets.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ActionExportClones.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/export/AbstractFieldExtractor.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/util/TempFileManager.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/AbstractClonalAlignerParameters.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/LociLibrary.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/Merger.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/VersionInfoAction.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/RelativeConcentrationFilter.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/Main.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsFormatter.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/ReferencePoints.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/CloneClusteringStrategy.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/CompatibilityIO.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/export/FieldExtractors.java]] +[parsing completed 4ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignmentFailCause.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/LociLibraryWriter.java]] +[parsing completed 2ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/VJAlignmentOrder.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ActionAlign.java]] +[parsing completed 2ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/ReferencePoint.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerPVFirst.java]] +[parsing completed 3ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/AlleleId.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ActionInfo.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ActionParametersWithOutput.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/CloneAssembler.java]] +[parsing completed 4ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/util/PrintStreamTableAdapter.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/ClusteringFilter.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/info/AlignmentInfoCollector.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/AlignerReport.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ActionExportAlignments.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/ReferenceUtil.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/export/FieldWithParameters.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/KGeneAlignmentParameters.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/Locus.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/DAlignerParameters.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/BasicReferencePoint.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/SpeciesAndLocus.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/CloneFactoryParameters.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerParameters.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerEventListener.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/SequencePartitioning.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/Util.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/GeneAlignmentParameters.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/VDJCPartitionedSequence.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ActionExportParameters.java]] +[parsing completed 2ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ReportWriter.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ActionAssemble.java]] +[parsing completed 2ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerParameters.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/Clone.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/CloneAssemblerReport.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/CloneSetIO.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ActionExport.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/PreVDJCHit.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/export/Field.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/VDJCAlignmentsReaderWrapper.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerWithMerge.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/Gene.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/export/FieldExtractor.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/AllelicVariant.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsReader.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerListener.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignments.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/IO.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/info/GeneFeatureCoverageCollector.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCParametersPresets.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/LocusContainer.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/ReadToCloneMapping.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/export/FieldParameterless.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/LociLibraryManager.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ActionExportCloneReads.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/GeneFeature.java]] +[parsing completed 3ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsWriter.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/AssemblerUtils.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/LociLibraryReader.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/HasFeatureToAlign.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignmentResult.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/IO.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerRunner.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/SequenceBase.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/CloneClusteringParameters.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ActionPrettyAlignments.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/AlleleResolver.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/CloneFactory.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/DClonalAlignerParameters.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/ReferenceAllele.java]] +[parsing completed 0ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/VJCClonalAlignerParameters.java]] +[parsing completed 1ms] +[parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/VDJCObject.java]] +[parsing completed 1ms] +[search path for source files: /Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java] +[search path for class files: /Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/resources.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/rt.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/sunrsasign.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/jsse.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/jce.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/charsets.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/jfr.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/classes,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/ext/cldrdata.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/ext/dnsns.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/ext/jaccess.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/ext/jfxrt.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/ext/localedata.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/ext/nashorn.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/ext/sunec.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/ext/zipfs.jar,/System/Library/Java/Extensions/MRJToolkit.jar,/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes,/Users/dbolotin/.m2/repository/org/mapdb/mapdb/1.0.8/mapdb-1.0.8.jar,/Users/dbolotin/.m2/repository/com/milaboratory/mitools/1.1.3-SNAPSHOT/mitools-1.1.3-SNAPSHOT.jar,/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar,/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar,/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar,/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.1.1/jackson-annotations-2.1.1.jar,/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.1.1/jackson-core-2.1.1.jar,/Users/dbolotin/.m2/repository/org/apache/commons/commons-compress/1.2/commons-compress-1.2.jar,/Users/dbolotin/.m2/repository/org/apache/commons/commons-math3/3.3/commons-math3-3.3.jar,/Users/dbolotin/.m2/repository/commons-io/commons-io/2.4/commons-io-2.4.jar,/Users/dbolotin/.m2/repository/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar,/Users/dbolotin/.m2/repository/com/beust/jcommander/1.30/jcommander-1.30.jar,/Users/dbolotin/.m2/repository/com/google/guava/guava/16.0/guava-16.0.jar,.] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/Range.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/Seq.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/SeqBuilder.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Object.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.1.1/jackson-core-2.1.1.jar(com/fasterxml/jackson/core/JsonGenerator.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.1.1/jackson-core-2.1.1.jar(com/fasterxml/jackson/core/JsonParser.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.1.1/jackson-core-2.1.1.jar(com/fasterxml/jackson/core/JsonProcessingException.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/DeserializationContext.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/JsonDeserializer.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/JsonSerializer.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/SerializerProvider.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/annotation/JsonDeserialize.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/annotation/JsonSerialize.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/primitivio/annotations/Serializable.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/ArrayIterator.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/IOException.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/reflect/Field.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/reflect/Modifier.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/ArrayList.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/HashMap.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/List.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/Map.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Comparable.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/Serializable.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Iterable.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Enum.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/String.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/Iterator.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/Comparator.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/CUtils.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/OutputPort.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/OutputPortCloseable.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/blocks/ParallelProcessor.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/util/Chunk.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/util/Indexer.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/util/OrderedOutputPort.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/SequenceRead.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/SequenceReaderCloseable.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/fasta/FastaReader.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/fasta/FastaSequenceReaderWrapper.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/fastq/PairedFastqReader.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/fastq/SingleFastqReader.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/NucleotideSequence.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/CanReportProgress.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/SmartProgressReporter.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/EnumSet.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/Set.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Exception.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/concurrent/atomic/AtomicLong.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/concurrent/atomic/AtomicLongArray.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/NSequenceWithQuality.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/EnumMap.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/Alignment.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/NSequenceWithQualityBuilder.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/Arrays.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/concurrent/ConcurrentHashMap.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/Processor.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/primitives/Filter.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/concurrent/atomic/AtomicInteger.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.1.1/jackson-annotations-2.1.1.jar(com/fasterxml/jackson/annotation/JsonAutoDetect.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.1.1/jackson-annotations-2.1.1.jar(com/fasterxml/jackson/annotation/JsonCreator.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.1.1/jackson-annotations-2.1.1.jar(com/fasterxml/jackson/annotation/JsonIgnore.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.1.1/jackson-annotations-2.1.1.jar(com/fasterxml/jackson/annotation/JsonProperty.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/mitools/1.1.3-SNAPSHOT/mitools-1.1.3-SNAPSHOT.jar(com/milaboratory/core/PairedEndReadsLayout.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/mitools/1.1.3-SNAPSHOT/mitools-1.1.3-SNAPSHOT.jar(com/milaboratory/mitools/merger/MergerParameters.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/regex/Matcher.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/regex/Pattern.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/FileNotFoundException.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/OutputStream.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/PrintStream.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/Collections.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/UUID.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/mutations/Mutations.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/Collection.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/SequenceQuality.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar(gnu/trove/map/hash/TObjectFloatHashMap.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/batch/BatchAlignerWithBaseParameters.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/kaligner1/KAlignerParameters.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/AlignmentScoring.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/tree/TreeSearchParameters.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/IntArrayList.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/apache/commons/commons-math3/3.3/commons-math3-3.3.jar(org/apache/commons/math3/util/ArithmeticUtils.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/apache/commons/commons-math3/3.3/commons-math3-3.3.jar(org/apache/commons/math3/util/CombinatoricsUtils.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Boolean.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/mutations/Mutation.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/mutations/MutationType.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/SequencesUtils.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.1.1/jackson-annotations-2.1.1.jar(com/fasterxml/jackson/annotation/JsonSubTypes.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.1.1/jackson-annotations-2.1.1.jar(com/fasterxml/jackson/annotation/JsonTypeInfo.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/BandedAlignerParameters.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/RangeMap.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/Map$Entry.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Integer.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/beust/jcommander/1.30/jcommander-1.30.jar(com/beust/jcommander/Parameter.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/beust/jcommander/1.30/jcommander-1.30.jar(com/beust/jcommander/Parameters.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/mitools/1.1.3-SNAPSHOT/mitools-1.1.3-SNAPSHOT.jar(com/milaboratory/mitools/cli/Action.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/mitools/1.1.3-SNAPSHOT/mitools-1.1.3-SNAPSHOT.jar(com/milaboratory/mitools/cli/ActionHelper.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/mitools/1.1.3-SNAPSHOT/mitools-1.1.3-SNAPSHOT.jar(com/milaboratory/mitools/cli/ActionParameters.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/AutoCloseable.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/CompressionType.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/primitivio/PrimitivI.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/primitivio/SerializersManager.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/CountingInputStream.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/primitivio/PrimitivO.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/primitivio/Serializer.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/File.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/nio/charset/StandardCharsets.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/InputStream.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/SingleRead.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/batch/AlignmentHit.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/batch/BatchAlignerWithBase.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/google/guava/guava/16.0/guava-16.0.jar(com/google/common/cache/CacheBuilder.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/google/guava/guava/16.0/guava-16.0.jar(com/google/common/cache/CacheLoader.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/google/guava/guava/16.0/guava-16.0.jar(com/google/common/cache/LoadingCache.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/Aligner.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/concurrent/ExecutionException.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/javax/script/Invocable.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/javax/script/ScriptEngine.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/javax/script/ScriptEngineManager.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/javax/script/ScriptException.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/BufferedReader.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/InputStreamReader.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/Reader.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/Factory.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/util/IOUtil.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/concurrent/atomic/AtomicBoolean.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/VoidProcessor.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/beust/jcommander/1.30/jcommander-1.30.jar(com/beust/jcommander/ParameterException.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/mitools/1.1.3-SNAPSHOT/mitools-1.1.3-SNAPSHOT.jar(com/milaboratory/mitools/cli/HiddenAction.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/BufferedOutputStream.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/FileOutputStream.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitable.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/PrintWriter.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/JsonNode.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/node/ArrayNode.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/node/NullNode.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/node/ObjectNode.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/GlobalObjectMappers.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Class.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/VersionInfo.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/RuntimeException.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Throwable.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/mapdb/mapdb/1.0.8/mapdb-1.0.8.jar(org/mapdb/BTreeKeySerializer.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/DataInput.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/DataOutput.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/mapdb/mapdb/1.0.8/mapdb-1.0.8.jar(org/mapdb/Serializer.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/primitivio/DefaultSerializersProviderImpl.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/InputPort.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/commons-io/commons-io/2.4/commons-io-2.4.jar(org/apache/commons/io/output/CloseShieldOutputStream.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar(gnu/trove/map/hash/TCharIntHashMap.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar(gnu/trove/map/hash/TIntIntHashMap.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.1.1/jackson-core-2.1.1.jar(com/fasterxml/jackson/core/type/TypeReference.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/AminoAcidSequence.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/CanReportProgressAndStage.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/mitools/1.1.3-SNAPSHOT/mitools-1.1.3-SNAPSHOT.jar(com/milaboratory/mitools/cli/ActionParametersParser.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/beust/jcommander/1.30/jcommander-1.30.jar(com/beust/jcommander/JCommander.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/beust/jcommander/1.30/jcommander-1.30.jar(com/beust/jcommander/validators/PositiveInteger.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/FileReader.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/RandomUtil.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Runnable.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/mutations/MutationsBuilder.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/mutations/MutationsUtil.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/SequenceQualityBuilder.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/mitools/1.1.3-SNAPSHOT/mitools-1.1.3-SNAPSHOT.jar(com/milaboratory/mitools/cli/JCommanderBasedMain.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/MultiAlignmentHelper.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/clustering/Cluster.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/clustering/ClusteringStrategy.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/tree/NeighborhoodIterator.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/mapdb/mapdb/1.0.8/mapdb-1.0.8.jar(org/mapdb/DB.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/mapdb/mapdb/1.0.8/mapdb-1.0.8.jar(org/mapdb/DBMaker.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/Closeable.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/text/DecimalFormat.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/NavigableSet.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/ByteArrayOutputStream.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/DataOutputStream.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/zip/Deflater.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/zip/DeflaterOutputStream.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/util/CountLimitingOutputPort.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/beust/jcommander/1.30/jcommander-1.30.jar(com/beust/jcommander/DynamicParameter.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/mitools/1.1.3-SNAPSHOT/mitools-1.1.3-SNAPSHOT.jar(com/milaboratory/core/PairedTarget.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/AlignmentUtils.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/batch/AlignmentResult.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/PairedRead.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/nio/file/Files.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/nio/file/Paths.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/reflect/Array.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/clustering/Clustering.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/clustering/SequenceExtractor.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/tree/MutationGuide.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/tree/SequenceTreeMap.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar(gnu/trove/procedure/TObjectProcedure.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar(gnu/trove/map/hash/TIntObjectHashMap.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/blocks/FilteringPort.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/primitivio/PipeWriter.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/mapdb/mapdb/1.0.8/mapdb-1.0.8.jar(org/mapdb/Pump.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/SingleReadImpl.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/mitools/1.1.3-SNAPSHOT/mitools-1.1.3-SNAPSHOT.jar(com/milaboratory/mitools/merger/MismatchOnlyPairedReadMerger.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/mitools/1.1.3-SNAPSHOT/mitools-1.1.3-SNAPSHOT.jar(com/milaboratory/mitools/merger/PairedReadMergingResult.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/SequenceWriter.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/fasta/FastaSequenceWriterWrapper.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/fastq/PairedFastqWriter.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/fastq/SingleFastqWriter.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/Bit2Array.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/zip/Inflater.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/zip/InflaterInputStream.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/DataInputStream.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/AlignmentHelper.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/NSequenceWithQualityPrintHelper.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/primitives/FilterUtil.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/BandedLinearAligner.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar(gnu/trove/iterator/TObjectFloatIterator.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar(gnu/trove/list/array/TFloatArrayList.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.1.1/jackson-annotations-2.1.1.jar(com/fasterxml/jackson/annotation/JsonAutoDetect$Visibility.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/annotation/Target.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/annotation/ElementType.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/annotation/Retention.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/annotation/RetentionPolicy.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/annotation/JsonSerialize$Typing.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/annotation/JsonSerialize$Inclusion.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/annotation/Annotation.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Override.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.1.1/jackson-annotations-2.1.1.jar(com/fasterxml/jackson/annotation/JsonTypeInfo$Id.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.1.1/jackson-annotations-2.1.1.jar(com/fasterxml/jackson/annotation/JsonTypeInfo$As.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.1.1/jackson-annotations-2.1.1.jar(com/fasterxml/jackson/annotation/JsonSubTypes$Type.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/google/guava/guava/16.0/guava-16.0.jar(com/google/common/annotations/GwtCompatible.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/google/guava/guava/16.0/guava-16.0.jar(com/google/common/annotations/GwtIncompatible.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/SuppressWarnings.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/beust/jcommander/1.30/jcommander-1.30.jar(com/beust/jcommander/IParameterValidator.class)]] +[checking com.milaboratory.mixcr.basictypes.PartitionedSequence] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/PartitionedSequence.class]] +[checking com.milaboratory.mixcr.basictypes.SequencePartitioning] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/IllegalArgumentException.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Math.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Error.class)]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/SequencePartitioning.class]] +[checking com.milaboratory.mixcr.reference.ReferencePoint] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/NullPointerException.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Number.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/AbstractMap.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/SecurityException.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/reflect/GenericDeclaration.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/reflect/AnnotatedElement.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/reflect/Type.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/reflect/Member.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/reflect/AccessibleObject.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/CharSequence.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/AbstractList.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/AbstractCollection.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/IllegalAccessException.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/ReflectiveOperationException.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/NumberFormatException.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/StringBuilder.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/AbstractStringBuilder.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Appendable.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/StringBuffer.class)]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/ReferencePoint.class]] +[checking com.milaboratory.mixcr.reference.GeneFeature] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Byte.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Character.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Short.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Long.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Float.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Double.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Void.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/System.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Cloneable.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/RandomAccess.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/function/Function.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.1.1/jackson-core-2.1.1.jar(com/fasterxml/jackson/core/Versioned.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/JsonMappingException.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.1.1/jackson-core-2.1.1.jar(com/fasterxml/jackson/core/SerializableString.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/Flushable.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.1.1/jackson-core-2.1.1.jar(com/fasterxml/jackson/core/JsonGenerationException.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/AssertionError.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/NoSuchFieldError.class)]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/GeneFeature$ReferenceRange$1.class]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/GeneFeature$ReferenceRange.class]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/GeneFeature$Deserializer.class]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/GeneFeature$Serializer.class]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/GeneFeature$1.class]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/GeneFeature.class]] +[checking com.milaboratory.mixcr.reference.GeneType] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/CloneNotSupportedException.class)]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/GeneType.class]] +[checking com.milaboratory.mixcr.reference.BasicReferencePoint] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/BasicReferencePoint.class]] +[checking com.milaboratory.mixcr.util.RunMiXCR] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/InterruptedException.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/SequenceReader.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/blocks/Merger.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/ProcessorFactory.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/AbstractSet.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Runtime.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/PairedReader.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/AbstractMultiReader.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/AbstractSequenceReader.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/MultiRead.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/Sequence.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/NucleotideAlphabet.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/Alphabet.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/AbstractArrayAlphabet.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/AbstractArraySequence.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/SingleReader.class)]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/util/RunMiXCR$1.class]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/util/RunMiXCR$2.class]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/util/RunMiXCR$AssembleResult.class]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/util/RunMiXCR$AlignResult.class]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/util/RunMiXCR$RunMiXCRAnalysis.class]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/util/RunMiXCR$3.class]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/util/RunMiXCR.class]] +[checking com.milaboratory.mixcr.cli.AlignerReport] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/cli/AlignerReport.class]] +[checking com.milaboratory.mixcr.vdjaligners.VDJCAlignerEventListener] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/vdjaligners/VDJCAlignerEventListener.class]] +[checking com.milaboratory.mixcr.cli.ReportWriter] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/cli/ReportWriter.class]] +[checking com.milaboratory.mixcr.basictypes.VDJCAlignments] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/SequenceWithQuality.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/NSeq.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/AbstractSeq.class)]] +[checking com.milaboratory.mixcr.basictypes.VDJCObject] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/VDJCAlignments.class]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/VDJCObject.class]] +[checking com.milaboratory.mixcr.reference.Allele] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/concurrent/ConcurrentMap.class)]] +[checking com.milaboratory.mixcr.basictypes.PartitionedSequenceCached] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/Allele.class]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/PartitionedSequenceCached.class]] +[checking com.milaboratory.mixcr.vdjaligners.VDJCAligner] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/vdjaligners/VDJCAligner.class]] +[checking com.milaboratory.mixcr.vdjaligners.VDJCAlignmentResult] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/vdjaligners/VDJCAlignmentResult.class]] +[checking com.milaboratory.mixcr.basictypes.CloneSet] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/CloneSet.class]] +[checking com.milaboratory.mixcr.basictypes.Clone] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/IllegalStateException.class)]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/Clone.class]] +[checking com.milaboratory.mixcr.cli.CloneAssemblerReport] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/cli/CloneAssemblerReport.class]] +[checking com.milaboratory.mixcr.assembler.CloneAssemblerListener] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/assembler/CloneAssemblerListener.class]] +[checking com.milaboratory.mixcr.vdjaligners.VDJCAlignerParameters] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/vdjaligners/VDJCAlignerParameters.class]] +[checking com.milaboratory.mixcr.basictypes.HasFeatureToAlign] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/HasFeatureToAlign.class]] +[checking com.milaboratory.mixcr.assembler.CloneAssemblerParameters] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/regex/MatchResult.class)]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/assembler/CloneAssemblerParameters.class]] +[checking com.milaboratory.mixcr.reference.Locus] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/Locus.class]] +[checking com.milaboratory.mixcr.vdjaligners.VDJCAlignmentFailCause] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/vdjaligners/VDJCAlignmentFailCause.class]] +[checking com.milaboratory.mixcr.cli.ReportHelper] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/FilterOutputStream.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/text/NumberFormat.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/text/Format.class)]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/cli/ReportHelper.class]] +[checking com.milaboratory.mixcr.basictypes.VDJCHit] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/batch/HasSequence.class)]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/VDJCHit.class]] +[checking com.milaboratory.mixcr.basictypes.VDJCPartitionedSequence] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/VDJCPartitionedSequence.class]] +[checking com.milaboratory.mixcr.reference.Gene] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/Gene.class]] +[checking com.milaboratory.mixcr.reference.LocusContainer] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/LocusContainer.class]] +[checking com.milaboratory.mixcr.reference.AlleleId] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/AlleleId.class]] +[checking com.milaboratory.mixcr.reference.GeneGroup] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/GeneGroup.class]] +[checking com.milaboratory.mixcr.reference.ReferencePoints] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/ReferencePoints.class]] +[checking com.milaboratory.mixcr.assembler.CloneAccumulator] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar(gnu/trove/impl/hash/TObjectHash.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar(gnu/trove/impl/hash/THash.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar(gnu/trove/map/TObjectFloatMap.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/Externalizable.class)]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/assembler/CloneAccumulator.class]] +[checking com.milaboratory.mixcr.vdjaligners.GeneAlignmentParameters] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/vdjaligners/GeneAlignmentParameters.class]] +[checking com.milaboratory.mixcr.vdjaligners.VJAlignmentOrder] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/vdjaligners/VJAlignmentOrder.class]] +[checking com.milaboratory.mixcr.vdjaligners.KGeneAlignmentParameters] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/vdjaligners/KGeneAlignmentParameters.class]] +[checking com.milaboratory.mixcr.vdjaligners.DAlignerParameters] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/vdjaligners/DAlignerParameters.class]] +[checking com.milaboratory.mixcr.assembler.CloneClusteringParameters] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/assembler/CloneClusteringParameters.class]] +[checking com.milaboratory.mixcr.assembler.CloneFactoryParameters] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/assembler/CloneFactoryParameters.class]] +[checking com.milaboratory.mixcr.assembler.AssemblerUtils] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/math/BigInteger.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/apache/commons/commons-math3/3.3/commons-math3-3.3.jar(org/apache/commons/math3/exception/NotPositiveException.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/apache/commons/commons-math3/3.3/commons-math3-3.3.jar(org/apache/commons/math3/exception/NumberIsTooSmallException.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/apache/commons/commons-math3/3.3/commons-math3-3.3.jar(org/apache/commons/math3/exception/MathIllegalNumberException.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/apache/commons/commons-math3/3.3/commons-math3-3.3.jar(org/apache/commons/math3/exception/MathIllegalArgumentException.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/apache/commons/commons-math3/3.3/commons-math3-3.3.jar(org/apache/commons/math3/exception/NumberIsTooLargeException.class)]] +[loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/apache/commons/commons-math3/3.3/commons-math3-3.3.jar(org/apache/commons/math3/exception/MathArithmeticException.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/ArithmeticException.class)]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/assembler/AssemblerUtils$MappingThresholdCalculator.class]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/assembler/AssemblerUtils.class]] +[checking com.milaboratory.mixcr.basictypes.TargetPartitioning] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/TargetPartitioning.class]] +[checking com.milaboratory.mixcr.reference.SpeciesAndLocus] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/SpeciesAndLocus.class]] +[checking com.milaboratory.mixcr.reference.LociLibrary] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/LociLibrary.class]] +[checking com.milaboratory.mixcr.reference.AlleleResolver] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/AlleleResolver.class]] +[checking com.milaboratory.mixcr.basictypes.ClonalSequence] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/ClonalSequence$Stretch.class]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/ClonalSequence$1.class]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/ClonalSequence.class]] +[checking com.milaboratory.mixcr.assembler.ClusteringFilter] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/assembler/ClusteringFilter.class]] +[checking com.milaboratory.mixcr.assembler.VJCClonalAlignerParameters] +[checking com.milaboratory.mixcr.assembler.AbstractClonalAlignerParameters] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/assembler/VJCClonalAlignerParameters.class]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/assembler/AbstractClonalAlignerParameters.class]] +[checking com.milaboratory.mixcr.reference.SequenceBase] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/SequenceBase$SequenceContainer.class]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/SequenceBase.class]] +[checking com.milaboratory.mixcr.assembler.AssemblerEvent] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/assembler/AssemblerEvent.class]] +[checking com.milaboratory.mixcr.cli.ActionMergeAlignments] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/cli/ActionMergeAlignments$MergeParameters.class]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/cli/ActionMergeAlignments$MultiReader.class]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/cli/ActionMergeAlignments.class]] +[checking com.milaboratory.mixcr.basictypes.CompatibilityIO] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/CompatibilityIO$VDJCAlignmentsSerializerV5.class]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/CompatibilityIO.class]] +[checking com.milaboratory.mixcr.basictypes.VDJCAlignmentsWriter] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/nio/charset/Charset.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/net/URI.class)]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/VDJCAlignmentsWriter.class]] +[checking com.milaboratory.mixcr.basictypes.VDJCAlignmentsReader] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/FileInputStream.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/FileDescriptor.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/BufferedInputStream.class)]] +[loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/FilterInputStream.class)]] +[wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/VDJCAlignmentsReader.class]] +[checking com.milaboratory.mixcr.vdjaligners.VDJCAlignerSJFirst] + + +The system is out of resources. +Consult the following stack trace for details. +java.lang.StackOverflowError + at com.sun.tools.javac.code.Type.hasTag(Type.java:112) + at com.sun.tools.javac.code.Type$TypeVar.getUpperBound(Type.java:1286) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) + at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) + at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) + at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) + at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) + at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) + +[INFO] 1 error +[INFO] ------------------------------------------------------------- +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD FAILURE +[INFO] ------------------------------------------------------------------------ +[INFO] Total time: 2.163 s +[INFO] Finished at: 2015-12-24T12:16:34+03:00 +[INFO] Final Memory: 20M/237M +[INFO] ------------------------------------------------------------------------ +[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project mixcr: Compilation failure +[ERROR] Failure executing javac, but could not parse the error: +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/PartitionedSequence.java]] +[ERROR] [parsing completed 16ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/util/RunMiXCR.java]] +[ERROR] [parsing completed 6ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/AssemblerEvent.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ReportHelper.java]] +[ERROR] [parsing completed 2ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ActionMergeAlignments.java]] +[ERROR] [parsing completed 3ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerSJFirst.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/afiltering/AFilter.java]] +[ERROR] [parsing completed 2ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/export/OutputMode.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/IOUtil.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/Species.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/CloneSet.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/TargetPartitioning.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/AlignmentsProvider.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/AssemblerEventLogger.java]] +[ERROR] [parsing completed 3ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ActionAlignmentsStat.java]] +[ERROR] [parsing completed 4ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/ClonalSequence.java]] +[ERROR] [parsing completed 5ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/GeneType.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/JsonOverrider.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerAbstract.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/VDJCHit.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/Allele.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/CloneAccumulator.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/export/FieldExtractorWithParameters.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/util/VersionInfoProvider.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAligner.java]] +[ERROR] [parsing completed 2ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/export/AbstractField.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/util/ParserException.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/IO.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/info/ReferencePointCoverageCollector.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/PartitionedSequenceCached.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/GeneGroup.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/ReferenceCompatibilityIO.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/export/InfoWriter.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/util/ParseUtil.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/SingleDAligner.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/AssembledReadsPort.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerParametersPresets.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ActionExportClones.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/export/AbstractFieldExtractor.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/util/TempFileManager.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/AbstractClonalAlignerParameters.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/LociLibrary.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/Merger.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/VersionInfoAction.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/RelativeConcentrationFilter.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/Main.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsFormatter.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/ReferencePoints.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/CloneClusteringStrategy.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/CompatibilityIO.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/export/FieldExtractors.java]] +[ERROR] [parsing completed 4ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignmentFailCause.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/LociLibraryWriter.java]] +[ERROR] [parsing completed 2ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/VJAlignmentOrder.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ActionAlign.java]] +[ERROR] [parsing completed 2ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/ReferencePoint.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerPVFirst.java]] +[ERROR] [parsing completed 3ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/AlleleId.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ActionInfo.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ActionParametersWithOutput.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/CloneAssembler.java]] +[ERROR] [parsing completed 4ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/util/PrintStreamTableAdapter.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/ClusteringFilter.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/info/AlignmentInfoCollector.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/AlignerReport.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ActionExportAlignments.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/ReferenceUtil.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/export/FieldWithParameters.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/KGeneAlignmentParameters.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/Locus.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/DAlignerParameters.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/BasicReferencePoint.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/SpeciesAndLocus.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/CloneFactoryParameters.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerParameters.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerEventListener.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/SequencePartitioning.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/Util.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/GeneAlignmentParameters.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/VDJCPartitionedSequence.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ActionExportParameters.java]] +[ERROR] [parsing completed 2ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ReportWriter.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ActionAssemble.java]] +[ERROR] [parsing completed 2ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerParameters.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/Clone.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/CloneAssemblerReport.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/CloneSetIO.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ActionExport.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/PreVDJCHit.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/export/Field.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/VDJCAlignmentsReaderWrapper.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerWithMerge.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/Gene.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/export/FieldExtractor.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/AllelicVariant.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsReader.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerListener.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignments.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/IO.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/info/GeneFeatureCoverageCollector.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCParametersPresets.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/LocusContainer.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/ReadToCloneMapping.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/export/FieldParameterless.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/LociLibraryManager.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ActionExportCloneReads.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/GeneFeature.java]] +[ERROR] [parsing completed 3ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsWriter.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/AssemblerUtils.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/LociLibraryReader.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/HasFeatureToAlign.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignmentResult.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/IO.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerRunner.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/SequenceBase.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/CloneClusteringParameters.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/cli/ActionPrettyAlignments.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/AlleleResolver.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/CloneFactory.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/DClonalAlignerParameters.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/reference/ReferenceAllele.java]] +[ERROR] [parsing completed 0ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/assembler/VJCClonalAlignerParameters.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [parsing started RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java/com/milaboratory/mixcr/basictypes/VDJCObject.java]] +[ERROR] [parsing completed 1ms] +[ERROR] [search path for source files: /Volumes/Data/Projects/MiLaboratory/mixcr/src/main/java] +[ERROR] [search path for class files: /Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/resources.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/rt.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/sunrsasign.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/jsse.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/jce.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/charsets.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/jfr.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/classes,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/ext/cldrdata.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/ext/dnsns.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/ext/jaccess.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/ext/jfxrt.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/ext/localedata.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/ext/nashorn.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/ext/sunec.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar,/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/ext/zipfs.jar,/System/Library/Java/Extensions/MRJToolkit.jar,/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes,/Users/dbolotin/.m2/repository/org/mapdb/mapdb/1.0.8/mapdb-1.0.8.jar,/Users/dbolotin/.m2/repository/com/milaboratory/mitools/1.1.3-SNAPSHOT/mitools-1.1.3-SNAPSHOT.jar,/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar,/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar,/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar,/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.1.1/jackson-annotations-2.1.1.jar,/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.1.1/jackson-core-2.1.1.jar,/Users/dbolotin/.m2/repository/org/apache/commons/commons-compress/1.2/commons-compress-1.2.jar,/Users/dbolotin/.m2/repository/org/apache/commons/commons-math3/3.3/commons-math3-3.3.jar,/Users/dbolotin/.m2/repository/commons-io/commons-io/2.4/commons-io-2.4.jar,/Users/dbolotin/.m2/repository/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar,/Users/dbolotin/.m2/repository/com/beust/jcommander/1.30/jcommander-1.30.jar,/Users/dbolotin/.m2/repository/com/google/guava/guava/16.0/guava-16.0.jar,.] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/Range.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/Seq.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/SeqBuilder.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Object.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.1.1/jackson-core-2.1.1.jar(com/fasterxml/jackson/core/JsonGenerator.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.1.1/jackson-core-2.1.1.jar(com/fasterxml/jackson/core/JsonParser.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.1.1/jackson-core-2.1.1.jar(com/fasterxml/jackson/core/JsonProcessingException.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/DeserializationContext.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/JsonDeserializer.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/JsonSerializer.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/SerializerProvider.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/annotation/JsonDeserialize.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/annotation/JsonSerialize.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/primitivio/annotations/Serializable.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/ArrayIterator.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/IOException.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/reflect/Field.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/reflect/Modifier.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/ArrayList.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/HashMap.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/List.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/Map.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Comparable.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/Serializable.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Iterable.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Enum.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/String.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/Iterator.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/Comparator.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/CUtils.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/OutputPort.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/OutputPortCloseable.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/blocks/ParallelProcessor.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/util/Chunk.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/util/Indexer.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/util/OrderedOutputPort.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/SequenceRead.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/SequenceReaderCloseable.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/fasta/FastaReader.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/fasta/FastaSequenceReaderWrapper.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/fastq/PairedFastqReader.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/fastq/SingleFastqReader.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/NucleotideSequence.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/CanReportProgress.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/SmartProgressReporter.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/EnumSet.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/Set.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Exception.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/concurrent/atomic/AtomicLong.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/concurrent/atomic/AtomicLongArray.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/NSequenceWithQuality.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/EnumMap.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/Alignment.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/NSequenceWithQualityBuilder.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/Arrays.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/concurrent/ConcurrentHashMap.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/Processor.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/primitives/Filter.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/concurrent/atomic/AtomicInteger.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.1.1/jackson-annotations-2.1.1.jar(com/fasterxml/jackson/annotation/JsonAutoDetect.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.1.1/jackson-annotations-2.1.1.jar(com/fasterxml/jackson/annotation/JsonCreator.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.1.1/jackson-annotations-2.1.1.jar(com/fasterxml/jackson/annotation/JsonIgnore.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.1.1/jackson-annotations-2.1.1.jar(com/fasterxml/jackson/annotation/JsonProperty.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/mitools/1.1.3-SNAPSHOT/mitools-1.1.3-SNAPSHOT.jar(com/milaboratory/core/PairedEndReadsLayout.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/mitools/1.1.3-SNAPSHOT/mitools-1.1.3-SNAPSHOT.jar(com/milaboratory/mitools/merger/MergerParameters.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/regex/Matcher.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/regex/Pattern.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/FileNotFoundException.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/OutputStream.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/PrintStream.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/Collections.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/UUID.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/mutations/Mutations.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/Collection.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/SequenceQuality.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar(gnu/trove/map/hash/TObjectFloatHashMap.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/batch/BatchAlignerWithBaseParameters.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/kaligner1/KAlignerParameters.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/AlignmentScoring.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/tree/TreeSearchParameters.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/IntArrayList.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/apache/commons/commons-math3/3.3/commons-math3-3.3.jar(org/apache/commons/math3/util/ArithmeticUtils.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/apache/commons/commons-math3/3.3/commons-math3-3.3.jar(org/apache/commons/math3/util/CombinatoricsUtils.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Boolean.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/mutations/Mutation.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/mutations/MutationType.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/SequencesUtils.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.1.1/jackson-annotations-2.1.1.jar(com/fasterxml/jackson/annotation/JsonSubTypes.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.1.1/jackson-annotations-2.1.1.jar(com/fasterxml/jackson/annotation/JsonTypeInfo.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/BandedAlignerParameters.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/RangeMap.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/Map$Entry.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Integer.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/beust/jcommander/1.30/jcommander-1.30.jar(com/beust/jcommander/Parameter.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/beust/jcommander/1.30/jcommander-1.30.jar(com/beust/jcommander/Parameters.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/mitools/1.1.3-SNAPSHOT/mitools-1.1.3-SNAPSHOT.jar(com/milaboratory/mitools/cli/Action.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/mitools/1.1.3-SNAPSHOT/mitools-1.1.3-SNAPSHOT.jar(com/milaboratory/mitools/cli/ActionHelper.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/mitools/1.1.3-SNAPSHOT/mitools-1.1.3-SNAPSHOT.jar(com/milaboratory/mitools/cli/ActionParameters.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/AutoCloseable.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/CompressionType.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/primitivio/PrimitivI.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/primitivio/SerializersManager.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/CountingInputStream.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/primitivio/PrimitivO.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/primitivio/Serializer.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/File.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/nio/charset/StandardCharsets.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/InputStream.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/SingleRead.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/batch/AlignmentHit.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/batch/BatchAlignerWithBase.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/google/guava/guava/16.0/guava-16.0.jar(com/google/common/cache/CacheBuilder.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/google/guava/guava/16.0/guava-16.0.jar(com/google/common/cache/CacheLoader.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/google/guava/guava/16.0/guava-16.0.jar(com/google/common/cache/LoadingCache.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/Aligner.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/concurrent/ExecutionException.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/javax/script/Invocable.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/javax/script/ScriptEngine.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/javax/script/ScriptEngineManager.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/javax/script/ScriptException.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/BufferedReader.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/InputStreamReader.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/Reader.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/Factory.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/util/IOUtil.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/concurrent/atomic/AtomicBoolean.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/VoidProcessor.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/beust/jcommander/1.30/jcommander-1.30.jar(com/beust/jcommander/ParameterException.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/mitools/1.1.3-SNAPSHOT/mitools-1.1.3-SNAPSHOT.jar(com/milaboratory/mitools/cli/HiddenAction.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/BufferedOutputStream.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/FileOutputStream.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitable.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/PrintWriter.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/JsonNode.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/node/ArrayNode.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/node/NullNode.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/node/ObjectNode.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/GlobalObjectMappers.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Class.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/VersionInfo.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/RuntimeException.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Throwable.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/mapdb/mapdb/1.0.8/mapdb-1.0.8.jar(org/mapdb/BTreeKeySerializer.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/DataInput.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/DataOutput.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/mapdb/mapdb/1.0.8/mapdb-1.0.8.jar(org/mapdb/Serializer.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/primitivio/DefaultSerializersProviderImpl.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/InputPort.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/commons-io/commons-io/2.4/commons-io-2.4.jar(org/apache/commons/io/output/CloseShieldOutputStream.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar(gnu/trove/map/hash/TCharIntHashMap.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar(gnu/trove/map/hash/TIntIntHashMap.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.1.1/jackson-core-2.1.1.jar(com/fasterxml/jackson/core/type/TypeReference.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/AminoAcidSequence.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/CanReportProgressAndStage.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/mitools/1.1.3-SNAPSHOT/mitools-1.1.3-SNAPSHOT.jar(com/milaboratory/mitools/cli/ActionParametersParser.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/beust/jcommander/1.30/jcommander-1.30.jar(com/beust/jcommander/JCommander.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/beust/jcommander/1.30/jcommander-1.30.jar(com/beust/jcommander/validators/PositiveInteger.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/FileReader.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/RandomUtil.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Runnable.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/mutations/MutationsBuilder.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/mutations/MutationsUtil.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/SequenceQualityBuilder.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/mitools/1.1.3-SNAPSHOT/mitools-1.1.3-SNAPSHOT.jar(com/milaboratory/mitools/cli/JCommanderBasedMain.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/MultiAlignmentHelper.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/clustering/Cluster.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/clustering/ClusteringStrategy.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/tree/NeighborhoodIterator.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/mapdb/mapdb/1.0.8/mapdb-1.0.8.jar(org/mapdb/DB.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/mapdb/mapdb/1.0.8/mapdb-1.0.8.jar(org/mapdb/DBMaker.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/Closeable.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/text/DecimalFormat.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/NavigableSet.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/ByteArrayOutputStream.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/DataOutputStream.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/zip/Deflater.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/zip/DeflaterOutputStream.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/util/CountLimitingOutputPort.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/beust/jcommander/1.30/jcommander-1.30.jar(com/beust/jcommander/DynamicParameter.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/mitools/1.1.3-SNAPSHOT/mitools-1.1.3-SNAPSHOT.jar(com/milaboratory/core/PairedTarget.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/AlignmentUtils.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/batch/AlignmentResult.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/PairedRead.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/nio/file/Files.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/nio/file/Paths.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/reflect/Array.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/clustering/Clustering.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/clustering/SequenceExtractor.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/tree/MutationGuide.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/tree/SequenceTreeMap.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar(gnu/trove/procedure/TObjectProcedure.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar(gnu/trove/map/hash/TIntObjectHashMap.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/blocks/FilteringPort.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/primitivio/PipeWriter.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/mapdb/mapdb/1.0.8/mapdb-1.0.8.jar(org/mapdb/Pump.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/SingleReadImpl.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/mitools/1.1.3-SNAPSHOT/mitools-1.1.3-SNAPSHOT.jar(com/milaboratory/mitools/merger/MismatchOnlyPairedReadMerger.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/mitools/1.1.3-SNAPSHOT/mitools-1.1.3-SNAPSHOT.jar(com/milaboratory/mitools/merger/PairedReadMergingResult.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/SequenceWriter.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/fasta/FastaSequenceWriterWrapper.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/fastq/PairedFastqWriter.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/fastq/SingleFastqWriter.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/Bit2Array.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/zip/Inflater.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/zip/InflaterInputStream.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/DataInputStream.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/AlignmentHelper.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/util/NSequenceWithQualityPrintHelper.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/primitives/FilterUtil.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/BandedLinearAligner.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar(gnu/trove/iterator/TObjectFloatIterator.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar(gnu/trove/list/array/TFloatArrayList.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.1.1/jackson-annotations-2.1.1.jar(com/fasterxml/jackson/annotation/JsonAutoDetect$Visibility.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/annotation/Target.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/annotation/ElementType.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/annotation/Retention.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/annotation/RetentionPolicy.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/annotation/JsonSerialize$Typing.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/annotation/JsonSerialize$Inclusion.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/annotation/Annotation.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Override.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.1.1/jackson-annotations-2.1.1.jar(com/fasterxml/jackson/annotation/JsonTypeInfo$Id.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.1.1/jackson-annotations-2.1.1.jar(com/fasterxml/jackson/annotation/JsonTypeInfo$As.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.1.1/jackson-annotations-2.1.1.jar(com/fasterxml/jackson/annotation/JsonSubTypes$Type.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/google/guava/guava/16.0/guava-16.0.jar(com/google/common/annotations/GwtCompatible.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/google/guava/guava/16.0/guava-16.0.jar(com/google/common/annotations/GwtIncompatible.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/SuppressWarnings.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/beust/jcommander/1.30/jcommander-1.30.jar(com/beust/jcommander/IParameterValidator.class)]] +[ERROR] [checking com.milaboratory.mixcr.basictypes.PartitionedSequence] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/PartitionedSequence.class]] +[ERROR] [checking com.milaboratory.mixcr.basictypes.SequencePartitioning] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/IllegalArgumentException.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Math.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Error.class)]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/SequencePartitioning.class]] +[ERROR] [checking com.milaboratory.mixcr.reference.ReferencePoint] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/NullPointerException.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Number.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/AbstractMap.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/SecurityException.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/reflect/GenericDeclaration.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/reflect/AnnotatedElement.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/reflect/Type.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/reflect/Member.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/reflect/AccessibleObject.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/CharSequence.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/AbstractList.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/AbstractCollection.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/IllegalAccessException.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/ReflectiveOperationException.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/NumberFormatException.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/StringBuilder.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/AbstractStringBuilder.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Appendable.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/StringBuffer.class)]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/ReferencePoint.class]] +[ERROR] [checking com.milaboratory.mixcr.reference.GeneFeature] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Byte.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Character.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Short.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Long.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Float.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Double.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Void.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/System.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Cloneable.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/RandomAccess.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/function/Function.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.1.1/jackson-core-2.1.1.jar(com/fasterxml/jackson/core/Versioned.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.1.1/jackson-databind-2.1.1.jar(com/fasterxml/jackson/databind/JsonMappingException.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.1.1/jackson-core-2.1.1.jar(com/fasterxml/jackson/core/SerializableString.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/Flushable.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.1.1/jackson-core-2.1.1.jar(com/fasterxml/jackson/core/JsonGenerationException.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/AssertionError.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/NoSuchFieldError.class)]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/GeneFeature$ReferenceRange$1.class]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/GeneFeature$ReferenceRange.class]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/GeneFeature$Deserializer.class]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/GeneFeature$Serializer.class]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/GeneFeature$1.class]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/GeneFeature.class]] +[ERROR] [checking com.milaboratory.mixcr.reference.GeneType] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/CloneNotSupportedException.class)]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/GeneType.class]] +[ERROR] [checking com.milaboratory.mixcr.reference.BasicReferencePoint] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/BasicReferencePoint.class]] +[ERROR] [checking com.milaboratory.mixcr.util.RunMiXCR] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/InterruptedException.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/SequenceReader.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/blocks/Merger.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/cc/redberry/pipe/0.9.4/pipe-0.9.4.jar(cc/redberry/pipe/ProcessorFactory.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/AbstractSet.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Runtime.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/PairedReader.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/AbstractMultiReader.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/AbstractSequenceReader.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/MultiRead.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/Sequence.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/NucleotideAlphabet.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/Alphabet.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/AbstractArrayAlphabet.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/AbstractArraySequence.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/io/sequence/SingleReader.class)]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/util/RunMiXCR$1.class]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/util/RunMiXCR$2.class]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/util/RunMiXCR$AssembleResult.class]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/util/RunMiXCR$AlignResult.class]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/util/RunMiXCR$RunMiXCRAnalysis.class]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/util/RunMiXCR$3.class]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/util/RunMiXCR.class]] +[ERROR] [checking com.milaboratory.mixcr.cli.AlignerReport] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/cli/AlignerReport.class]] +[ERROR] [checking com.milaboratory.mixcr.vdjaligners.VDJCAlignerEventListener] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/vdjaligners/VDJCAlignerEventListener.class]] +[ERROR] [checking com.milaboratory.mixcr.cli.ReportWriter] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/cli/ReportWriter.class]] +[ERROR] [checking com.milaboratory.mixcr.basictypes.VDJCAlignments] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/SequenceWithQuality.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/NSeq.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/sequence/AbstractSeq.class)]] +[ERROR] [checking com.milaboratory.mixcr.basictypes.VDJCObject] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/VDJCAlignments.class]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/VDJCObject.class]] +[ERROR] [checking com.milaboratory.mixcr.reference.Allele] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/concurrent/ConcurrentMap.class)]] +[ERROR] [checking com.milaboratory.mixcr.basictypes.PartitionedSequenceCached] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/Allele.class]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/PartitionedSequenceCached.class]] +[ERROR] [checking com.milaboratory.mixcr.vdjaligners.VDJCAligner] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/vdjaligners/VDJCAligner.class]] +[ERROR] [checking com.milaboratory.mixcr.vdjaligners.VDJCAlignmentResult] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/vdjaligners/VDJCAlignmentResult.class]] +[ERROR] [checking com.milaboratory.mixcr.basictypes.CloneSet] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/CloneSet.class]] +[ERROR] [checking com.milaboratory.mixcr.basictypes.Clone] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/IllegalStateException.class)]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/Clone.class]] +[ERROR] [checking com.milaboratory.mixcr.cli.CloneAssemblerReport] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/cli/CloneAssemblerReport.class]] +[ERROR] [checking com.milaboratory.mixcr.assembler.CloneAssemblerListener] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/assembler/CloneAssemblerListener.class]] +[ERROR] [checking com.milaboratory.mixcr.vdjaligners.VDJCAlignerParameters] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/vdjaligners/VDJCAlignerParameters.class]] +[ERROR] [checking com.milaboratory.mixcr.basictypes.HasFeatureToAlign] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/HasFeatureToAlign.class]] +[ERROR] [checking com.milaboratory.mixcr.assembler.CloneAssemblerParameters] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/util/regex/MatchResult.class)]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/assembler/CloneAssemblerParameters.class]] +[ERROR] [checking com.milaboratory.mixcr.reference.Locus] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/Locus.class]] +[ERROR] [checking com.milaboratory.mixcr.vdjaligners.VDJCAlignmentFailCause] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/vdjaligners/VDJCAlignmentFailCause.class]] +[ERROR] [checking com.milaboratory.mixcr.cli.ReportHelper] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/FilterOutputStream.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/text/NumberFormat.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/text/Format.class)]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/cli/ReportHelper.class]] +[ERROR] [checking com.milaboratory.mixcr.basictypes.VDJCHit] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/com/milaboratory/milib/1.1.3-SNAPSHOT/milib-1.1.3-SNAPSHOT.jar(com/milaboratory/core/alignment/batch/HasSequence.class)]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/VDJCHit.class]] +[ERROR] [checking com.milaboratory.mixcr.basictypes.VDJCPartitionedSequence] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/VDJCPartitionedSequence.class]] +[ERROR] [checking com.milaboratory.mixcr.reference.Gene] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/Gene.class]] +[ERROR] [checking com.milaboratory.mixcr.reference.LocusContainer] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/LocusContainer.class]] +[ERROR] [checking com.milaboratory.mixcr.reference.AlleleId] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/AlleleId.class]] +[ERROR] [checking com.milaboratory.mixcr.reference.GeneGroup] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/GeneGroup.class]] +[ERROR] [checking com.milaboratory.mixcr.reference.ReferencePoints] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/ReferencePoints.class]] +[ERROR] [checking com.milaboratory.mixcr.assembler.CloneAccumulator] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar(gnu/trove/impl/hash/TObjectHash.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar(gnu/trove/impl/hash/THash.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar(gnu/trove/map/TObjectFloatMap.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/Externalizable.class)]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/assembler/CloneAccumulator.class]] +[ERROR] [checking com.milaboratory.mixcr.vdjaligners.GeneAlignmentParameters] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/vdjaligners/GeneAlignmentParameters.class]] +[ERROR] [checking com.milaboratory.mixcr.vdjaligners.VJAlignmentOrder] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/vdjaligners/VJAlignmentOrder.class]] +[ERROR] [checking com.milaboratory.mixcr.vdjaligners.KGeneAlignmentParameters] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/vdjaligners/KGeneAlignmentParameters.class]] +[ERROR] [checking com.milaboratory.mixcr.vdjaligners.DAlignerParameters] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/vdjaligners/DAlignerParameters.class]] +[ERROR] [checking com.milaboratory.mixcr.assembler.CloneClusteringParameters] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/assembler/CloneClusteringParameters.class]] +[ERROR] [checking com.milaboratory.mixcr.assembler.CloneFactoryParameters] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/assembler/CloneFactoryParameters.class]] +[ERROR] [checking com.milaboratory.mixcr.assembler.AssemblerUtils] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/math/BigInteger.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/apache/commons/commons-math3/3.3/commons-math3-3.3.jar(org/apache/commons/math3/exception/NotPositiveException.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/apache/commons/commons-math3/3.3/commons-math3-3.3.jar(org/apache/commons/math3/exception/NumberIsTooSmallException.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/apache/commons/commons-math3/3.3/commons-math3-3.3.jar(org/apache/commons/math3/exception/MathIllegalNumberException.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/apache/commons/commons-math3/3.3/commons-math3-3.3.jar(org/apache/commons/math3/exception/MathIllegalArgumentException.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/apache/commons/commons-math3/3.3/commons-math3-3.3.jar(org/apache/commons/math3/exception/NumberIsTooLargeException.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Users/dbolotin/.m2/repository/org/apache/commons/commons-math3/3.3/commons-math3-3.3.jar(org/apache/commons/math3/exception/MathArithmeticException.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/lang/ArithmeticException.class)]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/assembler/AssemblerUtils$MappingThresholdCalculator.class]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/assembler/AssemblerUtils.class]] +[ERROR] [checking com.milaboratory.mixcr.basictypes.TargetPartitioning] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/TargetPartitioning.class]] +[ERROR] [checking com.milaboratory.mixcr.reference.SpeciesAndLocus] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/SpeciesAndLocus.class]] +[ERROR] [checking com.milaboratory.mixcr.reference.LociLibrary] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/LociLibrary.class]] +[ERROR] [checking com.milaboratory.mixcr.reference.AlleleResolver] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/AlleleResolver.class]] +[ERROR] [checking com.milaboratory.mixcr.basictypes.ClonalSequence] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/ClonalSequence$Stretch.class]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/ClonalSequence$1.class]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/ClonalSequence.class]] +[ERROR] [checking com.milaboratory.mixcr.assembler.ClusteringFilter] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/assembler/ClusteringFilter.class]] +[ERROR] [checking com.milaboratory.mixcr.assembler.VJCClonalAlignerParameters] +[ERROR] [checking com.milaboratory.mixcr.assembler.AbstractClonalAlignerParameters] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/assembler/VJCClonalAlignerParameters.class]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/assembler/AbstractClonalAlignerParameters.class]] +[ERROR] [checking com.milaboratory.mixcr.reference.SequenceBase] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/SequenceBase$SequenceContainer.class]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/reference/SequenceBase.class]] +[ERROR] [checking com.milaboratory.mixcr.assembler.AssemblerEvent] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/assembler/AssemblerEvent.class]] +[ERROR] [checking com.milaboratory.mixcr.cli.ActionMergeAlignments] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/cli/ActionMergeAlignments$MergeParameters.class]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/cli/ActionMergeAlignments$MultiReader.class]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/cli/ActionMergeAlignments.class]] +[ERROR] [checking com.milaboratory.mixcr.basictypes.CompatibilityIO] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/CompatibilityIO$VDJCAlignmentsSerializerV5.class]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/CompatibilityIO.class]] +[ERROR] [checking com.milaboratory.mixcr.basictypes.VDJCAlignmentsWriter] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/nio/charset/Charset.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/net/URI.class)]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/VDJCAlignmentsWriter.class]] +[ERROR] [checking com.milaboratory.mixcr.basictypes.VDJCAlignmentsReader] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/FileInputStream.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/FileDescriptor.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/BufferedInputStream.class)]] +[ERROR] [loading ZipFileIndexFileObject[/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/lib/ct.sym(META-INF/sym/rt.jar/java/io/FilterInputStream.class)]] +[ERROR] [wrote RegularFileObject[/Volumes/Data/Projects/MiLaboratory/mixcr/target/classes/com/milaboratory/mixcr/basictypes/VDJCAlignmentsReader.class]] +[ERROR] [checking com.milaboratory.mixcr.vdjaligners.VDJCAlignerSJFirst] +[ERROR] +[ERROR] +[ERROR] The system is out of resources. +[ERROR] Consult the following stack trace for details. +[ERROR] java.lang.StackOverflowError +[ERROR] at com.sun.tools.javac.code.Type.hasTag(Type.java:112) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.getUpperBound(Type.java:1286) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:858) +[ERROR] at com.sun.tools.javac.code.Types$4.visitType(Types.java:844) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitTypeVar(Types.java:4565) +[ERROR] at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1281) +[ERROR] at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4559) +[ERROR] at com.sun.tools.javac.code.Types.isSubtype(Types.java:840) +[ERROR] at com.sun.tools.javac.code.Types.isSubtypeNoCapture(Types.java:807) +[ERROR] -> [Help 1] +[ERROR] +[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. +[ERROR] Re-run Maven using the -X switch to enable full debug logging. +[ERROR] +[ERROR] For more information about the errors and possible solutions, please read the following articles: +[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException diff --git a/mixcr b/mixcr index fc5a39384..2b2b27c77 100755 --- a/mixcr +++ b/mixcr @@ -10,10 +10,32 @@ then exit 1 fi +# Linux readlink -f alternative for Mac OS X +function readlinkUniversal() { + targetFile=$1 + + cd `dirname $targetFile` + targetFile=`basename $targetFile` + + # iterate down a (possible) chain of symlinks + while [ -L "$targetFile" ] + do + targetFile=`readlink $targetFile` + cd `dirname $targetFile` + targetFile=`basename $targetFile` + done + + # compute the canonicalized name by finding the physical path + # for the directory we're in and appending the target file. + phys_dir=`pwd -P` + result=$phys_dir/$targetFile + echo $result +} + os=`uname` delta=100 -DIR="" +dir="" case $os in Darwin) @@ -23,12 +45,12 @@ case $os in freeMb=$((($freeBlocks+$speculativeBlocks)*4096/1048576)) inactiveMb=$(($inactiveBlocks*4096/1048576)) maxMb=$((($freeMb+$inactiveMb-$delta))) - DIR=$(cd "$(dirname "$0")"; pwd) + dir=$(dirname "$(readlinkUniversal "$0")") ;; Linux) rFreeMb=$(free -m | head -n 3 | tail -n 1 | awk '{ print $4 }') maxMb=$(($rFreeMb-$delta)) - DIR="$(dirname "$(readlink -f "$0")")" + dir="$(dirname "$(readlink -f "$0")")" ;; *) echo "Unknown OS." @@ -36,9 +58,17 @@ case $os in ;; esac +mixcr=${dir}/mixcr + mixcrArgs=() javaArgs=() +if [[ $# -eq 1 ]] && [[ $(echo $1 | tr '[:upper:]' '[:lower:]') == "importfromimgt" ]]; then + echo "Starting importFromIMGT.sh script" + ${dir}/importFromIMGT.sh -mixcr ${mixcr} || exit 1 + exit 0 +fi + needXmxXms=true while [[ $# > 0 ]] @@ -46,7 +76,7 @@ do key="$1" shift case $key in - -D*|-X*) + -D*|-X*|-ea|-agentlib*) javaArgs+=(${key}) case $key in @@ -85,7 +115,7 @@ fi jar="" -for j in "$DIR/../jar/mixcr.jar" "$DIR/mixcr.jar" $(ls -d -1 $DIR/target/* 2> /dev/null | grep distribution.jar) +for j in "$dir/../jar/mixcr.jar" "$dir/mixcr.jar" $(ls -d -1 $dir/target/* 2> /dev/null | grep distribution.jar) do if [[ -e "$j" ]]; then @@ -100,4 +130,4 @@ then exit 1 fi -$java -Dmixcr.command=mixcr -XX:+AggressiveOpts "${javaArgs[@]}" -jar $jar "${mixcrArgs[@]}" +$java -Dmixcr.path=$dir -Dmixcr.command=mixcr -XX:+AggressiveOpts "${javaArgs[@]}" -jar $jar "${mixcrArgs[@]}" diff --git a/pom.xml b/pom.xml index 6150a8838..b57a05e42 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ com.milaboratory mixcr - 1.6 + 1.7 jar MiXCR @@ -44,10 +44,16 @@ UTF-8 - 1.1.2-SNAPSHOT + 1.2 + + org.mapdb + mapdb + 1.0.8 + + com.milaboratory mitools @@ -95,8 +101,47 @@ + + scm:git:https://github.com/milaboratory/mixcr.git + + + + org.codehaus.mojo + buildnumber-maven-plugin + 1.4 + + + create-buildnumber + validate + + create + + + + create-metadata + generate-resources + + create-metadata + + + + ${scmBranch} + + + + + + false + false + true + ${project.artifactId}-build.properties + 7 + true + + + org.apache.maven.plugins maven-surefire-plugin @@ -123,6 +168,7 @@ 1.7 1.7 + true diff --git a/src/main/java/com/milaboratory/mixcr/assembler/AssemblerEventLogger.java b/src/main/java/com/milaboratory/mixcr/assembler/AssemblerEventLogger.java index 7aa9e4d7f..8289d5cba 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/AssemblerEventLogger.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/AssemblerEventLogger.java @@ -42,7 +42,7 @@ import static com.milaboratory.core.io.util.IOUtil.*; public final class AssemblerEventLogger { - static final int MAX_BUFFER_SIZE = 10_000; + static final int MAX_BUFFER_SIZE = 30_000; final AtomicBoolean closed = new AtomicBoolean(false); final File file; final OutputStream os; diff --git a/src/main/java/com/milaboratory/mixcr/assembler/CloneAssembler.java b/src/main/java/com/milaboratory/mixcr/assembler/CloneAssembler.java index 02d83857e..dff3428ba 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/CloneAssembler.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/CloneAssembler.java @@ -153,9 +153,14 @@ public void setListener(CloneAssemblerListener listener) { private ClonalSequence extractClonalSequence(VDJCAlignments alignments) { final NSequenceWithQuality[] targets = new NSequenceWithQuality[parameters.assemblingFeatures.length]; + int totalLengt = 0; for (int i = 0; i < targets.length; ++i) if ((targets[i] = alignments.getFeature(parameters.assemblingFeatures[i])) == null) return null; + else + totalLengt += targets[i].size(); + if (totalLengt < parameters.minimalClonalSequenceLength) + return null; return new ClonalSequence(targets); } @@ -496,6 +501,7 @@ void buildClones() { if (clusteredClonesAccumulators != null) source = clusteredClonesAccumulators; else { + idMapping = new TIntIntHashMap(); //sort clones by count (if not yet sorted by clustering) CloneAccumulator[] sourceArray = clones.values().toArray(new CloneAccumulator[clones.size()]); Arrays.sort(sourceArray, new Comparator() { @@ -504,8 +510,10 @@ public int compare(CloneAccumulator o1, CloneAccumulator o2) { return Long.compare(o2.count, o1.count); } }); - for (int i = 0; i < sourceArray.length; i++) + for (int i = 0; i < sourceArray.length; i++) { + idMapping.put(sourceArray[i].getCloneIndex(), i); sourceArray[i].setCloneIndex(i); + } source = Arrays.asList(sourceArray); } realClones = new Clone[source.size()]; diff --git a/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerParameters.java b/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerParameters.java index 8971dda85..6db740c14 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerParameters.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/CloneAssemblerParameters.java @@ -43,6 +43,7 @@ public final class CloneAssemblerParameters implements java.io.Serializable { private static final int MAX_MAPPING_REGION = 1000; GeneFeature[] assemblingFeatures; + int minimalClonalSequenceLength; CloneClusteringParameters cloneClusteringParameters; CloneFactoryParameters cloneFactoryParameters; boolean addReadsCountOnClustering; @@ -54,6 +55,7 @@ public final class CloneAssemblerParameters implements java.io.Serializable { @JsonCreator public CloneAssemblerParameters(@JsonProperty("assemblingFeatures") GeneFeature[] assemblingFeatures, + @JsonProperty("minimalClonalSequenceLength") int minimalClonalSequenceLength, @JsonProperty("cloneClusteringParameters") CloneClusteringParameters cloneClusteringParameters, @JsonProperty("cloneFactoryParameters") CloneFactoryParameters cloneFactoryParameters, @JsonProperty("addReadsCountOnClustering") boolean addReadsCountOnClustering, @@ -61,6 +63,7 @@ public CloneAssemblerParameters(@JsonProperty("assemblingFeatures") GeneFeature[ @JsonProperty("maxBadPointsPercent") double maxBadPointsPercent, @JsonProperty("mappingThreshold") String mappingThreshold) { this.assemblingFeatures = assemblingFeatures; + this.minimalClonalSequenceLength = minimalClonalSequenceLength; this.cloneClusteringParameters = cloneClusteringParameters; this.cloneFactoryParameters = cloneFactoryParameters; this.addReadsCountOnClustering = addReadsCountOnClustering; @@ -104,6 +107,10 @@ public GeneFeature[] getAssemblingFeatures() { return assemblingFeatures; } + public int getMinimalClonalSequenceLength() { + return minimalClonalSequenceLength; + } + public CloneFactoryParameters getCloneFactoryParameters() { return cloneFactoryParameters; } @@ -133,6 +140,11 @@ public void setMappingThreshold(String mappingThreshold) { updateVariants(); } + public CloneAssemblerParameters setMinimalClonalSequenceLength(int minimalClonalSequenceLength) { + this.minimalClonalSequenceLength = minimalClonalSequenceLength; + return this; + } + public CloneClusteringParameters getCloneClusteringParameters() { return cloneClusteringParameters; } @@ -172,7 +184,7 @@ public boolean isClusteringEnabled() { @Override public CloneAssemblerParameters clone() { - return new CloneAssemblerParameters(assemblingFeatures.clone(), + return new CloneAssemblerParameters(assemblingFeatures.clone(), minimalClonalSequenceLength, cloneClusteringParameters == null ? null : cloneClusteringParameters.clone(), cloneFactoryParameters.clone(), addReadsCountOnClustering, badQualityThreshold, maxBadPointsPercent, mappingThreshold); @@ -181,29 +193,29 @@ public CloneAssemblerParameters clone() { @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (!(o instanceof CloneAssemblerParameters)) return false; CloneAssemblerParameters that = (CloneAssemblerParameters) o; + if (minimalClonalSequenceLength != that.minimalClonalSequenceLength) return false; if (addReadsCountOnClustering != that.addReadsCountOnClustering) return false; if (badQualityThreshold != that.badQualityThreshold) return false; - if (maxBadPointsPercent != that.maxBadPointsPercent) return false; + if (Double.compare(that.maxBadPointsPercent, maxBadPointsPercent) != 0) return false; if (variants != that.variants) return false; + // Probably incorrect - comparing Object[] arrays with Arrays.equals if (!Arrays.equals(assemblingFeatures, that.assemblingFeatures)) return false; - if (!cloneFactoryParameters.equals(that.cloneFactoryParameters)) return false; - if (cloneClusteringParameters != null ? - !cloneClusteringParameters.equals(that.cloneClusteringParameters) : - that.cloneClusteringParameters != null) + if (cloneClusteringParameters != null ? !cloneClusteringParameters.equals(that.cloneClusteringParameters) : that.cloneClusteringParameters != null) return false; + return cloneFactoryParameters != null ? cloneFactoryParameters.equals(that.cloneFactoryParameters) : that.cloneFactoryParameters == null; - return true; } @Override public int hashCode() { int result; long temp; - result = assemblingFeatures != null ? Arrays.hashCode(assemblingFeatures) : 0; + result = Arrays.hashCode(assemblingFeatures); + result = 31 * result + minimalClonalSequenceLength; result = 31 * result + (cloneClusteringParameters != null ? cloneClusteringParameters.hashCode() : 0); result = 31 * result + (cloneFactoryParameters != null ? cloneFactoryParameters.hashCode() : 0); result = 31 * result + (addReadsCountOnClustering ? 1 : 0); diff --git a/src/main/java/com/milaboratory/mixcr/assembler/CloneFactory.java b/src/main/java/com/milaboratory/mixcr/assembler/CloneFactory.java index be6d28bd6..3ce9a268f 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/CloneFactory.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/CloneFactory.java @@ -29,9 +29,7 @@ package com.milaboratory.mixcr.assembler; import com.milaboratory.core.Range; -import com.milaboratory.core.alignment.Alignment; -import com.milaboratory.core.alignment.BandedAligner; -import com.milaboratory.core.alignment.BandedAlignerParameters; +import com.milaboratory.core.alignment.*; import com.milaboratory.core.sequence.NucleotideSequence; import com.milaboratory.mixcr.basictypes.Clone; import com.milaboratory.mixcr.basictypes.VDJCHit; @@ -155,37 +153,67 @@ Clone create(int id, CloneAccumulator accumulator) { throw new RuntimeException(); } - BandedAlignerParameters alignmentParameters = vjcParameters.getAlignmentParameters(); + BandedAlignerParameters alignmentParameters = vjcParameters.getAlignmentParameters(); int referenceLength = rangeInReference.length(); NucleotideSequence target = accumulator.getSequence().get(i).getSequence(); - if (leftSide == null) { - alignments[i] = BandedAligner.align(alignmentParameters.getScoring(), - referenceSequence, target, - rangeInReference.getFrom(), referenceLength, - 0, target.size(), - alignmentParameters.getWidth()); - } else if (leftSide) { - assert rangeInReference.getFrom() + referenceLength == referenceSequence.size(); - alignments[i] = BandedAligner.alignSemiLocalLeft( - alignmentParameters.getScoring(), - referenceSequence, target, - rangeInReference.getFrom(), referenceLength, - 0, target.size(), - alignmentParameters.getWidth(), - alignmentParameters.getStopPenalty()); + if (alignmentParameters.getScoring() instanceof LinearGapAlignmentScoring) { + if (leftSide == null) { + alignments[i] = BandedLinearAligner.align( + (LinearGapAlignmentScoring) alignmentParameters.getScoring(), + referenceSequence, target, + rangeInReference.getFrom(), referenceLength, + 0, target.size(), + alignmentParameters.getWidth()); + } else if (leftSide) { + assert rangeInReference.getFrom() + referenceLength == referenceSequence.size(); + alignments[i] = BandedLinearAligner.alignSemiLocalLeft( + (LinearGapAlignmentScoring) alignmentParameters.getScoring(), + referenceSequence, target, + rangeInReference.getFrom(), referenceLength, + 0, target.size(), + alignmentParameters.getWidth(), + alignmentParameters.getStopPenalty()); + } else { + assert rangeInReference.getFrom() == 0; + //int offset2 = Math.max(0, target.size() - referenceLength); + alignments[i] = BandedLinearAligner.alignSemiLocalRight( + (LinearGapAlignmentScoring) alignmentParameters.getScoring(), + referenceSequence, target, + rangeInReference.getFrom(), referenceLength, + 0, target.size(), + alignmentParameters.getWidth(), + alignmentParameters.getStopPenalty()); + } } else { - assert rangeInReference.getFrom() == 0; - //int offset2 = Math.max(0, target.size() - referenceLength); - alignments[i] = BandedAligner.alignSemiLocalRight( - alignmentParameters.getScoring(), - referenceSequence, target, - rangeInReference.getFrom(), referenceLength, - 0, target.size(), - alignmentParameters.getWidth(), - alignmentParameters.getStopPenalty()); + if (leftSide == null) { + alignments[i] = BandedAffineAligner.align( + (AffineGapAlignmentScoring) alignmentParameters.getScoring(), + referenceSequence, target, + rangeInReference.getFrom(), referenceLength, + 0, target.size(), + alignmentParameters.getWidth()); + } else if (leftSide) { + assert rangeInReference.getFrom() + referenceLength == referenceSequence.size(); + alignments[i] = BandedAffineAligner.semiLocalRight( + (AffineGapAlignmentScoring) alignmentParameters.getScoring(), + referenceSequence, target, + rangeInReference.getFrom(), referenceLength, + 0, target.size(), + alignmentParameters.getWidth()); + } else { + assert rangeInReference.getFrom() == 0; + //int offset2 = Math.max(0, target.size() - referenceLength); + alignments[i] = BandedAffineAligner.semiLocalLeft( + (AffineGapAlignmentScoring) alignmentParameters.getScoring(), + referenceSequence, target, + rangeInReference.getFrom(), referenceLength, + 0, target.size(), + alignmentParameters.getWidth()); + } } } - result[pointer++] = new VDJCHit(allele, alignments, featureToAlign, scores.get(alleleIndex) / accumulator.count); + result[pointer++] = new VDJCHit(allele, alignments, featureToAlign, scores.get(alleleIndex) / + accumulator.count); } Arrays.sort(result, 0, pointer); hits.put(geneType, pointer < result.length ? Arrays.copyOf(result, pointer) : result); diff --git a/src/main/java/com/milaboratory/mixcr/assembler/IO.java b/src/main/java/com/milaboratory/mixcr/assembler/IO.java index 7510bc374..47774d0ad 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/IO.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/IO.java @@ -31,27 +31,79 @@ import com.milaboratory.primitivio.PrimitivI; import com.milaboratory.primitivio.PrimitivO; import com.milaboratory.primitivio.Serializer; +import org.mapdb.BTreeKeySerializer; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.io.Serializable; +import java.util.Comparator; /** * Created by poslavsky on 13/08/14. */ -final class IO { - public static class AlignedReadInfoSerializer implements Serializer { +public final class IO { + public static final ReadToCloneMappingMapDBSerializer MAPDB_SERIALIZER = new ReadToCloneMappingMapDBSerializer(); + + public static final class ReadToCloneMappingMapDBSerializer implements + org.mapdb.Serializer, Serializable { + private static final long serialVersionUID = 1L; + + @Override + public void serialize(DataOutput out, ReadToCloneMapping value) throws IOException { + write0(out, value); + } + + @Override + public ReadToCloneMapping deserialize(DataInput in, int available) throws IOException { + return read0(in); + } + + @Override + public int fixedSize() { + return 21; + } + } + + public static final class ReadToCloneMappingBtreeSerializer + extends BTreeKeySerializer implements Serializable { + private static final long serialVersionUID = 1L; + + private final Comparator comparator; + + public ReadToCloneMappingBtreeSerializer(Comparator comparator) { + this.comparator = comparator; + } + + @Override + public void serialize(DataOutput out, int start, int end, Object[] keys) throws IOException { + for (int i = start; i < end; ++i) + write0(out, (ReadToCloneMapping) keys[i]); + } + + @Override + public Object[] deserialize(DataInput in, int start, int end, int size) throws IOException { + Object[] r = new Object[size]; + for (int i = start; i < end; ++i) + r[i] = read0(in); + return r; + } + + @Override + public Comparator getComparator() { + return comparator; + } + } + + public static class ReadToCloneMappingSerializer implements Serializer { @Override public void write(PrimitivO output, ReadToCloneMapping object) { - output.writeLong(object.alignmentsId); - output.writeLong(object.readId); - output.writeInt(object.cloneIndex); - output.writeByte(object.mappingType); + write0(output, object); } @Override public ReadToCloneMapping read(PrimitivI input) { - long alignmentsIndex = input.readLong(); - long readId = input.readLong(); - int cloneIndex = input.readInt(); - byte mappingType = input.readByte(); - return new ReadToCloneMapping(alignmentsIndex, readId, cloneIndex, mappingType); + return read0(input); } @Override @@ -64,4 +116,27 @@ public boolean handlesReference() { return false; } } + + private static void write0(DataOutput output, ReadToCloneMapping object) { + try { + output.writeLong(object.alignmentsId); + output.writeLong(object.readId); + output.writeInt(object.cloneIndex); + output.writeByte(object.mappingType); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private static ReadToCloneMapping read0(DataInput input) { + try { + long alignmentsIndex = input.readLong(); + long readId = input.readLong(); + int cloneIndex = input.readInt(); + byte mappingType = input.readByte(); + return new ReadToCloneMapping(alignmentsIndex, readId, cloneIndex, mappingType); + } catch (IOException e) { + throw new RuntimeException(e); + } + } } diff --git a/src/main/java/com/milaboratory/mixcr/assembler/ReadToCloneMapping.java b/src/main/java/com/milaboratory/mixcr/assembler/ReadToCloneMapping.java index 4a28ceb74..da7a95764 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/ReadToCloneMapping.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/ReadToCloneMapping.java @@ -31,7 +31,9 @@ import com.milaboratory.primitivio.annotations.Serializable; -@Serializable(by = IO.AlignedReadInfoSerializer.class) +import java.util.Comparator; + +@Serializable(by = IO.ReadToCloneMappingSerializer.class) public final class ReadToCloneMapping { final long alignmentsId; final long readId; @@ -77,8 +79,69 @@ public boolean isDropped() { return cloneIndex < 0; } + public MappingType getMappingType() { + if (isDropped()) + return MappingType.Dropped; + else if (isMapped()) + return MappingType.Mapped; + else if (isClustered()) + return MappingType.Clustered; + else return MappingType.Core; + } + @Override public String toString() { return "" + alignmentsId + " -> " + cloneIndex + " " + (isClustered() ? "c" : "") + (isMapped() ? "m" : ""); } + + public enum MappingType { + Core, Clustered, Mapped, Dropped; + + @Override + public String toString() { + return super.toString().toLowerCase(); + } + } + + public static final Comparator + CLONE_COMPARATOR = new CloneComparator(), + ALIGNMENTS_COMPARATOR = new AlignmentsComparator(); + + private static final class CloneComparator implements Comparator, + java.io.Serializable { + private static final long serialVersionUID = 1L; + + private CloneComparator() { + } + + @Override + public int compare(ReadToCloneMapping o1, ReadToCloneMapping o2) { + int c = Integer.compare(o1.cloneIndex, o2.cloneIndex); + return c == 0 ? Long.compare(o1.alignmentsId, o2.alignmentsId) : c; + } + + @Override + public boolean equals(Object obj) { + return obj instanceof CloneComparator; + } + } + + private static final class AlignmentsComparator implements Comparator, + java.io.Serializable { + private static final long serialVersionUID = 1L; + + private AlignmentsComparator() { + } + + @Override + public int compare(ReadToCloneMapping o1, ReadToCloneMapping o2) { + int c = Long.compare(o1.alignmentsId, o2.alignmentsId); + return c == 0 ? Integer.compare(o1.cloneIndex, o2.cloneIndex) : c; + } + + @Override + public boolean equals(Object obj) { + return obj instanceof AlignmentsComparator; + } + } } diff --git a/src/main/java/com/milaboratory/mixcr/assembler/VJCClonalAlignerParameters.java b/src/main/java/com/milaboratory/mixcr/assembler/VJCClonalAlignerParameters.java index ce5a856c6..9abb936c8 100644 --- a/src/main/java/com/milaboratory/mixcr/assembler/VJCClonalAlignerParameters.java +++ b/src/main/java/com/milaboratory/mixcr/assembler/VJCClonalAlignerParameters.java @@ -32,28 +32,29 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.milaboratory.core.alignment.BandedAlignerParameters; +import com.milaboratory.core.sequence.NucleotideSequence; import com.milaboratory.mixcr.reference.GeneFeature; @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, isGetterVisibility = JsonAutoDetect.Visibility.NONE, getterVisibility = JsonAutoDetect.Visibility.NONE) public final class VJCClonalAlignerParameters extends AbstractClonalAlignerParameters implements java.io.Serializable { - BandedAlignerParameters alignmentParameters; + BandedAlignerParameters alignmentParameters; @JsonCreator public VJCClonalAlignerParameters( @JsonProperty("featureToAlign") GeneFeature featureToAlign, @JsonProperty("relativeMinScore") float relativeMinScore, - @JsonProperty("alignmentParameters") BandedAlignerParameters alignmentParameters) { + @JsonProperty("alignmentParameters") BandedAlignerParameters alignmentParameters) { super(featureToAlign, relativeMinScore); this.alignmentParameters = alignmentParameters; } - public BandedAlignerParameters getAlignmentParameters() { + public BandedAlignerParameters getAlignmentParameters() { return alignmentParameters; } - public VJCClonalAlignerParameters setAlignmentParameters(BandedAlignerParameters alignmentParameters) { + public VJCClonalAlignerParameters setAlignmentParameters(BandedAlignerParameters alignmentParameters) { this.alignmentParameters = alignmentParameters; return this; } diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/Clone.java b/src/main/java/com/milaboratory/mixcr/basictypes/Clone.java index c8c452586..b78e77254 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/Clone.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/Clone.java @@ -81,6 +81,10 @@ public NSequenceWithQuality getFeature(GeneFeature geneFeature) { return super.getFeature(geneFeature); } + public int getId() { + return id; + } + @Override public String toString() { return "id: " + id + " " + "count: " + count; diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/CloneSet.java b/src/main/java/com/milaboratory/mixcr/basictypes/CloneSet.java index 8cb00b463..58f81ba66 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/CloneSet.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/CloneSet.java @@ -40,6 +40,7 @@ * Created by poslavsky on 10/07/14. */ public final class CloneSet implements Iterable { + String versionInfo; final GeneFeature[] assemblingFeatures; final EnumMap alignedFeatures; final List usedAlleles; @@ -117,6 +118,10 @@ public long getTotalCount() { return totalCount; } + public String getVersionInfo() { + return versionInfo; + } + @Override public Iterator iterator() { return clones.iterator(); diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/CloneSetIO.java b/src/main/java/com/milaboratory/mixcr/basictypes/CloneSetIO.java index a4a500d22..2b57bf94f 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/CloneSetIO.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/CloneSetIO.java @@ -32,6 +32,7 @@ import com.milaboratory.mixcr.reference.AlleleResolver; import com.milaboratory.mixcr.reference.GeneFeature; import com.milaboratory.mixcr.reference.GeneType; +import com.milaboratory.mixcr.util.VersionInfoProvider; import com.milaboratory.primitivio.PrimitivI; import com.milaboratory.primitivio.PrimitivO; import com.milaboratory.util.CanReportProgressAndStage; @@ -39,12 +40,13 @@ import java.io.*; import java.nio.charset.StandardCharsets; import java.util.ArrayList; -import java.util.Arrays; import java.util.EnumMap; import java.util.List; public final class CloneSetIO { - static final String MAGIC = "MiXCR.CLNS.V02"; + static final String MAGIC_V2 = "MiXCR.CLNS.V02"; + static final String MAGIC_V3 = "MiXCR.CLNS.V03"; + static final String MAGIC = MAGIC_V3; static final int MAGIC_LENGTH = 14; static final byte[] MAGIC_BYTES = MAGIC.getBytes(StandardCharsets.US_ASCII); @@ -85,7 +87,14 @@ public boolean isFinished() { } public void write() { + // Writing magic bytes output.write(MAGIC_BYTES); + + // Writing version information + output.writeUTF( + VersionInfoProvider.getVersionString( + VersionInfoProvider.OutputType.ToFile)); + output.writeObject(cloneSet.getAssemblingFeatures()); IO.writeGT2GFMap(output, cloneSet.alignedFeatures); IOUtil.writeAlleleReferences(output, cloneSet.getUsedAlleles(), new GT2GFAdapter(cloneSet.alignedFeatures)); @@ -104,31 +113,22 @@ public void close() { } } - public static void read(CloneSet cloneSet, File file) throws IOException { + public static void write(CloneSet cloneSet, File file) throws IOException { try (OutputStream os = new BufferedOutputStream(new FileOutputStream(file), 32768)) { write(cloneSet, os); } } - public static void read(CloneSet cloneSet, String fileName) throws IOException { + public static void write(CloneSet cloneSet, String fileName) throws IOException { try (OutputStream os = new BufferedOutputStream(new FileOutputStream(fileName), 32768)) { write(cloneSet, os); } } public static void write(CloneSet cloneSet, OutputStream outputStream) { - PrimitivO output = new PrimitivO(outputStream); - - // Writing magic bytes - output.write(MAGIC_BYTES); - output.writeObject(cloneSet.getAssemblingFeatures()); - IO.writeGT2GFMap(output, cloneSet.alignedFeatures); - IOUtil.writeAlleleReferences(output, cloneSet.getUsedAlleles(), new GT2GFAdapter(cloneSet.alignedFeatures)); - - output.writeInt(cloneSet.getClones().size()); - - for (Clone clone : cloneSet) - output.writeObject(clone); + try(CloneSetWriter writer = new CloneSetWriter(cloneSet, outputStream)){ + writer.write(); + } } public static CloneSet read(String fileName, AlleleResolver alleleResolver) throws IOException { @@ -147,8 +147,19 @@ public static CloneSet read(InputStream inputStream, AlleleResolver alleleResolv byte[] magicBytes = new byte[MAGIC_LENGTH]; input.readFully(magicBytes); - if (!Arrays.equals(magicBytes, MAGIC_BYTES)) - throw new RuntimeException("Unsupported file format; .clns file of version " + new String(magicBytes) + " while you are running MiXCR " + MAGIC); + String magicString = new String(magicBytes); + + switch (magicString) { + case MAGIC_V2: + case MAGIC: + break; + default: + throw new RuntimeException("Unsupported file format; .clns file of version " + magicString + " while you are running MiXCR " + MAGIC); + } + + String versionInfo = null; + if (magicString.compareTo(MAGIC_V3) >= 0) + versionInfo = input.readUTF(); GeneFeature[] assemblingFeatures = input.readObject(GeneFeature[].class); EnumMap alignedFeatures = IO.readGF2GTMap(input); @@ -158,7 +169,10 @@ public static CloneSet read(InputStream inputStream, AlleleResolver alleleResolv for (int i = 0; i < count; i++) clones.add(input.readObject(Clone.class)); - return new CloneSet(clones, alleles, alignedFeatures, assemblingFeatures); + CloneSet cloneSet = new CloneSet(clones, alleles, alignedFeatures, assemblingFeatures); + cloneSet.versionInfo = versionInfo; + + return cloneSet; } private static class GT2GFAdapter implements HasFeatureToAlign { diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/CompatibilityIO.java b/src/main/java/com/milaboratory/mixcr/basictypes/CompatibilityIO.java new file mode 100644 index 000000000..f090a8cc0 --- /dev/null +++ b/src/main/java/com/milaboratory/mixcr/basictypes/CompatibilityIO.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2014-2015, 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 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.basictypes; + +import com.milaboratory.core.sequence.NSequenceWithQuality; +import com.milaboratory.mixcr.reference.GeneType; +import com.milaboratory.mixcr.reference.ReferenceCompatibilityIO; +import com.milaboratory.primitivio.PrimitivI; +import com.milaboratory.primitivio.PrimitivO; +import com.milaboratory.primitivio.Serializer; +import com.milaboratory.primitivio.SerializersManager; + +import java.util.EnumMap; +import java.util.Map; + +public final class CompatibilityIO { + private CompatibilityIO() { + } + + public static void registerV3Serializers(SerializersManager manager) { + registerV5Serializers(manager); + ReferenceCompatibilityIO.registerV3BasicReferencePointSerializers(manager); + } + + public static void registerV5Serializers(SerializersManager manager) { + manager.registerCustomSerializer(VDJCAlignments.class, new VDJCAlignmentsSerializerV5()); + } + + public static class VDJCAlignmentsSerializerV5 implements Serializer { + @Override + public void write(PrimitivO output, VDJCAlignments object) { + output.writeObject(object.targets); + output.writeObject(object.descriptions); + output.writeByte(object.hits.size()); + for (Map.Entry entry : object.hits.entrySet()) { + output.writeObject(entry.getKey()); + output.writeObject(entry.getValue()); + } + output.writeLong(object.readId); + } + + @Override + public VDJCAlignments read(PrimitivI input) { + NSequenceWithQuality[] targets = input.readObject(NSequenceWithQuality[].class); + String[] descriptions = input.readObject(String[].class); + int size = input.readByte(); + EnumMap hits = new EnumMap<>(GeneType.class); + for (int i = 0; i < size; i++) { + GeneType key = input.readObject(GeneType.class); + hits.put(key, input.readObject(VDJCHit[].class)); + } + VDJCAlignments vdjcAlignments = new VDJCAlignments(input.readLong(), hits, targets); + vdjcAlignments.setDescriptions(descriptions); + return vdjcAlignments; + } + + @Override + public boolean isReference() { + return true; + } + + @Override + public boolean handlesReference() { + return false; + } + } +} diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/IO.java b/src/main/java/com/milaboratory/mixcr/basictypes/IO.java index 9e4e12098..753dd5120 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/IO.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/IO.java @@ -81,6 +81,7 @@ public static class VDJCAlignmentsSerializer implements Serializer entry : object.hits.entrySet()) { output.writeObject(entry.getKey()); @@ -93,6 +94,7 @@ public void write(PrimitivO output, VDJCAlignments object) { public VDJCAlignments read(PrimitivI input) { NSequenceWithQuality[] targets = input.readObject(NSequenceWithQuality[].class); String[] descriptions = input.readObject(String[].class); + NSequenceWithQuality[] originalSequences = input.readObject(NSequenceWithQuality[].class); int size = input.readByte(); EnumMap hits = new EnumMap<>(GeneType.class); for (int i = 0; i < size; i++) { @@ -101,6 +103,7 @@ public VDJCAlignments read(PrimitivI input) { } VDJCAlignments vdjcAlignments = new VDJCAlignments(input.readLong(), hits, targets); vdjcAlignments.setDescriptions(descriptions); + vdjcAlignments.setOriginalSequences(originalSequences); return vdjcAlignments; } diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignments.java b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignments.java index 5b499e3c2..b3901ef07 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignments.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignments.java @@ -37,6 +37,7 @@ @Serializable(by = IO.VDJCAlignmentsSerializer.class) public final class VDJCAlignments extends VDJCObject { volatile String[] descriptions; + volatile NSequenceWithQuality[] originalSequences; final long readId; private volatile long alignmentsIndex = -1; @@ -83,6 +84,14 @@ public String[] getDescriptions() { return descriptions; } + public void setOriginalSequences(NSequenceWithQuality[] originalSequences) { + this.originalSequences = originalSequences; + } + + public NSequenceWithQuality[] getOriginalSequences() { + return originalSequences; + } + /** * Returns {@code true} if at least ont V and one J hit among first {@code top} hits have same locus and false * otherwise (first {@code top} V hits have different locus from those have first {@code top} J hits). diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsFormatter.java b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsFormatter.java index 23cb41238..1420572bf 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsFormatter.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsFormatter.java @@ -71,7 +71,7 @@ public static MultiAlignmentHelper getTargetAsMultiAlignment(VDJCAlignments vdjc char[] markers = new char[helper.size()]; Arrays.fill(markers, ' '); - for (PointToDraw point : points) + for (PointToDraw point : POINTS_FOR_REARRANGED) point.draw(partitioning, helper, markers); helper.addAnnotationString("", new String(markers)); @@ -85,7 +85,15 @@ public static MultiAlignmentHelper getTargetAsMultiAlignment(VDJCAlignments vdjc return helper; } - public static final PointToDraw[] points = new PointToDraw[]{ + public static void drawPoints(MultiAlignmentHelper helper, SequencePartitioning partitioning, PointToDraw... pointsToDraw) { + char[] markers = new char[helper.size()]; + Arrays.fill(markers, ' '); + for (PointToDraw point : pointsToDraw) + point.draw(partitioning, helper, markers); + helper.addAnnotationString("", new String(markers)); + } + + public static final PointToDraw[] POINTS_FOR_REARRANGED = new PointToDraw[]{ pd(ReferencePoint.V5UTRBeginTrimmed, "<5'UTR"), pd(ReferencePoint.V5UTREnd, "5'UTR>"), @@ -96,25 +104,48 @@ public static MultiAlignmentHelper getTargetAsMultiAlignment(VDJCAlignments vdjc pd(ReferencePoint.CDR2Begin, "FR2>"), + pd(ReferencePoint.VEndTrimmed, "V>", -1), pd(ReferencePoint.DBeginTrimmed, ""), + pd(ReferencePoint.DEndTrimmed, "D>", -1), pd(ReferencePoint.JBeginTrimmed, "") + pd(ReferencePoint.FR4End, "FR4>", -1) + }; + + public static final PointToDraw[] POINTS_FOR_GERMLINE = new PointToDraw[]{ + pd(ReferencePoint.V5UTRBeginTrimmed, "<5'UTR"), + pd(ReferencePoint.V5UTREnd, "5'UTR>"), + pd(ReferencePoint.L2Begin, "", -1), + pd(ReferencePoint.DBegin, "", -1), + pd(ReferencePoint.JBegin, "", -1) }; private static PointToDraw pd(ReferencePoint rp, String marker) { + return pd(rp, marker, 0); + } + + private static PointToDraw pd(ReferencePoint rp, String marker, int additionalOffset) { int offset = marker.indexOf('>'); if (offset >= 0) - return new PointToDraw(rp, marker, -1 - offset); + return new PointToDraw(rp.move(additionalOffset), marker, -1 - offset - additionalOffset); offset = marker.indexOf('<'); if (offset >= 0) - return new PointToDraw(rp, marker, -offset); + return new PointToDraw(rp.move(additionalOffset), marker, -offset - additionalOffset); return new PointToDraw(rp, marker, 0); } - private static class PointToDraw { + public static final class PointToDraw { final ReferencePoint rp; final String marker; final int markerOffset; diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsReader.java b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsReader.java index a0009c77d..bd462245d 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsReader.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsReader.java @@ -32,15 +32,17 @@ import com.milaboratory.core.io.CompressionType; import com.milaboratory.mixcr.reference.Allele; import com.milaboratory.mixcr.reference.AlleleResolver; -import com.milaboratory.mixcr.reference.CompatibilityIO; import com.milaboratory.mixcr.vdjaligners.VDJCAlignerParameters; import com.milaboratory.primitivio.PrimitivI; +import com.milaboratory.primitivio.SerializersManager; import com.milaboratory.util.CanReportProgress; import com.milaboratory.util.CountingInputStream; import java.io.*; import java.util.List; +import static com.milaboratory.mixcr.basictypes.CompatibilityIO.registerV3Serializers; +import static com.milaboratory.mixcr.basictypes.CompatibilityIO.registerV5Serializers; import static com.milaboratory.mixcr.basictypes.VDJCAlignmentsWriter.*; public class VDJCAlignmentsReader implements OutputPortCloseable, CanReportProgress { @@ -48,6 +50,8 @@ public class VDJCAlignmentsReader implements OutputPortCloseable List usedAlleles; final PrimitivI input; final AlleleResolver alleleResolver; + String versionInfo; + String magic; long numberOfReads = -1; boolean closed = false; long counter = 0; @@ -87,9 +91,16 @@ public void init() { byte[] magic = new byte[MAGIC_LENGTH]; input.readFully(magic); String magicString = new String(magic); + this.magic = magicString; + + SerializersManager serializersManager = input.getSerializersManager(); switch (magicString) { case MAGIC_V3: - CompatibilityIO.registerV3Serializers(input.getSerializersManager()); + registerV3Serializers(serializersManager); + break; + case MAGIC_V4: + case MAGIC_V5: + registerV5Serializers(serializersManager); break; case MAGIC: break; @@ -97,6 +108,9 @@ public void init() { throw new RuntimeException("Unsupported file format; .vdjca file of version " + new String(magic) + " while you are running MiXCR " + MAGIC); } + if (magicString.compareTo(MAGIC_V5) >= 0) + versionInfo = input.readUTF(); + parameters = input.readObject(VDJCAlignerParameters.class); this.usedAlleles = IOUtil.readAlleleReferences(input, alleleResolver, parameters); @@ -112,6 +126,24 @@ public synchronized List getUsedAlleles() { return usedAlleles; } + /** + * Returns information about version of MiXCR which produced this file. + * + * @return information about version of MiXCR which produced this file + */ + public String getVersionInfo() { + return versionInfo; + } + + /** + * Returns magic bytes of this file. + * + * @return magic bytes of this file + */ + public String getMagic() { + return magic; + } + public long getNumberOfReads() { return numberOfReads; } diff --git a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsWriter.java b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsWriter.java index 0961ca229..dd7706ead 100644 --- a/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsWriter.java +++ b/src/main/java/com/milaboratory/mixcr/basictypes/VDJCAlignmentsWriter.java @@ -29,6 +29,7 @@ package com.milaboratory.mixcr.basictypes; import com.milaboratory.mixcr.reference.Allele; +import com.milaboratory.mixcr.util.VersionInfoProvider; import com.milaboratory.mixcr.vdjaligners.VDJCAligner; import com.milaboratory.mixcr.vdjaligners.VDJCAlignerParameters; import com.milaboratory.primitivio.PrimitivO; @@ -41,7 +42,10 @@ public final class VDJCAlignmentsWriter implements AutoCloseable { static final String MAGIC_V3 = "MiXCR.VDJC.V03"; - static final String MAGIC = "MiXCR.VDJC.V04"; + static final String MAGIC_V4 = "MiXCR.VDJC.V04"; + static final String MAGIC_V5 = "MiXCR.VDJC.V05"; + static final String MAGIC_V6 = "MiXCR.VDJC.V06"; + static final String MAGIC = MAGIC_V6; static final int MAGIC_LENGTH = 14; static final byte[] MAGIC_BYTES = MAGIC.getBytes(StandardCharsets.US_ASCII); final PrimitivO output; @@ -79,6 +83,11 @@ public void header(VDJCAlignerParameters parameters, List alleles) { assert MAGIC_BYTES.length == MAGIC_LENGTH; output.write(MAGIC_BYTES); + // Writing version information + output.writeUTF( + VersionInfoProvider.getVersionString( + VersionInfoProvider.OutputType.ToFile)); + // Writing parameters output.writeObject(parameters); diff --git a/src/main/java/com/milaboratory/mixcr/cli/ActionAlign.java b/src/main/java/com/milaboratory/mixcr/cli/ActionAlign.java index 48b1d8a7f..57dcd827f 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/ActionAlign.java +++ b/src/main/java/com/milaboratory/mixcr/cli/ActionAlign.java @@ -46,6 +46,7 @@ import com.milaboratory.core.io.sequence.fasta.FastaSequenceReaderWrapper; import com.milaboratory.core.io.sequence.fastq.PairedFastqReader; import com.milaboratory.core.io.sequence.fastq.SingleFastqReader; +import com.milaboratory.core.sequence.NSequenceWithQuality; import com.milaboratory.core.sequence.NucleotideSequence; import com.milaboratory.mitools.cli.Action; import com.milaboratory.mitools.cli.ActionHelper; @@ -80,15 +81,26 @@ public void go(ActionHelper helper) throws Exception { VDJCAligner aligner = VDJCAligner.createAligner(alignerParameters, actionParameters.isInputPaired(), !actionParameters.noMerge); - LociLibrary ll = LociLibraryManager.getDefault().getLibrary("mi"); + LociLibrary ll = LociLibraryManager.getDefault().getLibrary(actionParameters.ll); + if (ll == null) { + System.err.println("Segment library (" + actionParameters.ll + ") not found."); + return; + } - for (Locus locus : actionParameters.getLoci()) - for (Allele allele : ll.getLocus(actionParameters.getTaxonID(), locus).getAllAlleles()) + for (Locus locus : actionParameters.getLoci()) { + LocusContainer lc = ll.getLocus(actionParameters.species, locus); + if (lc == null) { + if (params().printWarnings()) + System.err.println("WARNING: No records for " + locus); + continue; + } + for (Allele allele : lc.getAllAlleles()) if (alignerParameters.containsRequiredFeature(allele) && (allele.isFunctional() || !actionParameters.isFunctionalOnly())) aligner.addAllele(allele); -// else if (allele.isFunctional()) -// System.err.println("WARNING: Functional allele excluded " + allele.getName()); + else if (params().printWarnings() && allele.isFunctional()) + System.err.println("WARNING: Functional allele excluded " + allele.getName()); + } AlignerReport report = actionParameters.report == null ? null : new AlignerReport(); if (report != null) { @@ -125,8 +137,10 @@ public long getIndex(VDJCAlignmentResult o) { continue; } if (writer != null) { - if (actionParameters.saveReadDescription) + if (actionParameters.saveReadDescription || actionParameters.saveOriginalReads) result.alignment.setDescriptions(extractDescription(result.read)); + if (actionParameters.saveOriginalReads) + result.alignment.setOriginalSequences(extractNSeqs(result.read)); writer.write(result.alignment); } } @@ -139,13 +153,20 @@ public long getIndex(VDJCAlignmentResult o) { helper.getCommandLineArguments(), actionParameters.report, report); } - private static String[] extractDescription(SequenceRead r) { + public static String[] extractDescription(SequenceRead r) { String[] descrs = new String[r.numberOfReads()]; for (int i = 0; i < r.numberOfReads(); i++) descrs[i] = r.getRead(i).getDescription(); return descrs; } + public static NSequenceWithQuality[] extractNSeqs(SequenceRead r) { + NSequenceWithQuality[] seqs = new NSequenceWithQuality[r.numberOfReads()]; + for (int i = 0; i < r.numberOfReads(); i++) + seqs[i] = r.getRead(i).getData(); + return seqs; + } + @Override public String command() { return "align"; @@ -165,6 +186,14 @@ public static class AlignParameters extends ActionParametersWithOutput { @DynamicParameter(names = "-O", description = "Overrides base values of parameters.") public Map overrides = new HashMap<>(); + @Parameter(description = "Segment library to use", + names = {"-b", "--library"}) + public String ll = "mi"; + + @Parameter(description = "Print warnings", + names = {"-w", "--warnings"}) + public Boolean warnings = null; + @Parameter(description = "Parameters", names = {"-p", "--parameters"}) public String alignerParametersName = "default"; @@ -202,14 +231,22 @@ public static class AlignParameters extends ActionParametersWithOutput { names = {"-a", "--save-description"}) public Boolean saveReadDescription = false; + @Parameter(description = "Copy original reads (sequences + qualities + descriptions) to .vdjca file.", + names = {"-g", "--save-reads"}) + public Boolean saveOriginalReads = false; + @Parameter(description = "Allow alignments with different loci of V and J hits.", names = {"-i", "--diff-loci"}) public Boolean allowDifferentVJLoci = false; - public int getTaxonID() { - return Species.fromStringStrict(species); + public String getSpecies() { + return species; } + //public int getTaxonID() { + // return Species.fromStringStrict(species); + //} + public VDJCAlignerParameters getAlignerParameters() { VDJCAlignerParameters params = VDJCParametersPresets.getByName(alignerParametersName); if (params == null) @@ -232,6 +269,10 @@ public String getInputForReport() { return builder.toString(); } + public boolean printWarnings() { + return warnings != null && warnings; + } + public Set getLoci() { return Util.parseLoci(loci); } diff --git a/src/main/java/com/milaboratory/mixcr/cli/ActionAlignmentsStat.java b/src/main/java/com/milaboratory/mixcr/cli/ActionAlignmentsStat.java index 93a5a78f6..f0df66ed3 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/ActionAlignmentsStat.java +++ b/src/main/java/com/milaboratory/mixcr/cli/ActionAlignmentsStat.java @@ -95,7 +95,7 @@ public void go(ActionHelper helper) throws Exception { private static final GeneFeature[] targetFeatures = { V5UTR, new GeneFeature(L1Begin, -20, 0), - L1, Intron, L2, FR1, CDR1, FR2, CDR2, FR3, CDR3, FR4, + L1, VIntron, L2, FR1, CDR1, FR2, CDR2, FR3, CDR3, FR4, new GeneFeature(FR4, 0, -3) }; diff --git a/src/main/java/com/milaboratory/mixcr/cli/ActionAssemble.java b/src/main/java/com/milaboratory/mixcr/cli/ActionAssemble.java index 04661bd3f..486248da3 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/ActionAssemble.java +++ b/src/main/java/com/milaboratory/mixcr/cli/ActionAssemble.java @@ -29,6 +29,9 @@ package com.milaboratory.mixcr.cli; import cc.redberry.pipe.CUtils; +import cc.redberry.pipe.OutputPortCloseable; +import cc.redberry.pipe.blocks.FilteringPort; +import cc.redberry.primitives.Filter; import com.beust.jcommander.DynamicParameter; import com.beust.jcommander.Parameter; import com.beust.jcommander.ParameterException; @@ -43,13 +46,21 @@ import com.milaboratory.mixcr.reference.LociLibraryManager; import com.milaboratory.primitivio.PipeWriter; import com.milaboratory.util.SmartProgressReporter; +import org.mapdb.DB; +import org.mapdb.DBMaker; +import org.mapdb.Pump; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.io.File; +import java.util.*; + +import static com.milaboratory.mixcr.assembler.ReadToCloneMapping.ALIGNMENTS_COMPARATOR; +import static com.milaboratory.mixcr.assembler.ReadToCloneMapping.CLONE_COMPARATOR; public class ActionAssemble implements Action { + public static final String MAPDB_SORTED_BY_CLONE = "sortedByClone"; + public static final String MAPDB_SORTED_BY_ALIGNMENT = "sortedByAlignment"; + public static final int MAPDB_BUFFER = 50000; + private final AssembleParameters actionParameters = new AssembleParameters(); @Override @@ -98,9 +109,56 @@ public void go(ActionHelper helper) throws Exception { try (PipeWriter writer = new PipeWriter<>(actionParameters.events)) { CUtils.drain(assembler.getAssembledReadsPort(), writer); } + + if (actionParameters.readsToClonesMapping != null) { + File dbFile = new File(actionParameters.readsToClonesMapping); + if (dbFile.exists()) { + dbFile.delete(); + dbFile = new File(actionParameters.readsToClonesMapping); + } + + DB db = DBMaker.newFileDB(dbFile) + .transactionDisable() + .make(); + + //byClones + db.createTreeSet(MAPDB_SORTED_BY_CLONE) + .pumpSource(Pump.sort( + source(assembler.getAssembledReadsPort()), + true, MAPDB_BUFFER, + Collections.reverseOrder(CLONE_COMPARATOR), + IO.MAPDB_SERIALIZER)) + .serializer(new IO.ReadToCloneMappingBtreeSerializer(CLONE_COMPARATOR)) + .comparator(CLONE_COMPARATOR) + .make(); + + //byAlignments + db.createTreeSet(MAPDB_SORTED_BY_ALIGNMENT) + .pumpSource(Pump.sort( + source(assembler.getAssembledReadsPort()), + true, MAPDB_BUFFER, + Collections.reverseOrder(ALIGNMENTS_COMPARATOR), + IO.MAPDB_SERIALIZER)) + .serializer(new IO.ReadToCloneMappingBtreeSerializer(ALIGNMENTS_COMPARATOR)) + .comparator(ALIGNMENTS_COMPARATOR) + .make(); + + db.commit(); + db.close(); + } } } + private static Iterator source(OutputPortCloseable assemblerReadsPort) { + return new CUtils.OPIterator<>(new FilteringPort<>(assemblerReadsPort, + new Filter() { + @Override + public boolean accept(ReadToCloneMapping object) { + return !object.isDropped(); + } + })); + } + @Override public String command() { return "assemble"; @@ -118,7 +176,7 @@ public static final class AssembleParameters extends ActionParametersWithOutput public List parameters; @Parameter(description = "Clone assembling parameters", - names = {"-p", "--parameters"}, validateWith = PositiveInteger.class) + names = {"-p", "--parameters"}) public String assemblerParametersName = "default"; @Parameter(description = "Processing threads", @@ -133,7 +191,11 @@ public static final class AssembleParameters extends ActionParametersWithOutput names = {"-e", "--events"}, hidden = true) public String events; - @DynamicParameter(names = "-O", description = "Overrides base values of paramentrs.") + @Parameter(description = ".", + names = {"-i", "--index"}, hidden = true) + public String readsToClonesMapping; + + @DynamicParameter(names = "-O", description = "Overrides base values of parameters.") private Map overrides = new HashMap<>(); public String getInputFileName() { @@ -161,6 +223,9 @@ protected List getOutputFiles() { public void validate() { if (parameters.size() != 2) throw new ParameterException("Wrong number of parameters."); + if (readsToClonesMapping != null) + if (new File(readsToClonesMapping).exists() && !isForceOverwrite()) + throw new ParameterException("File " + readsToClonesMapping + " already exists. Use -f option to overwrite it."); super.validate(); } } diff --git a/src/main/java/com/milaboratory/mixcr/cli/ActionExport.java b/src/main/java/com/milaboratory/mixcr/cli/ActionExport.java index c58c22425..6c23c33e8 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/ActionExport.java +++ b/src/main/java/com/milaboratory/mixcr/cli/ActionExport.java @@ -29,34 +29,30 @@ package com.milaboratory.mixcr.cli; import com.milaboratory.mitools.cli.Action; -import com.milaboratory.mitools.cli.ActionHelpProvider; import com.milaboratory.mitools.cli.ActionHelper; import com.milaboratory.mitools.cli.ActionParametersParser; -public abstract class ActionExport implements Action, ActionHelpProvider, ActionParametersParser { - public ActionExportParameters parameters; +public abstract class ActionExport implements Action, ActionParametersParser { + public final ActionExportParameters parameters; + private final Class clazz; - protected ActionExport(ActionExportParameters parameters) { + protected ActionExport(ActionExportParameters parameters, Class clazz) { this.parameters = parameters; + this.clazz = clazz; } @Override public void go(ActionHelper helper) throws Exception { if (parameters.listFields) { - helper.getDefaultPrintStream().print(parameters.printFieldsHelp()); + helper.getDefaultPrintStream().print(ActionExportParameters.listOfFields(clazz)); return; } go0(); } - @Override - public void printHelp(StringBuilder builder) { - builder.append(params().printHelp()); - } - @Override public void parseParameters(String[] args) { - params().parseParameters(args); + ActionExportParameters.parse(clazz, args, parameters); } protected abstract void go0() throws Exception; diff --git a/src/main/java/com/milaboratory/mixcr/cli/ActionExportAlignments.java b/src/main/java/com/milaboratory/mixcr/cli/ActionExportAlignments.java index f08cb2eb2..bbb9c6925 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/ActionExportAlignments.java +++ b/src/main/java/com/milaboratory/mixcr/cli/ActionExportAlignments.java @@ -38,18 +38,22 @@ public class ActionExportAlignments extends ActionExport { public ActionExportAlignments() { - super(new ActionExportParameters(VDJCAlignments.class)); + super(new ActionExportParameters(), VDJCAlignments.class); } @Override public void go0() throws Exception { - try (VDJCAlignmentsReader reader = new VDJCAlignmentsReader(parameters.inputFile, LociLibraryManager.getDefault()); - InfoWriter writer = new InfoWriter<>(parameters.outputFile)) { - SmartProgressReporter.startProgressReport("Exporting alignments", reader); + try (VDJCAlignmentsReader reader = new VDJCAlignmentsReader(parameters.getInputFile(), LociLibraryManager.getDefault()); + InfoWriter writer = new InfoWriter<>(parameters.getOutputFile())) { + if (!parameters.printToStdout()) + SmartProgressReporter.startProgressReport("Exporting alignments", reader); writer.attachInfoProviders((List) parameters.exporters); VDJCAlignments alignments; - while ((alignments = reader.take()) != null) + long count = 0; + while ((alignments = reader.take()) != null && count < parameters.limit) { writer.put(alignments); + ++count; + } } } diff --git a/src/main/java/com/milaboratory/mixcr/cli/ActionExportCloneReads.java b/src/main/java/com/milaboratory/mixcr/cli/ActionExportCloneReads.java new file mode 100644 index 000000000..e5db1e0b2 --- /dev/null +++ b/src/main/java/com/milaboratory/mixcr/cli/ActionExportCloneReads.java @@ -0,0 +1,209 @@ +package com.milaboratory.mixcr.cli; + +import cc.redberry.pipe.CUtils; +import com.beust.jcommander.Parameter; +import com.beust.jcommander.ParameterException; +import com.milaboratory.core.io.sequence.PairedRead; +import com.milaboratory.core.io.sequence.SequenceRead; +import com.milaboratory.core.io.sequence.SequenceWriter; +import com.milaboratory.core.io.sequence.SingleReadImpl; +import com.milaboratory.core.io.sequence.fasta.FastaSequenceWriterWrapper; +import com.milaboratory.core.io.sequence.fastq.PairedFastqWriter; +import com.milaboratory.core.io.sequence.fastq.SingleFastqWriter; +import com.milaboratory.core.sequence.NSequenceWithQuality; +import com.milaboratory.mitools.cli.Action; +import com.milaboratory.mitools.cli.ActionHelper; +import com.milaboratory.mitools.cli.ActionParameters; +import com.milaboratory.mixcr.assembler.ReadToCloneMapping; +import com.milaboratory.mixcr.basictypes.VDJCAlignments; +import com.milaboratory.mixcr.basictypes.VDJCAlignmentsReader; +import com.milaboratory.mixcr.reference.LociLibraryManager; +import gnu.trove.map.hash.TIntObjectHashMap; +import org.mapdb.DB; +import org.mapdb.DBMaker; + +import java.io.File; +import java.util.Iterator; +import java.util.List; +import java.util.NavigableSet; + +/** + * @author Dmitry Bolotin + * @author Stanislav Poslavsky + */ +public final class ActionExportCloneReads implements Action { + private final ExtractCloneParameters parameters = new ExtractCloneParameters(); + + @Override + public String command() { + return "exportReads"; + } + + @Override + public ActionParameters params() { + return parameters; + } + + @Override + public void go(ActionHelper helper) throws Exception { + DB db = DBMaker.newFileDB(new File(parameters.getMapDBFile())) + .transactionDisable() + .make(); + + int[] cloneIds = parameters.getCloneIds(); + if (cloneIds.length == 1) {//byClones + NavigableSet byClones = db.getTreeSet(ActionAssemble.MAPDB_SORTED_BY_CLONE); + writeSingle(byClones, cloneIds[0]); + } else { + NavigableSet byAls = db.getTreeSet(ActionAssemble.MAPDB_SORTED_BY_ALIGNMENT); + writeMany(byAls, cloneIds); + } + + db.close(); + } + + public void writeMany(NavigableSet byAlignments, int[] clonIds) + throws Exception { + TIntObjectHashMap writers = new TIntObjectHashMap<>(clonIds.length); + for (int cloneId : clonIds) + writers.put(cloneId, null); + + try (VDJCAlignmentsReader reader = new VDJCAlignmentsReader(parameters.getVDJCAFile(), + LociLibraryManager.getDefault())) { + + Iterator mappingIterator = byAlignments.iterator(); + Iterator vdjcaIterator = new CUtils.OPIterator<>(reader); + + for (; mappingIterator.hasNext() && vdjcaIterator.hasNext(); ) { + //mapping = mappingIterator.next(); + ReadToCloneMapping mapping = mappingIterator.next(); + if (!writers.containsKey(mapping.getCloneIndex())) + continue; + VDJCAlignments vdjca = vdjcaIterator.next(); + while (vdjca.getAlignmentsIndex() < mapping.getAlignmentsId() + && vdjcaIterator.hasNext()) + vdjca = vdjcaIterator.next(); + + assert vdjca.getAlignmentsIndex() == mapping.getAlignmentsId(); + + SequenceWriter writer = writers.get(mapping.getCloneIndex()); + if (writer == null) + writers.put(mapping.getCloneIndex(), writer = createWriter(vdjca.getOriginalSequences().length == 2, + createFileName(parameters.getOutputFileName(), mapping.getCloneIndex()))); + writer.write(createRead(vdjca.getOriginalSequences(), vdjca.getDescriptions())); + } + + //todo create empty file!!!!!!!!!!!!!!!!!!!! + for (SequenceWriter writer : writers.valueCollection()) + if (writer != null) + writer.close(); + } + } + + + public void writeSingle(NavigableSet byClones, int cloneId) + throws Exception { + NavigableSet selected = byClones.subSet( + new ReadToCloneMapping(0, 0, cloneId, false, false), true, + new ReadToCloneMapping(Long.MAX_VALUE, 0, cloneId, false, false), true); + + if (selected.isEmpty()) + return;//todo create empty file!!!!!!!!!!!!!!!!!!!! + try (VDJCAlignmentsReader reader = new VDJCAlignmentsReader(parameters.getVDJCAFile(), + LociLibraryManager.getDefault())) { + + Iterator mappingIterator = selected.iterator(); + Iterator vdjcaIterator = new CUtils.OPIterator<>(reader); + + SequenceWriter writer = null; + for (; mappingIterator.hasNext() && vdjcaIterator.hasNext(); ) { + //mapping = mappingIterator.next(); + VDJCAlignments vdjca = vdjcaIterator.next(); + ReadToCloneMapping mapping = mappingIterator.next(); + while (vdjca.getAlignmentsIndex() < mapping.getAlignmentsId() + && vdjcaIterator.hasNext()) + vdjca = vdjcaIterator.next(); + + if (vdjca.getAlignmentsIndex() != mapping.getAlignmentsId()) + continue; + + if (writer == null) + writer = createWriter(vdjca.getOriginalSequences().length == 2, + createFileName(parameters.getOutputFileName(), cloneId)); + writer.write(createRead(vdjca.getOriginalSequences(), vdjca.getDescriptions())); + } + if (writer != null) + writer.close(); + } + } + + private static String createFileName(String fileName, int id) { + if (fileName.contains(".fast")) + fileName = fileName.replace(".fast", "_cln" + id + ".fast"); + else fileName += id; + return fileName; + } + + private static SequenceRead createRead(NSequenceWithQuality[] nseqs, String[] descr) { + if (nseqs.length == 1) + return new SingleReadImpl(-1, nseqs[0], descr[0]); + else return new PairedRead( + new SingleReadImpl(-1, nseqs[0], descr[0]), + new SingleReadImpl(-1, nseqs[1], descr[1])); + } + + private static SequenceWriter createWriter(boolean paired, String fileName) + throws Exception { + String[] split = fileName.split("\\."); + String ext = split[split.length - 1]; + boolean gz = ext.equals("gz"); + if (gz) + ext = split[split.length - 2]; + if (ext.equals("fasta")) { + if (paired) + throw new IllegalArgumentException("Fasta does not support paired reads."); + return new FastaSequenceWriterWrapper(fileName); + } else if (ext.equals("fastq")) { + if (paired) { + String fileName1 = fileName.replace(".fastq", "_R1.fastq"); + String fileName2 = fileName.replace(".fastq", "_R2.fastq"); + return new PairedFastqWriter(fileName1, fileName2); + } else return new SingleFastqWriter(fileName); + } + + if (paired) + return new PairedFastqWriter(fileName + "_R1.fastq.gz", fileName + "_R2.fastq.gz"); + else return new SingleFastqWriter(fileName + ".fastq.gz"); + } + + public static final class ExtractCloneParameters extends ActionParameters { + @Parameter(description = "mappingFile vdjcaFile clone1 [clone2] [clone3] ... output") + public List parameters; + + public String getMapDBFile() { + return parameters.get(0); + } + + public String getVDJCAFile() { + return parameters.get(1); + } + + public int[] getCloneIds() { + int[] cloneIds = new int[parameters.size() - 3]; + for (int i = 2; i < parameters.size() - 1; ++i) + cloneIds[i - 2] = Integer.valueOf(parameters.get(i)); + return cloneIds; + } + + public String getOutputFileName() { + return parameters.get(parameters.size() - 1); + } + + @Override + public void validate() { + if (parameters.size() < 4) + throw new ParameterException("Required parameters missed."); + super.validate(); + } + } +} diff --git a/src/main/java/com/milaboratory/mixcr/cli/ActionExportClones.java b/src/main/java/com/milaboratory/mixcr/cli/ActionExportClones.java index 2b78c9b93..90df6cfb8 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/ActionExportClones.java +++ b/src/main/java/com/milaboratory/mixcr/cli/ActionExportClones.java @@ -29,6 +29,8 @@ package com.milaboratory.mixcr.cli; import cc.redberry.primitives.Filter; +import com.beust.jcommander.Parameter; +import com.beust.jcommander.Parameters; import com.milaboratory.core.sequence.AminoAcidSequence; import com.milaboratory.core.sequence.NSequenceWithQuality; import com.milaboratory.mixcr.basictypes.Clone; @@ -46,21 +48,22 @@ public class ActionExportClones extends ActionExport { public ActionExportClones() { - super(new ActionExportParameters(Clone.class)); + super(new CloneExportParameters(), Clone.class); } @Override public void go0() throws Exception { - try (InputStream inputStream = IOUtil.createIS(parameters.inputFile); - InfoWriter writer = new InfoWriter<>(parameters.outputFile)) { + CloneExportParameters parameters = (CloneExportParameters) this.parameters; + try (InputStream inputStream = IOUtil.createIS(parameters.getInputFile()); + InfoWriter writer = new InfoWriter<>(parameters.getOutputFile())) { CloneSet set = CloneSetIO.read(inputStream, LociLibraryManager.getDefault()); - if (parameters.filterOutOfFrames || parameters.filterStopCodons) - set = CloneSet.transform(set, new CFilter(parameters.filterOutOfFrames, parameters.filterStopCodons)); + if (parameters.filterOutOfFrames || parameters.filterStops) + set = CloneSet.transform(set, new CFilter(parameters.filterOutOfFrames, parameters.filterStops)); writer.attachInfoProviders((List) parameters.exporters); - ExportClones exportClones = new ExportClones(set, writer); - SmartProgressReporter.startProgressReport(exportClones); + ExportClones exportClones = new ExportClones(set, writer, parameters.limit); + if (!parameters.printToStdout()) + SmartProgressReporter.startProgressReport(exportClones); exportClones.run(); - writer.close(); } } @@ -92,17 +95,20 @@ public boolean accept(Clone clone) { } } - private static final class ExportClones implements CanReportProgressAndStage { + @Parameters(commandDescription = "Export clones to tab-delimited text file", optionPrefixes = "-") + public static final class ExportClones implements CanReportProgressAndStage { final CloneSet clones; final InfoWriter writer; - final int size; - volatile int current = 0; + final long size; + volatile long current = 0; final static String stage = "Exporting clones"; + final long limit; - private ExportClones(CloneSet clones, InfoWriter writer) { + private ExportClones(CloneSet clones, InfoWriter writer, long limit) { this.clones = clones; this.writer = writer; this.size = clones.size(); + this.limit = limit; } @Override @@ -122,9 +128,21 @@ public boolean isFinished() { void run() { for (Clone clone : clones.getClones()) { + if (current == limit) + break; writer.put(clone); ++current; } } } + + public static class CloneExportParameters extends ActionExportParameters { + @Parameter(description = "Exclude out of frames (fractions will be recalculated)", + names = {"-o", "--filter-out-of-frames"}) + public Boolean filterOutOfFrames = false; + + @Parameter(description = "Exclude sequences containing stop codons (fractions will be recalculated)", + names = {"-t", "--filter-stops"}) + public Boolean filterStops = false; + } } diff --git a/src/main/java/com/milaboratory/mixcr/cli/ActionExportParameters.java b/src/main/java/com/milaboratory/mixcr/cli/ActionExportParameters.java index 12765fdd8..5e3a5fdc7 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/ActionExportParameters.java +++ b/src/main/java/com/milaboratory/mixcr/cli/ActionExportParameters.java @@ -1,246 +1,171 @@ -/* - * Copyright (c) 2014-2015, 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 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.beust.jcommander.JCommander; +import com.beust.jcommander.Parameter; import com.beust.jcommander.ParameterException; import com.beust.jcommander.Parameters; -import com.milaboratory.mitools.cli.ActionParameters; +import com.beust.jcommander.validators.PositiveInteger; import com.milaboratory.mixcr.basictypes.Clone; import com.milaboratory.mixcr.basictypes.VDJCAlignments; import com.milaboratory.mixcr.export.FieldExtractor; import com.milaboratory.mixcr.export.FieldExtractors; import com.milaboratory.mixcr.export.OutputMode; -import java.io.*; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - - -@Parameters(commandDescription = "Export binary data", - optionPrefixes = "^") -public class ActionExportParameters extends ActionParameters { - final Class clazz; - final String helpString; - final String fieldsHelpString; - final String defaultPreset; +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.util.*; - public ActionExportParameters(Class clazz) { - this(clazz, "full"); - } +/** + * @author Dmitry Bolotin + * @author Stanislav Poslavsky + */ +@Parameters(commandDescription = "Export alignments/clones to tab-delimited text file", optionPrefixes = "-") +public class ActionExportParameters extends ActionParametersWithOutput { + public static final String DEFAULT_PRESET = "full"; - public ActionExportParameters(Class clazz, String defaultPreset) { - this.defaultPreset = defaultPreset; - this.clazz = clazz; - ArrayList[] description = new ArrayList[]{new ArrayList(), new ArrayList()}; + @Parameter(description = "input_file output_file") + public List files = new ArrayList<>(); - description[0].add("-h, --help"); - description[1].add("print this help message"); + @Parameter(description = "Specify preset of export fields (full, min)", + names = {"-p", "--preset"}) + public String preset = "full"; - description[0].add(LIST_FIELDS_SHORT + ", " + LIST_FIELDS_LONG); - description[1].add("print available fields to export"); + @Parameter(description = "Specify preset file of export fields", + names = {"-pf", "--preset-file"}) + public String presetFile; - description[0].add(PRESET_SHORT + ", " + PRESET_LONG); - description[1].add("preset parameters (full, min)"); + @Parameter(description = "List available export fields", + names = {"-l", "--list-fields"}) + public Boolean listFields = false; - description[0].add(PRESET_FILE_SHORT + ", " + PRESET_FILE_LONG); - description[1].add("file with preset parameters"); + @Parameter(description = "Output short versions of column headers which facilitates analysis with Pandas, R/DataFrames or other data tables processing library.", + names = {"-s", "--no-spaces"}) + public Boolean noSpaces = false; - description[0].add(PARSING_SHORT + ", " + PARSING_LONG); - description[1].add("output short versions of column headers which facilitates analysis with Pandas, " + - "R/DataFrames or other data tables processing library."); + @Parameter(description = "Output only first N records", + names = {"-n", "--limit"}, validateWith = PositiveInteger.class) + public long limit = Long.MAX_VALUE; - if (clazz.equals(Clone.class)) { - description[0].add(FILTER_OUT_OF_FRAMES); - description[1].add("exclude out of frames (fractions will be recalculated)"); + public ArrayList exporters; - description[0].add(FILTER_STOP_CODONS); - description[1].add("exclude sequences containing stop codons (fractions will be recalculated)"); - } + @Override + protected List getOutputFiles() { + return files.subList(1, 2); + } - this.helpString = - "Usage: export(Type) [options] input_file output_file\n" + - "Options:\n" + - Util.printTwoColumns(4, description[0], description[1], 23, 50, 5, "\n") + "\n" + - "Examples:\n" + - " exportClones -p all -nFeature CDR1 input.clns output.txt\n" + - " exportAlignments -pf params.txt -nFeature CDR1 -dAlignments input.clns output.txt\n"; - description = FieldExtractors.getDescription(clazz); - this.fieldsHelpString = "Available export fields:\n" + Util.printTwoColumns( - description[0], description[1], 23, 50, 5, "\n"); + public String getOutputFile() { + return files.get(1); } - public Boolean listFields = false; - public boolean filterOutOfFrames = false, filterStopCodons = false; - public String inputFile; - public String outputFile; - public ArrayList exporters; + public boolean printToStdout() { + return getOutputFile().equals("."); + } - public String printFieldsHelp() { - return fieldsHelpString; + public String getInputFile() { + return files.get(0); } - public String printHelp() { - return helpString; + @Override + public void validate() { + if (help || listFields) + return; + if (files.size() != 2) + throw new ParameterException("Input/output file is not specified."); + super.validate(); } - public final void parseParameters(String[] args) throws ParameterException { - trim(args); - for (String arg : args) - switch (arg) { - case LIST_FIELDS_SHORT: - case LIST_FIELDS_LONG: - listFields = true; - return; - case "-h": - case "--help": - help = true; - return; - case FILTER_OUT_OF_FRAMES: - filterOutOfFrames = true; - break; - case FILTER_STOP_CODONS: - filterStopCodons = true; - break; - } + public static void parse(Class clazz, final String[] args, ActionExportParameters parameters) { + JCommander jc = new JCommander(parameters); + jc.setAcceptUnknownOptions(true); + jc.parse(cutArgs(args)); - if (args.length < 2) - throw new ParameterException("No output file specified."); + if (!parameters.help && !parameters.listFields) { + parameters.files = new ArrayList() {{ + add(args[args.length - 2]); + add(args[args.length - 1]); + }}; + OutputMode outputMode = parameters.noSpaces ? OutputMode.ScriptingFriendly : OutputMode.HumanFriendly; + parameters.exporters = new ArrayList<>(); + //if preset was explicitly specified + if (parameters.preset != DEFAULT_PRESET) + parameters.exporters.addAll(getPresetParameters(outputMode, clazz, parameters.preset)); - OutputMode outputMode = OutputMode.HumanFriendly; + if (parameters.presetFile != null) + parameters.exporters.addAll(parseFile(outputMode, clazz, parameters.presetFile)); - for (String arg : args) - if (isParsingFriendlyFlag(arg)) { - outputMode = OutputMode.ScriptingFriendly; - break; - } + parameters.exporters.addAll(parseFields(outputMode, clazz, jc.getUnknownOptions())); - int i = ((outputMode == OutputMode.ScriptingFriendly) ? 1 : 0) - + (filterOutOfFrames ? 1 : 0) - + (filterStopCodons ? 1 : 0); - if (args.length - i == 2) - exporters = getPresetParameters(outputMode, clazz, defaultPreset); - else - exporters = parseParametersString(outputMode, clazz, args, 0, args.length - 2); + if (parameters.exporters.isEmpty()) + parameters.exporters.addAll(getPresetParameters(outputMode, clazz, parameters.preset)); - inputFile = args[args.length - 2]; - outputFile = args[args.length - 1]; + parameters.validate(); + } } - public static ArrayList parseParametersString(OutputMode outputMode, Class clazz, String[] args, int from, int to) { - ArrayList exporters = new ArrayList<>(); - ArrayList exporter = new ArrayList<>(); - for (int i = from; i < to; ++i) { - String arg = args[i]; - if (isParsingFriendlyFlag(arg)) - continue; - //skip options - if (arg.equals(FILTER_OUT_OF_FRAMES) || arg.equals(FILTER_STOP_CODONS)) - continue; - if (arg.charAt(0) == '-') { - if (!exporter.isEmpty()) { - FieldExtractor exp = FieldExtractors.parse(outputMode, - clazz, exporter.toArray(new String[exporter.size()])); - if (exp == null) - throw new ParameterException("Unknown export field: " + exporter); - exporters.add(exp); - exporter.clear(); + private static String[] cutArgs(String[] args) { + int i = 0; + if (args.length > 0 && !args[args.length - 1].startsWith("-")) + ++i; + if (args.length > 1 && !args[args.length - 2].startsWith("-")) + ++i; + return Arrays.copyOf(args, args.length - i); + } + + public static ArrayList parseFields(OutputMode outputMode, Class clazz, List options) { + ArrayList extractors = new ArrayList<>(); + ArrayList args = new ArrayList<>(); + for (String option : options) { + if (option.startsWith("-")) { + if (!args.isEmpty()) { + extractors.add(FieldExtractors.parse(outputMode, clazz, args.toArray(new String[args.size()]))); + args.clear(); } - if (isPresetParameter(arg)) { - if (i == to - 1 || args[i + 1].charAt(0) == '-') - throw new ParameterException("Preset value not specified."); - exporters.addAll(getPresetParameters(outputMode, clazz, args[++i])); - } else if (isPresetFileParameter(arg)) { - if (i == to - 1 || args[i + 1].charAt(0) == '-') - throw new ParameterException("Preset file name not specified."); - try { - exporters.addAll(readFromFile(outputMode, clazz, args[++i])); - } catch (IOException e) { - throw new ParameterException(e.getMessage()); - } - } else - exporter.add(arg); - } else - exporter.add(arg); - } - if (!exporter.isEmpty()) { - FieldExtractor exp = FieldExtractors.parse(outputMode, - clazz, exporter.toArray(new String[exporter.size()])); - if (exp == null) - throw new ParameterException("Unknown export field: " + exporter); - exporters.add(exp); + } + args.add(option.trim()); } - return exporters; + if (!args.isEmpty()) + extractors.add(FieldExtractors.parse(outputMode, clazz, args.toArray(new String[args.size()]))); + return extractors; } - static List readFromFile(OutputMode outputMode, Class clazz, String fileName) throws IOException { - File file = new File(fileName); - BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file))); - List exporters = new ArrayList<>(); - String line; - while ((line = reader.readLine()) != null) { - if (line.isEmpty()) - continue; - line = line.trim(); - if (line.startsWith("#")) - continue; - String s = line; - do { - line = s; - s = line.replace(" ", " "); - } while (s.length() != line.length()); - String[] exporter = line.split(" "); - exporters.add(FieldExtractors.parse(outputMode, clazz, exporter)); + public static ArrayList parseFile(OutputMode outputMode, Class clazz, String file) { + try (BufferedReader reader = new BufferedReader(new FileReader(file))) { + List options = new ArrayList<>(); + String line; + while ((line = reader.readLine()) != null) { + line = line.trim(); + if (!line.isEmpty()) + options.addAll(Arrays.asList(line.split(" "))); + } + return parseFields(outputMode, clazz, options); + } catch (IOException e) { + throw new RuntimeException(e); } - return exporters; } - static ArrayList parsePresetString(OutputMode outputMode, Class clazz, String string) { - string = string.replace("\n", " ").trim(); - String s = string; - do { - string = s; - s = string.replace(" ", " "); - } while (s.length() != string.length()); - String[] args = string.split(" "); - return parseParametersString(outputMode, clazz, args, 0, args.length); + public static String listOfFields(Class clazz) { + ArrayList[] description = FieldExtractors.getDescription(clazz); + return "Available export fields:\n" + Util.printTwoColumns(description[0], description[1], 23, 50, 5, "\n"); } - private static final Map> preset; + private static final Map> presets; static { - preset = new HashMap<>(); + presets = new HashMap<>(); Map clones = new HashMap<>(); clones.put("min", "-count -vHit -dHit -jHit -cHit -nFeature CDR3"); - clones.put("full", "-count -fraction -sequence -quality " + + clones.put("fullNoId", "-count -fraction -sequence -quality " + + "-vHitsWithScore -dHitsWithScore -jHitsWithScore -cHitsWithScore " + + "-vAlignments -dAlignments -jAlignments -cAlignments " + + "-nFeature FR1 -minFeatureQuality FR1 -nFeature CDR1 -minFeatureQuality CDR1 " + + "-nFeature FR2 -minFeatureQuality FR2 -nFeature CDR2 -minFeatureQuality CDR2 " + + "-nFeature FR3 -minFeatureQuality FR3 -nFeature CDR3 -minFeatureQuality CDR3 " + + "-nFeature FR4 -minFeatureQuality FR4 " + + "-aaFeature FR1 -aaFeature CDR1 -aaFeature FR2 -aaFeature CDR2 " + + "-aaFeature FR3 -aaFeature CDR3 -aaFeature FR4 -defaultAnchorPoints"); + clones.put("full", "-cloneId -count -fraction -sequence -quality " + "-vHitsWithScore -dHitsWithScore -jHitsWithScore -cHitsWithScore " + "-vAlignments -dAlignments -jAlignments -cAlignments " + "-nFeature FR1 -minFeatureQuality FR1 -nFeature CDR1 -minFeatureQuality CDR1 " + @@ -249,7 +174,7 @@ static ArrayList parsePresetString(OutputMode outputMode, Class "-nFeature FR4 -minFeatureQuality FR4 " + "-aaFeature FR1 -aaFeature CDR1 -aaFeature FR2 -aaFeature CDR2 " + "-aaFeature FR3 -aaFeature CDR3 -aaFeature FR4 -defaultAnchorPoints"); - preset.put(Clone.class, clones); + presets.put(Clone.class, clones); Map alignments = new HashMap<>(); alignments.put("min", "-vHit -dHit -jHit -cHit -nFeature CDR3"); @@ -263,38 +188,10 @@ static ArrayList parsePresetString(OutputMode outputMode, Class "-aaFeature FR1 -aaFeature CDR1 -aaFeature FR2 -aaFeature CDR2 " + "-aaFeature FR3 -aaFeature CDR3 -aaFeature FR4 -defaultAnchorPoints") ; - preset.put(VDJCAlignments.class, alignments); - } - - public static ArrayList getPresetParameters(OutputMode mode, Class clazz, String string) { - return parsePresetString(mode, clazz, preset.get(clazz).get(string)); - } - - private static void trim(String[] args) { - for (int i = 0; i < args.length; i++) - args[i] = args[i].trim(); - } - - public static final String PRESET_SHORT = "-p", - PRESET_LONG = "--preset", - PRESET_FILE_SHORT = "-pf", - PRESET_FILE_LONG = "--presetFile", - LIST_FIELDS_SHORT = "-l", - LIST_FIELDS_LONG = "--listFields", - PARSING_LONG = "--no-spaces", - PARSING_SHORT = "-s", - FILTER_OUT_OF_FRAMES = "--filter-out-of-frames", - FILTER_STOP_CODONS = "--filter-stops"; - - public static boolean isPresetParameter(String string) { - return string.equals(PRESET_SHORT) || string.equals(PRESET_LONG); - } - - public static boolean isParsingFriendlyFlag(String string) { - return string.equals(PARSING_SHORT) || string.equals(PARSING_LONG); + presets.put(VDJCAlignments.class, alignments); } - public static boolean isPresetFileParameter(String string) { - return string.equals(PRESET_FILE_SHORT) || string.equals(PRESET_FILE_LONG); + public static ArrayList getPresetParameters(OutputMode mode, Class clazz, String preset) { + return parseFields(mode, clazz, Arrays.asList(ActionExportParameters.presets.get(clazz).get(preset).split(" "))); } } diff --git a/src/main/java/com/milaboratory/mixcr/cli/ActionImportSegments.java b/src/main/java/com/milaboratory/mixcr/cli/ActionImportSegments.java new file mode 100644 index 000000000..edbba752e --- /dev/null +++ b/src/main/java/com/milaboratory/mixcr/cli/ActionImportSegments.java @@ -0,0 +1,322 @@ +/* + * Copyright (c) 2014-2015, 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 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.beust.jcommander.Parameter; +import com.beust.jcommander.ParameterException; +import com.beust.jcommander.Parameters; +import com.milaboratory.mitools.cli.Action; +import com.milaboratory.mitools.cli.ActionHelper; +import com.milaboratory.mitools.cli.ActionParameters; +import com.milaboratory.mixcr.reference.*; +import com.milaboratory.mixcr.reference.builder.FastaLocusBuilder; +import com.milaboratory.mixcr.reference.builder.FastaLocusBuilderParametersBundle; + +import java.io.BufferedOutputStream; +import java.io.FileOutputStream; +import java.io.PrintStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +public class ActionImportSegments implements Action { + private final AParameters params = new AParameters(); + + @Override + public void go(ActionHelper helper) throws Exception { + Path outputFile = params.getOutputFile(); + Path parent = outputFile.getParent(); + if (parent != null) + Files.createDirectories(parent); + boolean outputExists = Files.exists(outputFile); + final int taxonID = params.getTaxonID(); + Locus locus = params.getLocus(); + final String[] commonNames = params.getCommonNames(); + final Set commonNamesSet = new HashSet<>(); + for (String cn : commonNames) + commonNamesSet.add(cn); + if (outputExists) { + LociLibrary ll = LociLibraryReader.read(outputFile.toFile(), false); + final SpeciesAndLocus sl = new SpeciesAndLocus(taxonID, locus); + if (params.getForce()) { + LociLibraryIOUtils.LociLibraryFilter filter = new LociLibraryIOUtils.LociLibraryFilter() { + boolean remove = false; + + @Override + public boolean speciesName(int taxonId1, String name1) { + //if (taxonID == taxonId1) + // for (String cn : commonNames) + // if (name1.equals(cn)) + // return false; + if (commonNamesSet.contains(name1)) { + if (taxonId1 != taxonID) + return false; + else + commonNamesSet.remove(name1); + } + return true; + } + + @Override + public boolean beginLocus(LocusContainer container) { + return !(remove = container.getSpeciesAndLocus().equals(sl)); + } + + @Override + public boolean endLocus(LocusContainer container) { + if (remove) { + remove = false; + return false; + } + return true; + } + + @Override + public boolean allele(Allele allele) { + return !remove; + } + }; + LociLibraryIOUtils.filterLociLibrary(outputFile.toFile(), filter); + } else { + if (ll.getLocus(sl) != null) { + System.err.println("Specified file (" + outputFile + ") already contain record for: " + sl + "; use -f to overwrite."); + return; + } + for (String commonName : commonNames) { + int id = ll.getSpeciesTaxonId(commonName); + if (id != -1) + if (id != taxonID) { + System.err.println("Specified file (" + outputFile + ") contains other mapping for common species name: " + commonName + " -> " + id + "; use -f to overwrite."); + return; + } else + commonNamesSet.remove(commonName); + } + } + } + + FastaLocusBuilderParametersBundle bundle = getBuilderParameters(); + + try (PrintStream ps = (params.report == null ? System.out : new PrintStream(new FileOutputStream(params.report, + true)))) { + FastaLocusBuilder vBuilder, dBuilder = null, jBuilder; + + vBuilder = new FastaLocusBuilder(locus, bundle.getV()) + .setLoggingStream(ps).setFinalReportStream(ps); + vBuilder.importAllelesFromFile(params.getV()); + + jBuilder = new FastaLocusBuilder(locus, bundle.getJ()) + .setLoggingStream(ps).setFinalReportStream(ps); + jBuilder.importAllelesFromFile(params.getJ()); + + if (params.getD() != null) { + dBuilder = new FastaLocusBuilder(locus, bundle.getD()) + .setLoggingStream(ps).setFinalReportStream(ps); + dBuilder.importAllelesFromFile(params.getD()); + } + + System.out.println("Processing..."); + + vBuilder.compile(); + jBuilder.compile(); + if (dBuilder != null) + dBuilder.compile(); + + System.out.println("Writing report."); + + vBuilder.printReport(); + jBuilder.printReport(); + if (dBuilder != null) + dBuilder.printReport(); + + System.out.println("Writing library file."); + + try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(outputFile.toFile(), true))) { + LociLibraryWriter writer = new LociLibraryWriter(bos); + + // Write magic bytes if we create file from scratch + if (!outputExists) + writer.writeMagic(); + + writer.writeBeginOfLocus(taxonID, locus); + vBuilder.writeAlleles(writer); + jBuilder.writeAlleles(writer); + if (dBuilder != null) + dBuilder.writeAlleles(writer); + writer.writeEndOfLocus(); + for (String cn : commonNamesSet) + writer.writeCommonSpeciesName(taxonID, cn); + } + + System.out.println("Checking."); + + LociLibrary ll = LociLibraryReader.read(outputFile.toFile(), false); + + System.out.println("Segments successfully imported."); + + System.out.println("Resulting file contains following records:"); + for (LocusContainer locusContainer : ll.getLoci()) { + System.out.println(locusContainer.getSpeciesAndLocus() + ": " + locusContainer.getAllAlleles().size() + " records"); + } + } + } + + public FastaLocusBuilderParametersBundle getBuilderParameters() { + FastaLocusBuilderParametersBundle bundle = + FastaLocusBuilderParametersBundle.getBuiltInBundleByName(params.getBuilderParametersName()); + if (bundle == null) + throw new ParameterException("Can't find parameters with name: " + params.getBuilderParametersName()); + return bundle; + } + + @Override + public String command() { + return "importSegments"; + } + + @Override + public ActionParameters params() { + return params; + } + + @Parameters(commandDescription = "Imports segment sequences from fasta file (e.g. formatted as IMGT reference " + + "sequences with IMGT gaps).", + optionPrefixes = "-") + public static final class AParameters extends ActionParameters { + //@Parameter(description = "input_file_V.fasta input_file_J.fasta [input_file_D.fasta]") + //public List parameters; + + @Parameter(description = "Import parameters (name of built-in parameter set of a name of JSON file with " + + "custom import parameters).", names = {"-p", "--parameters"}) + public String builderParametersName = "imgt"; + + @Parameter(description = "Force overwrite data.", + names = {"-f"}) + public Boolean force; + + @Parameter(description = "Input *.fasta file with V genes.", + names = {"-v"}) + public String v; + + @Parameter(description = "Input *.fasta file with J genes.", + names = {"-j"}) + public String j; + + @Parameter(description = "Input *.fasta file with D genes.", + names = {"-d"}) + public String d; + + @Parameter(description = "Locus (e.g. IGH, TRB etc...)", + names = {"-l", "--locus"}) + public String locus; + + @Parameter(description = "Species taxonID and it's common names (e.g. 9606:human:HomoSapiens:hsa)", + names = {"-s", "--species"}) + public String species; + + @Parameter(description = "Report file.", + names = {"-r", "--report"}) + public String report; + + @Parameter(description = "Output file (optional, default path is ~/.mixcr/local.ll", //, or $MIXCR_PATH/system.ll if -g option specified)", + names = {"-o", "--output"}) + public String output = null; + + //@Parameter(description = "Add to system-wide loci library ($MIXCR_PATH/system.ll).", + // names = {"-s", "--system"}, hidden = true) + //public Boolean global; + + public String getBuilderParametersName() { + return builderParametersName; + } + + public Locus getLocus() { + return Locus.fromId(locus); + } + + public int getTaxonID() { + String[] split = species.split("\\:"); + return Integer.parseInt(split[0]); + } + + public String[] getCommonNames() { + String[] split = species.split("\\:"); + return Arrays.copyOfRange(split, 1, split.length); + } + + public Path getOutputFile() { + if (output != null) + return Paths.get(output); + return Util.getLocalSettingsDir().resolve("local.ll"); + } + + public String getV() { + return v; + } + + public String getJ() { + return j; + } + + public String getD() { + return d; + } + + public boolean getForce() { + return force != null && force; + } + + @Override + public void validate() { + if (v == null) + throw new ParameterException("Please specify file for V gene."); + + if (j == null) + throw new ParameterException("Please specify file for J gene."); + + if (locus == null) + throw new ParameterException("Please specify locus (e.g. \"-l TRB\")."); + if (Locus.fromId(locus) == null) + throw new ParameterException("Unrecognized locus: " + locus); + + if (species == null) + throw new ParameterException("Please specify species."); + + try { + Integer.parseInt(species.split(":")[0]); + } catch (NumberFormatException e) { + throw new ParameterException("Malformed species name."); + } + + super.validate(); + } + } +} diff --git a/src/main/java/com/milaboratory/mixcr/cli/ActionInfo.java b/src/main/java/com/milaboratory/mixcr/cli/ActionInfo.java index f42e0a446..b96b5b4f7 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/ActionInfo.java +++ b/src/main/java/com/milaboratory/mixcr/cli/ActionInfo.java @@ -165,4 +165,14 @@ public static FilesType getType(String fileName) { throw new ParameterException("Unknown file type: " + fileName); } } + + public interface AlignmentInfoProvider { + String header(); + + String result(); + + void onInit(VDJCAlignmentsReader reader); + + void onScan(VDJCAlignments alignment); + } } diff --git a/src/main/java/com/milaboratory/mixcr/cli/ActionParametersWithOutput.java b/src/main/java/com/milaboratory/mixcr/cli/ActionParametersWithOutput.java index 2c44f93fb..c4c6eba2a 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/ActionParametersWithOutput.java +++ b/src/main/java/com/milaboratory/mixcr/cli/ActionParametersWithOutput.java @@ -47,6 +47,8 @@ public boolean isForceOverwrite() { @Override public void validate() { + if (help) + return; if (!isForceOverwrite()) for (String fileName : getOutputFiles()) { if (fileName.equals(".")) diff --git a/src/main/java/com/milaboratory/mixcr/cli/Main.java b/src/main/java/com/milaboratory/mixcr/cli/Main.java index 857c83f9a..d53e1cfbd 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/Main.java +++ b/src/main/java/com/milaboratory/mixcr/cli/Main.java @@ -29,6 +29,7 @@ package com.milaboratory.mixcr.cli; import com.milaboratory.mitools.cli.JCommanderBasedMain; +import com.milaboratory.mixcr.util.VersionInfoProvider; public class Main { public static void main(String... args) throws Exception { @@ -44,7 +45,20 @@ public static void main(String... args) throws Exception { new ActionPrettyAlignments(), new ActionAlignmentsStat(), new ActionMergeAlignments(), - new ActionInfo()); + new ActionInfo(), + new ActionExportCloneReads(), + new VersionInfoAction(), + new ActionImportSegments()); + + // Adding version info callback + main.setVersionInfoCallback(new Runnable() { + @Override + public void run() { + System.err.println( + VersionInfoProvider.getVersionString( + VersionInfoProvider.OutputType.ToConsole)); + } + }); // Executing main method main.main(args); diff --git a/src/main/java/com/milaboratory/mixcr/cli/Util.java b/src/main/java/com/milaboratory/mixcr/cli/Util.java index b926693e7..431061c62 100644 --- a/src/main/java/com/milaboratory/mixcr/cli/Util.java +++ b/src/main/java/com/milaboratory/mixcr/cli/Util.java @@ -34,6 +34,8 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.nio.file.Path; +import java.nio.file.Paths; import java.text.DecimalFormat; import java.util.*; @@ -179,4 +181,12 @@ private static int lineBreakPos(String str, int width) { return width - 1; return i + 1; } + + public static Path getGlobalSettingsDir() { + return null; + } + + public static Path getLocalSettingsDir() { + return Paths.get(System.getProperty("user.home"), ".mixcr"); + } } diff --git a/src/main/java/com/milaboratory/mixcr/cli/VersionInfoAction.java b/src/main/java/com/milaboratory/mixcr/cli/VersionInfoAction.java new file mode 100644 index 000000000..b29186ec0 --- /dev/null +++ b/src/main/java/com/milaboratory/mixcr/cli/VersionInfoAction.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2014-2015, 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 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.beust.jcommander.Parameter; +import com.beust.jcommander.ParameterException; +import com.beust.jcommander.Parameters; +import com.milaboratory.mitools.cli.Action; +import com.milaboratory.mitools.cli.ActionHelper; +import com.milaboratory.mitools.cli.ActionParameters; +import com.milaboratory.mixcr.basictypes.CloneSet; +import com.milaboratory.mixcr.basictypes.CloneSetIO; +import com.milaboratory.mixcr.basictypes.VDJCAlignmentsReader; +import com.milaboratory.mixcr.reference.LociLibraryManager; + +import java.util.List; + +public class VersionInfoAction implements Action { + final AParameters parameters = new AParameters(); + + @Override + public void go(ActionHelper helper) throws Exception { + String inputFile = parameters.getInputFile(); + String i = inputFile.toLowerCase(); + if (i.endsWith(".vdjca.gz") || i.endsWith(".vdjca")) { + try (VDJCAlignmentsReader reader = new VDJCAlignmentsReader(inputFile, LociLibraryManager.getDefault())) { + reader.init(); + System.out.println("MagicBytes = " + reader.getMagic()); + System.out.println(reader.getVersionInfo()); + } + } else if (i.endsWith(".clns.gz") || i.endsWith(".clns")) { + CloneSet cs = CloneSetIO.read(inputFile, LociLibraryManager.getDefault()); + System.out.println(cs.getVersionInfo()); + } else + throw new ParameterException("Wrong file type."); + } + + @Override + public String command() { + return "versionInfo"; + } + + @Override + public ActionParameters params() { + return parameters; + } + + @Parameters(commandDescription = "Outputs information about MiXCR version which generated the file.", + optionPrefixes = "-") + private static class AParameters extends ActionParameters { + @Parameter(description = "binary_file{.vdjca|.clns}[.gz]") + public List input; + + public String getInputFile() { + return input.get(0); + } + + @Override + public void validate() { + if (input.size() != 1) + throw new ParameterException("Wrong number of parameters."); + } + } +} diff --git a/src/main/java/com/milaboratory/mixcr/export/AbstractFieldExtractor.java b/src/main/java/com/milaboratory/mixcr/export/AbstractFieldExtractor.java index b7f7a786d..68cd275cd 100644 --- a/src/main/java/com/milaboratory/mixcr/export/AbstractFieldExtractor.java +++ b/src/main/java/com/milaboratory/mixcr/export/AbstractFieldExtractor.java @@ -41,9 +41,4 @@ protected AbstractFieldExtractor(String header, Field descriptor) { public final String getHeader() { return header; } - - @Override - public final Field getDescriptor() { - return descriptor; - } } \ No newline at end of file diff --git a/src/main/java/com/milaboratory/mixcr/export/FieldExtractor.java b/src/main/java/com/milaboratory/mixcr/export/FieldExtractor.java index 68ca326aa..1e6d4a020 100644 --- a/src/main/java/com/milaboratory/mixcr/export/FieldExtractor.java +++ b/src/main/java/com/milaboratory/mixcr/export/FieldExtractor.java @@ -29,8 +29,6 @@ package com.milaboratory.mixcr.export; public interface FieldExtractor { - Field getDescriptor(); - String getHeader(); String extractValue(T object); diff --git a/src/main/java/com/milaboratory/mixcr/export/FieldExtractors.java b/src/main/java/com/milaboratory/mixcr/export/FieldExtractors.java index 50d8cb517..4fa270f23 100644 --- a/src/main/java/com/milaboratory/mixcr/export/FieldExtractors.java +++ b/src/main/java/com/milaboratory/mixcr/export/FieldExtractors.java @@ -32,15 +32,23 @@ import com.milaboratory.core.sequence.AminoAcidSequence; import com.milaboratory.core.sequence.NSequenceWithQuality; import com.milaboratory.core.sequence.NucleotideSequence; +import com.milaboratory.mixcr.assembler.ReadToCloneMapping; import com.milaboratory.mixcr.basictypes.*; +import com.milaboratory.mixcr.cli.ActionAssemble; import com.milaboratory.mixcr.reference.GeneFeature; import com.milaboratory.mixcr.reference.GeneType; import com.milaboratory.mixcr.reference.ReferencePoint; +import org.mapdb.DB; +import org.mapdb.DBMaker; +import java.io.Closeable; +import java.io.File; +import java.io.IOException; import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; + +import static com.milaboratory.core.sequence.TranslationParameters.FromCenter; +import static com.milaboratory.mixcr.assembler.ReadToCloneMapping.MappingType.Dropped; public final class FieldExtractors { private static final String NULL = ""; @@ -210,7 +218,7 @@ public String convert(NSequenceWithQuality seq) { desctiptorsList.add(new FeatureExtractorDescriptor("-aaFeature", "Export amino acid sequence of specified gene feature", "AA. Seq.", "aaSeq") { @Override public String convert(NSequenceWithQuality seq) { - return AminoAcidSequence.translate(null, true, seq.getSequence()).toString(); + return AminoAcidSequence.translate(seq.getSequence(), FromCenter).toString(); } }); @@ -239,7 +247,7 @@ public String convert(NSequenceWithQuality seq) { desctiptorsList.add(new ExtractDefaultReferencePointsPositions()); - desctiptorsList.add(new PL_A("-readId", "Export number of read corresponding to alignment", "Read id", "readId") { + desctiptorsList.add(new PL_A("-readId", "Export id of read corresponding to alignment", "Read id", "readId") { @Override protected String extract(VDJCAlignments object) { return "" + object.getReadId(); @@ -254,6 +262,13 @@ protected String extract(VDJCAlignments object) { "Export initial read quality, or 2 qualities in case of paired-end reads", "Read(s) sequence qualities", "readQuality")); + desctiptorsList.add(new PL_C("-cloneId", "Unique clone identifier", "Clone ID", "cloneId") { + @Override + protected String extract(Clone object) { + return "" + object.getId(); + } + }); + desctiptorsList.add(new PL_C("-count", "Export clone count", "Clone count", "cloneCount") { @Override protected String extract(Clone object) { @@ -302,7 +317,14 @@ protected String extract(VDJCAlignments object) { } }); - + desctiptorsList.add(alignmentsToClone("-cloneId", "To which clone alignment was attached.", false)); + desctiptorsList.add(alignmentsToClone("-cloneIdWithMappingType", "To which clone alignment was attached with additional info on mapping type.", true)); + desctiptorsList.add(new AbstractField(Clone.class, "-readIds", "Read IDs aggregated by clone.") { + @Override + public FieldExtractor create(OutputMode outputMode, String[] args) { + return new CloneToReadsExtractor(outputMode, args[0]); + } + }); descriptors = desctiptorsList.toArray(new Field[desctiptorsList.size()]); } @@ -313,7 +335,7 @@ public static FieldExtractor parse(OutputMode outputMode, Class clazz, String[] for (Field field : getFields()) if (field.canExtractFrom(clazz) && args[0].equalsIgnoreCase(field.getCommand())) return field.create(outputMode, Arrays.copyOfRange(args, 1, args.length)); - return null; + throw new IllegalArgumentException("Not a valid options: " + Arrays.toString(args)); } public static ArrayList[] getDescription(Class clazz) { @@ -481,6 +503,124 @@ protected String extract(VDJCObject object) { } + + private static AbstractField alignmentsToClone( + final String command, final String description, final boolean printMapping) { + return new AbstractField(VDJCAlignments.class, command, description) { + @Override + public FieldExtractor create(OutputMode outputMode, String[] args) { + return new AlignmentToCloneExtractor(outputMode, args[0], printMapping); + } + }; + } + + private static final class AlignmentToCloneExtractor + implements FieldExtractor, Closeable { + private final OutputMode outputMode; + private final DB db; + private final NavigableSet byAls; + private final boolean printMapping; + private final Iterator mappingIterator; + private ReadToCloneMapping currentMapping = null; + + public AlignmentToCloneExtractor(OutputMode outputMode, String file, boolean printMapping) { + this.outputMode = outputMode; + this.printMapping = printMapping; + this.db = DBMaker.newFileDB(new File(file)) + .transactionDisable() + .make(); + this.byAls = db.getTreeSet(ActionAssemble.MAPDB_SORTED_BY_ALIGNMENT); + this.mappingIterator = byAls.iterator(); + } + + @Override + public String getHeader() { + if (printMapping) + return choose(outputMode, "Clone mapping", "cloneMapping"); + else + return choose(outputMode, "Clone Id", "cloneId"); + } + + @Override + public String extractValue(VDJCAlignments object) { + if (currentMapping == null && mappingIterator.hasNext()) + currentMapping = mappingIterator.next(); + if (currentMapping == null) + return NULL; + + while (currentMapping.getAlignmentsId() < object.getAlignmentsIndex() && mappingIterator.hasNext()) + currentMapping = mappingIterator.next(); + if (currentMapping.getAlignmentsId() != object.getAlignmentsIndex()) + return printMapping ? Dropped.toString().toLowerCase() : NULL; + + int cloneIndex = currentMapping.getCloneIndex(); + ReadToCloneMapping.MappingType mt = currentMapping.getMappingType(); + if (mt == Dropped) + return printMapping ? mt.toString().toLowerCase() : NULL; + return printMapping ? Integer.toString(cloneIndex) + ":" + mt.toString().toLowerCase() : Integer.toString(cloneIndex); + } + + @Override + public void close() throws IOException { + db.close(); + } + } + + private static final class CloneToReadsExtractor + implements FieldExtractor, Closeable { + private final OutputMode outputMode; + private final DB db; + private final NavigableSet byClones; + private final Iterator mappingIterator; + private ReadToCloneMapping currentMapping; + + public CloneToReadsExtractor(OutputMode outputMode, String file) { + this.outputMode = outputMode; + this.db = DBMaker.newFileDB(new File(file)) + .transactionDisable() + .make(); + this.byClones = db.getTreeSet(ActionAssemble.MAPDB_SORTED_BY_CLONE); + this.mappingIterator = byClones.iterator(); + } + + @Override + public String getHeader() { + return choose(outputMode, "Reads", "reads"); + } + + @Override + public String extractValue(Clone clone) { + if (currentMapping == null && mappingIterator.hasNext()) + currentMapping = mappingIterator.next(); + if (currentMapping == null) + return NULL; + + while (currentMapping.getCloneIndex() < clone.getId() && mappingIterator.hasNext()) + currentMapping = mappingIterator.next(); + + long count = 0; + StringBuilder sb = new StringBuilder(); + while (currentMapping.getCloneIndex() == clone.getId()) { + ++count; + assert currentMapping.getCloneIndex() == currentMapping.getCloneIndex(); + sb.append(currentMapping.getReadId()).append(","); + if (!mappingIterator.hasNext()) + break; + currentMapping = mappingIterator.next(); + } + //count == object.getCount() only if addReadsCountOnClustering=true + assert count >= clone.getCount() : "Actual count: " + clone.getCount() + ", in mapping: " + count; + if (sb.length() != 0) + sb.deleteCharAt(sb.length() - 1); + return sb.toString(); + } + + @Override + public void close() throws IOException { + db.close(); + } + } + public static String choose(OutputMode outputMode, String hString, String sString) { switch (outputMode) { case HumanFriendly: diff --git a/src/main/java/com/milaboratory/mixcr/export/InfoWriter.java b/src/main/java/com/milaboratory/mixcr/export/InfoWriter.java index 8a94697e0..c0e39a1da 100644 --- a/src/main/java/com/milaboratory/mixcr/export/InfoWriter.java +++ b/src/main/java/com/milaboratory/mixcr/export/InfoWriter.java @@ -36,7 +36,7 @@ import java.util.List; public final class InfoWriter implements InputPort, AutoCloseable { - final ArrayList> fieldExtractors = new ArrayList<>(); + final ArrayList> fieldExtractors = new ArrayList<>(); final OutputStream outputStream; boolean initialized; @@ -45,11 +45,11 @@ public InfoWriter(String file) throws FileNotFoundException { new BufferedOutputStream(new FileOutputStream(new File(file)), 65536)); } - public void attachInfoProvider(AbstractFieldExtractor provider) { + public void attachInfoProvider(FieldExtractor provider) { fieldExtractors.add(provider); } - public void attachInfoProviders(List> providers) { + public void attachInfoProviders(List> providers) { fieldExtractors.addAll(providers); } @@ -60,13 +60,13 @@ public InfoWriter(OutputStream outputStream) { private void ensureInitialized() { if (!initialized) { try { - if (!fieldExtractors.isEmpty()) - for (int i = 0; ; ++i) { - outputStream.write(fieldExtractors.get(i).header.getBytes()); - if (i == fieldExtractors.size() - 1) - break; - outputStream.write('\t'); - } + for (int i = 0; i < fieldExtractors.size(); ++i) { + outputStream.write(fieldExtractors.get(i).getHeader().getBytes()); + if (i == fieldExtractors.size() - 1) + break; + outputStream.write('\t'); + } + outputStream.write('\n'); } catch (IOException e) { throw new RuntimeException(e); } @@ -77,16 +77,14 @@ private void ensureInitialized() { @Override public void put(T t) { ensureInitialized(); - if (fieldExtractors.isEmpty()) - return; try { - outputStream.write('\n'); - for (int i = 0; ; ++i) { + for (int i = 0; i < fieldExtractors.size(); ++i) { outputStream.write(fieldExtractors.get(i).extractValue(t).getBytes()); if (i == fieldExtractors.size() - 1) break; outputStream.write('\t'); } + outputStream.write('\n'); } catch (IOException e) { throw new RuntimeException(e); } @@ -95,5 +93,8 @@ public void put(T t) { @Override public void close() throws IOException { outputStream.close(); + for (FieldExtractor fe : fieldExtractors) + if (fe instanceof Closeable) + ((Closeable) fe).close(); } } diff --git a/src/main/java/com/milaboratory/mixcr/reference/BasicReferencePoint.java b/src/main/java/com/milaboratory/mixcr/reference/BasicReferencePoint.java index c030aa25a..8c79a9bc1 100644 --- a/src/main/java/com/milaboratory/mixcr/reference/BasicReferencePoint.java +++ b/src/main/java/com/milaboratory/mixcr/reference/BasicReferencePoint.java @@ -97,6 +97,17 @@ public boolean isAttachedToAlignmentBound() { return index < 0; } + /** + * Returns true if this point is nor attached to any alignments bound. + * + *

Information about this point is taken from reference sequence's reference points.

+ * + * @return true if this point is nor attached to any alignments bound + */ + public boolean isPure() { + return index >= 0; + } + public boolean isAttachedToLeftAlignmentBound() { assert index < 0; return index == -1; diff --git a/src/main/java/com/milaboratory/mixcr/reference/GeneFeature.java b/src/main/java/com/milaboratory/mixcr/reference/GeneFeature.java index d9a856e95..e94d7552b 100644 --- a/src/main/java/com/milaboratory/mixcr/reference/GeneFeature.java +++ b/src/main/java/com/milaboratory/mixcr/reference/GeneFeature.java @@ -104,13 +104,13 @@ public final class GeneFeature implements Iterable, /** * Intron in V region. */ - Intron = new GeneFeature(VIntronBegin, VIntronEnd), + VIntron = new GeneFeature(VIntronBegin, VIntronEnd), /** * Part of lider sequence in second exon. */ L2 = new GeneFeature(L2Begin, L2End), /** - * {@code L1} + {@code Intron} + {@code L2} + * {@code L1} + {@code VIntron} + {@code L2} */ VLIntronL = new GeneFeature(L1Begin, L2End), @@ -680,7 +680,7 @@ static String encode(GeneFeature feature, boolean copact) { if (region.begin.basicPoint == region.end.basicPoint) base = ReferencePoint.encode(region.begin.getWithoutOffset(), true); - + if (base != null) { if (region.hasOffsets()) base += "(" + region.begin.offset + ", " + region.end.offset + ")"; @@ -708,6 +708,11 @@ public static boolean match(ReferenceRange a, GeneFeature b) { && a.end.basicPoint == b.regions[0].end.basicPoint; } + public static final GeneFeature[] NONCODING_FEATURES = { + VIntron, + new GeneFeature(CExon1End, CEnd) // Gene structure for C region is not fully specified + }; + public static class Deserializer extends JsonDeserializer { @Override public GeneFeature deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { diff --git a/src/main/java/com/milaboratory/mixcr/reference/LociLibrary.java b/src/main/java/com/milaboratory/mixcr/reference/LociLibrary.java index 508ae3d01..69e858251 100644 --- a/src/main/java/com/milaboratory/mixcr/reference/LociLibrary.java +++ b/src/main/java/com/milaboratory/mixcr/reference/LociLibrary.java @@ -112,6 +112,13 @@ public Gene getGene(int species, String name) { return genes.get(species).get(name); } + public int getSpeciesTaxonId(String commonName) { + Integer id = knownSpecies.get(commonName); + if (id == null) + return -1; + return id; + } + public Collection getAllAlleles(int species) { return Collections.unmodifiableCollection(alleles.get(species).values()); } diff --git a/src/main/java/com/milaboratory/mixcr/reference/LociLibraryIOUtils.java b/src/main/java/com/milaboratory/mixcr/reference/LociLibraryIOUtils.java new file mode 100644 index 000000000..9ae4e3d37 --- /dev/null +++ b/src/main/java/com/milaboratory/mixcr/reference/LociLibraryIOUtils.java @@ -0,0 +1,227 @@ +/* + * Copyright (c) 2014-2015, 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 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.reference; + +import com.milaboratory.core.sequence.NucleotideSequence; + +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.util.ArrayList; +import java.util.List; + +public class LociLibraryIOUtils { + private LociLibraryIOUtils() { + } + + public static void writeReferenceGeneFeature(OutputStream stream, GeneFeature geneFeature) throws IOException { + for (GeneFeature.ReferenceRange referenceRange : geneFeature) + if (!referenceRange.begin.isBasicPoint() || !referenceRange.end.isBasicPoint()) + throw new IllegalArgumentException("Supports only pure reference gene features."); + if (geneFeature.size() >= 0x100) + throw new IllegalArgumentException(); + stream.write(geneFeature.size()); + for (GeneFeature.ReferenceRange referenceRange : geneFeature) { + stream.write(referenceRange.begin.basicPoint.index); + stream.write(referenceRange.end.basicPoint.index); + } + } + + public static GeneFeature readReferenceGeneFeature(InputStream stream) throws IOException { + int size = stream.read(); + if (size < 0) + throw new IOException("Wrong format."); + GeneFeature.ReferenceRange[] rr = new GeneFeature.ReferenceRange[size]; + for (int i = 0; i < size; i++) { + int begin = stream.read(); + if (begin < 0) + throw new IOException("Wrong format."); + int end = stream.read(); + if (end < 0) + throw new IOException("Wrong format."); + rr[i] = new GeneFeature.ReferenceRange(new ReferencePoint(BasicReferencePoint.getByIndex(begin)), + new ReferencePoint(BasicReferencePoint.getByIndex(end))); + } + return new GeneFeature(rr, true); + } + + public static void filterLociLibrary(final File file, final LociLibraryFilter filter) throws IOException { + final List ranges = new ArrayList<>(); + class Listener extends LociLibraryReaderListener { + RangeToRemove currentRange = null; + + @Override + public void magic(long from, long to) { + r(from, to, filter.magic()); + } + + @Override + public void meta(long from, long to, String key, String value) { + r(from, to, filter.meta(key, value)); + } + + @Override + public void speciesName(long from, long to, int taxonId, String name) { + r(from, to, filter.speciesName(taxonId, name)); + } + + @Override + public void sequencePart(long from, long to, int seqFrom, NucleotideSequence seq) { + r(from, to, filter.sequencePart(seqFrom, seq)); + } + + @Override + public void beginLocus(long from, long to, LocusContainer container) { + r(from, to, filter.beginLocus(container)); + } + + @Override + public void endLocus(long from, long to, LocusContainer container) { + r(from, to, filter.endLocus(container)); + } + + @Override + public void allele(long from, long to, Allele allele) { + r(from, to, filter.allele(allele)); + } + + void finish() { + r(0, 0, true); + } + + void r(long from, long to, boolean result) { + if (!result) { + if (currentRange == null) + currentRange = new RangeToRemove(from, to); + else + currentRange.to = to; + } else if (currentRange != null) { + ranges.add(currentRange); + currentRange = null; + } + } + } + + // Collecting ranges to remove + try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) { + Listener listener = new Listener(); + LociLibraryReader reader = new LociLibraryReader(bis, false).setListener(listener); + reader.checkMagic(); + reader.readToEnd(); + listener.finish(); + } + + Path path = file.toPath(); + Path old = path.resolveSibling(path.getFileName() + ".old"); + Files.move(path, old, StandardCopyOption.REPLACE_EXISTING); + + try (InputStream is = new FileInputStream(old.toFile()); + OutputStream os = new FileOutputStream(path.toFile())) { + byte[] buffer = new byte[1024]; + long streamPointer = 0; + int rangePointer = 0; + boolean skip = false; + while (true) { + int toRead = buffer.length; + if (rangePointer < ranges.size()) { + toRead = Math.min((int) (ranges.get(rangePointer).boundary(skip) - streamPointer), + toRead); + } + if (toRead == 0) { + if (!skip) + skip = true; + else { + ++rangePointer; + skip = false; + } + continue; + } + int read = is.read(buffer, 0, toRead); + + if (read > 0 && !skip) + os.write(buffer, 0, read); + + if (read < toRead) + break; + + streamPointer += read; + } + } + + // Check + LociLibraryReader.read(path.toFile(), false); + + // Remove old file + Files.delete(old); + } + + private static final class RangeToRemove { + long from, to; + + public RangeToRemove(long from, long to) { + this.from = from; + this.to = to; + } + + public long boundary(boolean isSkip) { + return isSkip ? to : from; + } + } + + public abstract static class LociLibraryFilter { + public boolean magic() { + return true; + } + + public boolean meta(String key, String value) { + return true; + } + + public boolean speciesName(int taxonId, String name) { + return true; + } + + public boolean sequencePart(int seqFrom, NucleotideSequence seq) { + return true; + } + + public boolean beginLocus(LocusContainer container) { + return true; + } + + public boolean endLocus(LocusContainer container) { + return true; + } + + public boolean allele(Allele allele) { + return true; + } + } +} diff --git a/src/main/java/com/milaboratory/mixcr/reference/LociLibraryManager.java b/src/main/java/com/milaboratory/mixcr/reference/LociLibraryManager.java index eb3d055e7..18e5e8440 100644 --- a/src/main/java/com/milaboratory/mixcr/reference/LociLibraryManager.java +++ b/src/main/java/com/milaboratory/mixcr/reference/LociLibraryManager.java @@ -28,12 +28,15 @@ */ package com.milaboratory.mixcr.reference; +import com.milaboratory.mixcr.cli.Util; + +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; public final class LociLibraryManager implements AlleleResolver { - private static LociLibraryManager defualt; + private static volatile LociLibraryManager defualt; private final HashMap allAlleles = new HashMap<>(); private final HashMap libraries = new HashMap<>(); @@ -44,7 +47,6 @@ public void register(String name, LociLibrary library) { libraries.put(name, library); } - public Allele getAllele(AlleleId id) { return allAlleles.get(id); } @@ -59,8 +61,18 @@ public static LociLibraryManager getDefault() { if (defualt == null) { try { defualt = new LociLibraryManager(); - InputStream sample = LociLibraryManager.class.getClassLoader().getResourceAsStream("reference/mi.ll"); - defualt.register("mi", LociLibraryReader.read(sample)); + try (InputStream sample = LociLibraryManager.class.getClassLoader() + .getResourceAsStream("reference/mi.ll")) { + defualt.register("mi", LociLibraryReader.read(sample, true)); + } + File settings = Util.getLocalSettingsDir().toFile(); + if (settings.exists()) + for (File file : settings.listFiles()) { + if (file.isFile() && file.getName().endsWith(".ll")) { + defualt.register(file.getName().substring(0, file.getName().length() - 3), + LociLibraryReader.read(file, false)); + } + } } catch (IOException e) { throw new RuntimeException(); } diff --git a/src/main/java/com/milaboratory/mixcr/reference/LociLibraryReader.java b/src/main/java/com/milaboratory/mixcr/reference/LociLibraryReader.java index 6a458bb18..ee5c6e7d1 100644 --- a/src/main/java/com/milaboratory/mixcr/reference/LociLibraryReader.java +++ b/src/main/java/com/milaboratory/mixcr/reference/LociLibraryReader.java @@ -32,6 +32,7 @@ import com.milaboratory.core.sequence.NucleotideSequence; import com.milaboratory.core.sequence.SequencesUtils; import com.milaboratory.util.Bit2Array; +import com.milaboratory.util.CountingInputStream; import java.io.*; import java.util.*; @@ -42,8 +43,12 @@ public class LociLibraryReader { + final boolean withFR4Correction; + final CountingInputStream countingInputStream; final DataInputStream stream; final LociLibrary library = new LociLibrary(); + long beginOfCurrentBlock = 0; + LociLibraryReaderListener listener = new LociLibraryReaderListener(); LocusContainer container; EnumMap> genes; List allGenes = null; @@ -51,41 +56,54 @@ public class LociLibraryReader { Map nameToGenes; Map nameToAlleles; - private LociLibraryReader(InputStream stream) { - this.stream = new DataInputStream(stream); + LociLibraryReader(InputStream stream, boolean withFR4Correction) { + this.countingInputStream = new CountingInputStream(stream); + this.stream = new DataInputStream(countingInputStream); + this.withFR4Correction = withFR4Correction; } - public static LociLibrary read(File file) throws IOException { + public static LociLibrary read(File file, boolean withFR4Correction) throws IOException { try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) { - return read(bis); + return read(bis, withFR4Correction); } } - public static LociLibrary read(String fileName) throws IOException { + public static LociLibrary read(String fileName, boolean withFR4Correction) throws IOException { try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(fileName))) { - return read(bis); + return read(bis, withFR4Correction); } } - public static LociLibrary read(InputStream stream) throws IOException { - LociLibraryReader reader = new LociLibraryReader(stream); + public static LociLibrary read(InputStream stream, boolean withFR4Correction) throws IOException { + LociLibraryReader reader = new LociLibraryReader(stream, withFR4Correction); reader.checkMagic(); reader.readToEnd(); return reader.library; } - private void checkMagic() throws IOException { + public LociLibraryReader setListener(LociLibraryReaderListener listener) { + this.listener = listener; + return this; + } + + void checkMagic() throws IOException { if (stream.readInt() != LociLibraryWriter.MAGIC) throw new IOException("Wrong magic bytes."); + listener.magic(beginOfCurrentBlock, countingInputStream.getBytesRead()); } - private void readToEnd() throws IOException { + void readToEnd() throws IOException { int b; while ((b = stream.read()) != -1) { + // Saving current block position in stream + // -1 for b + beginOfCurrentBlock = countingInputStream.getBytesRead() - 1; + + // Selecting proper method for reading certain block type switch ((byte) b) { case MAGIC_TYPE: - readMagic(); + skipMagic(); break; case META_TYPE: readMeta(); @@ -117,10 +135,11 @@ private void readToEnd() throws IOException { throw new IOException("Premature end of stream."); } - private void readMagic() throws IOException { + private void skipMagic() throws IOException { stream.readByte(); stream.readByte(); stream.readByte(); + listener.magic(beginOfCurrentBlock, countingInputStream.getBytesRead()); } private void beginLocus() throws IOException { @@ -142,9 +161,13 @@ private void beginLocus() throws IOException { alleles.put(gt, new ArrayList()); container = new LocusContainer(uuid, new SpeciesAndLocus(taxonId, locus), genes, alleles, - Collections.unmodifiableMap(nameToGenes = new HashMap()), - Collections.unmodifiableMap(nameToAlleles = new HashMap()), + Collections.unmodifiableMap(nameToGenes = new HashMap<>()), + Collections.unmodifiableMap(nameToAlleles = new HashMap<>()), Collections.unmodifiableList(allGenes = new ArrayList<>())); + + container.setLibrary(library); + + listener.beginLocus(beginOfCurrentBlock, countingInputStream.getBytesRead(), container); } private void readAllele() throws IOException { @@ -159,14 +182,16 @@ private void readAllele() throws IOException { int[] referencePoints = null; if ((flags & 4) != 0) { accession = stream.readUTF(); - referencePoints = new int[gtis.get(type).size]; + referencePoints = new int[getGeneTypeInfo(type, false).size]; for (int i = 0; i < referencePoints.length; ++i) referencePoints[i] = stream.readInt(); } String referenceAllele = null; int[] mutations = null; + GeneFeature referenceGeneFeature = null; if ((flags & 8) != 0) { referenceAllele = stream.readUTF(); + referenceGeneFeature = LociLibraryIOUtils.readReferenceGeneFeature(stream); int size = stream.readInt(); mutations = new int[size]; for (int i = 0; i < size; ++i) @@ -197,13 +222,13 @@ private void readAllele() throws IOException { if ((flags & 1) != 0) { //reference allele allele = new ReferenceAllele(gene, alleleName, (flags & 2) != 0, accession, - gtis.get(type).create(referencePoints)); + getGeneTypeInfo(type, false).create(referencePoints)); } else { //allelic variant allele = new AllelicVariant(alleleName, - (flags & 2) != 0, parent.getPartitioning().getWrappingGeneFeature(), + (flags & 2) != 0, referenceGeneFeature, (ReferenceAllele) parent, - new Mutations(NucleotideSequence.ALPHABET, mutations)); + new Mutations<>(NucleotideSequence.ALPHABET, mutations)); } gene.alleles.add(allele); @@ -212,6 +237,8 @@ private void readAllele() throws IOException { //No alleles with the same name assert parent == null; + + listener.allele(beginOfCurrentBlock, countingInputStream.getBytesRead(), allele); } private void endLocus() { @@ -234,6 +261,7 @@ private void endLocus() { nameToAlleles = null; nameToGenes = null; allGenes = null; + listener.endLocus(beginOfCurrentBlock, countingInputStream.getBytesRead(), container); } private void readSequencePart(boolean compressed) throws IOException { @@ -253,7 +281,9 @@ private void readSequencePart(boolean compressed) throws IOException { inflater.end(); } else seqContent = Bit2Array.readFrom(stream); - library.base.put(accession, from, SequencesUtils.convertBit2ArrayToNSequence(seqContent)); + NucleotideSequence seq = SequencesUtils.convertBit2ArrayToNSequence(seqContent); + library.base.put(accession, from, seq); + listener.sequencePart(beginOfCurrentBlock, countingInputStream.getBytesRead(), from, seq); } private void readMeta() throws IOException { @@ -263,6 +293,7 @@ private void readMeta() throws IOException { library.properties.put(key, value); else container.properties.put(key, value); + listener.meta(beginOfCurrentBlock, countingInputStream.getBytesRead(), key, value); } private void readSpeciesName() throws IOException { @@ -271,5 +302,6 @@ private void readSpeciesName() throws IOException { int taxonId = stream.readInt(); String name = stream.readUTF(); library.knownSpecies.put(name, taxonId); + listener.speciesName(beginOfCurrentBlock, countingInputStream.getBytesRead(), taxonId, name); } } diff --git a/src/main/java/com/milaboratory/mixcr/reference/LociLibraryReaderListener.java b/src/main/java/com/milaboratory/mixcr/reference/LociLibraryReaderListener.java new file mode 100644 index 000000000..f5a673a81 --- /dev/null +++ b/src/main/java/com/milaboratory/mixcr/reference/LociLibraryReaderListener.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2014-2015, 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 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.reference; + +import com.milaboratory.core.sequence.NucleotideSequence; + +public class LociLibraryReaderListener { + public void magic(long from, long to) { + } + + public void meta(long from, long to, String key, String value) { + } + + public void speciesName(long from, long to, int taxonId, String name) { + } + + public void sequencePart(long from, long to, int seqFrom, NucleotideSequence seq) { + } + + public void beginLocus(long from, long to, LocusContainer container) { + } + + public void endLocus(long from, long to, LocusContainer container) { + } + + public void allele(long from, long to, Allele allele) { + } +} diff --git a/src/main/java/com/milaboratory/mixcr/reference/LociLibraryWriter.java b/src/main/java/com/milaboratory/mixcr/reference/LociLibraryWriter.java index 85ffe7800..367952518 100644 --- a/src/main/java/com/milaboratory/mixcr/reference/LociLibraryWriter.java +++ b/src/main/java/com/milaboratory/mixcr/reference/LociLibraryWriter.java @@ -188,22 +188,24 @@ public void writeCommonSpeciesName(int taxonid, String speciesName) throws IOExc *

Mutation positions in the mutation list ( {@code mutations} option ) must be converted to positions relative * to the first defined reference point of the reference allele.

* - * @param type type of the segment (V, D, J or C) - * @param alleleName full name of allele (e.g. TRBV12-2*01) - * @param isReference is it a reference allele - * @param isFunctional {@code true} if this gene is functional; {@code false} if this gene is pseudogene - * @param accession accession number of original (source) sequence - * @param referencePoints array of reference points - * @param reference allele name of the reference allele - * @param mutations array of mutations + * @param type type of the segment (V, D, J or C) + * @param alleleName full name of allele (e.g. TRBV12-2*01) + * @param isReference is it a reference allele + * @param isFunctional {@code true} if this gene is functional; {@code false} if this gene is pseudogene + * @param accession accession number of original (source) sequence + * @param referencePoints array of reference points + * @param reference allele name of the reference allele + * @param mutations array of mutations + * @param referenceGeneFeature reference gene feature * @throws java.io.IOException if an I/O error occurs. */ public void writeAllele(GeneType type, String alleleName, boolean isReference, boolean isFunctional, String accession, int[] referencePoints, - String reference, int[] mutations) throws IOException { + String reference, int[] mutations, GeneFeature referenceGeneFeature) throws IOException { //Validation if ((accession == null) != (referencePoints == null) - || (reference == null) != (mutations == null)) + || (reference == null) != (mutations == null) + || (reference == null) != (referenceGeneFeature == null)) throw new IllegalArgumentException(); if (isReference && (mutations != null || accession == null)) throw new IllegalArgumentException(); @@ -219,7 +221,7 @@ public void writeAllele(GeneType type, String alleleName, boolean isReference, b (reference != null ? 8 : 0)); if (accession != null) { - if (gtis.get(type).size != referencePoints.length) + if (GENE_TYPE_INFOS_WC.get(type).size != referencePoints.length) throw new IllegalArgumentException("Wrong number of reference points."); stream.writeUTF(accession); @@ -227,8 +229,9 @@ public void writeAllele(GeneType type, String alleleName, boolean isReference, b stream.writeInt(referencePoints[i]); } - if (mutations != null) { + if (reference != null) { stream.writeUTF(reference); + LociLibraryIOUtils.writeReferenceGeneFeature(stream, referenceGeneFeature); stream.writeInt(mutations.length); for (int i = 0; i < mutations.length; ++i) stream.writeInt(mutations[i]); @@ -240,9 +243,11 @@ public void writeAllele(GeneType type, String alleleName, boolean isReference, b */ public static abstract class GeneTypeInfo { public final int size; + public final int indexOfFirstPoint; - protected GeneTypeInfo(int size) { + public GeneTypeInfo(int indexOfFirstPoint, int size) { this.size = size; + this.indexOfFirstPoint = indexOfFirstPoint; } /** @@ -255,11 +260,8 @@ protected GeneTypeInfo(int size) { } public static class GeneralGeneTypeInfo extends GeneTypeInfo { - final int indexOfFirstPoint; - - protected GeneralGeneTypeInfo(int size, int indexOfFirstPoint) { - super(size); - this.indexOfFirstPoint = indexOfFirstPoint; + protected GeneralGeneTypeInfo(int indexOfFirstPoint, int size) { + super(indexOfFirstPoint, size); } @Override @@ -275,7 +277,7 @@ public ReferencePoints create(int[] refsFromFile) { // Class to fix for FR4End issue in J genes. public static class JGeneTypeInfo extends GeneTypeInfo { public JGeneTypeInfo() { - super(3); + super(13, 3); } @Override @@ -304,12 +306,26 @@ public ReferencePoints create(int[] refsFromFile) { } } - public static final EnumMap gtis = new EnumMap<>(GeneType.class); + public static GeneTypeInfo getGeneTypeInfo(GeneType geneType) { + return getGeneTypeInfo(geneType, false); + } + + public static GeneTypeInfo getGeneTypeInfo(GeneType geneType, boolean withFR4Correction) { + return withFR4Correction ? GENE_TYPE_INFOS_WC.get(geneType) : GENE_TYPE_INFOS.get(geneType); + } + + private static final EnumMap GENE_TYPE_INFOS_WC = new EnumMap<>(GeneType.class), + GENE_TYPE_INFOS = new EnumMap<>(GeneType.class); static { - gtis.put(GeneType.Variable, new GeneralGeneTypeInfo(11, 0)); - gtis.put(GeneType.Diversity, new GeneralGeneTypeInfo(2, 11)); - gtis.put(GeneType.Joining, new JGeneTypeInfo()); - gtis.put(GeneType.Constant, new GeneralGeneTypeInfo(3, 16)); + GENE_TYPE_INFOS_WC.put(GeneType.Variable, new GeneralGeneTypeInfo(0, 11)); + GENE_TYPE_INFOS_WC.put(GeneType.Diversity, new GeneralGeneTypeInfo(11, 2)); + GENE_TYPE_INFOS_WC.put(GeneType.Joining, new JGeneTypeInfo()); + GENE_TYPE_INFOS_WC.put(GeneType.Constant, new GeneralGeneTypeInfo(16, 3)); + + GENE_TYPE_INFOS.put(GeneType.Variable, new GeneralGeneTypeInfo(0, 11)); + GENE_TYPE_INFOS.put(GeneType.Diversity, new GeneralGeneTypeInfo(11, 2)); + GENE_TYPE_INFOS.put(GeneType.Joining, new GeneralGeneTypeInfo(13, 3)); + GENE_TYPE_INFOS.put(GeneType.Constant, new GeneralGeneTypeInfo(16, 3)); } } \ No newline at end of file diff --git a/src/main/java/com/milaboratory/mixcr/reference/LocusContainer.java b/src/main/java/com/milaboratory/mixcr/reference/LocusContainer.java index f1503b72b..d3bf09660 100644 --- a/src/main/java/com/milaboratory/mixcr/reference/LocusContainer.java +++ b/src/main/java/com/milaboratory/mixcr/reference/LocusContainer.java @@ -60,7 +60,7 @@ public LociLibrary getLibrary() { } void setLibrary(LociLibrary library) { - if (this.library != null) + if (this.library != null && this.library != library) throw new RuntimeException(); this.library = library; diff --git a/src/main/java/com/milaboratory/mixcr/reference/CompatibilityIO.java b/src/main/java/com/milaboratory/mixcr/reference/ReferenceCompatibilityIO.java similarity index 93% rename from src/main/java/com/milaboratory/mixcr/reference/CompatibilityIO.java rename to src/main/java/com/milaboratory/mixcr/reference/ReferenceCompatibilityIO.java index 32af24963..c2eca6d2c 100644 --- a/src/main/java/com/milaboratory/mixcr/reference/CompatibilityIO.java +++ b/src/main/java/com/milaboratory/mixcr/reference/ReferenceCompatibilityIO.java @@ -37,11 +37,11 @@ /** * Created by dbolotin on 30/09/15. */ -public final class CompatibilityIO { - private CompatibilityIO() { +public final class ReferenceCompatibilityIO { + private ReferenceCompatibilityIO() { } - public static void registerV3Serializers(SerializersManager manager) { + public static void registerV3BasicReferencePointSerializers(SerializersManager manager) { manager.registerCustomSerializer(BasicReferencePoint.class, new DefaultSerializersProviderImpl.CustomEnumSerializer<>( BasicReferencePoint.class, diff --git a/src/main/java/com/milaboratory/mixcr/reference/ReferencePoint.java b/src/main/java/com/milaboratory/mixcr/reference/ReferencePoint.java index 61de127cc..d07b4a9f6 100644 --- a/src/main/java/com/milaboratory/mixcr/reference/ReferencePoint.java +++ b/src/main/java/com/milaboratory/mixcr/reference/ReferencePoint.java @@ -28,8 +28,18 @@ */ package com.milaboratory.mixcr.reference; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.milaboratory.primitivio.annotations.Serializable; +import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ArrayList; @@ -42,6 +52,8 @@ * * @see GeneFeature */ +@JsonSerialize(using = ReferencePoint.Serializer.class) +@JsonDeserialize(using = ReferencePoint.Deserializer.class) @Serializable(by = IO.ReferencePointSerializer.class) public final class ReferencePoint implements Comparable, java.io.Serializable { @@ -303,6 +315,10 @@ public ReferencePoint getActivationPoint() { return basicPoint.getActivationPoint(); } + public boolean isBasicPoint() { + return basicPoint.isPure() && offset == 0; + } + @Override public int compareTo(ReferencePoint o) { int c = basicPoint.compareTo(o.basicPoint); @@ -423,4 +439,18 @@ public static String encode(ReferencePoint point, boolean begin) { return name; return name + "(" + point.offset + ")"; } + + public static final class Serializer extends JsonSerializer { + @Override + public void serialize(ReferencePoint value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { + jgen.writeString(ReferencePoint.encode(value, true)); + } + } + + public static final class Deserializer extends JsonDeserializer { + @Override + public ReferencePoint deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { + return ReferencePoint.parse(jp.readValueAs(String.class)); + } + } } diff --git a/src/main/java/com/milaboratory/mixcr/reference/ReferenceUtil.java b/src/main/java/com/milaboratory/mixcr/reference/ReferenceUtil.java index e37f01fb2..5f1910bed 100644 --- a/src/main/java/com/milaboratory/mixcr/reference/ReferenceUtil.java +++ b/src/main/java/com/milaboratory/mixcr/reference/ReferenceUtil.java @@ -28,15 +28,27 @@ */ package com.milaboratory.mixcr.reference; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + public class ReferenceUtil { /** * For advanced use. */ public static final int TOTAL_NUMBER_OF_REFERENCE_POINTS = BasicReferencePoint.TOTAL_NUMBER_OF_REFERENCE_POINTS; + private static final Map allBasicPointsByTypes; + private ReferenceUtil() { } + static { + allBasicPointsByTypes = new HashMap<>(); + ArrayList pointsBuffer = new ArrayList<>(); + + } + /** * Returns underlying reference point id. * @@ -45,6 +57,8 @@ private ReferenceUtil() { * @return underlying reference point id */ public static int getReferencePointIndex(ReferencePoint referencePoint) { + if (!referencePoint.isBasicPoint()) + throw new IllegalArgumentException("Index is defined only for pure basic reference points."); return referencePoint.getIndex(); } } diff --git a/src/main/java/com/milaboratory/mixcr/reference/SpeciesAndLocus.java b/src/main/java/com/milaboratory/mixcr/reference/SpeciesAndLocus.java index 39e77a082..551aa77a7 100644 --- a/src/main/java/com/milaboratory/mixcr/reference/SpeciesAndLocus.java +++ b/src/main/java/com/milaboratory/mixcr/reference/SpeciesAndLocus.java @@ -50,7 +50,7 @@ public boolean equals(Object o) { if (locus != that.locus) return false; - return taxonId == taxonId; + return taxonId == that.taxonId; } @Override diff --git a/src/main/java/com/milaboratory/mixcr/reference/builder/BuilderUtils.java b/src/main/java/com/milaboratory/mixcr/reference/builder/BuilderUtils.java new file mode 100644 index 000000000..29cf1e1b9 --- /dev/null +++ b/src/main/java/com/milaboratory/mixcr/reference/builder/BuilderUtils.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2014-2015, 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 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.reference.builder; + +import java.util.regex.Pattern; + +public class BuilderUtils { + // ex. TRBV12-2*01 + public static final Pattern ALLELE_NAME_PATTERN = Pattern.compile("^((...)(.).*)\\*(\\d\\d)$"); + public static final int GENE_NAME_GROUP = 1; + public static final int LOCUS_GROUP = 2; + public static final int GENE_TYPE_LETTER_GROUP = 3; + public static final int ALLELE_ID_GROUP = 4; +} diff --git a/src/main/java/com/milaboratory/mixcr/reference/builder/FastaLocusBuilder.java b/src/main/java/com/milaboratory/mixcr/reference/builder/FastaLocusBuilder.java new file mode 100644 index 000000000..3f8fcf581 --- /dev/null +++ b/src/main/java/com/milaboratory/mixcr/reference/builder/FastaLocusBuilder.java @@ -0,0 +1,612 @@ +/* + * Copyright (c) 2014-2015, 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 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.reference.builder; + +import cc.redberry.pipe.CUtils; +import com.milaboratory.core.Range; +import com.milaboratory.core.alignment.Aligner; +import com.milaboratory.core.alignment.Alignment; +import com.milaboratory.core.alignment.MultiAlignmentHelper; +import com.milaboratory.core.io.sequence.fasta.FastaReader; +import com.milaboratory.core.mutations.Mutations; +import com.milaboratory.core.mutations.MutationsBuilder; +import com.milaboratory.core.mutations.MutationsUtil; +import com.milaboratory.core.sequence.AminoAcidSequence; +import com.milaboratory.core.sequence.NucleotideSequence; +import com.milaboratory.core.sequence.TranslationParameters; +import com.milaboratory.mixcr.basictypes.SequencePartitioning; +import com.milaboratory.mixcr.basictypes.VDJCAlignmentsFormatter; +import com.milaboratory.mixcr.reference.GeneFeature; +import com.milaboratory.mixcr.reference.LociLibraryWriter; +import com.milaboratory.mixcr.reference.Locus; +import com.milaboratory.mixcr.reference.ReferencePoint; +import com.milaboratory.util.StringUtil; +import gnu.trove.map.TObjectIntMap; + +import java.io.*; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static com.milaboratory.core.sequence.AminoAcidSequence.convertNtPositionToAA; +import static com.milaboratory.core.sequence.TranslationParameters.withIncompleteCodon; +import static com.milaboratory.mixcr.reference.builder.BuilderUtils.*; +import static com.milaboratory.mixcr.reference.builder.FastaLocusBuilderParameters.AnchorPointPositionInfo.*; + +/** + * Builds MiXCR format LociLibrary file from + */ +public class FastaLocusBuilder { + public static final int LINE_WIDTH = 80; + + /** + * Target locus + */ + private final Locus locus; + /** + * Parameters + */ + private final FastaLocusBuilderParameters parameters; + /** + * Genes by name + */ + private final Map genes = new HashMap<>(); + /** + * Stream for logging warning and error messages + */ + private PrintStream loggingStream = System.out; + /** + * Stream for writing final report to + */ + private PrintStream finalReportStream = System.out; + /** + * Determines whether builder should terminate on error + */ + private boolean exceptionOnError = true; + /** + * Determines whether builder should process alleles with non-standard names + */ + private boolean allowNonStandardAlleleNames = false; + + public FastaLocusBuilder(Locus locus, FastaLocusBuilderParameters parameters) { + if (locus == null || parameters == null) + throw new NullPointerException(); + this.locus = locus; + this.parameters = parameters; + } + + public FastaLocusBuilder setLoggingStream(PrintStream loggingStream) { + this.loggingStream = loggingStream; + return this; + } + + public FastaLocusBuilder setFinalReportStream(PrintStream finalReportStream) { + this.finalReportStream = finalReportStream; + return this; + } + + public FastaLocusBuilder noExceptionOnError() { + this.exceptionOnError = false; + return this; + } + + public FastaLocusBuilder allowNonStandardAlleleNames() { + this.allowNonStandardAlleleNames = true; + return this; + } + + private void errorOrException(String message) { + if (exceptionOnError) + throw new FastaLocusBuilderException(message); + else + error(message); + } + + private void error(String line) { + log("Error: " + line); + } + + private void warning(String line) { + log("Warning: " + line); + } + + private void log(String line) { + if (loggingStream != null) + loggingStream.println(line); + } + + private void reportLine(String line) { + if (finalReportStream != null) + finalReportStream.println(line); + } + + public void importAllelesFromFile(String fileName) throws IOException { + try (InputStream stream = new BufferedInputStream(new FileInputStream(fileName))) { + importAllelesFromStream(stream); + } + } + + public void importAllelesFromStream(InputStream stream) { + // Saving in local variables for compactness of extraction code + Pattern alleleNameExtractionPattern = parameters.getAlleleNameExtractionPattern(); + Pattern functionalGenePattern = parameters.getFunctionalAllelePattern(); + Pattern referenceAllelePattern = parameters.getReferenceAllelePattern(); + int[] referencePointPositions = parameters.getReferencePointPositions(); + + for (FastaReader.RawFastaRecord rec : + CUtils.it(new FastaReader<>(stream, null).asRawRecordsPort())) { + //Extracting allele name from header + Matcher matcher = alleleNameExtractionPattern.matcher(rec.description); + String alleleName; + if (matcher.find()) + alleleName = matcher.group(1); + else { + String errorMessage = "Header does'n contain allele name pattern: " + rec.description; + errorOrException(errorMessage); + continue; + } + + // Parsing allele name + matcher = ALLELE_NAME_PATTERN.matcher(alleleName); + + String geneName; + + // Checking + if (matcher.matches()) { + // Extracting gene name + geneName = matcher.group(GENE_NAME_GROUP); + + // Checking locus decoded from allele name + if (!matcher.group(LOCUS_GROUP).equalsIgnoreCase(locus.toString())) + warning("Allele from different locus(?): " + alleleName); + + // Checking gene type decoded from allele name + if (Character.toUpperCase(matcher.group(GENE_TYPE_LETTER_GROUP).charAt(0)) != + parameters.getGeneType().getLetter()) + warning("Allele of different gene type(?): " + alleleName); + } else { + String errorMessage = "Allele name doesn't match standard pattern: " + alleleName; + if (!allowNonStandardAlleleNames) + throw new FastaLocusBuilderException(errorMessage); + else { + geneName = alleleName; + alleleName += "*00"; + errorMessage += ". Changed to: " + alleleName; + error(errorMessage); + } + } + + // Detecting whether allele is functional + boolean isFunctional = functionalGenePattern.matcher(rec.description).find(); + + // Parsing sequence + StringWithMapping seqWithPositionMapping = StringWithMapping.removeSymbol(rec.sequence, parameters.getPaddingChar()); + NucleotideSequence seq = new NucleotideSequence(seqWithPositionMapping.getModifiedString()); + + // If sequence contain wildcards, skip it + if (seq.containsWildcards()) { + warning("Skipping " + alleleName + " because it's sequence contains wildcards."); + continue; + } + + // Calculating reference points + int[] referencePoints = new int[referencePointPositions.length]; + for (int i = 0; i < referencePointPositions.length; i++) + referencePoints[i] = getPosition(seqWithPositionMapping, i); + + boolean isFirst = false, isReference; + + // Adding allele to corresponding gene + GeneInfo gene; + if ((gene = genes.get(geneName)) == null) { + // If gene doesn't exist - create it + genes.put(geneName, gene = new GeneInfo(geneName)); + // This allele is first for this gene + isFirst = true; + } + + // Calculating isReference flag + if (referenceAllelePattern == null) + isReference = isFirst; + else + isReference = referenceAllelePattern.matcher(rec.description).find(); + + // Creating allele info + AlleleInfo alleleInfo = new AlleleInfo(geneName, alleleName, seq, isFunctional, + isReference, referencePoints); + + // Checking if this allele is unique + if (gene.alleles.containsKey(alleleName)) { + errorOrException("Duplicate records for allele " + alleleName); + continue; + } + + // Adding allele to gene + gene.alleles.put(alleleName, alleleInfo); + + // Calculating severalReferenceAlleles flag + if (alleleInfo.isReference && gene.reference != null && gene.reference.isReference) + gene.severalReferenceAlleles = true; + + // If allele is first for tis gene, add it to reference slot + // Also reset this slot for first "reference" allele occurred + if (isFirst || (!gene.reference.isReference && alleleInfo.isReference)) + gene.reference = alleleInfo; + } + } + + private int getPosition(StringWithMapping seqWithPositionMapping, int refPointIndex) { + int referencePointPosition = parameters.getReferencePointPositions()[refPointIndex]; + + // Return -1 if information about this reference point is absent + if (referencePointPosition == -1) + return -1; + + // Convert references to the beginning or to the end of the sequence + if (referencePointPosition == BEGINNING_OF_SEQUENCE) + return 0; + if (referencePointPosition == END_OF_SEQUENCE) + return seqWithPositionMapping.getModifiedString().length(); + + if (referencePointPosition <= PATTERN_LINK_OFFSET) { + FastaLocusBuilderParameters.AnchorPointPositionInfo pointInfo = parameters.getAnchorPointPositionInfo(-referencePointPosition + PATTERN_LINK_OFFSET); + + // Unpacking information from object + referencePointPosition = pointInfo.position; + + // Matching pattern + Matcher matcher = pointInfo.nucleotidePatternP.matcher(seqWithPositionMapping.getModifiedString()); + if (matcher.find()) + return matcher.start(1); + + if (referencePointPosition == USE_ONLY_PATTERN) + // Don't try position guided search + return -1; + } + + // Normal position conversion + return seqWithPositionMapping.convertPosition(referencePointPosition); + } + + public void compile() { + // Compiling all genes one by one + List toRemove = new ArrayList<>(); + for (GeneInfo gene : genes.values()) + if (!gene.compile()) + toRemove.add(gene.geneName); + + // Removing genes that failed to compile + for (String r : toRemove) { + warning(r + " removed."); + genes.remove(r); + } + } + + public void printReport() { + if (parameters.doAlignAlleles()) { + finalReportStream.println(); + for (GeneInfo gene : genes.values()) { + String geneName = gene.geneName; + finalReportStream.println(geneName); + finalReportStream.println(StringUtil.chars('=', geneName.length())); + AlleleInfo ref = gene.finalList.get(0); + NucleotideSequence refSeqNt = ref.baseSequence; + + // Collecting noncoding ranges information + List noncodingRegionsL = new ArrayList<>(); + int[] orfRefPoints = ref.referencePoints.clone(); + TObjectIntMap refMapping = parameters.getReferencePointIndexMapping(); + for (GeneFeature noncodingFeature : GeneFeature.NONCODING_FEATURES) { + int from = refMapping.get(noncodingFeature.getFirstPoint()); + int to = refMapping.get(noncodingFeature.getLastPoint()); + if (from == -1 || to == -1 || ref.referencePoints[from] == -1 || ref.referencePoints[to] == -1) + continue; + + orfRefPoints[from] = -1; + orfRefPoints[to] = -1; + + noncodingRegionsL.add(new Range(ref.referencePoints[from], ref.referencePoints[to])); + } + Range[] noncodingRegions = noncodingRegionsL.toArray(new Range[noncodingRegionsL.size()]); + Arrays.sort(noncodingRegions, Range.COMPARATOR_BY_FROM); + for (int i = 0; i < orfRefPoints.length; i++) { + int offset = 0; + for (Range noncodingRegion : noncodingRegions) + if (noncodingRegion.getTo() < orfRefPoints[i]) + offset += noncodingRegion.length(); + orfRefPoints[i] = Math.max(-1, orfRefPoints[i] - offset); + } + NucleotideSequence refSeqNtORF = refSeqNt; + for (int i = noncodingRegions.length - 1; i >= 0; --i) { + Range range = noncodingRegions[i]; + refSeqNtORF = refSeqNtORF.getRange(0, range.getFrom()).concatenate(refSeqNtORF.getRange(range.getTo(), refSeqNtORF.size())); + } + + boolean translate = parameters.getTranslationReferencePointIndex() != -1 && + orfRefPoints[parameters.getTranslationReferencePointIndex()] != -1; + TranslationParameters translationParameters = null; + AminoAcidSequence refSeqAA = null; + if (translate) { + translationParameters = withIncompleteCodon(orfRefPoints[parameters.getTranslationReferencePointIndex()]); + refSeqAA = AminoAcidSequence.translate(refSeqNtORF, translationParameters); + } + + List> alignmentsNt = new ArrayList<>(); + List> alignmentsAA = new ArrayList<>(); + List alleleNamesNt = new ArrayList<>(), alleleNamesAA = new ArrayList<>(); + for (int i = 1; i < gene.finalList.size(); i++) { + AlleleInfo a = gene.finalList.get(i); + + Range refRange = new Range(ref.referencePoints[a.firstRefRefPoint], ref.referencePoints[a.lastRefRefPoint]); + Mutations absoluteMutations = a.mutations.move(refRange.getFrom()); + alignmentsNt.add(new Alignment<>(refSeqNt, absoluteMutations, refRange, + new Range(0, refRange.length() + a.mutations.getLengthDelta()), parameters.getScoring())); + alleleNamesNt.add(a.getFullName()); + + if (!translate || orfRefPoints[a.firstRefRefPoint] == -1 || orfRefPoints[a.lastRefRefPoint] == -1) + continue; + + //Range refRangeORF = new Range(orfRefPoints[a.firstRefRefPoint], orfRefPoints[a.lastRefRefPoint]); + Mutations aaMuts = MutationsUtil.nt2aa(refSeqNtORF, + absoluteMutations.removeMutationsInRanges(noncodingRegions), + translationParameters, 10); + if (aaMuts == null) + continue; + Range refRangeAA = new Range( + convertNtPositionToAA(orfRefPoints[a.firstRefRefPoint], refSeqNt.size(), translationParameters).aminoAcidPosition, + convertNtPositionToAA(orfRefPoints[a.lastRefRefPoint] - 1, refSeqNt.size(), translationParameters).aminoAcidPosition + 1); + alignmentsAA.add(new Alignment<>(refSeqAA, aaMuts, refRangeAA, + new Range(0, refRangeAA.length() + aaMuts.getLengthDelta()), 0)); + alleleNamesAA.add(a.getFullName()); + } + + // Nucleotide Alignment + MultiAlignmentHelper multiAlignmentHelper = + MultiAlignmentHelper.build(MultiAlignmentHelper.DOT_MATCH_SETTINGS, + new Range(ref.getFirstReferencePointPosition(), ref.getLastReferencePointPosition()), + ref.baseSequence, alignmentsNt.toArray(new Alignment[alignmentsNt.size()])); + multiAlignmentHelper.setSubjectLeftTitle(" " + ref.getFullName()); + + for (int i = 0; i < alignmentsNt.size(); i++) + multiAlignmentHelper.setQueryLeftTitle(i, " " + alleleNamesNt.get(i)); + VDJCAlignmentsFormatter.drawPoints(multiAlignmentHelper, new SeqPartitioning(refMapping, ref.referencePoints, false), VDJCAlignmentsFormatter.POINTS_FOR_GERMLINE); + for (MultiAlignmentHelper ah : multiAlignmentHelper.split(LINE_WIDTH, true)) { + finalReportStream.println(ah); + finalReportStream.println(); + } + + finalReportStream.println(); + + // Don't print additional blank line and AA alignments if this information is not available for this gene + if (!translate) + continue; + + finalReportStream.println(" **********"); + finalReportStream.println(); + + // AminoAcid Alignment + multiAlignmentHelper = + MultiAlignmentHelper.build(MultiAlignmentHelper.DOT_MATCH_SETTINGS, + new Range(0, refSeqAA.size()), + refSeqAA, alignmentsAA.toArray(new Alignment[alignmentsAA.size()])); + multiAlignmentHelper.setSubjectLeftTitle(" " + ref.getFullName()); + for (int i = 0; i < alignmentsAA.size(); i++) + multiAlignmentHelper.setQueryLeftTitle(i, " " + alleleNamesAA.get(i)); + VDJCAlignmentsFormatter.drawPoints(multiAlignmentHelper, new SeqPartitioning(refMapping, orfRefPoints, true), VDJCAlignmentsFormatter.POINTS_FOR_GERMLINE); + for (MultiAlignmentHelper ah : multiAlignmentHelper.split(LINE_WIDTH, true)) { + finalReportStream.println(ah); + finalReportStream.println(); + } + + finalReportStream.println(); + } + } + } + + public void writeAlleles(LociLibraryWriter writer) throws IOException { + for (GeneInfo gene : genes.values()) { + for (AlleleInfo alleleInfo : gene.finalList) { + if (alleleInfo.isReference) { + String accession = UUID.randomUUID().toString() + "-" + alleleInfo.alleleName; + writer.writeSequencePart(accession, 0, alleleInfo.baseSequence); + writer.writeAllele(parameters.getGeneType(), alleleInfo.alleleName, true, + alleleInfo.isFunctional, accession, alleleInfo.referencePoints, null, null, null); + } else + writer.writeAllele(parameters.getGeneType(), alleleInfo.alleleName, false, + alleleInfo.isFunctional, null, null, alleleInfo.reference.alleleName, + alleleInfo.mutations.getRAWMutations(), alleleInfo.getReferenceGeneFeature()); + } + } + } + + private static final class SeqPartitioning extends SequencePartitioning { + final TObjectIntMap refMapping; + final int[] referencePoints; + final boolean aa; + + public SeqPartitioning(TObjectIntMap refMapping, int[] referencePoints, boolean aa) { + this.refMapping = refMapping; + this.referencePoints = referencePoints; + this.aa = aa; + } + + @Override + public int getPosition(ReferencePoint referencePoint) { + int rp = refMapping.get(referencePoint.getWithoutOffset()); + if (rp == -1) + return -1; + rp = referencePoints[rp] + referencePoint.getOffset(); + if (rp < 0) + return -1; + return aa ? (rp + 2) / 3 : rp; + } + } + + private final class GeneInfo { + final String geneName; + final Map alleles = new HashMap<>(); + final List finalList = new ArrayList<>(); + AlleleInfo reference; + boolean severalReferenceAlleles = false; + + public GeneInfo(String geneName) { + this.geneName = geneName; + } + + public boolean compile() { + if (parameters.doAlignAlleles()) { + // Find reference allele + AlleleInfo reference = this.reference; + + // Checks + if (!reference.isReference && !parameters.firstOccurredAlleleIsReference()) { + errorOrException("No reference allele for gene " + geneName + ". Sipping."); + return false; + } + if (severalReferenceAlleles) { + errorOrException("Several reference alleles for " + geneName + ". Sipping."); + return false; + } + + reference.isReference = true; + + // Compiling final alleles list + finalList.add(reference); + for (AlleleInfo allele : alleles.values()) + if (allele != reference) { + allele.reference = reference; + NucleotideSequence seq1 = reference.baseSequence; + NucleotideSequence seq2 = allele.baseSequence; + int[] ref1 = reference.referencePoints; + int[] ref2 = allele.referencePoints; + MutationsBuilder mutations = new MutationsBuilder<>(NucleotideSequence.ALPHABET); + int prev1 = -1, prev2 = -1, curr1, curr2; + int firstRefRefPoint = -1, lastRefRefPoint = -1; + + for (int i = 0; i < ref1.length; i++) { + curr1 = ref1[i]; + curr2 = ref2[i]; + + if (curr1 == -1 || curr2 == -1) + continue; + + if (firstRefRefPoint == -1) + firstRefRefPoint = i; + lastRefRefPoint = i; + + if (prev1 == -1) { + prev1 = curr1; + prev2 = curr2; + continue; + } + + if (curr1 - prev1 == 0 && curr2 - prev2 == 0) + continue; + + Alignment alignment = Aligner.alignGlobal(parameters.getScoring(), + seq1.getRange(prev1, curr1), seq2.getRange(prev2, curr2)); + mutations.append(alignment.getAbsoluteMutations().move(prev1)); + prev1 = curr1; + prev2 = curr2; + } + + allele.firstRefRefPoint = firstRefRefPoint; + allele.lastRefRefPoint = lastRefRefPoint; + allele.mutations = mutations.createAndDestroy().move(-ref1[firstRefRefPoint]); + finalList.add(allele); + } + + Collections.sort(finalList, new Comparator() { + @Override + public int compare(AlleleInfo o1, AlleleInfo o2) { + if (o1.isReference) + return -1; + if (o2.isReference) + return 1; + return o1.alleleName.compareTo(o2.alleleName); + } + }); + + // Success + return true; + } else { + // Just creates final list + finalList.add(reference); + for (AlleleInfo allele : alleles.values()) + if (allele != reference) + finalList.add(allele); + return true; + } + } + } + + private final class AlleleInfo { + final String geneName, alleleName; + final NucleotideSequence baseSequence; + boolean isFunctional, isReference; + final int[] referencePoints; + int firstRefRefPoint, lastRefRefPoint; + AlleleInfo reference; + Mutations mutations; + + public AlleleInfo(String geneName, String alleleName, NucleotideSequence baseSequence, + boolean isFunctional, boolean isReference, int[] referencePoints) { + this.geneName = geneName; + this.alleleName = alleleName; + this.baseSequence = baseSequence; + this.isFunctional = isFunctional; + this.isReference = isReference; + this.referencePoints = referencePoints; + } + + public String getFullName() { + return alleleName + " [" + (isFunctional ? "F" : "P") + "]"; + } + + public int getFirstReferencePointPosition() { + for (int referencePoint : referencePoints) + if (referencePoint != -1) + return referencePoint; + return -1; + } + + public int getLastReferencePointPosition() { + int result = -1; + for (int referencePoint : referencePoints) + if (referencePoint != -1) + result = referencePoint; + return result; + } + + public GeneFeature getReferenceGeneFeature() { + ReferencePoint[] mapping = parameters.getIndexReferencePointMapping(); + return new GeneFeature(mapping[firstRefRefPoint], mapping[lastRefRefPoint]); + } + } +} diff --git a/src/main/java/com/milaboratory/mixcr/reference/builder/FastaLocusBuilderException.java b/src/main/java/com/milaboratory/mixcr/reference/builder/FastaLocusBuilderException.java new file mode 100644 index 000000000..a1a207d22 --- /dev/null +++ b/src/main/java/com/milaboratory/mixcr/reference/builder/FastaLocusBuilderException.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2014-2015, 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 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.reference.builder; + +/** + * Created by dbolotin on 13/11/15. + */ +public class FastaLocusBuilderException extends RuntimeException { + public FastaLocusBuilderException() { + } + + public FastaLocusBuilderException(String message) { + super(message); + } + + public FastaLocusBuilderException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/src/main/java/com/milaboratory/mixcr/reference/builder/FastaLocusBuilderParameters.java b/src/main/java/com/milaboratory/mixcr/reference/builder/FastaLocusBuilderParameters.java new file mode 100644 index 000000000..f320c779c --- /dev/null +++ b/src/main/java/com/milaboratory/mixcr/reference/builder/FastaLocusBuilderParameters.java @@ -0,0 +1,355 @@ +/* + * Copyright (c) 2014-2015, 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 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.reference.builder; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.milaboratory.core.alignment.AlignmentScoring; +import com.milaboratory.core.sequence.NucleotideSequence; +import com.milaboratory.mixcr.reference.GeneType; +import com.milaboratory.mixcr.reference.LociLibraryWriter; +import com.milaboratory.mixcr.reference.ReferencePoint; +import com.milaboratory.mixcr.reference.ReferenceUtil; +import gnu.trove.impl.Constants; +import gnu.trove.map.TObjectIntMap; +import gnu.trove.map.hash.TObjectIntHashMap; + +import java.io.IOException; +import java.util.Arrays; +import java.util.regex.Pattern; + +/** + * Parameters for {@link FastaLocusBuilder}. + */ +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, isGetterVisibility = JsonAutoDetect.Visibility.NONE, + getterVisibility = JsonAutoDetect.Visibility.NONE) +public final class FastaLocusBuilderParameters { + private final GeneType geneType; + private final String alleleNameExtractionPattern, functionalAllelePattern, referenceAllelePattern; + private final char paddingChar; + private final ReferencePoint frameBoundedAnchorPoint; + private final boolean firstOccurredAlleleIsReference; + private final AlignmentScoring scoring; + private final AnchorPointPositionInfo[] anchorPointPositions; + + // Util fields + @JsonIgnore + private final Pattern alleleNameExtractionPatternP; + @JsonIgnore + private final Pattern functionalGenePatternP; + @JsonIgnore + private final Pattern referenceAllelePatternP; + @JsonIgnore + private final int[] referencePointPositions; + @JsonIgnore + private final TObjectIntMap referencePointIndexMapping; + @JsonIgnore + private final ReferencePoint[] indexReferencePointMapping; + @JsonIgnore + private final int translationReferencePointIndex; + + @JsonCreator + public FastaLocusBuilderParameters(@JsonProperty("geneType") GeneType geneType, + @JsonProperty("alleleNameExtractionPattern") String alleleNameExtractionPattern, + @JsonProperty("functionalAllelePattern") String functionalAllelePattern, + @JsonProperty("referenceAllelePattern") String referenceAllelePattern, + @JsonProperty("paddingChar") char paddingChar, + @JsonProperty("frameBoundedAnchorPoint") ReferencePoint frameBoundedAnchorPoint, + @JsonProperty("firstOccurredAlleleIsReference") boolean firstOccurredAlleleIsReference, + @JsonProperty("scoring") AlignmentScoring scoring, + @JsonProperty("anchorPointPositions") AnchorPointPositionInfo... anchorPointPositions) { + this.geneType = geneType; + this.alleleNameExtractionPattern = alleleNameExtractionPattern; + this.functionalAllelePattern = functionalAllelePattern; + this.referenceAllelePattern = referenceAllelePattern; + this.paddingChar = paddingChar; + this.frameBoundedAnchorPoint = frameBoundedAnchorPoint; + this.firstOccurredAlleleIsReference = firstOccurredAlleleIsReference; + this.scoring = scoring; + this.anchorPointPositions = anchorPointPositions; + for (AnchorPointPositionInfo ap : anchorPointPositions) + if (ap.point.getGeneType() != geneType) { + throw new IllegalArgumentException("Anchor point " + ap.point + + " doesn't apply to " + geneType + " gene type."); + } + + // Calculating output fields + this.alleleNameExtractionPatternP = Pattern.compile(alleleNameExtractionPattern); + this.functionalGenePatternP = Pattern.compile(functionalAllelePattern); + this.referenceAllelePatternP = referenceAllelePattern == null ? null : Pattern.compile(referenceAllelePattern); + + // Calculating reference points positions + + // Getting information about basic anchor points count and offset by gene type + LociLibraryWriter.GeneTypeInfo info = LociLibraryWriter.getGeneTypeInfo(geneType, false); + int indexOfFirstPoint = info.indexOfFirstPoint; + + // Extracting frame bounded anchor point id + this.translationReferencePointIndex = frameBoundedAnchorPoint == null ? -1 : + ReferenceUtil.getReferencePointIndex(frameBoundedAnchorPoint) - indexOfFirstPoint; + + // Init + this.referencePointPositions = new int[info.size]; + this.indexReferencePointMapping = new ReferencePoint[info.size]; + this.referencePointIndexMapping = new TObjectIntHashMap<>(Constants.DEFAULT_CAPACITY, Constants.DEFAULT_LOAD_FACTOR, -1); + + // -1 == NA + Arrays.fill(this.referencePointPositions, -1); + // Filling array + for (int i = 0; i < anchorPointPositions.length; i++) { + AnchorPointPositionInfo ap = anchorPointPositions[i]; + // Reference points in allele-specific RP array are stored starting from first + // reference point that applies to allele's gene type, so index in allele specific + // array is calculated as globalRPIndex - indexOfFirstPointOfTHeGeneType + int index = ReferenceUtil.getReferencePointIndex(ap.point) - indexOfFirstPoint; + this.referencePointPositions[index] = ap.nucleotidePattern != null ? + -i + AnchorPointPositionInfo.PATTERN_LINK_OFFSET : ap.position; + this.referencePointIndexMapping.put(ap.point, index); + this.indexReferencePointMapping[index] = ap.point; + } + } + + public AnchorPointPositionInfo getAnchorPointPositionInfo(int id) { + return anchorPointPositions[id]; + } + + public GeneType getGeneType() { + return geneType; + } + + public Pattern getAlleleNameExtractionPattern() { + return alleleNameExtractionPatternP; + } + + public Pattern getFunctionalAllelePattern() { + return functionalGenePatternP; + } + + public Pattern getReferenceAllelePattern() { + return referenceAllelePatternP; + } + + public char getPaddingChar() { + return paddingChar; + } + + public int getTranslationReferencePointIndex() { + return translationReferencePointIndex; + } + + public boolean firstOccurredAlleleIsReference() { + return firstOccurredAlleleIsReference; + } + + public boolean doAlignAlleles() { + return scoring != null; + } + + public AlignmentScoring getScoring() { + return scoring; + } + + /** + * Returns positions of reference points formatted as final array that will be serialized to LociLibrary file. See + * implementation of {@link #FastaLocusBuilderParameters(GeneType, String, String, String, char, ReferencePoint, + * boolean, AlignmentScoring, AnchorPointPositionInfo...)} for details. + */ + public int[] getReferencePointPositions() { + return referencePointPositions; + } + + public TObjectIntMap getReferencePointIndexMapping() { + return referencePointIndexMapping; + } + + public ReferencePoint[] getIndexReferencePointMapping() { + return indexReferencePointMapping; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + FastaLocusBuilderParameters that = (FastaLocusBuilderParameters) o; + + if (paddingChar != that.paddingChar) return false; + if (firstOccurredAlleleIsReference != that.firstOccurredAlleleIsReference) return false; + if (geneType != that.geneType) return false; + if (alleleNameExtractionPattern != null ? !alleleNameExtractionPattern.equals(that.alleleNameExtractionPattern) : that.alleleNameExtractionPattern != null) + return false; + if (functionalAllelePattern != null ? !functionalAllelePattern.equals(that.functionalAllelePattern) : that.functionalAllelePattern != null) + return false; + if (referenceAllelePattern != null ? !referenceAllelePattern.equals(that.referenceAllelePattern) : that.referenceAllelePattern != null) + return false; + if (frameBoundedAnchorPoint != null ? !frameBoundedAnchorPoint.equals(that.frameBoundedAnchorPoint) : that.frameBoundedAnchorPoint != null) + return false; + if (scoring != null ? !scoring.equals(that.scoring) : that.scoring != null) return false; + // Probably incorrect - comparing Object[] arrays with Arrays.equals + return Arrays.equals(anchorPointPositions, that.anchorPointPositions); + + } + + @Override + public int hashCode() { + int result = geneType != null ? geneType.hashCode() : 0; + result = 31 * result + (alleleNameExtractionPattern != null ? alleleNameExtractionPattern.hashCode() : 0); + result = 31 * result + (functionalAllelePattern != null ? functionalAllelePattern.hashCode() : 0); + result = 31 * result + (referenceAllelePattern != null ? referenceAllelePattern.hashCode() : 0); + result = 31 * result + (int) paddingChar; + result = 31 * result + (frameBoundedAnchorPoint != null ? frameBoundedAnchorPoint.hashCode() : 0); + result = 31 * result + (firstOccurredAlleleIsReference ? 1 : 0); + result = 31 * result + (scoring != null ? scoring.hashCode() : 0); + result = 31 * result + Arrays.hashCode(anchorPointPositions); + return result; + } + + /** + * Represents information about reference point position in target FASTA file. + */ + @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, isGetterVisibility = JsonAutoDetect.Visibility.NONE, + getterVisibility = JsonAutoDetect.Visibility.NONE) + public static final class AnchorPointPositionInfo { + /** + * Special value for position field telling builder to assign this anchor point to the beginning of the input + * sequence + */ + public static final int BEGINNING_OF_SEQUENCE = Integer.MIN_VALUE; + /** + * Special value for position field telling builder to assign this anchor point to the end of the input + * sequence + */ + public static final int END_OF_SEQUENCE = Integer.MAX_VALUE; + /** + * Used to switch off position guided anchor point search + */ + public static final int USE_ONLY_PATTERN = Integer.MIN_VALUE + 1; + /** + * Used internally + */ + public static final int PATTERN_LINK_OFFSET = Integer.MIN_VALUE + 1024; + /** + * Name of anchor group in regex pattern + */ + //public static final String ANCHOR_GROUP_NAME = "anchor"; + final ReferencePoint point; + @JsonSerialize(using = PositionSerializer.class) + @JsonDeserialize(using = PositionDeserializer.class) + final int position; + + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) + final String nucleotidePattern; + + @JsonIgnore + final Pattern nucleotidePatternP; + + public AnchorPointPositionInfo(ReferencePoint point, int position) { + this(point, position, null); + } + + @JsonCreator + public AnchorPointPositionInfo(@JsonProperty("point") ReferencePoint point, + @JsonProperty("position") int position, + @JsonProperty("nucleotidePattern") String nucleotidePattern) { + if (!point.isBasicPoint()) + throw new IllegalArgumentException("Only basic reference points are supported."); + this.point = point; + this.position = position; + this.nucleotidePattern = nucleotidePattern; + this.nucleotidePatternP = nucleotidePattern == null ? null : Pattern.compile(nucleotidePattern, Pattern.CASE_INSENSITIVE); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + AnchorPointPositionInfo that = (AnchorPointPositionInfo) o; + + if (position != that.position) return false; + if (!point.equals(that.point)) return false; + return !(nucleotidePattern != null ? !nucleotidePattern.equals(that.nucleotidePattern) : that.nucleotidePattern != null); + + } + + @Override + public int hashCode() { + int result = point.hashCode(); + result = 31 * result + position; + result = 31 * result + (nucleotidePattern != null ? nucleotidePattern.hashCode() : 0); + return result; + } + } + + public static final class PositionSerializer extends JsonSerializer { + @Override + public void serialize(Integer value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { + if (value == AnchorPointPositionInfo.BEGINNING_OF_SEQUENCE) + jgen.writeString("begin"); + else if (value == AnchorPointPositionInfo.END_OF_SEQUENCE) + jgen.writeString("end"); + else if (value == AnchorPointPositionInfo.USE_ONLY_PATTERN) + jgen.writeString("no"); + else + jgen.writeNumber(value); + } + } + + public static final class PositionDeserializer extends JsonDeserializer { + @Override + public Integer deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { + switch (jp.getCurrentToken()) { + case VALUE_NUMBER_INT: + return jp.getIntValue(); + case VALUE_STRING: + String str = jp.getValueAsString(); + switch (str) { + case "begin": + return AnchorPointPositionInfo.BEGINNING_OF_SEQUENCE; + case "end": + return AnchorPointPositionInfo.END_OF_SEQUENCE; + case "no": + return AnchorPointPositionInfo.USE_ONLY_PATTERN; + } + } + throw new IllegalArgumentException("Wrong position."); + } + } +} diff --git a/src/main/java/com/milaboratory/mixcr/reference/builder/FastaLocusBuilderParametersBundle.java b/src/main/java/com/milaboratory/mixcr/reference/builder/FastaLocusBuilderParametersBundle.java new file mode 100644 index 000000000..68075fa84 --- /dev/null +++ b/src/main/java/com/milaboratory/mixcr/reference/builder/FastaLocusBuilderParametersBundle.java @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2014-2015, 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 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.reference.builder; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.milaboratory.mixcr.reference.GeneType; +import com.milaboratory.util.GlobalObjectMappers; + +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; + +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, isGetterVisibility = JsonAutoDetect.Visibility.NONE, + getterVisibility = JsonAutoDetect.Visibility.NONE) +@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +public final class FastaLocusBuilderParametersBundle { + private final FastaLocusBuilderParameters v, d, j, c; + + @JsonCreator + public FastaLocusBuilderParametersBundle(@JsonProperty("v") FastaLocusBuilderParameters v, + @JsonProperty("d") FastaLocusBuilderParameters d, + @JsonProperty("j") FastaLocusBuilderParameters j, + @JsonProperty("c") FastaLocusBuilderParameters c) { + if (v != null && v.getGeneType() != GeneType.Variable) + throw new IllegalArgumentException(); + if (d != null && d.getGeneType() != GeneType.Diversity) + throw new IllegalArgumentException(); + if (j != null && j.getGeneType() != GeneType.Joining) + throw new IllegalArgumentException(); + if (c != null && c.getGeneType() != GeneType.Constant) + throw new IllegalArgumentException(); + this.v = v; + this.d = d; + this.j = j; + this.c = c; + } + + public FastaLocusBuilderParameters getForGeneType(GeneType geneType) { + switch (geneType) { + case Variable: + return v; + case Diversity: + return v; + case Joining: + return v; + case Constant: + return v; + } + throw new IllegalArgumentException(); + } + + public FastaLocusBuilderParameters getV() { + return v; + } + + public FastaLocusBuilderParameters getD() { + return d; + } + + public FastaLocusBuilderParameters getJ() { + return j; + } + + public FastaLocusBuilderParameters getC() { + return c; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + FastaLocusBuilderParametersBundle that = (FastaLocusBuilderParametersBundle) o; + + if (v != null ? !v.equals(that.v) : that.v != null) return false; + if (d != null ? !d.equals(that.d) : that.d != null) return false; + if (j != null ? !j.equals(that.j) : that.j != null) return false; + return !(c != null ? !c.equals(that.c) : that.c != null); + + } + + @Override + public int hashCode() { + int result = v != null ? v.hashCode() : 0; + result = 31 * result + (d != null ? d.hashCode() : 0); + result = 31 * result + (j != null ? j.hashCode() : 0); + result = 31 * result + (c != null ? c.hashCode() : 0); + return result; + } + + public static FastaLocusBuilderParametersBundle getBuiltInBundleByName(String name) { + return builtIn.get(name); + } + + /** + * List of known parameters presets + */ + private static final Map builtIn; + + static { + Map map = null; + try { + InputStream is = FastaLocusBuilderParametersBundle.class.getClassLoader().getResourceAsStream("parameters/segment_importer_parameters.json"); + TypeReference> typeRef + = new TypeReference< + HashMap + >() { + }; + map = GlobalObjectMappers.ONE_LINE.readValue(is, typeRef); + } catch (IOException ioe) { + System.out.println("ERROR!"); + ioe.printStackTrace(); + } + builtIn = map; + } +} diff --git a/src/main/java/com/milaboratory/mixcr/reference/builder/ReferencePointsPositions.java b/src/main/java/com/milaboratory/mixcr/reference/builder/ReferencePointsPositions.java new file mode 100644 index 000000000..f50a09d33 --- /dev/null +++ b/src/main/java/com/milaboratory/mixcr/reference/builder/ReferencePointsPositions.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2014-2015, 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 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.reference.builder; + +import com.milaboratory.mixcr.reference.ReferencePoint; +import gnu.trove.impl.Constants; +import gnu.trove.map.hash.TObjectIntHashMap; + +public class ReferencePointsPositions { + final TObjectIntHashMap mapping = + new TObjectIntHashMap<>(Constants.DEFAULT_CAPACITY, + Constants.DEFAULT_LOAD_FACTOR, -1); + + public ReferencePointsPositions() { + } + + public void addMapping(ReferencePoint point, int position){ + if(!point.isBasicPoint()) + throw new IllegalArgumentException("Supports only basic anchor points."); + mapping.put(point, position); + } +} diff --git a/src/main/java/com/milaboratory/mixcr/reference/builder/StringWithMapping.java b/src/main/java/com/milaboratory/mixcr/reference/builder/StringWithMapping.java new file mode 100644 index 000000000..a2038066c --- /dev/null +++ b/src/main/java/com/milaboratory/mixcr/reference/builder/StringWithMapping.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2014-2015, 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 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.reference.builder; + +/** + * Created by dbolotin on 25/10/15. + */ +public final class StringWithMapping { + private final int[] originalToModifiedMapping; + private final String modifiedString; + + private StringWithMapping(int[] originalToModifiedMapping, String modifiedString) { + this.originalToModifiedMapping = originalToModifiedMapping; + this.modifiedString = modifiedString; + } + + public int convertPosition(int originalPosition) { + if (originalPosition >= originalToModifiedMapping.length) + return -1; + if (originalPosition < 0) + return convertPosition(originalToModifiedMapping.length + originalPosition); + return originalToModifiedMapping[originalPosition]; + } + + public String getModifiedString() { + return modifiedString; + } + + public static StringWithMapping removeSymbol(String originalString, char charToRemove) { + int modifiedStringLength = 0; + for (int i = 0; i < originalString.length(); i++) + if (originalString.charAt(i) != charToRemove) + ++modifiedStringLength; + char[] modifiedString = new char[modifiedStringLength]; + int[] mapping = new int[originalString.length()]; + int j = 0; + for (int i = 0; i < originalString.length(); i++) + if (originalString.charAt(i) != charToRemove) { + mapping[i] = j; + modifiedString[j++] = originalString.charAt(i); + } else { + mapping[i] = -1; + } + return new StringWithMapping(mapping, new String(modifiedString)); + } +} diff --git a/src/main/java/com/milaboratory/mixcr/util/AlignedStringsBuilder.java b/src/main/java/com/milaboratory/mixcr/util/AlignedStringsBuilder.java new file mode 100644 index 000000000..f4146df3e --- /dev/null +++ b/src/main/java/com/milaboratory/mixcr/util/AlignedStringsBuilder.java @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2014-2015, 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 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.util; + +import com.milaboratory.util.StringUtil; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public final class AlignedStringsBuilder { + final List> parts = new ArrayList<>(); + int spaceBetweenColumns = 1; + + public AlignedStringsBuilder() { + this.parts.add(new ArrayList()); + } + + public AlignedStringsBuilder cells(String... cellsContent) { + List row = parts.get(parts.size() - 1); + row.addAll(Arrays.asList(cellsContent)); + return this; + } + + public AlignedStringsBuilder row(String... cellsContent) { + cells(cellsContent); + newRow(); + return this; + } + + public AlignedStringsBuilder newRow() { + parts.add(new ArrayList()); + return this; + } + + public AlignedStringsBuilder setSpaceBetweenColumns(int spaceBetweenColumns) { + this.spaceBetweenColumns = spaceBetweenColumns; + return this; + } + + @Override + public String toString() { + int cols = 0; + for (List row : parts) + cols = Math.max(cols, row.size()); + int[] lengths = new int[cols]; + for (List row : parts) { + int i = 0; + for (String cell : row) { + lengths[i] = Math.max(lengths[i], cell.length()); + ++i; + } + } + for (int i = 0; i < lengths.length; i++) + lengths[i] += spaceBetweenColumns; + + StringBuilder builder = new StringBuilder(); + for (int k = 0; k < parts.size(); k++) { + List row = parts.get(k); + if (k == parts.size() - 1 && row.isEmpty()) + continue; + + int i = 0; + for (String cell : row) { + builder.append(cell); + if (i != row.size() - 1) + builder.append(StringUtil.spaces(lengths[i] - cell.length())); + ++i; + } + builder.append("\n"); + } + return builder.toString(); + } +} diff --git a/src/main/java/com/milaboratory/mixcr/util/RunMiXCR.java b/src/main/java/com/milaboratory/mixcr/util/RunMiXCR.java index c8f3afc89..2f00b0181 100644 --- a/src/main/java/com/milaboratory/mixcr/util/RunMiXCR.java +++ b/src/main/java/com/milaboratory/mixcr/util/RunMiXCR.java @@ -17,6 +17,7 @@ import com.milaboratory.mixcr.assembler.*; import com.milaboratory.mixcr.basictypes.CloneSet; import com.milaboratory.mixcr.basictypes.VDJCAlignments; +import com.milaboratory.mixcr.cli.ActionAlign; import com.milaboratory.mixcr.cli.AlignerReport; import com.milaboratory.mixcr.cli.CloneAssemblerReport; import com.milaboratory.mixcr.reference.*; @@ -113,10 +114,12 @@ public long getIndex(VDJCAlignmentResult r) { }))) { if (t.alignment != null) { t.alignment.setAlignmentsIndex(ind++); + t.alignment.setDescriptions(ActionAlign.extractDescription(t.read)); + t.alignment.setOriginalSequences(ActionAlign.extractNSeqs(t.read)); als.add(t.alignment); } } - return new AlignResult(parameters, reader.getNumberOfReads(), report, als, alleles); + return new AlignResult(parameters, reader.getNumberOfReads(), report, als, alleles, aligner); } } @@ -136,14 +139,16 @@ public static final class AlignResult { final AlignerReport report; final List alignments; final List usedAlleles; + final VDJCAligner aligner; public AlignResult(RunMiXCRAnalysis parameters, long totalNumberOfReads, AlignerReport report, - List alignments, List usedAlleles) { + List alignments, List usedAlleles, VDJCAligner aligner) { this.parameters = parameters; this.totalNumberOfReads = totalNumberOfReads; this.report = report; this.alignments = alignments; this.usedAlleles = usedAlleles; + this.aligner = aligner; } } diff --git a/src/main/java/com/milaboratory/mixcr/util/VersionInfoProvider.java b/src/main/java/com/milaboratory/mixcr/util/VersionInfoProvider.java new file mode 100644 index 000000000..2f642127e --- /dev/null +++ b/src/main/java/com/milaboratory/mixcr/util/VersionInfoProvider.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2014-2015, 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 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.util; + +import com.milaboratory.util.VersionInfo; + +public class VersionInfoProvider { + private VersionInfoProvider() { + } + + public static String getVersionString(OutputType outputType) { + VersionInfo milib = VersionInfo.getVersionInfoForArtifact("milib"); + VersionInfo mitools = VersionInfo.getVersionInfoForArtifact("mitools"); + VersionInfo mixcr = VersionInfo.getVersionInfoForArtifact("mixcr"); + + StringBuilder builder = new StringBuilder(); + + builder.append("MiXCR v") + .append(mixcr.getVersion()) + .append(" (built ") + .append(mixcr.getTimestamp()) + .append("; rev=") + .append(mixcr.getRevision()) + .append("; branch=") + .append(mixcr.getBranch()) + .append(")") + .append(outputType.delimiter); + + if (outputType.componentsWord) + builder.append("Components: ").append(outputType.delimiter); + + builder.append("MiLib v") + .append(milib.getVersion()) + .append(" (rev=").append(milib.getRevision()) + .append("; branch=").append(milib.getBranch()) + .append(")") + .append(outputType.delimiter) + .append("MiTools v") + .append(mitools.getVersion()) + .append(" (rev=").append(mitools.getRevision()) + .append("; branch=").append(mitools.getBranch()) + .append(")"); + + return builder.toString(); + } + + public enum OutputType { + ToConsole("\n", true), ToFile("; ", false); + final String delimiter; + final boolean componentsWord; + + OutputType(String delimiter, boolean componentsWord) { + this.delimiter = delimiter; + this.componentsWord = componentsWord; + } + } +} diff --git a/src/main/java/com/milaboratory/mixcr/vdjaligners/KGeneAlignmentParameters.java b/src/main/java/com/milaboratory/mixcr/vdjaligners/KGeneAlignmentParameters.java index 3a9ecb6c0..c9f4da779 100644 --- a/src/main/java/com/milaboratory/mixcr/vdjaligners/KGeneAlignmentParameters.java +++ b/src/main/java/com/milaboratory/mixcr/vdjaligners/KGeneAlignmentParameters.java @@ -31,24 +31,25 @@ import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; -import com.milaboratory.core.alignment.KAlignerParameters; +import com.milaboratory.core.alignment.batch.BatchAlignerWithBaseParameters; +import com.milaboratory.core.alignment.kaligner1.KAlignerParameters; import com.milaboratory.mixcr.reference.GeneFeature; @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, isGetterVisibility = JsonAutoDetect.Visibility.NONE, getterVisibility = JsonAutoDetect.Visibility.NONE) public final class KGeneAlignmentParameters extends GeneAlignmentParameters implements java.io.Serializable{ - private KAlignerParameters parameters; + private BatchAlignerWithBaseParameters parameters; @JsonCreator public KGeneAlignmentParameters( @JsonProperty("geneFeatureToAlign") GeneFeature geneFeatureToAlign, - @JsonProperty("parameters") KAlignerParameters parameters) { + @JsonProperty("parameters") BatchAlignerWithBaseParameters parameters) { super(geneFeatureToAlign); this.parameters = parameters; } - public KAlignerParameters getParameters() { + public BatchAlignerWithBaseParameters getParameters() { return parameters; } diff --git a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerAbstract.java b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerAbstract.java index e836f0c14..05f71bbaa 100644 --- a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerAbstract.java +++ b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerAbstract.java @@ -28,8 +28,10 @@ */ package com.milaboratory.mixcr.vdjaligners; -import com.milaboratory.core.alignment.KAligner; +import com.milaboratory.core.alignment.batch.AlignmentHit; +import com.milaboratory.core.alignment.batch.BatchAlignerWithBase; import com.milaboratory.core.io.sequence.SequenceRead; +import com.milaboratory.core.sequence.NucleotideSequence; import com.milaboratory.mixcr.reference.Allele; import com.milaboratory.mixcr.reference.GeneType; @@ -37,20 +39,22 @@ public abstract class VDJCAlignerAbstract extends VDJCAligner { protected volatile SingleDAligner singleDAligner = null; - protected volatile KAligner vAligner = null; - protected volatile KAligner jAligner = null; - protected volatile KAligner cAligner = null; + protected volatile BatchAlignerWithBase> vAligner = null; + protected volatile BatchAlignerWithBase> jAligner = null; + protected volatile BatchAlignerWithBase> cAligner = null; public VDJCAlignerAbstract(VDJCAlignerParameters parameters) { super(parameters); } - private KAligner createKAligner(GeneType geneType) { + @SuppressWarnings("unchecked") + private BatchAlignerWithBase> createKAligner(GeneType geneType) { if (parameters.getVJCGeneAlignerParameters(geneType) != null && !allelesToAlign.get(geneType).isEmpty()) { - KAligner aligner = new KAligner(parameters.getVJCGeneAlignerParameters(geneType).getParameters()); + BatchAlignerWithBase> aligner = + (BatchAlignerWithBase) parameters.getVJCGeneAlignerParameters(geneType).getParameters().createAligner(); for (Allele a : allelesToAlign.get(geneType)) - aligner.addReference(a.getFeature(parameters.getVJCGeneAlignerParameters(geneType).getGeneFeatureToAlign())); + aligner.addReference(a.getFeature(parameters.getVJCGeneAlignerParameters(geneType).getGeneFeatureToAlign()), a); return aligner; } return null; diff --git a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerPVFirst.java b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerPVFirst.java index f8c222ffa..e0adb0788 100644 --- a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerPVFirst.java +++ b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerPVFirst.java @@ -32,15 +32,14 @@ import com.milaboratory.core.Range; import com.milaboratory.core.alignment.Alignment; import com.milaboratory.core.alignment.AlignmentUtils; -import com.milaboratory.core.alignment.KAlignmentHit; -import com.milaboratory.core.alignment.KAlignmentResult; +import com.milaboratory.core.alignment.batch.AlignmentHit; +import com.milaboratory.core.alignment.batch.AlignmentResult; import com.milaboratory.core.io.sequence.PairedRead; import com.milaboratory.core.mutations.Mutations; import com.milaboratory.core.sequence.NucleotideSequence; import com.milaboratory.mixcr.basictypes.VDJCAlignments; import com.milaboratory.mixcr.basictypes.VDJCHit; import com.milaboratory.mixcr.reference.*; -import gnu.trove.map.hash.TIntObjectHashMap; import java.util.*; @@ -50,7 +49,7 @@ public VDJCAlignerPVFirst(VDJCAlignerParameters parameters) { } @Override - public VDJCAlignmentResult process(PairedRead input) { + public VDJCAlignmentResult process(final PairedRead input) { ensureInitialized(); PairedTarget[] targets = getTargets(input); @@ -132,17 +131,17 @@ PAlignmentHelper createInitialHelper(PairedTarget target) { } static final PreVDJCHit[] zeroArray = new PreVDJCHit[0]; - static final KAlignmentHit[] zeroKArray = new KAlignmentHit[0]; + static final AlignmentHit[] zeroKArray = new AlignmentHit[0]; final class PAlignmentHelper { final PairedTarget target; - final KAlignmentResult[] vResults; - KAlignmentResult[] jResults; + final AlignmentResult>[] vResults; + AlignmentResult>[] jResults; PairedHit[] vHits, jHits; VDJCHit[] dHits = null, cHits = null; PairedHit bestVHits; - PAlignmentHelper(PairedTarget target, KAlignmentResult... vResults) { + PAlignmentHelper(PairedTarget target, AlignmentResult>... vResults) { this.target = target; this.vResults = vResults; this.vHits = extractDoubleHits(vResults); @@ -182,7 +181,7 @@ void sortAndFilterBasedOnVEndScore() { * Calculates best V hits for each read */ void updateBestV() { - KAlignmentHit hit0 = null, hit1 = null; + AlignmentHit hit0 = null, hit1 = null; for (PairedHit hit : vHits) { if (hit.hit0 != null && @@ -220,14 +219,14 @@ private boolean hasVJOnTheSameTarget() { } /** - * Converts two KAlignmentResults to an array of paired hits (each paired hit for a particular V of J gene) + * Converts two AlignmentResults to an array of paired hits (each paired hit for a particular V of J gene) */ - PairedHit[] extractDoubleHits(KAlignmentResult... results) { - TIntObjectHashMap hits = new TIntObjectHashMap<>(); + final PairedHit[] extractDoubleHits(AlignmentResult>... results) { + Map hits = new HashMap<>(); addHits(hits, results[0], 0); addHits(hits, results[1], 1); - return hits.valueCollection().toArray(new PairedHit[hits.size()]); + return hits.values().toArray(new PairedHit[hits.size()]); } /** @@ -252,18 +251,21 @@ float score() { return score; } - void addHits(TIntObjectHashMap hits, KAlignmentResult result, int index) { + void addHits(Map hits, + AlignmentResult> result, + int index) { if (result == null) return; - for (KAlignmentHit hit : result) { + for (AlignmentHit hit : result.getHits()) { + AlleleId id = hit.getRecordPayload().getId(); PairedHit val = index == 0 ? null : - hits.get(hit.getId()); + hits.get(id); if (val == null) - hits.put(hit.getId(), val = new PairedHit()); + hits.put(id, val = new PairedHit()); val.set(index, hit); } @@ -283,8 +285,9 @@ VDJCAlignments createResult(long readId, VDJCAlignerPVFirst aligner) { /** * Preforms J alignment after V alignments are built. */ + @SuppressWarnings("unchecked") void performJAlignment() { - jHits = extractDoubleHits(jResults = new KAlignmentResult[]{ + jHits = extractDoubleHits(jResults = new AlignmentResult[]{ performJAlignment(0), performJAlignment(1) }); @@ -295,6 +298,7 @@ void performJAlignment() { /** * Perform final alignment of D and C genes on fully marked-up reads (with by V and J alignments). */ + @SuppressWarnings("unchecked") void performCDAlignment() { PairedHit bestVHit = vHits[0]; PairedHit bestJHit = jHits[0]; @@ -324,16 +328,16 @@ void performCDAlignment() { //Alignment of C gene if (cAligner != null) { - KAlignmentHit[][] results = new KAlignmentHit[2][]; + AlignmentHit[][] results = new AlignmentHit[2][]; Arrays.fill(results, zeroKArray); for (int i = 0; i < 2; ++i) { Alignment jAlignment = bestJHit.get(i) == null ? null : bestJHit.get(i).getAlignment(); if (jAlignment == null) continue; int from = jAlignment.getSequence2Range().getTo(); - List temp = cAligner.align(target.targets[i].getSequence(), from, + List> temp = cAligner.align(target.targets[i].getSequence(), from, target.targets[i].size()).getHits(); - results[i] = temp.toArray(new KAlignmentHit[temp.size()]); + results[i] = temp.toArray(new AlignmentHit[temp.size()]); } cHits = combine(getCAllelesToAlign(), parameters.getFeatureToAlign(GeneType.Constant), results); @@ -343,18 +347,16 @@ void performCDAlignment() { /** * Preforms J alignment for a single read */ - KAlignmentResult performJAlignment(int index) { - KAlignmentHit vHit = bestVHits.get(index); + AlignmentResult> performJAlignment(int index) { + AlignmentHit vHit = bestVHits.get(index); if (vHit == null) return null; - Allele allele = getVAllelesToAlign().get(vHit.getId()); - final NucleotideSequence targetSequence = target.targets[index].getSequence(); if (vHit.getAlignment().getSequence1Range().getTo() <= - allele.getPartitioning().getRelativePosition( + vHit.getRecordPayload().getPartitioning().getRelativePosition( parameters.getFeatureToAlign(GeneType.Variable), ReferencePoint.FR3Begin) || vHit.getAlignment().getSequence2Range().getTo() == targetSequence.size()) @@ -401,9 +403,9 @@ private PairedHit[] extractHits(float minScore, PairedHit[] result, int maxHits) public Set getPossibleDLoci(PairedHit[] vHits, PairedHit[] jHits) { EnumSet loci = EnumSet.noneOf(Locus.class); for (PairedHit vHit : vHits) - loci.add(getAllele(GeneType.Variable, vHit.getId()).getLocus()); + loci.add(vHit.getAllele().getLocus()); for (PairedHit jHit : jHits) - loci.add(getAllele(GeneType.Joining, jHit.getId()).getLocus()); + loci.add(jHit.getAllele().getLocus()); return loci; } @@ -411,12 +413,13 @@ public Set getPossibleDLoci(PairedHit[] vHits, PairedHit[] jHits) { * Converts array of "internal" PairedHits to a double array of KAlignmentHits to pass this value to a VDJAlignment * constructor (VDJAlignmentImmediate). */ - static KAlignmentHit[][] toArray(PairedHit[] hits) { - KAlignmentHit[][] hitsArray = new KAlignmentHit[hits.length][]; - for (int i = 0; i < hits.length; ++i) - hitsArray[i] = new KAlignmentHit[]{hits[i].hit0, hits[i].hit1}; - return hitsArray; - } + //@SuppressWarnings("unchecked") + //static AlignmentHit[][] toArray(PairedHit[] hits) { + // AlignmentHit[][] hitsArray = new AlignmentHit[hits.length][]; + // for (int i = 0; i < hits.length; ++i) + // hitsArray[i] = new AlignmentHit[]{hits[i].hit0, hits[i].hit1}; + // return hitsArray; + //} /** * Calculates normal "sum" score for each hit and sort hits according to this score. @@ -432,13 +435,16 @@ static void calculateScoreAndSort(PairedHit[] hits) { * read. */ static final class PairedHit { - KAlignmentHit hit0, hit1; + AlignmentHit hit0, hit1; float sumScore = -1, vEndScore = -1; PairedHit() { } - PairedHit(KAlignmentHit hit0, KAlignmentHit hit1, boolean unsafe) { + PairedHit(AlignmentHit hit0, + AlignmentHit hit1, + boolean unsafe) { + assert unsafe; this.hit0 = hit0; this.hit1 = hit1; } @@ -469,19 +475,19 @@ void calculateScore() { /** * To use this hit as an array of two single hits. */ - void set(int i, KAlignmentHit hit) { + void set(int i, AlignmentHit hit) { assert i == 0 || i == 1; if (i == 0) this.hit0 = hit; else this.hit1 = hit; - assert hit0 == null || hit1 == null || hit0.getId() == hit1.getId(); + assert hit0 == null || hit1 == null || hit0.getRecordPayload().getId().equals(hit1.getRecordPayload().getId()); } /** * To use this hit as an array of two single hits. */ - KAlignmentHit get(int i) { + AlignmentHit get(int i) { assert i == 0 || i == 1; if (i == 0) @@ -493,30 +499,30 @@ KAlignmentHit get(int i) { /** * Returns id of reference sequence */ - int getId() { - return hit0 == null ? hit1.getId() : hit0.getId(); + Allele getAllele() { + assert hit0 == null || hit1 == null || hit0.getRecordPayload() == hit1.getRecordPayload(); + return hit0 == null ? hit1.getRecordPayload() : hit0.getRecordPayload(); } /** * Converts this object to a VDJCHit */ + @SuppressWarnings("unchecked") VDJCHit convert(GeneType geneType, VDJCAlignerPVFirst aligner) { Alignment[] alignments = new Alignment[2]; - int alleleId = -1; + Allele allele = null; if (hit0 != null) { - alleleId = hit0.getId(); + allele = hit0.getRecordPayload(); alignments[0] = hit0.getAlignment(); } - if (hit1 != null) { - assert alleleId == -1 || hit1.getId() == alleleId; - alleleId = hit1.getId(); + assert allele == null || + allele == hit1.getRecordPayload(); + allele = hit1.getRecordPayload(); alignments[1] = hit1.getAlignment(); } - Allele allele = aligner.getAllele(geneType, alleleId); - return new VDJCHit(allele, alignments, aligner.getParameters().getFeatureToAlign(geneType)); } @@ -533,8 +539,8 @@ private static VDJCHit[] convert(PairedHit[] preHits, /** * Calculates alignment score only for FR3 and CDR3 part of V gene. */ - float calculateVEndScore(KAlignmentHit hit) { - final Allele allele = getVAllelesToAlign().get(hit.getId()); + float calculateVEndScore(AlignmentHit hit) { + final Allele allele = hit.getRecordPayload(); final int boundary = allele.getPartitioning().getRelativePosition( parameters.getFeatureToAlign(GeneType.Variable), ReferencePoint.FR3Begin); @@ -568,40 +574,49 @@ public int compare(PairedHit o1, PairedHit o2) { } }; - static VDJCHit[] combine(final List alleles, final GeneFeature feature, final KAlignmentHit[][] hits) { + @SuppressWarnings("unchecked") + static VDJCHit[] combine(final List alleles, final GeneFeature feature, final AlignmentHit[][] hits) { for (int i = 0; i < hits.length; i++) Arrays.sort(hits[i], ALLELE_ID_COMPARATOR); ArrayList result = new ArrayList<>(); - final int[] pointers = new int[hits.length]; + + // Sort-join-like algorithm + int i; + Allele minAllele; Alignment[] alignments; - int i, minId; + final int[] pointers = new int[hits.length]; while (true) { - minId = Integer.MAX_VALUE; + minAllele = null; for (i = 0; i < pointers.length; ++i) - if (pointers[i] < hits[i].length && minId > hits[i][pointers[i]].getId()) - minId = hits[i][pointers[i]].getId(); + if (pointers[i] < hits[i].length && (minAllele == null || minAllele.getId().compareTo( + hits[i][pointers[i]].getRecordPayload().getId()) > 0)) + minAllele = hits[i][pointers[i]].getRecordPayload(); - if (minId == Integer.MAX_VALUE) + // All pointers > hits.length + if (minAllele == null) break; + // Collecting alignments for minAllele alignments = new Alignment[hits.length]; for (i = 0; i < pointers.length; ++i) - if (pointers[i] < hits[i].length && minId == hits[i][pointers[i]].getId()) { + if (pointers[i] < hits[i].length && minAllele == hits[i][pointers[i]].getRecordPayload()) { alignments[i] = hits[i][pointers[i]].getAlignment(); ++pointers[i]; } - result.add(new VDJCHit(alleles.get(minId), alignments, feature)); + // Collecting results + result.add(new VDJCHit(minAllele, alignments, feature)); } VDJCHit[] vdjcHits = result.toArray(new VDJCHit[result.size()]); Arrays.sort(vdjcHits); return vdjcHits; } - public static final Comparator ALLELE_ID_COMPARATOR = new Comparator() { - @Override - public int compare(KAlignmentHit o1, KAlignmentHit o2) { - return Integer.compare(o1.getId(), o2.getId()); - } - }; + public static final Comparator> ALLELE_ID_COMPARATOR = + new Comparator>() { + @Override + public int compare(AlignmentHit o1, AlignmentHit o2) { + return o1.getRecordPayload().getId().compareTo(o2.getRecordPayload().getId()); + } + }; } diff --git a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerSJFirst.java b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerSJFirst.java index 67480a74a..4ec675337 100644 --- a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerSJFirst.java +++ b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerSJFirst.java @@ -28,8 +28,8 @@ */ package com.milaboratory.mixcr.vdjaligners; -import com.milaboratory.core.alignment.KAlignmentHit; -import com.milaboratory.core.alignment.KAlignmentResult; +import com.milaboratory.core.alignment.batch.AlignmentHit; +import com.milaboratory.core.alignment.batch.AlignmentResult; import com.milaboratory.core.io.sequence.SingleRead; import com.milaboratory.core.sequence.NSequenceWithQuality; import com.milaboratory.core.sequence.NucleotideSequence; @@ -46,7 +46,6 @@ import java.util.Set; public final class VDJCAlignerSJFirst extends VDJCAlignerAbstract { - public VDJCAlignerSJFirst(VDJCAlignerParameters parameters) { super(parameters); } @@ -118,7 +117,7 @@ private KVJResultsForSingle align(NSequenceWithQuality input, boolean isRC) { ensureInitialized(); - KAlignmentResult vResult, jResult; + AlignmentResult> vResult, jResult; switch (parameters.getVJAlignmentOrder()) { case VThenJ: @@ -155,12 +154,14 @@ private KVJResultsForSingle align(NSequenceWithQuality input, boolean isRC) { final class KVJResultsForSingle { final NSequenceWithQuality target; - final KAlignmentResult vResult, jResult; + final AlignmentResult> vResult, jResult; final boolean isRC; - KAlignmentHit[] vHits, jHits; + AlignmentHit[] vHits, jHits; VDJCHit[] dHits = null, cHits = null; - public KVJResultsForSingle(NSequenceWithQuality target, KAlignmentResult vResult, KAlignmentResult jResult, boolean isRC) { + public KVJResultsForSingle(NSequenceWithQuality target, + AlignmentResult> vResult, + AlignmentResult> jResult, boolean isRC) { this.target = target; this.vResult = vResult; this.jResult = jResult; @@ -188,9 +189,9 @@ public void alignDC() { if (cAligner != null) { int from = jResult.getBestHit().getAlignment().getSequence2Range().getTo(); - KAlignmentResult res = cAligner.align(sequence, from, target.size()); + AlignmentResult> res = cAligner.align(sequence, from, target.size()); - cHits = createHits(res.getHits(), getCAllelesToAlign(), parameters.getFeatureToAlign(GeneType.Constant)); + cHits = createHits(res.getHits(), parameters.getFeatureToAlign(GeneType.Constant)); } } @@ -217,12 +218,12 @@ public boolean hasVJHits() { jHits != null && jHits.length > 0; } - public VDJCHit[] getVHits(List alleles, GeneFeature feature) { - return createHits(vHits, alleles, feature); + public VDJCHit[] getVHits(GeneFeature feature) { + return createHits(vHits, feature); } - public VDJCHit[] getJHits(List alleles, GeneFeature feature) { - return createHits(jHits, alleles, feature); + public VDJCHit[] getJHits(GeneFeature feature) { + return createHits(jHits, feature); } public float sumScore() { @@ -240,20 +241,18 @@ public float sumScore() { public Set getPossibleDLoci() { EnumSet loci = EnumSet.noneOf(Locus.class); - for (KAlignmentHit vHit : vResult.getHits()) - loci.add(getAllele(GeneType.Variable, vHit.getId()).getLocus()); - for (KAlignmentHit jHit : jResult.getHits()) - loci.add(getAllele(GeneType.Joining, jHit.getId()).getLocus()); + for (AlignmentHit vHit : vResult.getHits()) + loci.add(vHit.getRecordPayload().getLocus()); + for (AlignmentHit jHit : jResult.getHits()) + loci.add(jHit.getRecordPayload().getLocus()); return loci; } public VDJCAlignments toVDJCAlignments(long inputId) { EnumMap hits = new EnumMap<>(GeneType.class); - hits.put(GeneType.Variable, getVHits(getVAllelesToAlign(), - parameters.getFeatureToAlign(GeneType.Variable))); - hits.put(GeneType.Joining, getJHits(getJAllelesToAlign(), - parameters.getFeatureToAlign(GeneType.Joining))); + hits.put(GeneType.Variable, getVHits(parameters.getFeatureToAlign(GeneType.Variable))); + hits.put(GeneType.Joining, getJHits(parameters.getFeatureToAlign(GeneType.Joining))); if (dHits != null) hits.put(GeneType.Diversity, dHits); @@ -265,30 +264,32 @@ public VDJCAlignments toVDJCAlignments(long inputId) { } } - public static VDJCHit[] createHits(KAlignmentHit[] kHits, List alleles, GeneFeature feature) { + public static VDJCHit[] createHits(AlignmentHit[] kHits, GeneFeature feature) { VDJCHit[] hits = new VDJCHit[kHits.length]; for (int i = 0; i < kHits.length; i++) - hits[i] = new VDJCHit(alleles.get(kHits[i].getId()), kHits[i].getAlignment(), feature); + hits[i] = new VDJCHit(kHits[i].getRecordPayload(), kHits[i].getAlignment(), feature); return hits; } - public static VDJCHit[] createHits(List kHits, List alleles, GeneFeature feature) { + public static VDJCHit[] createHits(List> kHits, GeneFeature feature) { VDJCHit[] hits = new VDJCHit[kHits.size()]; for (int i = 0; i < kHits.size(); i++) - hits[i] = new VDJCHit(alleles.get(kHits.get(i).getId()), kHits.get(i).getAlignment(), feature); + hits[i] = new VDJCHit(kHits.get(i).getRecordPayload(), kHits.get(i).getAlignment(), feature); return hits; } - private static KAlignmentHit[] extractHits(float minScore, KAlignmentResult result, int maxHits) { + private static AlignmentHit[] extractHits(float minScore, + AlignmentResult> result, + int maxHits) { int count = 0; - for (KAlignmentHit hit : result.getHits()) + for (AlignmentHit hit : result.getHits()) if (hit.getAlignment().getScore() > minScore) { if (++count >= maxHits) break; } else break; - KAlignmentHit[] res = new KAlignmentHit[count]; + AlignmentHit[] res = new AlignmentHit[count]; for (int i = 0; i < count; ++i) res[i] = result.getHits().get(i); diff --git a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerWithMerge.java b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerWithMerge.java index 278ab4aef..fcec85663 100644 --- a/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerWithMerge.java +++ b/src/main/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerWithMerge.java @@ -72,7 +72,7 @@ protected void init() { } @Override - public VDJCAlignmentResult process(PairedRead read) { + public VDJCAlignmentResult process(final PairedRead read) { PairedReadMergingResult merged = merger.process(read); if (merged.isSuccessful()) { VDJCAlignments alignment = singleAligner.process( diff --git a/src/main/resources/parameters/assembler_parameters.json b/src/main/resources/parameters/assembler_parameters.json index 0b0ffe5e1..9971eb8ae 100644 --- a/src/main/resources/parameters/assembler_parameters.json +++ b/src/main/resources/parameters/assembler_parameters.json @@ -1,6 +1,7 @@ { "default": { "assemblingFeatures": ["CDR3"], + "minimalClonalSequenceLength": 12, "cloneClusteringParameters": { "searchDepth": 2, "allowedMutationsInNRegions": 1, @@ -65,5 +66,76 @@ "badQualityThreshold": 20, "maxBadPointsPercent": 0.7, "mappingThreshold": "2of5" + }, + "default_affine": { + "assemblingFeatures": ["CDR3"], + "minimalClonalSequenceLength": 12, + "cloneClusteringParameters": { + "searchDepth": 2, + "allowedMutationsInNRegions": 1, + "searchParameters": "twoMismatchesOrIndels", + "clusteringFilter": { + "type": "relativeConcentration", + "specificMutationProbability": 1E-3 + } + }, + "cloneFactoryParameters": { + "vParameters": { + "featureToAlign": "VTranscript", + "relativeMinScore": 0.8, + "alignmentParameters": { + "scoring" : { + "type" : "affine", + "subsMatrix" : "simple(match = 10, mismatch = -19)", + "gapOpenPenalty" : -40, + "gapExtensionPenalty" : -11 + }, + "width": 500, + "stopPenalty": 0 + } + }, + "jParameters": { + "featureToAlign": "JRegion", + "relativeMinScore": 0.8, + "alignmentParameters": { + "scoring" : { + "type" : "affine", + "subsMatrix" : "simple(match = 10, mismatch = -19)", + "gapOpenPenalty" : -40, + "gapExtensionPenalty" : -11 + }, + "width": 500, + "stopPenalty": 0 + } + }, + "dParameters": { + "geneFeatureToAlign": "DRegion", + "absoluteMinScore": 25.0, + "relativeMinScore": 0.85, + "maxHits": 3, + "scoring" : { + "type" : "affine", + "subsMatrix" : "simple(match = 10, mismatch = -30)", + "gapOpenPenalty" : -40, + "gapExtensionPenalty" : -10 + } + }, + "cParameters": { + "featureToAlign": "CExon1", + "relativeMinScore": 0.8, + "alignmentParameters": { + "scoring": { + "type": "linear", + "subsMatrix": "simple(match = 5, mismatch = -9)", + "gapPenalty": -12 + }, + "width": 5 + } + } + }, + "addReadsCountOnClustering": false, + "badQualityThreshold": 20, + "maxBadPointsPercent": 0.7, + "mappingThreshold": "2of5" } } \ No newline at end of file diff --git a/src/main/resources/parameters/segment_importer_parameters.json b/src/main/resources/parameters/segment_importer_parameters.json new file mode 100644 index 000000000..32238b632 --- /dev/null +++ b/src/main/resources/parameters/segment_importer_parameters.json @@ -0,0 +1,104 @@ +{ + "imgt": { + "v": { + "geneType": "Variable", + "alleleNameExtractionPattern": "^[^\\|]+\\|([^\\|]+)", + "functionalAllelePattern": "^[^\\|]+\\|[^\\|]+\\|[^\\|]+\\|[\\(\\[]?F", + "referenceAllelePattern": "^[^\\|]+\\|[^\\|]+\\*01", + "paddingChar": ".", + "frameBoundedAnchorPoint": "FR1Begin", + "firstOccurredAlleleIsReference": true, + "scoring": { + "type": "affine", + "subsMatrix": "simple(match = 1, mismatch = -4)", + "gapOpenPenalty": -11, + "gapExtensionPenalty": -2 + }, + "anchorPointPositions": [ + { + "point": "FR1Begin", + "position": 0 + }, + { + "point": "CDR1Begin", + "position": 78 + }, + { + "point": "FR2Begin", + "position": 114 + }, + { + "point": "CDR2Begin", + "position": 165 + }, + { + "point": "FR3Begin", + "position": 195 + }, + { + "point": "CDR3Begin", + "position": 309 + }, + { + "point": "VEnd", + "position": "end" + } + ] + }, + "d": { + "geneType": "Diversity", + "alleleNameExtractionPattern": "^[^\\|]+\\|([^\\|]+)", + "functionalAllelePattern": "^[^\\|]+\\|[^\\|]+\\|[^\\|]+\\|[\\(\\[]?F", + "referenceAllelePattern": "^[^\\|]+\\|[^\\|]+\\*01", + "paddingChar": ".", + "frameBoundedAnchorPoint": null, + "firstOccurredAlleleIsReference": true, + "scoring": { + "type": "affine", + "subsMatrix": "simple(match = 1, mismatch = -4)", + "gapOpenPenalty": -21, + "gapExtensionPenalty": -2 + }, + "anchorPointPositions": [ + { + "point": "DBegin", + "position": 0 + }, + { + "point": "DEnd", + "position": "end" + } + ] + }, + "j": { + "geneType": "Joining", + "alleleNameExtractionPattern": "^[^\\|]+\\|([^\\|]+)", + "functionalAllelePattern": "^[^\\|]+\\|[^\\|]+\\|[^\\|]+\\|[\\(\\[]?F", + "referenceAllelePattern": "^[^\\|]+\\|[^\\|]+\\*01", + "paddingChar": ".", + "frameBoundedAnchorPoint": "FR4Begin", + "firstOccurredAlleleIsReference": true, + "scoring": { + "type": "affine", + "subsMatrix": "simple(match = 1, mismatch = -4)", + "gapOpenPenalty": -21, + "gapExtensionPenalty": -2 + }, + "anchorPointPositions": [ + { + "point": "JBegin", + "position": 0 + }, + { + "point": "FR4Begin", + "position": -31, + "nucleotidePattern": "(?:TGG|TT[TC])()GG[ATGC]{4}GG[ATGC]" + }, + { + "point": "FR4End", + "position": "end" + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/parameters/vdjcaligner_parameters.json b/src/main/resources/parameters/vdjcaligner_parameters.json index 8a8914445..ac7e27b07 100644 --- a/src/main/resources/parameters/vdjcaligner_parameters.json +++ b/src/main/resources/parameters/vdjcaligner_parameters.json @@ -103,6 +103,124 @@ "relativeMinVScore": 0.7, "readsLayout": "Opposite" }, + "kaligner2": { + "vParameters": { + "geneFeatureToAlign": "VRegion", + "parameters":{ + "type" : "kaligner2", + "mapperNValue" : 8, + "mapperKValue" : 1, + "floatingLeftBound" : true, + "floatingRightBound" : true, + "mapperAbsoluteMinClusterScore" : 102, + "mapperExtraClusterScore" : -38, + "mapperMatchScore" : 95, + "mapperMismatchScore" : -14, + "mapperOffsetShiftScore" : -82, + "mapperSlotCount" : 6, + "mapperMaxClusters" : 4, + "mapperMaxClusterIndels" : 4, + "mapperKMersPerPosition" : 4, + "mapperAbsoluteMinScore" : 100, + "mapperRelativeMinScore" : 0.8, + "mapperMinSeedsDistance" : 5, + "mapperMaxSeedsDistance" : 5, + "alignmentStopPenalty" : 0, + "absoluteMinScore" : 150, + "relativeMinScore" : 0.8, + "maxHits" : 3, + "scoring" : { + "type" : "affine", + "subsMatrix" : "simple(match = 10, mismatch = -19)", + "gapOpenPenalty" : -40, + "gapExtensionPenalty" : -11 + } + } + }, + "dParameters": { + "geneFeatureToAlign": "DRegion", + "absoluteMinScore": 25.0, + "relativeMinScore": 0.85, + "maxHits": 3, + "scoring": { + "type": "linear", + "subsMatrix": "simple(match = 5, mismatch = -9)", + "gapPenalty": -12 + } + }, + "jParameters": { + "geneFeatureToAlign": "JRegion", + "parameters": { + "type" : "kaligner2", + "mapperNValue" : 8, + "mapperKValue" : 1, + "floatingLeftBound" : true, + "floatingRightBound" : true, + "mapperAbsoluteMinClusterScore" : 102, + "mapperExtraClusterScore" : -38, + "mapperMatchScore" : 95, + "mapperMismatchScore" : -14, + "mapperOffsetShiftScore" : -82, + "mapperSlotCount" : 6, + "mapperMaxClusters" : 4, + "mapperMaxClusterIndels" : 4, + "mapperKMersPerPosition" : 4, + "mapperAbsoluteMinScore" : 100, + "mapperRelativeMinScore" : 0.8, + "mapperMinSeedsDistance" : 5, + "mapperMaxSeedsDistance" : 5, + "alignmentStopPenalty" : 0, + "absoluteMinScore" : 150, + "relativeMinScore" : 0.8, + "maxHits" : 3, + "scoring" : { + "type" : "affine", + "subsMatrix" : "simple(match = 10, mismatch = -19)", + "gapOpenPenalty" : -40, + "gapExtensionPenalty" : -11 + } + } + }, + "cParameters": { + "geneFeatureToAlign": "CExon1", + "parameters": { + "mapperKValue": 5, + "floatingLeftBound": false, + "floatingRightBound": false, + "mapperAbsoluteMinScore": 1.5, + "mapperRelativeMinScore": 0.75, + "mapperMatchScore": 1.0, + "mapperMismatchPenalty": -0.1, + "mapperOffsetShiftPenalty": -0.3, + "mapperMinSeedsDistance": 4, + "mapperMaxSeedsDistance": 10, + "minAlignmentLength": 15, + "maxAdjacentIndels": 2, + "alignmentStopPenalty": -1000, + "absoluteMinScore": 40.0, + "relativeMinScore": 0.87, + "maxHits": 7, + "scoring": { + "type": "linear", + "subsMatrix": "simple(match = 5, mismatch = -9)", + "gapPenalty": -12 + } + } + }, + "vjAlignmentOrder": "VThenJ", + "includeDScore": false, + "includeCScore": false, + "mergerParameters": { + "qualityMergingAlgorithm" : "SumSubtraction", + "minimalOverlap": 17, + "minimalIdentity": 0.9 + }, + "minSumScore": 120.0, + "maxHits": 5, + "relativeMinVFR3CDR3Score": 0.7, + "relativeMinVScore": 0.7, + "readsLayout": "Opposite" + }, "rna-seq": { "vParameters": { "geneFeatureToAlign": "VTranscriptWithout5UTR", diff --git a/src/test/java/com/milaboratory/mixcr/assembler/CloneAssemblerParametersTest.java b/src/test/java/com/milaboratory/mixcr/assembler/CloneAssemblerParametersTest.java index 0dba095cf..149ebb784 100644 --- a/src/test/java/com/milaboratory/mixcr/assembler/CloneAssemblerParametersTest.java +++ b/src/test/java/com/milaboratory/mixcr/assembler/CloneAssemblerParametersTest.java @@ -51,7 +51,7 @@ public void test1() throws Exception { null, new DAlignerParameters(GeneFeature.DRegion, 30.0f, 0.85f, 3, AffineGapAlignmentScoring.getNucleotideBLASTScoring()) ); - CloneAssemblerParameters params = new CloneAssemblerParameters(new GeneFeature[]{GeneFeature.FR1, GeneFeature.CDR3}, + CloneAssemblerParameters params = new CloneAssemblerParameters(new GeneFeature[]{GeneFeature.FR1, GeneFeature.CDR3}, 12, new CloneClusteringParameters(2, 1, TreeSearchParameters.ONE_MISMATCH, new RelativeConcentrationFilter(1.0E-6)), factoryParameters, true, (byte) 20, .8, "2"); @@ -78,7 +78,7 @@ public void test2() throws Exception { null, new DAlignerParameters(GeneFeature.DRegion, 30.0f, 0.85f, 3, AffineGapAlignmentScoring.getNucleotideBLASTScoring()) ); - CloneAssemblerParameters params = new CloneAssemblerParameters(new GeneFeature[]{GeneFeature.FR1, GeneFeature.CDR3}, + CloneAssemblerParameters params = new CloneAssemblerParameters(new GeneFeature[]{GeneFeature.FR1, GeneFeature.CDR3}, 12, new CloneClusteringParameters(2, 1, TreeSearchParameters.ONE_MISMATCH, new RelativeConcentrationFilter(1.0E-6)), factoryParameters, true, (byte) 20, .8, "2of6"); diff --git a/src/test/java/com/milaboratory/mixcr/assembler/CloneAssemblerRunnerTest.java b/src/test/java/com/milaboratory/mixcr/assembler/CloneAssemblerRunnerTest.java index 7ed8d171f..3855224f4 100644 --- a/src/test/java/com/milaboratory/mixcr/assembler/CloneAssemblerRunnerTest.java +++ b/src/test/java/com/milaboratory/mixcr/assembler/CloneAssemblerRunnerTest.java @@ -80,7 +80,7 @@ private static CloneSet runFullPipeline(String... fastqFiles) throws IOException VDJCAligner aligner = fastqFiles.length == 1 ? new VDJCAlignerSJFirst(alignerParameters) : new VDJCAlignerWithMerge(alignerParameters); InputStream sample = LociLibraryReader.class.getClassLoader().getResourceAsStream("reference/mi.ll"); - LociLibrary library = LociLibraryReader.read(sample); + LociLibrary library = LociLibraryReader.read(sample, true); for (Allele allele : library.getLocus(Species.HomoSapiens, Locus.IGH).getAllAlleles()) if (alignerParameters.containsRequiredFeature(allele)) aligner.addAllele(allele); @@ -119,7 +119,7 @@ private static CloneSet runFullPipeline(String... fastqFiles) throws IOException ); CloneAssemblerParameters assemblerParameters = new CloneAssemblerParameters( - new GeneFeature[]{GeneFeature.CDR3}, + new GeneFeature[]{GeneFeature.CDR3}, 12, new CloneClusteringParameters(2, 1, TreeSearchParameters.ONE_MISMATCH, new RelativeConcentrationFilter(1.0E-6)), factoryParameters, true, (byte) 20, .8, "2 of 6"); diff --git a/src/test/java/com/milaboratory/mixcr/cli/ActionAssembleTest.java b/src/test/java/com/milaboratory/mixcr/cli/ActionAssembleTest.java new file mode 100644 index 000000000..31c6db8c6 --- /dev/null +++ b/src/test/java/com/milaboratory/mixcr/cli/ActionAssembleTest.java @@ -0,0 +1,197 @@ +package com.milaboratory.mixcr.cli; + +import org.junit.Test; +import org.mapdb.*; + +import java.io.*; +import java.util.*; + +/** + * Created by poslavsky on 05/10/15. + */ +public class ActionAssembleTest implements Serializable { + static class obj implements Serializable { + final int a, b; + + public obj(int a, int b) { + this.a = a; + this.b = b; + } + + @Override + public String toString() { + return "a = " + a + " b = " + b; + } + } + + static class ser0 implements Serializer { + @Override + public void serialize(DataOutput out, obj value) throws IOException { + out.writeInt(value.a); + out.writeInt(value.b); + } + + @Override + public obj deserialize(DataInput in, int available) throws IOException { + int a = in.readInt(); + int b = in.readInt(); + return new obj(a, b); + } + + @Override + public int fixedSize() { + return 8; + } + } + + static class ser extends BTreeKeySerializer implements Serializable { + final Comparator comparator; + + public ser(Comparator comparator) { + this.comparator = comparator; + } + + @Override + public void serialize(DataOutput out, int start, int end, Object[] keys) throws IOException { + for (int i = start; i < end; ++i) { + out.writeInt(((obj) keys[i]).a); + out.writeInt(((obj) keys[i]).b); + } + } + + @Override + public Object[] deserialize(DataInput in, int start, int end, int size) throws IOException { + Object[] objs = new Object[size]; + for (int i = start; i < end; ++i) { + int a = in.readInt(); + int b = in.readInt(); + objs[i] = new obj(a, b); + } + return objs; + } + + @Override + public Comparator getComparator() { + return comparator; + } + } + + static class compa implements Comparator, Serializable { + @Override + public int compare(obj o1, obj o2) { + int compare = Integer.compare(o1.a, o2.a); + return compare == 0 ? Integer.compare(o1.b, o2.b) : compare; + } + + @Override + public boolean equals(Object a) { + return a instanceof compa; + } + } + + static class compb implements Comparator, Serializable { + @Override + public int compare(obj o1, obj o2) { + int compare = Integer.compare(o1.b, o2.b); + return compare == 0 ? Integer.compare(o1.a, o2.a) : compare; + } + + @Override + public boolean equals(Object a) { + return a instanceof compb; + } + } + + @Test + public void test1() throws Exception { + + File f = File.createTempFile("mapdb", "temp"); + f.delete(); + + DB db = DBMaker + .newFileDB(f) + .transactionDisable() + .make(); + + compa compa = new compa(); + compb compb = new compb(); + + final Random rnd = new Random(); + final int n = 1_000_000; + class it implements Iterator, Serializable { + int i = 0; + + @Override + public boolean hasNext() { + return i < n; + } + + @Override + public obj next() { + ++i; + return new obj(rnd.nextInt(10000), rnd.nextInt(10000)); + } + + @Override + public void remove() { + } + } + Iterator sorta = Pump.sort(new it(), + true, 50000, + Collections.reverseOrder(compa), //reverse order comparator + new ser0() + ); + Iterator sortb = Pump.sort(new it(), + true, 50000, + Collections.reverseOrder(compb), //reverse order comparator + new ser0() + ); + +// for (int i = 0; i <= n; ++i) { +// obj obj = new obj(rnd.nextInt(10000), rnd.nextInt(10000)); +// setA.add(obj); +// setB.add(obj); +// } + NavigableSet setA = db + .createTreeSet("setA") + .pumpSource(sorta) + .serializer(new ser(compa)) + .comparator(compa) + .makeOrGet(); + + NavigableSet setB = db + .createTreeSet("setB") + .pumpSource(sortb) + .serializer(new ser(compb)) + .comparator(compb) + .makeOrGet(); + + db.commit(); + db.close(); + + db = DBMaker.newFileDB(f) + .transactionDisable() + .make(); + + setA = db.getTreeSet("setA"); + setB = db.getTreeSet("setB"); + +// int i = 0; +// for (obj obj : setA.subSet(new obj(0, 0), new obj(10, 10))) { +// Assert.assertEquals(obj.a, i++); +//// Assert.assertEquals(obj.a + obj.b, n); +// } +// +// i = 0; +// for (obj obj : setB.subSet(new obj(0, 0), new obj(10, 10))) { +// Assert.assertEquals(obj.b, i++); +//// Assert.assertEquals(obj.a + obj.b, n); +// } + + System.out.println(setA.size()); + System.out.println(setB.size()); + + db.close(); + f.delete(); + } +} \ No newline at end of file diff --git a/src/test/java/com/milaboratory/mixcr/cli/JsonOverriderTest.java b/src/test/java/com/milaboratory/mixcr/cli/JsonOverriderTest.java index 1d913b5e9..79d1e76a1 100644 --- a/src/test/java/com/milaboratory/mixcr/cli/JsonOverriderTest.java +++ b/src/test/java/com/milaboratory/mixcr/cli/JsonOverriderTest.java @@ -30,7 +30,7 @@ import com.milaboratory.core.alignment.AffineGapAlignmentScoring; import com.milaboratory.core.alignment.BandedAlignerParameters; -import com.milaboratory.core.alignment.KAlignerParameters; +import com.milaboratory.core.alignment.kaligner1.KAlignerParameters; import com.milaboratory.core.alignment.LinearGapAlignmentScoring; import com.milaboratory.core.sequence.NucleotideSequence; import com.milaboratory.core.tree.TreeSearchParameters; @@ -45,10 +45,6 @@ import java.util.HashMap; import java.util.Map; -import static com.milaboratory.mixcr.reference.GeneFeature.Exon1; -import static com.milaboratory.mixcr.reference.GeneFeature.V5UTR; -import static com.milaboratory.mixcr.reference.GeneFeature.VExon2; - public class JsonOverriderTest { @Test public void test1() throws Exception { @@ -99,7 +95,7 @@ public void testArray1() throws Exception { null, new DAlignerParameters(GeneFeature.DRegion, 30.0f, 0.85f, 3, AffineGapAlignmentScoring.getNucleotideBLASTScoring()) ); - CloneAssemblerParameters params = new CloneAssemblerParameters(new GeneFeature[]{GeneFeature.FR1, GeneFeature.CDR3}, + CloneAssemblerParameters params = new CloneAssemblerParameters(new GeneFeature[]{GeneFeature.FR1, GeneFeature.CDR3},12, new CloneClusteringParameters(2, 1, TreeSearchParameters.ONE_MISMATCH, new RelativeConcentrationFilter(1.0E-6)), factoryParameters, true, (byte) 20, .8, "2of6"); @@ -108,7 +104,7 @@ null, new DAlignerParameters(GeneFeature.DRegion, 30.0f, 0.85f, 3, AffineGapAlig CloneAssemblerParameters.class, "assemblingFeatures=[CDR1(-5,+6),CDR2]"); - CloneAssemblerParameters expected = new CloneAssemblerParameters(new GeneFeature[]{new GeneFeature(GeneFeature.CDR1, -5, +6), GeneFeature.CDR2}, + CloneAssemblerParameters expected = new CloneAssemblerParameters(new GeneFeature[]{new GeneFeature(GeneFeature.CDR1, -5, +6), GeneFeature.CDR2},12, new CloneClusteringParameters(2, 1, TreeSearchParameters.ONE_MISMATCH, new RelativeConcentrationFilter(1.0E-6)), factoryParameters, true, (byte) 20, .8, "2of6"); @@ -126,7 +122,7 @@ public void testCloneFactoryParameters2() throws Exception { null, new DAlignerParameters(GeneFeature.DRegion, 30.0f, 0.85f, 3, AffineGapAlignmentScoring.getNucleotideBLASTScoring()) ); - CloneAssemblerParameters params = new CloneAssemblerParameters(new GeneFeature[]{GeneFeature.FR1, GeneFeature.CDR3}, + CloneAssemblerParameters params = new CloneAssemblerParameters(new GeneFeature[]{GeneFeature.FR1, GeneFeature.CDR3},12, new CloneClusteringParameters(2, 1, TreeSearchParameters.ONE_MISMATCH, new RelativeConcentrationFilter(1.0E-6)), factoryParameters, true, (byte) 20, .8, "2of6"); diff --git a/src/test/java/com/milaboratory/mixcr/reference/LociLibraryIOTest.java b/src/test/java/com/milaboratory/mixcr/reference/LociLibraryIOTest.java index 9a20f67ed..641414dc0 100644 --- a/src/test/java/com/milaboratory/mixcr/reference/LociLibraryIOTest.java +++ b/src/test/java/com/milaboratory/mixcr/reference/LociLibraryIOTest.java @@ -28,7 +28,7 @@ */ package com.milaboratory.mixcr.reference; -import com.milaboratory.core.sequence.AminoAcidSequence; +import com.milaboratory.core.mutations.Mutations; import com.milaboratory.core.sequence.NucleotideSequence; import org.junit.Assert; import org.junit.Ignore; @@ -62,14 +62,16 @@ public void test(boolean compressed) throws Exception { writer.writeCommonSpeciesName(Species.HomoSapiens, "hsa"); writer.writeSequencePart("A1", 0, new NucleotideSequence("ATTAGACAATTAGACA"), compressed); writer.writeBeginOfLocus(Species.HomoSapiens, Locus.TRB, uuid); - writer.writeAllele(GeneType.Joining, "TRBJ2-4*01", true, true, "A1", new int[]{1, 5, 8}, null, null); + writer.writeAllele(GeneType.Joining, "TRBJ2-4*01", true, true, "A1", new int[]{1, 5, 8}, null, null, null); + writer.writeAllele(GeneType.Joining, "TRBJ2-4*02", false, true, null, null, "TRBJ2-4*01", + Mutations.decodeNuc("ST1G").getRAWMutations(), GermlineJCDR3Part); writer.writeMetaInfo("C", "D"); writer.writeEndOfLocus(); ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); //Testing library - LociLibrary library = LociLibraryReader.read(bis); + LociLibrary library = LociLibraryReader.read(bis, false); assertEquals("B", library.getProperty("G")); //Testing container @@ -95,6 +97,13 @@ public void test(boolean compressed) throws Exception { assertTrue(allele.isReference()); assertEquals(new NucleotideSequence("TTAG"), allele.getFeature(GermlineJCDR3Part)); + + allele = container.getAllele("TRBJ2-4*02"); + assertNotNull(allele); + assertTrue(allele.isFunctional()); + assertFalse(allele.isReference()); + assertEquals(new NucleotideSequence("TGAG"), allele.getFeature(GermlineJCDR3Part)); + //TODO: uncomment after fix for FR4 //assertEquals(new NucleotideSequence("ACA"), allele.getFeature(GeneFeature.FR4)); //assertEquals(new NucleotideSequence("TTAGACA"), allele.getFeature(GeneFeature.JRegion)); @@ -103,7 +112,7 @@ public void test(boolean compressed) throws Exception { @Test public void test3ReadLL() throws Exception { InputStream sample = LociLibraryReader.class.getClassLoader().getResourceAsStream("reference/mi.ll"); - LociLibrary library = LociLibraryReader.read(sample); + LociLibrary library = LociLibraryReader.read(sample, false); Assert.assertTrue(library.allAlleles.size() > 100); Allele allele = library.allAlleles.iterator().next(); Assert.assertTrue(allele.getPartitioning() != null); @@ -112,11 +121,12 @@ public void test3ReadLL() throws Exception { @Test public void test3ReadLL1() throws Exception { InputStream sample = LociLibraryReader.class.getClassLoader().getResourceAsStream("reference/mi.ll"); - LociLibrary library = LociLibraryReader.read(sample); - for (Allele allele : library.getAllAlleles(Species.MusMusculus)) { - if (allele.getName().contains("1-33")) { + LociLibrary library = LociLibraryReader.read(sample, true); + for (Allele allele : library.getAllAlleles(Species.HomoSapiens)) { + if (allele.getName().contains("IGHV3-21*00")) { System.out.println(allele.getName()); - System.out.println(AminoAcidSequence.translate(allele.getFeature(FR3), 0)); + //System.out.println(AminoAcidSequence.translate(allele.getFeature(VRegion), 0)); + System.out.println(allele.getFeature(VRegion)); System.out.println(allele.getFeature(FR3)); System.out.println(allele.isFunctional()); System.out.println(Arrays.toString(allele.getPartitioning().points)); @@ -128,12 +138,12 @@ public void test3ReadLL1() throws Exception { @Test public void testExportLL() throws Exception { InputStream sample = LociLibraryReader.class.getClassLoader().getResourceAsStream("reference/mi.ll"); - LociLibrary library = LociLibraryReader.read(sample); + LociLibrary library = LociLibraryReader.read(sample, true); for (Locus locus : Locus.values()) { LocusContainer container = library.getLocus(Species.HomoSapiens, locus); export(locus.name().toLowerCase() + "v.txt", container.getReferenceAlleles(GeneType.Variable), VGene, - V5UTR, L1, Intron, L2, + V5UTR, L1, VIntron, L2, FR1, CDR1, FR2, CDR2, FR3, GermlineVCDR3Part); export(locus.name().toLowerCase() + "j.txt", container.getReferenceAlleles(GeneType.Joining), diff --git a/src/test/java/com/milaboratory/mixcr/reference/LociLibraryIOUtilsTest.java b/src/test/java/com/milaboratory/mixcr/reference/LociLibraryIOUtilsTest.java new file mode 100644 index 000000000..207d1c76b --- /dev/null +++ b/src/test/java/com/milaboratory/mixcr/reference/LociLibraryIOUtilsTest.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2014-2015, 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 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.reference; + +import org.apache.commons.io.output.ByteArrayOutputStream; +import org.junit.Assert; +import org.junit.Test; + +import java.io.ByteArrayInputStream; +import java.io.IOException; + +/** + * Created by dbolotin on 27/11/15. + */ +public class LociLibraryIOUtilsTest { + @Test + public void test1() throws Exception { + testGF(GeneFeature.VDJTranscript); + testGF(GeneFeature.CDR3); + testGF(GeneFeature.GermlineVCDR3Part); + } + + public void testGF(GeneFeature gf) throws IOException { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + LociLibraryIOUtils.writeReferenceGeneFeature(bos, gf); + ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); + GeneFeature deser = LociLibraryIOUtils.readReferenceGeneFeature(bis); + Assert.assertEquals(gf, deser); + } +} \ No newline at end of file diff --git a/src/test/java/com/milaboratory/mixcr/reference/builder/FastaLocusBuilderParametersTest.java b/src/test/java/com/milaboratory/mixcr/reference/builder/FastaLocusBuilderParametersTest.java new file mode 100644 index 000000000..9fe675664 --- /dev/null +++ b/src/test/java/com/milaboratory/mixcr/reference/builder/FastaLocusBuilderParametersTest.java @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2014-2015, 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 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.reference.builder; + +import com.milaboratory.core.alignment.AffineGapAlignmentScoring; +import com.milaboratory.core.sequence.NucleotideSequence; +import com.milaboratory.mixcr.reference.GeneType; +import com.milaboratory.mixcr.reference.builder.FastaLocusBuilderParameters.AnchorPointPositionInfo; +import com.milaboratory.test.TestUtil; +import org.junit.Test; + +import static com.milaboratory.mixcr.reference.ReferencePoint.*; + +/** + * Created by dbolotin on 01/12/15. + */ +public class FastaLocusBuilderParametersTest { + @Test + public void test1() throws Exception { + FastaLocusBuilderParameters v = + new FastaLocusBuilderParameters(GeneType.Variable, + "^[^\\|]+\\|([^\\|]+)", + "^[^\\|]+\\|[^\\|]+\\|[^\\|]+\\|[\\(\\[]?F", + "^[^\\|]+\\|[^\\|]+\\*01", '.', + FR1Begin, true, + new AffineGapAlignmentScoring<>(NucleotideSequence.ALPHABET, 1, -4, -11, -2), + new AnchorPointPositionInfo(FR1Begin, 0), + new AnchorPointPositionInfo(CDR1Begin, 78), + new AnchorPointPositionInfo(FR2Begin, 114), + new AnchorPointPositionInfo(CDR2Begin, 165), + new AnchorPointPositionInfo(FR3Begin, 195), + new AnchorPointPositionInfo(CDR3Begin, 309), + new AnchorPointPositionInfo(VEnd, AnchorPointPositionInfo.END_OF_SEQUENCE)); + FastaLocusBuilderParameters j = + new FastaLocusBuilderParameters(GeneType.Joining, + "^[^\\|]+\\|([^\\|]+)", + "^[^\\|]+\\|[^\\|]+\\|[^\\|]+\\|[\\(\\[]?F", + "^[^\\|]+\\|[^\\|]+\\*01", '.', + FR4Begin, true, + new AffineGapAlignmentScoring<>(NucleotideSequence.ALPHABET, 1, -4, -21, -2), + new AnchorPointPositionInfo(JBegin, 0), + new AnchorPointPositionInfo(FR4Begin, -31, "(?:TGG|TT[TC])()GG[ATGC]{4}GG[ATGC]"), + new AnchorPointPositionInfo(FR4End, AnchorPointPositionInfo.END_OF_SEQUENCE)); + FastaLocusBuilderParameters d = + new FastaLocusBuilderParameters(GeneType.Diversity, + "^[^\\|]+\\|([^\\|]+)", + "^[^\\|]+\\|[^\\|]+\\|[^\\|]+\\|[\\(\\[]?F", + "^[^\\|]+\\|[^\\|]+\\*01", '.', + null, true, + new AffineGapAlignmentScoring<>(NucleotideSequence.ALPHABET, 1, -4, -21, -2), + new AnchorPointPositionInfo(DBegin, 0), + new AnchorPointPositionInfo(DEnd, AnchorPointPositionInfo.END_OF_SEQUENCE)); + FastaLocusBuilderParametersBundle bundle = new FastaLocusBuilderParametersBundle(v, d, j, null); + TestUtil.assertJson(bundle, true); + } + + @Test + public void testBuiltIn() throws Exception { + TestUtil.assertJson(FastaLocusBuilderParametersBundle.getBuiltInBundleByName("imgt")); + } +} \ No newline at end of file diff --git a/src/test/java/com/milaboratory/mixcr/reference/builder/FastaLocusBuilderTest.java b/src/test/java/com/milaboratory/mixcr/reference/builder/FastaLocusBuilderTest.java new file mode 100644 index 000000000..dfb93967b --- /dev/null +++ b/src/test/java/com/milaboratory/mixcr/reference/builder/FastaLocusBuilderTest.java @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2014-2015, 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 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.reference.builder; + +import com.milaboratory.core.alignment.AffineGapAlignmentScoring; +import com.milaboratory.core.sequence.AminoAcidSequence; +import com.milaboratory.core.sequence.NucleotideSequence; +import com.milaboratory.mixcr.reference.*; +import com.milaboratory.mixcr.reference.builder.FastaLocusBuilderParameters.AnchorPointPositionInfo; +import org.junit.Assert; +import org.junit.Test; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; + +import static com.milaboratory.mixcr.reference.ReferencePoint.*; + +/** + * Created by dbolotin on 25/10/15. + */ +public class FastaLocusBuilderTest { + @Test + public void test1V() throws Exception { + FastaLocusBuilderParameters parameters = + new FastaLocusBuilderParameters(GeneType.Variable, + "^[^\\|]+\\|([^\\|]+)", + "^[^\\|]+\\|[^\\|]+\\|[^\\|]+\\|[\\(\\[]?F", + "^[^\\|]+\\|[^\\|]+\\*01", '.', + FR1Begin, true, + new AffineGapAlignmentScoring<>(NucleotideSequence.ALPHABET, 1, -4, -11, -2), + new AnchorPointPositionInfo(FR1Begin, 0), + new AnchorPointPositionInfo(CDR1Begin, 78), + new AnchorPointPositionInfo(FR2Begin, 114), + new AnchorPointPositionInfo(CDR2Begin, 165), + new AnchorPointPositionInfo(FR3Begin, 195), + new AnchorPointPositionInfo(CDR3Begin, 309), + new AnchorPointPositionInfo(VEnd, AnchorPointPositionInfo.END_OF_SEQUENCE)); + + FastaLocusBuilder builder = new FastaLocusBuilder(Locus.IGH, parameters).noExceptionOnError(); + builder.importAllelesFromFile("/Volumes/Data/Projects/MiLaboratory/tmp/result/human_IGHV.fasta"); + builder.compile(); + builder.printReport(); + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + LociLibraryWriter writer = new LociLibraryWriter(bos); + writer.writeMagic(); + writer.writeBeginOfLocus(Species.HomoSapiens, Locus.IGH); + builder.writeAlleles(writer); + writer.writeEndOfLocus(); + ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); + LociLibrary ll = LociLibraryReader.read(bis, false); + NucleotideSequence expected = new NucleotideSequence("ATCAACTGGGTGCGACAGGCCACTGGACAAGGGCTTGAGTGGATGGGATGG"); + Allele allele = ll.getAllele(Species.HomoSapiens, "IGHV1-8*01"); + Assert.assertEquals(expected, allele.getFeature(GeneFeature.FR2)); + expected = new NucleotideSequence("GGATACACCTTCACCAGCTATGAT"); + allele = ll.getAllele(Species.HomoSapiens, "IGHV1-8*02"); + Assert.assertEquals(expected, allele.getFeature(GeneFeature.CDR1)); + } + + @Test + public void test1J() throws Exception { + FastaLocusBuilderParameters parameters = + new FastaLocusBuilderParameters(GeneType.Joining, + "^[^\\|]+\\|([^\\|]+)", + "^[^\\|]+\\|[^\\|]+\\|[^\\|]+\\|[\\(\\[]?F", + "^[^\\|]+\\|[^\\|]+\\*01", '.', + FR4Begin, true, + new AffineGapAlignmentScoring<>(NucleotideSequence.ALPHABET, 1, -4, -21, -2), + new AnchorPointPositionInfo(JBegin, 0), + new AnchorPointPositionInfo(FR4Begin, -31, "(?:TGG|TT[TC])()GG[ATGC]{4}GG[ATGC]"), + new AnchorPointPositionInfo(FR4End, AnchorPointPositionInfo.END_OF_SEQUENCE)); + + FastaLocusBuilder builder = new FastaLocusBuilder(Locus.IGH, parameters).noExceptionOnError(); + builder.importAllelesFromFile("/Volumes/Data/Projects/MiLaboratory/tmp/result/human_IGHJ.fasta"); + builder.compile(); + builder.printReport(); + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + LociLibraryWriter writer = new LociLibraryWriter(bos); + writer.writeMagic(); + writer.writeBeginOfLocus(Species.HomoSapiens, Locus.IGH); + builder.writeAlleles(writer); + writer.writeEndOfLocus(); + ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); + LociLibrary ll = LociLibraryReader.read(bis, false); + NucleotideSequence expected = new NucleotideSequence("GGGCAAGGGACCACGGTCACCGTCTCCTCAG"); + Allele allele = ll.getAllele(Species.HomoSapiens, "IGHJ6*01"); + Assert.assertEquals(expected, allele.getFeature(GeneFeature.FR4)); + expected = new NucleotideSequence("GGCAAAGGGACCACGGTCACCGTCTCCTCA"); + allele = ll.getAllele(Species.HomoSapiens, "IGHJ6*03"); + Assert.assertEquals(expected, allele.getFeature(GeneFeature.FR4)); + } + + @Test + public void test1D() throws Exception { + FastaLocusBuilderParameters parameters = + new FastaLocusBuilderParameters(GeneType.Diversity, + "^[^\\|]+\\|([^\\|]+)", + "^[^\\|]+\\|[^\\|]+\\|[^\\|]+\\|[\\(\\[]?F", + "^[^\\|]+\\|[^\\|]+\\*01", '.', + null, true, + new AffineGapAlignmentScoring<>(NucleotideSequence.ALPHABET, 1, -4, -21, -2), + new AnchorPointPositionInfo(DBegin, 0), + new AnchorPointPositionInfo(DEnd, AnchorPointPositionInfo.END_OF_SEQUENCE)); + + FastaLocusBuilder builder = new FastaLocusBuilder(Locus.IGH, parameters).noExceptionOnError(); + builder.importAllelesFromFile("/Volumes/Data/Projects/MiLaboratory/tmp/result/human_IGHD.fasta"); + builder.compile(); + builder.printReport(); + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + LociLibraryWriter writer = new LociLibraryWriter(bos); + writer.writeMagic(); + writer.writeBeginOfLocus(Species.HomoSapiens, Locus.IGH); + builder.writeAlleles(writer); + writer.writeEndOfLocus(); + ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); + LociLibrary ll = LociLibraryReader.read(bis, false); + int i = 0; + NucleotideSequence expected = new NucleotideSequence("GTATTACTATGGTTCGGGGAGTTATTATAAC"); + Allele allele = ll.getAllele(Species.HomoSapiens, "IGHD3-10*01"); + Assert.assertEquals(expected, allele.getFeature(GeneFeature.DRegion)); + expected = new NucleotideSequence("GTATTACTATGTTCGGGGAGTTATTATAAC"); + allele = ll.getAllele(Species.HomoSapiens, "IGHD3-10*02"); + Assert.assertEquals(expected, allele.getFeature(GeneFeature.DRegion)); + } + + private static AminoAcidSequence tr(StringWithMapping sm, int from, int to) { + String str = sm.getModifiedString(); + int sFrom = sm.convertPosition(from); + int sTo = to == -1 ? str.length() : sm.convertPosition(to); + if (sTo == -1 || sFrom == -1) + return null; + return AminoAcidSequence.translateFromLeft(new NucleotideSequence( + str.substring(sFrom, sTo))); + } +} \ 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 new file mode 100644 index 000000000..6c068974d --- /dev/null +++ b/src/test/java/com/milaboratory/mixcr/tests/BackwardCompatibilityTests.java @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2014-2015, 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 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.tests; + +import cc.redberry.pipe.CUtils; +import com.milaboratory.core.sequence.AminoAcidAlphabet; +import com.milaboratory.core.sequence.AminoAcidSequence; +import com.milaboratory.mixcr.basictypes.*; +import com.milaboratory.mixcr.reference.GeneFeature; +import com.milaboratory.mixcr.reference.LociLibraryManager; +import org.junit.Assert; +import org.junit.Test; + +/** + * Created by dbolotin on 29/12/15. + */ +public class BackwardCompatibilityTests { + @Test + public void testBC16Alignments() throws Exception { + try (VDJCAlignmentsReader reader = new VDJCAlignmentsReader(BackwardCompatibilityTests.class + .getResource("/backward_compatibility/alignments_v1.6.vdjca.gz").getFile(), + LociLibraryManager.getDefault())) { + int countGood = 0; + for (VDJCAlignments vdjcAlignments : CUtils.it(reader)) { + AminoAcidSequence aaCDR3 = AminoAcidSequence.translateFromCenter(vdjcAlignments.getFeature(GeneFeature.CDR3).getSequence()); + if (aaCDR3.codeAt(0) == AminoAcidAlphabet.C && + aaCDR3.codeAt(aaCDR3.size() - 1) == AminoAcidAlphabet.F) + ++countGood; + } + Assert.assertEquals(98, countGood); + } + } + + @Test + public void testBC16Cloneset() throws Exception { + CloneSet cloneSet = CloneSetIO.read(BackwardCompatibilityTests.class + .getResource("/backward_compatibility/clones_v1.6.clns.gz").getFile(), + LociLibraryManager.getDefault()); + Assert.assertEquals(24, cloneSet.size()); + int countGood = 0; + for (Clone clone : cloneSet.getClones()) { + AminoAcidSequence aaCDR3 = AminoAcidSequence.translateFromCenter(clone.getFeature(GeneFeature.CDR3).getSequence()); + if (aaCDR3.codeAt(0) == AminoAcidAlphabet.C && + aaCDR3.codeAt(aaCDR3.size() - 1) == AminoAcidAlphabet.F) { + ++countGood; + } + } + Assert.assertEquals(cloneSet.size(), countGood); + } +} diff --git a/src/test/java/com/milaboratory/mixcr/util/AlignedStringsBuilderTest.java b/src/test/java/com/milaboratory/mixcr/util/AlignedStringsBuilderTest.java new file mode 100644 index 000000000..505d33abb --- /dev/null +++ b/src/test/java/com/milaboratory/mixcr/util/AlignedStringsBuilderTest.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2014-2015, 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 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.util; + +import junit.framework.Assert; +import org.junit.Test; + +/** + * Created by dbolotin on 13/11/15. + */ +public class AlignedStringsBuilderTest { + @Test + public void test1() throws Exception { + AlignedStringsBuilder builder = new AlignedStringsBuilder(); + builder + .row("atta", "gac", "cagata") + .row("taaaassdfaa", "gacaa", "caata"); + String expected = "atta gac cagata\n" + + "taaaassdfaa gacaa caata\n"; + Assert.assertEquals(expected, builder.toString()); + } +} \ No newline at end of file diff --git a/src/test/java/com/milaboratory/mixcr/util/RunMiXCRTest.java b/src/test/java/com/milaboratory/mixcr/util/RunMiXCRTest.java index f47006730..7849808af 100644 --- a/src/test/java/com/milaboratory/mixcr/util/RunMiXCRTest.java +++ b/src/test/java/com/milaboratory/mixcr/util/RunMiXCRTest.java @@ -1,13 +1,21 @@ package com.milaboratory.mixcr.util; -import com.milaboratory.mixcr.basictypes.Clone; -import com.milaboratory.mixcr.basictypes.VDJCHit; +import cc.redberry.pipe.CUtils; +import com.milaboratory.core.io.sequence.PairedRead; +import com.milaboratory.core.io.sequence.fastq.PairedFastqReader; +import com.milaboratory.mixcr.basictypes.*; +import com.milaboratory.mixcr.cli.ActionAlign; import com.milaboratory.mixcr.reference.GeneType; +import com.milaboratory.mixcr.reference.LociLibraryManager; import com.milaboratory.mixcr.reference.Locus; import com.milaboratory.mixcr.vdjaligners.VDJCAligner; import org.junit.Assert; +import org.junit.Ignore; import org.junit.Test; +import java.io.File; +import java.util.ArrayList; +import java.util.List; import java.util.Set; /** @@ -29,4 +37,77 @@ public void test1() throws Exception { Assert.assertTrue(vjLoci.contains(dHit.getAllele().getLocus())); } } + + @Test + public void test2() throws Exception { + RunMiXCR.RunMiXCRAnalysis params = new RunMiXCR.RunMiXCRAnalysis( + RunMiXCR.class.getResource("/sequences/test_R1.fastq").getFile(), + RunMiXCR.class.getResource("/sequences/test_R2.fastq").getFile()); + + RunMiXCR.AlignResult align = RunMiXCR.align(params); + + List reads = new ArrayList<>(); + try (PairedFastqReader fReader = new PairedFastqReader( + RunMiXCR.class.getResource("/sequences/test_R1.fastq").getFile(), + RunMiXCR.class.getResource("/sequences/test_R2.fastq").getFile())) { + for (PairedRead s : CUtils.it(fReader)) + reads.add(s); + } + + File tempFile = TempFileManager.getTempFile(); + try (VDJCAlignmentsWriter writer = new VDJCAlignmentsWriter(tempFile)) { + writer.header(align.aligner); + for (VDJCAlignments alignment : align.alignments) + writer.write(alignment); + } + + try (VDJCAlignmentsReader reader = new VDJCAlignmentsReader(tempFile, LociLibraryManager.getDefault())) { + int tr = 0; + for (VDJCAlignments alignment : CUtils.it(reader)) { + PairedRead actual = reads.get((int) alignment.getReadId()); + ++tr; + + Assert.assertArrayEquals(ActionAlign.extractNSeqs(actual), alignment.getOriginalSequences()); + } + + System.out.println(tr); + } + } + + @Ignore + @Test + public void test3() throws Exception { + RunMiXCR.RunMiXCRAnalysis params = new RunMiXCR.RunMiXCRAnalysis( + "/Users/poslavsky/Projects/milab/temp/R1_part.fastq.gz", + "/Users/poslavsky/Projects/milab/temp/R2_part.fastq.gz"); + + RunMiXCR.AlignResult align = RunMiXCR.align(params); + + List reads = new ArrayList<>(); + try (PairedFastqReader fReader = new PairedFastqReader( + "/Users/poslavsky/Projects/milab/temp/R1_part.fastq.gz", + "/Users/poslavsky/Projects/milab/temp/R2_part.fastq.gz", true)) { + for (PairedRead s : CUtils.it(fReader)) + reads.add(s); + } + + File tempFile = TempFileManager.getTempFile(); + try (VDJCAlignmentsWriter writer = new VDJCAlignmentsWriter(tempFile)) { + writer.header(align.aligner); + for (VDJCAlignments alignment : align.alignments) + writer.write(alignment); + } + + try (VDJCAlignmentsReader reader = new VDJCAlignmentsReader(tempFile, LociLibraryManager.getDefault())) { + int tr = 0; + for (VDJCAlignments alignment : CUtils.it(reader)) { + PairedRead actual = reads.get((int) alignment.getReadId()); + ++tr; + + Assert.assertArrayEquals(ActionAlign.extractNSeqs(actual), alignment.getOriginalSequences()); + } + + System.out.println(tr); + } + } } \ No newline at end of file diff --git a/src/test/java/com/milaboratory/mixcr/vdjaligners/KGeneAlignmentParametersTest.java b/src/test/java/com/milaboratory/mixcr/vdjaligners/KGeneAlignmentParametersTest.java index 250601c2d..204092afe 100644 --- a/src/test/java/com/milaboratory/mixcr/vdjaligners/KGeneAlignmentParametersTest.java +++ b/src/test/java/com/milaboratory/mixcr/vdjaligners/KGeneAlignmentParametersTest.java @@ -28,7 +28,7 @@ */ package com.milaboratory.mixcr.vdjaligners; -import com.milaboratory.core.alignment.KAlignerParameters; +import com.milaboratory.core.alignment.kaligner1.KAlignerParameters; import com.milaboratory.core.alignment.LinearGapAlignmentScoring; import com.milaboratory.mixcr.reference.GeneFeature; import com.milaboratory.util.GlobalObjectMappers; diff --git a/src/test/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerParametersTest.java b/src/test/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerParametersTest.java index 6cba5803e..78086b5d2 100644 --- a/src/test/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerParametersTest.java +++ b/src/test/java/com/milaboratory/mixcr/vdjaligners/VDJCAlignerParametersTest.java @@ -30,7 +30,7 @@ import com.milaboratory.core.PairedEndReadsLayout; import com.milaboratory.core.alignment.AffineGapAlignmentScoring; -import com.milaboratory.core.alignment.KAlignerParameters; +import com.milaboratory.core.alignment.kaligner1.KAlignerParameters; import com.milaboratory.core.alignment.LinearGapAlignmentScoring; import com.milaboratory.mitools.merger.MergerParameters; import com.milaboratory.mitools.merger.QualityMergingAlgorithm; diff --git a/src/test/resources/backward_compatibility/alignments_v1.6.vdjca.gz b/src/test/resources/backward_compatibility/alignments_v1.6.vdjca.gz new file mode 100644 index 000000000..a6cc9f77c Binary files /dev/null and b/src/test/resources/backward_compatibility/alignments_v1.6.vdjca.gz differ diff --git a/src/test/resources/backward_compatibility/clones_v1.6.clns.gz b/src/test/resources/backward_compatibility/clones_v1.6.clns.gz new file mode 100644 index 000000000..9bb87480e Binary files /dev/null and b/src/test/resources/backward_compatibility/clones_v1.6.clns.gz differ