From 979e6cdd068b1e8cd71b6882628fbc04bfba0dfb Mon Sep 17 00:00:00 2001
From: BIOPZ-Katsantoni Maria <maria.katsantoni@unibas.ch>
Date: Fri, 14 Feb 2020 16:58:24 +0100
Subject: [PATCH] LabKey-like input to Snakmake input

- separate organism genome architecture (different input folder)
- change MD5 checksums to match the new output
---
 images/dag_test_workflow.svg                  |  30 ++--
 scripts/labkey_to_snakemake.py                | 118 ++++++++----
 tests/input_files/homo_sapiens/annotation.gtf |  28 +++
 tests/input_files/homo_sapiens/genome.fa      | 168 ++++++++++++++++++
 .../input_files/homo_sapiens/transcriptome.fa |  54 ++++++
 .../project1/synthetic.mate_1.fastq.gz        | Bin 0 -> 713 bytes
 .../project1/synthetic.mate_2.fastq.gz        | Bin 0 -> 710 bytes
 .../project2/synthetic.mate_1.fastq.gz        | Bin 0 -> 713 bytes
 tests/input_files/synthetic.mate_1.bed        |  10 ++
 tests/input_files/synthetic.mate_2.bed        |  10 ++
 tests/input_files/synthetic.paired.bed        |  10 ++
 .../expected_output.md5                       |   4 +-
 .../input_lib_1.mate_1.fastq.gz               | Bin 1862 -> 0 bytes
 .../input_lib_1.mate_2.fastq.gz               | Bin 1835 -> 0 bytes
 .../input_lib_2.mate_1.fastq.gz               | Bin 1669 -> 0 bytes
 .../input_lib_2.mate_2.fastq.gz               | Bin 1758 -> 0 bytes
 .../input_table.tsv                           |   6 +-
 .../test_scripts_labkey_to_snakemake/test.sh  |  20 ++-
 18 files changed, 402 insertions(+), 56 deletions(-)
 create mode 100644 tests/input_files/homo_sapiens/annotation.gtf
 create mode 100644 tests/input_files/homo_sapiens/genome.fa
 create mode 100644 tests/input_files/homo_sapiens/transcriptome.fa
 create mode 100644 tests/input_files/project1/synthetic.mate_1.fastq.gz
 create mode 100644 tests/input_files/project1/synthetic.mate_2.fastq.gz
 create mode 100644 tests/input_files/project2/synthetic.mate_1.fastq.gz
 create mode 100644 tests/input_files/synthetic.mate_1.bed
 create mode 100644 tests/input_files/synthetic.mate_2.bed
 create mode 100644 tests/input_files/synthetic.paired.bed
 delete mode 100644 tests/test_scripts_labkey_to_snakemake/input_lib_1.mate_1.fastq.gz
 delete mode 100644 tests/test_scripts_labkey_to_snakemake/input_lib_1.mate_2.fastq.gz
 delete mode 100644 tests/test_scripts_labkey_to_snakemake/input_lib_2.mate_1.fastq.gz
 delete mode 100644 tests/test_scripts_labkey_to_snakemake/input_lib_2.mate_2.fastq.gz

diff --git a/images/dag_test_workflow.svg b/images/dag_test_workflow.svg
index d33de51..cd5d63a 100644
--- a/images/dag_test_workflow.svg
+++ b/images/dag_test_workflow.svg
@@ -18,7 +18,7 @@
 <!-- 1 -->
 <g id="node2" class="node">
 <title>1</title>
-<path fill="none" stroke="#d85656" stroke-width="2" d="M177,-108C177,-108 12,-108 12,-108 6,-108 0,-102 0,-96 0,-96 0,-84 0,-84 0,-78 6,-72 12,-72 12,-72 177,-72 177,-72 183,-72 189,-78 189,-84 189,-84 189,-96 189,-96 189,-102 183,-108 177,-108"/>
+<path fill="none" stroke="#c6d856" stroke-width="2" d="M177,-108C177,-108 12,-108 12,-108 6,-108 0,-102 0,-96 0,-96 0,-84 0,-84 0,-78 6,-72 12,-72 12,-72 177,-72 177,-72 183,-72 189,-78 189,-84 189,-84 189,-96 189,-96 189,-102 183,-108 177,-108"/>
 <text text-anchor="middle" x="94.5" y="-93" font-family="sans" font-size="10.00">pe_fastqc</text>
 <text text-anchor="middle" x="94.5" y="-82" font-family="sans" font-size="10.00">sample: synthetic_10_reads_paired</text>
 </g>
@@ -31,7 +31,7 @@
 <!-- 2 -->
 <g id="node3" class="node">
 <title>2</title>
-<path fill="none" stroke="#c6d856" stroke-width="2" d="M390,-108C390,-108 219,-108 219,-108 213,-108 207,-102 207,-96 207,-96 207,-84 207,-84 207,-78 213,-72 219,-72 219,-72 390,-72 390,-72 396,-72 402,-78 402,-84 402,-84 402,-96 402,-96 402,-102 396,-108 390,-108"/>
+<path fill="none" stroke="#56d8c9" stroke-width="2" d="M390,-108C390,-108 219,-108 219,-108 213,-108 207,-102 207,-96 207,-96 207,-84 207,-84 207,-78 213,-72 219,-72 219,-72 390,-72 390,-72 396,-72 402,-78 402,-84 402,-84 402,-96 402,-96 402,-102 396,-108 390,-108"/>
 <text text-anchor="middle" x="304.5" y="-93" font-family="sans" font-size="10.00">fastqc</text>
 <text text-anchor="middle" x="304.5" y="-82" font-family="sans" font-size="10.00">sample: synthetic_10_reads_mate_1</text>
 </g>
@@ -44,7 +44,7 @@
 <!-- 3 -->
 <g id="node4" class="node">
 <title>3</title>
-<path fill="none" stroke="#56d892" stroke-width="2" d="M621,-108C621,-108 432,-108 432,-108 426,-108 420,-102 420,-96 420,-96 420,-84 420,-84 420,-78 426,-72 432,-72 432,-72 621,-72 621,-72 627,-72 633,-78 633,-84 633,-84 633,-96 633,-96 633,-102 627,-108 621,-108"/>
+<path fill="none" stroke="#afd856" stroke-width="2" d="M621,-108C621,-108 432,-108 432,-108 426,-108 420,-102 420,-96 420,-96 420,-84 420,-84 420,-78 426,-72 432,-72 432,-72 621,-72 621,-72 627,-72 633,-78 633,-84 633,-84 633,-96 633,-96 633,-102 627,-108 621,-108"/>
 <text text-anchor="middle" x="526.5" y="-87.5" font-family="sans" font-size="10.00">pe_index_genomic_alignment_samtools</text>
 </g>
 <!-- 3&#45;&gt;0 -->
@@ -56,7 +56,7 @@
 <!-- 4 -->
 <g id="node5" class="node">
 <title>4</title>
-<path fill="none" stroke="#56d8a9" stroke-width="2" d="M834.5,-108C834.5,-108 662.5,-108 662.5,-108 656.5,-108 650.5,-102 650.5,-96 650.5,-96 650.5,-84 650.5,-84 650.5,-78 656.5,-72 662.5,-72 662.5,-72 834.5,-72 834.5,-72 840.5,-72 846.5,-78 846.5,-84 846.5,-84 846.5,-96 846.5,-96 846.5,-102 840.5,-108 834.5,-108"/>
+<path fill="none" stroke="#8fd856" stroke-width="2" d="M834.5,-108C834.5,-108 662.5,-108 662.5,-108 656.5,-108 650.5,-102 650.5,-96 650.5,-96 650.5,-84 650.5,-84 650.5,-78 656.5,-72 662.5,-72 662.5,-72 834.5,-72 834.5,-72 840.5,-72 846.5,-78 846.5,-84 846.5,-84 846.5,-96 846.5,-96 846.5,-102 840.5,-108 834.5,-108"/>
 <text text-anchor="middle" x="748.5" y="-87.5" font-family="sans" font-size="10.00">index_genomic_alignment_samtools</text>
 </g>
 <!-- 4&#45;&gt;0 -->
@@ -68,7 +68,7 @@
 <!-- 5 -->
 <g id="node6" class="node">
 <title>5</title>
-<path fill="none" stroke="#70d856" stroke-width="2" d="M851.5,-180C851.5,-180 733.5,-180 733.5,-180 727.5,-180 721.5,-174 721.5,-168 721.5,-168 721.5,-156 721.5,-156 721.5,-150 727.5,-144 733.5,-144 733.5,-144 851.5,-144 851.5,-144 857.5,-144 863.5,-150 863.5,-156 863.5,-156 863.5,-168 863.5,-168 863.5,-174 857.5,-180 851.5,-180"/>
+<path fill="none" stroke="#5692d8" stroke-width="2" d="M851.5,-180C851.5,-180 733.5,-180 733.5,-180 727.5,-180 721.5,-174 721.5,-168 721.5,-168 721.5,-156 721.5,-156 721.5,-150 727.5,-144 733.5,-144 733.5,-144 851.5,-144 851.5,-144 857.5,-144 863.5,-150 863.5,-156 863.5,-156 863.5,-168 863.5,-168 863.5,-174 857.5,-180 851.5,-180"/>
 <text text-anchor="middle" x="792.5" y="-159.5" font-family="sans" font-size="10.00">pe_quantification_salmon</text>
 </g>
 <!-- 5&#45;&gt;0 -->
@@ -80,7 +80,7 @@
 <!-- 6 -->
 <g id="node7" class="node">
 <title>6</title>
-<path fill="none" stroke="#5692d8" stroke-width="2" d="M995,-180C995,-180 894,-180 894,-180 888,-180 882,-174 882,-168 882,-168 882,-156 882,-156 882,-150 888,-144 894,-144 894,-144 995,-144 995,-144 1001,-144 1007,-150 1007,-156 1007,-156 1007,-168 1007,-168 1007,-174 1001,-180 995,-180"/>
+<path fill="none" stroke="#d88d56" stroke-width="2" d="M995,-180C995,-180 894,-180 894,-180 888,-180 882,-174 882,-168 882,-168 882,-156 882,-156 882,-150 888,-144 894,-144 894,-144 995,-144 995,-144 1001,-144 1007,-150 1007,-156 1007,-156 1007,-168 1007,-168 1007,-174 1001,-180 995,-180"/>
 <text text-anchor="middle" x="944.5" y="-159.5" font-family="sans" font-size="10.00">quantification_salmon</text>
 </g>
 <!-- 6&#45;&gt;0 -->
@@ -92,7 +92,7 @@
 <!-- 7 -->
 <g id="node8" class="node">
 <title>7</title>
-<path fill="none" stroke="#8fd856" stroke-width="2" d="M1200,-180C1200,-180 1037,-180 1037,-180 1031,-180 1025,-174 1025,-168 1025,-168 1025,-156 1025,-156 1025,-150 1031,-144 1037,-144 1037,-144 1200,-144 1200,-144 1206,-144 1212,-150 1212,-156 1212,-156 1212,-168 1212,-168 1212,-174 1206,-180 1200,-180"/>
+<path fill="none" stroke="#d8cb56" stroke-width="2" d="M1200,-180C1200,-180 1037,-180 1037,-180 1031,-180 1025,-174 1025,-168 1025,-168 1025,-156 1025,-156 1025,-150 1031,-144 1037,-144 1037,-144 1200,-144 1200,-144 1206,-144 1212,-150 1212,-156 1212,-156 1212,-168 1212,-168 1212,-174 1206,-180 1200,-180"/>
 <text text-anchor="middle" x="1118.5" y="-159.5" font-family="sans" font-size="10.00">pe_genome_quantification_kallisto</text>
 </g>
 <!-- 7&#45;&gt;0 -->
@@ -116,7 +116,7 @@
 <!-- 9 -->
 <g id="node10" class="node">
 <title>9</title>
-<path fill="none" stroke="#56c9d8" stroke-width="2" d="M566,-180C566,-180 465,-180 465,-180 459,-180 453,-174 453,-168 453,-168 453,-156 453,-156 453,-150 459,-144 465,-144 465,-144 566,-144 566,-144 572,-144 578,-150 578,-156 578,-156 578,-168 578,-168 578,-174 572,-180 566,-180"/>
+<path fill="none" stroke="#59d856" stroke-width="2" d="M566,-180C566,-180 465,-180 465,-180 459,-180 453,-174 453,-168 453,-168 453,-156 453,-156 453,-150 459,-144 465,-144 465,-144 566,-144 566,-144 572,-144 578,-150 578,-156 578,-156 578,-168 578,-168 578,-174 572,-180 566,-180"/>
 <text text-anchor="middle" x="515.5" y="-159.5" font-family="sans" font-size="10.00">pe_map_genome_star</text>
 </g>
 <!-- 9&#45;&gt;3 -->
@@ -128,7 +128,7 @@
 <!-- 10 -->
 <g id="node11" class="node">
 <title>10</title>
-<path fill="none" stroke="#afd856" stroke-width="2" d="M691,-180C691,-180 608,-180 608,-180 602,-180 596,-174 596,-168 596,-168 596,-156 596,-156 596,-150 602,-144 608,-144 608,-144 691,-144 691,-144 697,-144 703,-150 703,-156 703,-156 703,-168 703,-168 703,-174 697,-180 691,-180"/>
+<path fill="none" stroke="#d85656" stroke-width="2" d="M691,-180C691,-180 608,-180 608,-180 602,-180 596,-174 596,-168 596,-168 596,-156 596,-156 596,-150 602,-144 608,-144 608,-144 691,-144 691,-144 697,-144 703,-150 703,-156 703,-156 703,-168 703,-168 703,-174 697,-180 691,-180"/>
 <text text-anchor="middle" x="649.5" y="-159.5" font-family="sans" font-size="10.00">map_genome_star</text>
 </g>
 <!-- 10&#45;&gt;4 -->
@@ -140,7 +140,7 @@
 <!-- 11 -->
 <g id="node12" class="node">
 <title>11</title>
-<path fill="none" stroke="#d88d56" stroke-width="2" d="M818.5,-254.5C818.5,-254.5 690.5,-254.5 690.5,-254.5 684.5,-254.5 678.5,-248.5 678.5,-242.5 678.5,-242.5 678.5,-230.5 678.5,-230.5 678.5,-224.5 684.5,-218.5 690.5,-218.5 690.5,-218.5 818.5,-218.5 818.5,-218.5 824.5,-218.5 830.5,-224.5 830.5,-230.5 830.5,-230.5 830.5,-242.5 830.5,-242.5 830.5,-248.5 824.5,-254.5 818.5,-254.5"/>
+<path fill="none" stroke="#56a9d8" stroke-width="2" d="M818.5,-254.5C818.5,-254.5 690.5,-254.5 690.5,-254.5 684.5,-254.5 678.5,-248.5 678.5,-242.5 678.5,-242.5 678.5,-230.5 678.5,-230.5 678.5,-224.5 684.5,-218.5 690.5,-218.5 690.5,-218.5 818.5,-218.5 818.5,-218.5 824.5,-218.5 830.5,-224.5 830.5,-230.5 830.5,-230.5 830.5,-242.5 830.5,-242.5 830.5,-248.5 824.5,-254.5 818.5,-254.5"/>
 <text text-anchor="middle" x="754.5" y="-234" font-family="sans" font-size="10.00">pe_remove_polya_cutadapt</text>
 </g>
 <!-- 11&#45;&gt;5 -->
@@ -164,7 +164,7 @@
 <!-- 12 -->
 <g id="node13" class="node">
 <title>12</title>
-<path fill="none" stroke="#d8cb56" stroke-width="2" d="M976,-257C976,-257 861,-257 861,-257 855,-257 849,-251 849,-245 849,-245 849,-228 849,-228 849,-222 855,-216 861,-216 861,-216 976,-216 976,-216 982,-216 988,-222 988,-228 988,-228 988,-245 988,-245 988,-251 982,-257 976,-257"/>
+<path fill="none" stroke="#d8ac56" stroke-width="2" d="M976,-257C976,-257 861,-257 861,-257 855,-257 849,-251 849,-245 849,-245 849,-228 849,-228 849,-222 855,-216 861,-216 861,-216 976,-216 976,-216 982,-216 988,-222 988,-228 988,-228 988,-245 988,-245 988,-251 982,-257 976,-257"/>
 <text text-anchor="middle" x="918.5" y="-245" font-family="sans" font-size="10.00">create_index_salmon</text>
 <text text-anchor="middle" x="918.5" y="-234" font-family="sans" font-size="10.00">kmer: 31</text>
 <text text-anchor="middle" x="918.5" y="-223" font-family="sans" font-size="10.00">organism: homo_sapiens</text>
@@ -208,7 +208,7 @@
 <!-- 14 -->
 <g id="node15" class="node">
 <title>14</title>
-<path fill="none" stroke="#56a9d8" stroke-width="2" d="M1329,-254.5C1329,-254.5 1214,-254.5 1214,-254.5 1208,-254.5 1202,-248.5 1202,-242.5 1202,-242.5 1202,-230.5 1202,-230.5 1202,-224.5 1208,-218.5 1214,-218.5 1214,-218.5 1329,-218.5 1329,-218.5 1335,-218.5 1341,-224.5 1341,-230.5 1341,-230.5 1341,-242.5 1341,-242.5 1341,-248.5 1335,-254.5 1329,-254.5"/>
+<path fill="none" stroke="#56d892" stroke-width="2" d="M1329,-254.5C1329,-254.5 1214,-254.5 1214,-254.5 1208,-254.5 1202,-248.5 1202,-242.5 1202,-242.5 1202,-230.5 1202,-230.5 1202,-224.5 1208,-218.5 1214,-218.5 1214,-218.5 1329,-218.5 1329,-218.5 1335,-218.5 1341,-224.5 1341,-230.5 1341,-230.5 1341,-242.5 1341,-242.5 1341,-248.5 1335,-254.5 1329,-254.5"/>
 <text text-anchor="middle" x="1271.5" y="-239.5" font-family="sans" font-size="10.00">create_index_kallisto</text>
 <text text-anchor="middle" x="1271.5" y="-228.5" font-family="sans" font-size="10.00">organism: homo_sapiens</text>
 </g>
@@ -227,7 +227,7 @@
 <!-- 15 -->
 <g id="node16" class="node">
 <title>15</title>
-<path fill="none" stroke="#59d856" stroke-width="2" d="M623,-257C623,-257 508,-257 508,-257 502,-257 496,-251 496,-245 496,-245 496,-228 496,-228 496,-222 502,-216 508,-216 508,-216 623,-216 623,-216 629,-216 635,-222 635,-228 635,-228 635,-245 635,-245 635,-251 629,-257 623,-257"/>
+<path fill="none" stroke="#70d856" stroke-width="2" d="M623,-257C623,-257 508,-257 508,-257 502,-257 496,-251 496,-245 496,-245 496,-228 496,-228 496,-222 502,-216 508,-216 508,-216 623,-216 623,-216 629,-216 635,-222 635,-228 635,-228 635,-245 635,-245 635,-251 629,-257 623,-257"/>
 <text text-anchor="middle" x="565.5" y="-245" font-family="sans" font-size="10.00">create_index_star</text>
 <text text-anchor="middle" x="565.5" y="-234" font-family="sans" font-size="10.00">index_size: 76</text>
 <text text-anchor="middle" x="565.5" y="-223" font-family="sans" font-size="10.00">organism: homo_sapiens</text>
@@ -247,7 +247,7 @@
 <!-- 16 -->
 <g id="node17" class="node">
 <title>16</title>
-<path fill="none" stroke="#56d8c9" stroke-width="2" d="M837,-329C837,-329 672,-329 672,-329 666,-329 660,-323 660,-317 660,-317 660,-305 660,-305 660,-299 666,-293 672,-293 672,-293 837,-293 837,-293 843,-293 849,-299 849,-305 849,-305 849,-317 849,-317 849,-323 843,-329 837,-329"/>
+<path fill="none" stroke="#56d8a9" stroke-width="2" d="M837,-329C837,-329 672,-329 672,-329 666,-329 660,-323 660,-317 660,-317 660,-305 660,-305 660,-299 666,-293 672,-293 672,-293 837,-293 837,-293 843,-293 849,-299 849,-305 849,-305 849,-317 849,-317 849,-323 843,-329 837,-329"/>
 <text text-anchor="middle" x="754.5" y="-314" font-family="sans" font-size="10.00">pe_remove_adapters_cutadapt</text>
 <text text-anchor="middle" x="754.5" y="-303" font-family="sans" font-size="10.00">sample: synthetic_10_reads_paired</text>
 </g>
@@ -260,7 +260,7 @@
 <!-- 17 -->
 <g id="node18" class="node">
 <title>17</title>
-<path fill="none" stroke="#d8ac56" stroke-width="2" d="M1159,-329C1159,-329 988,-329 988,-329 982,-329 976,-323 976,-317 976,-317 976,-305 976,-305 976,-299 982,-293 988,-293 988,-293 1159,-293 1159,-293 1165,-293 1171,-299 1171,-305 1171,-305 1171,-317 1171,-317 1171,-323 1165,-329 1159,-329"/>
+<path fill="none" stroke="#56c9d8" stroke-width="2" d="M1159,-329C1159,-329 988,-329 988,-329 982,-329 976,-323 976,-317 976,-317 976,-305 976,-305 976,-299 982,-293 988,-293 988,-293 1159,-293 1159,-293 1165,-293 1171,-299 1171,-305 1171,-305 1171,-317 1171,-317 1171,-323 1165,-329 1159,-329"/>
 <text text-anchor="middle" x="1073.5" y="-314" font-family="sans" font-size="10.00">remove_adapters_cutadapt</text>
 <text text-anchor="middle" x="1073.5" y="-303" font-family="sans" font-size="10.00">sample: synthetic_10_reads_mate_1</text>
 </g>
diff --git a/scripts/labkey_to_snakemake.py b/scripts/labkey_to_snakemake.py
index f8f7527..f0f0eba 100755
--- a/scripts/labkey_to_snakemake.py
+++ b/scripts/labkey_to_snakemake.py
@@ -12,15 +12,18 @@
 
 import sys
 import gzip
+import labkey
 from argparse import ArgumentParser, RawTextHelpFormatter
 import os
+import sys
 import numpy as np
 import pandas as pd
 from Bio import SeqIO
 from io import StringIO
 from csv import writer
 from pathlib import Path
-
+# for convenience, load QueryFilter explicitly (avoids long lines in filter definitions)
+from labkey.query import QueryFilter
 # ----------------------------------------------------------------------------------------------------------------------
 def main():
     """ Preprocess sample folder and create config file for snakemake"""
@@ -31,10 +34,16 @@ def main():
         description=__doc__,
         formatter_class=RawTextHelpFormatter)
 
+    parser.add_argument(
+        "--samples_table",
+        dest="samples_table",
+        help="Output table compatible to snakemake",
+        required=True)
+
     parser.add_argument(
         "--input_table",
         dest="input_table",
-        help="input table containing the sample information",
+        help="input table containing the sample information (labkey format)",
         required=True,
         metavar="FILE")
 
@@ -42,10 +51,26 @@ def main():
         "--input_dict",
         dest="input_dict",
         help="input dictionary containing the feature name \
-              conversion from labkey to snakemake allowed names",
+              conversion from labkey to snakemake",
         required=True,
         metavar="FILE")
 
+    parser.add_argument(
+        "--remote",
+        help="Fetch labkey table via API",
+        action='store_true')
+
+    parser.add_argument(
+        "--project_name",
+        help="Name of labkey folder containing the labkey table (remote mode)",
+        required = False)
+
+    parser.add_argument(
+        "--query_name",
+        help="Name of labkey table (remote mode)",
+        required = False)
+
+
     parser.add_argument(
         "--genomes_path",
         dest="genomes_path",
@@ -90,12 +115,6 @@ def main():
         help="Configuration file to be used by Snakemake",
         required=False)
 
-    parser.add_argument(
-        "--samples_table",
-        dest="samples_table",
-        help="Table with samples",
-        required=True)
-
 
     # __________________________________________________________________________________________________________________
     # ------------------------------------------------------------------------------------------------------------------
@@ -111,13 +130,20 @@ def main():
         sys.exit(1)
 
     sys.stdout.write('Reading input file...\n')
-    input_table = pd.read_csv(
-        options.input_table,
-        header=0,
-        sep='\t',
-        index_col=None,
-        comment='#',
-        engine='python')
+
+    if options.remote == True:
+        input_table = api_fetch_labkey_table(
+            project_name=options.project_name,
+            query_name=options.query_name)
+
+    else:
+        input_table = pd.read_csv(
+            options.input_table,
+            header=0,
+            sep='\t',
+            index_col=None,
+            comment='#',
+            engine='python')
 
     input_dict = pd.read_csv(
         options.input_dict,
@@ -126,10 +152,12 @@ def main():
         index_col=None,
         comment='#',
         engine='python')
+
     input_dict.set_index('snakemake', inplace=True, drop=True)
     sys.stdout.write('Create snakemake table...\n')
     snakemake_table = pd.DataFrame()
     for index, row in input_table.iterrows():
+        snakemake_table.loc[index, 'sample'] = row[input_dict.loc['replicate_name', 'labkey']] + row[input_dict.loc['condition', 'labkey']]
         if row[input_dict.loc['seqmode', 'labkey']] == 'PAIRED':
             snakemake_table.loc[index, 'seqmode'] = 'paired_end'
         elif row[input_dict.loc['seqmode', 'labkey']] == 'SINGLE':
@@ -138,12 +166,14 @@ def main():
         fq1 = os.path.join(
             row[input_dict.loc['fastq_path', 'labkey']],
             row[input_dict.loc['fq1', 'labkey']])
+
         snakemake_table.loc[index, 'fq1'] = fq1
 
         with gzip.open(fq1, "rt") as handle:
             for record in SeqIO.parse(handle, "fastq"):
                 read_length = len(record.seq)
                 break
+        
         snakemake_table.loc[index, 'index_size'] = read_length
         if read_length <= 50:
             snakemake_table.loc[index, 'kmer'] = 21
@@ -151,29 +181,36 @@ def main():
             snakemake_table.loc[index, 'kmer'] = 31
 
 
-        snakemake_table.loc[index, 'fq2'] = os.path.join(
-            row[input_dict.loc['fastq_path', 'labkey']],
-            row[input_dict.loc['fq2', 'labkey']])
+        if row[input_dict.loc['seqmode', 'labkey']] == 'PAIRED':
+            snakemake_table.loc[index, 'fq2'] = os.path.join(
+                row[input_dict.loc['fastq_path', 'labkey']],
+                row[input_dict.loc['fq2', 'labkey']])
 
         snakemake_table.loc[index, 'fq1_3p'] = row[input_dict.loc['fq1_3p', 'labkey']]
         snakemake_table.loc[index, 'fq1_5p'] = row[input_dict.loc['fq1_5p', 'labkey']]
-        snakemake_table.loc[index, 'fq2_3p'] = row[input_dict.loc['fq2_3p', 'labkey']]
-        snakemake_table.loc[index, 'fq2_5p'] = row[input_dict.loc['fq2_5p', 'labkey']]
+
+        if row[input_dict.loc['seqmode', 'labkey']] == 'PAIRED':
+            snakemake_table.loc[index, 'fq2_3p'] = row[input_dict.loc['fq2_3p', 'labkey']]
+            snakemake_table.loc[index, 'fq2_5p'] = row[input_dict.loc['fq2_5p', 'labkey']]
 
         organism = row[input_dict.loc['organism', 'labkey']].replace(' ', '_').lower()
         snakemake_table.loc[index, 'organism'] = organism
+        
         snakemake_table.loc[index, 'gtf'] = os.path.join(
             options.genomes_path,
             organism,
             'annotation.gtf')
+
         snakemake_table.loc[index, 'gtf_filtered'] = os.path.join(
             options.genomes_path,
             organism,
             'annotation.gtf')
+
         snakemake_table.loc[index, 'genome'] = os.path.join(
             options.genomes_path,
             organism,
             'genome.fa')
+
         snakemake_table.loc[index, 'tr_fasta_filtered'] = os.path.join(
             options.genomes_path,
             organism,
@@ -187,9 +224,9 @@ def main():
         snakemake_table.loc[index, 'libtype'] = options.libtype
 
         if row[input_dict.loc['mate1_direction', 'labkey']] == 'SENSE':
-            snakemake_table.loc[index, 'kallisto_directionality'] = '--fr-stranded'
+            snakemake_table.loc[index, 'kallisto_directionality'] = '--fr'
         elif row[input_dict.loc['mate1_direction', 'labkey']] == 'ANTISENSE':
-            snakemake_table.loc[index, 'kallisto_directionality'] = '--rf-stranded'
+            snakemake_table.loc[index, 'kallisto_directionality'] = '--rf'
         else:
             snakemake_table.loc[index, 'kallisto_directionality'] = ''
 
@@ -202,36 +239,49 @@ def main():
         else:
             pass
 
-        if row[input_dict.loc['mate2_direction', 'labkey']] == 'SENSE':
-            snakemake_table.loc[index, 'fq2_polya'] = 'AAAAAAAAAAAAAAAAA'
-        elif row[input_dict.loc['mate2_direction', 'labkey']] == 'ANTISENSE':
-            snakemake_table.loc[index, 'fq2_polya'] = 'TTTTTTTTTTTTTTTTT'
-        elif row[input_dict.loc['mate2_direction', 'labkey']] == 'RANDOM':
-            snakemake_table.loc[index, 'fq2_polya'] = 'AAAAAAAAAAAAAAAAA'
-        else:
-            pass
+        if row[input_dict.loc['seqmode', 'labkey']] == 'PAIRED':
+            if row[input_dict.loc['mate2_direction', 'labkey']] == 'SENSE':
+                snakemake_table.loc[index, 'fq2_polya'] = 'AAAAAAAAAAAAAAAAA'
+            elif row[input_dict.loc['mate2_direction', 'labkey']] == 'ANTISENSE':
+                snakemake_table.loc[index, 'fq2_polya'] = 'TTTTTTTTTTTTTTTTT'
+            elif row[input_dict.loc['mate2_direction', 'labkey']] == 'RANDOM':
+                snakemake_table.loc[index, 'fq2_polya'] = 'AAAAAAAAAAAAAAAAA'
+            else:
+                pass
+
 
+    snakemake_table.fillna('XXXXXXXXXXXXX', inplace=True)
     snakemake_table.to_csv(
         options.samples_table,
         sep='\t',
         header=True,
         index=False)
 
+
     # Read file and infer read size for sjdbovwerhang
     with open(options.config_file, 'w') as config_file:
         config_file.write('''---
   output_dir: "results"
   local_log: "local_log"
-  star_indexes: "star_indexes"
-  kallisto_indexes: "kallisto_indexes"
+  star_indexes: "results/star_indexes"
+  kallisto_indexes: "results/kallisto_indexes"
+  samples: "'''+ options.samples_table + '''"
+  salmon_indexes: "results/salmon_indexes"
 ...''')
 
-
     sys.stdout.write('Create snakemake table finished successfully...\n')
     sys.stdout.write('Create config file...\n')
     sys.stdout.write('Create config file finished successfully...\n')
     return
 
+def api_fetch_labkey_table(project_name=None, query_name=None):
+    group_path = os.path.join( '/Zavolan Group', project_name)
+    server_context = labkey.utils.create_server_context('labkey.scicore.unibas.ch', group_path, 'labkey', use_ssl=True)
+    schema_name = "lists"
+    results = labkey.query.select_rows(server_context, schema_name, query_name)
+    input_table = pd.DataFrame(results["rows"])
+    return input_table
+
 
 # _____________________________________________________________________________
 # -----------------------------------------------------------------------------
diff --git a/tests/input_files/homo_sapiens/annotation.gtf b/tests/input_files/homo_sapiens/annotation.gtf
new file mode 100644
index 0000000..e41d542
--- /dev/null
+++ b/tests/input_files/homo_sapiens/annotation.gtf
@@ -0,0 +1,28 @@
+#!genome-build GRCh38.p13
+#!genome-version GRCh38
+#!genome-date 2013-12
+#!genome-build-accession NCBI:GCA_000001405.28
+#!genebuild-last-updated 2019-08
+1-10000-20000	havana	gene	1870	4410	.	+	.	gene_id "ENSG00000223972"; gene_version "5"; gene_name "DDX11L1"; gene_source "havana"; gene_biotype "transcribed_unprocessed_pseudogene";
+1-10000-20000	havana	transcript	1870	4410	.	+	.	gene_id "ENSG00000223972"; gene_version "5"; transcript_id "ENST00000456328"; transcript_version "2"; gene_name "DDX11L1"; gene_source "havana"; gene_biotype "transcribed_unprocessed_pseudogene"; transcript_name "DDX11L1-202"; transcript_source "havana"; transcript_biotype "processed_transcript"; tag "basic"; transcript_support_level "1";
+1-10000-20000	havana	exon	1870	2228	.	+	.	gene_id "ENSG00000223972"; gene_version "5"; transcript_id "ENST00000456328"; transcript_version "2"; exon_number "1"; gene_name "DDX11L1"; gene_source "havana"; gene_biotype "transcribed_unprocessed_pseudogene"; transcript_name "DDX11L1-202"; transcript_source "havana"; transcript_biotype "processed_transcript"; exon_id "ENSE00002234944"; exon_version "1"; tag "basic"; transcript_support_level "1";
+1-10000-20000	havana	exon	2614	2722	.	+	.	gene_id "ENSG00000223972"; gene_version "5"; transcript_id "ENST00000456328"; transcript_version "2"; exon_number "2"; gene_name "DDX11L1"; gene_source "havana"; gene_biotype "transcribed_unprocessed_pseudogene"; transcript_name "DDX11L1-202"; transcript_source "havana"; transcript_biotype "processed_transcript"; exon_id "ENSE00003582793"; exon_version "1"; tag "basic"; transcript_support_level "1";
+1-10000-20000	havana	exon	3222	4410	.	+	.	gene_id "ENSG00000223972"; gene_version "5"; transcript_id "ENST00000456328"; transcript_version "2"; exon_number "3"; gene_name "DDX11L1"; gene_source "havana"; gene_biotype "transcribed_unprocessed_pseudogene"; transcript_name "DDX11L1-202"; transcript_source "havana"; transcript_biotype "processed_transcript"; exon_id "ENSE00002312635"; exon_version "1"; tag "basic"; transcript_support_level "1";
+1-10000-20000	havana	transcript	2011	3671	.	+	.	gene_id "ENSG00000223972"; gene_version "5"; transcript_id "ENST00000450305"; transcript_version "2"; gene_name "DDX11L1"; gene_source "havana"; gene_biotype "transcribed_unprocessed_pseudogene"; transcript_name "DDX11L1-201"; transcript_source "havana"; transcript_biotype "transcribed_unprocessed_pseudogene"; tag "basic"; transcript_support_level "NA";
+1-10000-20000	havana	exon	2011	2058	.	+	.	gene_id "ENSG00000223972"; gene_version "5"; transcript_id "ENST00000450305"; transcript_version "2"; exon_number "1"; gene_name "DDX11L1"; gene_source "havana"; gene_biotype "transcribed_unprocessed_pseudogene"; transcript_name "DDX11L1-201"; transcript_source "havana"; transcript_biotype "transcribed_unprocessed_pseudogene"; exon_id "ENSE00001948541"; exon_version "1"; tag "basic"; transcript_support_level "NA";
+1-10000-20000	havana	exon	2180	2228	.	+	.	gene_id "ENSG00000223972"; gene_version "5"; transcript_id "ENST00000450305"; transcript_version "2"; exon_number "2"; gene_name "DDX11L1"; gene_source "havana"; gene_biotype "transcribed_unprocessed_pseudogene"; transcript_name "DDX11L1-201"; transcript_source "havana"; transcript_biotype "transcribed_unprocessed_pseudogene"; exon_id "ENSE00001671638"; exon_version "2"; tag "basic"; transcript_support_level "NA";
+1-10000-20000	havana	exon	2614	2698	.	+	.	gene_id "ENSG00000223972"; gene_version "5"; transcript_id "ENST00000450305"; transcript_version "2"; exon_number "3"; gene_name "DDX11L1"; gene_source "havana"; gene_biotype "transcribed_unprocessed_pseudogene"; transcript_name "DDX11L1-201"; transcript_source "havana"; transcript_biotype "transcribed_unprocessed_pseudogene"; exon_id "ENSE00001758273"; exon_version "2"; tag "basic"; transcript_support_level "NA";
+1-10000-20000	havana	exon	2976	3053	.	+	.	gene_id "ENSG00000223972"; gene_version "5"; transcript_id "ENST00000450305"; transcript_version "2"; exon_number "4"; gene_name "DDX11L1"; gene_source "havana"; gene_biotype "transcribed_unprocessed_pseudogene"; transcript_name "DDX11L1-201"; transcript_source "havana"; transcript_biotype "transcribed_unprocessed_pseudogene"; exon_id "ENSE00001799933"; exon_version "2"; tag "basic"; transcript_support_level "NA";
+1-10000-20000	havana	exon	3222	3375	.	+	.	gene_id "ENSG00000223972"; gene_version "5"; transcript_id "ENST00000450305"; transcript_version "2"; exon_number "5"; gene_name "DDX11L1"; gene_source "havana"; gene_biotype "transcribed_unprocessed_pseudogene"; transcript_name "DDX11L1-201"; transcript_source "havana"; transcript_biotype "transcribed_unprocessed_pseudogene"; exon_id "ENSE00001746346"; exon_version "2"; tag "basic"; transcript_support_level "NA";
+1-10000-20000	havana	exon	3454	3671	.	+	.	gene_id "ENSG00000223972"; gene_version "5"; transcript_id "ENST00000450305"; transcript_version "2"; exon_number "6"; gene_name "DDX11L1"; gene_source "havana"; gene_biotype "transcribed_unprocessed_pseudogene"; transcript_name "DDX11L1-201"; transcript_source "havana"; transcript_biotype "transcribed_unprocessed_pseudogene"; exon_id "ENSE00001863096"; exon_version "1"; tag "basic"; transcript_support_level "NA";
+1-10000-20000	havana	gene	4405	8367	.	-	.	gene_id	"ENSG00000227232"; gene_version	"5"; gene_name "WASH7P"; gene_source "havana"; gene_biotype "unprocessed_pseudogene";
+1-10000-20000	havana	transcript	4405	8367	.	-	.	gene_id "ENSG00000227232"; gene_version "5"; transcript_id "ENST00000488147"; transcript_version "1"; gene_name	"WASH7P"; gene_source "havana"; gene_biotype "unprocessed_pseudogene"; transcript_name "WASH7P-201"; transcript_source "havana"; transcript_biotype "unprocessed_pseudogene"; tag "basic"; transcript_support_level "NA";
+1-10000-20000	havana	exon	8269	8367	.	-	.	gene_id "ENSG00000227232"; gene_version "5"; transcript_id "ENST00000488147"; transcript_version "1"; exon_number "3"; gene_name "WASH7P"; gene_source "havana"; gene_biotype "unprocessed_pseudogene"; transcript_name "WASH7P-201"; transcript_source "havana"; transcript_biotype "unprocessed_pseudogene"; exon_id "ENSE00003477500"; exon_version "1"; tag "basic"; transcript_support_level "NA";
+1-10000-20000	havana	exon	7916	8062	.	-	.	gene_id "ENSG00000227232"; gene_version "5"; transcript_id "ENST00000488147"; transcript_version "1"; exon_number "4"; gene_name "WASH7P"; gene_source "havana"; gene_biotype "unprocessed_pseudogene"; transcript_name "WASH7P-201"; transcript_source "havana"; transcript_biotype "unprocessed_pseudogene"; exon_id "ENSE00003565697"; exon_version "1"; tag "basic"; transcript_support_level "NA";
+1-10000-20000	havana	exon	7607	7743	.	-	.	gene_id "ENSG00000227232"; gene_version "5"; transcript_id "ENST00000488147"; transcript_version "1"; exon_number "5"; gene_name "WASH7P"; gene_source "havana"; gene_biotype "unprocessed_pseudogene"; transcript_name "WASH7P-201"; transcript_source "havana"; transcript_biotype "unprocessed_pseudogene"; exon_id "ENSE00003475637"; exon_version "1"; tag "basic"; transcript_support_level "NA";
+1-10000-20000	havana	exon	7234	7369	.	-	.	gene_id "ENSG00000227232"; gene_version "5"; transcript_id "ENST00000488147"; transcript_version "1"; exon_number "6"; gene_name "WASH7P"; gene_source "havana"; gene_biotype "unprocessed_pseudogene"; transcript_name "WASH7P-201"; transcript_source "havana"; transcript_biotype "unprocessed_pseudogene"; exon_id "ENSE00003502542"; exon_version "1"; tag "basic"; transcript_support_level "NA";
+1-10000-20000	havana	exon	6859	7056	.	-	.	gene_id "ENSG00000227232"; gene_version "5"; transcript_id "ENST00000488147"; transcript_version "1"; exon_number "7"; gene_name "WASH7P"; gene_source "havana"; gene_biotype "unprocessed_pseudogene"; transcript_name "WASH7P-201"; transcript_source "havana"; transcript_biotype "unprocessed_pseudogene"; exon_id "ENSE00003553898"; exon_version "1"; tag "basic"; transcript_support_level "NA";
+1-10000-20000	havana	exon	6608	6766	.	-	.	gene_id "ENSG00000227232"; gene_version "5"; transcript_id "ENST00000488147"; transcript_version "1"; exon_number "8"; gene_name "WASH7P"; gene_source "havana"; gene_biotype "unprocessed_pseudogene"; transcript_name "WASH7P-201"; transcript_source "havana"; transcript_biotype "unprocessed_pseudogene"; exon_id "ENSE00003621279"; exon_version "1"; tag "basic"; transcript_support_level "NA";
+1-10000-20000	havana	exon	5797	5948	.	-	.	gene_id "ENSG00000227232"; gene_version "5"; transcript_id "ENST00000488147"; transcript_version "1"; exon_number "9"; gene_name "WASH7P"; gene_source "havana"; gene_biotype "unprocessed_pseudogene"; transcript_name "WASH7P-201"; transcript_source "havana"; transcript_biotype "unprocessed_pseudogene"; exon_id "ENSE00002030414"; exon_version "1"; tag "basic"; transcript_support_level "NA";
+1-10000-20000	havana	exon	5006	5039	.	-	.	gene_id "ENSG00000227232"; gene_version "5"; transcript_id "ENST00000488147"; transcript_version "1"; exon_number "10"; gene_name "WASH7P"; gene_source "havana"; gene_biotype "unprocessed_pseudogene"; transcript_name "WASH7P-201"; transcript_source "havana"; transcript_biotype "unprocessed_pseudogene"; exon_id "ENSE00001935574"; exon_version "1"; tag "basic"; transcript_support_level "NA";
+1-10000-20000	havana	exon	4405	4502	.	-	.	gene_id "ENSG00000227232"; gene_version "5"; transcript_id "ENST00000488147"; transcript_version "1"; exon_number "11"; gene_name "WASH7P"; gene_source "havana"; gene_biotype "unprocessed_pseudogene"; transcript_name "WASH7P-201"; transcript_source "havana"; transcript_biotype "unprocessed_pseudogene"; exon_id "ENSE00001843071"; exon_version "1"; tag "basic"; transcript_support_level "NA";
diff --git a/tests/input_files/homo_sapiens/genome.fa b/tests/input_files/homo_sapiens/genome.fa
new file mode 100644
index 0000000..7c6b040
--- /dev/null
+++ b/tests/input_files/homo_sapiens/genome.fa
@@ -0,0 +1,168 @@
+>1-10000-20000
+ntaaccctaaccctaaccctaaccctaaccctaaccctaaccctaaccctaaccctaacc
+ctaaccctaaccctaaccctaaccctaaccctaaccctaaccctaacccaaccctaaccc
+taaccctaaccctaaccctaaccctaacccctaaccctaaccctaaccctaaccctaacc
+taaccctaaccctaaccctaaccctaaccctaaccctaaccctaaccctaacccctaacc
+ctaaccctaaaccctaaaccctaaccctaaccctaaccctaaccctaaccccaaccccaa
+ccccaaccccaaccccaaccccaaccctaacccctaaccctaaccctaaccctaccctaa
+ccctaaccctaaccctaaccctaaccctaacccctaacccctaaccctaaccctaaccct
+aaccctaaccctaaccctaacccctaaccctaaccctaaccctaaccctcgcggtaccct
+cagccggcccgcccgcccgggtctgacctgaggagaactgtgctccgccttcagagtacc
+accgaaatctgtgcagaggacaacgcagctccgccctcgcggtgctctccgggtctgtgc
+tgaggagaacgcaactccgccgttgcaaaggcgcgccgcgccggcgcaggcgcagagagg
+cgcgccgcgccggcgcaggcgcagagaggcgcgccgcgccggcgcaggcgcagagaggcg
+cgccgcgccggcgcaggcgcagagaggcgcgccgcgccggcgcaggcgcagagaggcgcg
+ccgcgccggcgcaggcgcagacacatgctagcgcgtcggggtggaggcgtggcgcaggcg
+cagagaggcgcgccgcgccggcgcaggcgcagagacacatgctaccgcgtccaggggtgg
+aggcgtggcgcaggcgcagagaggcgcaccgcgccggcgcaggcgcagagacacatgcta
+gcgcgtccaggggtggaggcgtggcgcaggcgcagagacgcaagcctacgggcgggggtt
+gggggggcgtgtgttgcaggagcaaagtcgcacggcgccgggctggggcggggggagggt
+ggcgccgtgcacgcgcagaaactcacgtcacggtggcgcggcgcagagacgggtagaacc
+tcagtaatccgaaaagccgggatcgaccgccccttgcttgcagccgggcactacaggacc
+cgcttgctcacggtgctgtgccagggcgccccctgctggcgactagggcaactgcagggc
+tctcttgcttagagtggtggccagcgccccctgctggcgccggggcactgcagggccctc
+ttgcttactgtatagtggtggcacgccgcctgctggcagctagggacattgcagggtcct
+cttgctcaaggtgtagtggcagcacgcccacctgctggcagctggggacactgccgggcc
+ctcttgctcCAACAGTACTGGCGGATTATAGGGAAACACCCGGAGCATATGCTGTTTGGT
+CTCAGtagactcctaaatatgggattcctgggtttaaaagtaaaaaataaatatgtttaa
+tttgtgaactgattaccatcagaattgtactgttctgtatcccaccagcaatgtctagga
+atgcctgtttctccacaaagtgtttacttttggatttttgccagtctaacaggtgaAGcc
+ctggagattcttattagtgatttgggctggggcctggccatgtgtatttttttaaatttc
+cactgatgattttgctgcatggccggtgttgagaatgactgCGCAAATTTGCCGGATTTC
+CTTTGCTGTTCCTGCATGTAGTTTAAACGAGATTGCCAGCACCGGGTATCATTCACCATT
+TTTCTTTTCGTTAACTTGCCGTCAGCCTTTTCTTTGACCTCTTCTTTCTGTTCATGTGTA
+TTTGCTGTCTCTTAGCCCAGACTTCCCGTGTCCTTTCCACCGGGCCTTTGAGAGGTCACA
+GGGTCTTGATGCTGTGGTCTTCATCTGCAGGTGTCTGACTTCCAGCAACTGCTGGCCTGT
+GCCAGGGTGCAAGCTGAGCACTGGAGTGGAGTTTTCCTGTGGAGAGGAGCCATGCCTAGA
+GTGGGATGGGCCATTGTTCATCTTCTGGCCCCTGTTGTCTGCATGTAACTTAATACCACA
+ACCAGGCATAGGGGAAAGATTGGAGGAAAGATGAGTGAGAGCATCAACTTCTCTCACAAC
+CTAGGCCAGTAAGTAGTGCTTGTGCTCATCTCCTTGGCTGTGATACGTGGCCGGCCCTCG
+CTCCAGCAGCTGGACCCCTACCTGCCGTCTGCTGCCATCGGAGCCCAAAGCCGGGCTGTG
+ACTGCTCAGACCAGCCGGCTGGAGGGAGGGGCTCAGCAGGTCTGGCTTTGGCCCTGGGAG
+AGCAGGTGGAAGATCAGGCAGGCCATCGCTGCCACAGAACCCAGTGGATTGGCCTAGGTG
+GGATCTCTGAGCTCAACAAGCCCTCTCTGGGTGGTAGGTGCAGAGACGGGAGGGGCAGAG
+CCGCAGGCACAGCCAAGAGGGCTGAAGAAATGGTAGAACGGAGCAGCTGGTGATGTGTGG
+GCCCACCGGCCCCAGGCTCCTGTCTCCCCCCAGGTGTGTGGTGATGCCAGGCATGCCCTT
+CCCCAGCATCAGGTCTCCAGAGCTGCAGAAGACGACGGCCGACTTGGATCACACTCTTGT
+GAGTGTCCCCAGTGTTGCAGAGGTGAGAGGAGAGTAGACAGTGAGTGGGAGTGGCGTCGC
+CCCTAGGGCTCTACGGGGCCGGCGTCTCCTGTCTCCTGGAGAGGCTTCGATGCCCCTCCA
+CACCCTCTTGATCTTCCCTGTGATGTCATCTGGAGCCCTGCTGCTTGCGGTGGCCTATAA
+AGCCTCCTAGTCTGGCTCCAAGGCCTGGCAGAGTCTTTCCCAGGGAAAGCTACAAGCAGC
+AAACAGTCTGCATGGGTCATCCCCTTCACTCCCAGCTCAGAGCCCAGGCCAGGGGCCCCC
+AAGAAAGGCTCTGGTGGAGAACCTGTGCATGAAGGCTGTCAACCAGTCCATAGGCAAGCC
+TGGCTGCCTCCAGCTGGGTCGACAGACAGGGGCTGGAGAAGGGGAGAAGAGGAAAGTGAG
+GTTGCCTGCCCTGTCTCCTACCTGAGGCTGAGGAAGGAGAAGGGGATGCACTGTTGGGGA
+GGCAGCTGTAACTCAAAGCCTTAGCCTCTGTTCCCACGAAGGCAGGGCCATCAGGCACCA
+AAGGGATTCTGCCAGCATAGTGCTCCTGGACCAGTGATACACCCGGCACCCTGTCCTGGA
+CACGCTGTTGGCCTGGATCTGAGCCCTGGTGGAGGTCAAAGCCACCTTTGGTTCTGCCAT
+TGCTGCTGTGTGGAAGTTCACTCCTGCCTTTTCCTTTCCCTAGAGCCTCCACCACCCCGA
+GATCACATTTCTCACTGCCTTTTGTCTGCCCAGTTTCACCAGAAGTAGGCCTCTTCCTGA
+CAGGCAGCTGCACCACTGCCTGGCGCTGTGCCCTTCCTTTGCTCTGCCCGCTGGAGACGG
+TGTTTGTCATGGGCCTGGTCTGCAGGGATCCTGCTACAAAGGTGAAACCCAGGAGAGTGT
+GGAGTCCAGAGTGTTGCCAGGACCCAGGCACAGGCATTAGTGCCCGTTGGAGAAAACAGG
+GGAATCCCGAAGAAATGGTGGGTCCTGGCCATCCGTGAGATCTTCCCAGGGCAGCTCCCC
+TCTGTGGAATCCAATCTGTCTTCCATCCTGCGTGGCCGAGGGCCAGGCTTCTCACTGGGC
+CTCTGCAGGAGGCTGCCATTTGTCCTGCCCACCTTCTTAGAAGCGAGACGGAGCAGACCC
+ATCTGCTACTGCCCTTTCTATAATAACTAAAGTTAGCTGCCCTGGACTATTCACCCCCTA
+GTCTCAATTTAAGAAGATCCCCATGGCCACAGGGCCCCTGCCTGGGGGCTTGTCACCTCC
+CCCACCTTCTTCCTGAGTCATTCCTGCAGCCTTGCTCCCTAACCTGCCCCACAGCCTTGC
+CTGGATTTCTATCTCCCTGGCTTGGTGCCAGTTCCTCCAAGTCGATGGCACCTCCCTCCC
+TCTCAACCACTTGAGCAAACTCCAAGACATCTTCTACCCCAACACCAGCAATTGTGCCAA
+GGGCCATTAGGCTCTCAGCATGACTATTTTTAGAGACCCCGTGTCTGTCACTGAAACCTT
+TTTTGTGGGAGACTATTCCTCCCATCTGCAACAGCTGCCCCTGCTGACTGCCCTTCTCTC
+CTCCCTCTCATCCCAGAGAAACAGGTCAGCTGGGAGCTTCTGCCCCCACTGCCTAGGGAC
+CAACAGGGGCAGGAGGCAGTCACTGACCCCGAGACGTTTGCATCCTGCACAGCTAGAGAT
+CCTTTATTAAAAGCACACTGTTGGTTTCTGCTCAGTTCTTTATTGATTGGTGTGCCGTTT
+TCTCTGGAAGCCTCTTAAGAACACAGTGGCGCAGGCTGGGTGGAGCCGTCCCCCCATGGA
+GCACAGGCAGACAGAAGTCCCCGCCCCAGCTGTGTGGCCTCAAGCCAGCCTTCCGCTCCT
+TGAAGCTGGTCTCCACACAGTGCTGGTTCCGTCACCCCCTCCCAAGGAAGTAGGTCTGAG
+CAGCTTGTCCTGGCTGTGTCCATGTCAGAGCAACGGCCCAAGTCTGGGTCTGGGGGGGAA
+GGTGTCATGGAGCCCCCTACGATTCCCAGTCGTCCTCGTCCTCCTCTGCCTGTGGCTGCT
+GCGGTGGCGGCAGAGGAGGGATGGAGTCTGACACGCGGGCAAAGGCTCCTCCGGGCCCCT
+CACCAGCCCCAGGTCCTTTCCCAGAGATGCCTGGAGGGAAAAGGCTGAGTGAGGGTGGTT
+GGTGGGAAACCCTGGTTCCCCCAGCCCCCGGAGACTTAAATACAGGAAGAAAAAGGCAGG
+ACAGAATTACAAGGTGCTGGCCCAGGGCGGGCAGCGGCCCTGCCTCCTACCCTTGCGCCT
+CATGACCAGCTTGTTGAAGAGATCCGACATCAAGTGCCCACCTTGGCTCGTGGCTCTCAC
+TGCAACGGGAAAGCCACAGACTGGGGTGAAGAGTTCAGTCACATGCGACCGGTGACTCCC
+TGTCCCCACCCCCATGACACTCCCCAGCCCTCCAAGGCCACTGTGTTTCCCAGTTAGCTC
+AGAGCCTCAGTCGATCCCTGACCCAGCACCGGGCACTGATGAGACAGCGGCTGTTTGAGG
+AGCCACCTCCCAGCCACCTCGGGGCCAGGGCCAGGGTGTGCAGCAccactgtacaatggg
+gaaactggcccagagaggtgaggcagcttgcctggggtcacagagcaaggcaaaagcagc
+gctgggtacaagctcaAAACCATAGTGCCCAGGGCACTGCCGCTGCAGGCGCAGGCATCG
+CATCACACCAGTGTCTGCGTTCACAGCAGGCATCATCAGTAGCCTCCAGAGGCCTCAGGT
+CCAGTCTCTAAAAATATCTCAGGAGGCTGCAGTGGCTGACCATTGCCTTGGACCGCTCTT
+GGCAGTCGAAGAAGATTCTCCTGTCAGTTTGAGCTGGGTGAGCTTAGAGAGGAAAGCTCC
+ACTATGGCTCCCAAACCAGGAAGGAGCCATAGCCCAGGCAGGAGGGCTGAGGACCTCTGG
+TGGCGGCCCAGGGCTTCCAGCATGTGCCCTAGGGGAAGCAGGGGCCAGCTGGCAAGAGCA
+GGGGGTGGGCAGAAAGCACCCGGTGGACTCAGGGCTGGAGGGGAGGAGGCGATCTTGCCC
+AAGGCCCTCCGACTGCAAGCTCCAGGGCCCGCTCACCTTGCTCCTGCTCCTTCTGCTGCT
+GCTTCTCCAGCTTTCGCTCCTTCATGCTGCGCAGCTTGGCCTTGCCGATGCCCCCAGCTT
+GGCGGATGGACTCTAGCAGAGTGGCCAGCCACCGGAGGGGTCAACCACTTCCCTGGGAGC
+TCCCTGGACTGGAGCCGGGAGGTGGGGAACAGGGCAAGGAGGAAAGGCTGCTCAGGCAGG
+GCTGGGGAAGCTTACTGTGTCCAAGAGCCTGCTGGGAGGGAAGTCACCTCCCCTCAAACG
+AGGAGCCCTGCGCTGGGGAGGCCGGACCTTTGGAGACTGTGTGTGGGGGCCTGGGCACTG
+ACTTCTGCAACCACCTGAGCGCGGGCATCCTGTGTGCAGATACTCCCTGCTTCCTCTCTA
+GCCCCCACCCTGCAGAGCTGGACCCCTGAGCTAGCCATGCTCTGACAGTCTCAGTTGCAC
+ACACGAGCCAGCAGAGGGGTTTTGTGCCACTTCTGGATGCTAGGGTTACACTGGGAGACA
+CAGCAGTGAAGCTGAAATGAAAAATGTGTTGCTGTAGTTTGTTATTAGACCCCTTCTTTC
+CATTGGTTTAATTAGGAATGGGGAACCCAGAGCCTCACTTGTTCAGGCTCCCTCTGCCCT
+AGAAGTGAGAAGTCCAGAGCTCTACAGTTTGAAAACCACTATTTTATGAACCAAGTAGAA
+CAAGATATTTGAAATGGAAACTATTCAAAAAATTGAGAATTTCTGACCACTTAACAAACC
+CACAGAAAATCCACCCGAGTGCACTGAGCACGCCAGAAATCAGGTGGCCTCAAAGAGCTG
+CTCCCACCTGAAGGAGACGCGCTGCTGCTGCTGTCGTCCTGCCTGGCGCCTTGGCCTACA
+GGGGCCGCGGTTGAGGGTGGGAGTGGGGGTGCACTGGCCAGCACCTCAGGAGCtgggggt
+ggtggtgggggcggtgggggtggtgttagtACCCCATCTTGTAGGTCTGAAACACAAAGT
+GTGGGGTGTCTAGGGAAGAAGGTGTGTGACCAGGGAGGTCCCCGGCCCAGCTCCCATCCC
+AGAACCCAGCTCACCTACCTTGAGAGGCTCGGCTACCTCAGTGTGGAAGGTGGGCAGTTC
+TGGAATGGTGCCAGGGGCAGAGGGGGCAATGCCGGGGCCCAGGTCGGCAATGTACATGAG
+GTCGTTGGCAATGCCGGGCAGGTCAGGCAGGTAGGATGGAACATCAATCTCAGGCACCTG
+GCCCAGGTCTGGCACATAGAAGTAGTTCTCTGGGACCTGCAAGATTAGGCAGGGACATGT
+GAGAGGTGACAGGGACCTGCAGGGGCAGCCAACAAGACCTTGTGTGCACCTCCCATGGGT
+GGAATAAGGGGCCCAACAGCCTTGACTGGAGAGGAGCTCTGGCAAGGCCCTGGGCCACTG
+CACCTGTCTCCACCTCTGTCCCACCCCTCCCACCTGCTGTTCCAGCTGCTCTCTCTTGCT
+GATGGACAAGGGGGCATCAAACAGCTTCTCCTCTGTCTCTGCCCCCAGCATCACATGGGT
+CTTTGTTACAGCACCAGCCAGGGGGTCCAGGAAGACATACTTCTTCTACCTACAGAGGCG
+ACATGGGGGTCAGGCAAGCTGACACCCGCTGTCCTGAGCCCATGTTCCTCTCCCACATCA
+TCAGGGGCACAGCGTGCACTGTGGGGTCCCAGGCCTCCCGAGCCGAGCCACCCGTCACCC
+CCTGGCTCCTGGCCTATGTGCTGTACCTGTGTCTGATGCCCTGGGTCCCCACTAAGCCAG
+GCCGGGCCTCCCGCCCACACCCCTCGGCCCTGCCCTCTGGCCATACAGGTTCTCGGTGGT
+GTTGAAGAGCAGCAAGGAGCTGACAGAGCTGATGTTGCTGGGAAGACCCCCAAGTCCCTC
+TTCTGCATCGTCCTCGGGCTCCGGCTTGGTGCTCACGCACACAGGAAAGTCCTTCAGCTT
+CTCCTGAGAGGGCCAGGATGGCCAAGGGATGGTGAATATTTGGTGCTGGGCCTAATCAGC
+TGCCATCCCATCCCAGTCAGCCTCCTCTGGGGGACAGAACCCTATGGTGGCCCCGGCTCC
+TCCCCAGTATCCAGTCCTCCTGGTGTGTGACAGGCTATATGCGCGGCCAGCAGACCTGCA
+GGGCCCGCTCGTCCAGGGGGCGGTGCTTGCTCTGGATCCTGTGGCGGGGGCGTCTCTGCA
+GGCCAGGGTCCTGGGCGCCCGTGAAGATGGAGCCATATTCCTGCAGGCGCCCTGGAGCAG
+GGTACTTGGCACTGGAGAACACCTGTGGACACAGGGACAAGTCTGAGGGGGCCCCAAGAG
+GCTCAGAGGGCTAGGATTGCTTGGCAGGAGAGGGTGGAGTTGGAAGCCTGGGCGAGAAGA
+AAGCTCAAGGTACAGGTGGGCAGCAGGGCAGAGACTGGGCAGCCTCAGAGGCACGGGGAA
+ATGGAGGGACTGCCCAGTAGCCTCAGGACACAGGGGTATGGGGACTACCTTGATGGCCTT
+CTTGCTGCCCTTGATCTTCTCAATCTTGGCCTGGGCCAAGGAGACCTTCTCTCCAATGGC
+CTGCACCTGGCTCCGGCTCTGCTCTACCTGCTGGGAGATCCTGCCATGGAGAAGATCACA
+GAGGCTGGGCTGCTCCCCACCCTCTGCACACCTCCTGCTTCTAACAGCAGAGCTGCCAGG
+CCAGGCCCTCAGGCAAGGGCTCTGAAGTCAGGGTCACCTACTTGCCAGGGCCGATCTTGG
+TGCCATCCAGGGGGCCTCTACAAGGATAATCTGACCTGCAGGGTCGAGGAGTTGACGGTG
+CTGAGTTCCCTGCACTCTCAGTAGGGACAGGCCCTATGCTGCCACCTGTACATGCTATCT
+GAAGGACAGCCTCCAGGGCACACAGAGGATGGTATTTACACATGCACACATGGCTACTGA
+TGGGGCAAGCACTTCACAACCCCTCATGATCACGTGCAGCAGACAATGTGGCCTCTGCAG
+AGGGGGAACGGAGACCGGAGGCTGAGACTGGCAAGGCTGGACCTGAGTGTCGTCACCTAA
+ATTCAGACGGGGAACTGCCCCTGCACATACTGAACGGCTCACTGAGCAAACCCCGAGTCC
+CGACCACCGCCTCAGTGTGGTCTAGCTcctcacctgcttccatcctccctggtgcggggt
+gggcccagtgatatcagctgcctgctgttccccagatgtgccaagtgcattcttgtgtgc
+ttgcatctcatggaacgccatttccccagacatccctgtggctggctccTGATGCCCGAG
+GCCCAAGTGTCTGATGCTTTAAGGCACATCACCCCACTCATGCTTTTCCATGTTCTTTGG
+CCGCAGCAAGGCCGCTCTCACTGCAAAGTTAACTCTGATGCGTGTGTAACACAACATCCT
+CCTCCCAGTCGCCCCTGTAGCTCCCCTACCTCCAAGAGCCCAGCCCTTGCCCACAGGGCC
+ACACTCCACGTGCAGAGCAGCCTCAGCACTCACCGGGCACGAGCGAGCCTGTGTGGTGCG
+CAGGGAtgagaaggcagaggcgcgactggggttcatgaggaagggcaggaggagggtgtg
+ggatggtggaggggtttgagaaggcagaggcgcgactggggttcatgaggaaagggaggg
+ggaggatgtgggatggtggaggggCTGCAGACTCTGGGCTAGGGAAAGCTGGGATGTCTC
+TAAAGGTTGGAATGAATGGCCTAGAATCCGACCCAATAAGCCAAAGCCACTTCCACCAAC
+GTTAGAAGGCCTTGGCCCCCAGAGAGCCAATTTCACAATCCAGAAGTCCCCGTGCCCTAA
+AGGGTCTGCCCTGATTACTCCTGGCTCCTTGTGTGCAGGGGGCTCAGGCATGGCAGGGCT
+GGGAGTACCAGCAGGCACTCAAGCGGCTTAAGTGTTCCATGACAGACTGGTATGAAGGTG
+GCCACAATTCAGAAAGAAAAAAGAAGAGCACCATCTCCTTCCAGTGAGGAAGCGGGACCA
+CCACCCAGCGTGTGCTCCATCTTTTCTGGCTGGGGAGAGGCCTTCATCTGCTGTAAAGGG
+TCCTCCAGCACAAGCTGTCTTAATTGACCCTAGTTCCCAGGGCAGCCTCGTTCTGCCTTG
+GGTGCTGACACGACCTTCGGTAGGTGCATAAGCTCTGCATTCGAGGTCCACAGGGGCAGT
+GGGAGGGAACTGagactggggagggacaaaggctgctctgt
diff --git a/tests/input_files/homo_sapiens/transcriptome.fa b/tests/input_files/homo_sapiens/transcriptome.fa
new file mode 100644
index 0000000..a55426c
--- /dev/null
+++ b/tests/input_files/homo_sapiens/transcriptome.fa
@@ -0,0 +1,54 @@
+>ENST00000456328 gene=DDX11L1
+GTTAACTTGCCGTCAGCCTTTTCTTTGACCTCTTCTTTCTGTTCATGTGTATTTGCTGTCTCTTAGCCCA
+GACTTCCCGTGTCCTTTCCACCGGGCCTTTGAGAGGTCACAGGGTCTTGATGCTGTGGTCTTCATCTGCA
+GGTGTCTGACTTCCAGCAACTGCTGGCCTGTGCCAGGGTGCAAGCTGAGCACTGGAGTGGAGTTTTCCTG
+TGGAGAGGAGCCATGCCTAGAGTGGGATGGGCCATTGTTCATCTTCTGGCCCCTGTTGTCTGCATGTAAC
+TTAATACCACAACCAGGCATAGGGGAAAGATTGGAGGAAAGATGAGTGAGAGCATCAACTTCTCTCACAA
+CCTAGGCCAGTGTGTGGTGATGCCAGGCATGCCCTTCCCCAGCATCAGGTCTCCAGAGCTGCAGAAGACG
+ACGGCCGACTTGGATCACACTCTTGTGAGTGTCCCCAGTGTTGCAGAGGCAGGGCCATCAGGCACCAAAG
+GGATTCTGCCAGCATAGTGCTCCTGGACCAGTGATACACCCGGCACCCTGTCCTGGACACGCTGTTGGCC
+TGGATCTGAGCCCTGGTGGAGGTCAAAGCCACCTTTGGTTCTGCCATTGCTGCTGTGTGGAAGTTCACTC
+CTGCCTTTTCCTTTCCCTAGAGCCTCCACCACCCCGAGATCACATTTCTCACTGCCTTTTGTCTGCCCAG
+TTTCACCAGAAGTAGGCCTCTTCCTGACAGGCAGCTGCACCACTGCCTGGCGCTGTGCCCTTCCTTTGCT
+CTGCCCGCTGGAGACGGTGTTTGTCATGGGCCTGGTCTGCAGGGATCCTGCTACAAAGGTGAAACCCAGG
+AGAGTGTGGAGTCCAGAGTGTTGCCAGGACCCAGGCACAGGCATTAGTGCCCGTTGGAGAAAACAGGGGA
+ATCCCGAAGAAATGGTGGGTCCTGGCCATCCGTGAGATCTTCCCAGGGCAGCTCCCCTCTGTGGAATCCA
+ATCTGTCTTCCATCCTGCGTGGCCGAGGGCCAGGCTTCTCACTGGGCCTCTGCAGGAGGCTGCCATTTGT
+CCTGCCCACCTTCTTAGAAGCGAGACGGAGCAGACCCATCTGCTACTGCCCTTTCTATAATAACTAAAGT
+TAGCTGCCCTGGACTATTCACCCCCTAGTCTCAATTTAAGAAGATCCCCATGGCCACAGGGCCCCTGCCT
+GGGGGCTTGTCACCTCCCCCACCTTCTTCCTGAGTCATTCCTGCAGCCTTGCTCCCTAACCTGCCCCACA
+GCCTTGCCTGGATTTCTATCTCCCTGGCTTGGTGCCAGTTCCTCCAAGTCGATGGCACCTCCCTCCCTCT
+CAACCACTTGAGCAAACTCCAAGACATCTTCTACCCCAACACCAGCAATTGTGCCAAGGGCCATTAGGCT
+CTCAGCATGACTATTTTTAGAGACCCCGTGTCTGTCACTGAAACCTTTTTTGTGGGAGACTATTCCTCCC
+ATCTGCAACAGCTGCCCCTGCTGACTGCCCTTCTCTCCTCCCTCTCATCCCAGAGAAACAGGTCAGCTGG
+GAGCTTCTGCCCCCACTGCCTAGGGACCAACAGGGGCAGGAGGCAGTCACTGACCCCGAGACGTTTGCAT
+CCTGCACAGCTAGAGATCCTTTATTAAAAGCACACTGTTGGTTTCTG
+>ENST00000450305 gene=DDX11L1
+GTGTCTGACTTCCAGCAACTGCTGGCCTGTGCCAGGGTGCAAGCTGAGTTGGAGGAAAGATGAGTGAGAG
+CATCAACTTCTCTCACAACCTAGGCCAGTGTGTGGTGATGCCAGGCATGCCCTTCCCCAGCATCAGGTCT
+CCAGAGCTGCAGAAGACGACGGCCGACTTGGATCACACTCTTCTCAGAGCCCAGGCCAGGGGCCCCCAAG
+AAAGGCTCTGGTGGAGAACCTGTGCATGAAGGCTGTCAACCAGTCCATAGGCAGGGCCATCAGGCACCAA
+AGGGATTCTGCCAGCATAGTGCTCCTGGACCAGTGATACACCCGGCACCCTGTCCTGGACACGCTGTTGG
+CCTGGATCTGAGCCCTGGTGGAGGTCAAAGCCACCTTTGGTTCTGCCATTGCTGCTGTGTGGAATTTCAC
+CAGAAGTAGGCCTCTTCCTGACAGGCAGCTGCACCACTGCCTGGCGCTGTGCCCTTCCTTTGCTCTGCCC
+GCTGGAGACGGTGTTTGTCATGGGCCTGGTCTGCAGGGATCCTGCTACAAAGGTGAAACCCAGGAGAGTG
+TGGAGTCCAGAGTGTTGCCAGGACCCAGGCACAGGCATTAGTGCCCGTTGGAGAAAACAGGGGAATCCCG
+AA
+>ENST00000488147 gene=WASH7P
+GTAGAGCAGAGCCGGAGCCAGGTGCAGGCCATTGGAGAGAAGGTCTCCTTGGCCCAGGCCAAGATTGAGA
+AGATCAAGGGCAGCAAGAAGGCCATCAAGGTGTTCTCCAGTGCCAAGTACCCTGCTCCAGGGCGCCTGCA
+GGAATATGGCTCCATCTTCACGGGCGCCCAGGACCCTGGCCTGCAGAGACGCCCCCGCCACAGGATCCAG
+AGCAAGCACCGCCCCCTGGACGAGCGGGCCCTGCAGGAGAAGCTGAAGGACTTTCCTGTGTGCGTGAGCA
+CCAAGCCGGAGCCCGAGGACGATGCAGAAGAGGGACTTGGGGGTCTTCCCAGCAACATCAGCTCTGTCAG
+CTCCTTGCTGCTCTTCAACACCACCGAGAACCTGTAGAAGAAGTATGTCTTCCTGGACCCCCTGGCTGGT
+GCTGTAACAAAGACCCATGTGATGCTGGGGGCAGAGACAGAGGAGAAGCTGTTTGATGCCCCCTTGTCCA
+TCAGCAAGAGAGAGCAGCTGGAACAGCAGGTCCCAGAGAACTACTTCTATGTGCCAGACCTGGGCCAGGT
+GCCTGAGATTGATGTTCCATCCTACCTGCCTGACCTGCCCGGCATTGCCAACGACCTCATGTACATTGCC
+GACCTGGGCCCCGGCATTGCCCCCTCTGCCCCTGGCACCATTCCAGAACTGCCCACCTTCCACACTGAGG
+TAGCCGAGCCTCTCAAGACCTACAAGATGGGGTactaacaccacccccaccgcccccaccaccaccccca
+GCTCCTGAGGTGCTGGCCAGTGCACCCCCACTCCCACCCTCAACCGCGGCCCCTGTAGGCCAAGGCGCCA
+GGCAGGACGACAGCAGCAGCAGCGCGTCTCCTTCAGTCCAGGGAGCTCCCAGGGAAGTGGTTGACCCCTC
+CGGTGGCTGGCCACTCTGCTAGAGTCCATCCGCCAAGCTGGGGGCATCGGCAAGGCCAAGCTGCGCAGCA
+TGAAGGAGCGAAAGCTGGAGAAGCAGCAGCAGAAGGAGCAGGAGCAAGTGAGAGCCACGAGCCAAGGTGG
+GCACTTGATGTCGCTCCATGGGGGGACGGCTCCACCCAGCCTGCGCCACTGTGTTCTTAAGAGGCTTCCA
+GAGAAAACGGCACACCAATCAATAAAGAACTGAGCAGAAA
diff --git a/tests/input_files/project1/synthetic.mate_1.fastq.gz b/tests/input_files/project1/synthetic.mate_1.fastq.gz
new file mode 100644
index 0000000000000000000000000000000000000000..6eef226394bbb57b2a0692fde823c4dd252b7fee
GIT binary patch
literal 713
zcmb2|=HS?*=n%)iTwIw~l95`HnXH$aSdtoVsF#*lTvEuebn4l>+XezH@9VmlY@az8
zmSsdfP>goE!Ngjm$$$3uevkAt)thdQ<rj4Me$+o!H|OTl-^br?PrUKGQ0jEuub)4E
zz5d+(KQnk<(K+T@&X$X0PkoG@XSXb|X!E_<-^KISZqKW|e!<YZclOK6Qpc`cJeu~#
zX?d}1e|hO_%kUkt`(ONET=zb%?Bs`<?LXfo$81ju6P{%$nU>|bRLm^Q&`0&{J^2HB
z<@kOJKRh<Ophq;Ljo~6|LV5TF*&4MlmviDLldjGxzS8={rv2Pw#yOmP3)zp>{G9cC
z%7>MlEI%Ig*UnDvOR0JkDu4Lt;gx#?-<3pLu5`RAVs%ZzD5*5C`u3L3KjfdU5!<17
zg~yV0I?H#5omp&i8A4d+ty-J0AeH&S@l#I|&wPJa@q}w`)Xq1{5=;fy1ZxcS1$8ZY
zBj%<%)tqZ7ddVkaV{y6h!n$ioA{=LVl)VfEn4~9vm5hF7IKQvKn$P^9*ufVLDg0+M
zmM!_zz?q~v{dCtxvFI7oa(4UF=AJf4j*`vF+^nIH;l<!&xj1t51rG5;fd|?P+9&a+
zoGx#1PWyQ0@QhVLBFApCZCo<#gAaG_+8sFukDZL!aPv>8XJ-ymV3bDKq@Y*Rvi~?;
zZ_iQgQoZ@@dQM%WwrXSqZz#X>?JTwEc<bjUm%j0MrVy?x6dh^Qmzos%o=YUr`2K|C
znn_xVMJCViw$=1ciIMY9RfyTC8`E;~kKxjQE27;(7i(W``5<SxKvsQb``u}tXJcYm
zzOi1NR;JPYMY*zscgjsBpJh|lz2w|swD0NfoP|t(m%ctVGx*Z-$?kbmjRI8{FJakl
zvGonp{yps5UKMV89BH|1=BcGUD{e2GCp%N@wOt{<%=f0<wI{cl&i-fr^<U%e(#g`9
cOG14Ev({V_=ofE(cKV(E%NjMm`5X)k0B4j}-2eap

literal 0
HcmV?d00001

diff --git a/tests/input_files/project1/synthetic.mate_2.fastq.gz b/tests/input_files/project1/synthetic.mate_2.fastq.gz
new file mode 100644
index 0000000000000000000000000000000000000000..d48b1cc65d4614ee96a604da5f80f92c99e9bed7
GIT binary patch
literal 710
zcmb2|=HPgs=n%)iTwIw~l95`HnXH$aSdtoVq?eXhTvEuebn3yp+XezI@Bei%**<f)
zSe6m_KvCK$p^<543IEyu|2@*vRBtmTopwmAbX}X#>~Flg=J$`!Ry^%Ce#w?T`|ZB(
zx4-}UzS&dF=Qav*r#TBXmdpQsnJl#|@7cXw`@dY<v-9V<UFCDmRu!x5PVUH*72JN!
zAl~>)5A(S#ZPJ$oD(wpS%Jg?1VYkn%tB{x<ZMd2<(XY)%cjc8s38LFqF1dS~?asdn
zn>n23_u3z8ZOm{;s6AumqReV|wzN6n$@>=Zy~{q7zG$k?YB4^T_|nnve%v!l)j6h(
z4DmG<+boMzE(=cI#XG(K`6sU(pJOf5S&TYjwF0+1c+1V&I&sS!&55nm7k!(QIrKR5
zoOfoi&1DE-owsUj#)4Fa58H|=B|fvs2t~*{8OPhIM`}#}<LSLk!R3_Xmt-OD;=k9K
z*mwOd`0&7o-D!7Jcc4Oxq}!Av1s1bOUnQfT8P4}_u;wj)xS+Rq?;5jmT_KH0y;^#u
z5|2vwdr#a7=@K)$7W+Hvv_W!|Y}U)9K!*!c7+Q+lHis<~)N5JXFuUORr2drC{5Le%
z@Ba((@mVn=rcJehUH)^`t5f<*D;(d2o6X*zuNmm8;KhB^E68i_6{-CfN+;*KY*xAb
zP&<16Cew)<N*0~EV!b#xLS$0ml|`-Jw%Ns=`|A5;>RKJq<7OLIeP<Opowj%3u?m$^
zH%&Fe>2*Q#R_w5uciLgcCx;yw{F@f)p4Fe_`aC<p=#-(+yY0rwQ8`@Z(v7vwrJB}T
zTz^fpxy5!Whfyuq>-ra#7|Hn0$!6ig2PJ>cSyH4Mb6PxQ$;)#ZhTAI?SFaP<_WgG4
zgG;vS%Jyg-HwxZ8MR2S2mDS3ZlkTd2YrO1O@ZEgpfBh}XCVkC+@b2vsH>u3f;4M<C
XO^-Z2wxH(bU*?HhgkH_(U|;|MK`2YM

literal 0
HcmV?d00001

diff --git a/tests/input_files/project2/synthetic.mate_1.fastq.gz b/tests/input_files/project2/synthetic.mate_1.fastq.gz
new file mode 100644
index 0000000000000000000000000000000000000000..6eef226394bbb57b2a0692fde823c4dd252b7fee
GIT binary patch
literal 713
zcmb2|=HS?*=n%)iTwIw~l95`HnXH$aSdtoVsF#*lTvEuebn4l>+XezH@9VmlY@az8
zmSsdfP>goE!Ngjm$$$3uevkAt)thdQ<rj4Me$+o!H|OTl-^br?PrUKGQ0jEuub)4E
zz5d+(KQnk<(K+T@&X$X0PkoG@XSXb|X!E_<-^KISZqKW|e!<YZclOK6Qpc`cJeu~#
zX?d}1e|hO_%kUkt`(ONET=zb%?Bs`<?LXfo$81ju6P{%$nU>|bRLm^Q&`0&{J^2HB
z<@kOJKRh<Ophq;Ljo~6|LV5TF*&4MlmviDLldjGxzS8={rv2Pw#yOmP3)zp>{G9cC
z%7>MlEI%Ig*UnDvOR0JkDu4Lt;gx#?-<3pLu5`RAVs%ZzD5*5C`u3L3KjfdU5!<17
zg~yV0I?H#5omp&i8A4d+ty-J0AeH&S@l#I|&wPJa@q}w`)Xq1{5=;fy1ZxcS1$8ZY
zBj%<%)tqZ7ddVkaV{y6h!n$ioA{=LVl)VfEn4~9vm5hF7IKQvKn$P^9*ufVLDg0+M
zmM!_zz?q~v{dCtxvFI7oa(4UF=AJf4j*`vF+^nIH;l<!&xj1t51rG5;fd|?P+9&a+
zoGx#1PWyQ0@QhVLBFApCZCo<#gAaG_+8sFukDZL!aPv>8XJ-ymV3bDKq@Y*Rvi~?;
zZ_iQgQoZ@@dQM%WwrXSqZz#X>?JTwEc<bjUm%j0MrVy?x6dh^Qmzos%o=YUr`2K|C
znn_xVMJCViw$=1ciIMY9RfyTC8`E;~kKxjQE27;(7i(W``5<SxKvsQb``u}tXJcYm
zzOi1NR;JPYMY*zscgjsBpJh|lz2w|swD0NfoP|t(m%ctVGx*Z-$?kbmjRI8{FJakl
zvGonp{yps5UKMV89BH|1=BcGUD{e2GCp%N@wOt{<%=f0<wI{cl&i-fr^<U%e(#g`9
cOG14Ev({V_=ofE(cKV(E%NjMm`5X)k0B4j}-2eap

literal 0
HcmV?d00001

diff --git a/tests/input_files/synthetic.mate_1.bed b/tests/input_files/synthetic.mate_1.bed
new file mode 100644
index 0000000..f838343
--- /dev/null
+++ b/tests/input_files/synthetic.mate_1.bed
@@ -0,0 +1,10 @@
+1-10000-20000	3397	3472	NS500318:863:HY2KYBGXC:1:11101:14671:1067	0	+	DDX11L1
+1-10000-20000	3249	3324	NS500318:863:HY2KYBGXC:1:11101:24439:1068	0	+	DDX11L1
+1-10000-20000	3735	3810	NS500318:863:HY2KYBGXC:1:11101:14965:1069	0	+	DDX11L1
+1-10000-20000	2055	2130	NS500318:863:HY2KYBGXC:1:11101:21081:1069	0	+	DDX11L1
+1-10000-20000	3567	3642	NS500318:863:HY2KYBGXC:1:11101:18197:1070	0	+	DDX11L1
+1-10000-20000	7920	7995	NS500318:863:HY2KYBGXC:1:11101:4614:1071	0	-	WASH7P
+1-10000-20000	6665	6740	NS500318:863:HY2KYBGXC:1:11101:8467:1073	0	-	WASH7P
+1-10000-20000	6915	6990	NS500318:863:HY2KYBGXC:1:11101:18960:1076	0	-	WASH7P
+1-10000-20000	5841	5916	NS500318:863:HY2KYBGXC:1:11101:6851:1076	0	-	WASH7P
+1-10000-20000	7929	8004	NS500318:863:HY2KYBGXC:1:11101:14731:1078	0	-	WASH7P
diff --git a/tests/input_files/synthetic.mate_2.bed b/tests/input_files/synthetic.mate_2.bed
new file mode 100644
index 0000000..de4b713
--- /dev/null
+++ b/tests/input_files/synthetic.mate_2.bed
@@ -0,0 +1,10 @@
+1-10000-20000	3422	3497	NS500318:863:HY2KYBGXC:1:11101:14671:1067	0	+	DDX11L1
+1-10000-20000	3274	3349	NS500318:863:HY2KYBGXC:1:11101:24439:1068	0	+	DDX11L1
+1-10000-20000	3760	3835	NS500318:863:HY2KYBGXC:1:11101:14965:1069	0	+	DDX11L1
+1-10000-20000	2080	2155	NS500318:863:HY2KYBGXC:1:11101:21081:1069	0	+	DDX11L1
+1-10000-20000	3592	3667	NS500318:863:HY2KYBGXC:1:11101:18197:1070	0	+	DDX11L1
+1-10000-20000	7945	8020	NS500318:863:HY2KYBGXC:1:11101:4614:1071	0	-	WASH7P
+1-10000-20000	6690	6765	NS500318:863:HY2KYBGXC:1:11101:8467:1073	0	-	WASH7P
+1-10000-20000	6940	7015	NS500318:863:HY2KYBGXC:1:11101:18960:1076	0	-	WASH7P
+1-10000-20000	5866	5941	NS500318:863:HY2KYBGXC:1:11101:6851:1076	0	-	WASH7P
+1-10000-20000	7954	8029	NS500318:863:HY2KYBGXC:1:11101:14731:1078	0	-	WASH7P
diff --git a/tests/input_files/synthetic.paired.bed b/tests/input_files/synthetic.paired.bed
new file mode 100644
index 0000000..e372afb
--- /dev/null
+++ b/tests/input_files/synthetic.paired.bed
@@ -0,0 +1,10 @@
+1-10000-20000	3397	3497	NS500318:863:HY2KYBGXC:1:11101:14671:1067	0	+	DDX11L1
+1-10000-20000	3249	3349	NS500318:863:HY2KYBGXC:1:11101:24439:1068	0	+	DDX11L1
+1-10000-20000	3735	3835	NS500318:863:HY2KYBGXC:1:11101:14965:1069	0	+	DDX11L1
+1-10000-20000	2055	2155	NS500318:863:HY2KYBGXC:1:11101:21081:1069	0	+	DDX11L1
+1-10000-20000	3567	3667	NS500318:863:HY2KYBGXC:1:11101:18197:1070	0	+	DDX11L1
+1-10000-20000	7920	8020	NS500318:863:HY2KYBGXC:1:11101:4614:1071	0	-	WASH7P
+1-10000-20000	6665	6765	NS500318:863:HY2KYBGXC:1:11101:8467:1073	0	-	WASH7P
+1-10000-20000	6915	7015	NS500318:863:HY2KYBGXC:1:11101:18960:1076	0	-	WASH7P
+1-10000-20000	5841	5941	NS500318:863:HY2KYBGXC:1:11101:6851:1076	0	-	WASH7P
+1-10000-20000	7929	8029	NS500318:863:HY2KYBGXC:1:11101:14731:1078	0	-	WASH7P
diff --git a/tests/test_scripts_labkey_to_snakemake/expected_output.md5 b/tests/test_scripts_labkey_to_snakemake/expected_output.md5
index 622cddb..9f6d770 100644
--- a/tests/test_scripts_labkey_to_snakemake/expected_output.md5
+++ b/tests/test_scripts_labkey_to_snakemake/expected_output.md5
@@ -1,2 +1,2 @@
-de940b0dd38a67a7433536a5b3aee0ac  config.yaml
-d9c9ea4cd6108d39a2521dd87cd0c7e1  samples.tsv
+95fb0448dc6871cb415012d254260c5a  config.yaml
+4b51a822bcc83ffd744bf76f810162fc  samples.tsv
diff --git a/tests/test_scripts_labkey_to_snakemake/input_lib_1.mate_1.fastq.gz b/tests/test_scripts_labkey_to_snakemake/input_lib_1.mate_1.fastq.gz
deleted file mode 100644
index ddd5858c0318c865dd3c1e4a20ca03c07144daac..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1862
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

diff --git a/tests/test_scripts_labkey_to_snakemake/input_lib_1.mate_2.fastq.gz b/tests/test_scripts_labkey_to_snakemake/input_lib_1.mate_2.fastq.gz
deleted file mode 100644
index 0e97fa50b8d9f6457a2d73f6f0aa324a5949a1e0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1835
zcmb2|=3tQau!v(|o*Q|3(ql88J?F!hXtB!&d8*tL%AL;VUF01TtG?#czyH%&Ua)=r
z79qXPeUpc0s!4-e^Y6Fw&!68_dj0m}Z{dG$_tzh{-yeQ;ZRWh(-+w-SczC(~|Ig2n
z_Oq9*n_n7Res%NPRoi~<{^?=)ti{>S@c5I({YBsIoi<F5?7n%rq{~RX-st7#GcJ3-
z#Z60flDj0WBsWp~#OghEvnJnrVgK(3ha%5qiQ|P6>K`Y#%k5aw{dmif^``~fnh&1r
z&*zqy_1z%kyIbN8dlt5hSJXGEYm3}GY&PFu_7#c0ToX#X!bG}`SPKPwU{T>_`^9%a
zm0!ckbDzr2ZiAMSEK<i;U-+K2DUtbbYAWYxgEQql(zlt9H%wojuwz~a+jUMJruG94
z{oSSpJ;z+<ec_&_B9*e@YoP4f#>L%Toh*zALC={zXZjR%aGs8_?r1C2*(WC+u4=Yy
zrSkQ|-+o&7u1nl8w_#xs*Ws`0E-pyxx_#u%lnnVA-qpe}`i6%bE=X>*cZ)vElgDP2
zS>>H{=tcCC&CQIBiRa#mm%R^4;QJ{M!x4J*``$TKKkv2QH&14Du2#~_a&caMal(Wj
zS#4_Dp0&<mmil1eZ|Qvb?%|CRsvob`EooqDJ=Xd(SglWT<}-B(HHB$v{)z@?jwB@X
zH0TLzKl%KVdVq$MvwXpY^+hkj4NBf8X1rTl<Q%H3DRgI9B%{)mV7Ay*A1yD{xOz^X
zsIcd%wDgmV8$VvkJkPe>>(SN8GkvGw^3xWZpA;759Oq*DF4y*Y@vH=oFBx0neJ43Y
zG)o>`swyt=c%tGW<C!%l10Ja)t7U7c)_nNjEz$PVLdS7NLPWd!$q5Ph+^tf4T1Wq~
z@Vu2ZC}}uY9rYwp@KvMLjFy+-%4+*%3(Y5=Hn`*=#XJ3!=bJdaNe`!=Ub;VH8hiP~
z2k%l_55Kg3US?TewkDxsPy55N;I1{VRv$PJug8{Faplh05_ivr^NK7=hZ|X$6q{LB
zFXT}Sa9wFID?-YAz4lQxXTDF5y+8d?(tP!b$I`)KN7zZnv&Z$@aumd~4y8|Kaq9{2
zeO2qFz18;76vf#y!aDOG{}q$2i#J?r(f9f4$&cC=b1qEWE~R?;ZlLx9+Zif;VO%U?
zk+199nws1`bchAmpKj653%^s*yW)fE)U+#sdtYZys>%JfY1Y2pHeEjTmM2>;SFCtH
zOFT;9s@(^r*9$s1uX%8!{jmAWoVwt<>kIA;8Q;FKIjm9+?D>2#ywWh#yY5-(;{y|y
zC(fA0Iy+#?kw<r&{niy)EL7S3jcr!Vh77f56-(k3=S`J<(j}!4<hIJHWl7JqT9;Wo
zi&t(@oWHrS^%=*n-u2ySh1=%2h=rUBow|F+UZ-ECv)1@~oZRNTbH!A7lln-dmno;%
zZ#jnYHVZ`@p2W0f;hkAG!c!;Zd=b;sIJ9}mt<bZVoNG@qCB9m!F}FQ5U-aADYie?S
z8J^+Fa<jO;GVwY%EsXghyoO0bM$ToS<biLEWo|(Y>E#Fe4nI0_g-zA9N_SCPVz5$M
z;!=%MOKhs!)UR305tv-0UT~pK`sw}-g%rncCC0bfV;(fPN-+zDIw~`;P2cmWM=9S!
z!hgZEeF1^R_InQ><+&%dc9rLjhUXjNZayq<@+~WW!WyN+vin~`(VX_@7sD@9_)p}`
zz8EbzHOo{XVCHWzSNjF$G8!7?3O-AlS~eHV(LR2UfA?xrKJ_Ol*JDN7`ARQ0DQvu$
z63@HHy;)Y*Lt*mgMeHB%gmvT`@G;q_`g~va{Hh5%^S)g(U6en|Oz7C8w|ft=tl%oB
z;cNVm6cQ8pJ>n~;?M=%g&fgjA7g)9=cApiC-<AJvd&ME<niaDRPySO5Dy&+qA-JY7
z+;zo-y?s(*f(Bxtl_%ycd=q$f;l>pI-^ccUwY$P;d(&=(`o)~0{hcT0Zk(TTR&a|#
zw#pYl4TdA0SsfYMeDj^NHD*_sWq2)XIA*NBMAfbC`-eEqUy~)xWcGXM3#nB(XkXo}
z;M;N8FGXHr$GvN3pS8@(S^q-+&QyyVY}{KmyID<1V6snGUX-P_l1*W;=kzNx5Af?Q
z3v^5RJT)>a?$cp$ucFG+)>#ii_FoJ<%W3;E@51EpE555z-yGP~edwD~kjyR%<zK~`
z(iy6gOvPtTvT?GVx@<|w%M;2RxxMU}s;WXu=3nW%{4#FRY9~>>+San-qMZ7|U8@R}
zr@#9DfBE8B##Nhw>Q>0#nCTLhZq~Q$ded6Anx3CVvHejq9p+k0`TfE4w%+!)#~D@5
zOWZu#T+6p8fn)XCmoFD;wwJxi+?UvUnA7&=)?Mn?udMrW_v9(L@AHJWr{*%q=1VoD
z=RGYxe`;1xvdgDN^W2xd^YaTiR4w@)Rj0qGDs@$twz+08=fdRg+vfdHocd4m*1IJi
z<;xXr+8vMCmQgG?_lG~%vj$JT6&!Cuw0$}yH{D!x_eziR(E<?-b}uEK?!Q@nHGkOs
MejPixUy^|V0L8O$fB*mh

diff --git a/tests/test_scripts_labkey_to_snakemake/input_lib_2.mate_1.fastq.gz b/tests/test_scripts_labkey_to_snakemake/input_lib_2.mate_1.fastq.gz
deleted file mode 100644
index af6dc8e311511b121c45266063b97f7882519334..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1669
zcmb2|=3tQau!v(|UK@FO(rq`MJ@3Px%=2;zRMO0SnINFo_x+Vm=%4@bk6z|Y5OTFm
zdmFI+VZn*0FATkG-%jtpzyJNN#CnUb_3!`v_;&wzeEjTZ7q-2R{r>N5%H#6izaAg|
z{cdmW?90E`*-v>{W^eM>ez*Den7ET4XK&g$)zNF(U7=&|G?&i#smVQQs_9dfd}E!{
zEAO=B>uGhLR$*_8p7S}seqZlni`YJXnajs*x*ppUdAVC2OxO7S&@}e`y7Z~<joqqB
ze(tH=*|e~h_i){HrnYY(2_8qIBD`LomhUy*J|}b9!EZ^rj0andqK~ny7QQ|;^SBZZ
zm(k8Wa|#~j>FIOlCI0yF#qh4}v9B+=+Wuxs?5Yh;cp-IQL9fm<iS74!1S*c%wR@+$
z)8+Lt=(^u#yoS}}0N1{Smdev?&j0#bD-ox(sqx_lskViU<|T(09&qqJ#eOXD@Wa#d
zHhh+>Tf}`QBYld*^VkIkk`pS-eu>n$tqXKum18;n?r=c&vE<G34_yeYIQ))5!q2x+
zQJd`n_e?*ZbOy68+%4YM)=U(NSukTxhj~Q{izU<T_nsFn=5nR@?|qn-6t(Z2kDvbp
z$>X9twXNn`Y!fA#luj}pX>{Q@#KJFS<IpE`g!6Ed4+B$Yi-mz06L*m2o<kK2ZEBn+
zN*ixCzJ6>H)A5f!>sWLr$(}#hYjN~yBJ1IRhrI3wE=*SPZEUcgALzJVJ$+V_O1ITa
z#W{kG-<V4daCbJHcydB?SG-DBhGuwOyY#E%Bw3N;ToSh!4P>N(RCwG&QdApw{+&P5
z*u}les*Ue{LP0_AiPE~`x)rkzsT^8*=D!lp`RjWd9)6K(tK+|WLB9Nyh-T~Y+h@9u
z)hM_(7AUAsV0&n>OCip5vYSDmYVE-%d@1MWynE4hd|7N*?0R`s{%uT7pOUz~ZfHup
z9<t*w<H|+$r9yl&e=;g`Fndhus`6`5SkRpw<;Krhb!L(z56dd;yLp~Bh5L#RCe9I?
zY<Fl;N6o*wIn!rKZYX+N!|3w9P=ZT5;bbM3rfFWmiVG8Cy&12{G&VnBT(c;x<m3_;
zK^L1CuI^b%+PXnX7KL6@WI1M@*cBA8;P{#~uU=2loD^*~?T&f0&~cM_rvumMK1+(=
zX@6P5aUs#BDgOCFNw#%64=!}___kZQa6%K4c}g48wy+X+qY|yOVom0kE@@n<-bGxx
zt<oQ!d^+6X6>;i}zE^uL%Uw^S{uhbi3su@}|2CR<3NthF8;WpUvRuz&(9N2_mMna?
z?as^1n;sl=xU@1P!_>F0eEo%d4$qi**RI9ORX^qz4cc`3eP{ELW^cw#N4h*VM0&5B
z5U@cf@bIS7Gu>A5&N<}S6mxW1>$McoNAtt3L_3RD?M(h}6!$n_p{oD#zNxG~8kaJi
zF-v9k%z30Fe!Opz^W+kvR#tV_C6+5yyk~VBI-`7TM^5))W1VHQ@Bf~@{O!hL3!QxC
zMTJG|p7!%l(^pQXPuYS`dg|Yl3GuJGG9ho$xh9cP#Rr?0g%uvMYU!_i!GAvJ#p~p?
z{`rp=Ir+}xTcdj`%x2}1`7`*oOns%pBIzdAGpjjf*7HR@PnS%}QW6*Fcq0`YCgLG~
zob}MZ&?$E+4kZU%vj{nHGWqb1jQ)_T#qS+T7C20wEzBJ3^29POC(rvr=(DWZy4-Am
zCWST?LJPmzo5-2nD`KBu$|qV?^x`G|@8&FD)*X={qLEKqAGywz^yE3lV`}loA@7I|
zQ++~f;wq1;6@j0*9<#PTQ|h0#U`ANmx>M(7-H6zi_d7te>eH3YH{L8+JcadUZ}Msd
zt(?5-MMpw}+cI42Jc~JnET?(h4hdcHeUh;<n_b{Teo?(oQj;MTFI;SOP28*ek&9@=
zn$6Aui`IyIUz%aI%gS(1*2Sy~wUM=2+%q4ZQvB!PZrk4|6<^Wk+&a%@qv6f%2NbOW
zZly9U+U4+7n00Z$h7}Ue<i!$qCA_*IC9L{7^rzdE#pg?}h)v5B^C?_reSWso>!P0W
zf)y7gFF(v@QBu9_$rMcy?gr(O#V$!FRz~K{(tZ4M?)qc<?0gMZd}{aKkUrHu<i*M4
z!+JjV_5S{n5#4?{B9!gfX1z&OVNJbabF^Do;wN~1S@PoLuS;`3terRKVT4(Qqf;h>
zmlapQ#H=lk^Gu&^ZQ5~mc5drDo3fs6$6N_7xv0hV_g1o8TDtj>cdhS{D@V?MuGgpt
n{M#;aP#|>`*Ttfr!GAWS^u2xL&L}AO`J3?d+{B6dB^ek1gL4+;

diff --git a/tests/test_scripts_labkey_to_snakemake/input_lib_2.mate_2.fastq.gz b/tests/test_scripts_labkey_to_snakemake/input_lib_2.mate_2.fastq.gz
deleted file mode 100644
index dbc4e5096650863aeaa4bcea12b21a9c4b4d2509..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1758
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

diff --git a/tests/test_scripts_labkey_to_snakemake/input_table.tsv b/tests/test_scripts_labkey_to_snakemake/input_table.tsv
index 4b24cbf..f688762 100644
--- a/tests/test_scripts_labkey_to_snakemake/input_table.tsv
+++ b/tests/test_scripts_labkey_to_snakemake/input_table.tsv
@@ -1,3 +1,3 @@
-Entry date	Path to FASTQ file(s)	Condition name	Replicate name	End type (PAIRED or SINGLE)	Name of Mate1 FASTQ file	Name of Mate2 FASTQ file	Direction of Mate1 (SENSE, ANTISENSE or RANDOM)	Direction of Mate2 (SENSE, ANTISENSE or RANDOM)	5' adapter of Mate1	3' adapter of Mate1	5' adapter of Mate2	3' adapter of Mate2	Fragment length mean	Fragment length SD	Quality control flag (PASSED or FAILED)	Checksum of raw Mate1 FASTQ file	Checksum of raw Mate2 FASTQ file	Name of metadata file	Name of quality control file for Mate1	Name of quality control file for Mate2	Organism	Taxon ID	Name of Strain / Isolate / Breed / Ecotype	Strain / Isolate / Breed / Ecotype ID	Biomaterial provider	Source / tissue name	Tissue code	Additional tissue description	Genotype short name	Genotype description	Disease short name	Disease description	Abbreviation for treatment	Treatment description	Gender	Age	Developmental stage	Passage number	Sample preparation date (YYYY-MM-DD)	Prepared by	Documentation	Name of protocol file	Sequencing date (YYYY-MM-DD)	Sequencing instrument	Library preparation kit	Cycles	Molecule	Contaminant sequences	Name of BioAnalyzer file
-Fri Dec 20 00:00:00 CET 2019	.	LN18C	LN18C_rep1	PAIRED	input_lib_1.mate_1.fastq.gz	input_lib_1.mate_2.fastq.gz	ANTISENSE	SENSE	AAAAAAAAAA	AAAAAAAAAA	AAAAAAAAAA	AAAAAAAAAA	300.0	100.0	xxx	xxx	xxx	xxx	xxx	xxx	Homo sapiens	9606	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx
-Fri Dec 20 00:00:00 CET 2019	.	LN18C	LN18C_rep2	PAIRED	input_lib_2.mate_2.fastq.gz	input_lib_2.mate_2.fastq.gz	ANTISENSE	SENSE	AAAAAAAAAA	AAAAAAAAAA	AAAAAAAAAA	AAAAAAAAAA	300.0	100.0	xxx	xxx	xxx	xxx	xxx	xxx	Homo sapiens	9606	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx
+Entry date	Path to FASTQ file(s)	Condition name	Replicate name	End type (PAIRED or SINGLE)	Name of Mate1 FASTQ file	Name of Mate2 FASTQ file	Direction of Mate1 (SENSE, ANTISENSE or RANDOM)	Direction of Mate2 (SENSE, ANTISENSE or RANDOM)	5' adapter of Mate1	3' adapter of Mate1	5' adapter of Mate2	3' adapter of Mate2	Fragment length mean	Fragment length SD	Quality control flag (PASSED or FAILED)	Checksum of raw Mate1 FASTQ file	Checksum of raw Mate2 FASTQ file	Name of metadata file	Name of quality control file for Mate1	Name of quality control file for Mate2	Organism	Taxon ID	Name of Strain / Isolate / Breed / Ecotype	Strain / Isolate / Breed / Ecotype ID	Biomaterial provider	Source / tissue name	Tissue code	Additional tissue description	Genotype short name	Genotype description	Disease short name	Disease description	Abbreviation for treatment	Treatment description	Gender	Age	Developmental stage	Passage number	Sample preparation date (YYYY-MM-DD)	Prepared by	Documentation	Name of protocol file	Sequencing date (YYYY-MM-DD)	Sequencing instrument	Library preparation kit	Cycles	Molecule	Contaminant sequences	Name of BioAnalyzer file
+Fri Dec 20 00:00:00 CET 2019	../input_files/project1	synthetic_10_reads_paired	synthetic_10_reads_paired	PAIRED	synthetic.mate_1.fastq.gz	synthetic.mate_2.fastq.gz	SENSE	ANTISENSE		AGATCGGAAGAGCACA		AGATCGGAAGAGCGT	250	100	xxx	xxx	xxx	xxx	xxx	xxx	Homo sapiens	9606	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx
+Fri Dec 20 00:00:00 CET 2019	../input_files/project2	synthetic_10_reads_mate_1	synthetic_10_reads_mate_1	SINGLE	synthetic.mate_1.fastq.gz		SENSE			AGATCGGAAGAGCACA			250	100	xxx	xxx	xxx	xxx	xxx	xxx	Homo sapiens	9606	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx	xxx
\ No newline at end of file
diff --git a/tests/test_scripts_labkey_to_snakemake/test.sh b/tests/test_scripts_labkey_to_snakemake/test.sh
index c168305..27846cc 100755
--- a/tests/test_scripts_labkey_to_snakemake/test.sh
+++ b/tests/test_scripts_labkey_to_snakemake/test.sh
@@ -2,7 +2,7 @@
 
 # Tear down test environment
 trap 'rm config.yaml samples.tsv && cd $user_dir' EXIT  # quotes command is exected after script exits, regardless of exit status
-
+# 
 # Set up test environment
 set -eo pipefail  # ensures that script exits at first command that exits with non-zero status
 set -u  # ensures that script exits when unset variables are used
@@ -17,6 +17,22 @@ python "../../scripts/labkey_to_snakemake.py" \
     --input_dict="../../scripts/input_dict_caption.tsv" \
     --config_file="config.yaml" \
     --samples_table="samples.tsv" \
-    --genomes_path="."
+    --genomes_path="../input_files" \
+    --multimappers='10' \
+    # --remote \
+    # --project_name "TEST_LABKEY" \
+    # --query_name "RNA_Seq_data_template"
+
+
+snakemake \
+    --snakefile="../../snakemake/Snakefile" \
+    --configfile="config.yaml" \
+    --dryrun \
+    # --rulegraph \
+    # --printshellcmds \
+    # | dot -Tpng > "rulegraph.png"
+
 md5sum --check "expected_output.md5"
 
+    # snakemake --rulegraph --configfile config.yaml | dot -Tpng > rulegraph.png
+
-- 
GitLab