From ff08b9c3e280feec5e14850c7e8444362914b10d Mon Sep 17 00:00:00 2001
From: BIOPZ-Herrmann Christina <christina.herrmann@unibas.ch>
Date: Fri, 14 Feb 2020 16:26:06 +0100
Subject: [PATCH] display rule graph instead of DAG

- add script `tests/test_rule_graph/test.sh` to generate a rule graph in `images/rule_graph.svg`
- display rule graph created in `README.md` instead of specific workflow DAG
- add test script to GitLab CI config
- renamed test to create workflow DAG from `test_create_dag_chart` to `test_create_dag_image` (also output file is renamed from `images/workflow_dag.svg` to `images/dag_test_workflow.svg`
---
 .gitlab-ci.yml                                |   3 +-
 README.md                                     |   2 +-
 ...workflow_dag.svg => dag_test_workflow.svg} |  34 +--
 images/rule_graph.svg                         | 265 ++++++++++++++++++
 .../config.yaml                               |   0
 .../input_files/chr1-10000-20000.fa           |   0
 .../input_files/chr1-10000-20000.gtf          |   0
 .../chr1-10000-20000.transcripts.fa           |   0
 .../input_files/synthetic.mate_1.fastq.gz     | Bin
 .../input_files/synthetic.mate_2.fastq.gz     | Bin
 .../samples.tsv                               |   0
 .../test.sh                                   |   2 +-
 tests/test_rule_graph/config.yaml             |  29 ++
 .../input_files/chr1-10000-20000.fa           | 168 +++++++++++
 .../input_files/chr1-10000-20000.gtf          |  28 ++
 .../chr1-10000-20000.transcripts.fa           |  54 ++++
 .../input_files/synthetic.mate_1.fastq.gz     | Bin 0 -> 713 bytes
 .../input_files/synthetic.mate_2.fastq.gz     | Bin 0 -> 710 bytes
 tests/test_rule_graph/samples.tsv             |   3 +
 tests/test_rule_graph/test.sh                 |  22 ++
 20 files changed, 590 insertions(+), 20 deletions(-)
 rename images/{workflow_dag.svg => dag_test_workflow.svg} (94%)
 create mode 100644 images/rule_graph.svg
 rename tests/{test_create_dag_chart => test_create_dag_image}/config.yaml (100%)
 rename tests/{test_create_dag_chart => test_create_dag_image}/input_files/chr1-10000-20000.fa (100%)
 rename tests/{test_create_dag_chart => test_create_dag_image}/input_files/chr1-10000-20000.gtf (100%)
 rename tests/{test_create_dag_chart => test_create_dag_image}/input_files/chr1-10000-20000.transcripts.fa (100%)
 rename tests/{test_create_dag_chart => test_create_dag_image}/input_files/synthetic.mate_1.fastq.gz (100%)
 rename tests/{test_create_dag_chart => test_create_dag_image}/input_files/synthetic.mate_2.fastq.gz (100%)
 rename tests/{test_create_dag_chart => test_create_dag_image}/samples.tsv (100%)
 rename tests/{test_create_dag_chart => test_create_dag_image}/test.sh (92%)
 create mode 100644 tests/test_rule_graph/config.yaml
 create mode 100644 tests/test_rule_graph/input_files/chr1-10000-20000.fa
 create mode 100644 tests/test_rule_graph/input_files/chr1-10000-20000.gtf
 create mode 100644 tests/test_rule_graph/input_files/chr1-10000-20000.transcripts.fa
 create mode 100644 tests/test_rule_graph/input_files/synthetic.mate_1.fastq.gz
 create mode 100644 tests/test_rule_graph/input_files/synthetic.mate_2.fastq.gz
 create mode 100644 tests/test_rule_graph/samples.tsv
 create mode 100755 tests/test_rule_graph/test.sh

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 79d53fb..7934c08 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -12,6 +12,7 @@ test:
     # add script tests here
     - bash tests/test_scripts_labkey_to_snakemake/test.sh
     # add integration tests here
-    - bash tests/test_create_dag_chart/test.sh
+    - bash tests/test_create_dag_image/test.sh
+    - bash tests/test_rule_graph/test.sh
     - bash tests/test_integration_workflow/test.local.sh
 
diff --git a/README.md b/README.md
index 12afd7b..e031240 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@ library while cutting down on hands-on time for bioinformaticians.
 The scheme below is a visual representation of an example run of the
 workflow:  
 
-> ![workflow_dag](images/workflow_dag.svg)
+> ![rule_graph](images/rule_graph.svg)
 
 ## Installation
 
diff --git a/images/workflow_dag.svg b/images/dag_test_workflow.svg
similarity index 94%
rename from images/workflow_dag.svg
rename to images/dag_test_workflow.svg
index fc7fd7d..d33de51 100644
--- a/images/workflow_dag.svg
+++ b/images/dag_test_workflow.svg
@@ -12,13 +12,13 @@
 <!-- 0 -->
 <g id="node1" class="node">
 <title>0</title>
-<path fill="none" stroke="#70d856" stroke-width="2" d="M826.5,-36C826.5,-36 796.5,-36 796.5,-36 790.5,-36 784.5,-30 784.5,-24 784.5,-24 784.5,-12 784.5,-12 784.5,-6 790.5,0 796.5,0 796.5,0 826.5,0 826.5,0 832.5,0 838.5,-6 838.5,-12 838.5,-12 838.5,-24 838.5,-24 838.5,-30 832.5,-36 826.5,-36"/>
+<path fill="none" stroke="#d87556" stroke-width="2" d="M826.5,-36C826.5,-36 796.5,-36 796.5,-36 790.5,-36 784.5,-30 784.5,-24 784.5,-24 784.5,-12 784.5,-12 784.5,-6 790.5,0 796.5,0 796.5,0 826.5,0 826.5,0 832.5,0 838.5,-6 838.5,-12 838.5,-12 838.5,-24 838.5,-24 838.5,-30 832.5,-36 826.5,-36"/>
 <text text-anchor="middle" x="811.5" y="-15.5" font-family="sans" font-size="10.00">finish</text>
 </g>
 <!-- 1 -->
 <g id="node2" class="node">
 <title>1</title>
-<path fill="none" stroke="#d88d56" 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="#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"/>
 <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="#56d892" 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="#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"/>
 <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="#d8cb56" 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="#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"/>
 <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="#d8ac56" 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="#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"/>
 <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="#56c9d8" 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="#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"/>
 <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="#5673d8" 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="#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"/>
 <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 -->
@@ -104,7 +104,7 @@
 <!-- 8 -->
 <g id="node9" class="node">
 <title>8</title>
-<path fill="none" stroke="#afd856" stroke-width="2" d="M1388.5,-180C1388.5,-180 1242.5,-180 1242.5,-180 1236.5,-180 1230.5,-174 1230.5,-168 1230.5,-168 1230.5,-156 1230.5,-156 1230.5,-150 1236.5,-144 1242.5,-144 1242.5,-144 1388.5,-144 1388.5,-144 1394.5,-144 1400.5,-150 1400.5,-156 1400.5,-156 1400.5,-168 1400.5,-168 1400.5,-174 1394.5,-180 1388.5,-180"/>
+<path fill="none" stroke="#56d873" stroke-width="2" d="M1388.5,-180C1388.5,-180 1242.5,-180 1242.5,-180 1236.5,-180 1230.5,-174 1230.5,-168 1230.5,-168 1230.5,-156 1230.5,-156 1230.5,-150 1236.5,-144 1242.5,-144 1242.5,-144 1388.5,-144 1388.5,-144 1394.5,-144 1400.5,-150 1400.5,-156 1400.5,-156 1400.5,-168 1400.5,-168 1400.5,-174 1394.5,-180 1388.5,-180"/>
 <text text-anchor="middle" x="1315.5" y="-159.5" font-family="sans" font-size="10.00">genome_quantification_kallisto</text>
 </g>
 <!-- 8&#45;&gt;0 -->
@@ -116,7 +116,7 @@
 <!-- 9 -->
 <g id="node10" class="node">
 <title>9</title>
-<path fill="none" stroke="#56d8c9" 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="#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"/>
 <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="#d87556" 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="#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"/>
 <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="#56d873" 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="#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"/>
 <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="#59d856" 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="#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"/>
 <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>
@@ -184,7 +184,7 @@
 <!-- 13 -->
 <g id="node14" class="node">
 <title>13</title>
-<path fill="none" stroke="#56d8a9" stroke-width="2" d="M1128.5,-254.5C1128.5,-254.5 1018.5,-254.5 1018.5,-254.5 1012.5,-254.5 1006.5,-248.5 1006.5,-242.5 1006.5,-242.5 1006.5,-230.5 1006.5,-230.5 1006.5,-224.5 1012.5,-218.5 1018.5,-218.5 1018.5,-218.5 1128.5,-218.5 1128.5,-218.5 1134.5,-218.5 1140.5,-224.5 1140.5,-230.5 1140.5,-230.5 1140.5,-242.5 1140.5,-242.5 1140.5,-248.5 1134.5,-254.5 1128.5,-254.5"/>
+<path fill="none" stroke="#5673d8" stroke-width="2" d="M1128.5,-254.5C1128.5,-254.5 1018.5,-254.5 1018.5,-254.5 1012.5,-254.5 1006.5,-248.5 1006.5,-242.5 1006.5,-242.5 1006.5,-230.5 1006.5,-230.5 1006.5,-224.5 1012.5,-218.5 1018.5,-218.5 1018.5,-218.5 1128.5,-218.5 1128.5,-218.5 1134.5,-218.5 1140.5,-224.5 1140.5,-230.5 1140.5,-230.5 1140.5,-242.5 1140.5,-242.5 1140.5,-248.5 1134.5,-254.5 1128.5,-254.5"/>
 <text text-anchor="middle" x="1073.5" y="-234" font-family="sans" font-size="10.00">remove_polya_cutadapt</text>
 </g>
 <!-- 13&#45;&gt;6 -->
@@ -208,7 +208,7 @@
 <!-- 14 -->
 <g id="node15" class="node">
 <title>14</title>
-<path fill="none" stroke="#d85656" 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="#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"/>
 <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="#5692d8" 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="#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"/>
 <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="#56a9d8" 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="#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"/>
 <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="#c6d856" 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="#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"/>
 <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/images/rule_graph.svg b/images/rule_graph.svg
new file mode 100644
index 0000000..54cc82c
--- /dev/null
+++ b/images/rule_graph.svg
@@ -0,0 +1,265 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.42.3 (20191010.1750)
+ -->
+<!-- Title: snakemake_dag Pages: 1 -->
+<svg width="1143pt" height="332pt"
+ viewBox="0.00 0.00 1143.00 332.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 328)">
+<title>snakemake_dag</title>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-328 1139,-328 1139,4 -4,4"/>
+<!-- 0 -->
+<g id="node1" class="node">
+<title>0</title>
+<path fill="none" stroke="#5673d8" stroke-width="2" d="M561,-36C561,-36 531,-36 531,-36 525,-36 519,-30 519,-24 519,-24 519,-12 519,-12 519,-6 525,0 531,0 531,0 561,0 561,0 567,0 573,-6 573,-12 573,-12 573,-24 573,-24 573,-30 567,-36 561,-36"/>
+<text text-anchor="middle" x="546" y="-15.5" font-family="sans" font-size="10.00">finish</text>
+</g>
+<!-- 1 -->
+<g id="node2" class="node">
+<title>1</title>
+<path fill="none" stroke="#56d8c9" stroke-width="2" d="M52,-108C52,-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 52,-72 52,-72 58,-72 64,-78 64,-84 64,-84 64,-96 64,-96 64,-102 58,-108 52,-108"/>
+<text text-anchor="middle" x="32" y="-87.5" font-family="sans" font-size="10.00">pe_fastqc</text>
+</g>
+<!-- 1&#45;&gt;0 -->
+<g id="edge6" class="edge">
+<title>1&#45;&gt;0</title>
+<path fill="none" stroke="grey" stroke-width="2" d="M64.39,-74.6C67.27,-73.62 70.16,-72.73 73,-72 231.51,-31.13 427.95,-21.78 508.69,-19.64"/>
+<polygon fill="grey" stroke="grey" stroke-width="2" points="508.94,-23.13 518.85,-19.39 508.77,-16.13 508.94,-23.13"/>
+</g>
+<!-- 2 -->
+<g id="node3" class="node">
+<title>2</title>
+<path fill="none" stroke="#8fd856" stroke-width="2" d="M124,-108C124,-108 94,-108 94,-108 88,-108 82,-102 82,-96 82,-96 82,-84 82,-84 82,-78 88,-72 94,-72 94,-72 124,-72 124,-72 130,-72 136,-78 136,-84 136,-84 136,-96 136,-96 136,-102 130,-108 124,-108"/>
+<text text-anchor="middle" x="109" y="-87.5" font-family="sans" font-size="10.00">fastqc</text>
+</g>
+<!-- 2&#45;&gt;0 -->
+<g id="edge5" class="edge">
+<title>2&#45;&gt;0</title>
+<path fill="none" stroke="grey" stroke-width="2" d="M136.17,-75.1C139.1,-73.92 142.08,-72.86 145,-72 274.75,-33.8 436.26,-23.08 508.28,-20.11"/>
+<polygon fill="grey" stroke="grey" stroke-width="2" points="508.79,-23.6 518.65,-19.72 508.53,-16.6 508.79,-23.6"/>
+</g>
+<!-- 3 -->
+<g id="node4" class="node">
+<title>3</title>
+<path fill="none" stroke="#d88d56" stroke-width="2" d="M355.5,-108C355.5,-108 166.5,-108 166.5,-108 160.5,-108 154.5,-102 154.5,-96 154.5,-96 154.5,-84 154.5,-84 154.5,-78 160.5,-72 166.5,-72 166.5,-72 355.5,-72 355.5,-72 361.5,-72 367.5,-78 367.5,-84 367.5,-84 367.5,-96 367.5,-96 367.5,-102 361.5,-108 355.5,-108"/>
+<text text-anchor="middle" x="261" y="-87.5" font-family="sans" font-size="10.00">pe_index_genomic_alignment_samtools</text>
+</g>
+<!-- 3&#45;&gt;0 -->
+<g id="edge2" class="edge">
+<title>3&#45;&gt;0</title>
+<path fill="none" stroke="grey" stroke-width="2" d="M330.35,-71.97C386.61,-58.15 463.72,-39.21 508.87,-28.12"/>
+<polygon fill="grey" stroke="grey" stroke-width="2" points="509.93,-31.46 518.81,-25.68 508.26,-24.66 509.93,-31.46"/>
+</g>
+<!-- 4 -->
+<g id="node5" class="node">
+<title>4</title>
+<path fill="none" stroke="#c6d856" stroke-width="2" d="M569,-108C569,-108 397,-108 397,-108 391,-108 385,-102 385,-96 385,-96 385,-84 385,-84 385,-78 391,-72 397,-72 397,-72 569,-72 569,-72 575,-72 581,-78 581,-84 581,-84 581,-96 581,-96 581,-102 575,-108 569,-108"/>
+<text text-anchor="middle" x="483" y="-87.5" font-family="sans" font-size="10.00">index_genomic_alignment_samtools</text>
+</g>
+<!-- 4&#45;&gt;0 -->
+<g id="edge1" class="edge">
+<title>4&#45;&gt;0</title>
+<path fill="none" stroke="grey" stroke-width="2" d="M498.57,-71.7C506.2,-63.22 515.52,-52.86 523.88,-43.58"/>
+<polygon fill="grey" stroke="grey" stroke-width="2" points="526.52,-45.88 530.61,-36.1 521.31,-41.2 526.52,-45.88"/>
+</g>
+<!-- 5 -->
+<g id="node6" class="node">
+<title>5</title>
+<path fill="none" stroke="#56c9d8" stroke-width="2" d="M586,-180C586,-180 468,-180 468,-180 462,-180 456,-174 456,-168 456,-168 456,-156 456,-156 456,-150 462,-144 468,-144 468,-144 586,-144 586,-144 592,-144 598,-150 598,-156 598,-156 598,-168 598,-168 598,-174 592,-180 586,-180"/>
+<text text-anchor="middle" x="527" y="-159.5" font-family="sans" font-size="10.00">pe_quantification_salmon</text>
+</g>
+<!-- 5&#45;&gt;0 -->
+<g id="edge7" class="edge">
+<title>5&#45;&gt;0</title>
+<path fill="none" stroke="grey" stroke-width="2" d="M557.3,-143.8C569.88,-134.9 583.12,-122.77 590,-108 596.75,-93.49 595.43,-87.05 590,-72 586.25,-61.6 579.46,-51.8 572.33,-43.52"/>
+<polygon fill="grey" stroke="grey" stroke-width="2" points="574.83,-41.06 565.47,-36.08 569.68,-45.81 574.83,-41.06"/>
+</g>
+<!-- 6 -->
+<g id="node7" class="node">
+<title>6</title>
+<path fill="none" stroke="#59d856" stroke-width="2" d="M729.5,-180C729.5,-180 628.5,-180 628.5,-180 622.5,-180 616.5,-174 616.5,-168 616.5,-168 616.5,-156 616.5,-156 616.5,-150 622.5,-144 628.5,-144 628.5,-144 729.5,-144 729.5,-144 735.5,-144 741.5,-150 741.5,-156 741.5,-156 741.5,-168 741.5,-168 741.5,-174 735.5,-180 729.5,-180"/>
+<text text-anchor="middle" x="679" y="-159.5" font-family="sans" font-size="10.00">quantification_salmon</text>
+</g>
+<!-- 6&#45;&gt;0 -->
+<g id="edge4" class="edge">
+<title>6&#45;&gt;0</title>
+<path fill="none" stroke="grey" stroke-width="2" d="M666.56,-143.86C652.82,-125.38 629.64,-95.45 607,-72 597.14,-61.79 585.54,-51.36 575.12,-42.5"/>
+<polygon fill="grey" stroke="grey" stroke-width="2" points="577.34,-39.79 567.43,-36.05 572.84,-45.15 577.34,-39.79"/>
+</g>
+<!-- 7 -->
+<g id="node8" class="node">
+<title>7</title>
+<path fill="none" stroke="#d8ac56" stroke-width="2" d="M934.5,-180C934.5,-180 771.5,-180 771.5,-180 765.5,-180 759.5,-174 759.5,-168 759.5,-168 759.5,-156 759.5,-156 759.5,-150 765.5,-144 771.5,-144 771.5,-144 934.5,-144 934.5,-144 940.5,-144 946.5,-150 946.5,-156 946.5,-156 946.5,-168 946.5,-168 946.5,-174 940.5,-180 934.5,-180"/>
+<text text-anchor="middle" x="853" y="-159.5" font-family="sans" font-size="10.00">pe_genome_quantification_kallisto</text>
+</g>
+<!-- 7&#45;&gt;0 -->
+<g id="edge3" class="edge">
+<title>7&#45;&gt;0</title>
+<path fill="none" stroke="grey" stroke-width="2" d="M815.97,-143.87C756.75,-116.48 641.43,-63.14 582.53,-35.9"/>
+<polygon fill="grey" stroke="grey" stroke-width="2" points="583.78,-32.62 573.24,-31.6 580.84,-38.97 583.78,-32.62"/>
+</g>
+<!-- 8 -->
+<g id="node9" class="node">
+<title>8</title>
+<path fill="none" stroke="#56a9d8" stroke-width="2" d="M1123,-180C1123,-180 977,-180 977,-180 971,-180 965,-174 965,-168 965,-168 965,-156 965,-156 965,-150 971,-144 977,-144 977,-144 1123,-144 1123,-144 1129,-144 1135,-150 1135,-156 1135,-156 1135,-168 1135,-168 1135,-174 1129,-180 1123,-180"/>
+<text text-anchor="middle" x="1050" y="-159.5" font-family="sans" font-size="10.00">genome_quantification_kallisto</text>
+</g>
+<!-- 8&#45;&gt;0 -->
+<g id="edge8" class="edge">
+<title>8&#45;&gt;0</title>
+<path fill="none" stroke="grey" stroke-width="2" d="M989.46,-143.94C883.9,-114.2 669.21,-53.71 583.03,-29.43"/>
+<polygon fill="grey" stroke="grey" stroke-width="2" points="583.74,-26 573.17,-26.65 581.84,-32.74 583.74,-26"/>
+</g>
+<!-- 9 -->
+<g id="node10" class="node">
+<title>9</title>
+<path fill="none" stroke="#5692d8" stroke-width="2" d="M300.5,-180C300.5,-180 199.5,-180 199.5,-180 193.5,-180 187.5,-174 187.5,-168 187.5,-168 187.5,-156 187.5,-156 187.5,-150 193.5,-144 199.5,-144 199.5,-144 300.5,-144 300.5,-144 306.5,-144 312.5,-150 312.5,-156 312.5,-156 312.5,-168 312.5,-168 312.5,-174 306.5,-180 300.5,-180"/>
+<text text-anchor="middle" x="250" y="-159.5" font-family="sans" font-size="10.00">pe_map_genome_star</text>
+</g>
+<!-- 9&#45;&gt;3 -->
+<g id="edge9" class="edge">
+<title>9&#45;&gt;3</title>
+<path fill="none" stroke="grey" stroke-width="2" d="M252.72,-143.7C253.93,-135.98 255.39,-126.71 256.74,-118.11"/>
+<polygon fill="grey" stroke="grey" stroke-width="2" points="260.22,-118.53 258.31,-108.1 253.3,-117.44 260.22,-118.53"/>
+</g>
+<!-- 10 -->
+<g id="node11" class="node">
+<title>10</title>
+<path fill="none" stroke="#afd856" stroke-width="2" d="M425.5,-180C425.5,-180 342.5,-180 342.5,-180 336.5,-180 330.5,-174 330.5,-168 330.5,-168 330.5,-156 330.5,-156 330.5,-150 336.5,-144 342.5,-144 342.5,-144 425.5,-144 425.5,-144 431.5,-144 437.5,-150 437.5,-156 437.5,-156 437.5,-168 437.5,-168 437.5,-174 431.5,-180 425.5,-180"/>
+<text text-anchor="middle" x="384" y="-159.5" font-family="sans" font-size="10.00">map_genome_star</text>
+</g>
+<!-- 10&#45;&gt;4 -->
+<g id="edge10" class="edge">
+<title>10&#45;&gt;4</title>
+<path fill="none" stroke="grey" stroke-width="2" d="M408.22,-143.88C420.92,-134.89 436.66,-123.76 450.42,-114.03"/>
+<polygon fill="grey" stroke="grey" stroke-width="2" points="452.54,-116.82 458.69,-108.19 448.5,-111.11 452.54,-116.82"/>
+</g>
+<!-- 11 -->
+<g id="node12" class="node">
+<title>11</title>
+<path fill="none" stroke="#d87556" stroke-width="2" d="M528,-252C528,-252 400,-252 400,-252 394,-252 388,-246 388,-240 388,-240 388,-228 388,-228 388,-222 394,-216 400,-216 400,-216 528,-216 528,-216 534,-216 540,-222 540,-228 540,-228 540,-240 540,-240 540,-246 534,-252 528,-252"/>
+<text text-anchor="middle" x="464" y="-231.5" font-family="sans" font-size="10.00">pe_remove_polya_cutadapt</text>
+</g>
+<!-- 11&#45;&gt;5 -->
+<g id="edge12" class="edge">
+<title>11&#45;&gt;5</title>
+<path fill="none" stroke="grey" stroke-width="2" d="M479.57,-215.7C487.2,-207.22 496.52,-196.86 504.88,-187.58"/>
+<polygon fill="grey" stroke="grey" stroke-width="2" points="507.52,-189.88 511.61,-180.1 502.31,-185.2 507.52,-189.88"/>
+</g>
+<!-- 11&#45;&gt;7 -->
+<g id="edge16" class="edge">
+<title>11&#45;&gt;7</title>
+<path fill="none" stroke="grey" stroke-width="2" d="M540.44,-217.62C543.33,-217.07 546.19,-216.53 549,-216 615.58,-203.54 690.55,-190.46 749.38,-180.41"/>
+<polygon fill="grey" stroke="grey" stroke-width="2" points="750.15,-183.83 759.42,-178.7 748.97,-176.93 750.15,-183.83"/>
+</g>
+<!-- 11&#45;&gt;9 -->
+<g id="edge20" class="edge">
+<title>11&#45;&gt;9</title>
+<path fill="none" stroke="grey" stroke-width="2" d="M411.92,-215.97C381.76,-206.1 343.61,-193.62 311.92,-183.25"/>
+<polygon fill="grey" stroke="grey" stroke-width="2" points="312.9,-179.89 302.31,-180.11 310.73,-186.55 312.9,-179.89"/>
+</g>
+<!-- 12 -->
+<g id="node13" class="node">
+<title>12</title>
+<path fill="none" stroke="#d85656" stroke-width="2" d="M667.5,-252C667.5,-252 570.5,-252 570.5,-252 564.5,-252 558.5,-246 558.5,-240 558.5,-240 558.5,-228 558.5,-228 558.5,-222 564.5,-216 570.5,-216 570.5,-216 667.5,-216 667.5,-216 673.5,-216 679.5,-222 679.5,-228 679.5,-228 679.5,-240 679.5,-240 679.5,-246 673.5,-252 667.5,-252"/>
+<text text-anchor="middle" x="619" y="-231.5" font-family="sans" font-size="10.00">create_index_salmon</text>
+</g>
+<!-- 12&#45;&gt;5 -->
+<g id="edge11" class="edge">
+<title>12&#45;&gt;5</title>
+<path fill="none" stroke="grey" stroke-width="2" d="M596.26,-215.7C584.56,-206.8 570.14,-195.82 557.49,-186.2"/>
+<polygon fill="grey" stroke="grey" stroke-width="2" points="559.56,-183.37 549.48,-180.1 555.32,-188.94 559.56,-183.37"/>
+</g>
+<!-- 12&#45;&gt;6 -->
+<g id="edge13" class="edge">
+<title>12&#45;&gt;6</title>
+<path fill="none" stroke="grey" stroke-width="2" d="M633.83,-215.7C641.02,-207.3 649.8,-197.07 657.69,-187.86"/>
+<polygon fill="grey" stroke="grey" stroke-width="2" points="660.49,-189.97 664.34,-180.1 655.17,-185.42 660.49,-189.97"/>
+</g>
+<!-- 13 -->
+<g id="node14" class="node">
+<title>13</title>
+<path fill="none" stroke="#d8cb56" stroke-width="2" d="M820,-252C820,-252 710,-252 710,-252 704,-252 698,-246 698,-240 698,-240 698,-228 698,-228 698,-222 704,-216 710,-216 710,-216 820,-216 820,-216 826,-216 832,-222 832,-228 832,-228 832,-240 832,-240 832,-246 826,-252 820,-252"/>
+<text text-anchor="middle" x="765" y="-231.5" font-family="sans" font-size="10.00">remove_polya_cutadapt</text>
+</g>
+<!-- 13&#45;&gt;6 -->
+<g id="edge14" class="edge">
+<title>13&#45;&gt;6</title>
+<path fill="none" stroke="grey" stroke-width="2" d="M743.74,-215.7C732.91,-206.88 719.58,-196.03 707.84,-186.47"/>
+<polygon fill="grey" stroke="grey" stroke-width="2" points="709.98,-183.7 700.01,-180.1 705.56,-189.13 709.98,-183.7"/>
+</g>
+<!-- 13&#45;&gt;8 -->
+<g id="edge18" class="edge">
+<title>13&#45;&gt;8</title>
+<path fill="none" stroke="grey" stroke-width="2" d="M832.18,-216.5C873.55,-206.34 926.82,-193.26 970.32,-182.57"/>
+<polygon fill="grey" stroke="grey" stroke-width="2" points="971.42,-185.9 980.29,-180.12 969.75,-179.11 971.42,-185.9"/>
+</g>
+<!-- 13&#45;&gt;10 -->
+<g id="edge22" class="edge">
+<title>13&#45;&gt;10</title>
+<path fill="none" stroke="grey" stroke-width="2" d="M697.86,-217.89C694.53,-217.23 691.23,-216.6 688,-216 584.62,-196.89 554.75,-201.82 447.45,-179.95"/>
+<polygon fill="grey" stroke="grey" stroke-width="2" points="448.02,-176.49 437.52,-177.89 446.6,-183.35 448.02,-176.49"/>
+</g>
+<!-- 14 -->
+<g id="node15" class="node">
+<title>14</title>
+<path fill="none" stroke="#56d892" stroke-width="2" d="M961.5,-252C961.5,-252 864.5,-252 864.5,-252 858.5,-252 852.5,-246 852.5,-240 852.5,-240 852.5,-228 852.5,-228 852.5,-222 858.5,-216 864.5,-216 864.5,-216 961.5,-216 961.5,-216 967.5,-216 973.5,-222 973.5,-228 973.5,-228 973.5,-240 973.5,-240 973.5,-246 967.5,-252 961.5,-252"/>
+<text text-anchor="middle" x="913" y="-231.5" font-family="sans" font-size="10.00">create_index_kallisto</text>
+</g>
+<!-- 14&#45;&gt;7 -->
+<g id="edge15" class="edge">
+<title>14&#45;&gt;7</title>
+<path fill="none" stroke="grey" stroke-width="2" d="M898.17,-215.7C890.98,-207.3 882.2,-197.07 874.31,-187.86"/>
+<polygon fill="grey" stroke="grey" stroke-width="2" points="876.83,-185.42 867.66,-180.1 871.51,-189.97 876.83,-185.42"/>
+</g>
+<!-- 14&#45;&gt;8 -->
+<g id="edge17" class="edge">
+<title>14&#45;&gt;8</title>
+<path fill="none" stroke="grey" stroke-width="2" d="M946.51,-215.88C964.84,-206.51 987.74,-194.81 1007.33,-184.8"/>
+<polygon fill="grey" stroke="grey" stroke-width="2" points="1009.04,-187.86 1016.36,-180.19 1005.86,-181.62 1009.04,-187.86"/>
+</g>
+<!-- 15 -->
+<g id="node16" class="node">
+<title>15</title>
+<path fill="none" stroke="#56d873" stroke-width="2" d="M353,-252C353,-252 273,-252 273,-252 267,-252 261,-246 261,-240 261,-240 261,-228 261,-228 261,-222 267,-216 273,-216 273,-216 353,-216 353,-216 359,-216 365,-222 365,-228 365,-228 365,-240 365,-240 365,-246 359,-252 353,-252"/>
+<text text-anchor="middle" x="313" y="-231.5" font-family="sans" font-size="10.00">create_index_star</text>
+</g>
+<!-- 15&#45;&gt;9 -->
+<g id="edge19" class="edge">
+<title>15&#45;&gt;9</title>
+<path fill="none" stroke="grey" stroke-width="2" d="M297.43,-215.7C289.8,-207.22 280.48,-196.86 272.12,-187.58"/>
+<polygon fill="grey" stroke="grey" stroke-width="2" points="274.69,-185.2 265.39,-180.1 269.48,-189.88 274.69,-185.2"/>
+</g>
+<!-- 15&#45;&gt;10 -->
+<g id="edge21" class="edge">
+<title>15&#45;&gt;10</title>
+<path fill="none" stroke="grey" stroke-width="2" d="M330.55,-215.7C339.23,-207.14 349.86,-196.66 359.35,-187.3"/>
+<polygon fill="grey" stroke="grey" stroke-width="2" points="361.99,-189.62 366.65,-180.1 357.07,-184.63 361.99,-189.62"/>
+</g>
+<!-- 16 -->
+<g id="node17" class="node">
+<title>16</title>
+<path fill="none" stroke="#70d856" stroke-width="2" d="M535.5,-324C535.5,-324 392.5,-324 392.5,-324 386.5,-324 380.5,-318 380.5,-312 380.5,-312 380.5,-300 380.5,-300 380.5,-294 386.5,-288 392.5,-288 392.5,-288 535.5,-288 535.5,-288 541.5,-288 547.5,-294 547.5,-300 547.5,-300 547.5,-312 547.5,-312 547.5,-318 541.5,-324 535.5,-324"/>
+<text text-anchor="middle" x="464" y="-303.5" font-family="sans" font-size="10.00">pe_remove_adapters_cutadapt</text>
+</g>
+<!-- 16&#45;&gt;11 -->
+<g id="edge23" class="edge">
+<title>16&#45;&gt;11</title>
+<path fill="none" stroke="grey" stroke-width="2" d="M464,-287.7C464,-279.98 464,-270.71 464,-262.11"/>
+<polygon fill="grey" stroke="grey" stroke-width="2" points="467.5,-262.1 464,-252.1 460.5,-262.1 467.5,-262.1"/>
+</g>
+<!-- 17 -->
+<g id="node18" class="node">
+<title>17</title>
+<path fill="none" stroke="#56d8a9" stroke-width="2" d="M828,-324C828,-324 702,-324 702,-324 696,-324 690,-318 690,-312 690,-312 690,-300 690,-300 690,-294 696,-288 702,-288 702,-288 828,-288 828,-288 834,-288 840,-294 840,-300 840,-300 840,-312 840,-312 840,-318 834,-324 828,-324"/>
+<text text-anchor="middle" x="765" y="-303.5" font-family="sans" font-size="10.00">remove_adapters_cutadapt</text>
+</g>
+<!-- 17&#45;&gt;13 -->
+<g id="edge24" class="edge">
+<title>17&#45;&gt;13</title>
+<path fill="none" stroke="grey" stroke-width="2" d="M765,-287.7C765,-279.98 765,-270.71 765,-262.11"/>
+<polygon fill="grey" stroke="grey" stroke-width="2" points="768.5,-262.1 765,-252.1 761.5,-262.1 768.5,-262.1"/>
+</g>
+</g>
+</svg>
diff --git a/tests/test_create_dag_chart/config.yaml b/tests/test_create_dag_image/config.yaml
similarity index 100%
rename from tests/test_create_dag_chart/config.yaml
rename to tests/test_create_dag_image/config.yaml
diff --git a/tests/test_create_dag_chart/input_files/chr1-10000-20000.fa b/tests/test_create_dag_image/input_files/chr1-10000-20000.fa
similarity index 100%
rename from tests/test_create_dag_chart/input_files/chr1-10000-20000.fa
rename to tests/test_create_dag_image/input_files/chr1-10000-20000.fa
diff --git a/tests/test_create_dag_chart/input_files/chr1-10000-20000.gtf b/tests/test_create_dag_image/input_files/chr1-10000-20000.gtf
similarity index 100%
rename from tests/test_create_dag_chart/input_files/chr1-10000-20000.gtf
rename to tests/test_create_dag_image/input_files/chr1-10000-20000.gtf
diff --git a/tests/test_create_dag_chart/input_files/chr1-10000-20000.transcripts.fa b/tests/test_create_dag_image/input_files/chr1-10000-20000.transcripts.fa
similarity index 100%
rename from tests/test_create_dag_chart/input_files/chr1-10000-20000.transcripts.fa
rename to tests/test_create_dag_image/input_files/chr1-10000-20000.transcripts.fa
diff --git a/tests/test_create_dag_chart/input_files/synthetic.mate_1.fastq.gz b/tests/test_create_dag_image/input_files/synthetic.mate_1.fastq.gz
similarity index 100%
rename from tests/test_create_dag_chart/input_files/synthetic.mate_1.fastq.gz
rename to tests/test_create_dag_image/input_files/synthetic.mate_1.fastq.gz
diff --git a/tests/test_create_dag_chart/input_files/synthetic.mate_2.fastq.gz b/tests/test_create_dag_image/input_files/synthetic.mate_2.fastq.gz
similarity index 100%
rename from tests/test_create_dag_chart/input_files/synthetic.mate_2.fastq.gz
rename to tests/test_create_dag_image/input_files/synthetic.mate_2.fastq.gz
diff --git a/tests/test_create_dag_chart/samples.tsv b/tests/test_create_dag_image/samples.tsv
similarity index 100%
rename from tests/test_create_dag_chart/samples.tsv
rename to tests/test_create_dag_image/samples.tsv
diff --git a/tests/test_create_dag_chart/test.sh b/tests/test_create_dag_image/test.sh
similarity index 92%
rename from tests/test_create_dag_chart/test.sh
rename to tests/test_create_dag_image/test.sh
index 5ae27d0..6043d63 100755
--- a/tests/test_create_dag_chart/test.sh
+++ b/tests/test_create_dag_image/test.sh
@@ -18,5 +18,5 @@ snakemake \
     --dag \
     --printshellcmds \
     --dryrun \
-    | dot -Tsvg > "../../images/workflow_dag.svg"
+    | dot -Tsvg > "../../images/dag_test_workflow.svg"
 
diff --git a/tests/test_rule_graph/config.yaml b/tests/test_rule_graph/config.yaml
new file mode 100644
index 0000000..e1d111b
--- /dev/null
+++ b/tests/test_rule_graph/config.yaml
@@ -0,0 +1,29 @@
+---
+  ##############################################################################
+  ### Annotation
+  ##############################################################################
+  organism: "Homo_sapiens"
+  annotation: "../prepare_annotation/results/annotation.gtf"
+  genome: "../prepare_annotation/results/genome.fa"
+  annotation_filtered: "../prepare_annotation/results/filtered_transcripts.gtf"
+  STAR_index: "../prepare_annotation/results/STAR_index/"
+  other_RNAs_sequence: "../prepare_annotation/other.fa"
+  other_RNAs_index: "../prepare_annotation/results/other_RNAs_sequence.idx"
+  salmon_index: "../prepare_annotation/results/filtered_transcripts_salmon.idx/"
+  ##############################################################################
+  ### Output and log directories
+  ##############################################################################
+  database_path: "/some/path"
+  STAR_idx_folder: "STAR_indices"
+  output_dir: "results"
+  star_indexes: "results"
+  salmon_indexes: "results"
+  kallisto_indexes: "results"
+  local_log: "logs/local_log"
+  cluster_log: "logs/cluster_log"
+  
+  ##############################################################################
+  ### Sample info
+  ##############################################################################
+  samples: "samples.tsv"
+...
diff --git a/tests/test_rule_graph/input_files/chr1-10000-20000.fa b/tests/test_rule_graph/input_files/chr1-10000-20000.fa
new file mode 100644
index 0000000..7c6b040
--- /dev/null
+++ b/tests/test_rule_graph/input_files/chr1-10000-20000.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/test_rule_graph/input_files/chr1-10000-20000.gtf b/tests/test_rule_graph/input_files/chr1-10000-20000.gtf
new file mode 100644
index 0000000..e41d542
--- /dev/null
+++ b/tests/test_rule_graph/input_files/chr1-10000-20000.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/test_rule_graph/input_files/chr1-10000-20000.transcripts.fa b/tests/test_rule_graph/input_files/chr1-10000-20000.transcripts.fa
new file mode 100644
index 0000000..a55426c
--- /dev/null
+++ b/tests/test_rule_graph/input_files/chr1-10000-20000.transcripts.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/test_rule_graph/input_files/synthetic.mate_1.fastq.gz b/tests/test_rule_graph/input_files/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/test_rule_graph/input_files/synthetic.mate_2.fastq.gz b/tests/test_rule_graph/input_files/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/test_rule_graph/samples.tsv b/tests/test_rule_graph/samples.tsv
new file mode 100644
index 0000000..3793d81
--- /dev/null
+++ b/tests/test_rule_graph/samples.tsv
@@ -0,0 +1,3 @@
+sample	fq1	fq2	fq1_3p	fq1_5p	fq2_3p	fq2_5p	fq1_polya	fq2_polya	organism	index_size	multimappers	soft_clip	pass_mode	gtf_filtered	libtype	kallisto_directionality	mean	sd	genome	gtf	tr_fasta_filtered	kmer	seqmode
+synthetic_10_reads_paired	input_files/synthetic.mate_1.fastq.gz	input_files/synthetic.mate_2.fastq.gz	AGATCGGAAGAGCACA	XXXXXXXX	AGATCGGAAGAGCGT	XXXXXXXX	AAAAAAAAAAAAAAAAAAAA	TTTTTTTTTTTTTTTTTTT	homo_sapiens	76	10	Local	Basic	input_files/chr1-10000-20000.gtf	A	--fr	250	100	input_files/chr1-10000-20000.fa	input_files/chr1-10000-20000.gtf	input_files/chr1-10000-20000.transcripts.fa	31	paired_end
+synthetic_10_reads_mate_1	input_files/synthetic.mate_1.fastq.gz		AGATCGGAAGAGCACA	XXXXXXXX			AAAAAAAAAAAAAAAAAAAA		homo_sapiens	76	10	Local	Basic	input_files/chr1-10000-20000.gtf	A	--fr	250	100	input_files/chr1-10000-20000.fa	input_files/chr1-10000-20000.gtf	input_files/chr1-10000-20000.transcripts.fa	31	single_end
diff --git a/tests/test_rule_graph/test.sh b/tests/test_rule_graph/test.sh
new file mode 100755
index 0000000..d68df4f
--- /dev/null
+++ b/tests/test_rule_graph/test.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+# Tear down test environment
+trap '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
+set -x  # facilitates debugging by printing out executed commands
+user_dir=$PWD
+script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
+cd $script_dir
+
+# Run tests
+snakemake \
+    --snakefile="../../snakemake/Snakefile" \
+    --configfile="config.yaml" \
+    --rulegraph \
+    --printshellcmds \
+    --dryrun \
+    | dot -Tsvg > "../../images/rule_graph.svg"
+
-- 
GitLab