changeset 1:f193fef5b19d draft

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/cojac commit 5b54fc7af13196445abda407054e01dd3e5603c6
author iuc
date Mon, 31 Jul 2023 15:23:17 +0000
parents d04ea6b052c5
children 0349d8981030
files cooc_pubmut.xml macros.xml test-data/ampl_info.tsv test-data/bed_cojac.bed test-data/primers.bed
diffstat 5 files changed, 516 insertions(+), 64 deletions(-) [+]
line wrap: on
line diff
--- a/cooc_pubmut.xml	Thu Aug 11 13:49:40 2022 +0000
+++ b/cooc_pubmut.xml	Mon Jul 31 15:23:17 2023 +0000
@@ -1,69 +1,131 @@
 <tool id="cooc_pubmut" name="Cojac: pubmut" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@"
       profile="@PROFILE@">
     <description>
-        render a JSON or YAML file to a pretty table
+        pretty-prints cojac mutbamscan co-occurrence results
     </description>
     <macros>
         <import>macros.xml</import>
     </macros>
     <expand macro="biotools"/>
     <expand macro="requirements">
-        <requirement type="package" version="2.12">pandoc</requirement>
+        <requirement type="package" version="3.1.3">pandoc</requirement>
+        <requirement type="package" version="6.2.1">gmp</requirement>
     </expand>
     <expand macro="version"/>
     <command detect_errors="exit_code"><![CDATA[
-@VOCDIR_COMMAND@
-#for $input_file in $cooc_file
-    #set $cooc_ext = $input_file.ext
-#end for
-cooc-pubmut
-    -m '$vocdir'
-    -a '$amplicons'
-    #if $cooc_ext == 'json'
-        -j '$cooc_file'
-    #else if $cooc_ext == 'yaml'
-        -y '$cooc_file'
+#if $annotations.availability == 'full':
+  #set $voc_config = $annotations.voc_source
+  @VOCDIR_COMMAND@
+#end if
+cojac cooc-pubmut
+    #if $annotations.availability == 'full':
+      -m voc/
+    #end if
+    #if $annotations.availability != 'none':
+      -a '$annotations.in_amp'
     #end if
-    -o cooc-table.csv
+    #if $cooc_data.ext == 'json':
+      -j '$cooc_data'
+    #else
+      -y '$cooc_data'
+    #end if
     -q
-    $escape
-    #if $add_html
+    #if $out_opts.format == 'tsv':
+      -o cooc-table.tsv
+    #else:
+      -o cooc-table.csv
+      #if $out_opts.format == 'html':
         && pandoc cooc-table.csv -o cooc-table.html
-        && mkdir -p '$html.files_path'
-        && cp cooc-table.html '$html.files_path'
+      #end if
     #end if
     ]]></command>
     <inputs>
-        <expand macro="vocdir_input"/>
-        <param name="amplicons" type="data" format="yaml" label="List of query amplicons"
-               help="File generated by the Cojac mutbamscan tool"/>
-        <param name="cooc_file" type="data" format="json,yaml" multiple="true"
-               label="Results generated by mutbamscan"/>
-        <param argument="--escape" type="boolean" truevalue="--escape" falsevalue=""
-               checked="false" label="Use escape characters for newlines"/>
-        <param name="add_html" type="boolean" checked="false"
-               label="Convert CSV output table to HTML format"/>
+        <param name="cooc_data" type="data" format="json,yaml" label="Co-occurrence results generated by mutbamscan"
+        help="The tool can work with json- or yaml-formatted output of cojac mutbamscan."/>
+        <conditional name="annotations">
+            <param name="availability" type="select" label="Available amplicon and lineage annotations"
+            help="For best readability of its report the tool requires a per-lineage amplicon info dataset (in yaml format) produced by the mutbamscan tool and the original lineage definitions. If all you have is the per-lineage amplicon info, you can use it to obtain a nearly identical report, but cojac-internal lineage identifiers won't be translated into standard lineage names. With no available annotations a limited report can still be generated, but this is not recommended.">
+                <option value="full">per-lineage amplicon info and original lineage definitions</option>
+                <option value="amplicon">per-lineage amplicon info only</option>
+                <option value="none">no annotations</option>
+            </param>
+            <when value="full">
+                <param name="in_amp" type="data" format="yaml" label="Combined cojac per-amplicon lineage definitions"/>
+                <expand macro="vocdir_input"/>
+            </when>
+            <when value="amplicon">
+                <param name="in_amp" type="data" format="yaml" label="Combined per-amplicon lineage definitions"/>
+            </when>
+            <when value="none" />
+        </conditional>
+        <section name="out_opts" title="Output formatting" expanded="true">
+            <param name="format" type="select" label="Type of output to produce">
+                <option value="tsv">Tab-separated (TSV)</option>
+                <option value="csv">Comma-separated (CSV)</option>
+                <option value="html">HTML (for display in browsers)</option>
+            </param>
+        </section>
     </inputs>
     <outputs>
-        <data name="table" format="csv"
-              label="${tool.name} on ${on_string}: Mutation cooccurrence (CSV table)"
-              from_work_dir="cooc-table.csv">
+        <data name="table_tsv" format="tsv" label="${tool.name} on ${on_string}: Mutation co-occurrence (TSV table)" from_work_dir="cooc-table.tsv">
+            <filter>out_opts['format'] == 'tsv'</filter>
         </data>
-        <data name="html" format="html"
-              label="${tool.name} on ${on_string}: Mutation cooccurrence (HTML)"
-              from_work_dir="cooc-table.html">
-            <filter>add_html</filter>
+        <data name="table_csv" format="csv" label="${tool.name} on ${on_string}: Mutation co-occurrence (CSV table)" from_work_dir="cooc-table.csv">
+            <filter>out_opts['format'] == 'csv'</filter>
+        </data>
+        <data name="table_html" format="html" label="${tool.name} on ${on_string}: Mutation co-occurrence (HTML)" from_work_dir="cooc-table.html">
+            <filter>out_opts['format'] == 'html'</filter>
         </data>
     </outputs>
     <tests>
         <test expect_num_outputs="1">
-            <conditional name="vocdir_option">
-                <param name="choice" value="custom"/>
-                <param name="voc_file" value="omicron_ba1_mutations.yaml"/>
+            <param name="cooc_data" value="cooc-test111.json"/>
+            <conditional name="annotations">
+                <conditional name="vocdir_option">
+                    <param name="choice" value="custom"/>
+                    <param name="voc_file" value="omicron_ba1_mutations.yaml"/>
+                </conditional>
+                <param name="in_amp" value="amplicons111.yaml"/>
+            </conditional>
+            <output name="table_tsv" ftype="tsv">
+                <assert_contents>
+                    <has_text text="Amplicon 76"/>
+                    <has_text text="Amplicon 81"/>
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="1">
+            <param name="cooc_data" value="cooc-test111.json"/>
+            <conditional name="annotations">
+                <conditional name="vocdir_option">
+                    <param name="choice" value="custom"/>
+                    <param name="voc_file" value="omicron_ba1_mutations.yaml"/>
+                </conditional>
+                <param name="in_amp" value="amplicons111.yaml"/>
             </conditional>
-            <param name="amplicons" value="amplicons111.yaml"/>
-            <param name="cooc_file" value="cooc-test111.json"/>
-            <output name="table" ftype="csv">
+            <section name="out_opts">
+                <param name="format" value="csv"/>
+            </section>
+            <output name="table_csv" ftype="csv">
+                <assert_contents>
+                    <has_text text="Amplicon 76"/>
+                    <has_text text="Amplicon 81"/>
+                </assert_contents>
+            </output>
+        </test>
+        <test expect_num_outputs="1">
+            <param name="cooc_data" value="cooc-test111.json"/>
+            <conditional name="annotations">
+                <conditional name="vocdir_option">
+                    <param name="choice" value="custom"/>
+                    <param name="voc_file" value="omicron_ba1_mutations.yaml"/>
+                </conditional>
+                <param name="in_amp" value="amplicons111.yaml"/>
+            </conditional>
+            <section name="out_opts">
+                <param name="format" value="html"/>
+            </section>
+            <output name="table_html" ftype="html">
                 <assert_contents>
                     <has_text text="Amplicon 76"/>
                     <has_text text="Amplicon 81"/>
@@ -74,12 +136,12 @@
     <help><![CDATA[
 @HELP_HEADER@
 
-Information about **cooc-pubmut** method
-========================================
+Information about **cojac cooc-pubmut**
+=======================================
 
-The method renders a JSON or YAML file to a table as in the publication.
-You need to open the output CSV in a spreadsheet that understands linebreaks.
+The tool pretty-prints json or yaml output of cojac cooc-mutbamscan.
 
+Hint: The output (unless you select html format) is best viewed in spreadsheet software that understands linebreaks.
     ]]></help>
     <expand macro="citations"/>
 </tool>
--- a/macros.xml	Thu Aug 11 13:49:40 2022 +0000
+++ b/macros.xml	Mon Jul 31 15:23:17 2023 +0000
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <macros>
-    <token name="@TOOL_VERSION@">0.2</token>
+    <token name="@TOOL_VERSION@">0.9</token>
     <token name="@VERSION_SUFFIX@">0</token>
     <token name="@PROFILE@">21.01</token>
     <xml name="biotools">
@@ -18,34 +18,28 @@
         <version_command>echo @TOOL_VERSION@</version_command>
     </xml>
     <xml name="vocdir_input">
-        <conditional name="vocdir_option">
+        <conditional name="voc_source">
             <param name="choice" type="select"
-                   label="Source of YAML files with definition of the variant of concerns"
-                   help="Cojac ships with a directory with variant definitions yaml files (https://github.com/cbg-ethz/cojac/tree/master/voc), which the tool can access internally. You can also download the latest version of the yaml files from https://github.com/phe-genomics/variant_definitions and use it as a custom yamls defining the variant of concerns.">
-                <option value="cache">Definitions shipped with the tool (can be outdated)</option>
-                <option value="custom">From history</option>
+                   label="Source of lineage definitions"
+                   help="Cojac detects lineage evidence based on lineage mutation patterns deined in tool-specific yaml format. You can choose between the (possibly outdated) definitions shipped with the tool or definitions provided as a collection of yaml datasets in your history. See the tool help below for more details.">
+                <option value="builtin">Lineage definitions shipped with the tool</option>
+                <option value="custom">YAML dataset collection in history</option>
             </param>
-            <when value="cache"/>
+            <when value="builtin"/>
             <when value="custom">
-                <param name="voc_file" type="data" format="yaml" multiple="true"
-                       label="YAML defining the variant of concern"/>
+                <param name="collection" type="data_collection" collection_type="list" format="yaml" label="Collection of lineage definitions" />
             </when>
         </conditional>
     </xml>
     <token name="@VOCDIR_COMMAND@"><![CDATA[
-#if $vocdir_option.choice == 'custom'
-    #set vocdir = 'voc/'
-    #set file_paths1 = []
+#if $voc_config.choice == 'custom'
     mkdir -p voc &&
-    #for $input_file in $voc_file
-        #set $file_path = $vocdir + $input_file.element_identifier
-        ln -s '$input_file' '$file_path' &&
-        $file_paths1.append($file_path)
+    #for $input_file in $voc_config.collection
+        ln -s '$input_file' 'voc/$input_file.element_identifier' &&
     #end for
 #else
-    DB_PATH="\$(dirname "\$(dirname "\$(which cooc-mutbamscan)")")/share/cojac" &&
-    ln -s "\$DB_PATH" db &&
-    #set $vocdir = 'db/voc'
+    DB_PATH="\$(dirname "\$(dirname "\$(which cojac)")")/share/cojac/voc" &&
+    ln -s "\$DB_PATH" voc &&
 #end if
 ]]></token>
     <token name="@HELP_HEADER@"><![CDATA[
@@ -59,4 +53,4 @@
             <citation type="doi">10.1101/2021.01.08.21249379</citation>
         </citations>
     </xml>
-</macros>
\ No newline at end of file
+</macros>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/ampl_info.tsv	Mon Jul 31 15:23:17 2023 +0000
@@ -0,0 +1,99 @@
+SARS-CoV-2_1_LEFT	SARS-CoV-2_1_RIGHT
+SARS-CoV-2_2_LEFT	SARS-CoV-2_2_RIGHT
+SARS-CoV-2_3_LEFT	SARS-CoV-2_3_RIGHT
+SARS-CoV-2_4_LEFT	SARS-CoV-2_4_RIGHT
+SARS-CoV-2_5_LEFT	SARS-CoV-2_5_RIGHT
+SARS-CoV-2_6_LEFT	SARS-CoV-2_6_RIGHT
+SARS-CoV-2_7_LEFT	SARS-CoV-2_7_RIGHT
+SARS-CoV-2_8_LEFT	SARS-CoV-2_8_RIGHT
+SARS-CoV-2_9_LEFT	SARS-CoV-2_9_RIGHT
+SARS-CoV-2_10_LEFT	SARS-CoV-2_10_RIGHT
+SARS-CoV-2_11_LEFT	SARS-CoV-2_11_RIGHT
+SARS-CoV-2_12_LEFT	SARS-CoV-2_12_RIGHT
+SARS-CoV-2_13_LEFT	SARS-CoV-2_13_RIGHT
+SARS-CoV-2_14_LEFT	SARS-CoV-2_14_RIGHT
+SARS-CoV-2_15_LEFT	SARS-CoV-2_15_RIGHT
+SARS-CoV-2_16_LEFT	SARS-CoV-2_16_RIGHT
+SARS-CoV-2_17_LEFT	SARS-CoV-2_17_RIGHT
+SARS-CoV-2_18_LEFT	SARS-CoV-2_18_RIGHT
+SARS-CoV-2_19_LEFT	SARS-CoV-2_19_RIGHT
+SARS-CoV-2_20_LEFT	SARS-CoV-2_20_RIGHT
+SARS-CoV-2_21_LEFT	SARS-CoV-2_21_RIGHT
+SARS-CoV-2_22_LEFT	SARS-CoV-2_22_RIGHT
+SARS-CoV-2_23_LEFT	SARS-CoV-2_23_RIGHT
+SARS-CoV-2_24_LEFT	SARS-CoV-2_24_RIGHT
+SARS-CoV-2_25_LEFT	SARS-CoV-2_25_RIGHT
+SARS-CoV-2_26_LEFT	SARS-CoV-2_26_RIGHT
+SARS-CoV-2_27_LEFT	SARS-CoV-2_27_RIGHT
+SARS-CoV-2_28_LEFT	SARS-CoV-2_28_RIGHT
+SARS-CoV-2_29_LEFT	SARS-CoV-2_29_RIGHT
+SARS-CoV-2_30_LEFT	SARS-CoV-2_30_RIGHT
+SARS-CoV-2_31_LEFT	SARS-CoV-2_31_RIGHT
+SARS-CoV-2_32_LEFT	SARS-CoV-2_32_RIGHT
+SARS-CoV-2_33_LEFT	SARS-CoV-2_33_RIGHT
+SARS-CoV-2_34_LEFT	SARS-CoV-2_34_RIGHT
+SARS-CoV-2_35_LEFT	SARS-CoV-2_35_RIGHT
+SARS-CoV-2_36_LEFT	SARS-CoV-2_36_RIGHT
+SARS-CoV-2_37_LEFT	SARS-CoV-2_37_RIGHT
+SARS-CoV-2_38_LEFT	SARS-CoV-2_38_RIGHT
+SARS-CoV-2_39_LEFT	SARS-CoV-2_39_RIGHT
+SARS-CoV-2_40_LEFT	SARS-CoV-2_40_RIGHT
+SARS-CoV-2_41_LEFT	SARS-CoV-2_41_RIGHT
+SARS-CoV-2_42_LEFT	SARS-CoV-2_42_RIGHT
+SARS-CoV-2_43_LEFT	SARS-CoV-2_43_RIGHT
+SARS-CoV-2_44_LEFT	SARS-CoV-2_44_RIGHT
+SARS-CoV-2_45_LEFT	SARS-CoV-2_45_RIGHT
+SARS-CoV-2_46_LEFT	SARS-CoV-2_46_RIGHT
+SARS-CoV-2_47_LEFT	SARS-CoV-2_47_RIGHT
+SARS-CoV-2_48_LEFT	SARS-CoV-2_48_RIGHT
+SARS-CoV-2_49_LEFT	SARS-CoV-2_49_RIGHT
+SARS-CoV-2_50_LEFT	SARS-CoV-2_50_RIGHT
+SARS-CoV-2_51_LEFT	SARS-CoV-2_51_RIGHT
+SARS-CoV-2_52_LEFT	SARS-CoV-2_52_RIGHT
+SARS-CoV-2_53_LEFT	SARS-CoV-2_53_RIGHT
+SARS-CoV-2_54_LEFT	SARS-CoV-2_54_RIGHT
+SARS-CoV-2_55_LEFT	SARS-CoV-2_55_RIGHT
+SARS-CoV-2_56_LEFT	SARS-CoV-2_56_RIGHT
+SARS-CoV-2_57_LEFT	SARS-CoV-2_57_RIGHT
+SARS-CoV-2_58_LEFT	SARS-CoV-2_58_RIGHT
+SARS-CoV-2_59_LEFT	SARS-CoV-2_59_RIGHT
+SARS-CoV-2_60_LEFT	SARS-CoV-2_60_RIGHT
+SARS-CoV-2_61_LEFT	SARS-CoV-2_61_RIGHT
+SARS-CoV-2_62_LEFT	SARS-CoV-2_62_RIGHT
+SARS-CoV-2_63_LEFT	SARS-CoV-2_63_RIGHT
+SARS-CoV-2_64_LEFT	SARS-CoV-2_64_RIGHT
+SARS-CoV-2_65_LEFT	SARS-CoV-2_65_RIGHT
+SARS-CoV-2_66_LEFT	SARS-CoV-2_66_RIGHT
+SARS-CoV-2_67_LEFT	SARS-CoV-2_67_RIGHT
+SARS-CoV-2_68_LEFT	SARS-CoV-2_68_RIGHT
+SARS-CoV-2_69_LEFT	SARS-CoV-2_69_RIGHT
+SARS-CoV-2_70_LEFT	SARS-CoV-2_70_RIGHT
+SARS-CoV-2_71_LEFT	SARS-CoV-2_71_RIGHT
+SARS-CoV-2_72_LEFT	SARS-CoV-2_72_RIGHT
+SARS-CoV-2_73_LEFT	SARS-CoV-2_73_RIGHT
+SARS-CoV-2_74_LEFT	SARS-CoV-2_74_RIGHT
+SARS-CoV-2_75_LEFT	SARS-CoV-2_75_RIGHT
+SARS-CoV-2_76_LEFT	SARS-CoV-2_76_RIGHT
+SARS-CoV-2_77_LEFT	SARS-CoV-2_77_RIGHT
+SARS-CoV-2_78_LEFT	SARS-CoV-2_78_RIGHT
+SARS-CoV-2_79_LEFT	SARS-CoV-2_79_RIGHT
+SARS-CoV-2_80_LEFT	SARS-CoV-2_80_RIGHT
+SARS-CoV-2_81_LEFT	SARS-CoV-2_81_RIGHT
+SARS-CoV-2_82_LEFT	SARS-CoV-2_82_RIGHT
+SARS-CoV-2_83_LEFT	SARS-CoV-2_83_RIGHT
+SARS-CoV-2_84_LEFT	SARS-CoV-2_84_RIGHT
+SARS-CoV-2_85_LEFT	SARS-CoV-2_85_RIGHT
+SARS-CoV-2_86_LEFT	SARS-CoV-2_86_RIGHT
+SARS-CoV-2_87_LEFT	SARS-CoV-2_87_RIGHT
+SARS-CoV-2_88_LEFT	SARS-CoV-2_88_RIGHT
+SARS-CoV-2_89_LEFT	SARS-CoV-2_89_RIGHT
+SARS-CoV-2_90_LEFT	SARS-CoV-2_90_RIGHT
+SARS-CoV-2_91_LEFT	SARS-CoV-2_91_RIGHT
+SARS-CoV-2_92_LEFT	SARS-CoV-2_92_RIGHT
+SARS-CoV-2_93_LEFT	SARS-CoV-2_93_RIGHT
+SARS-CoV-2_94_LEFT	SARS-CoV-2_94_RIGHT
+SARS-CoV-2_95_LEFT	SARS-CoV-2_95_RIGHT
+SARS-CoV-2_96_LEFT	SARS-CoV-2_96_RIGHT
+SARS-CoV-2_97_LEFT	SARS-CoV-2_97_RIGHT
+SARS-CoV-2_98_LEFT	SARS-CoV-2_98_RIGHT
+SARS-CoV-2_99_LEFT	SARS-CoV-2_99_RIGHT
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bed_cojac.bed	Mon Jul 31 15:23:17 2023 +0000
@@ -0,0 +1,99 @@
+MN908947.3	50	408	SARS-CoV-2_INSERT_1	1	+
+MN908947.3	344	705	SARS-CoV-2_INSERT_2	2	+
+MN908947.3	666	1017	SARS-CoV-2_INSERT_3	1	+
+MN908947.3	966	1337	SARS-CoV-2_INSERT_4	2	+
+MN908947.3	1266	1623	SARS-CoV-2_INSERT_5	1	+
+MN908947.3	1562	1925	SARS-CoV-2_INSERT_6	2	+
+MN908947.3	1875	2228	SARS-CoV-2_INSERT_7	1	+
+MN908947.3	2180	2544	SARS-CoV-2_INSERT_8	2	+
+MN908947.3	2508	2861	SARS-CoV-2_INSERT_9	1	+
+MN908947.3	2850	3183	SARS-CoV-2_INSERT_10	2	+
+MN908947.3	3102	3470	SARS-CoV-2_INSERT_11	1	+
+MN908947.3	3412	3769	SARS-CoV-2_INSERT_12	2	+
+MN908947.3	3705	4067	SARS-CoV-2_INSERT_13	1	+
+MN908947.3	4018	4387	SARS-CoV-2_INSERT_14	2	+
+MN908947.3	4339	4685	SARS-CoV-2_INSERT_15	1	+
+MN908947.3	4648	4995	SARS-CoV-2_INSERT_16	2	+
+MN908947.3	4953	5302	SARS-CoV-2_INSERT_17	1	+
+MN908947.3	5259	5620	SARS-CoV-2_INSERT_18	2	+
+MN908947.3	5584	5932	SARS-CoV-2_INSERT_19	1	+
+MN908947.3	5894	6247	SARS-CoV-2_INSERT_20	2	+
+MN908947.3	6210	6553	SARS-CoV-2_INSERT_21	1	+
+MN908947.3	6507	6859	SARS-CoV-2_INSERT_22	2	+
+MN908947.3	6776	7122	SARS-CoV-2_INSERT_23	1	+
+MN908947.3	7084	7440	SARS-CoV-2_INSERT_24	2	+
+MN908947.3	7403	7747	SARS-CoV-2_INSERT_25	1	+
+MN908947.3	7695	8063	SARS-CoV-2_INSERT_26	2	+
+MN908947.3	8019	8370	SARS-CoV-2_INSERT_27	1	+
+MN908947.3	8326	8691	SARS-CoV-2_INSERT_28	2	+
+MN908947.3	8619	8990	SARS-CoV-2_INSERT_29	1	+
+MN908947.3	8944	9306	SARS-CoV-2_INSERT_30	2	+
+MN908947.3	9192	9535	SARS-CoV-2_INSERT_31	1	+
+MN908947.3	9497	9842	SARS-CoV-2_INSERT_32	2	+
+MN908947.3	9805	10150	SARS-CoV-2_INSERT_33	1	+
+MN908947.3	10099	10465	SARS-CoV-2_INSERT_34	2	+
+MN908947.3	10419	10785	SARS-CoV-2_INSERT_35	1	+
+MN908947.3	10742	11092	SARS-CoV-2_INSERT_36	2	+
+MN908947.3	11023	11388	SARS-CoV-2_INSERT_37	1	+
+MN908947.3	11330	11689	SARS-CoV-2_INSERT_38	2	+
+MN908947.3	11651	12011	SARS-CoV-2_INSERT_39	1	+
+MN908947.3	11963	12317	SARS-CoV-2_INSERT_40	2	+
+MN908947.3	12255	12618	SARS-CoV-2_INSERT_41	1	+
+MN908947.3	12546	12895	SARS-CoV-2_INSERT_42	2	+
+MN908947.3	12856	13218	SARS-CoV-2_INSERT_43	1	+
+MN908947.3	13148	13506	SARS-CoV-2_INSERT_44	2	+
+MN908947.3	13485	13833	SARS-CoV-2_INSERT_45	1	+
+MN908947.3	13775	14120	SARS-CoV-2_INSERT_46	2	+
+MN908947.3	14075	14428	SARS-CoV-2_INSERT_47	1	+
+MN908947.3	14362	14717	SARS-CoV-2_INSERT_48	2	+
+MN908947.3	14674	15023	SARS-CoV-2_INSERT_49	1	+
+MN908947.3	14983	15336	SARS-CoV-2_INSERT_50	2	+
+MN908947.3	15237	15596	SARS-CoV-2_INSERT_51	1	+
+MN908947.3	15557	15917	SARS-CoV-2_INSERT_52	2	+
+MN908947.3	15881	16239	SARS-CoV-2_INSERT_53	1	+
+MN908947.3	16137	16483	SARS-CoV-2_INSERT_54	2	+
+MN908947.3	16408	16767	SARS-CoV-2_INSERT_55	1	+
+MN908947.3	16714	17082	SARS-CoV-2_INSERT_56	2	+
+MN908947.3	17013	17381	SARS-CoV-2_INSERT_57	1	+
+MN908947.3	17345	17688	SARS-CoV-2_INSERT_58	2	+
+MN908947.3	17642	17997	SARS-CoV-2_INSERT_59	1	+
+MN908947.3	17939	18307	SARS-CoV-2_INSERT_60	2	+
+MN908947.3	18267	18624	SARS-CoV-2_INSERT_61	1	+
+MN908947.3	18578	18936	SARS-CoV-2_INSERT_62	2	+
+MN908947.3	18891	19252	SARS-CoV-2_INSERT_63	1	+
+MN908947.3	19208	19558	SARS-CoV-2_INSERT_64	2	+
+MN908947.3	19513	19877	SARS-CoV-2_INSERT_65	1	+
+MN908947.3	19836	20186	SARS-CoV-2_INSERT_66	2	+
+MN908947.3	20117	20472	SARS-CoV-2_INSERT_67	1	+
+MN908947.3	20405	20766	SARS-CoV-2_INSERT_68	2	+
+MN908947.3	20699	21050	SARS-CoV-2_INSERT_69	1	+
+MN908947.3	21013	21358	SARS-CoV-2_INSERT_70	2	+
+MN908947.3	21316	21675	SARS-CoV-2_INSERT_71	1	+
+MN908947.3	21561	21904	SARS-CoV-2_INSERT_72	2	+
+MN908947.3	21889	22247	SARS-CoV-2_INSERT_73	1	+
+MN908947.3	22113	22474	SARS-CoV-2_INSERT_74	2	+
+MN908947.3	22428	22785	SARS-CoV-2_INSERT_75	1	+
+MN908947.3	22677	23028	SARS-CoV-2_INSERT_76	2	+
+MN908947.3	22974	23327	SARS-CoV-2_INSERT_77	1	+
+MN908947.3	23246	23611	SARS-CoV-2_INSERT_78	2	+
+MN908947.3	23575	23927	SARS-CoV-2_INSERT_79	1	+
+MN908947.3	23876	24233	SARS-CoV-2_INSERT_80	2	+
+MN908947.3	24194	24545	SARS-CoV-2_INSERT_81	1	+
+MN908947.3	24448	24814	SARS-CoV-2_INSERT_82	2	+
+MN908947.3	24772	25122	SARS-CoV-2_INSERT_83	1	+
+MN908947.3	25076	25438	SARS-CoV-2_INSERT_84	2	+
+MN908947.3	25353	25711	SARS-CoV-2_INSERT_85	1	+
+MN908947.3	25672	26026	SARS-CoV-2_INSERT_86	2	+
+MN908947.3	25979	26338	SARS-CoV-2_INSERT_87	1	+
+MN908947.3	26277	26635	SARS-CoV-2_INSERT_88	2	+
+MN908947.3	26587	26956	SARS-CoV-2_INSERT_89	1	+
+MN908947.3	26895	27256	SARS-CoV-2_INSERT_90	2	+
+MN908947.3	27177	27534	SARS-CoV-2_INSERT_91	1	+
+MN908947.3	27473	27826	SARS-CoV-2_INSERT_92	2	+
+MN908947.3	27726	28082	SARS-CoV-2_INSERT_93	1	+
+MN908947.3	28021	28394	SARS-CoV-2_INSERT_94	2	+
+MN908947.3	28214	28572	SARS-CoV-2_INSERT_95	1	+
+MN908947.3	28536	28893	SARS-CoV-2_INSERT_96	2	+
+MN908947.3	28849	29206	SARS-CoV-2_INSERT_97	1	+
+MN908947.3	29161	29512	SARS-CoV-2_INSERT_98	2	+
+MN908947.3	29475	29827	SARS-CoV-2_INSERT_99	1	+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/primers.bed	Mon Jul 31 15:23:17 2023 +0000
@@ -0,0 +1,198 @@
+MN908947.3	25	50	SARS-CoV-2_1_LEFT	pool_1	+
+MN908947.3	408	431	SARS-CoV-2_1_RIGHT	pool_1	-
+MN908947.3	324	344	SARS-CoV-2_2_LEFT	pool_2	+
+MN908947.3	705	727	SARS-CoV-2_2_RIGHT	pool_2	-
+MN908947.3	644	666	SARS-CoV-2_3_LEFT	pool_1	+
+MN908947.3	1017	1044	SARS-CoV-2_3_RIGHT	pool_1	-
+MN908947.3	944	966	SARS-CoV-2_4_LEFT	pool_2	+
+MN908947.3	1337	1362	SARS-CoV-2_4_RIGHT	pool_2	-
+MN908947.3	1245	1266	SARS-CoV-2_5_LEFT	pool_1	+
+MN908947.3	1623	1650	SARS-CoV-2_5_RIGHT	pool_1	-
+MN908947.3	1540	1562	SARS-CoV-2_6_LEFT	pool_2	+
+MN908947.3	1925	1948	SARS-CoV-2_6_RIGHT	pool_2	-
+MN908947.3	1851	1875	SARS-CoV-2_7_LEFT	pool_1	+
+MN908947.3	2228	2250	SARS-CoV-2_7_RIGHT	pool_1	-
+MN908947.3	2154	2180	SARS-CoV-2_8_LEFT	pool_2	+
+MN908947.3	2544	2571	SARS-CoV-2_8_RIGHT	pool_2	-
+MN908947.3	2483	2508	SARS-CoV-2_9_LEFT	pool_1	+
+MN908947.3	2861	2885	SARS-CoV-2_9_RIGHT	pool_1	-
+MN908947.3	2826	2850	SARS-CoV-2_10_LEFT	pool_2	+
+MN908947.3	3183	3210	SARS-CoV-2_10_RIGHT	pool_2	-
+MN908947.3	3078	3102	SARS-CoV-2_11_LEFT	pool_1	+
+MN908947.3	3470	3492	SARS-CoV-2_11_RIGHT	pool_1	-
+MN908947.3	3390	3412	SARS-CoV-2_12_LEFT	pool_2	+
+MN908947.3	3769	3794	SARS-CoV-2_12_RIGHT	pool_2	-
+MN908947.3	3683	3705	SARS-CoV-2_13_LEFT	pool_1	+
+MN908947.3	4067	4093	SARS-CoV-2_13_RIGHT	pool_1	-
+MN908947.3	3992	4018	SARS-CoV-2_14_LEFT	pool_2	+
+MN908947.3	4387	4409	SARS-CoV-2_14_RIGHT	pool_2	-
+MN908947.3	4312	4339	SARS-CoV-2_15_LEFT	pool_1	+
+MN908947.3	4685	4710	SARS-CoV-2_15_RIGHT	pool_1	-
+MN908947.3	4620	4648	SARS-CoV-2_16_LEFT	pool_2	+
+MN908947.3	4995	5017	SARS-CoV-2_16_RIGHT	pool_2	-
+MN908947.3	4923	4953	SARS-CoV-2_17_LEFT	pool_1	+
+MN908947.3	5302	5331	SARS-CoV-2_17_RIGHT	pool_1	-
+MN908947.3	5230	5259	SARS-CoV-2_18_LEFT	pool_2	+
+MN908947.3	5620	5643	SARS-CoV-2_18_RIGHT	pool_2	-
+MN908947.3	5561	5584	SARS-CoV-2_19_LEFT	pool_1	+
+MN908947.3	5932	5957	SARS-CoV-2_19_RIGHT	pool_1	-
+MN908947.3	5867	5894	SARS-CoV-2_20_LEFT	pool_2	+
+MN908947.3	6247	6272	SARS-CoV-2_20_RIGHT	pool_2	-
+MN908947.3	6184	6210	SARS-CoV-2_21_LEFT	pool_1	+
+MN908947.3	6553	6582	SARS-CoV-2_21_RIGHT	pool_1	-
+MN908947.3	6478	6507	SARS-CoV-2_22_LEFT	pool_2	+
+MN908947.3	6859	6885	SARS-CoV-2_22_RIGHT	pool_2	-
+MN908947.3	6747	6776	SARS-CoV-2_23_LEFT	pool_1	+
+MN908947.3	7122	7148	SARS-CoV-2_23_RIGHT	pool_1	-
+MN908947.3	7057	7084	SARS-CoV-2_24_LEFT	pool_2	+
+MN908947.3	7440	7467	SARS-CoV-2_24_RIGHT	pool_2	-
+MN908947.3	7381	7403	SARS-CoV-2_25_LEFT	pool_1	+
+MN908947.3	7747	7770	SARS-CoV-2_25_RIGHT	pool_1	-
+MN908947.3	7672	7695	SARS-CoV-2_26_LEFT	pool_2	+
+MN908947.3	8063	8092	SARS-CoV-2_26_RIGHT	pool_2	-
+MN908947.3	7997	8019	SARS-CoV-2_27_LEFT	pool_1	+
+MN908947.3	8370	8395	SARS-CoV-2_27_RIGHT	pool_1	-
+MN908947.3	8304	8326	SARS-CoV-2_28_LEFT	pool_2	+
+MN908947.3	8691	8714	SARS-CoV-2_28_RIGHT	pool_2	-
+MN908947.3	8596	8619	SARS-CoV-2_29_LEFT	pool_1	+
+MN908947.3	8990	9013	SARS-CoV-2_29_RIGHT	pool_1	-
+MN908947.3	8919	8944	SARS-CoV-2_30_LEFT	pool_2	+
+MN908947.3	9306	9329	SARS-CoV-2_30_RIGHT	pool_2	-
+MN908947.3	9168	9192	SARS-CoV-2_31_LEFT	pool_1	+
+MN908947.3	9535	9564	SARS-CoV-2_31_RIGHT	pool_1	-
+MN908947.3	9470	9497	SARS-CoV-2_32_LEFT	pool_2	+
+MN908947.3	9842	9866	SARS-CoV-2_32_RIGHT	pool_2	-
+MN908947.3	9782	9805	SARS-CoV-2_33_LEFT	pool_1	+
+MN908947.3	10150	10176	SARS-CoV-2_33_RIGHT	pool_1	-
+MN908947.3	10076	10099	SARS-CoV-2_34_LEFT	pool_2	+
+MN908947.3	10465	10491	SARS-CoV-2_34_RIGHT	pool_2	-
+MN908947.3	10393	10419	SARS-CoV-2_35_LEFT	pool_1	+
+MN908947.3	10785	10810	SARS-CoV-2_35_RIGHT	pool_1	-
+MN908947.3	10713	10742	SARS-CoV-2_36_LEFT	pool_2	+
+MN908947.3	11092	11116	SARS-CoV-2_36_RIGHT	pool_2	-
+MN908947.3	11000	11023	SARS-CoV-2_37_LEFT	pool_1	+
+MN908947.3	11388	11414	SARS-CoV-2_37_RIGHT	pool_1	-
+MN908947.3	11305	11330	SARS-CoV-2_38_LEFT	pool_2	+
+MN908947.3	11689	11720	SARS-CoV-2_38_RIGHT	pool_2	-
+MN908947.3	11624	11651	SARS-CoV-2_39_LEFT	pool_1	+
+MN908947.3	12011	12033	SARS-CoV-2_39_RIGHT	pool_1	-
+MN908947.3	11937	11963	SARS-CoV-2_40_LEFT	pool_2	+
+MN908947.3	12317	12339	SARS-CoV-2_40_RIGHT	pool_2	-
+MN908947.3	12234	12255	SARS-CoV-2_41_LEFT	pool_1	+
+MN908947.3	12618	12643	SARS-CoV-2_41_RIGHT	pool_1	-
+MN908947.3	12519	12546	SARS-CoV-2_42_LEFT	pool_2	+
+MN908947.3	12895	12920	SARS-CoV-2_42_RIGHT	pool_2	-
+MN908947.3	12831	12856	SARS-CoV-2_43_LEFT	pool_1	+
+MN908947.3	13218	13240	SARS-CoV-2_43_RIGHT	pool_1	-
+MN908947.3	13124	13148	SARS-CoV-2_44_LEFT	pool_2	+
+MN908947.3	13506	13528	SARS-CoV-2_44_RIGHT	pool_2	-
+MN908947.3	13463	13485	SARS-CoV-2_45_LEFT	pool_1	+
+MN908947.3	13833	13859	SARS-CoV-2_45_RIGHT	pool_1	-
+MN908947.3	13752	13775	SARS-CoV-2_46_LEFT	pool_2	+
+MN908947.3	14120	14144	SARS-CoV-2_46_RIGHT	pool_2	-
+MN908947.3	14045	14075	SARS-CoV-2_47_LEFT	pool_1	+
+MN908947.3	14428	14457	SARS-CoV-2_47_RIGHT	pool_1	-
+MN908947.3	14338	14362	SARS-CoV-2_48_LEFT	pool_2	+
+MN908947.3	14717	14743	SARS-CoV-2_48_RIGHT	pool_2	-
+MN908947.3	14647	14674	SARS-CoV-2_49_LEFT	pool_1	+
+MN908947.3	15023	15050	SARS-CoV-2_49_RIGHT	pool_1	-
+MN908947.3	14953	14983	SARS-CoV-2_50_LEFT	pool_2	+
+MN908947.3	15336	15358	SARS-CoV-2_50_RIGHT	pool_2	-
+MN908947.3	15214	15237	SARS-CoV-2_51_LEFT	pool_1	+
+MN908947.3	15596	15619	SARS-CoV-2_51_RIGHT	pool_1	-
+MN908947.3	15535	15557	SARS-CoV-2_52_LEFT	pool_2	+
+MN908947.3	15917	15941	SARS-CoV-2_52_RIGHT	pool_2	-
+MN908947.3	15855	15881	SARS-CoV-2_53_LEFT	pool_1	+
+MN908947.3	16239	16260	SARS-CoV-2_53_RIGHT	pool_1	-
+MN908947.3	16112	16137	SARS-CoV-2_54_LEFT	pool_2	+
+MN908947.3	16483	16508	SARS-CoV-2_54_RIGHT	pool_2	-
+MN908947.3	16386	16408	SARS-CoV-2_55_LEFT	pool_1	+
+MN908947.3	16767	16796	SARS-CoV-2_55_RIGHT	pool_1	-
+MN908947.3	16692	16714	SARS-CoV-2_56_LEFT	pool_2	+
+MN908947.3	17082	17105	SARS-CoV-2_56_RIGHT	pool_2	-
+MN908947.3	16986	17013	SARS-CoV-2_57_LEFT	pool_1	+
+MN908947.3	17381	17405	SARS-CoV-2_57_RIGHT	pool_1	-
+MN908947.3	17323	17345	SARS-CoV-2_58_LEFT	pool_2	+
+MN908947.3	17688	17711	SARS-CoV-2_58_RIGHT	pool_2	-
+MN908947.3	17615	17642	SARS-CoV-2_59_LEFT	pool_1	+
+MN908947.3	17997	18022	SARS-CoV-2_59_RIGHT	pool_1	-
+MN908947.3	17911	17939	SARS-CoV-2_60_LEFT	pool_2	+
+MN908947.3	18307	18328	SARS-CoV-2_60_RIGHT	pool_2	-
+MN908947.3	18244	18267	SARS-CoV-2_61_LEFT	pool_1	+
+MN908947.3	18624	18652	SARS-CoV-2_61_RIGHT	pool_1	-
+MN908947.3	18550	18578	SARS-CoV-2_62_LEFT	pool_2	+
+MN908947.3	18936	18961	SARS-CoV-2_62_RIGHT	pool_2	-
+MN908947.3	18869	18891	SARS-CoV-2_63_LEFT	pool_1	+
+MN908947.3	19252	19277	SARS-CoV-2_63_RIGHT	pool_1	-
+MN908947.3	19183	19208	SARS-CoV-2_64_LEFT	pool_2	+
+MN908947.3	19558	19586	SARS-CoV-2_64_RIGHT	pool_2	-
+MN908947.3	19485	19513	SARS-CoV-2_65_LEFT	pool_1	+
+MN908947.3	19877	19901	SARS-CoV-2_65_RIGHT	pool_1	-
+MN908947.3	19810	19836	SARS-CoV-2_66_LEFT	pool_2	+
+MN908947.3	20186	20216	SARS-CoV-2_66_RIGHT	pool_2	-
+MN908947.3	20090	20117	SARS-CoV-2_67_LEFT	pool_1	+
+MN908947.3	20472	20497	SARS-CoV-2_67_RIGHT	pool_1	-
+MN908947.3	20377	20405	SARS-CoV-2_68_LEFT	pool_2	+
+MN908947.3	20766	20792	SARS-CoV-2_68_RIGHT	pool_2	-
+MN908947.3	20677	20699	SARS-CoV-2_69_LEFT	pool_1	+
+MN908947.3	21050	21080	SARS-CoV-2_69_RIGHT	pool_1	-
+MN908947.3	20988	21013	SARS-CoV-2_70_LEFT	pool_2	+
+MN908947.3	21358	21387	SARS-CoV-2_70_RIGHT	pool_2	-
+MN908947.3	21294	21316	SARS-CoV-2_71_LEFT	pool_1	+
+MN908947.3	21675	21700	SARS-CoV-2_71_RIGHT	pool_1	-
+MN908947.3	21532	21561	SARS-CoV-2_72_LEFT	pool_2	+
+MN908947.3	21904	21933	SARS-CoV-2_72_RIGHT	pool_2	-
+MN908947.3	21865	21889	SARS-CoV-2_73_LEFT	pool_1	+
+MN908947.3	22247	22274	SARS-CoV-2_73_RIGHT	pool_1	-
+MN908947.3	22091	22113	SARS-CoV-2_74_LEFT	pool_2	+
+MN908947.3	22474	22503	SARS-CoV-2_74_RIGHT	pool_2	-
+MN908947.3	22402	22428	SARS-CoV-2_75_LEFT	pool_1	+
+MN908947.3	22785	22805	SARS-CoV-2_75_RIGHT	pool_1	-
+MN908947.3	22648	22677	SARS-CoV-2_76_LEFT	pool_2	+
+MN908947.3	23028	23057	SARS-CoV-2_76_RIGHT	pool_2	-
+MN908947.3	22944	22974	SARS-CoV-2_77_LEFT	pool_1	+
+MN908947.3	23327	23351	SARS-CoV-2_77_RIGHT	pool_1	-
+MN908947.3	23219	23246	SARS-CoV-2_78_LEFT	pool_2	+
+MN908947.3	23611	23635	SARS-CoV-2_78_RIGHT	pool_2	-
+MN908947.3	23553	23575	SARS-CoV-2_79_LEFT	pool_1	+
+MN908947.3	23927	23955	SARS-CoV-2_79_RIGHT	pool_1	-
+MN908947.3	23853	23876	SARS-CoV-2_80_LEFT	pool_2	+
+MN908947.3	24233	24258	SARS-CoV-2_80_RIGHT	pool_2	-
+MN908947.3	24171	24194	SARS-CoV-2_81_LEFT	pool_1	+
+MN908947.3	24545	24567	SARS-CoV-2_81_RIGHT	pool_1	-
+MN908947.3	24426	24448	SARS-CoV-2_82_LEFT	pool_2	+
+MN908947.3	24814	24836	SARS-CoV-2_82_RIGHT	pool_2	-
+MN908947.3	24750	24772	SARS-CoV-2_83_LEFT	pool_1	+
+MN908947.3	25122	25150	SARS-CoV-2_83_RIGHT	pool_1	-
+MN908947.3	25051	25076	SARS-CoV-2_84_LEFT	pool_2	+
+MN908947.3	25438	25461	SARS-CoV-2_84_RIGHT	pool_2	-
+MN908947.3	25331	25353	SARS-CoV-2_85_LEFT	pool_1	+
+MN908947.3	25711	25740	SARS-CoV-2_85_RIGHT	pool_1	-
+MN908947.3	25645	25672	SARS-CoV-2_86_LEFT	pool_2	+
+MN908947.3	26026	26050	SARS-CoV-2_86_RIGHT	pool_2	-
+MN908947.3	25951	25979	SARS-CoV-2_87_LEFT	pool_1	+
+MN908947.3	26338	26360	SARS-CoV-2_87_RIGHT	pool_1	-
+MN908947.3	26255	26277	SARS-CoV-2_88_LEFT	pool_2	+
+MN908947.3	26635	26661	SARS-CoV-2_88_RIGHT	pool_2	-
+MN908947.3	26564	26587	SARS-CoV-2_89_LEFT	pool_1	+
+MN908947.3	26956	26979	SARS-CoV-2_89_RIGHT	pool_1	-
+MN908947.3	26873	26895	SARS-CoV-2_90_LEFT	pool_2	+
+MN908947.3	27256	27283	SARS-CoV-2_90_RIGHT	pool_2	-
+MN908947.3	27152	27177	SARS-CoV-2_91_LEFT	pool_1	+
+MN908947.3	27534	27560	SARS-CoV-2_91_RIGHT	pool_1	-
+MN908947.3	27447	27473	SARS-CoV-2_92_LEFT	pool_2	+
+MN908947.3	27826	27855	SARS-CoV-2_92_RIGHT	pool_2	-
+MN908947.3	27700	27726	SARS-CoV-2_93_LEFT	pool_1	+
+MN908947.3	28082	28104	SARS-CoV-2_93_RIGHT	pool_1	-
+MN908947.3	27996	28021	SARS-CoV-2_94_LEFT	pool_2	+
+MN908947.3	28394	28416	SARS-CoV-2_94_RIGHT	pool_2	-
+MN908947.3	28190	28214	SARS-CoV-2_95_LEFT	pool_1	+
+MN908947.3	28572	28598	SARS-CoV-2_95_RIGHT	pool_1	-
+MN908947.3	28512	28536	SARS-CoV-2_96_LEFT	pool_2	+
+MN908947.3	28893	28914	SARS-CoV-2_96_RIGHT	pool_2	-
+MN908947.3	28827	28849	SARS-CoV-2_97_LEFT	pool_1	+
+MN908947.3	29206	29227	SARS-CoV-2_97_RIGHT	pool_1	-
+MN908947.3	29136	29161	SARS-CoV-2_98_LEFT	pool_2	+
+MN908947.3	29512	29534	SARS-CoV-2_98_RIGHT	pool_2	-
+MN908947.3	29452	29475	SARS-CoV-2_99_LEFT	pool_1	+
+MN908947.3	29827	29854	SARS-CoV-2_99_RIGHT	pool_1	-