[med-svn] [Git][med-team/filtlong][master] 8 commits: Fix watchfile to detect new versions on github

Andreas Tille (@tille) gitlab at salsa.debian.org
Wed Oct 13 08:51:13 BST 2021



Andreas Tille pushed to branch master at Debian Med / filtlong


Commits:
c9ed668b by Andreas Tille at 2021-10-13T09:47:20+02:00
Fix watchfile to detect new versions on github

- - - - -
57d900bf by Andreas Tille at 2021-10-13T09:47:23+02:00
routine-update: New upstream version

- - - - -
0fcecb87 by Andreas Tille at 2021-10-13T09:47:24+02:00
New upstream version 0.2.1
- - - - -
19f14b6d by Andreas Tille at 2021-10-13T09:47:28+02:00
Update upstream source from tag 'upstream/0.2.1'

Update to upstream version '0.2.1'
with Debian dir b12adf71d6ead43301503f9a0b81fab5a618e9c0
- - - - -
cc8d7d1f by Andreas Tille at 2021-10-13T09:47:28+02:00
routine-update: Standards-Version: 4.6.0

- - - - -
1788dd6b by Andreas Tille at 2021-10-13T09:47:28+02:00
routine-update: debhelper-compat 13

- - - - -
ccbd59b4 by Andreas Tille at 2021-10-13T09:47:35+02:00
Apply multi-arch hints.
+ filtlong-data: Add Multi-Arch: foreign.

Changes-By: apply-multiarch-hints

- - - - -
c9c8c87d by Andreas Tille at 2021-10-13T09:49:21+02:00
routine-update: Ready to upload to unstable

- - - - -


12 changed files:

- README.md
- debian/changelog
- debian/control
- debian/watch
- + scripts/README.md
- + scripts/histogram.py
- + scripts/read_info_histograms.sh
- src/arguments.cpp
- src/arguments.h
- src/main.cpp
- src/read.cpp
- − test_sort.fastq


Changes:

=====================================
README.md
=====================================
@@ -109,7 +109,7 @@ filtlong --min_length 1000 --keep_percent 90 --target_bases 500000000 input.fast
 
 ### With Illumina read reference
 
-When an external reference is provided, Filtlong ignores the Phred quality scores and instead judges read quality using k-mer matches to the reference (a more accurate gauge of quality). FASTA input reads are allowed when a reference is provided, and if used Filtlong will produce FASTA output.
+When an external reference is provided, Filtlong ignores the Phred quality scores and instead judges read quality using k-mer matches to the reference (a more accurate gauge of quality). FASTA input reads are allowed when a reference is provided, and if used, Filtlong will produce FASTA output.
 
 ```
 filtlong -1 illumina_1.fastq.gz -2 illumina_2.fastq.gz --min_length 1000 --keep_percent 90 --target_bases 500000000 input.fastq.gz | gzip > output.fastq.gz
@@ -130,6 +130,7 @@ filtlong -1 illumina_1.fastq.gz -2 illumina_2.fastq.gz --min_length 1000 --keep_
     </tr>
 </table>
 
+
 ### With trimming and splitting
 
 When an external reference is provided, you can turn on read trimming and splitting to further increase read quality. See [Trimming and splitting](#trimming-and-splitting) for more information.
@@ -139,7 +140,7 @@ filtlong -1 illumina_1.fastq.gz -2 illumina_2.fastq.gz --min_length 1000 --keep_
 ```
 
 * `--trim` ← Trim bases from the start and end of reads which do not match a k-mer in the reference. This ensures the each read starts and ends with good sequence.
-* `--split 500` ← Split reads whenever 500 consequence bases fail to match a k-mer in the reference. This serves to remove very poor parts of reads while keeping the good parts. A lower value will split more aggressively and a higher value will be more conservative.
+* `--split 500` ← Split reads whenever 500 consecutive bases fail to match a k-mer in the reference. This serves to remove very poor parts of reads while keeping the good parts. A lower value will split more aggressively and a higher value will be more conservative.
 
 <table>
     <tr>
@@ -182,7 +183,7 @@ filtlong -1 illumina_1.fastq.gz -2 illumina_2.fastq.gz --min_length 1000 --keep_
 
 ### Quality priority
 
-You can adjust the relative importance of Filtlong's read metrics. In this example, more weight is given to read length.
+You can adjust the relative importance of Filtlong's read metrics. In this example, more weight is given to read quality.
 
 ```
 filtlong -1 illumina_1.fastq.gz -2 illumina_2.fastq.gz --min_length 1000 --keep_percent 90 --target_bases 500000000 --trim --split 100 --mean_q_weight 10 input.fastq.gz | gzip > output.fastq.gz
@@ -222,6 +223,7 @@ optional arguments:
       -p[float], --keep_percent [float]    keep only this percentage of the best reads (measured by
                                            bases)
       --min_length [int]                   minimum length threshold
+      --max_length [int]                   maximum length threshold
       --min_mean_q [float]                 minimum mean quality threshold
       --min_window_q [float]               minimum window quality threshold
 
@@ -261,7 +263,9 @@ When run, Filtlong carries out the following steps:
     * If the reference is an assembly, then Filtlong simply hashes all 16-mers in the assembly.
     * If the reference is in Illumina reads, then the 16-mer has to be encountered a few times before it's hashed (to avoid hashing 16-mers that result from read errors).
 2. Look at each of the input reads to get length and quality information..
-    * If a read fails to meet any of the hard thresholds (`--min_length`, `--min_mean_q` or `--min_window_q`) then it is marked as 'fail' now.
+    * If a read fails to meet any of the hard thresholds (`--min_length`, `--max_length`, `--min_mean_q` or `--min_window_q`) then it is marked as 'fail' now.
+        * Note that `--min_mean_q` and `--min_window_q` are expressed as sequence percent identities from 0-100 (see how this is calculated in the [Read scoring](#read-scoring) section), not as PHRED scores.
+        * For advice on setting minimum quality thresholds, see [Filtlong's scripts directory](https://github.com/rrwick/Filtlong/tree/main/scripts).
     * If `--trim` or `--split` was used, then 'child' reads are made here (see [Trimming and splitting](#trimming-and-splitting)).
     * If `--verbose` was used, display detailed information about the read length, quality and trimming/splitting.
 3. Gather up all reads eligible for output. If neither `--trim` nor `--split` was used, this is simply the original set of reads. If `--trim` or `--split` was used, then the child reads replace the original reads.


=====================================
debian/changelog
=====================================
@@ -1,3 +1,14 @@
+filtlong (0.2.1-1) unstable; urgency=medium
+
+  * Fix watchfile to detect new versions on github
+  * New upstream version
+  * Standards-Version: 4.6.0 (routine-update)
+  * debhelper-compat 13 (routine-update)
+  * Apply multi-arch hints.
+    + filtlong-data: Add Multi-Arch: foreign.
+
+ -- Andreas Tille <tille at debian.org>  Wed, 13 Oct 2021 09:47:37 +0200
+
 filtlong (0.2.0-2) unstable; urgency=medium
 
   * Source only upload


=====================================
debian/control
=====================================
@@ -3,11 +3,11 @@ Maintainer: Debian Med Packaging Team <debian-med-packaging at lists.alioth.debian.
 Uploaders: Andreas Tille <tille at debian.org>
 Section: science
 Priority: optional
-Build-Depends: debhelper-compat (= 12),
+Build-Depends: debhelper-compat (= 13),
                zlib1g-dev,
                python3-markdown,
                python3
-Standards-Version: 4.5.0
+Standards-Version: 4.6.0
 Vcs-Browser: https://salsa.debian.org/med-team/filtlong
 Vcs-Git: https://salsa.debian.org/med-team/filtlong.git
 Homepage: https://github.com/rrwick/Filtlong
@@ -26,6 +26,7 @@ Description: quality filtering tool for long reads of genome sequences
 Package: filtlong-data
 Architecture: all
 Depends: ${misc:Depends}
+Multi-Arch: foreign
 Description: quality filtering tool for long reads of genome sequences (testdata)
  Filtlong is a tool for filtering long reads by quality. It can take a
  set of long reads and produce a smaller, better subset. It uses both


=====================================
debian/watch
=====================================
@@ -1,3 +1,3 @@
 version=4
 
-https://github.com/rrwick/Filtlong/releases .*/archive/v?@ANY_VERSION@@ARCHIVE_EXT@
+https://github.com/rrwick/Filtlong/releases .*/v?@ANY_VERSION@@ARCHIVE_EXT@


=====================================
scripts/README.md
=====================================
@@ -0,0 +1,321 @@
+# Filtlong supplementary scripts
+
+This directory contains a script (`read_info_histograms.sh`) to assist with visualising read statistics. It uses a slightly modified version of the `histogram.py` file from the [data_hacks repo](https://github.com/bitly/data_hacks).
+
+Importantly, this script uses Filtlong to generate the data for its histograms. That means the quality values visualised are the same ones that Filtlong will use for filtering. If you are planning to use Filtlong with Illumina reads as an external reference, run this script with Illumina reads as well, so the quality scores are consistent.
+
+
+
+## Example output (without an external reference)
+
+In this example, the qualities come from the FASTQ PHRED scores.
+
+__Command__:
+```
+path/to/Filtlong/scripts/read_info_histograms.sh long_reads.fastq.gz
+```
+
+__Output__:
+```
+READ SET SUMMARY
+----------------
+number of reads: 62,313
+number of bases: 498,400,580
+N50 read length: 16,730
+
+
+READ LENGTHS
+------------
+Each ∎ represents 1,044,446 bases
+     0 -   3799 [45,923,686]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+  3799 -   7597 [73,111,261]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+  7597 -  11396 [63,135,675]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+ 11396 -  15195 [49,558,377]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+ 15195 -  18994 [40,910,839]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+ 18994 -  22792 [34,441,187]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+ 22792 -  26591 [28,738,160]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+ 26591 -  30390 [24,738,026]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+ 30390 -  34189 [22,096,602]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+ 34189 -  37987 [18,985,609]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+ 37987 -  41786 [15,406,318]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+ 41786 -  45585 [12,755,023]: ∎∎∎∎∎∎∎∎∎∎∎∎
+ 45585 -  49383 [12,919,019]: ∎∎∎∎∎∎∎∎∎∎∎∎
+ 49383 -  53182 [ 9,529,903]: ∎∎∎∎∎∎∎∎∎
+ 53182 -  56981 [ 7,744,484]: ∎∎∎∎∎∎∎
+ 56981 -  60780 [ 6,403,620]: ∎∎∎∎∎∎
+ 60780 -  64578 [ 5,626,494]: ∎∎∎∎∎
+ 64578 -  68377 [ 5,434,617]: ∎∎∎∎∎
+ 68377 -  72176 [ 3,851,906]: ∎∎∎
+ 72176 -  75974 [ 3,104,518]: ∎∎
+ 75974 -  79773 [ 2,723,174]: ∎∎
+ 79773 -  83572 [ 2,445,516]: ∎∎
+ 83572 -  87371 [ 1,622,746]: ∎
+ 87371 -  91169 [ 1,424,798]: ∎
+ 91169 -  94968 [ 1,018,819]: 
+ 94968 -  98767 [ 1,254,227]: ∎
+ 98767 - 102566 [ 1,000,129]: 
+102566 - 106364 [   206,593]: 
+106364 - 110163 [   217,310]: 
+110163 - 113962 [   561,474]: 
+113962 - 117760 [   233,150]: 
+117760 - 121559 [   476,864]: 
+121559 - 125358 [   248,209]: 
+125358 - 129157 [         0]: 
+129157 - 132955 [   262,547]: 
+132955 - 136754 [         0]: 
+136754 - 140553 [   137,751]: 
+140553 - 144352 [         0]: 
+144352 - 148150 [         0]: 
+148150 - 151949 [   151,949]: 
+
+
+MEAN QUALITIES
+--------------
+Each ∎ represents 984,822 bases
+65.6 - 66.3 [     4,750]: 
+66.3 - 67.1 [       533]: 
+67.1 - 67.8 [    43,474]: 
+67.8 - 68.6 [     1,568]: 
+68.6 - 69.3 [    24,007]: 
+69.3 - 70.1 [    33,284]: 
+70.1 - 70.8 [    80,237]: 
+70.8 - 71.6 [    74,948]: 
+71.6 - 72.3 [   125,425]: 
+72.3 - 73.1 [   193,567]: 
+73.1 - 73.8 [   179,704]: 
+73.8 - 74.5 [   337,987]: 
+74.5 - 75.3 [   659,382]: 
+75.3 - 76.0 [   715,250]: 
+76.0 - 76.8 [   890,534]: 
+76.8 - 77.5 [ 1,117,521]: ∎
+77.5 - 78.3 [ 1,309,180]: ∎
+78.3 - 79.0 [ 1,732,547]: ∎
+79.0 - 79.8 [ 2,328,104]: ∎∎
+79.8 - 80.5 [ 3,276,277]: ∎∎∎
+80.5 - 81.3 [ 3,484,277]: ∎∎∎
+81.3 - 82.0 [ 4,759,691]: ∎∎∎∎
+82.0 - 82.7 [ 6,444,131]: ∎∎∎∎∎∎
+82.7 - 83.5 [ 7,473,861]: ∎∎∎∎∎∎∎
+83.5 - 84.2 [ 9,623,707]: ∎∎∎∎∎∎∎∎∎
+84.2 - 85.0 [11,909,590]: ∎∎∎∎∎∎∎∎∎∎∎∎
+85.0 - 85.7 [14,997,120]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+85.7 - 86.5 [19,717,703]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+86.5 - 87.2 [25,483,029]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+87.2 - 88.0 [29,508,578]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+88.0 - 88.7 [36,579,391]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+88.7 - 89.4 [44,757,036]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+89.4 - 90.2 [54,706,747]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+90.2 - 90.9 [64,024,337]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+90.9 - 91.7 [68,937,558]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+91.7 - 92.4 [54,405,581]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+92.4 - 93.2 [24,211,000]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+93.2 - 93.9 [ 3,607,372]: ∎∎∎
+93.9 - 94.7 [   623,042]: 
+94.7 - 95.4 [    18,550]: 
+
+
+WINDOW QUALITIES
+----------------
+Each ∎ represents 512,055 bases
+53.3 - 54.4 [    43,895]: 
+54.4 - 55.4 [    32,903]: 
+55.4 - 56.5 [    10,451]: 
+56.5 - 57.5 [    93,358]: 
+57.5 - 58.6 [   125,071]: 
+58.6 - 59.6 [    61,604]: 
+59.6 - 60.6 [   631,021]: ∎
+60.6 - 61.7 [   770,097]: ∎
+61.7 - 62.7 [ 1,088,376]: ∎∎
+62.7 - 63.8 [ 1,288,929]: ∎∎
+63.8 - 64.8 [ 1,557,672]: ∎∎∎
+64.8 - 65.9 [ 3,623,305]: ∎∎∎∎∎∎∎
+65.9 - 66.9 [ 3,870,845]: ∎∎∎∎∎∎∎
+66.9 - 67.9 [ 5,679,487]: ∎∎∎∎∎∎∎∎∎∎∎
+67.9 - 69.0 [ 7,660,899]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+69.0 - 70.0 [10,257,283]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+70.0 - 71.1 [10,923,548]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+71.1 - 72.1 [12,823,586]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+72.1 - 73.2 [14,691,154]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+73.2 - 74.2 [17,058,927]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+74.2 - 75.3 [19,953,105]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+75.3 - 76.3 [21,729,076]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+76.3 - 77.3 [23,635,419]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+77.3 - 78.4 [24,208,910]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+78.4 - 79.4 [29,229,242]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+79.4 - 80.5 [30,320,254]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+80.5 - 81.5 [31,582,509]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+81.5 - 82.6 [34,303,771]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+82.6 - 83.6 [35,740,373]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+83.6 - 84.6 [35,843,870]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+84.6 - 85.7 [34,414,639]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+85.7 - 86.7 [31,090,589]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+86.7 - 87.8 [24,992,027]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+87.8 - 88.8 [16,361,297]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+88.8 - 89.9 [ 8,641,030]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+89.9 - 90.9 [ 2,927,227]: ∎∎∎∎∎
+90.9 - 91.9 [   875,281]: ∎
+91.9 - 93.0 [   204,049]: 
+93.0 - 94.0 [    49,040]: 
+94.0 - 95.1 [     6,461]: 
+```
+
+Based on the histograms, I might choose the following conservative quality thresholds: `--min_length 5000 --min_mean_q 80 --min_window_q 65`
+
+
+<br><br><br>
+
+
+## Example with Illumina reads as an external reference
+
+This example uses the same dataset as the previous one, but the qualities now come from k-mer matches to Illumina reads. The qualities are therefore different but the read length information is unchanged.
+
+__Command__:
+```
+path/to/Filtlong/scripts/read_info_histograms.sh long_reads.fastq.gz illumina_1.fastq.gz illumina_2.fastq.gz
+```
+
+__Output__:
+```
+READ SET SUMMARY
+----------------
+number of reads: 62,313
+number of bases: 498,400,580
+N50 read length: 16,730
+
+
+READ LENGTHS
+------------
+Each ∎ represents 1,044,446 bases
+     0 -   3799 [45,923,686]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+  3799 -   7597 [73,111,261]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+  7597 -  11396 [63,135,675]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+ 11396 -  15195 [49,558,377]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+ 15195 -  18994 [40,910,839]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+ 18994 -  22792 [34,441,187]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+ 22792 -  26591 [28,738,160]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+ 26591 -  30390 [24,738,026]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+ 30390 -  34189 [22,096,602]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+ 34189 -  37987 [18,985,609]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+ 37987 -  41786 [15,406,318]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+ 41786 -  45585 [12,755,023]: ∎∎∎∎∎∎∎∎∎∎∎∎
+ 45585 -  49383 [12,919,019]: ∎∎∎∎∎∎∎∎∎∎∎∎
+ 49383 -  53182 [ 9,529,903]: ∎∎∎∎∎∎∎∎∎
+ 53182 -  56981 [ 7,744,484]: ∎∎∎∎∎∎∎
+ 56981 -  60780 [ 6,403,620]: ∎∎∎∎∎∎
+ 60780 -  64578 [ 5,626,494]: ∎∎∎∎∎
+ 64578 -  68377 [ 5,434,617]: ∎∎∎∎∎
+ 68377 -  72176 [ 3,851,906]: ∎∎∎
+ 72176 -  75974 [ 3,104,518]: ∎∎
+ 75974 -  79773 [ 2,723,174]: ∎∎
+ 79773 -  83572 [ 2,445,516]: ∎∎
+ 83572 -  87371 [ 1,622,746]: ∎
+ 87371 -  91169 [ 1,424,798]: ∎
+ 91169 -  94968 [ 1,018,819]: 
+ 94968 -  98767 [ 1,254,227]: ∎
+ 98767 - 102566 [ 1,000,129]: 
+102566 - 106364 [   206,593]: 
+106364 - 110163 [   217,310]: 
+110163 - 113962 [   561,474]: 
+113962 - 117760 [   233,150]: 
+117760 - 121559 [   476,864]: 
+121559 - 125358 [   248,209]: 
+125358 - 129157 [         0]: 
+129157 - 132955 [   262,547]: 
+132955 - 136754 [         0]: 
+136754 - 140553 [   137,751]: 
+140553 - 144352 [         0]: 
+144352 - 148150 [         0]: 
+148150 - 151949 [   151,949]: 
+
+
+MEAN QUALITIES
+--------------
+Each ∎ represents 677,887 bases
+ 0.0 -  2.5 [    67,263]: 
+ 2.5 -  4.9 [    82,815]: 
+ 4.9 -  7.4 [   256,950]: 
+ 7.4 -  9.9 [   749,158]: ∎
+ 9.9 - 12.3 [ 1,152,658]: ∎
+12.3 - 14.8 [ 1,754,082]: ∎∎
+14.8 - 17.3 [ 3,059,964]: ∎∎∎∎
+17.3 - 19.7 [ 5,408,847]: ∎∎∎∎∎∎∎
+19.7 - 22.2 [ 7,510,681]: ∎∎∎∎∎∎∎∎∎∎∎
+22.2 - 24.6 [ 4,006,337]: ∎∎∎∎∎
+24.6 - 27.1 [ 2,801,778]: ∎∎∎∎
+27.1 - 29.6 [ 2,502,685]: ∎∎∎
+29.6 - 32.0 [ 3,258,647]: ∎∎∎∎
+32.0 - 34.5 [ 3,435,155]: ∎∎∎∎∎
+34.5 - 37.0 [ 4,278,777]: ∎∎∎∎∎∎
+37.0 - 39.4 [ 4,983,333]: ∎∎∎∎∎∎∎
+39.4 - 41.9 [ 6,439,521]: ∎∎∎∎∎∎∎∎∎
+41.9 - 44.4 [ 7,588,641]: ∎∎∎∎∎∎∎∎∎∎∎
+44.4 - 46.8 [ 8,908,943]: ∎∎∎∎∎∎∎∎∎∎∎∎∎
+46.8 - 49.3 [10,001,462]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+49.3 - 51.8 [12,713,431]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+51.8 - 54.2 [16,136,550]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+54.2 - 56.7 [18,115,381]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+56.7 - 59.1 [21,659,142]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+59.1 - 61.6 [23,166,427]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+61.6 - 64.1 [25,919,731]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+64.1 - 66.5 [31,712,427]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+66.5 - 69.0 [36,552,017]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+69.0 - 71.5 [41,159,323]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+71.5 - 73.9 [46,002,774]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+73.9 - 76.4 [47,452,136]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+76.4 - 78.9 [46,485,175]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+78.9 - 81.3 [32,871,399]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+81.3 - 83.8 [15,072,800]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+83.8 - 86.3 [ 3,755,240]: ∎∎∎∎∎
+86.3 - 88.7 [   961,203]: ∎
+88.7 - 91.2 [   370,319]: 
+91.2 - 93.7 [    36,939]: 
+93.7 - 96.1 [     8,536]: 
+96.1 - 98.6 [     1,933]: 
+
+
+WINDOW QUALITIES
+----------------
+Each ∎ represents 1,223,100 bases
+ 0.0 -  2.5 [85,617,025]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+ 2.5 -  4.9 [ 4,646,208]: ∎∎∎
+ 4.9 -  7.4 [42,058,882]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+ 7.4 -  9.9 [20,326,766]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+ 9.9 - 12.3 [12,648,808]: ∎∎∎∎∎∎∎∎∎∎
+12.3 - 14.8 [33,893,701]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+14.8 - 17.3 [24,865,373]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+17.3 - 19.8 [20,757,969]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+19.8 - 22.2 [24,508,676]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+22.2 - 24.7 [24,211,150]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+24.7 - 27.2 [22,883,942]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+27.2 - 29.6 [25,860,478]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+29.6 - 32.1 [21,054,189]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+32.1 - 34.6 [20,389,975]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+34.6 - 37.0 [17,721,925]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎
+37.0 - 39.5 [16,808,916]: ∎∎∎∎∎∎∎∎∎∎∎∎∎
+39.5 - 42.0 [14,247,451]: ∎∎∎∎∎∎∎∎∎∎∎
+42.0 - 44.5 [16,429,129]: ∎∎∎∎∎∎∎∎∎∎∎∎∎
+44.5 - 46.9 [11,544,406]: ∎∎∎∎∎∎∎∎∎
+46.9 - 49.4 [ 9,910,130]: ∎∎∎∎∎∎∎∎
+49.4 - 51.9 [ 7,622,653]: ∎∎∎∎∎∎
+51.9 - 54.3 [ 5,814,027]: ∎∎∎∎
+54.3 - 56.8 [ 4,865,746]: ∎∎∎
+56.8 - 59.3 [ 3,159,894]: ∎∎
+59.3 - 61.8 [ 2,174,103]: ∎
+61.8 - 64.2 [ 1,399,105]: ∎
+64.2 - 66.7 [ 1,003,958]: 
+66.7 - 69.2 [   637,184]: 
+69.2 - 71.6 [   508,873]: 
+71.6 - 74.1 [   255,636]: 
+74.1 - 76.6 [   183,048]: 
+76.6 - 79.0 [   145,158]: 
+79.0 - 81.5 [    92,925]: 
+81.5 - 84.0 [    61,294]: 
+84.0 - 86.5 [    46,942]: 
+86.5 - 88.9 [    20,743]: 
+88.9 - 91.4 [    14,950]: 
+91.4 - 93.9 [     5,187]: 
+93.9 - 96.3 [     3,171]: 
+96.3 - 98.8 [       884]:
+```
+
+There is an interesting bimodel distribution in the mean quality histogram. I hypothesise that the larger (higher quality) component is from real reads, while the smaller (lower quality) component is junk. To filter conservatively, I would perhaps just use `--min_mean_q 30`. To filter more aggressively, I would also use `--min_window_q 5`.


=====================================
scripts/histogram.py
=====================================
@@ -0,0 +1,325 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright 2010 Bitly
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+"""
+Generate a text format histogram
+
+This is a loose port to python of the Perl version at
+http://www.pandamatak.com/people/anand/xfer/histo
+
+https://github.com/bitly/data_hacks
+
+This version of the script comes with Filtlong (github.com/rrwick/Filtlong)
+and was slightly modified to better suit statistics of long sequencing reads.
+"""
+
+from __future__ import print_function
+from __future__ import division
+import sys
+from decimal import Decimal
+import logging
+import math
+from optparse import OptionParser
+from collections import namedtuple
+
+
+class MVSD(object):
+    "A class that calculates a running Mean / Variance / Standard Deviation"
+    def __init__(self):
+        self.is_started = False
+        self.ss = Decimal(0)  # (running) sum of square deviations from mean
+        self.m = Decimal(0)  # (running) mean
+        self.total_w = Decimal(0)  # weight of items seen
+
+    def add(self, x, w=1):
+        "add another datapoint to the Mean / Variance / Standard Deviation"
+        if not isinstance(x, Decimal):
+            x = Decimal(x)
+        if not self.is_started:
+            self.m = x
+            self.ss = Decimal(0)
+            self.total_w = w
+            self.is_started = True
+        else:
+            temp_w = self.total_w + w
+            self.ss += (self.total_w * w * (x - self.m) *
+                        (x - self.m)) // temp_w
+            self.m += (x - self.m) // temp_w
+            self.total_w = temp_w
+
+    def var(self):
+        return self.ss // self.total_w
+
+    def sd(self):
+        return math.sqrt(self.var())
+
+    def mean(self):
+        return self.m
+
+DataPoint = namedtuple('DataPoint', ['value', 'count'])
+
+
+def test_mvsd():
+    mvsd = MVSD()
+    for x in range(10):
+        mvsd.add(x)
+
+    assert '%.2f' % mvsd.mean() == "4.50"
+    assert '%.2f' % mvsd.var() == "8.25"
+    assert '%.14f' % mvsd.sd() == "2.87228132326901"
+
+
+def load_stream(input_stream, agg_value_key, agg_key_value):
+    for line in input_stream:
+        clean_line = line.strip()
+        if not clean_line:
+            # skip empty lines (ie: newlines)
+            continue
+        if clean_line[0] in ['"', "'"]:
+            clean_line = clean_line.strip("\"'")
+        try:
+            if agg_key_value:
+                key, value = clean_line.rstrip().rsplit(None, 1)
+                yield DataPoint(Decimal(key), int(value))
+            elif agg_value_key:
+                value, key = clean_line.lstrip().split(None, 1)
+                yield DataPoint(Decimal(key), int(value))
+            else:
+                yield DataPoint(Decimal(clean_line), 1)
+        except:
+            logging.exception('failed %r', line)
+            print("invalid line %r" % line, file=sys.stderr)
+
+
+def median(values, key=None):
+    if not key:
+        key = None  # map and sort accept None as identity
+    length = len(values)
+    if length % 2:
+        median_indeces = [length/2]
+    else:
+        median_indeces = [length/2-1, length/2]
+
+    values = sorted(values, key=key)
+    return sum(map(key,
+                   [values[i] for i in median_indeces])) // len(median_indeces)
+
+
+def test_median():
+    assert 6 == median([8, 7, 9, 1, 2, 6, 3])  # odd-sized list
+    assert 4 == median([4, 5, 2, 1, 9, 10])  # even-sized int list. (4+5)/2 = 4
+    # even-sized float list. (4.0+5)/2 = 4.5
+    assert "4.50" == "%.2f" % median([4.0, 5, 2, 1, 9, 10])
+
+
+def histogram(stream, options):
+    """
+    Loop over the stream and add each entry to the dataset, printing out at the
+    end.
+
+    stream yields Decimal()
+    """
+    if not options.min or not options.max:
+        # glob the iterator here so we can do min/max on it
+        data = list(stream)
+    else:
+        data = stream
+    bucket_scale = 1
+
+    if options.min:
+        min_v = Decimal(options.min)
+    else:
+        min_v = min(data, key=lambda x: x.value)
+        min_v = min_v.value
+    if options.max:
+        max_v = Decimal(options.max)
+    else:
+        max_v = max(data, key=lambda x: x.value)
+        max_v = max_v.value
+
+    if not max_v > min_v:
+        raise ValueError('max must be > min. max:%s min:%s' % (max_v, min_v))
+    diff = max_v - min_v
+
+    boundaries = []
+    bucket_counts = []
+    buckets = 0
+
+    if options.custbuckets:
+        bound = options.custbuckets.split(',')
+        bound_sort = sorted(map(Decimal, bound))
+
+        # if the last value is smaller than the maximum, replace it
+        if bound_sort[-1] < max_v:
+            bound_sort[-1] = max_v
+
+        # iterate through the sorted list and append to boundaries
+        for x in bound_sort:
+            if x >= min_v and x <= max_v:
+                boundaries.append(x)
+            elif x >= max_v:
+                boundaries.append(max_v)
+                break
+
+        # beware: the min_v is not included in the boundaries,
+        # so no need to do a -1!
+        bucket_counts = [0 for x in range(len(boundaries))]
+        buckets = len(boundaries)
+    elif options.logscale:
+        buckets = options.buckets and int(options.buckets) or 10
+        if buckets <= 0:
+            raise ValueError('# of buckets must be > 0')
+
+        def first_bucket_size(k, n):
+            """Logarithmic buckets means, the size of bucket i+1 is twice
+            the size of bucket i.
+            For k+1 buckets whose sum is n, we have
+            (note, k+1 buckets, since 0 is counted as well):
+                \sum_{i=0}^{k} x*2^i   = n
+                x * \sum_{i=0}^{k} 2^i = n
+                x * (2^{k+1} - 1)      = n
+                x = n/(2^{k+1} - 1)
+            """
+            return n/(2**(k+1)-1)
+
+        def log_steps(k, n):
+            "k logarithmic steps whose sum is n"
+            x = first_bucket_size(k-1, n)
+            sum = 0
+            for i in range(k):
+                sum += 2**i * x
+                yield sum
+        bucket_counts = [0 for x in range(buckets)]
+        for step in log_steps(buckets, diff):
+            boundaries.append(min_v + step)
+    else:
+        buckets = options.buckets and int(options.buckets) or 10
+        if buckets <= 0:
+            raise ValueError('# of buckets must be > 0')
+        step = diff // buckets
+        bucket_counts = [0 for x in range(buckets)]
+        for x in range(buckets):
+            boundaries.append(min_v + (step * (x + 1)))
+
+    skipped = 0
+    samples = 0
+    mvsd = MVSD()
+    accepted_data = []
+    for record in data:
+        samples += record.count
+        if options.mvsd:
+            mvsd.add(record.value, record.count)
+            accepted_data.append(record)
+        # find the bucket this goes in
+        if record.value < min_v or record.value > max_v:
+            skipped += record.count
+            continue
+        for bucket_postion, boundary in enumerate(boundaries):
+            if record.value <= boundary:
+                bucket_counts[bucket_postion] += record.count
+                break
+
+    # auto-pick the hash scale
+    if max(bucket_counts) > 70:
+        bucket_scale = int(max(bucket_counts) // 70)
+
+    # print("# NumSamples = %d; Min = %0.2f; Max = %0.2f" %
+    #       (samples, min_v, max_v))
+    # if skipped:
+    #     print("# %d value%s outside of min/max" %
+    #           (skipped, skipped > 1 and 's' or ''))
+    # if options.mvsd:
+    #     print("# Mean = %f; Variance = %f; SD = %f; Median %f" %
+    #           (mvsd.mean(), mvsd.var(), mvsd.sd(),
+    #            median(accepted_data, key=lambda x: x.value)))
+    bucket_scale_str = "{:,}".format(bucket_scale)
+    print("Each " + options.dot + " represents %s bases" % bucket_scale_str)
+    bucket_min = min_v
+    bucket_max = min_v
+    percentage = ""
+
+    # Allocate however many characters to the bucket count formed as are needed
+    # for the largest value.
+    largest_bucket_count = max(bucket_counts[i] for i in range(buckets))
+    bucket_count_chars = len("{:,}".format(largest_bucket_count))
+    bucket_count_format = "{:" + str(bucket_count_chars) + ",}"
+    
+    # If the largest bucket is large, then assume we're looking at read lengths
+    # and format bucket ranges as integers. If it's small, assume we're looking
+    # at qualitys and format the ranges with decimals.
+    largest_bucket = max(boundaries[i] for i in range(buckets))
+    if largest_bucket >= 1000:
+        largest_bucket_chars = len("%.0f" % largest_bucket)
+        bucket_format = "%" + str(largest_bucket_chars) + ".0f"
+    else:
+        largest_bucket_chars = len("%.1f" % largest_bucket)
+        bucket_format = "%" + str(largest_bucket_chars) + ".1f"
+
+    format_string = bucket_format + ' - ' + bucket_format + ' [%s]: %s%s'
+    for bucket in range(buckets):
+        bucket_min = bucket_max
+        bucket_max = boundaries[bucket]
+        bucket_count = bucket_counts[bucket]
+        bucket_count_str = bucket_count_format.format(bucket_count)
+        star_count = 0
+        if bucket_count:
+            star_count = bucket_count // bucket_scale
+        if options.percentage:
+            percentage = " (%0.2f%%)" % (100 * Decimal(bucket_count) /
+                                         Decimal(samples))
+        print(format_string % (bucket_min, bucket_max, bucket_count_str,
+                               options.dot * star_count, percentage))
+
+
+if __name__ == "__main__":
+    parser = OptionParser()
+    parser.usage = "cat data | %prog [options]"
+    parser.add_option("-a", "--agg", dest="agg_value_key", default=False,
+                      action="store_true", help="Two column input format, " +
+                      "space seperated with value<space>key")
+    parser.add_option("-A", "--agg-key-value", dest="agg_key_value",
+                      default=False, action="store_true", help="Two column " +
+                      "input format, space seperated with key<space>value")
+    parser.add_option("-m", "--min", dest="min",
+                      help="minimum value for graph")
+    parser.add_option("-x", "--max", dest="max",
+                      help="maximum value for graph")
+    parser.add_option("-b", "--buckets", dest="buckets",
+                      help="Number of buckets to use for the histogram")
+    parser.add_option("-l", "--logscale", dest="logscale", default=False,
+                      action="store_true",
+                      help="Buckets grow in logarithmic scale")
+    parser.add_option("-B", "--custom-buckets", dest="custbuckets",
+                      help="Comma seperated list of bucket " +
+                      "edges for the histogram")
+    parser.add_option("--no-mvsd", dest="mvsd", action="store_false",
+                      default=True, help="Disable the calculation of Mean, " +
+                      "Variance and SD (improves performance)")
+    parser.add_option("-f", "--bucket-format", dest="format", default="%10.2f",
+                      help="format for bucket numbers")
+    parser.add_option("-p", "--percentage", dest="percentage", default=False,
+                      action="store_true", help="List percentage for each bar")
+    parser.add_option("--dot", dest="dot", default='∎', help="Dot representation")
+
+    (options, args) = parser.parse_args()
+    if sys.stdin.isatty():
+        # if isatty() that means it's run without anything piped into it
+        parser.print_usage()
+        print("for more help use --help")
+        sys.exit(1)
+    histogram(load_stream(sys.stdin, options.agg_value_key,
+                          options.agg_key_value), options)


=====================================
scripts/read_info_histograms.sh
=====================================
@@ -0,0 +1,48 @@
+#!/usr/bin/env bash
+
+long_reads=$1
+illumina_1=$2
+illumina_2=$3
+
+# Get the directory of this script.
+script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+
+# Get paths to other necessary files.
+hist="$script_dir"/histogram.py
+filtlong="$script_dir"/../bin/filtlong
+
+# Prepare a tab-delimited file of read info.
+if [ -n "$illumina_1" ] && [ -n "$illumina_2" ]; then
+    illumina_args="-1 "$illumina_1" -2 "$illumina_2
+else
+    illumina_args=""
+fi
+$filtlong $illumina_args --min_mean_q 1 --verbose $long_reads 2>&1 >/dev/null | grep -P "length = \d+"  | sed 's/\s\+length = //' | sed 's/\s\+\w\+ quality = /\t/g' > temp_filtlong_read_info
+
+printf "\n"
+echo "READ SET SUMMARY"
+echo "----------------"
+printf "number of reads: %'d\n" $(cat temp_filtlong_read_info | wc -l)
+total_bases=$(cut -f1 temp_filtlong_read_info | paste -sd+ - | bc)
+printf "number of bases: %'d\n" $total_bases
+target=$(($total_bases / 2))
+n50=$(zless $long_reads | paste - - - - | cut -f2 | awk '{print length($0);}' | sort -nr | awk -v tar="$target" '{sum += $0; if (sum > tar) {print($0); exit;}}')
+printf "N50 read length: %'d\n" $n50
+
+printf "\n\n"
+echo "READ LENGTHS"
+echo "------------"
+cat temp_filtlong_read_info | awk '{print $1, $1}' | $hist -a -m 0 -b 40
+
+printf "\n\n"
+echo "MEAN QUALITIES"
+echo "--------------"
+cat temp_filtlong_read_info | awk '{print $1, $2}' | $hist -a -b 40
+
+printf "\n\n"
+echo "WINDOW QUALITIES"
+echo "----------------"
+cat temp_filtlong_read_info | awk '{print $1, $3}' | $hist -a -b 40
+
+printf "\n"
+rm temp_filtlong_read_info


=====================================
src/arguments.cpp
=====================================
@@ -88,6 +88,9 @@ Arguments::Arguments(int argc, char **argv) {
     i_arg min_length_arg(thresholds_group, "int",
                          "minimum length threshold",
                          {"min_length"});
+    i_arg max_length_arg(thresholds_group, "int",
+                         "maximum length threshold",
+                         {"max_length"});
     d_arg min_mean_q_arg(thresholds_group, "float",
                          "minimum mean quality threshold",
                          {"min_mean_q"});
@@ -198,6 +201,9 @@ Arguments::Arguments(int argc, char **argv) {
     min_length_set = bool(min_length_arg);
     min_length = args::get(min_length_arg);
 
+    max_length_set = bool(max_length_arg);
+    max_length = args::get(max_length_arg);
+
     min_mean_q_set = bool(min_mean_q_arg);
     min_mean_q = args::get(min_mean_q_arg);
 
@@ -245,9 +251,9 @@ Arguments::Arguments(int argc, char **argv) {
 
     // If nothing is set, then Filtlong won't do anything. Give an error message and quit.
     if (!trim && !split_set && !target_bases_set && !keep_percent_set &&
-            !min_length_set && !min_mean_q_set && !min_window_q_set) {
+            !min_length_set && !max_length_set && !min_mean_q_set && !min_window_q_set) {
         std::cerr << "Error: no thresholds set, you must use one of the following options:\n";
-        std::cerr << "target_bases, keep_percent, min_length, min_mean_q, min_window_q, trim, split\n";
+        std::cerr << "target_bases, keep_percent, min_length, max_length, min_mean_q, min_window_q, trim, split\n";
         parsing_result = BAD;
         return;
     }
@@ -265,6 +271,13 @@ Arguments::Arguments(int argc, char **argv) {
         parsing_result = BAD;
         return;
     }
+ 
+    // Non-positive max_length doesn't make sense.
+    if (max_length_set && max_length <= 0) {
+        std::cerr << "Error: the value for --max_length must be a positive integer\n";
+        parsing_result = BAD;
+        return;
+    }
 
     // keep_percent must be between 0 and 100 (exclusive).
     if (keep_percent_set && (keep_percent <= 0.0 || keep_percent >= 100.0)) {
@@ -311,4 +324,4 @@ Arguments::Arguments(int argc, char **argv) {
 bool Arguments::does_file_exist(std::string filename){
     std::ifstream infile(filename);
     return infile.good();
-}
\ No newline at end of file
+}


=====================================
src/arguments.h
=====================================
@@ -42,6 +42,9 @@ public:
     bool min_length_set;
     int min_length;
 
+    bool max_length_set;
+    int max_length;
+
     bool min_mean_q_set;
     double min_mean_q;
 


=====================================
src/main.cpp
=====================================
@@ -29,7 +29,7 @@
 #include "kmers.h"
 #include "misc.h"
 
-#define PROGRAM_VERSION "0.2.0"
+#define PROGRAM_VERSION "0.2.1"
 
 KSEQ_INIT(gzFile, gzread)
 
@@ -94,9 +94,14 @@ int main(int argc, char **argv)
 
             any_fasta = (any_fasta || fasta_format);
             any_fastq = (any_fastq || fastq_format);
+            if (any_fasta && any_fastq) {
+                std::cerr << "\n\n" << "Error: could not parse input reads" << "\n";
+                std::cerr << "  problem occurred at read " << read_name << "\n";
+                return 1;
+            }
 
             if (fasta_format && kmers.empty()) {
-                std::cerr << "Error: FASTA input not supported without an external reference" << "\n";
+                std::cerr << "\n\n" << "Error: FASTA input not supported without an external reference" << "\n";
                 return 1;
             }
 
@@ -125,10 +130,6 @@ int main(int argc, char **argv)
     std::cerr << "\n";
 
     // Determine the output format.
-    if (any_fasta == any_fastq) {
-        std::cerr << "Error: could not determine input format" << "\n";
-        return 1;
-    }
     bool fasta_output = any_fasta;
     bool fastq_output = any_fastq;
 


=====================================
src/read.cpp
=====================================
@@ -65,6 +65,8 @@ Read::Read(std::string name, char * seq, char * qscores, int length, Kmers * kme
     m_passed = true;
     if (args->min_length_set && m_length < args->min_length)
         m_passed = false;
+    else if (args->max_length_set && m_length > args->max_length)
+        m_passed = false;
     else if (args->min_mean_q_set && m_mean_quality < args->min_mean_q)
         m_passed = false;
     else if (args->min_window_q_set && m_window_quality < args->min_window_q)


=====================================
test_sort.fastq deleted
=====================================
@@ -1,12 +0,0 @@
- at test_sort_1
-AGCGGGACTCTTCCCGAGGGGCCTGGAAATACCACGGATTCCAATAGTACGTTCTGTTAGCTGGGTGTCTTTATGCATGCCAAGGTTCGAACCTCCGGCCATGTTGGATGTTGAAAAGGTAGCCAGCGAGATGGAAGAAGGCCAAGGCTTCATATTACCCCGAATTCTCAAGGTGGATAAGGGGAACTAACGGCTGCGAGCATGCAGCTGGCATCAATGGCCAGGCGACAGATTTACTCTACTTTCCGCTGCTTGTTCTGGATTGGGATGTTAACCCTTTGATCCCACAGAGGTCAGCGGAGAAAACAACGTCTAAATATAGTCGGACAGACTGTAGCGACCCGGTTAGCACTCCCTAATTTTATCTAACTAGGCGGACACACTCTTACCACAGGGGCTCCAAGGTTCTCTCATTTCCGTGGGTGTAGCAACGTCCTATTCTTATGCGGACGCGAAGTAACGAGTATTCTCTTGGATTTTAACTGAGCTATCACTCCGCGTGAAGGATAACCGGCTTGACTAAAGGAGACGGTCAGTCGCAGAGGGCAACGCGCTATATACATTCGGTTTATTGAGTTCACCCTGGATAGTGACGCGGCCCTGGTTGTAGGTCGGGGCAAACTCTGAAATTGCTACTCGTATACAGGGTTGTGCGCTCGTAAGGACTCCCCCCTGGCGTCGAAGCTAGTTCGACAAAATGGCCCCGGAAGACGTTATCTAGATGAGTCTGGGTGGCTTTCAAGAATTCGCCTATCTTGGTACCTGGCCCTAACGATCAGACAGGCGCACTGCTGATGAGGGCATGTACCGACCATACGGTTTTTCTTCAGGCAAATGCCCGTTCCGGTGTCCGTGGTCAAGACTCAAAATCTCCCCTAAGGCTGTCACGAATTAGAGTTTCGTGTGAGAGATTAGTGTTAGCCCTCAGTGGGTCCTAATAAGAACCCACTAAGTTAGCCTCGCCGGTACGCAGACCTAGAGACTTGTTGGTGGGCAGCTTCTGCGCTGTTGGCATTCCTGCATAAAGAGAAACGTTATCGGCTGCCGGTGTCATCTGCCAGTGCTGCCGAGTCGAGCTTGTAGCACTCATTGAAGGTGCTGTGAGCTGCACGCCTCCACTAATTTAATCCCCGTCGCAAAGTTGGTCAGACCAGGAGCCTTCAGTGCACTGTGACAACTGGAATTCCGACTCCGGAAAAGTGCAATGGGTGTCCAGTGGACGACTTCTTGTGATTCGCGCCCGCGCCGCGTCCACAGGGGGACTCGGCGAAAAGTACAAAAGTAGGGGGAGCGCCCTGAGGAGAGTGGATCGTGCCGTCACCGGGTGACGGGTACAAGAACCTACTACTAGTGACGATGCTCTTAGATGGAGTGTAGCACGATCTTCACGGATAAAATAATGAAACAAACTGGGGCCGTTGGGCCCCCGAAGTATATGAACTGCGGCCATGTATGTTATGAATCCCCTCGGGTTCGAGGCTGCTCAAAAGTCTGCGTAGGACTCTCATCGGGACCTATACTAGATGGCGATGCGGAATACAGCGGCCTAGCTTTTATGCGATGTGCGGGGATAATTCTAATAGTTGCGGCTGGTCCATAACCGTGGACGTCGTATATTGGCAGACCTGCACAGTTGGTCCGATTAGACATACAGCACCCTTCTACATCCTGTTGTTCTGGAGAAGCCCACTCTAGTAGGACGGTTTACCTATGGACATGCGGTGTCCTAAATCATCCTACCGGAATTCTCATGCACTTCTGCCGTTCCCCCGAACATTCTAGTGGTGGGCTCGGGCTGCTGATAATCCACTCCATTGGGTGATACAAGAGGCGAGTTTGCCTTAGTTTGGGCAGGTCATGAAACCAAGCAACCGCATGCTTAGCTGGCTAATTGTTCGACTCGGCCACCAGCAAACTGTCGAAACGCGTAGAAAGTACAATTCCGTAAGCGAGTTCGGAATCCAGACCCGCGGCAATGCCCTCTCTTCCTACGCAGCGACCCCCTGTTTACACAGACAAGGCCCCGATGGCCAATCGGGAGTCTCGACGAGTGCCATAGAGGCGCCCTACCGGCGTCAGTGGGGGTGATTAATCACTTCACTGGTTCGCGGTGGGCTACGCGCTCACCTAGCTTCCCCGTAGTGTATTGACGAGTGTGGGCCCAGGATATGGAAGTTAAGGCTGGAGGAATAGATAACCGTCGTACCTCCCCTGGACGAGATAGCACTAAATCCTGGAAATGAGACGGATCCGAGAGTTCTGATAATGTTCGAGATGGGACAACAGGCGAATCTCGCAAACGTGCTTCAAAATATAACGTAGCATCCCGCTTATGGGCTTTATCGCGAAACCTGACAGCGCTCCCTCAAACCCCTAGTTCGGAAAATCGTGTCGCTCCTACAGTCCATCACTCAACTTCAGTTGAGCAATAAGTTTAGGGCGCGTCACTCTATCTACTTTACTGCTGAATGGACCCTTGTGTGGATCGTAAACCTTCAAGTCCCTGGGACTGCCTGTTCTTGCGATGATAAGATTAAGTGTTTGCCCGTTTGCCAACCATCCCTCAAATCTCGTTGATGAACCTGCCCCTTCTGTTCCATTACCAATCGACGGCTCTAACTTTTCAATCTGTGGCATGGACCCCATAAAGAGGGACCAGCGTTCAGGGAGACTTCTACAAACTTACGTTACATTATACCGTTCGCGGTGAGCGTGCGGTCAAGCATTCCAAAAGTACTCCGCGAGCCGTACGATCGACCTCTAGTATACTCCTGGTGCGGAGCAAACGATTTGAGCAGGCCTCATATAGAATGTGCAATCGCTCATTGTCGCAAAGCCACAACCAGTCACGCCGTTCGTCGACTACCACCCACTTCGTGGATGTGCGCCAAGTCTGTCTCCAGCTCTCAAGACTCATTGCAACTTGCCAATAACCTCAGTGCCTTGTCACTTCGAGTTCTTGAGGAATAGTCAGGGTCCTTAAACTTCATCGACTCGGCACAGTCTCTAGCCTCATTACTTCCCATTCCGGCCCGATGTGGAAGCGGTCCGGCTACTCAAATGCTCCCGGAGACCGAAGATTTCGGGACCTTTCGTTGTCAGACGCCAGTCATTGTTGCCTCTAACTGCATTGGAATCTGGCCCAAATAGAGATTGACCTCGGGAATCCGTCGCTGGGCAGGGCGTCGTACTCTGAACGGGACATCACTCCCGACCACCGGGGGGCGTCGTAGGTGCAGCAGACTGACAAATCCGTCCCAGTCGACTTATGTTCGCATGTCGTTATTAACTGCCTTGTACCTACGGTATGTACTGAACCACCGAGATCAGGGCAGGTTGAGCAAATTCATATCTCAAGGTGTGTCGAGAAAAAACGATTTAAGCTCTAGACCGGGAGTGCTGGTCAGAGTGTTCTGCTCACAAGGAAGCAATTCGGTGTTGGGTACCAATCAGAAATCACACCGTGGCTCTGAGCTTAATCCCTTGGGTTGGGCAACCGGGAGGACCAAGAGTACCGGCGACGGCCTCTGATTCTTGACGGTATAGGAGACATGCCTATACACGTTCGAGAGTAGTGACAGCATAGGATGCCTCAACGCTTTTACTCACGAGTGTGTGGTCCAATCTTGATGTCTAGACATGAGTTTTTCTAACGAGTGAACGGTATCCTATCCGCCCTCTGGATCAGCGGTTTCGGGGGTCCCTATGATGCTGTTCATATGCTCTGTCCATTGATTTGAGCCTACGGTATGAAGCACTCGCGGTGAAAAGGTTGCTGTAACCCGCGGGTGGTTACGATCTAATCTTCTGGTACGAAGGCGTGCCGTTACGCCAAAACTGGTACCTTGGTGTTTTTGCTGATCTCCAGAATTTTTGCTGTACTATTCCAATTTAGGAGTCATGAGTCCGGAATGTCATTCCGACAAGCAGTATTCCCAACAGAGAACACTTGCATACTCGTTAATGATGAACACCTCTAATACGGAGACGCACCAGGTCTCCTAATCCCGGTTGTTTGCGACTCTGTTGTATATGATCAGAGAAAGGCGTATAAGAGCACCCCTATCTGTTGTCGTTTGGTCCGGACTCTTTAACTTCGGACCCAGACTCCCCCATGTCGCCATGCAACGCACCCATTTCAGGACTTTATCTGAAGCCTCTGCAAGTAGTACAGATCGCTTGCCCTCCTTGTTCGTTAGGTTAAAGTACATTTGACGATCACAGCCCCCATGTTCTTCTTAAGTCCTGGGCCTGCAAGACATGGTAACACTATAACCAATGCTACGTAATAAACGGATAAACAGAGCCATGACATTGGCACAGCGTGCCGTGATCCGCTTACCAAATGATAAACTTGGTGATAATAGCAGTTTATTTGTAAGCCGTCGCGTGACAGAGGTCTGTAACTCTGATGAATTCCGAGCGCGCGTCGTCTGAAGTTGGTTGGCTAGGATTCGTCCTTAATGCAGTCTAAGCTGCCAGTAGCCACGAGAGTTAATTCACAAAGGTGGTACGCTGCTTCACAGTTCCAGGATGTAGAGTCAGAACCACTATAAAATCAAGTGCTCTTATGATAGGGATTGCCAGGTCGTTTGGAACTCGCTCAGACAGTCGCCGTCATAGAAATACATTACCTAAGCCCACGTGATATTGAACAGACCCCGCTATGGGATATAGTATACGAACGTAATAGAAGAACCGGATAACCTTGGTAAATATCTTCCAGAACGGGTCCGGCCGTTTAGCGTGATTTCAGACCTTAGTGTCAACTTCTCTACTTGCTGGTGGATAAGTATTACCACTTTTATTCCAACCGGTAGACTACGCCATGAGTGTGCGAGGACGCAGTGGAGCCGGACGAAGGCATGTCGACAGATATCTATCACAAGCCAAATACGCGGACTTGCGGAGGCACCGATATTTGGTACTTTTCTTGGATTATAATCGTTTGGTAGGCCTTGTGGTAACCATGTGAGCGTCGTGGCGCTCGGAACTACTTT
-+
-,,++,+**++**,*,,,+***,+*+*+*+,*,+**,*+++*,++*,+*,++*,+,+,+,*+++*,*+**,++*++****++,**,*+,*+++,*,,,***++,*,*++,+,**+,++++++**,++,,+*,+*+,*,***+*+++,,,**+**+++**+*,,*+,++**,,,,*+,,*+**+*,+,*+*,*+*+*+++,,,,,+*+,++,+**,*+,+,+**+,,++*++***,*,+,,,,+*+,*,*,**,++,+*,++*,,,*+++,+,*+,,*+*+*,,,,,+,+++,**,+*,+++++,,,,+,++++++,,,,*,,*,+*,*++*,+,+,++,,+*,*+*+,++*,+*,+*++,,++,,,*++**,,,,+**+*,++++++*,,*+,,,,,*,*+++**++,*,*,+++**,,*,*+,*++,,,*,+*,,,+*+*++*,***+,,,,++*+,**,*,,*,+*,,**,+,,,+*,***+,++,,,***,+++,++,+,**+**+++,,*++,**,*,+*,,+**,*,*+,,,++,*,**+,**,*++,*+***,,,,+*,+,+*,++,+*+,,+*+,+++*,,,*+*++,+,,*+++*,+*,,+,+,*,++*+,*,**,+**+*+++*+++,,,+*+,,++*,*+,**,,**+,++*,+*,**+,+,,,*++*++,*,,**+,+***,+++++,,,+,,**++*,,,,*,**+,,*,,*+*,*,**+,,,**,,+,,**++*+*,,**,*,,+,,+*++**+*+***+,*+,*+,***+,*,**,,,,+,*,++,+,+,++,*+**+**+*+,+***,++,+*++,,,,+*,,*+++*+*+*,**,,,+,+,++,**+,*,+,+*,**+,+++,*,+,,,**++,*,,++***,+,,,+*++,++,***+*++*,++*++,*,,+**,,++,,*+,+***+*,++,***+,,**,+*+,,+,+**++*,**,*+,,**,,+**+*,**,+,+*+,++***+**,,+**,,++++,,**,*+*,+,+,+++,,++,+***,*,,*,**++,,**,,+*,+,*,,,,,,*,**,+,+,++*,,,+,+,*,*,***+*+++*+,+,*++****++,,,++,++,+*****+*,,+++*+**,**,,,,*,**+++*+,+,*,+,*+*,+*,,,+,++,**,*,,+,*+*+,+,+,*,++*+++++,*+**+*++,+,,********+,++*,****,,++*,*++,*+,+*+,,*+++,**++*,,++*+**++**+,+**+*+++,++**,+,+++++*+*++*,**+,+,,+,,,+*+**,*+,+**+,+*+*++,+++,,,*,*+++*,,+,+++*+,,+,,+**,*,+,+,*+,++****,*,,*,,,+*++,+,,+,+**,**++++,,++,+,,*,*,,*,,,,*,*+,+*+*,***+***+++,+*+,,,+**,+,+,*,+,,*,,*,,,,****,,+*++****++,+**+*,*,,++*,,+***+*+++,**,*+*,+*****+*,**,*,**,,+,+++*,*+,+**+*,+*++,**++*,*,+,,++,****++**,*****+++,,,++*,+*+,*+***+*,**+**++,*++,+++++,****,+*+,,,*+**+++*+,*****++,,**,++*+,,+,+****++,+*+**+*+***+,,,+,**+*+*****,**,,,*+*,*,+*,*+++***,,+*++,,,+++*,*++,+,*+,,+,++**+,***+****,,+**,+*,,+*+*+*+,,*,+*++*,**+++++,+,,,+,+***,+*,**+,*,,,,,**,,++,+,+**,,+*****+++,++*,+,+,,+*+*,,+,*,+*+,*,,,+***+**,++++++++++**++**,++,+*+++*,+*++**,*,+,+++++,*+,+++++*+**,,,,*+*,++,*,+*,,*+*+,*,,,*+**++*+**++,*+*++,+,,,,+,++,*,+*,*,,+,,*,,*,+,,**++,,*++,*,,++*,*++,*++***++*+++,,**++*,+***+**+*,**++,*,++*++*+**,*+,+*,*+*,,**,,++,,,*+**+*,*+,,,+**,**+++*+++,,,*++,+,+,**+***,,+,,*,*,*+,+,,,***+,,++,,++++,++,+*,,+***+,,*+**,*+,,,*,,+,,**++++++++*,+,++,+*+,,+,**,+*+,*,+++,*,+*,**,+**+,*+,,,+,+,+,,,,++,,*,*,+*+*,*+++*,,+,,+*+***+,++,,+*++,+,,,+++,***,,*+**+,*+,+,,,*++,,,+++,+*+++++++,*,**+*++++****,*+*,**,+***+***,,*,+*,,+*,+,+,*+,**,*,+,,,*+*,,*****++,,*+++,,+,,+,,,+,***,+++**+*+++,+,,,,,**+,+,*,++,***+++*+*,+*,+*,*+,,++,+,*,,+*+*,,+***,+,,+,+*,*****++,+,+**,+,,*,,+**,+*,+*,*,+,,,*,+***,**+**+*,,++,***+,**,,,,++++,+,+*,**,,,++,*,*+,,+*,,,+++*,,,+*++*++*,*,,,,,,,**,+,,,+,+,*+,**++,*+,*,++*,,,**+++******,,**+**,,*++*,*,,+,,*,,,+,,**++,+*+*,+,*,,,,,***++*+***,,,*+,+**,**+*,**,,+++*,+*+,*,*+,+,**+*,,,*,*+*+*,,+,*****,*+**,,*+,,++**++,,*,,*+*,**,*+,,,+,*+*,*,*+,**,,,++*,+,+,,*,,***,*+***,++,***,*,,*+++,*++*,,,,,*++,**+,,+,*,*,***+**,*,+*,,+++*,*,*,*,,**+**,,,+****,,*,,+,,*,,*,*,,,*++*,,+,,+***,*,,+,++**,+*,++,+,,,,,*++,*,++*+******++++++,+**,+,++,*+,,,,+,++*+,***,,+,,*,*,**++*,,+***,+,,*,+*+,,*+**+,,,,+++**,*,,**++**+,,++*,*+++*,+**+*,**+,,+,,,,,+*+**+*++***,++++,***+,,*,,+,,++*,+*,,,**,,,++,*++,,+*+,**+**,**++*++,++*,+,+*+*+**,,,++,++,+,**++,*,*,,,**+*+**,+*+*+***,,+,+++++*+,++++++,,,,,*,*+,**+,+*,,++,++,+**,*+*+,,*,*,**,,,,*++*,+*,*+,*++,*+,*+***,*,*****++,,,*+*,*+**,,*+**++**,,*,,++,*+,+*+,,++++,*+***+++**,*,,*+,*,+*,+,**+++**,,**++++,,*++,+*+,++++,,,,,+,*,,+,*,,,*+*,,+,+*,+,+*+++,*,,+**,******,,,*,+,+**,,,*,,,,+*,+,*++++*++,+**+*,****,,,+**+,,+++*,*,*,,,+,++*,*+**+,,++++,*****,***+*++,+**+*,*****,***,+,+*++*+**++,,**+,+*+*,+,,,*+**++*+*,*,+,+,,++,*++**++,++,,,*+**,,+,,,*,*+*,*,*,,,*,+++++,+*,*,+,*,,,+++,*,,**++,++,**,+*+*+,,++**,*+*,+*+**,*+*,*,**,,*,,+***+,***,*++**+,,*,,,,,,*,*,**,+*+*,,++,+++,+,,++,+***,*+,+,++++****+*,,,,,*+++,+,*,+*+,*+,,+,++++,*,,***,,+*,**,****,,+*+*,+,,*,**,****++*,,*+*,+*+*+,+,,,*++**,,++*,++,++++*+*,,++**+,,,,,**+,,*,,*++**+**+,+,+*+++++***+**++*,,++,+,+*,++,,,+++,*+,*,*++*+,***,++,,,****++*,*+*+++,,+,+*+,*,,*,+++,,*,+**,,,,+++,,+,+,+****+**,,+,+**,*,,*+,*,,+,*,,,+,*,+*+**+++,++*,*,+,++*+++,*+,++**+*+***,+++++**,,***+,+,*++***++*++++,,*,,+++,+***,+,++*+,,,,+*++*+,++*+*,*+,++*,,**,++*+*,+**,,++,*,*,*+*+*+++,*+,,,,,,+,++*++*+*++,,,*+*+*,,**+,**,**,*,,,***,+,,**,*+,+,,+*+*+*,,+*,+,,*,*,,,+,,,*+*++**,+,,,++*+,,,,,*+,*+,*++,***+*+,++,+++*,,**+**,+,,**++**,++*+*++,**,,,*+*+++**+*,+,,,*,,,*,****+,*****,*,++,,***+,,*,*++*,,++,,*,**+,+,,+,++*,++*,++,+*+++,,,,,,*+,,,,,+,+,+*,,*,,+,*+,*++*,*,*++,**,+*+*+++*+,*,***,,+,*+*,*,,++,,++,**,++**,*,,+++,*+,+,,**,,,****++*,+**++,*,*+*+*,,,,*,+,++,,,*****++*+*,,*+**,,*,,+*++,*++**,++,,+,*,*,++,*+*+*,,**,,,+,,,+**,+,+,,++*+*,*,,,*,,,*,***,*+++***,+,+,**,+,+*+,+,*,**,,,,,,,++,*,+,,++,++*,*,+,+*+*,*,,,******,**+,+,*++*+++,,,,*,*,++,***+,+,*,+++++,,,+++**++,***+,*****,***+*,*+*++,**,,,,,*+*,+,,*+***,**,+,*,,,,,**,,+*,**,,*+,***,**++++,*+++**+***,,+*,+*,++*++++,+*,+,**,+**,,**+,+++++*+**,+*,++,**+*+++,**,,+,*,+*,+,++,,,*
- at test_sort_2
-AGCGGGACTCTTCCCGATCGGCCTGGAAAAACCACGGATTCCAATAGTACGTTCTGTTAGCTGGGTGTCTTTATGCATGCCAAGGTTCGAACCTCCGGCCATGTTGGATGTAGAAAAGGTAGCCAGCGAGAAGGAAGAAGGCCAAGGCTTCATATTACCCCGAATTCTCAAGGTGGATAAGGGGAACTAACGGTTGCGAGCATGAAGCTGGCTTCAATGGCCAGGCGACAGATTTACTCCACTTTCCGCTGCTTGTTCTGGATTGGGATGTTAACCCTTTGATCCCACAGAGGTCAGCGGAGAAAACAACGTCTAAATATAGTCGGACAGACTGTAGCGACCGGGTTAGCACTCCCTAATTTTATCCAAGTAGGCGGACACACCCTTACCACAGGGGCTCCAATGTTCGCTCATTTCCGTGGGTGTAGCAACGTCCTATTCTTCTGCTGACGCGAAGTAACGAGTATTCTCTTGGATTTTAACTGAGCTGTCACTCCGCGTGAAGGATAACCGGCTTGAGTAAAGGAGACGGTCAGTCGCAGAGGGCAACGCGCTATATACATTCGGTTTATTGAGTTCACCCTGGATAGTGACGCGGCCCTGATTGTAGGTCGGGGCAAACTCTGAAATTGCTACTCGTATACAGGGTTGTGCGCTCGTAAGGACTCCCCCCTGGCGTCGAAGCCAGTTCGACAAAATGGCCCCGGAAGACGTTATCTAGATGAGTCTGGGTGGCTTTCAAGAATTCGCCTATCTTGGGACCTGGCCCTAACGATCAGACAGGCGCACTGCTGATGAGGGCATGTACCGACCATACGGTTTTTCTTCAGGCAAATGCCCGTTCCGGTGTCCGTGGTCAAGACTCAAAATCTCCCCTAAGGCTGTCACGAATTAGAGTCTCGTGTGAGAGATTAATGTTAGCCCTCAGTGGGTCCCAATAAGAACCCACTAAGTAAGCCTCGCCGGTACGCAGACCTAGAGACTTGTTGGTGGGCAGCTTCTGCGCTGTTGGCATTCCGGCATAAGGAGAAACGTTATCGGCTGTCGGTGTCATCTGCCAGTGCTGGCGAGTCGAGCTTGTAGCACTCATTGAAGGTGGTGTGAGCTGCACGCCTCCACTAATTTAATCCCCGTCGCAAAGTTGGTCAGACCAGGCGCCTTCAGTGCACTGTGACAGCTGGAATTCCGACTCCGGAAAAGTGCAATGGGTGTCCAGTGGACGACTTCTTGTGACGCGCTCCCGCGCCGCGTCCACAGGGGGACTCGGCGAAAAGTACAAAAGTAGGGGGAGTGCCCTGAGGAGAGTGGAGCGTGCCGTCACCGGGTGACGGGTACAAGAACCTACTACTAGTGACGATGCTCTTAGATGGAGTGTAGCACGATCTTCACGGATAAAATAATGAAACTAACTGGGGCCGTTGGGCTCCCGAAGTATATGAACTGCGGCCATGTATGTTATGAATCCCCTCGGGTTCCAGGCTGCTCAAAAGTCTGCGTAGGAGTCTCATCGGGACCTATACTAGCTGGCGATGCGGAATACAGCGGCCTAGCTTTTATGCGATGTGCGGGGATAATTCTAATAGTTGCGGCTGGTCCATAACCGTGGACGTCGTATATTGGCAGACCTGCACAGTTGGTCCGATTAGACATACAGCACCCTTCTACATCCTGTTGTTCTGGAGAAGCCCACTCTAGTAGGACGATTTACCTATGGACATGCGGTGTCCTAATTCATCCTACCGGAATTCTCATGCACTTCTGCCTTTCCCCCGAACATTCTAGTGGTGGGCTCGAGCTGCTGATAATCCACTCCATTGGGTGATACGAGAGGCGAGTTTGCCTTAGTTTGCGCAGGTCATGAAACCAAGCAACCGCATGCTTAGCTGGCTAATTGTTCGACTCGGCCACCCGCAAACTGTCGAAACGCGTAGAAAGTACAATTCCGTAAGCGAGTTCGGAATCCAGACCCGCGGCAATGCCCTCTCTTCCTACGCAGCGACCCCCTGTTTACACAGACAAGGCCCCGATGGCCAATCGGGAGTCTCGACGAGTGCCATAGAGGCGCCCTACCGGCGTCAGTGGGGGTGATTAATCACTTCACTGGTTCACGGTGGGCTACGCGCTCACCTAGCTTCCCCGTAGTGTCTTGACGAGTGTGGGCCCAGAAGATGGAAGTTAAGGCTGGAGGAATAGATAACCATCGTACCTCCACTGGACGAGATAGCACTAAATCCTGGAAACGAGACGGATCCGAGAGTTCAGATAATGATCGAGATGGGACAACAGGCGAATCTCGCAAACGTGCTTCAAATTATAACGTCGCATACCGATTATGGGCTTTATCGCGAAACCTGACAGCGCTCCCTCAAATCCCTAGTTCGGAAAATCGTGTCGCCCCTACAGTCCATCACTCAACTTCACTTGAGCAATAAGTTTAGGGCGCGTCACTCTATCTACTTTACTGCTGAATGGACCCTTGTGTGGATCGTAAACCTACAAGTCCCTGGCACTGCCTGTTCTTGCGATGATAAGATTAAGTGTTTGCCCGTTTGCCAACTATCCCTCAAATCTCGTTGATGAACCTGCCCCTTCTGTTCCATTACGAATCGACCGCTCTAACTTTTGAATCTGTGGCATGGACCCCATCAAGAGGGACCAGCGTTCAGCGAGACTTCTACAAACTTACGTTACATTATGCCGTTCGCGGTGAGCGTGCGGTCAAGCATTCCAAAAGTACTCCGCGAGCCGTACAATCGACCTCTAGTATACTCCTGGTGCGGAGCAAACGATTTGAGCAGACCTCATATAGAATGTGCAATCGCTCTTTGTCGCAAAGCCACAACCAGTCACGCCGTTCGTCGACTACCACCCACTTCGTGGATGTGCGCCAAGTCTGTCTCCAGCTCTCAAGACTCATTTCAACTTGCCAATAACCTCAGTGCCTTGTCACTTCGAGTTCTTGAGGAATAGTCAGGGTCCTTAAACTTCATCGACTCGGCACAGTCTGTAGCCTCATGACTGCCCATTCCGGCCCGATGTGGAAGCGGTCCGGCTACTCAAATGCTCCCGGAGACCGAAGATTTCGGGACCTTTCGTTGTCAGACGCCAGTCATTGTTGCCTCTAACTGCATTGGAATCTGGCCCAAATAGAGATTGACCTCGGGAATCCGTCGCTGGTCAGGGCGTCGTACTCTGAACGGGACATCACTCCCGACCACCGGGGGGCGTCGTAGGTGCAGCAGACTGACAAATCCGTCCCAGTCGACTTATGTTCGCATGTCGTTATTAACTGCCTTGTACCTACGGTATGTATTGAACCACTGAGATCAGGGCAGGTTGAGCAAATTCATATCTCAAGGTGTGTCGAGAAAAAACCATTGAAGCTCTAGACCGGGAGTGCTGGTCAGAGTGCTCTGCTCACAAGGAAGCAATTCGGTGTTGGGTACCAATCAGAAATCACACCGTGGCTCTGAGCTTAATCCCTTGGGTTGGGCAACCGGGAGGACCAAGAGTACCGGCGACGGCCTCTGATTCTTGATGGTATAGGAGACATGCCTATACACGTTCGAGTGTAGTGACAGCATAGGATGCCTCAACGCTTTTACTCACGAGTGTGTGGTCCAATCTTGATGTCTAGACATGAGTTTTTCTAACGAGTGAACGGTATCCTATCCGCCCTCTGGATCAGCGGTTTCGGGGGTCCCTATGATGCTGTTCATATGCTCTGTCCATTGATTTGAGCCTACGGTATGAAGCACTCGCGGCGAAAAGGTTGCTGTAACCCGCGGGTGGTTACGATCTAATCTTCTGGTACGAAGGCGTGCCGTTACTCCAAAACTGGTACCTTGGTGTTTTTGCTGATCTCCAGAATTTTTGCTGTACTATTCCAAATTAGGAGTCATGAGTCCGGATTGTCATTCCGACAAGCAGTATTCCCAACAGAGAACACTTGCATACGCGTCAATGATGAACACCTCTAATACGGAGACGCACCAGGTCTCCTAATCCCGGCTGTTTGCGACTCTGTTGTATATGATCAGAGAAAGGCGTATAAAAGCACCCCTATGTGTTGTCGTTTGGGCCGGACTCTTTAACTTCGGACCCAGACTCCCCCATGTCGCCATGCAACGCACCCATTTCAGGACTTTATGTGAAGCCTCTGCAAGTAGTACAGATCGCTTGCCCTCATTGTTCGTTAGGTTAAAGTACATTTGACGATCACAGCCCCCATGTTCTTCTTAAGTCCTGGGCCTGCAAGACATGGTAACACTATAACCAATGCTACGTAATAAAAGGATAAACAGAGCCATGACATTGGCACAGCGTGCCGTGATCCGCTTACCAGATGATAAACTTGGTGATAATAGCAGTTTATTTGTAAGCCGTCGCGTGACAGAGTTCTGTAACTCTGATGAATTCCGAGCGCGCGTCGTCTGAAGTTGGTTGGCTAGTATTCGTTCTTAATGCAGTCTAAGCTGCCAGTAGCCACGAGAGTTAATTCACAAAGGTGGTACGCTGCTTCACAGTTCCAGGATGTAGAGTCTGAGCCACTATAAAATCAAGTGCTCTTATGATAGGGATTGCCAGGACGTTTGGAACTGGCTCAGACATTCGCCGTCATAGAAATACATTACCTAAGCCCACGTGATATTGAACAGACCCCGCTATGGGATATAGTATACGAACGTAATAGAAGAACCGTATAACCTTGGTAAATATCTTCCAGAACGGGTCCGGCCGTTTAGCGTGATTTCAGACCTAAGTGTCAACTTCTCTACTTGCTGGTGGATAAGTATTACCACTTCTATTCCAACCGGTAGACTACGCCATGAGTGTGCGAGGACGCAATGGAGCCGGACGAAGGCATGGCGACAGATATCTATCACAAGCCAAATACGCGGACTTGCGGACGCACCGATATTTGGTACTTTTCTTGGATTATTAGCGTTTGGTAGGCCTTGTGGTAACCATGTGAGCGTCGTGGCGCTCGGAACTACTTT
-+
-64466465654456545455456445454545456444644455645446566655656445666645546565456466454564454554456544555654546566544555564665546446545454546465566664456564445644644666666654454466464546466646445556655564465455664666566656555646446456466655656565646645645555455565656656454646464464554546455464466445544456454445554566445564656546566554555456446445464655655464545655664545654464445464554564556455666656444456456654445544566564646564464564544456465445564446455656645646566554544645646566466644444564464555566544464444664544556444655444646546456645546645464645444456656564645654465656556666465556564664455446646545666666564545454665465454454566564565645666554554655655664554566446546646556655555565654465545464444646654446564555554564556566465546566564554554545455644566544545666645566556444654645455464555646464556645546665555566556544555444554666544664665544464664444444544566466644466564645445545544446546465455466566656455446544564456565445564566646566645466445656454465664556565566665666565446456566455664646455646545564446554646545665655545464665455565664646556654645644456546564654554644554545456565664466566664644565466454455455645545655644565666464554444646546464646454446445544544446466445555444455544555654646455664665544655654556666444446555454654665455645655645554445446645454465455466546566666554464454665456456445556466656465564566666666454666555666644545445544456656555465664456454666644454465464654654566545555445565455464544644646445665666456656544664556454655566465446464454464654454665456565566546545546666554445444454564555564665555444556444545654646656566455545554664455546656546666444455664455664444565646656466664555546456565455564466645566454556455665556665656444466665564656444444445654465645664644464565446446656455644555664444654466565465455554665464644444564664565564445444554645656565446546544554554556654665566446644554546646666445654455464556646555655646664456656646556654455455665545545655466555455446565546454564565654655556555446646465455664565556565554445444464454665556664445646456464456565664465456656465666454455446445455455445454665545665446664456646666664544556555655656554444555656654665544446555455464645564455554644556444545555666645446454646455555654465654454444566464645446454654545546565465555444465555656556555566565445545464564556464564646556466464665454556555466566545454654554566456454455544566446454455645646554454446646644445455446665466464544655445646645456446445556455565655465545454566566466465454654564444666455456545555454654446545654654555466644444644665565664465466656556654455655565544644444566446444546646665464546654546566655646546654644546545466656554666464666465656465644545456456644655545664554645656445656666545545554566666656664544544654554644646664445646445466646554444565654566446646664454544664566666555646656555556445446646556566446555545545646646664544545466556645554445565564664546656465545454545564654665454446566556465644564644564655545565465455664545655544464564445554456444545654666446545566454546556464444444466545555564446555655655564445665556644564465564464444546655544546565456545555555566645544656444564655546445465555645456546654654645464466565644454554666465546544464565644656666545564664554654545554545544656656555654544644464444466646455655444564454556556556665655465565544566545665464644465656554556565544444456656656665566655656445456544546644656545566465545644465545445565445554546464555665666544565466665665655456544464444454654444656654465664666556544664665566565565666456465554455455544445646655456455456566446544445466445455656655566664465646666444446654664464454554646565544644665556454656455465644564465455455444545566446665565644466546445665444454666544645554646664666554554446545644665665645544445646444654666645456445545456446656566446456645566665666454656564554555545466654565464554665556554566456445566555555665656665454565664664556556544554545646656554545445645655545554654644444556566555666664454546545644644454446546446546645544456464655444544566644654546645566444466666654654554464555444564446544654655465545464645566555564466444654465646466455646444555566566544644545466465446464664666646644545664545455444645656666656655565446644446445555445456544446656644465564654654466644655466556445656654565656655446665445654656446466556546554445566446446566555465454446446646556545656546464664466445564446455565566564456544564465646565456545464566666654465544666446546466456444454566666665465556664564544664544465465645646454655646454455664655466456645646464464444544445545655655665546466564564644565555564665655664466556566555566656566545445555564444665444455456545646655546654564446645545445445665664444664666565464646665546446656555644456555645666445646456455466555546545656654566644566556666544666564464665454554664565456664656564656545445465465645454665666654556454566655556446464556564544446546644644465655545645565456445456656666565655554466555654544655644544444545466556644664566445464655554446566666464444656444666546665555466564555554446565646455544544555666545556445554565655566446456665645464454656
- at test_sort_3
-AGCGGGACTCTTCCCGAGGGGCCTGGAAATACCACGGATTCCAATAGTACGTTCTGTTAGCTGGGTGTCTTTATGCATGCCAAGGTTCGAACCTCCGGCCATGTTGGATGTTGAAAAGGTAGCCAGCGAGATGGAAGAAGGCCAAGGCTTCATATTACCCCGAATGCTCAAGGTGGATAAGGGGAACTAACGGCTGCGAGCATGCAGCTGGCATCAATGGCCAGGCGACAGATTTACTCTACTTTCCGCTGCTTGTTCTGGATTGGGATGTTAACCCTTTGATCCCACAGAGGTCAGCGGAGAAAACAACGTCTAAATATAGTCGGACAGACTGTAGCGACCCGGTTAGCACTCCCTAATTTTATCTAACTAGGCGGACACACTCTTACCACAGGGGCTCCAAGGTTCTCTCATTTCCGTGGGTGTAGCAACGTCCTATTCTTATGCGGACGCGAAATAACGAGTATTCTCTTGGATTTTAACTGAGCTATCACTCCGCGTGAAGGATAACCGGCTTGACTAAAGGAGACGGTCAGTCGCAGAGGGCAACGCGCTATAGACATTCGGTTTATTGAGTTCACCCTGGATAGTGACGCGGCCCTGGTTGTAGGTCGGGGCAAACTCTGAAATTGCTACTCATATACAGGGTTGTGCGCTCGTAAGGACTCCGCCCTGGCGTCGAAGCTAGTTCGACAAAATGGCCCCGGAAGACGTTATCTAGATGAGTCTGGGTGGCTTTCAAGAATTCGCCTATCTTGGTACCTGGCCCTAACGATCAGACAGGCGCACTGCTGATGAGGGCATGTACCGACCATACGGTTTTTCTTCAGGCAAATGCCCGTTCCGGTGTCCGTGGTCAAGACTCAAAATCTCCCCTAAGGCTGTCACGAATTAGAGTTTCGTGTGAGAGATTAGTGTTAGCCCTCAGTGGGTCCTAATAAGAACCCACTAAGTTAGCCTCGCCGGTACGCAGACCTAGAGACTTGTTGGTGGGCAGCTTCTGCGCTGTTGGCATTCCTGCATAAAGAGAAACGTTATCGGCTGCCGGTGTCATCTGCCAGTGCTGCCGAGTCGAGCTTGTAGCACTCATTGAAGGTGCTGTGAGCTGCACGCCTCCACTAATTTAATCCCCGTCGCAAAGTTGGTCAGACCAGGAGCCTTCAGTGCACTGTGACAACTGGAATTCCGACTCCGGAAAAGTGCAATGGGTGTCCAGTGGACGACTTCTTATGATTCGCGCCCGCGCCGCGTCCACAGGGGGACTCGGCGAAAAGTACAAAAGTGGGGGGAGCGCCCTGAGGAAAGTGGATCGTGCCGTCACCGGGTGACGGGTACAAGAACCTACTACTAGTGACGATGCTCTTAGATGGAGTGTAGCACGATCTTCACGGATAAAATAATGAAACAAACTGGGGCCGTTGGGCCCCCGAAGTATATGAACTGCGGCCATGTATGTTATGAATCCCCTCGGGTTCGGGGCTGCTCAAAAGTCTGCGTAGGACTCTCATCGGGACCTATACTAGATGGCCATGCGGAATACAGCGGCCTAGCTTTTATGCGATGTGCGGGGATAATTCTAATAGTTGCGGCTGGTCCATAACCGTGGACGTCGTATATTGGCAGACCTGCACAGTTGGTCCGATTAGACATACAGCACCCTTCTACATCCTGTTGTTCTGGAGAAGCCCACTCTAGTAGGACGGTTTACCTATGGACATGCGGTGTCCTAAATCATCTTACCGGAATTCTCATGCACTTCTGCCGTTCCCCCGAACATTCTAGTGGTGGGCTCGGGCTGCTGATAATCCACTCCATTGGGTGATACAAGAGGCGAGTTTGCCTTAGTTTGGGCAGGTCATGAAACCAAGCAACCGCATGCTTAGCTGGCTAATTGTTCGACTCGGCCACCAGCAAACTGTCGAAACGCGTAGAAAGTACAATTCCGTAAGCGAGTTCGGAATCCAGACCCGCGGCAATGCCCTCTCTTCCTACGCAGCGACCCCCTGTTTACACAGACAAGGCCCCGATGGCCAATCGTGAGTCTCGACGAGTGCCATAGAGGCGCCCTACCGGCGTCAGTGGGGGTGATTAATCACTTCACTGGTTCGCGGTGGGCTACGCGCTCACCTAGCTTCCCCGTAGTGTATTGACGAGTGTGGGCCCAGGATATGGAAGTTAAGGCTGGAGGAATAGTTAACCGTCGAACCTCCCCTGGACGAGATAGCACTAAATCCTGGAAATGAGACGGATCCGAGAGTTCTGATAATGGTCGAGATGGGACAACAGGCGAATCTCGCAAACGTGCTTGAAAATATAACGTAGCATCCCGCTTATGGGCTTTATCGCGAAACCTGACAGCGCTCCCTCAAACCCCTAGTTCGGAAAATCGTGTCGCTCCTACAGTCCATCACCCAACTTCAGTTGAGCAATAAGTTTAGGGCGCGTCACTCTATCTACTTTACTGCTGAATGCACCCTTGTGTGGATCGTAAACCTTCAAGTCCCTGGGACTGCCTTTTCTTGCGATGATAAGATTAAGTGTTTGCCCGTTTGCCAACCATCCCTCAAATCTCGTTGATGAACCCGCCCCTTCTGTTCCATTACCAATCGATGGCTCTAACTTTTCAATCTGTGGCATGGACCCCATAAAGAGGGACCAGCGTTCAGGGAGACTTCTACAAACTTACGTTACATTATACCGTTCCCGGTGAGCGTGCGGTCACGCATTCCAAAAGTACTCCGCGAGCCCTACGATCGACCTCTAGTATACTCCTGGTGCGGAGCAAACGATTTGAGCAGGCCTCATATAGAATGTGCAATCGCTCATTGTCGCAAAGCGACAACCAGTCACGCCGTTCGTCGACTACCACCCACTTCGTGGATGTGCGCCAAGTCTGTCTCCAGCTCTCAAGACTCATTGCAACTTGCCAATAACCTCAGTGCCTTGTCACTTCGAGTTCTTGAGGAATAGTCAGGGTCCTTAAACTTCATCGACTCGGCACAGTCTCTAGCCTCATTACTTCCCATTCCGGCCCGATGTGGAAGCGGTCCGGCTACTCAAATGCTCCCGGAGACCGAAGATTTCGGGACCTTTCGTTGTCAGACGCCAGTCATTGTTGCCTCTAACTGCATTGGAATCTGGCCCAAATAGAGATTGACCTCGGGAATCCGTCGCTGGGCAGGGCGTCTTACTCTGAACGGGACATCACTCCCGACCACCGGGGGGCGTCGTAGGTGCAGCAGACTGACAAATCCGTCCCAGTCGACTTATGTTCGCATGTCGTTATTAACTGCCTTGTACCTACGGTATGTACTGAACCACCGAGATCAGGGCAGGTTGAGCAAATTCATATCTCAAGGTGTGTCGAGAAAAAACGATTTAAGCTCTAGACCGGGAGTGCTGGTCAGAGTGTTCTGCTCACAAGGAAGCAATTCGGTGTTGGGTACCAATCAGAAATCACACCGTGGCTCTGAGCTTAATCCCTTGAGTTGGGCAACCGGGAGGACCAAGAGTACCGGCGACGGCCTCTGATTCTTGACGGTATAGGAGACATGCCTATACACGTTCGAGAGTAGTGACAGCATAGGATGCCTCAACGCTTTTACTCACGAGTGAGCGGTCCAATCTTGATGTCTAGACATGAGTTTTTCTAACGAGTGAACGGTATCCTATCCGCCCTCTGGATCAGCGGTTTCGGGGGTCCCTATCATGCTGTTCATATGCTCTGTCCATTGATTTGAGCCTACGGTATGAAGCACTCGCGGTGAAAAGGTTGCTGTAACCCGCGGGTGGTTACGATCTAATCTTCTGGTACGAAGGCGTGCCGTTACGCCAAAACTGGTACCTTGGTGTTTTTGCTGATCTCCAGAATTTTTGCTGTACTATTCCAATTTAGGAGTCATGATTCCGGAATGTCATTCCGACAAGCAGTATTCCCAACAGAGAACACTTGCATACTCGTTAATGATGAACACCTCTAATACGGAGACGCACCAGGTCTCCTAATCCCGGTTGTTTGCGACTCTGTTGTATATGATCAGAGAAAGGCGTATAAGAGCACCCCTATCTGTTGTCGTTTGGTCCGGACTCTTTAACTTCGGACCCAGACTCCCCCATTTCGCCATGCAACGCACCCATTTCAGGACTTTATCTGAAGCCTCTGCAAGTAGTACAGATCGCTTGCCCTCCTTGTTCGTTAGGTTAAAGTACACTTGACGATCACAGCCCCCATGTTCTTCTTAAGTCCTGGGCCTGCAAGACATGGTAACACTATAACCAATGCTACGTAATAAACGGATAAACAGAGCCATGACATTGGCACAGCATGCCGTGATCCGCTTACCAAATGATAAACTTGGTGATAATAGCAGTTTATTTGTAAGCCGTCGCGTGACAGAGGTCTGTAACTCTGATGAATTCCGAGCGCGCGTCGTCTGAAGTTGGTTGGCTAGGATTCGTCCTTAATGCAGTCTAAGCTGCCAGTAGCCACGAGAGGTAATTCACAAAGGTGGTACGCTGCTTCACAGTTCCAGGATGTAGAGTCAGAACCACTATAAAATCTAGTGCTCTTATGATAGGGATTGCCAGGTCGTTTGGAACTCGCTCAGACAGTCGCCGTCATAGAAATACATTACCTAAGCCCACGTGATATTGAACAGACCCCGCTATGGGATATAGTATACGAACCTAATAGAAGAACCGGATAACCTTGGTAAATATCTTCCAGAACGGGTCCGGCCGTTTAGCGTGATTTCAGCCCTTAGTGTCAACTTCTCTACTTGCTGGTGGATAAGTATTACCACTTTTATTCCTACCGGTAGACTACGCCATGAGTGTGCGAGGACGCAGTGGAGCCGGACCAAGGCATATCGACAGATATCTATCACAAGCCAAATACGCGGGCTTGCGGAGGCACCGATATTTGGTACTTTTCTTGGATTATAATCGTTTGGTAGGCCTTGTGGTAACCATGTGAGCGTCGTGGCGCTCGGAACTACTTT
-+
-/0/1/00/00010////01/111/0110/10011110//10//1/1//1//0011/1111//0000//1/0/100110//110110/1/0010//0/0///0//10///0/1011/01000//0101110////111/100//001/000/10/10/1010/1///00/10//110//1///0/1101//1011/1/1//00/1//1/01/0////100/01/111/1000/0///01/1///10/1/1000/0/01010////000100//1/00/0/0//0/0/1001000///010/110011//0/00/011/0/00/0/1/10/01//00011011/10111/01110/01101/00//000///1/001/101/0/1000/111/110001/11100000/0/010/00/111//101//1//0010/01//01000/100//1//1/1010100///0001101//0/////1//1/011///1/011/100/101/1//1/1///1/010//01000111/0101110/101110000/10110000/0/11/0/10////0101101/000/1//1//1110/1/1011//01//000///1//1/0////110010100100/100/10000100/111001/010111//0/100//101/10//00101//1001011101/0///1/0011/00//10//001101//011/011/001001100/10011100100/011/1/100//0/1/0/00/00//////1//1/////01/100101100011/111/10/0/110001101/0010//0001/0/1//0/010011//000/00/10//1/00010/1////110///1//001////0//1//10/0000///1/1//0/10//10//0111////0110//1111///0/110001/11011101/1//1/0001/0/1011/110/11/00/1/1//0010010/0////1//00/00//00/01111/10/01/0//0/////11100/10/11/0001100//1//1/011101100/0/01110///00/0/0/1///10//10/010//0000///01/00/1/1/01///11/100/11110/111011///0101/1/000/11/00/0/1011/10/100/10111/001//101//1/1111011/11/1//1011100//0000/011100//110001/0/010/01101010000//11/1//0//1/110/1/0/1/0/0100/1//1//11/01//010//1/01//01//10110//01011//0/0///0///1001/11//01/011/01001/110//00/0/0/01/010/0//01101/010/00/00001/10////0//01111//0//000/0//110//00110//1//1000010100/0/1//0//101/1010100101/10/01000100/01000101/01///11/01//00010///00101/1010/0/000/00////1/001110/00/0010/10011/1//010/0011/011/00/011/0111/0/00//000///0100/1100101001/1//111/1/1/0///1/11/0/1/0/00//1110/0101///01/1/1////////101000/1/00/0//00/100//100/0/000///101/0//1/101/00011011000//1//1/11/10100//0/0/01000110101/00/1110/1010/111110000/1/0/1/00//1100/11/00/10/1000/00/01/00/01001111/1////1/0/1//0101/1/0011010110//1/0/0/110/1//00/11000/1/1/1//0010/011/0///10/0/0/011//10/10///0100000000//01100/00/00/0111//01//00/0110110/110/100010/1/1/1001/10///0//00//11/1111/110/1/011/101000//000/1//001///01/00011/1////1101/1/1///1//00/110///0/0/1011/01/0//1////011//001/11100/11/01//101///000//0001///101110/1//00001101/001110/010//1000100/0/////11/0/////11/01011/1/000/11/00000///10/0/11111///0///01001////0010010/00//0000/01/01/1001/110111/1/////1010/11011/1//11/011//0100/1000111/0010///1010//1/010/110/010/1010/0//0/11000001/1101/100/1//111/00//11////101/11001/1////110///1001///0////0/1011/1/10000100//101//111//1///000110/00011/0001001111/100011/0010/1////000/1/00//101000001100101001/0/0000010/10/0011001///110110000/010//1000/00000100//011////1111/1000/11//111/////0/110011/0/0/101//1//1/111/0001//101/11000///11100110///100/1/01//1000000//1101///1/0//00/10000/111001/0001/1//11//0/0/110///11111//11011//1//1/00001/1110/100///1/0/1100010//011/010/11/01111/01//01/01/1010000011/11111/000///1/00011/011101/0/101/0101///101000/01/01010///1/1//0111//1/1//000/001111////01111/0/0//10/101/11010/0//0/100/11/1010//10110/001///10/01000/11001//11110111//011/00/010///1/0/0/////1100/0001/111/000/10101000/110110000000/00///110/10011/0//1//1/000/11100/01011///00/0/001100///1//1101/110/10001/111///1//000/101011001/11101/1/11001/1001//1//0110010101///010//100011010//010/1/11/1/10//1///0011001/////1/1010001/01110/01101///000//0/1//1010/011//1//000100//010011111///0100101010//001//0//1/0/1//0//1//10/1/11//0//0/10/1011111///100/11/101/1//00//1/10/111/110000/000//01///100/0//1000/101011/100/1/0/10110/11010//1/1011/0/00000/1/01/01/01////0/111/1010101010//1101//0//000000111100///00110/11111//000/01/00/11011/01/010110001011/1110////10111/0/1//00//0/01/00110//00/00/000/////100/1//0/0010//0/0011101/110/010//0100/00///11001/1/011//000/1/110//1//111010///011//11//111/11//111101/11/000101/1/0/0/100///0/0110/1/01010//0011101001010/01/10/0/0000110000/00///11/01110100/1/1/1//1/110//00/1///100//00111/11101/0/010//10/0//1///00/010/0//10//0/00/0//0011/0/01110/11100/1////10//01010011000101/1100000//01/1011100111/010110/010111001/1/100/10111/0000////1/00/111/10010101/00/001/10//01/1/10//001/0111/10/1/101/1011/10/10/10/111/1/0/1/10/101/01/1010/001/01101///11/0/00////1/0001/1///1101000101001/11111/10100/0/01////10//1/0/10/000//01/101000000/1////0001101///01/01//011/1/1//0/1/101//011//11010//110/1110///11//0000//1110/101//11000/0111001/11//00/001/11011//10//0/01110/00/////0100/1/1/00/1////0/1//00/0011/0/10100/1/000100/0/001//00/0/111////111/10////01110000///00111///01101///0///110/0/0//1//010/1/1/11/010/////01//1110///11/01100//0//11/01///0/10/1/1/1100////1/1110101////00000/////01/10/1/010001110/10101/101000000/00111/01//11////01111001//0///001/0///111111011/1/1/11111001/00/1/10000//0/0///1101/11111/1/1000/0/1111/110/0110000010///110100/0///011/0/1//10011100//////11///10/0//0///1100101/10011001101000//1111/1/01/1/0//11/10001//1//1/100111/10//0/0000//0/01/1/011/000/1/1/1100/01//1/100/01001///111101/1/110/01//1001/1111/1//0/011/1/1001/1//0/1//11//01/10/11/101//0/11/000//00/110/11/1110110//010100/1101/1///110010/11/11//11/0//1/01/01//0//1001/01001



View it on GitLab: https://salsa.debian.org/med-team/filtlong/-/compare/ad9b4e1fd2d13330fb1d2ed712b6684384999961...c9c8c87d78a3067e8c17c064756bad10c6b0b4c6

-- 
View it on GitLab: https://salsa.debian.org/med-team/filtlong/-/compare/ad9b4e1fd2d13330fb1d2ed712b6684384999961...c9c8c87d78a3067e8c17c064756bad10c6b0b4c6
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20211013/a6047dbc/attachment-0001.htm>


More information about the debian-med-commit mailing list