├── .github └── ISSUE_TEMPLATE │ ├── bug_report.yml │ ├── config.yml │ ├── feature_request.yml │ └── question.yml ├── .gitignore ├── .gitlab-ci.yml ├── .pre-commit-config.yaml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── bin ├── workflow-glue └── workflow_glue │ ├── __init__.py │ ├── models │ ├── __init__.py │ ├── common.py │ └── custom.py │ ├── report.py │ ├── tests │ ├── __init__.py │ ├── conftest.py │ ├── test_models.py │ ├── test_test.py │ └── wfg_helpers │ │ ├── __init__.py │ │ ├── test_check_sample_sheet.py │ │ └── test_reheader_samstream.py │ ├── util.py │ └── wfg_helpers │ ├── __init__.py │ ├── check_bam_headers_in_dir.py │ ├── check_sample_sheet.py │ ├── check_xam_index.py │ ├── configure_igv.py │ ├── get_max_depth_locus.py │ └── reheader_samstream.py ├── data └── OPTIONAL_FILE ├── docs ├── 01_brief_description.md ├── 02_introduction.md ├── 03_compute_requirements.md ├── 04_install_and_run.md ├── 05_related_protocols.md ├── 06_input_example.md ├── 06_input_parameters.md ├── 07_outputs.md ├── 08_pipeline_overview.md ├── 09_troubleshooting.md ├── 10_FAQ.md └── 11_other.md ├── lib ├── ArgumentParser.groovy ├── CWUtil.groovy ├── NfcoreSchema.groovy ├── NfcoreTemplate.groovy ├── Pinguscript.groovy ├── WorkflowMain.groovy ├── common.nf ├── ingress.nf └── nfcore_external_java_deps.jar ├── main.nf ├── nextflow.config ├── nextflow_schema.json ├── output_definition.json ├── test ├── run_ingress_test.sh ├── test_ingress.py └── util.py └── test_data ├── fastq_ingress ├── README ├── case 15 │ └── reads01 space.fastq ├── case'25 │ └── reads'01.fastq ├── case01 │ ├── garbage.txt │ ├── reads0.fastq │ ├── reads1.fastq │ └── reads2.fastq ├── case02 │ ├── dir01 │ │ ├── garbage.txt │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq │ ├── dir02 │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq │ ├── dir03 │ │ └── reads0.fastq │ └── dir04 │ │ └── garbage.txt ├── case03 │ ├── extra-reads.fastq │ ├── george │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq │ ├── john │ │ ├── reads0.fastq │ │ └── reads1.fastq │ ├── paul │ │ └── reads0.fastq │ └── ringo │ │ └── reads1.fastq ├── case04 │ ├── reads01.fastq │ ├── reads02.fastq.gz │ ├── reads03.fq │ └── reads04.fq.gz ├── case05 │ ├── barcode01 │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq │ ├── barcode02 │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq │ ├── barcode03 │ │ └── reads0.fastq │ └── sample_sheet.csv ├── case06 │ ├── barcode01 │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq │ ├── barcode02 │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq │ ├── barcode03 │ │ └── reads0.fastq │ └── sample_sheet.csv ├── case07 │ ├── barcode01 │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq │ ├── barcode02 │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq │ ├── barcode03 │ │ └── reads0.fastq │ └── sample_sheet.csv ├── case08 │ ├── dir01 │ │ ├── garbage.txt │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq │ ├── dir02 │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq │ ├── dir03 │ │ └── reads0.fastq │ └── unclassified │ │ └── reads0.fastq ├── case09 │ ├── dir01 │ │ ├── garbage.txt │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq │ ├── dir02 │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq │ └── dir03 │ │ ├── garbage │ │ └── garbage.txt │ │ └── reads0.fastq ├── case10 │ ├── dir01 │ │ ├── garbage.txt │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq │ ├── dir02 │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq │ └── dir03 │ │ ├── garbage │ │ ├── garbage.txt │ │ └── reads0.fastq │ │ └── reads0.fastq ├── case11 │ ├── barcode01 │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq │ ├── barcode02 │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq │ ├── barcode03 │ │ └── reads0.fastq │ └── sample_sheet.csv ├── case12 │ ├── barcode01 │ │ └── .gitkeep │ ├── barcode02 │ │ └── .gitkeep │ ├── barcode03 │ │ └── .gitkeep │ └── unclassified │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq ├── case13 │ ├── garbage │ │ └── garbage.txt │ ├── reads01.fastq │ ├── reads02.fastq.gz │ ├── reads03.fq │ └── reads04.fq.gz ├── case14 │ └── reads01 space.fastq ├── case16 │ ├── barcode01 │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq │ ├── barcode02 │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq │ ├── barcode03 │ │ └── reads0.fastq │ ├── client_fields.json │ └── sample_sheet.csv ├── case17 │ ├── barcode01 │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq │ ├── barcode02 │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq │ ├── barcode03 │ │ └── reads0.fastq │ ├── client_fields.json │ └── sample_sheet.csv ├── case18 │ ├── barcode01 │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq │ ├── barcode02 │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq │ ├── barcode03 │ │ └── reads0.fastq │ └── sample_sheet.csv ├── case19 │ ├── dir01 │ │ ├── garbage.txt │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq │ ├── dir02 │ │ ├── reads0.fastq │ │ ├── reads1.fastq │ │ └── reads2.fastq │ ├── dir03 │ │ └── reads0.fastq │ └── dir04 │ │ └── garbage.txt ├── case20 │ └── reads.fq ├── case21 │ └── reads.fq ├── case22 │ ├── reads0.fastq │ └── reads1.fastq ├── case23 │ └── empty.fq ├── case24 │ └── empty.fq.gz └── case26 │ ├── sample1 │ ├── YYYYMMDD_HHMM_0A_FLO00000_00000000 │ │ └── barcode01 │ │ │ ├── fastq_fail │ │ │ └── reads0.fastq │ │ │ └── fastq_pass │ │ │ └── reads0.fastq │ ├── YYYYMMDD_HHMM_0B_FLO11111_11111111 │ │ └── barcode02 │ │ │ ├── fastq_fail │ │ │ └── reads1.fastq │ │ │ └── fastq_pass │ │ │ └── reads1.fastq │ └── YYYYMMDD_HHMM_0C_FLO22222_22222222 │ │ └── unclassified │ │ ├── fastq_fail │ │ └── reads2.fastq │ │ └── fastq_pass │ │ └── reads2.fastq │ ├── sampleN │ ├── YYYYMMDD_HHMM_1A_FLO33333_00000000 │ │ └── barcode03 │ │ │ └── fastq_pass │ │ │ └── reads0.fastq │ ├── YYYYMMDD_HHMM_1B_FLO44444_11111111 │ │ └── barcode04 │ │ │ └── fastq_pass │ │ │ └── reads1.fastq │ └── YYYYMMDD_HHMM_1C_FLO55555_22222222 │ │ └── unclassified │ │ └── fastq_bass │ │ └── reads2.fastq │ ├── sample_sheet.csv │ ├── sample_sheet_barcodealias.csv │ ├── sample_sheet_dupealias.csv │ └── sample_sheet_sample_notindir.csv ├── reads.fastq.gz ├── workflow_glue ├── check_sample_sheet │ ├── README │ ├── sample_sheet_1.csv │ ├── sample_sheet_1.csv.zip │ ├── sample_sheet_1.xlsx │ ├── sample_sheet_10.csv │ ├── sample_sheet_11.csv │ ├── sample_sheet_12.csv │ ├── sample_sheet_2.csv │ ├── sample_sheet_3.csv │ ├── sample_sheet_4.csv │ ├── sample_sheet_5.csv │ ├── sample_sheet_6.csv │ ├── sample_sheet_7.csv │ ├── sample_sheet_8.csv │ ├── sample_sheet_9.csv │ └── utf8_bom.csv ├── client_fields.json └── client_fields_malformed.json └── xam_ingress ├── README ├── case01-ubam-only ├── garbage.txt ├── reads1.ubam └── reads3.bam ├── case01 ├── garbage.txt ├── reads0.bam ├── reads1.ubam ├── reads2.bam └── reads3.bam ├── case02 ├── dir1 │ ├── reads0.bam │ ├── reads1.bam │ └── reads2.bam ├── dir2 │ ├── reads0.bam │ ├── reads1.bam │ └── reads2.bam └── dir3 │ ├── reads0.bam │ ├── reads1.bam │ └── reads2.bam ├── case03 ├── barcode01 │ ├── reads0.bam │ ├── reads1.bam │ └── reads2.bam ├── barcode02 │ ├── reads0.ubam │ ├── reads1.ubam │ └── reads2.ubam ├── barcode03 │ ├── reads0.bam │ └── reads1.ubam └── sample_sheet.csv ├── case04 ├── reads0.bam └── reads1.bam ├── case05 ├── barcode01 │ ├── reads.bam │ └── reads.bam.bai └── barcode02 │ └── reads.bam ├── case06 ├── reads.bam └── reads.bam.bai ├── case07 └── reads.bam ├── case08 └── reads.ubam ├── case09 └── reads.bam ├── case10 ├── reads.bam └── reads.bam.bai ├── case11 └── reads.bam ├── case12 └── reads.bam ├── case13 ├── reads0.bam ├── reads1.bam └── reads2.bam ├── case14 ├── reads0.bam ├── reads1.bam └── reads2.bam ├── case15 ├── reads0.bam ├── reads1.bam └── reads2.bam ├── case16 ├── reads0.bam ├── reads1.bam └── reads2.bam ├── case17 ├── reads0.bam └── reads1.bam ├── case18 ├── reads0.bam ├── reads1.bam └── reads2.bam ├── case19 ├── reads0.collated.bam ├── reads1.collated.bam └── reads2.collated.bam ├── case20 └── just_header.bam ├── case21 └── unclassified │ ├── bam_fail │ └── spurious_dir │ │ └── reads0.bam │ └── bam_pass │ └── reads0.bam ├── case22 ├── barcode01 │ ├── YYYYMMDD_HHMM_0A_FLO00000_00000000 │ │ ├── bam_fail │ │ │ └── reads0.bam │ │ └── bam_pass │ │ │ └── reads0.bam │ ├── YYYYMMDD_HHMM_0B_FLO11111_11111111 │ │ ├── bam_fail │ │ │ └── reads1.bam │ │ └── bam_pass │ │ │ └── reads1.bam │ └── YYYYMMDD_HHMM_0C_FLO22222_22222222 │ │ ├── bam_fail │ │ └── reads2.bam │ │ └── bam_pass │ │ └── reads2.bam ├── barcode02 │ ├── YYYYMMDD_HHMM_1A_FLO33333_00000000 │ │ └── bam_pass │ │ │ └── reads0.bam │ ├── YYYYMMDD_HHMM_1B_FLO44444_11111111 │ │ └── bam_pass │ │ │ └── reads1.bam │ └── YYYYMMDD_HHMM_1C_FLO55555_22222222 │ │ └── bam_pass │ │ └── reads2.bam ├── sample_sheet.csv └── sample_sheet_sample_notindir.csv ├── case23 ├── sample1 │ ├── YYYYMMDD_HHMM_0A_FLO00000_00000000 │ │ └── barcode01 │ │ │ ├── bam_fail │ │ │ └── reads0.bam │ │ │ └── bam_pass │ │ │ └── reads0.bam │ ├── YYYYMMDD_HHMM_0B_FLO11111_11111111 │ │ └── barcode02 │ │ │ ├── bam_fail │ │ │ └── reads1.bam │ │ │ └── bam_pass │ │ │ └── reads1.bam │ └── YYYYMMDD_HHMM_0C_FLO22222_22222222 │ │ └── unclassified │ │ ├── bam_fail │ │ └── reads2.bam │ │ └── bam_pass │ │ └── reads2.bam ├── sampleN │ ├── YYYYMMDD_HHMM_1A_FLO33333_00000000 │ │ └── barcode03 │ │ │ └── bam_pass │ │ │ └── reads0.bam │ ├── YYYYMMDD_HHMM_1B_FLO44444_11111111 │ │ └── barcode04 │ │ │ └── bam_pass │ │ │ └── reads1.bam │ └── YYYYMMDD_HHMM_1C_FLO55555_22222222 │ │ └── unclassified │ │ └── bam_pass │ │ └── reads2.bam ├── sample_sheet.csv ├── sample_sheet_barcodealias.csv ├── sample_sheet_dupealias.csv └── sample_sheet_sample_notindir.csv ├── case24 ├── barcode01 │ ├── YYYYMMDD_HHMM_0A_FLO00000_00000000 │ │ ├── bam_fail │ │ │ └── reads0.bam │ │ └── bam_pass │ │ │ └── reads0.bam │ ├── YYYYMMDD_HHMM_0B_FLO11111_11111111 │ │ ├── bam_fail │ │ │ └── reads1.bam │ │ └── bam_pass │ │ │ └── reads1.bam │ └── YYYYMMDD_HHMM_0C_FLO22222_22222222 │ │ ├── bam_fail │ │ └── reads2.bam │ │ └── bam_pass │ │ └── reads2.bam ├── sample1 │ ├── YYYYMMDD_HHMM_0A_FLO00000_00000000 │ │ ├── bam_fail │ │ │ └── reads0.bam │ │ └── bam_pass │ │ │ └── reads0.bam │ ├── YYYYMMDD_HHMM_0B_FLO11111_11111111 │ │ ├── bam_fail │ │ │ └── reads1.bam │ │ └── bam_pass │ │ │ └── reads1.bam │ └── YYYYMMDD_HHMM_0C_FLO22222_22222222 │ │ ├── bam_fail │ │ └── reads2.bam │ │ └── bam_pass │ │ └── reads2.bam └── sample_sheet_conflict.csv └── reads.bam /.github/ISSUE_TEMPLATE/bug_report.yml: -------------------------------------------------------------------------------- 1 | name: Bug Report 2 | description: File a bug report 3 | labels: ["triage"] 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | Thanks for taking the time to fill out this bug report! 9 | 10 | 11 | - type: markdown 12 | attributes: 13 | value: | 14 | # Background 15 | - type: dropdown 16 | id: os 17 | attributes: 18 | label: Operating System 19 | description: What operating system are you running? 20 | options: 21 | - Windows 10 22 | - Windows 11 23 | - macOS 24 | - Ubuntu 22.04 25 | - CentOS 7 26 | - Other Linux (please specify below) 27 | validations: 28 | required: true 29 | - type: input 30 | id: other-os 31 | attributes: 32 | label: Other Linux 33 | placeholder: e.g. Fedora 38 34 | - type: input 35 | id: version 36 | attributes: 37 | label: Workflow Version 38 | description: This is most easily found in the workflow output log 39 | placeholder: v1.2.3 40 | validations: 41 | required: true 42 | - type: dropdown 43 | id: execution 44 | attributes: 45 | label: Workflow Execution 46 | description: Where are you running the workflow? 47 | options: 48 | - EPI2ME Desktop (Local) 49 | - EPI2ME Desktop (Cloud) 50 | - Command line (Local) 51 | - Command line (Cluster) 52 | - Other (please describe) 53 | validations: 54 | required: true 55 | - type: input 56 | id: other-workflow-execution 57 | attributes: 58 | label: Other workflow execution 59 | description: If "Other", please describe 60 | placeholder: Tell us where / how you are running the workflow. 61 | 62 | - type: markdown 63 | attributes: 64 | value: | 65 | # EPI2ME Desktop Application 66 | If you are using the application please provide the following. 67 | - type: input 68 | id: labs-version 69 | attributes: 70 | label: EPI2ME Version 71 | description: Available from the application settings page. 72 | placeholder: v5.1.1 73 | validations: 74 | required: false 75 | 76 | 77 | - type: markdown 78 | attributes: 79 | value: | 80 | # Command-line execution 81 | If you are using nextflow on a command-line, please provide the following. 82 | - type: textarea 83 | id: cli-command 84 | attributes: 85 | label: CLI command run 86 | description: Please tell us the command you are running 87 | placeholder: e.g. nextflow run epi2me-labs/wf-human-variations -profile standard --fastq my-reads/fastq 88 | validations: 89 | required: false 90 | - type: dropdown 91 | id: profile 92 | attributes: 93 | label: Workflow Execution - CLI Execution Profile 94 | description: Which execution profile are you using? If you are using a custom profile or nextflow configuration, please give details below. 95 | options: 96 | - standard (default) 97 | - singularity 98 | - custom 99 | validations: 100 | required: false 101 | 102 | 103 | - type: markdown 104 | attributes: 105 | value: | 106 | # Report details 107 | - type: textarea 108 | id: what-happened 109 | attributes: 110 | label: What happened? 111 | description: Also tell us, what did you expect to happen? 112 | placeholder: Tell us what you see! 113 | validations: 114 | required: true 115 | - type: textarea 116 | id: logs 117 | attributes: 118 | label: Relevant log output 119 | description: For CLI execution please include the full output from running nextflow. For execution from the EPI2ME application please copy the contents of the "Workflow logs" panel from the "Logs" tab corresponding to your workflow instance. (This will be automatically formatted into code, so no need for backticks). 120 | render: shell 121 | validations: 122 | required: true 123 | - type: textarea 124 | id: activity-log 125 | attributes: 126 | label: Application activity log entry 127 | description: For use with the EPI2ME application please see the Settings > View Activity Log page, and copy the contents of any items listed in red using the Copy to clipboard button. 128 | render: shell 129 | validations: 130 | required: false 131 | - type: dropdown 132 | id: run-demo 133 | attributes: 134 | label: Were you able to successfully run the latest version of the workflow with the demo data? 135 | description: For CLI execution, were you able to successfully run the workflow using the demo data available in the [Install and run](./README.md#install-and-run) section of the `README.md`? For execution in the EPI2ME application, were you able to successfully run the workflow via the "Use demo data" button? 136 | options: 137 | - 'yes' 138 | - 'no' 139 | - other (please describe below) 140 | validations: 141 | required: true 142 | - type: textarea 143 | id: demo-other 144 | attributes: 145 | label: Other demo data information 146 | render: shell 147 | validations: 148 | required: false 149 | 150 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Nanopore customer support 4 | url: https://nanoporetech.com/contact 5 | about: For general support, including bioinformatics questions. 6 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.yml: -------------------------------------------------------------------------------- 1 | name: Feature request 2 | description: Suggest an idea for this project 3 | labels: ["feature request"] 4 | body: 5 | 6 | - type: textarea 7 | id: question1 8 | attributes: 9 | label: Is your feature related to a problem? 10 | placeholder: A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 11 | validations: 12 | required: true 13 | - type: textarea 14 | id: question2 15 | attributes: 16 | label: Describe the solution you'd like 17 | placeholder: A clear and concise description of what you want to happen. 18 | validations: 19 | required: true 20 | - type: textarea 21 | id: question3 22 | attributes: 23 | label: Describe alternatives you've considered 24 | placeholder: A clear and concise description of any alternative solutions or features you've considered. 25 | validations: 26 | required: true 27 | - type: textarea 28 | id: question4 29 | attributes: 30 | label: Additional context 31 | placeholder: Add any other context about the feature request here. 32 | validations: 33 | required: false 34 | 35 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.yml: -------------------------------------------------------------------------------- 1 | name: Question 2 | description: Ask a generic question about this project unrelated to features or bugs. 3 | labels: ["question"] 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | Please reserve this form for issues not related to bugs or feature requests. If our developers deem your questions to be related to bugs or features you will be asked to fill in the appropriate form. 9 | - type: textarea 10 | id: question1 11 | attributes: 12 | label: Ask away! 13 | placeholder: | 14 | Bad question: How do I use this workflow in my HPC cluster? 15 | Good question: My HPC cluster uses a GridEngine scheduler. Can you point me to documentation for how to use your workflows to efficiently submit jobs to my cluster? 16 | validations: 17 | required: true 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | nextflow 2 | .nextflow* 3 | template-workflow 4 | .*.swp 5 | .*.swo 6 | *.pyc 7 | *.pyo 8 | .DS_store 9 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | repos: 2 | - repo: local 3 | hooks: 4 | - id: docs_readme 5 | name: docs_readme 6 | entry: parse_docs -p docs -e .md -s 01_brief_description 02_introduction 03_compute_requirements 04_install_and_run 05_related_protocols 06_input_example 06_input_parameters 07_outputs 08_pipeline_overview 09_troubleshooting 10_FAQ 11_other -ot README.md -od output_definition.json -ns nextflow_schema.json 7 | language: python 8 | always_run: true 9 | pass_filenames: false 10 | additional_dependencies: 11 | - epi2melabs==0.0.58 12 | - repo: https://github.com/pycqa/flake8 13 | rev: 5.0.4 14 | hooks: 15 | - id: flake8 16 | pass_filenames: false 17 | additional_dependencies: 18 | - flake8-rst-docstrings 19 | - flake8-docstrings 20 | - flake8-import-order 21 | - flake8-forbid-visual-indent 22 | - pep8-naming 23 | - flake8-no-types 24 | - flake8-builtins 25 | - flake8-absolute-import 26 | - flake8-print 27 | # avoid snowballstemmer>=3.0 as it causes flake8-docstrings to stop working [CW-6098] 28 | - snowballstemmer==2.2.0 29 | args: [ 30 | "bin", 31 | "--import-order-style=google", 32 | "--statistics", 33 | "--max-line-length=88", 34 | "--per-file-ignores=bin/workflow_glue/models/*:NT001", 35 | ] 36 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2020-, Oxford Nanopore Technologies Plc. All rights reserved. 2 | 3 | Redistribution and use in source and binary forms, with or without 4 | modification, are permitted provided that the following conditions are met: 5 | 6 | * Redistributions of source code must retain the above copyright notice, this 7 | list of conditions and the following disclaimer. 8 | 9 | * Redistributions in binary form must reproduce the above copyright notice, 10 | this list of conditions and the following disclaimer in the documentation 11 | and/or other materials provided with the distribution. 12 | 13 | * All advertising materials mentioning features or use of this software must 14 | display the following acknowledgement: This product includes software 15 | developed by Oxford Nanopore Technologies Plc. 16 | 17 | * Neither the name of Oxford Nanopore Technologies Plc. nor the names of 18 | its contributors may be used to endorse or promote products derived from this 19 | software without specific prior written permission. 20 | 21 | THIS SOFTWARE IS PROVIDED BY Oxford Nanopore Technologies Plc. AS IS AND ANY 22 | EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 23 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 24 | DISCLAIMED. IN NO EVENT SHALL Oxford Nanopore Technologies Plc. BE LIABLE FOR ANY DIRECT, 25 | INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 26 | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 28 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 29 | OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 30 | ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 | -------------------------------------------------------------------------------- /bin/workflow-glue: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | """Entrypoint of pseudo-package for all the code used in the workflow.""" 3 | 4 | from workflow_glue import cli 5 | 6 | if __name__ == "__main__": 7 | cli() 8 | -------------------------------------------------------------------------------- /bin/workflow_glue/__init__.py: -------------------------------------------------------------------------------- 1 | """Workflow Python code.""" 2 | import argparse 3 | import glob 4 | import importlib 5 | import itertools 6 | import os 7 | import sys 8 | 9 | from .util import _log_level, get_main_logger # noqa: ABS101 10 | 11 | 12 | __version__ = "0.0.1" 13 | _package_name = "workflow_glue" 14 | 15 | HELPERS = "wfg_helpers" 16 | 17 | 18 | def get_components(allowed_components=None): 19 | """Find a list of workflow command scripts.""" 20 | logger = get_main_logger(_package_name) 21 | 22 | # gather all python files in the current directory and the wfg_helpers 23 | home_path = os.path.dirname(os.path.abspath(__file__)) 24 | standard_lib = os.path.join(home_path, HELPERS) 25 | globs = itertools.chain.from_iterable(( 26 | glob.glob(os.path.join(path, "*.py")) 27 | for path in (home_path, standard_lib))) 28 | 29 | components = dict() 30 | for fname in globs: 31 | name = os.path.splitext(os.path.basename(fname))[0] 32 | if name in ("__init__", "util"): 33 | continue 34 | if allowed_components is not None and name not in allowed_components: 35 | continue 36 | 37 | # leniently attempt to import module 38 | try: 39 | if HELPERS in fname: 40 | mod = importlib.import_module(f"{_package_name}.{HELPERS}.{name}") 41 | else: 42 | mod = importlib.import_module(f"{_package_name}.{name}") 43 | except ModuleNotFoundError as e: 44 | # if imports cannot be satisifed, refuse to add the component 45 | # rather than exploding 46 | logger.warn(f"Could not load {name} due to missing module {e.name}") 47 | continue 48 | 49 | # if theres a main() and and argparser() thats good enough for us. 50 | try: 51 | req = "main", "argparser" 52 | if all(callable(getattr(mod, x)) for x in req): 53 | components[name] = mod 54 | except Exception: 55 | pass 56 | return components 57 | 58 | 59 | def cli(): 60 | """Run workflow entry points.""" 61 | logger = get_main_logger(_package_name) 62 | logger.info("Bootstrapping CLI.") 63 | parser = argparse.ArgumentParser( 64 | 'wf-glue', 65 | parents=[_log_level()], 66 | formatter_class=argparse.ArgumentDefaultsHelpFormatter) 67 | 68 | parser.add_argument( 69 | '-v', '--version', action='version', 70 | version='%(prog)s {}'.format(__version__)) 71 | 72 | subparsers = parser.add_subparsers( 73 | title='subcommands', description='valid commands', 74 | help='additional help', dest='command') 75 | subparsers.required = True 76 | 77 | # importing everything can take time, try to shortcut 78 | if len(sys.argv) > 1: 79 | components = get_components(allowed_components=[sys.argv[1]]) 80 | if not sys.argv[1] in components: 81 | logger.warn("Importing all modules, this may take some time.") 82 | components = get_components() 83 | else: 84 | components = get_components() 85 | 86 | # add all module parsers to main CLI 87 | for name, module in components.items(): 88 | p = subparsers.add_parser( 89 | name.split(".")[-1], parents=[module.argparser()]) 90 | p.set_defaults(func=module.main) 91 | 92 | args = parser.parse_args() 93 | 94 | logger.info("Starting entrypoint.") 95 | args.func(args) 96 | -------------------------------------------------------------------------------- /bin/workflow_glue/models/__init__.py: -------------------------------------------------------------------------------- 1 | """A collection of scripts for results models.""" 2 | -------------------------------------------------------------------------------- /bin/workflow_glue/models/custom.py: -------------------------------------------------------------------------------- 1 | """Extended models for the workflow.""" 2 | from dataclasses import dataclass 3 | 4 | from workflow_glue.models.common import CheckResult 5 | 6 | 7 | @dataclass 8 | class CheckResult(CheckResult): 9 | """ 10 | A result of some check the workflow has performed. 11 | 12 | This can be at a sample or workflow level. 13 | """ 14 | 15 | categories = dict( 16 | example_check="Example check category") 17 | -------------------------------------------------------------------------------- /bin/workflow_glue/report.py: -------------------------------------------------------------------------------- 1 | """Create workflow report.""" 2 | import json 3 | 4 | from dominate.tags import b, p 5 | from ezcharts.components import fastcat 6 | from ezcharts.components.reports import labs 7 | from ezcharts.layout.snippets import Tabs 8 | from ezcharts.layout.snippets.table import DataTable 9 | import pandas as pd 10 | 11 | from .util import get_named_logger, wf_parser # noqa: ABS101 12 | 13 | 14 | def main(args): 15 | """Run the entry point.""" 16 | logger = get_named_logger("Report") 17 | grouped = args.analysis_group is not None 18 | logger.info( 19 | f"Creating report for analysis group '{args.analysis_group}'." 20 | if grouped 21 | else "Creating report for all samples." 22 | ) 23 | report_title = "Workflow Template Sequencing report" 24 | if grouped: 25 | report_title += f" for analysis group '{args.analysis_group}'" 26 | report = labs.LabsReport( 27 | report_title, "wf-template", 28 | args.params, args.versions, args.wf_version) 29 | 30 | with open(args.metadata, "r") as f: 31 | metadata = json.load(f) 32 | sample_details = sorted([{ 33 | 'sample': d['alias'], 34 | 'type': d['type'], 35 | 'barcode': d['barcode'] 36 | } for d in metadata], key=lambda x: x["sample"]) 37 | 38 | sample_names = [d['sample'] for d in sample_details] 39 | samples_with_stats = tuple(d["alias"] for d in metadata if d["has_stats"]) 40 | 41 | if grouped: 42 | with report.add_section( 43 | f"Analysis group report: '{args.analysis_group}'", "Intro" 44 | ): 45 | p( 46 | "This report contains all samples of the ", 47 | b(args.analysis_group), 48 | " analysis group: ", 49 | ", ".join(sample_names), 50 | "." 51 | ) 52 | 53 | client_fields = None 54 | if args.client_fields: 55 | with open(args.client_fields) as f: 56 | try: 57 | client_fields = json.load(f) 58 | except json.decoder.JSONDecodeError: 59 | error = "ERROR: Client info is not correctly formatted" 60 | 61 | with report.add_section("Workflow Metadata", "Workflow Metadata"): 62 | if client_fields: 63 | df = pd.DataFrame.from_dict( 64 | client_fields, orient="index", columns=["Value"]) 65 | df.index.name = "Key" 66 | 67 | # Examples from the client had lists as values so join lists 68 | # for better display 69 | df['Value'] = df.Value.apply( 70 | lambda x: ', '.join( 71 | [str(i) for i in x]) if isinstance(x, list) else x) 72 | 73 | DataTable.from_pandas(df) 74 | else: 75 | p(error) 76 | 77 | if args.stats: 78 | with report.add_section("Read summary", "Read summary"): 79 | stats = tuple(args.stats) 80 | if len(stats) == 1: 81 | stats = stats[0] 82 | samples_with_stats = samples_with_stats[0] 83 | fastcat.SeqSummary(stats, sample_names=samples_with_stats) 84 | 85 | with report.add_section("Sample Metadata", "Sample Metadata"): 86 | tabs = Tabs() 87 | for d in sample_details: 88 | with tabs.add_tab(d["sample"]): 89 | df = pd.DataFrame.from_dict(d, orient="index", columns=["Value"]) 90 | df.index.name = "Key" 91 | DataTable.from_pandas(df) 92 | 93 | report.write(args.report) 94 | logger.info(f"Report written to {args.report}.") 95 | 96 | 97 | def argparser(): 98 | """Argument parser for entrypoint.""" 99 | parser = wf_parser("report") 100 | parser.add_argument("report", help="Report output file") 101 | parser.add_argument("--analysis_group", help="Analysis group name.") 102 | parser.add_argument( 103 | "--stats", nargs='+', 104 | help="Fastcat per-read stats, ordered as per entries in --metadata.") 105 | parser.add_argument( 106 | "--metadata", required=True, 107 | help="sample metadata") 108 | parser.add_argument( 109 | "--versions", required=True, 110 | help="directory containing CSVs containing name,version.") 111 | parser.add_argument( 112 | "--params", required=True, 113 | help="A JSON file containing the workflow parameter key/values") 114 | parser.add_argument( 115 | "--client_fields", 116 | help="A JSON file containing useful key/values for display") 117 | parser.add_argument( 118 | "--wf_version", default='unknown', 119 | help="version of the executed workflow") 120 | return parser 121 | -------------------------------------------------------------------------------- /bin/workflow_glue/tests/__init__.py: -------------------------------------------------------------------------------- 1 | """__init__.py for the tests.""" 2 | -------------------------------------------------------------------------------- /bin/workflow_glue/tests/conftest.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """Pytests argument definitions.""" 3 | 4 | 5 | def pytest_addoption(parser): 6 | """Define command line arguments for pytest.""" 7 | parser.addoption( 8 | "--test_data", 9 | action="store", 10 | default="/host/test_data" 11 | ) 12 | -------------------------------------------------------------------------------- /bin/workflow_glue/tests/test_test.py: -------------------------------------------------------------------------------- 1 | """A dummy test.""" 2 | 3 | import argparse 4 | 5 | from workflow_glue import report 6 | 7 | 8 | def test(): 9 | """Just showing that we can import using the workflow-glue.""" 10 | assert isinstance(report.argparser(), argparse.ArgumentParser) 11 | -------------------------------------------------------------------------------- /bin/workflow_glue/tests/wfg_helpers/__init__.py: -------------------------------------------------------------------------------- 1 | """__init__.py for standard script tests.""" 2 | -------------------------------------------------------------------------------- /bin/workflow_glue/tests/wfg_helpers/test_check_sample_sheet.py: -------------------------------------------------------------------------------- 1 | """Test check_sample_sheet.py.""" 2 | 3 | import os 4 | 5 | import pytest 6 | from workflow_glue.wfg_helpers import check_sample_sheet 7 | 8 | 9 | # define a list of error messages (either the complete message or the first couple words 10 | # in case the error message is customized by `check_sample_sheet.py`) and required 11 | # sample types to be tested. 12 | ERROR_MESSAGES = [ 13 | ("sample_sheet_1.csv", "", ""), 14 | # check required sample types 15 | ("sample_sheet_1.csv", "Sample sheet requires at least 1 of ", "positive_control"), 16 | ("sample_sheet_1.csv", "Not an allowed sample type: ", "invalid_sample_type"), 17 | # check sample sheet structure etc. 18 | ("sample_sheet_2.csv", "'barcode' column missing", ""), 19 | ("sample_sheet_3.csv", "'alias' column missing", ""), 20 | ("sample_sheet_4.csv", "values in 'barcode' column not unique", ""), 21 | ("sample_sheet_5.csv", "values in 'alias' column not unique", ""), 22 | ("sample_sheet_6.csv", "Unexpected number of cells in row number 2", ""), 23 | ("sample_sheet_7.csv", "found unexpected values in 'type' column: ", ""), 24 | ("sample_sheet_8.csv", "values in 'barcode' column are different lengths", ""), 25 | ("sample_sheet_9.csv", "values in 'barcode' column are incorrect format", ""), 26 | # misc 27 | ("missing.csv", "Could not open sample sheet", ""), 28 | ("utf8_bom.csv", "", ""), # check this does not fail 29 | # check other input formats 30 | ("sample_sheet_1.csv.zip", "The sample sheet doesn't seem to be a CSV file.", ""), 31 | ("sample_sheet_1.xlsx", "The sample sheet doesn't seem to be a CSV file.", ""), 32 | ("sample_sheet_10.csv", "", ""), # check this does not fail 33 | ( 34 | "sample_sheet_11.csv", 35 | "if an 'analysis_group' column exists, it needs values in each row", 36 | "", 37 | ), 38 | ( 39 | "sample_sheet_12.csv", 40 | "values in 'alias' column must not begin with 'barcode'", 41 | "" 42 | ), 43 | ] 44 | 45 | 46 | @pytest.fixture 47 | def test_data(request): 48 | """Define data location fixture.""" 49 | return os.path.join( 50 | request.config.getoption("--test_data"), 51 | "workflow_glue", 52 | "check_sample_sheet") 53 | 54 | 55 | @pytest.mark.parametrize("sample_sheet_name,error_msg,required_types", ERROR_MESSAGES) 56 | def test_check_sample_sheet( 57 | capsys, test_data, sample_sheet_name, error_msg, required_types): 58 | """Test the sample sheets.""" 59 | expected_error_message = error_msg 60 | sample_sheet_path = f"{test_data}/{sample_sheet_name}" 61 | args = [sample_sheet_path] 62 | if required_types: 63 | args += ['--required_sample_types', required_types] 64 | parsed_args = check_sample_sheet.argparser().parse_args(args) 65 | try: 66 | check_sample_sheet.main(parsed_args) 67 | except SystemExit: 68 | pass 69 | out, _ = capsys.readouterr() 70 | if expected_error_message == "": 71 | assert len(out.strip()) == 0 72 | else: 73 | assert out.startswith(expected_error_message) 74 | -------------------------------------------------------------------------------- /bin/workflow_glue/util.py: -------------------------------------------------------------------------------- 1 | """The odd helper function. 2 | 3 | Be careful what you place in here. This file is imported into all glue. 4 | """ 5 | import argparse 6 | import logging 7 | 8 | 9 | _log_name = None 10 | 11 | 12 | def get_main_logger(name): 13 | """Create the top-level logger.""" 14 | global _log_name 15 | _log_name = name 16 | logging.basicConfig( 17 | format='[%(asctime)s - %(name)s] %(message)s', 18 | datefmt='%H:%M:%S', level=logging.INFO) 19 | return logging.getLogger(name) 20 | 21 | 22 | def get_named_logger(name): 23 | """Create a logger with a name. 24 | 25 | :param name: name of logger. 26 | """ 27 | name = name.ljust(10)[:10] # so logging is aligned 28 | logger = logging.getLogger('{}.{}'.format(_log_name, name)) 29 | return logger 30 | 31 | 32 | def wf_parser(name): 33 | """Make an argument parser for a workflow command.""" 34 | return argparse.ArgumentParser( 35 | name, 36 | formatter_class=argparse.ArgumentDefaultsHelpFormatter, 37 | add_help=False) 38 | 39 | 40 | def _log_level(): 41 | """Parser to set logging level and acquire software version/commit.""" 42 | parser = argparse.ArgumentParser( 43 | formatter_class=argparse.ArgumentDefaultsHelpFormatter, add_help=False) 44 | 45 | modify_log_level = parser.add_mutually_exclusive_group() 46 | modify_log_level.add_argument( 47 | '--debug', action='store_const', 48 | dest='log_level', const=logging.DEBUG, default=logging.INFO, 49 | help='Verbose logging of debug information.') 50 | modify_log_level.add_argument( 51 | '--quiet', action='store_const', 52 | dest='log_level', const=logging.WARNING, default=logging.INFO, 53 | help='Minimal logging; warnings only.') 54 | 55 | return parser 56 | -------------------------------------------------------------------------------- /bin/workflow_glue/wfg_helpers/__init__.py: -------------------------------------------------------------------------------- 1 | """A collection of helper scripts common to workflows.""" 2 | -------------------------------------------------------------------------------- /bin/workflow_glue/wfg_helpers/check_bam_headers_in_dir.py: -------------------------------------------------------------------------------- 1 | """Check (u)BAM files for `@SQ` lines whether they are the same in all headers.""" 2 | 3 | from pathlib import Path 4 | import sys 5 | 6 | import pysam 7 | 8 | from ..util import get_named_logger, wf_parser # noqa: ABS101 9 | 10 | 11 | def main(args): 12 | """Run the entry point.""" 13 | logger = get_named_logger("checkBamHdr") 14 | 15 | if not args.input_path.is_dir(): 16 | raise ValueError(f"Input path '{args.input_path}' must be a directory.") 17 | 18 | target_files = list(args.input_path.glob("*")) 19 | if not target_files: 20 | raise ValueError(f"No files found in input directory '{args.input_path}'.") 21 | # Loop over target files and check if there are `@SQ` lines in all headers or not. 22 | # Set `is_unaligned` accordingly. If there are mixed headers (either with some files 23 | # containing `@SQ` lines and some not or with different files containing different 24 | # `@SQ` lines), set `mixed_headers` to `True`. 25 | # Also check if there is the SO line, to validate whether the file is (un)sorted. 26 | first_sq_lines = None 27 | mixed_headers = False 28 | sorted_xam = False 29 | for xam_file in target_files: 30 | # get the `@SQ` and `@HD` lines in the header 31 | with pysam.AlignmentFile(xam_file, check_sq=False) as f: 32 | # compare only the SN/LN/M5 elements of SQ to avoid labelling XAM with 33 | # same reference but different SQ.UR as mixed_header (see CW-4842) 34 | sq_lines = [{ 35 | "SN": sq["SN"], 36 | "LN": sq["LN"], 37 | "M5": sq.get("M5"), 38 | } for sq in f.header.get("SQ", [])] 39 | hd_lines = f.header.get("HD") 40 | # Check if it is sorted. 41 | # When there is more than one BAM, merging/sorting 42 | # will happen regardless of this flag. 43 | if hd_lines is not None and hd_lines.get('SO') == 'coordinate': 44 | sorted_xam = True 45 | if first_sq_lines is None: 46 | # this is the first file 47 | first_sq_lines = sq_lines 48 | else: 49 | # this is a subsequent file; check with the first `@SQ` lines 50 | if sq_lines != first_sq_lines: 51 | mixed_headers = True 52 | break 53 | 54 | # we set `is_unaligned` to `True` if there were no mixed headers and the last file 55 | # didn't have `@SQ` lines (as we can then be sure that none of the files did) 56 | is_unaligned = not mixed_headers and not sq_lines 57 | # write `is_unaligned` and `mixed_headers` out so that they can be set as env. 58 | # variables 59 | sys.stdout.write( 60 | f"IS_UNALIGNED={int(is_unaligned)};" + 61 | f"MIXED_HEADERS={int(mixed_headers)};" + 62 | f"IS_SORTED={int(sorted_xam)}" 63 | ) 64 | logger.info(f"Checked (u)BAM headers in '{args.input_path}'.") 65 | 66 | 67 | def argparser(): 68 | """Argument parser for entrypoint.""" 69 | parser = wf_parser("check_bam_headers_in_dir") 70 | parser.add_argument("input_path", type=Path, help="Path to target directory") 71 | return parser 72 | -------------------------------------------------------------------------------- /bin/workflow_glue/wfg_helpers/check_sample_sheet.py: -------------------------------------------------------------------------------- 1 | """Check if a sample sheet is valid.""" 2 | import codecs 3 | import csv 4 | import os 5 | import re 6 | import sys 7 | 8 | from ..util import get_named_logger, wf_parser # noqa: ABS101 9 | 10 | 11 | # Some Excel users save their CSV as UTF-8 (and occasionally for a reason beyond my 12 | # comprehension, UTF-16); Excel then adds a byte order mark (unnecessarily for UTF-8 13 | # I should add). If we do not handle this with the correct encoding, the mark will 14 | # appear in the parsed data, causing the header to be malformed. 15 | # See CW-2310 16 | def determine_codec(f): 17 | """Peek at a file and return an appropriate reading codec.""" 18 | with open(f, 'rb') as f_bytes: 19 | # Could use chardet here if we need to expand codec support 20 | initial_bytes = f_bytes.read(8) 21 | 22 | for codec, encoding_name in [ 23 | [codecs.BOM_UTF8, "utf-8-sig"], # use the -sig codec to drop the mark 24 | [codecs.BOM_UTF16_BE, "utf-16"], # don't specify LE or BE to drop mark 25 | [codecs.BOM_UTF16_LE, "utf-16"], 26 | [codecs.BOM_UTF32_BE, "utf-32"], # handle 32 for completeness 27 | [codecs.BOM_UTF32_LE, "utf-32"], # again skip LE or BE to drop mark 28 | ]: 29 | if initial_bytes.startswith(codec): 30 | return encoding_name 31 | return None # will cause file to be opened with default encoding 32 | 33 | 34 | def main(args): 35 | """Run the entry point.""" 36 | logger = get_named_logger("checkSheet") 37 | 38 | barcodes = [] 39 | aliases = [] 40 | sample_types = [] 41 | analysis_groups = [] 42 | allowed_sample_types = [ 43 | "test_sample", "positive_control", "negative_control", "no_template_control" 44 | ] 45 | 46 | if not os.path.exists(args.sample_sheet) or not os.path.isfile(args.sample_sheet): 47 | sys.stdout.write("Could not open sample sheet file.") 48 | sys.exit() 49 | 50 | try: 51 | encoding = determine_codec(args.sample_sheet) 52 | with open(args.sample_sheet, "r", encoding=encoding) as f: 53 | try: 54 | # Excel files don't throw any error until here 55 | csv.Sniffer().sniff(f.readline()) 56 | f.seek(0) # return to initial position again 57 | except Exception as e: 58 | # Excel fails with UniCode error 59 | sys.stdout.write( 60 | "The sample sheet doesn't seem to be a CSV file.\n" 61 | "The sample sheet has to be a CSV file.\n" 62 | "Please verify that the sample sheet is a CSV file.\n" 63 | f"Parsing error: {e}" 64 | ) 65 | 66 | sys.exit() 67 | 68 | csv_reader = csv.DictReader(f) 69 | n_row = 0 70 | for row in csv_reader: 71 | n_row += 1 72 | if n_row == 1: 73 | n_cols = len(row) 74 | else: 75 | # check we got the same number of fields 76 | if len(row) != n_cols: 77 | sys.stdout.write( 78 | f"Unexpected number of cells in row number {n_row}" 79 | ) 80 | sys.exit() 81 | try: 82 | barcodes.append(row["barcode"]) 83 | except KeyError: 84 | sys.stdout.write("'barcode' column missing") 85 | sys.exit() 86 | try: 87 | aliases.append(row["alias"]) 88 | except KeyError: 89 | sys.stdout.write("'alias' column missing") 90 | sys.exit() 91 | try: 92 | sample_types.append(row["type"]) 93 | except KeyError: 94 | pass 95 | try: 96 | analysis_groups.append(row["analysis_group"]) 97 | except KeyError: 98 | pass 99 | except Exception as e: 100 | sys.stdout.write(f"Parsing error: {e}") 101 | sys.exit() 102 | 103 | # check barcodes are correct format 104 | for barcode in barcodes: 105 | if not re.match(r'^barcode\d\d+$', barcode): 106 | sys.stdout.write("values in 'barcode' column are incorrect format") 107 | sys.exit() 108 | 109 | # check aliases are correct format 110 | # for now we have decided they may not start with "barcode" 111 | for alias in aliases: 112 | if alias.startswith("barcode"): 113 | sys.stdout.write("values in 'alias' column must not begin with 'barcode'") 114 | sys.exit() 115 | 116 | # check barcodes are all the same length 117 | first_length = len(barcodes[0]) 118 | for barcode in barcodes[1:]: 119 | if len(barcode) != first_length: 120 | sys.stdout.write("values in 'barcode' column are different lengths") 121 | sys.exit() 122 | 123 | # check barcode and alias values are unique 124 | if len(barcodes) > len(set(barcodes)): 125 | sys.stdout.write("values in 'barcode' column not unique") 126 | sys.exit() 127 | if len(aliases) > len(set(aliases)): 128 | sys.stdout.write("values in 'alias' column not unique") 129 | sys.exit() 130 | 131 | if sample_types: 132 | # check if "type" column has unexpected values 133 | unexp_type_vals = set(sample_types) - set(allowed_sample_types) 134 | 135 | if unexp_type_vals: 136 | sys.stdout.write( 137 | f"found unexpected values in 'type' column: {unexp_type_vals}. " 138 | f"Allowed values are: {allowed_sample_types}" 139 | ) 140 | sys.exit() 141 | 142 | if args.required_sample_types: 143 | for required_type in args.required_sample_types: 144 | if required_type not in allowed_sample_types: 145 | sys.stdout.write(f"Not an allowed sample type: {required_type}") 146 | sys.exit() 147 | if sample_types.count(required_type) < 1: 148 | sys.stdout.write( 149 | f"Sample sheet requires at least 1 of {required_type}") 150 | sys.exit() 151 | if analysis_groups: 152 | # if there was a "analysis_group" column, make sure it had values for all 153 | # samples 154 | if not all(analysis_groups): 155 | sys.stdout.write( 156 | "if an 'analysis_group' column exists, it needs values in each row" 157 | ) 158 | sys.exit() 159 | 160 | logger.info(f"Checked sample sheet {args.sample_sheet}.") 161 | 162 | 163 | def argparser(): 164 | """Argument parser for entrypoint.""" 165 | parser = wf_parser("check_sample_sheet") 166 | parser.add_argument("sample_sheet", help="Sample sheet to check") 167 | parser.add_argument( 168 | "--required_sample_types", 169 | help="List of required sample types. Each sample type provided must " 170 | "appear at least once in the sample sheet", 171 | nargs="*" 172 | ) 173 | return parser 174 | -------------------------------------------------------------------------------- /bin/workflow_glue/wfg_helpers/check_xam_index.py: -------------------------------------------------------------------------------- 1 | """Validate a single (u)BAM file index.""" 2 | 3 | from pathlib import Path 4 | import sys 5 | 6 | import pysam 7 | 8 | from ..util import get_named_logger, wf_parser # noqa: ABS101 9 | 10 | 11 | def validate_xam_index(xam_file): 12 | """Use fetch to validate the index. 13 | 14 | Invalid indexes will fail the call with a ValueError: 15 | ValueError: fetch called on bamfile without index 16 | """ 17 | with pysam.AlignmentFile(xam_file, check_sq=False) as alignments: 18 | try: 19 | alignments.fetch() 20 | has_valid_index = True 21 | except ValueError: 22 | has_valid_index = False 23 | return has_valid_index 24 | 25 | 26 | def main(args): 27 | """Run the entry point.""" 28 | logger = get_named_logger("checkBamIdx") 29 | 30 | # Check if a XAM has a valid index 31 | has_valid_index = validate_xam_index(args.input_xam) 32 | # write `has_valid_index` out so that they can be set as env. 33 | sys.stdout.write( 34 | f"HAS_VALID_INDEX={int(has_valid_index)}" 35 | ) 36 | logger.info(f"Checked (u)BAM index for: '{args.input_xam}'.") 37 | 38 | 39 | def argparser(): 40 | """Argument parser for entrypoint.""" 41 | parser = wf_parser("check_xam_index") 42 | parser.add_argument("input_xam", type=Path, help="Path to target XAM") 43 | return parser 44 | -------------------------------------------------------------------------------- /bin/workflow_glue/wfg_helpers/get_max_depth_locus.py: -------------------------------------------------------------------------------- 1 | """Find max depth window in a `mosdepth` regions BED file and write as locus string.""" 2 | 3 | from pathlib import Path 4 | import sys 5 | 6 | import pandas as pd 7 | 8 | from ..util import get_named_logger, wf_parser # noqa: ABS101 9 | 10 | 11 | def main(args): 12 | """Run the entry point.""" 13 | logger = get_named_logger("getMaxDepth") 14 | 15 | # read the regions BED file 16 | df = pd.read_csv( 17 | args.depths_bed, sep="\t", header=None, names=["ref", "start", "end", "depth"] 18 | ) 19 | 20 | # get the window with the largest depth 21 | ref, start, end, depth = df.loc[df["depth"].idxmax()] 22 | 23 | # get the length of the reference of that window 24 | ref_length = df.query("ref == @ref")["end"].iloc[-1] 25 | 26 | # show the whole reference in case it's shorter than the desired locus size 27 | if ref_length < args.locus_size: 28 | start = 1 29 | end = ref_length 30 | else: 31 | # otherwise, show a region of the desired size around the window 32 | half_size = args.locus_size // 2 33 | mid = (start + end) // 2 34 | start = mid - half_size 35 | end = mid + half_size 36 | # check if the region starts below `1` or ends beyond the end of the reference 37 | if start < 1: 38 | start = 1 39 | end = args.locus_size 40 | if end > ref_length: 41 | start = ref_length - args.locus_size 42 | end = ref_length 43 | 44 | # write depth and locus string 45 | sys.stdout.write(f"{depth}\t{ref}:{start}-{end}") 46 | 47 | logger.info("Wrote locus with maximum depth to STDOUT.") 48 | 49 | 50 | def argparser(): 51 | """Argument parser for entrypoint.""" 52 | parser = wf_parser("get_max_depth_locus") 53 | parser.add_argument( 54 | "depths_bed", 55 | type=Path, 56 | help="path to mosdepth regions depth file (can be compressed)", 57 | ) 58 | parser.add_argument( 59 | "locus_size", type=int, help="size of the locus in basepairs (e.g. '2000')" 60 | ) 61 | return parser 62 | -------------------------------------------------------------------------------- /data/OPTIONAL_FILE: -------------------------------------------------------------------------------- 1 | # Nothing to see here. A sentinel file to replace real data. 2 | # e.g.: 3 | # 4 | # process run { 5 | # input: 6 | # path some_data 7 | # path extra_data 8 | # script: 9 | # def extra = extra_data.name != 'OPTIONAL_FILE' ? "--extra-data $opt" : '' 10 | # """ 11 | # command ${some_data} ${extra} 12 | # """ 13 | # } 14 | # 15 | # some_data = ... 16 | # extra_data = Channel.fromPath("$projectDir/data/OPTIONAL_FILE")) 17 | # run(some_data, extra_data) 18 | -------------------------------------------------------------------------------- /docs/01_brief_description.md: -------------------------------------------------------------------------------- 1 | Nextflow workflow template repository. -------------------------------------------------------------------------------- /docs/02_introduction.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | This workflow is not intended to be used by end users. 4 | 5 | This workflow can be used for the following: 6 | 7 | + As a template using gitlabs create project from template. 8 | + For testing of any scripts that are the same across workflows such as scripts in the lib directory. -------------------------------------------------------------------------------- /docs/03_compute_requirements.md: -------------------------------------------------------------------------------- 1 | Recommended requirements: 2 | 3 | + CPUs = 2 4 | + Memory = 2GB 5 | 6 | Minimum requirements: 7 | 8 | + CPUs = 2 9 | + Memory = 2GB 10 | 11 | Approximate run time: 5 minutes per sample 12 | 13 | ARM processor support: True 14 | -------------------------------------------------------------------------------- /docs/04_install_and_run.md: -------------------------------------------------------------------------------- 1 | 2 | These are instructions to install and run the workflow on command line. 3 | You can also access the workflow via the 4 | [EPI2ME Desktop application](https://labs.epi2me.io/downloads/). 5 | 6 | The workflow uses [Nextflow](https://www.nextflow.io/) to manage 7 | compute and software resources, 8 | therefore Nextflow will need to be 9 | installed before attempting to run the workflow. 10 | 11 | The workflow can currently be run using either 12 | [Docker](https://docs.docker.com/get-started/) 13 | or [Singularity](https://docs.sylabs.io/guides/3.0/user-guide/index.html) 14 | to provide isolation of the required software. 15 | Both methods are automated out-of-the-box provided 16 | either Docker or Singularity is installed. 17 | This is controlled by the 18 | [`-profile`](https://www.nextflow.io/docs/latest/config.html#config-profiles) 19 | parameter as exemplified below. 20 | 21 | It is not required to clone or download the git repository 22 | in order to run the workflow. 23 | More information on running EPI2ME workflows can 24 | be found on our [website](https://labs.epi2me.io/wfindex). 25 | 26 | The following command can be used to obtain the workflow. 27 | This will pull the repository in to the assets folder of 28 | Nextflow and provide a list of all parameters 29 | available for the workflow as well as an example command: 30 | 31 | ``` 32 | nextflow run epi2me-labs/wf-template --help 33 | ``` 34 | To update a workflow to the latest version on the command line use 35 | the following command: 36 | ``` 37 | nextflow pull epi2me-labs/wf-template 38 | ``` 39 | 40 | A demo dataset is provided for testing of the workflow. 41 | It can be downloaded and unpacked using the following commands: 42 | ``` 43 | wget https://ont-exd-int-s3-euwst1-epi2me-labs.s3.amazonaws.com/wf-template/wf-template-demo.tar.gz 44 | tar -xzvf wf-template-demo.tar.gz 45 | ``` 46 | The workflow can then be run with the downloaded demo data using: 47 | ``` 48 | nextflow run epi2me-labs/wf-template \ 49 | --fastq 'wf-template-demo/test_data/reads.fastq.gz' \ 50 | -profile standard 51 | ``` 52 | 53 | For further information about running a workflow on 54 | the command line see https://labs.epi2me.io/wfquickstart/ 55 | -------------------------------------------------------------------------------- /docs/05_related_protocols.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | This workflow is designed to take input sequences that have been produced from [Oxford Nanopore Technologies](https://nanoporetech.com/) devices. 4 | 5 | Find related protocols in the [Nanopore community](https://community.nanoporetech.com/docs/). -------------------------------------------------------------------------------- /docs/06_input_example.md: -------------------------------------------------------------------------------- 1 | 2 | This workflow accepts either FASTQ or BAM files as input. 3 | 4 | 5 | ### Single file 6 | 7 | A single FASTQ or BAM file can be provided to ingress and will be analysed by the workflow. 8 | A sample name can optionally be supplied with the `sample` option, otherwise the file name before any file extensions will be used. 9 | 10 | ### Single folder containing files 11 | 12 | A single folder containing FASTQ or BAM files can be provided to ingress. 13 | The workflow will merge these files together and analyse them as one sample. 14 | 15 | A sample name can optionally be supplied with the `sample` option, otherwise the folder name will be used. 16 | 17 | ``` 18 | ─── input_folder 19 | ├── reads0.fastq 20 | └── reads1.fastq 21 | ``` 22 | 23 | ### Multiple folders containing files 24 | 25 | A folder containing one level of sub-folders which in turn contain FASTQ or BAM files. 26 | The anticipated use case here is for demultiplexed barcodes. 27 | 28 | ``` 29 | ─── input_folder 30 | ├── barcode01 31 | │ ├── reads0.fastq 32 | │ └── reads1.fastq 33 | ├── barcode02 34 | │ ├── reads0.fastq 35 | │ ├── reads1.fastq 36 | │ └── reads2.fastq 37 | ├── barcode03 38 | │ └── reads0.fastq 39 | └── unclassified 40 | └── reads0.fastq 41 | ``` 42 | 43 | The names of the folders will be used as the names of each multiplexed sample. 44 | The workflow will merge all files found inside each of the sub-folders into distinct samples for analysis. 45 | The folders may have any name, however folders named `unclassified` will be ignored by ingress unless the `analyse_unclassified` option is switched on. 46 | 47 | 48 | ### Multiple folders containing MinKNOW sample folders with BAM files 49 | 50 | A folder containing more than one level of folders. 51 | The anticipated use case here is for analysing a MinKNOW experiment folder where the output format is BAM files. 52 | FASTQ files are not supported in this layout at this time. 53 | 54 | ``` 55 | ─── input_folder 56 | ├── sample01 57 | │ ├── YYYYMMDD_HHMM_0A_FLO00000_00000000 58 | │ │ ├── bam_pass 59 | │ │ │ ├── reads0.bam 60 | │ │ │ └── reads1.bam 61 | │ │ └── bam_fail 62 | │ │ └── reads0.bam 63 | │ ├── YYYYMMDD_HHMM_0B_FLO11111_11111111 64 | │ │ ├── bam_pass 65 | │ │ │ └── reads0.bam 66 | │ │ └── bam_fail 67 | └── sample02 68 | └── YYYYMMDD_HHMM_0C_FLO22222_22222222 69 | ├── bam_pass 70 | │ └── reads0.bam 71 | └── bam_fail 72 | └── reads0.bam 73 | ``` 74 | 75 | The names of the first-level sub-folders will be used as the names of each multiplexed sample. 76 | Files must appear at the same level in the file tree. 77 | The workflow will recursively merge all files found inside each of the first-level sub-folders into distinct samples for analysis. 78 | 79 | All the files in the example above have a depth of four; and so will be analysed by the workflow. 80 | It would be an error to place files in other levels, for example below `bad_sample01` has files at a depth of four and `bad_sample02` has files at a depth of two: 81 | 82 | ``` 83 | ─── bad_input_folder 84 | ├── bad_sample01 85 | │ └── YYYYMMDD_HHMM_0A_FLO00000_00000000 86 | │ └── bam_pass 87 | │ ├── reads0.bam 88 | │ └── reads1.bam 89 | └── bad_sample02 90 | └── reads0.bam 91 | ``` 92 | 93 | To ensure the workflow will analyse the intended samples you must indicate to the workflow the samples to analyse in one of three ways: 94 | * `sample_sheet`: A sample sheet describing samples in the input folder to be processed. The folder names must match the barcodes or sample aliases as specified in the sample sheet. 95 | * `sample`: A single sample name that matches one of the sample folders in the input folder. 96 | * Both `sample_sheet` and `sample`: This will consume all metadata from the sample sheet but limit analysis to the single named sample. 97 | 98 | Additionally, the following rules apply when ingress is searching for files to be analysed by the workflow: 99 | * Sub-folders beyond the first-level named `pod5_fail`, `fastq_fail` and `bam_fail` will be ignored by ingress unless the `analyse_fail` option is switched on. 100 | * Sub-folders beyond the first-level named `unclassified` will be ignored by ingress unless the `analyse_unclassified` option is switched on. It is not possible to name a sample `unclassified` using the sample sheet. 101 | * It is an error to provide folders matching both the barcode and alias for a sample's row in the sample sheet. 102 | * Is is an error to provide a sample sheet where a sample alias begins with the word "barcode". 103 | 104 | -------------------------------------------------------------------------------- /docs/06_input_parameters.md: -------------------------------------------------------------------------------- 1 | ### Input Options 2 | 3 | | Nextflow parameter name | Type | Description | Help | Default | 4 | |--------------------------|------|-------------|------|---------| 5 | | fastq | string | FASTQ files to use in the analysis. | This accepts one of four cases: (i) the path to a single FASTQ file; (ii) the path to a folder containing FASTQ files; (iii) the path to a folder containing one level of sub-folders which in turn contain FASTQ files; (iv) the path to a MinKNOW experiment folder containing sub-folders for each sequenced sample. In the first and second case, a sample name can be supplied with `--sample`. In the third case, the data is assumed to be multiplexed with the names of the sub-folders as barcodes, and a sample sheet can be provided with `--sample_sheet`. In the fourth case, the data is assumed to be multiplexed with the names of the sub-folders as samples, and a sample sheet and/or sample name must be provided to indicate which samples to analyse. | | 6 | | bam | string | BAM or unaligned BAM (uBAM) files to use in the analysis. | This accepts one of four cases: (i) the path to a single BAM file; (ii) the path to a folder containing BAM files; (iii) the path to a folder containing one level of sub-folders which in turn contain BAM files; (iv) the path to a MinKNOW experiment folder containing sub-folders for each sequenced sample. In the first and second case, a sample name can be supplied with `--sample`. In the third case, the data is assumed to be multiplexed with the names of the sub-folders as barcodes, and a sample sheet can be provided with `--sample_sheet`. In the fourth case, the data is assumed to be multiplexed with the names of the sub-folders as samples, and a sample sheet and/or sample name must be provided to indicate which samples to analyse. | | 7 | | analyse_unclassified | boolean | Analyse unclassified reads from input folder. By default the workflow will not process reads in the unclassified folder. | If selected and if the input is a multiplex folder the workflow will also process the unclassified folder. | False | 8 | | analyse_fail | boolean | Analyse failed reads from input folder. By default the workflow will not process reads in a pod5_fail, bam_fail or fastq_fail sub-folders. | If selected and if the input is a multiplex folder the workflow will also process pod5_fail, bam_fail and fastq_fail folders. | False | 9 | | watch_path | boolean | Enable to continuously watch the input directory for new input files. | This option enables the use of Nextflow’s directory watching feature to constantly monitor input directories for new files. | False | 10 | | fastq_chunk | integer | Sets the maximum number of reads per chunk returned from the data ingress layer. | Default is to not chunk data and return a single FASTQ file. | | 11 | 12 | 13 | ### Sample Options 14 | 15 | | Nextflow parameter name | Type | Description | Help | Default | 16 | |--------------------------|------|-------------|------|---------| 17 | | sample_sheet | string | A CSV file used to map barcodes to sample aliases. The sample sheet can be provided when the input data is a folder containing sub-folders with FASTQ files. | The sample sheet is a CSV file with, minimally, columns named `barcode` and `alias`. Extra columns are allowed. A `type` column is required for certain workflows and should have the following values; `test_sample`, `positive_control`, `negative_control`, `no_template_control`. An optional `analysis_group` column is used by some workflows to combine the results of multiple samples. If the `analysis_group` column is present, it needs to contain a value for each sample. | | 18 | | sample | string | A single sample name for singleplexed data. For multiplex data, this will limit analysis to the single named sample. | | | 19 | 20 | 21 | ### Output Options 22 | 23 | | Nextflow parameter name | Type | Description | Help | Default | 24 | |--------------------------|------|-------------|------|---------| 25 | | out_dir | string | Directory for output of all workflow results. | | output | 26 | 27 | 28 | -------------------------------------------------------------------------------- /docs/07_outputs.md: -------------------------------------------------------------------------------- 1 | Output files may be aggregated including information for all samples or provided per sample. Per-sample files will be prefixed with respective aliases and represented below as {{ alias }}. 2 | 3 | | Title | File path | Description | Per sample or aggregated | 4 | |-------|-----------|-------------|--------------------------| 5 | | workflow report | ./wf-template-report.html | Report for all samples | aggregated | 6 | | Per file read stats | ./fastq_ingress_results/reads/fastcat_stats/per-file-stats.tsv | A TSV with per file read stats, including all samples. | aggregated | 7 | | Per read stats | ./fastq_ingress_results/reads/fastcat_stats/per-read-stats.tsv | A TSV with per read stats, including all samples. | aggregated | 8 | | Run ID's | ./fastq_ingress_results/reads/fastcat_stats/run_ids | List of run ID's present in reads. | aggregated | 9 | | Meta map json | ./fastq_ingress_results/reads/metamap.json | Meta data used in workflow presented in a JSON. | aggregated | 10 | | Concatenated sequence data | ./fastq_ingress_results/reads/{{ alias }}.fastq.gz | Per sample reads concatenated in to one fastq file. | per-sample | 11 | -------------------------------------------------------------------------------- /docs/08_pipeline_overview.md: -------------------------------------------------------------------------------- 1 | 2 | ### 1. Concatenates input files and generate per read stats. 3 | 4 | The [fastcat/bamstats](https://github.com/epi2me-labs/fastcat) tool is used to concatenate multifile samples to be processed by the workflow. It will also output per read stats including average read lengths and qualities. -------------------------------------------------------------------------------- /docs/09_troubleshooting.md: -------------------------------------------------------------------------------- 1 | 2 | + If the workflow fails please run it with the demo data set to ensure the workflow itself is working. This will help us determine if the issue is related to the environment, input parameters or a bug. 3 | + See how to interpret some common nextflow exit codes [here](https://labs.epi2me.io/trouble-shooting/). -------------------------------------------------------------------------------- /docs/10_FAQ.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | If your question is not answered here, please report any issues or suggestions on the [github issues](https://github.com/epi2me-labs/wf-template/issues) page or start a discussion on the [community](https://community.nanoporetech.com/). -------------------------------------------------------------------------------- /docs/11_other.md: -------------------------------------------------------------------------------- 1 | + [Importing third-party workflows into EPI2ME Labs](https://labs.epi2me.io/nexflow-for-epi2melabs/) 2 | 3 | See the [EPI2ME website](https://labs.epi2me.io/) for lots of other resources and blog posts. -------------------------------------------------------------------------------- /lib/ArgumentParser.groovy: -------------------------------------------------------------------------------- 1 | /* Check arguments of a Nextflow function 2 | * 3 | * Nextflow script does not support the Groovy idiom: 4 | * 5 | * def function(Map args[:], arg1, arg2, ...) 6 | * 7 | * to support unordered kwargs. The methods here are designed 8 | * to reduce boileplate while allowing Nextflow script to implement 9 | * 10 | * def function(Map args[:]) 11 | * 12 | * with required and default values. This is similar to some Python 13 | * libraries' (notably matplotlib) extensive use of things like: 14 | * 15 | * def function(*args, **kwargs) 16 | * 17 | * to implement generic APIs. Why do we want to do all this? Because 18 | * we want to write library code with a clean set of required parameters 19 | * but also extensible with non-required parameters with default values. 20 | * This allows us to later add parameters without breaking existing code, 21 | * and is very common practice elsewhere. 22 | */ 23 | 24 | import java.util.Set 25 | 26 | class ArgumentParser { 27 | Set args 28 | Map kwargs 29 | String name 30 | 31 | /* Parse arguments, raising an error on unknown keys */ 32 | public Map parse_args(LinkedHashMap given_args) { 33 | Set opt_keys = kwargs.keySet() 34 | Set given_keys = given_args.keySet() 35 | check_required(given_keys) 36 | check_unknown(given_keys, opt_keys) 37 | return kwargs + given_args 38 | } 39 | 40 | /* Parse arguments, without raising an error for extra keys */ 41 | public Map parse_known_args(LinkedHashMap given_args) { 42 | Set opt_keys = kwargs.keySet() 43 | Set given_keys = given_args.keySet() 44 | check_required(given_keys) 45 | return kwargs + given_args 46 | } 47 | 48 | private void check_required(Set given) { 49 | Set missing_keys = args - given 50 | if (!missing_keys.isEmpty()) { 51 | throw new Exception("Missing arguments for function ${name}: ${missing_keys}") 52 | } 53 | } 54 | 55 | private void check_unknown(Set given, Set kwargs_keys) { 56 | Set extra_keys = given - (args + kwargs_keys) 57 | if (!extra_keys.isEmpty()) { 58 | throw new Exception("Unknown arguments provided to function ${name}: ${extra_keys}.") 59 | } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /lib/CWUtil.groovy: -------------------------------------------------------------------------------- 1 | /* Miscellaneous utilities for workflows from the ONT Customer Workflows Group. 2 | */ 3 | class CWUtil { 4 | 5 | /* Mutate the global Nextflow params map 6 | * 7 | * Occasionally, we may wish to mutate the value of a parameter provided 8 | * by the user. Typically, this leads to workflows with `params.my_param` 9 | * and `params._my_param` which is ripe for confusion. Instead, we can 10 | * mutate the parameter value in the Nextflow params ScriptMap itself 11 | * with the following call: 12 | * 13 | * CWUtil.mutateParam(params, k, v) 14 | * 15 | * This is possible as Groovy actually has a surprisingly loose 16 | * definition of "private", and allows us to call the private `allowNames` 17 | * method on the ScriptMap which removes the read-only status for a key set. 18 | * We can follow this up with a call to the private `put0` to reinsert 19 | * the key and mark it as read-only again. 20 | */ 21 | public static void mutateParam(nf_params, key, value) { 22 | Set s = [key] // must be a set to allow call to allowNames 23 | nf_params.allowNames(s) 24 | nf_params.put0(key, value) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /lib/Pinguscript.groovy: -------------------------------------------------------------------------------- 1 | import static groovy.json.JsonOutput.toJson 2 | import groovy.json.JsonBuilder 3 | import groovy.json.JsonSlurper 4 | 5 | 6 | class Pinguscript { 7 | 8 | // Send a ping for the start of a workflow 9 | public static void ping_start(nextflow, workflow, params) { 10 | wf_ping(nextflow, workflow, "start", null, params) 11 | } 12 | // Send a ping for a completed workflow (successful or otherwise) 13 | public static void ping_complete(nextflow, workflow, params) { 14 | wf_ping(nextflow, workflow, "end", null, params) 15 | } 16 | // Send a ping for a workflow error 17 | public static void ping_error(nextflow, workflow, params) { 18 | def error_message = workflow.errorMessage 19 | wf_ping(nextflow, workflow, "error", error_message, params) 20 | } 21 | // Shared handler to construct a ping JSON and send it 22 | private static String wf_ping(nextflow, workflow, event, error_message, params) { 23 | if (params.disable_ping) { 24 | return "{}" 25 | } 26 | def body_json = make_wf_ping(nextflow, workflow, event, error_message, params) 27 | send_ping_post("epilaby", body_json) 28 | } 29 | 30 | // Helper to removing keys from a map 31 | private static clean_meta(meta, keys_to_remove) { 32 | for (key in keys_to_remove) { 33 | if (meta.containsKey(key)) { 34 | meta.remove(key) 35 | } 36 | } 37 | } 38 | 39 | // Helper for fetching a key from the params map 40 | // seems pointless but you just know someone is going to end up writing meta.this ? meta.that 41 | private static get_meta(meta, key) { 42 | (meta.containsKey(key) && meta[key]) ? meta[key].toString() : null 43 | } 44 | 45 | // Construct workflow ping JSON 46 | private static String make_wf_ping(nextflow, workflow, event, error_message, params) { 47 | // cheeky deepcopy using json 48 | String paramsJSON = new JsonBuilder(params).toPrettyString() 49 | def params_data = new JsonSlurper().parseText(paramsJSON) 50 | 51 | // OS 52 | // TODO check version on WSL 53 | def opsys = System.properties['os.name'].toLowerCase() 54 | def opver = System.properties['os.version'] 55 | if (opver.toLowerCase().contains("wsl")){ 56 | opsys = "wsl" 57 | } 58 | 59 | // placeholder for any future okta business 60 | // for now we'll use the guest_ sent to wf.epi2me_user 61 | def user = get_meta(params.wf, "epi2me_user") 62 | 63 | // drop cruft to save some precious bytes 64 | // affects the deep copy rather than original params 65 | clean_meta(params_data, [ 66 | "schema_ignore_params", 67 | ]) 68 | def ingress_ids = [] 69 | if (params_data.containsKey("wf")) { 70 | ingress_ids = params_data.wf["ingress.run_ids"] ?: [] 71 | clean_meta(params_data.wf, [ 72 | "agent", // we send this later 73 | "epi2me_instance", // we send this later 74 | "epi2me_user", // we send this later 75 | "example_cmd", 76 | "ingress.run_ids", // we will send this elsewhere 77 | ]) 78 | } 79 | 80 | // try and get runtime information 81 | def cpus = null 82 | try { 83 | cpus = Runtime.getRuntime().availableProcessors() 84 | } 85 | catch(Exception e) {} 86 | 87 | def workflow_success = null 88 | def workflow_exitcode = null 89 | if (event != "start") { 90 | workflow_success = workflow.success 91 | workflow_exitcode = workflow.exitStatus 92 | } 93 | 94 | /// build message 95 | def body_json = new JsonBuilder() 96 | body_json \ 97 | "tracking_id": [ 98 | "msg_id": UUID.randomUUID().toString(), 99 | "version": "3.0.1" 100 | ], 101 | "source": "workflow", 102 | "event": event, 103 | "params": params_data, 104 | // data will be null on start events, as ingress has not run 105 | "data": event != "start" ? [run_ids: ingress_ids] : null, 106 | "workflow": [ 107 | "name": workflow.manifest.name, 108 | "version": workflow.manifest.version, // could use NfcoreTemplate.version(workflow) 109 | "run_name": workflow.runName, // required to disambiguate sessions 110 | "session": workflow.sessionId, 111 | "profile": workflow.profile, 112 | "resume": workflow.resume, 113 | "error": error_message, // null if no error 114 | "success": workflow_success, 115 | "exitcode": workflow_exitcode, 116 | ], 117 | "env": [ 118 | "user": user, // placeholder for any future okta 119 | "os": [ 120 | "name": opsys, 121 | "version": opver 122 | ], 123 | "resource": [ 124 | "cpus": cpus, 125 | "memory": null, // placeholder, no point asking via Runtime as it will just give us the Xmx size 126 | ], 127 | "agent": get_meta(params.wf, "agent"), // access via original params 128 | "epi2me": [ 129 | "instance": get_meta(params.wf, "epi2me_instance"), 130 | "user": user, 131 | ], 132 | "nextflow": [ 133 | "version": nextflow.version.toString(), 134 | "version_compat": nextflow.version.matches(workflow.manifest.nextflowVersion) 135 | ] 136 | ] 137 | return body_json 138 | } 139 | 140 | // Send a JSON payload to a given endpoint 141 | private static String send_ping_post(endpoint, body_json) { 142 | // Attempt to send payload and absorb any possible Exception gracefully 143 | String postResult 144 | boolean raise_exception = false 145 | try { 146 | ((HttpURLConnection)new URL("https://ping.oxfordnanoportal.com/${endpoint}").openConnection()).with({ 147 | requestMethod = 'POST' 148 | doOutput = true 149 | setConnectTimeout(5000) 150 | setReadTimeout(10000) 151 | setRequestProperty('Content-Type', 'application/json') 152 | setRequestProperty('accept', 'application/json') 153 | outputStream.withPrintWriter({printWriter -> 154 | printWriter.write(body_json.toString()) 155 | }) 156 | 157 | // Rethrow exceptions that imply we're not using this endpoint properly 158 | if(responseCode >= 400 && agent.toString() == "cw-ci") { 159 | raise_exception = true 160 | } 161 | // Accessing inputStream.text will raise an Exception for failed requests 162 | postResult = inputStream.text 163 | }) 164 | } 165 | catch(Exception e) { 166 | if(raise_exception) { throw e } 167 | } 168 | return (postResult) 169 | } 170 | } 171 | -------------------------------------------------------------------------------- /lib/WorkflowMain.groovy: -------------------------------------------------------------------------------- 1 | // This file is based on the nf-core/tools pipeline-template. 2 | // Changes to this file must be propagated via wf-template. 3 | 4 | class WorkflowMain { 5 | 6 | // Citation string for pipeline 7 | public static String citation(workflow) { 8 | return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + 9 | "* The nf-core framework\n" + 10 | " https://doi.org/10.1038/s41587-020-0439-x\n\n" 11 | } 12 | 13 | // Generate help string 14 | public static String help(workflow, params, log) { 15 | String line_sep = ' \\ \n\t' 16 | String command_example = params.wf.example_cmd.join(line_sep) 17 | String command = 'nextflow run ' + workflow.manifest.name + line_sep + command_example 18 | String help_string = '' 19 | help_string += NfcoreTemplate.logo(workflow, params.monochrome_logs) 20 | help_string += NfcoreSchema.paramsHelp(workflow, params, command) 21 | help_string += '\n' + citation(workflow) + '\n' 22 | return help_string 23 | } 24 | 25 | // Generate parameter summary log string 26 | public static String paramsSummaryLog(workflow, params, log) { 27 | String workflow_version = NfcoreTemplate.version(workflow) 28 | String summary_log = '' 29 | summary_log += NfcoreTemplate.logo(workflow, params.monochrome_logs) 30 | summary_log += NfcoreSchema.paramsSummaryLog(workflow, params) 31 | summary_log += '\n' + citation(workflow) + '\n' 32 | summary_log += NfcoreTemplate.dashedLine(params.monochrome_logs) 33 | summary_log += "\nThis is ${workflow.manifest.name} ${workflow_version}.\n" 34 | summary_log += NfcoreTemplate.dashedLine(params.monochrome_logs) 35 | return summary_log 36 | } 37 | 38 | // Validate parameters and print summary to screen 39 | public static void initialise(workflow, params, log) { 40 | // Print help to screen if required 41 | if (params.help) { 42 | log.info help(workflow, params, log) 43 | System.exit(0) 44 | } 45 | 46 | // Print workflow version and exit on --version 47 | if (params.version) { 48 | String workflow_version = NfcoreTemplate.version(workflow) 49 | log.info "${workflow.manifest.name} ${workflow_version}" 50 | System.exit(0) 51 | } 52 | 53 | // Explode on conda 54 | // conda.enabled seems to be backward compatible but wrap this 55 | // in a generic catch just in case 56 | try { 57 | if (workflow.session.config.conda.enabled) { 58 | log.error "Sorry, this workflow is not compatible with Conda, please use -profile standard (Docker) or -profile singularity." 59 | System.exit(1) 60 | } 61 | } catch(Exception e) {} 62 | 63 | // Validate workflow parameters via the JSON schema 64 | if (params.validate_params) { 65 | NfcoreSchema.validateParameters(workflow, params, log) 66 | } 67 | 68 | // Print parameter summary log to screen 69 | log.info paramsSummaryLog(workflow, params, log) 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /lib/common.nf: -------------------------------------------------------------------------------- 1 | import groovy.json.JsonBuilder 2 | 3 | process getParams { 4 | label "wf_common" 5 | publishDir "${params.out_dir}", mode: 'copy', pattern: "params.json" 6 | cache false 7 | cpus 1 8 | memory "2 GB" 9 | output: 10 | path "params.json" 11 | script: 12 | def paramsJSON = new JsonBuilder(params).toPrettyString().replaceAll("'", "'\\\\''") 13 | """ 14 | # Output nextflow params object to JSON 15 | echo '$paramsJSON' > params.json 16 | """ 17 | } 18 | 19 | process configure_igv { 20 | publishDir "${params.out_dir}/", mode: 'copy', pattern: 'igv.json', enabled: params.containsKey("igv") && params.igv 21 | label "wf_common" 22 | cpus 1 23 | memory "2 GB" 24 | input: 25 | // the python script will work out what to do with all the files based on their 26 | // extensions 27 | path "file-names.txt" 28 | val locus_str 29 | val aln_extra_opts 30 | val var_extra_opts 31 | output: path "igv.json" 32 | script: 33 | // the locus argument just makes sure that the initial view in IGV shows something 34 | // interesting 35 | String locus_arg = locus_str ? "--locus $locus_str" : "" 36 | // extra options for alignment tracks 37 | def aln_opts_json_str = \ 38 | aln_extra_opts ? new JsonBuilder(aln_extra_opts).toPrettyString() : "" 39 | String aln_extra_opts_arg = \ 40 | aln_extra_opts ? "--extra-alignment-opts extra-aln-opts.json" : "" 41 | // extra options for variant tracks 42 | def var_opts_json_str = \ 43 | var_extra_opts ? new JsonBuilder(var_extra_opts).toPrettyString() : "" 44 | String var_extra_opts_arg = \ 45 | var_extra_opts ? "--extra-vcf-opts extra-var-opts.json" : "" 46 | """ 47 | # write out JSON files with extra options for the alignment and variant tracks 48 | echo '$aln_opts_json_str' > extra-aln-opts.json 49 | echo '$var_opts_json_str' > extra-var-opts.json 50 | 51 | workflow-glue configure_igv \ 52 | --fofn file-names.txt \ 53 | $locus_arg \ 54 | $aln_extra_opts_arg \ 55 | $var_extra_opts_arg \ 56 | > igv.json 57 | """ 58 | } 59 | 60 | -------------------------------------------------------------------------------- /lib/nfcore_external_java_deps.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/lib/nfcore_external_java_deps.jar -------------------------------------------------------------------------------- /nextflow.config: -------------------------------------------------------------------------------- 1 | // 2 | // Notes to End Users. 3 | // 4 | // The workflow should run without editing this configuration file, 5 | // however there may be instances in which you wish to edit this 6 | // file for compute performance or other reasons. Please see: 7 | // 8 | // https://nextflow.io/docs/latest/config.html#configuration 9 | // 10 | // for further help editing this file. 11 | 12 | 13 | params { 14 | help = false 15 | version = false 16 | fastq = null 17 | bam = null 18 | out_dir = "output" 19 | sample = null 20 | sample_sheet = null 21 | client_fields = null 22 | aws_image_prefix = null 23 | aws_queue = null 24 | disable_ping = false 25 | analyse_unclassified = false 26 | analyse_fail = false 27 | watch_path = false 28 | // This parameter may be be discarded if the workflow does not require chunking of fastq data 29 | fastq_chunk = null 30 | 31 | monochrome_logs = false 32 | validate_params = true 33 | show_hidden_params = false 34 | 35 | schema_ignore_params = 'show_hidden_params,validate_params,monochrome_logs,aws_queue,aws_image_prefix,wf,store_dir' 36 | 37 | wf { 38 | fastcat_stats = true 39 | bamstats = true 40 | keep_unaligned = false 41 | return_fastq = false 42 | per_read_stats = false 43 | allow_multiple_basecall_models = false 44 | example_cmd = [ 45 | "--fastq 'wf-template-demo/test_data/reads.fastq.gz'", 46 | ] 47 | common_sha = "sha1c69fd30053aad5d516e9567b3944384325a0fee" 48 | agent = null 49 | epi2me_instance = null 50 | epi2me_user = null 51 | } 52 | } 53 | 54 | manifest { 55 | name = 'epi2me-labs/wf-template' 56 | author = 'Oxford Nanopore Technologies' 57 | homePage = 'https://github.com/epi2me-labs/wf-template' 58 | description = 'Template workflow' 59 | mainScript = 'main.nf' 60 | nextflowVersion = '>=23.04.2' 61 | version = 'v5.6.1' 62 | } 63 | 64 | 65 | // used by default for "standard" (docker) and singularity profiles, 66 | // other profiles may override. 67 | process { 68 | withLabel:wf_common { 69 | container = "ontresearch/wf-common:${params.wf.common_sha}" 70 | } 71 | withLabel:wftemplate { 72 | container = "ontresearch/wf-common:${params.wf.common_sha}" 73 | } 74 | shell = ['/bin/bash', '-euo', 'pipefail'] 75 | } 76 | 77 | 78 | profiles { 79 | // the "standard" profile is used implicitely by nextflow 80 | // if no other profile is given on the CLI 81 | standard { 82 | docker { 83 | enabled = true 84 | // this ensures container is run as host user and group, but 85 | // also adds host user to the within-container group 86 | runOptions = "--user \$(id -u):\$(id -g) --group-add 100" 87 | } 88 | } 89 | 90 | // using singularity instead of docker 91 | singularity { 92 | singularity { 93 | enabled = true 94 | autoMounts = true 95 | } 96 | } 97 | 98 | 99 | // keep stub conda profile to prevent unknown profile warning so users get a better error 100 | conda { 101 | conda.enabled = true 102 | } 103 | 104 | // Using AWS batch. 105 | // May need to set aws.region and aws.batch.cliPath 106 | awsbatch { 107 | process { 108 | executor = 'awsbatch' 109 | queue = "${params.aws_queue}" 110 | memory = '8G' 111 | withLabel:wf_common { 112 | container = "${params.aws_image_prefix}-wf-common:${params.wf.common_sha}" 113 | } 114 | withLabel:wftemplate { 115 | container = "${params.aws_image_prefix}-wf-common:${params.wf.common_sha}" 116 | } 117 | shell = ['/bin/bash', '-euo', 'pipefail'] 118 | } 119 | } 120 | 121 | // local profile for simplified development testing 122 | local { 123 | process.executor = 'local' 124 | } 125 | } 126 | 127 | 128 | timeline { 129 | enabled = true 130 | overwrite = true 131 | file = "${params.out_dir}/execution/timeline.html" 132 | } 133 | report { 134 | enabled = true 135 | overwrite = true 136 | file = "${params.out_dir}/execution/report.html" 137 | } 138 | trace { 139 | enabled = true 140 | overwrite = true 141 | file = "${params.out_dir}/execution/trace.txt" 142 | } 143 | 144 | env { 145 | PYTHONNOUSERSITE = 1 146 | JAVA_TOOL_OPTIONS = "-Xlog:disable -Xlog:all=warning:stderr" 147 | } 148 | -------------------------------------------------------------------------------- /output_definition.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": { 3 | "workflow-report": { 4 | "filepath": "./wf-template-report.html", 5 | "title": "workflow report", 6 | "description": "Report for all samples", 7 | "mime-type": "text/html", 8 | "optional": false, 9 | "type": "aggregated" 10 | }, 11 | "read-stats-per-file": { 12 | "filepath": "./fastq_ingress_results/reads/fastcat_stats/per-file-stats.tsv", 13 | "title": "Per file read stats", 14 | "description": "A TSV with per file read stats, including all samples.", 15 | "mime-type": "text/tsv", 16 | "optional": false, 17 | "type": "aggregated" 18 | }, 19 | "read-stats-per-read": { 20 | "filepath": "./fastq_ingress_results/reads/fastcat_stats/per-read-stats.tsv", 21 | "title": "Per read stats", 22 | "description": "A TSV with per read stats, including all samples.", 23 | "mime-type": "text/tsv", 24 | "optional": false, 25 | "type": "aggregated" 26 | }, 27 | "run-ids": { 28 | "filepath": "./fastq_ingress_results/reads/fastcat_stats/run_ids", 29 | "title": "Run ID's", 30 | "description": "List of run ID's present in reads.", 31 | "mime-type": "text/txt", 32 | "optional": false, 33 | "type": "aggregated" 34 | }, 35 | "metamap": { 36 | "filepath": "./fastq_ingress_results/reads/metamap.json", 37 | "title": "Meta map json", 38 | "description": "Meta data used in workflow presented in a JSON.", 39 | "mime-type": "text/json", 40 | "optional": false, 41 | "type": "aggregated" 42 | }, 43 | "sample-data": { 44 | "filepath": "./fastq_ingress_results/reads/{{ alias }}.fastq.gz", 45 | "title": "Concatenated sequence data", 46 | "description": "Per sample reads concatenated in to one fastq file.", 47 | "mime-type": "text/json", 48 | "optional": false, 49 | "type": "per-sample" 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /test/run_ingress_test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -exo pipefail 3 | 4 | get-test_data-from-aws () { 5 | # get aws-cli 6 | curl -s "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" 7 | unzip -q awscliv2.zip 8 | 9 | # get test data 10 | aws/dist/aws s3 cp --recursive --quiet --no-sign-request \ 11 | "$S3_TEST_DATA" \ 12 | test_data_from_S3 13 | } 14 | 15 | sample_sheet="" 16 | chunks="" 17 | 18 | while getopts 's:c:' option; do 19 | case "$option" in 20 | s ) sample_sheet=$OPTARG;; 21 | c ) chunks="--chunk $OPTARG";; 22 | esac 23 | done 24 | input_path=${@:$OPTIND:1} 25 | input_type=${@:$OPTIND+1:1} 26 | wf_output_dir=${@:$OPTIND+2:1} 27 | 28 | valid=true 29 | if [ -z $input_path ]; then valid=false; fi 30 | if [ -z $input_type ]; then valid=false; fi 31 | if [ -z $wf_output_dir ]; then valid=false; fi 32 | if ! $valid; then 33 | echo "run_ingress_test.sh [-s sample_sheet] [-c chunksize] input input_type output" 34 | exit 1 35 | fi 36 | 37 | # get test data from s3 if required 38 | if [[ $input_path =~ ^s3:// ]]; then 39 | get-test_data-from-aws 40 | input_path="$PWD/test_data_from_S3/${input_path#*test_data/}" 41 | [[ -n $sample_sheet ]] && 42 | sample_sheet="$PWD/test_data_from_S3/${sample_sheet#*test_data/}" 43 | fi 44 | 45 | # add CWD if paths are relative 46 | [[ ( $input_path != /* ) ]] && input_path="$PWD/$input_path" 47 | [[ ( $wf_output_dir != /* ) ]] && wf_output_dir="$PWD/$wf_output_dir" 48 | [[ ( -n $sample_sheet ) && ( $sample_sheet != /* ) ]] && 49 | sample_sheet="$PWD/$sample_sheet" 50 | 51 | # add flags to parameters (`$input_path` could contain a space; so need to use an array 52 | # here) 53 | input_path=("--input" "$input_path") 54 | input_type="--type $input_type" 55 | wf_output_dir="--wf-output-dir $wf_output_dir" 56 | [[ -n $sample_sheet ]] && sample_sheet="--sample_sheet $sample_sheet" 57 | 58 | # get container hash from config 59 | img_hash=$(grep 'common_sha.\?=' nextflow.config | grep -oE '(mr[0-9]+_)?sha[0-9,a-f,A-F]+') 60 | 61 | # run test 62 | docker run -u $(id -u) -v "$PWD":"$PWD" \ 63 | ontresearch/wf-common:"$img_hash" \ 64 | python "$PWD/test/test_ingress.py" "${input_path[@]}" $input_type $wf_output_dir $sample_sheet $chunks 65 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/README: -------------------------------------------------------------------------------- 1 | # top-level directory --> take case01 2 | # `reads0` and `reads1` have their own run IDs and `reads2` has a mixture of 3 | # both (unordered) 4 | ├── case01 5 | │   ├── garbage.txt 6 | │   ├── reads0.fastq 7 | │   ├── reads1.fastq 8 | │   └── reads2.fastq 9 | 10 | # take dir01, dir02, dir03 11 | ├── case02 12 | │   ├── dir01 13 | │   │   ├── garbage.txt 14 | │   │   ├── reads0.fastq 15 | │   │   ├── reads1.fastq 16 | │   │   └── reads2.fastq 17 | │   ├── dir02 18 | │   │   ├── reads0.fastq 19 | │   │   ├── reads1.fastq 20 | │   │   └── reads2.fastq 21 | │   ├── dir03 22 | │   │   └── reads0.fastq 23 | │   └── dir4 24 | │   └── garbage.txt 25 | 26 | # throw error 'Input directory ... cannot contain fastq files and sub-directories.' 27 | ├── case03 28 | │   ├── extra-reads.fastq 29 | │   ├── george 30 | │   │   ├── reads0.fastq 31 | │   │   ├── reads1.fastq 32 | │   │   └── reads2.fastq 33 | │   ├── john 34 | │   │   ├── reads0.fastq 35 | │   │   └── reads1.fastq 36 | │   ├── paul 37 | │   │   └── reads0.fastq 38 | │   └── ringo 39 | │   └── reads1.fastq 40 | 41 | # top-level directory but with all possible FASTQ file extensions --> take case04 42 | ├── case04 43 | │   ├── reads01.fastq 44 | │   ├── reads02.fastq.gz 45 | │   ├── reads03.fq 46 | │   └── reads03.fq.gz 47 | 48 | # take barcode01, barcode02, barcode03 49 | ├── case05 50 | │   ├── barcode01 51 | │   │   ├── reads0.fastq 52 | │   │   ├── reads1.fastq 53 | │   │   └── reads2.fastq 54 | │   ├── barcode02 55 | │   │   ├── reads0.fastq 56 | │   │   ├── reads1.fastq 57 | │   │   └── reads2.fastq 58 | │   ├── barcode03 59 | │   │   └── reads0.fastq 60 | │   └── sample_sheet.csv 61 | 62 | # take barcode01, barcode02 (barcode03 not in sample sheet) 63 | ├── case06 64 | │   ├── barcode01 65 | │   │   ├── reads0.fastq 66 | │   │   ├── reads1.fastq 67 | │   │   └── reads2.fastq 68 | │   ├── barcode02 69 | │   │   ├── reads0.fastq 70 | │   │   ├── reads1.fastq 71 | │   │   └── reads2.fastq 72 | │   ├── barcode03 73 | │   │   └── reads0.fastq 74 | │   └── sample_sheet.csv 75 | 76 | # take barcode01, barcode02, barcode03 (barcode04 in sample sheet but no directory) 77 | ├── case07 78 | │   ├── barcode01 79 | │   │   ├── reads0.fastq 80 | │   │   ├── reads1.fastq 81 | │   │   └── reads2.fastq 82 | │   ├── barcode02 83 | │   │   ├── reads0.fastq 84 | │   │   ├── reads1.fastq 85 | │   │   └── reads2.fastq 86 | │   ├── barcode03 87 | │   │   └── reads0.fastq 88 | │   └── sample_sheet.csv 89 | 90 | # take dir01, dir02, dir03, and unclassified based on the eponymous parameter 91 | ├── case08 92 | │   ├── dir01 93 | │   │   ├── garbage.txt 94 | │   │   ├── reads0.fastq 95 | │   │   ├── reads1.fastq 96 | │   │   └── reads2.fastq 97 | │   ├── dir02 98 | │   │   ├── reads0.fastq 99 | │   │   ├── reads1.fastq 100 | │   │   └── reads2.fastq 101 | │   ├── dir03 102 | │   │   └── reads0.fastq 103 | │   └── unclassified 104 | │   └── reads0.fastq 105 | 106 | # take dir01, dir02, dir03 (we allow sub-sub-dirs as long as they don't contain FASTQ files) 107 | ├── case09 108 | │ ├── dir01 109 | │ │ ├── garbage.txt 110 | │ │ ├── reads0.fastq 111 | │ │ ├── reads1.fastq 112 | │ │ └── reads2.fastq 113 | │ ├── dir02 114 | │ │ ├── reads0.fastq 115 | │ │ ├── reads1.fastq 116 | │ │ └── reads2.fastq 117 | │ └── dir03 118 | │ ├── garbage 119 | │ │ └── garbage.txt 120 | │ └── reads0.fastq 121 | 122 | # throw error 'Input directory ... cannot contain more than one level of sub-directories with FASTQ files.' 123 | ├── case10 124 | │ ├── dir01 125 | │ │ ├── garbage.txt 126 | │ │ ├── reads0.fastq 127 | │ │ ├── reads1.fastq 128 | │ │ └── reads2.fastq 129 | │ ├── dir02 130 | │ │ ├── reads0.fastq 131 | │ │ ├── reads1.fastq 132 | │ │ └── reads2.fastq 133 | │ └── dir03 134 | │ ├── garbage 135 | │ │ ├── garbage.txt 136 | │ │ └── reads0.fastq 137 | │ └── reads0.fastq 138 | 139 | # throw error 'Invalid sample sheet: values in 'alias' column not unique.' 140 | ├── case11 141 | │ ├── barcode01 142 | │ │ ├── reads0.fastq 143 | │ │ ├── reads1.fastq 144 | │ │ └── reads2.fastq 145 | │ ├── barcode02 146 | │ │ ├── reads0.fastq 147 | │ │ ├── reads1.fastq 148 | │ │ └── reads2.fastq 149 | │ ├── barcode03 150 | │ │ └── reads0.fastq 151 | │ └── sample_sheet.csv 152 | 153 | # throw error 'Input directory ... must contain either FASTQ files or sub-directories containing FASTQ files.' 154 | ├── case12 155 | │ ├── barcode01 156 | │ ├── barcode02 157 | │ ├── barcode03 158 | │ └── sample_sheet.csv 159 | 160 | # top-level directory --> take case13 (we ignore sub-dirs that don't contain FASTQ files) 161 | ├── case13 162 | │ ├── garbage 163 | │ │ └── garbage.txt 164 | │ ├── reads01.fastq 165 | │ ├── reads02.fastq.gz 166 | │ ├── reads03.fq 167 | │ └── reads04.fq.gz 168 | 169 | # whitespace in FASTQ file name 170 | ├── case14 171 | │ └── reads01 space.fastq 172 | 173 | # whitespace in directory name 174 | ├── case 15 175 | │ └── reads01 space.fastq 176 | 177 | # Correctly formatted client fields JSON - report will display client fields 178 | ├── case16 179 | │ ├── barcode01 180 | │ │ ├── reads0.fastq 181 | │ │ ├── reads1.fastq 182 | │ │ └── reads2.fastq 183 | │ ├── barcode02 184 | │ │ ├── reads0.fastq 185 | │ │ ├── reads1.fastq 186 | │ │ └── reads2.fastq 187 | │ ├── barcode03 188 | │ │ └── reads0.fastq 189 | │ ├── client_fields.json 190 | │ └── sample_sheet.csv 191 | 192 | # Client fields JSON is malformed, report will display error 193 | ├── case17 194 | │ ├── barcode01 195 | │ │ ├── reads0.fastq 196 | │ │ ├── reads1.fastq 197 | │ │ └── reads2.fastq 198 | │ ├── barcode02 199 | │ │ ├── reads0.fastq 200 | │ │ ├── reads1.fastq 201 | │ │ └── reads2.fastq 202 | │ ├── barcode03 203 | │ │ └── reads0.fastq 204 | │ ├── client_fields.json 205 | │ └── sample_sheet.csv 206 | 207 | # Sample sheet contains "group" column 208 | ├── case18 209 | │ ├── barcode01 210 | │ │ ├── reads0.fastq 211 | │ │ ├── reads1.fastq 212 | │ │ └── reads2.fastq 213 | │ ├── barcode02 214 | │ │ ├── reads0.fastq 215 | │ │ ├── reads1.fastq 216 | │ │ └── reads2.fastq 217 | │ ├── barcode03 218 | │ │ └── reads0.fastq 219 | │ └── sample_sheet.csv 220 | 221 | # FASTQ headers contain basecaller info in form of `basecall_model_version_id=` 222 | ├── case19 223 | │ ├── dir01 224 | │ │ ├── garbage.txt 225 | │ │ ├── reads0.fastq 226 | │ │ ├── reads1.fastq 227 | │ │ └── reads2.fastq 228 | │ ├── dir02 229 | │ │ ├── reads0.fastq 230 | │ │ ├── reads1.fastq 231 | │ │ └── reads2.fastq 232 | │ ├── dir03 233 | │ │ └── reads0.fastq 234 | │ └── dir04 235 | │ └── garbage.txt 236 | 237 | # FASTQ headers contain RG tag in form of 'RG:Z:' (like when generated with `samtools fastq` from dorado BAM output) 238 | ├── case20 239 | │ └── reads.fq 240 | 241 | # FASTQ headers without run ID or basecaller information 242 | ├── case21 243 | │ └── reads.fq 244 | 245 | # Two basecall models in the same sample 246 | ├── case22 247 | │ ├── reads0.fastq 248 | │ └── reads1.fastq 249 | 250 | # take empty fastq 251 | ├── case23 252 | │ ├── empty.fq 253 | 254 | # take empty fastq 255 | ├── case24 256 | │ ├── empty.fq.gz # (gzip) 257 | 258 | # Single quotes in directory and file name 259 | ├── case'25 260 | │ ├── reads'01.fastq -------------------------------------------------------------------------------- /test_data/fastq_ingress/case01/garbage.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/fastq_ingress/case01/garbage.txt -------------------------------------------------------------------------------- /test_data/fastq_ingress/case01/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case01-reads0-01 runid=0000000000000000000000000000000000000000 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case01-reads0-02 runid=0000000000000000000000000000000000000000 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case01-reads0-03 runid=0000000000000000000000000000000000000000 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case01/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case01-reads1-01 runid=1111111111111111111111111111111111111111 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case01-reads1-02 runid=1111111111111111111111111111111111111111 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case01-reads1-03 runid=1111111111111111111111111111111111111111 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case01/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case01-reads2-01 runid=1111111111111111111111111111111111111111 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case01-reads2-02 runid=0000000000000000000000000000000000000000 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case01-reads2-03 runid=1111111111111111111111111111111111111111 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case02/dir01/garbage.txt: -------------------------------------------------------------------------------- 1 | garbage 2 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case02/dir01/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case02-dir01-reads0-01 runid=6942665d9bb444c2b1b829716e6d598feb66a934 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case02-dir01-reads0-02 runid=6942665d9bb444c2b1b829716e6d598feb66a934 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case02-dir01-reads0-03 runid=6942665d9bb444c2b1b829716e6d598feb66a934 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case02/dir01/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case02-dir01-reads1-01 runid=06271005de516bb3556fb3b602fc3dc702e882e2 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case02-dir01-reads1-02 runid=06271005de516bb3556fb3b602fc3dc702e882e2 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case02-dir01-reads1-03 runid=06271005de516bb3556fb3b602fc3dc702e882e2 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case02/dir01/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case02-dir01-reads2-01 runid=75fdcf189562fe5c634abe734686712117fcbbc6 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case02-dir01-reads2-02 runid=75fdcf189562fe5c634abe734686712117fcbbc6 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case02-dir01-reads2-03 runid=75fdcf189562fe5c634abe734686712117fcbbc6 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case02/dir02/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case02-dir02-reads0-01 runid=aa23aa535780827472a5caab28cd1e8a546c2bc8 barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case02-dir02-reads0-02 runid=aa23aa535780827472a5caab28cd1e8a546c2bc8 barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case02-dir02-reads0-03 runid=aa23aa535780827472a5caab28cd1e8a546c2bc8 barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case02/dir02/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case02-dir02-reads1-01 runid=437e159eab183feee47df782601d34bc5d6470cf barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case02-dir02-reads1-02 runid=437e159eab183feee47df782601d34bc5d6470cf barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case02-dir02-reads1-03 runid=437e159eab183feee47df782601d34bc5d6470cf barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case02/dir02/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case02-dir02-reads2-01 runid=eb270f11b68a8325308ccef0078e3a150f0f5c52 barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case02-dir02-reads2-02 runid=eb270f11b68a8325308ccef0078e3a150f0f5c52 barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case02-dir02-reads2-03 runid=eb270f11b68a8325308ccef0078e3a150f0f5c52 barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case02/dir03/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case02-dir03-reads0-01 runid=5e2830da13ef4aed55f0ed668328642d16e1b7db barcode=barcode03 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case02-dir03-reads0-02 runid=5e2830da13ef4aed55f0ed668328642d16e1b7db barcode=barcode03 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case02-dir03-reads0-03 runid=5e2830da13ef4aed55f0ed668328642d16e1b7db barcode=barcode03 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case02/dir04/garbage.txt: -------------------------------------------------------------------------------- 1 | garbage 2 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case03/extra-reads.fastq: -------------------------------------------------------------------------------- 1 | @case03-extra-reads-01 runid=0e5bd3538c4b87406827c792b1f540961300a876 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case03-extra-reads-02 runid=0e5bd3538c4b87406827c792b1f540961300a876 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case03-extra-reads-03 runid=0e5bd3538c4b87406827c792b1f540961300a876 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case03/george/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case03-george-reads0-01 runid=2599b7374b756fed182703cfc32f2ebf01230159 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case03-george-reads0-02 runid=2599b7374b756fed182703cfc32f2ebf01230159 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case03-george-reads0-03 runid=2599b7374b756fed182703cfc32f2ebf01230159 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case03/george/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case03-george-reads1-01 runid=4cde7cef1b3611a19899aa5943b860491bf398d1 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case03-george-reads1-02 runid=4cde7cef1b3611a19899aa5943b860491bf398d1 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case03-george-reads1-03 runid=4cde7cef1b3611a19899aa5943b860491bf398d1 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case03/george/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case03-george-reads2-01 runid=85d33b6c810fd8abca5f8ad6e6e6328869f378d4 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case03-george-reads2-02 runid=85d33b6c810fd8abca5f8ad6e6e6328869f378d4 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case03-george-reads2-03 runid=85d33b6c810fd8abca5f8ad6e6e6328869f378d4 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case03/john/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case03-john-reads0-01 runid=0d3ff8b37e73bbb9b5263c40c53f9c3da5b2ac1b barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case03-john-reads0-02 runid=0d3ff8b37e73bbb9b5263c40c53f9c3da5b2ac1b barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case03-john-reads0-03 runid=0d3ff8b37e73bbb9b5263c40c53f9c3da5b2ac1b barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case03/john/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case03-john-reads1-01 runid=1a44f499439eabfd60a171ca2614ee5766c74368 barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case03-john-reads1-02 runid=1a44f499439eabfd60a171ca2614ee5766c74368 barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case03-john-reads1-03 runid=1a44f499439eabfd60a171ca2614ee5766c74368 barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case03/paul/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case03-paul-reads0-01 runid=7ea0992aed9e92ff29fd84aa573bc1bcfddee257 barcode=barcode03 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case03-paul-reads0-02 runid=7ea0992aed9e92ff29fd84aa573bc1bcfddee257 barcode=barcode03 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case03-paul-reads0-03 runid=7ea0992aed9e92ff29fd84aa573bc1bcfddee257 barcode=barcode03 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case03/ringo/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case03-ringo-reads1-01 runid=bbe068cbd5105b539726f270188b1a34e306e131 barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case03-ringo-reads1-02 runid=bbe068cbd5105b539726f270188b1a34e306e131 barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case03-ringo-reads1-03 runid=bbe068cbd5105b539726f270188b1a34e306e131 barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case04/reads02.fastq.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/fastq_ingress/case04/reads02.fastq.gz -------------------------------------------------------------------------------- /test_data/fastq_ingress/case04/reads04.fq.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/fastq_ingress/case04/reads04.fq.gz -------------------------------------------------------------------------------- /test_data/fastq_ingress/case05/barcode01/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case05-barcode01-reads0-01 runid=520dd86bce9260aee89e71443c0acc2b0f4ae31d barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case05-barcode01-reads0-02 runid=520dd86bce9260aee89e71443c0acc2b0f4ae31d barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case05-barcode01-reads0-03 runid=520dd86bce9260aee89e71443c0acc2b0f4ae31d barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case05/barcode01/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case05-barcode01-reads1-01 runid=575d101f3ab969962381ff8c14da7044d2f0f4cb barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case05-barcode01-reads1-02 runid=575d101f3ab969962381ff8c14da7044d2f0f4cb barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case05-barcode01-reads1-03 runid=575d101f3ab969962381ff8c14da7044d2f0f4cb barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case05/barcode01/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case05-barcode01-reads2-01 runid=02381223bbffa5eafdaf81406125ab48a23065cc barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case05-barcode01-reads2-02 runid=02381223bbffa5eafdaf81406125ab48a23065cc barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case05-barcode01-reads2-03 runid=02381223bbffa5eafdaf81406125ab48a23065cc barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case05/barcode02/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case05-barcode02-reads0-01 runid=a0b9d9b8a1e0d0ad02a56ded64824909548e1cc6 barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case05-barcode02-reads0-02 runid=a0b9d9b8a1e0d0ad02a56ded64824909548e1cc6 barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case05-barcode02-reads0-03 runid=a0b9d9b8a1e0d0ad02a56ded64824909548e1cc6 barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case05/barcode02/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case05-barcode02-reads1-01 runid=e7d4546d3a91e9d1fa13e043a2eacc5b6cdd5928 barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case05-barcode02-reads1-02 runid=e7d4546d3a91e9d1fa13e043a2eacc5b6cdd5928 barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case05-barcode02-reads1-03 runid=e7d4546d3a91e9d1fa13e043a2eacc5b6cdd5928 barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case05/barcode02/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case05-barcode02-reads2-01 runid=b69bd5402121c399c938c14f59f042cc4799e2e5 barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case05-barcode02-reads2-02 runid=b69bd5402121c399c938c14f59f042cc4799e2e5 barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case05-barcode02-reads2-03 runid=b69bd5402121c399c938c14f59f042cc4799e2e5 barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case05/barcode03/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case05-barcode03-reads0-01 runid=8176391995ed70fb11475d0b74efe76d42a77b01 barcode=barcode03 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case05-barcode03-reads0-02 runid=8176391995ed70fb11475d0b74efe76d42a77b01 barcode=barcode03 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case05-barcode03-reads0-03 runid=8176391995ed70fb11475d0b74efe76d42a77b01 barcode=barcode03 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case05/sample_sheet.csv: -------------------------------------------------------------------------------- 1 | barcode,alias,type 2 | barcode01,sample1,test_sample 3 | barcode02,sample2,positive_control 4 | barcode03,sample3,no_template_control 5 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case06/barcode01/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode01-reads0-01 runid=c30df96446bd568dd414fad0d108593635f3a770 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode01-reads0-02 runid=c30df96446bd568dd414fad0d108593635f3a770 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode01-reads0-03 runid=c30df96446bd568dd414fad0d108593635f3a770 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case06/barcode01/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode01-reads1-01 runid=83590c666267156e6c21ace8e167b00ee9fbb8c5 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode01-reads1-02 runid=83590c666267156e6c21ace8e167b00ee9fbb8c5 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode01-reads1-03 runid=83590c666267156e6c21ace8e167b00ee9fbb8c5 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case06/barcode01/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode01-reads2-01 runid=9cab249eb3422999b6d685b4741da2a5def34fee barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode01-reads2-02 runid=9cab249eb3422999b6d685b4741da2a5def34fee barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode01-reads2-03 runid=9cab249eb3422999b6d685b4741da2a5def34fee barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case06/barcode02/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode02-reads0-01 runid=11ad27d184b7e47786ec9a9f3592b6476272e922 barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode02-reads0-02 runid=11ad27d184b7e47786ec9a9f3592b6476272e922 barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode02-reads0-03 runid=11ad27d184b7e47786ec9a9f3592b6476272e922 barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case06/barcode02/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode02-reads1-01 runid=87c05332ac5c634ad32960c5652f39f72372ebab barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode02-reads1-02 runid=87c05332ac5c634ad32960c5652f39f72372ebab barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode02-reads1-03 runid=87c05332ac5c634ad32960c5652f39f72372ebab barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case06/barcode02/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode02-reads2-01 runid=b38ba8a66c2e80ac98beab02089e375b0f7dd678 barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode02-reads2-02 runid=b38ba8a66c2e80ac98beab02089e375b0f7dd678 barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode02-reads2-03 runid=b38ba8a66c2e80ac98beab02089e375b0f7dd678 barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case06/barcode03/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode03-reads0-01 runid=6c82b199e06096a5c37aa0726ed867e7734be822 barcode=barcode03 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode03-reads0-02 runid=6c82b199e06096a5c37aa0726ed867e7734be822 barcode=barcode03 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode03-reads0-03 runid=6c82b199e06096a5c37aa0726ed867e7734be822 barcode=barcode03 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case06/sample_sheet.csv: -------------------------------------------------------------------------------- 1 | barcode,alias,type,extra_col_a,extra_col_b 2 | barcode01,sample1,test_sample,extra_col_a_1,extra_col_b_1 3 | barcode02,sample2,positive_control,extra_col_a_2,extra_col_b_2 4 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case07/barcode01/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case07-barcode01-reads0-01 runid=f196b1f60485fb3b33ac287ae55aac8cc3a94a32 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case07-barcode01-reads0-02 runid=f196b1f60485fb3b33ac287ae55aac8cc3a94a32 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case07-barcode01-reads0-03 runid=f196b1f60485fb3b33ac287ae55aac8cc3a94a32 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case07/barcode01/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case07-barcode01-reads1-01 runid=d58afe78f6bc4efa7803a682dff6b74b786ccff0 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case07-barcode01-reads1-02 runid=d58afe78f6bc4efa7803a682dff6b74b786ccff0 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case07-barcode01-reads1-03 runid=d58afe78f6bc4efa7803a682dff6b74b786ccff0 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case07/barcode01/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case07-barcode01-reads2-01 runid=520119983f0196873ca346c0264082671898703b barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case07-barcode01-reads2-02 runid=520119983f0196873ca346c0264082671898703b barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case07-barcode01-reads2-03 runid=520119983f0196873ca346c0264082671898703b barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case07/barcode02/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case07-barcode02-reads0-01 runid=f509fec386b27d8076e57ce4e6970dc58d3c4871 barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case07-barcode02-reads0-02 runid=f509fec386b27d8076e57ce4e6970dc58d3c4871 barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case07-barcode02-reads0-03 runid=f509fec386b27d8076e57ce4e6970dc58d3c4871 barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case07/barcode02/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case07-barcode02-reads1-01 runid=92f7220d76af1fd31c46eefe3273bf01cf91ae7e barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case07-barcode02-reads1-02 runid=92f7220d76af1fd31c46eefe3273bf01cf91ae7e barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case07-barcode02-reads1-03 runid=92f7220d76af1fd31c46eefe3273bf01cf91ae7e barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case07/barcode02/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case07-barcode02-reads2-01 runid=a912f8e63e93178a0f7eb997ba31252235fc5272 barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case07-barcode02-reads2-02 runid=a912f8e63e93178a0f7eb997ba31252235fc5272 barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case07-barcode02-reads2-03 runid=a912f8e63e93178a0f7eb997ba31252235fc5272 barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case07/barcode03/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case07-barcode03-reads0-01 runid=55f4e8aded4ea206cec17495f56001ed3e876b5f barcode=barcode03 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case07-barcode03-reads0-02 runid=55f4e8aded4ea206cec17495f56001ed3e876b5f barcode=barcode03 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case07-barcode03-reads0-03 runid=55f4e8aded4ea206cec17495f56001ed3e876b5f barcode=barcode03 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case07/sample_sheet.csv: -------------------------------------------------------------------------------- 1 | barcode,alias,type 2 | barcode01,sample1,test_sample 3 | barcode02,sample2,positive_control 4 | barcode03,sample3,no_template_control 5 | barcode04,sample4,test_sample 6 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case08/dir01/garbage.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/fastq_ingress/case08/dir01/garbage.txt -------------------------------------------------------------------------------- /test_data/fastq_ingress/case08/dir01/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case08-dir01-reads0-01 runid=ca5f91270ec2784eaa67419f63c1422c74683d99 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case08-dir01-reads0-02 runid=ca5f91270ec2784eaa67419f63c1422c74683d99 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case08-dir01-reads0-03 runid=ca5f91270ec2784eaa67419f63c1422c74683d99 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case08/dir01/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case08-dir01-reads1-01 runid=f420b4d2e940d9286e484de3e45c4f829222481c barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case08-dir01-reads1-02 runid=f420b4d2e940d9286e484de3e45c4f829222481c barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case08-dir01-reads1-03 runid=f420b4d2e940d9286e484de3e45c4f829222481c barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case08/dir01/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case08-dir01-reads2-01 runid=18c5c02f3235e3c59091b5cd2498c5da134ae857 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case08-dir01-reads2-02 runid=18c5c02f3235e3c59091b5cd2498c5da134ae857 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case08-dir01-reads2-03 runid=18c5c02f3235e3c59091b5cd2498c5da134ae857 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case08/dir02/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case08-dir02-reads0-01 runid=9170a794da362170555fced37d42a48a8e69bad4 barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case08-dir02-reads0-02 runid=9170a794da362170555fced37d42a48a8e69bad4 barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case08-dir02-reads0-03 runid=9170a794da362170555fced37d42a48a8e69bad4 barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case08/dir02/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case08-dir02-reads1-01 runid=cac735912e2b203068f29fd0ca0f1fba4ecf1edb barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case08-dir02-reads1-02 runid=cac735912e2b203068f29fd0ca0f1fba4ecf1edb barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case08-dir02-reads1-03 runid=cac735912e2b203068f29fd0ca0f1fba4ecf1edb barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case08/dir02/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case08-dir02-reads2-01 runid=3eef663fc6cdedfa8bc6cedf4ebe25fabbcabca0 barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case08-dir02-reads2-02 runid=3eef663fc6cdedfa8bc6cedf4ebe25fabbcabca0 barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case08-dir02-reads2-03 runid=3eef663fc6cdedfa8bc6cedf4ebe25fabbcabca0 barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case08/dir03/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case08-dir03-reads0-01 runid=b49bff0cd435b57f84049adf13e95eaf421f708e barcode=barcode03 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case08-dir03-reads0-02 runid=b49bff0cd435b57f84049adf13e95eaf421f708e barcode=barcode03 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case08-dir03-reads0-03 runid=b49bff0cd435b57f84049adf13e95eaf421f708e barcode=barcode03 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case08/unclassified/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case08-unclassified-reads0-01 1 runid=5e694be4fa90db41682b4c43578cf8afb1faedd3 barcode=barcode03 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case08-unclassified-reads0-02 2 runid=5e694be4fa90db41682b4c43578cf8afb1faedd3 barcode=barcode03 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case08-unclassified-reads0-03 3 runid=5e694be4fa90db41682b4c43578cf8afb1faedd3 barcode=barcode03 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case09/dir01/garbage.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/fastq_ingress/case09/dir01/garbage.txt -------------------------------------------------------------------------------- /test_data/fastq_ingress/case09/dir01/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case09-dir01-reads0-01 runid=062451ac3b4de331c0142fab12770d28833ce107 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case09-dir01-reads0-02 runid=062451ac3b4de331c0142fab12770d28833ce107 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case09-dir01-reads0-03 runid=062451ac3b4de331c0142fab12770d28833ce107 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case09/dir01/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case09-dir01-reads1-01 runid=d177cbcba091882c8fbd0e66117217b643117d27 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case09-dir01-reads1-02 runid=d177cbcba091882c8fbd0e66117217b643117d27 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case09-dir01-reads1-03 runid=d177cbcba091882c8fbd0e66117217b643117d27 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case09/dir01/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case09-dir01-reads2-01 runid=fb17cd9b8f71149d9be1d9f82f196bd81cc7a6a9 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case09-dir01-reads2-02 runid=fb17cd9b8f71149d9be1d9f82f196bd81cc7a6a9 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case09-dir01-reads2-03 runid=fb17cd9b8f71149d9be1d9f82f196bd81cc7a6a9 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case09/dir02/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case09-dir02-reads0-01 runid=9f5843366712911204feca4720b5450d5160ea6a barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case09-dir02-reads0-02 runid=9f5843366712911204feca4720b5450d5160ea6a barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case09-dir02-reads0-03 runid=9f5843366712911204feca4720b5450d5160ea6a barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case09/dir02/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case09-dir02-reads1-01 runid=a1986552e0f5e9e3e62797e45001b59baa5fde5f barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case09-dir02-reads1-02 runid=a1986552e0f5e9e3e62797e45001b59baa5fde5f barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case09-dir02-reads1-03 runid=a1986552e0f5e9e3e62797e45001b59baa5fde5f barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case09/dir02/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case09-dir02-reads2-01 runid=c480f61dee1bbda789522051aac096664820c272 barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case09-dir02-reads2-02 runid=c480f61dee1bbda789522051aac096664820c272 barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case09-dir02-reads2-03 runid=c480f61dee1bbda789522051aac096664820c272 barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case09/dir03/garbage/garbage.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/fastq_ingress/case09/dir03/garbage/garbage.txt -------------------------------------------------------------------------------- /test_data/fastq_ingress/case09/dir03/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case09-dir03-reads0-01 runid=191abbded76d0f88280bb93f4dd2897a0365a139 barcode=barcode03 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case09-dir03-reads0-02 runid=191abbded76d0f88280bb93f4dd2897a0365a139 barcode=barcode03 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case09-dir03-reads0-03 runid=191abbded76d0f88280bb93f4dd2897a0365a139 barcode=barcode03 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case10/dir01/garbage.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/fastq_ingress/case10/dir01/garbage.txt -------------------------------------------------------------------------------- /test_data/fastq_ingress/case10/dir01/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case10-dir01-reads0-01 runid=61a29426b50c0961bbc1c30a1544cdbe443340c9 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case10-dir01-reads0-02 runid=61a29426b50c0961bbc1c30a1544cdbe443340c9 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case10-dir01-reads0-03 runid=61a29426b50c0961bbc1c30a1544cdbe443340c9 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case10/dir01/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case10-dir01-reads1-01 runid=3aa4f6320e7d0e5b5c00e229bc0a9c41be8cd5c6 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case10-dir01-reads1-02 runid=3aa4f6320e7d0e5b5c00e229bc0a9c41be8cd5c6 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case10-dir01-reads1-03 runid=3aa4f6320e7d0e5b5c00e229bc0a9c41be8cd5c6 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case10/dir01/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case10-dir01-reads2-01 runid=54380a0de6ebb2658c92c78bf18e13e84480a39c barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case10-dir01-reads2-02 runid=54380a0de6ebb2658c92c78bf18e13e84480a39c barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case10-dir01-reads2-03 runid=54380a0de6ebb2658c92c78bf18e13e84480a39c barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case10/dir02/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case10-dir02-reads0-01 runid=3b79744b42dc2af891810df5327b38e367ac13a9 barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case10-dir02-reads0-02 runid=3b79744b42dc2af891810df5327b38e367ac13a9 barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case10-dir02-reads0-03 runid=3b79744b42dc2af891810df5327b38e367ac13a9 barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case10/dir02/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case10-dir02-reads1-01 runid=1bec64d19c1db299b26ab12370372595ef3dbd61 barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case10-dir02-reads1-02 runid=1bec64d19c1db299b26ab12370372595ef3dbd61 barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case10-dir02-reads1-03 runid=1bec64d19c1db299b26ab12370372595ef3dbd61 barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case10/dir02/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case10-dir02-reads2-01 runid=01779607df5de3c239a5473b1327c5ad87b724e9 barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case10-dir02-reads2-02 runid=01779607df5de3c239a5473b1327c5ad87b724e9 barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case10-dir02-reads2-03 runid=01779607df5de3c239a5473b1327c5ad87b724e9 barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case10/dir03/garbage/garbage.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/fastq_ingress/case10/dir03/garbage/garbage.txt -------------------------------------------------------------------------------- /test_data/fastq_ingress/case10/dir03/garbage/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case01-barcode03-reads0-01 runid=b7bfee72819e1eb3c2f45f649e3465d615838a17 barcode=barcode03 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case01-barcode03-reads0-02 runid=b7bfee72819e1eb3c2f45f649e3465d615838a17 barcode=barcode03 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case01-barcode03-reads0-03 runid=b7bfee72819e1eb3c2f45f649e3465d615838a17 barcode=barcode03 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case10/dir03/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case10-dir03-reads0-01 runid=4e1d89b01cd2ea71ab6b16875cc29dd9db84d957 barcode=barcode03 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case10-dir03-reads0-02 runid=4e1d89b01cd2ea71ab6b16875cc29dd9db84d957 barcode=barcode03 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case10-dir03-reads0-03 runid=4e1d89b01cd2ea71ab6b16875cc29dd9db84d957 barcode=barcode03 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case11/barcode01/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case11-barcode01-reads0-01 runid=bfd8b4e622625c3c55d9fa5468d5fe0d72fbd231 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case11-barcode01-reads0-02 runid=bfd8b4e622625c3c55d9fa5468d5fe0d72fbd231 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case11-barcode01-reads0-03 runid=bfd8b4e622625c3c55d9fa5468d5fe0d72fbd231 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case11/barcode01/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case11-barcode01-reads1-01 runid=b9ea961b4240b1d622dfaef26554750c729d22c9 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case11-barcode01-reads1-02 runid=b9ea961b4240b1d622dfaef26554750c729d22c9 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case11-barcode01-reads1-03 runid=b9ea961b4240b1d622dfaef26554750c729d22c9 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case11/barcode01/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case11-barcode01-reads2-01 runid=adee049bfe3bf46ac7472dc17391bf5b671ed569 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case11-barcode01-reads2-02 runid=adee049bfe3bf46ac7472dc17391bf5b671ed569 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case11-barcode01-reads2-03 runid=adee049bfe3bf46ac7472dc17391bf5b671ed569 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case11/barcode02/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case11-barcode02-reads0-01 runid=99c6b9e36ceb0a8947622b01f459ac8379b4f4eb barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case11-barcode02-reads0-02 runid=99c6b9e36ceb0a8947622b01f459ac8379b4f4eb barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case11-barcode02-reads0-03 runid=99c6b9e36ceb0a8947622b01f459ac8379b4f4eb barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case11/barcode02/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case11-barcode02-reads1-01 runid=7b7b41d80fb38c304fba00b1e208e8295775edae barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case11-barcode02-reads1-02 runid=7b7b41d80fb38c304fba00b1e208e8295775edae barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case11-barcode02-reads1-03 runid=7b7b41d80fb38c304fba00b1e208e8295775edae barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case11/barcode02/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case11-barcode02-reads2-01 runid=2e862914687d6b90ad9220458f03105fcde19984 barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case11-barcode02-reads2-02 runid=2e862914687d6b90ad9220458f03105fcde19984 barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case11-barcode02-reads2-03 runid=2e862914687d6b90ad9220458f03105fcde19984 barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case11/barcode03/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case11-barcode03-reads0-01 runid=e4185d332644ce8cf00b112cdc5f2feb5cd37b5f barcode=barcode03 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case11-barcode03-reads0-02 runid=e4185d332644ce8cf00b112cdc5f2feb5cd37b5f barcode=barcode03 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case11-barcode03-reads0-03 runid=e4185d332644ce8cf00b112cdc5f2feb5cd37b5f barcode=barcode03 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case11/sample_sheet.csv: -------------------------------------------------------------------------------- 1 | barcode,alias,type 2 | barcode01,sample1,test_sample 3 | barcode02,sample1,positive_control 4 | barcode03,sample1,no_template_control 5 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case12/barcode01/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/fastq_ingress/case12/barcode01/.gitkeep -------------------------------------------------------------------------------- /test_data/fastq_ingress/case12/barcode02/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/fastq_ingress/case12/barcode02/.gitkeep -------------------------------------------------------------------------------- /test_data/fastq_ingress/case12/barcode03/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/fastq_ingress/case12/barcode03/.gitkeep -------------------------------------------------------------------------------- /test_data/fastq_ingress/case12/unclassified/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case01-barcode01-reads0-01 runid=520dd86bce9260aee89e71443c0acc2b0f4ae31d barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case01-barcode01-reads0-02 runid=520dd86bce9260aee89e71443c0acc2b0f4ae31d barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case01-barcode01-reads0-03 runid=520dd86bce9260aee89e71443c0acc2b0f4ae31d barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case12/unclassified/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case01-barcode01-reads1-01 runid=575d101f3ab969962381ff8c14da7044d2f0f4cb barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case01-barcode01-reads1-02 runid=575d101f3ab969962381ff8c14da7044d2f0f4cb barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case01-barcode01-reads1-03 runid=575d101f3ab969962381ff8c14da7044d2f0f4cb barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case12/unclassified/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case01-barcode01-reads2-01 runid=02381223bbffa5eafdaf81406125ab48a23065cc barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case01-barcode01-reads2-02 runid=02381223bbffa5eafdaf81406125ab48a23065cc barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case01-barcode01-reads2-03 runid=02381223bbffa5eafdaf81406125ab48a23065cc barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case13/garbage/garbage.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/fastq_ingress/case13/garbage/garbage.txt -------------------------------------------------------------------------------- /test_data/fastq_ingress/case13/reads02.fastq.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/fastq_ingress/case13/reads02.fastq.gz -------------------------------------------------------------------------------- /test_data/fastq_ingress/case13/reads04.fq.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/fastq_ingress/case13/reads04.fq.gz -------------------------------------------------------------------------------- /test_data/fastq_ingress/case16/barcode01/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode01-reads0-01 runid=c30df96446bd568dd414fad0d108593635f3a770 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode01-reads0-02 runid=c30df96446bd568dd414fad0d108593635f3a770 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode01-reads0-03 runid=c30df96446bd568dd414fad0d108593635f3a770 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case16/barcode01/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode01-reads1-01 runid=83590c666267156e6c21ace8e167b00ee9fbb8c5 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode01-reads1-02 runid=83590c666267156e6c21ace8e167b00ee9fbb8c5 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode01-reads1-03 runid=83590c666267156e6c21ace8e167b00ee9fbb8c5 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case16/barcode01/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode01-reads2-01 runid=9cab249eb3422999b6d685b4741da2a5def34fee barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode01-reads2-02 runid=9cab249eb3422999b6d685b4741da2a5def34fee barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode01-reads2-03 runid=9cab249eb3422999b6d685b4741da2a5def34fee barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case16/barcode02/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode02-reads0-01 runid=11ad27d184b7e47786ec9a9f3592b6476272e922 barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode02-reads0-02 runid=11ad27d184b7e47786ec9a9f3592b6476272e922 barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode02-reads0-03 runid=11ad27d184b7e47786ec9a9f3592b6476272e922 barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case16/barcode02/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode02-reads1-01 runid=87c05332ac5c634ad32960c5652f39f72372ebab barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode02-reads1-02 runid=87c05332ac5c634ad32960c5652f39f72372ebab barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode02-reads1-03 runid=87c05332ac5c634ad32960c5652f39f72372ebab barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case16/barcode02/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode02-reads2-01 runid=b38ba8a66c2e80ac98beab02089e375b0f7dd678 barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode02-reads2-02 runid=b38ba8a66c2e80ac98beab02089e375b0f7dd678 barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode02-reads2-03 runid=b38ba8a66c2e80ac98beab02089e375b0f7dd678 barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case16/barcode03/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode03-reads0-01 runid=6c82b199e06096a5c37aa0726ed867e7734be822 barcode=barcode03 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode03-reads0-02 runid=6c82b199e06096a5c37aa0726ed867e7734be822 barcode=barcode03 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode03-reads0-03 runid=6c82b199e06096a5c37aa0726ed867e7734be822 barcode=barcode03 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case16/client_fields.json: -------------------------------------------------------------------------------- 1 | { 2 | "operator": "Dwight Schrute", 3 | "requester": "Michael Scott", 4 | "organisation": "Dunder Mifflin", 5 | "sequencer": "GridION", 6 | "location": "Scranton", 7 | "keywords": ["Bears", "Beets", "Battlestar Galatica"] 8 | } 9 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case16/sample_sheet.csv: -------------------------------------------------------------------------------- 1 | barcode,alias,type,extra_col_a,extra_col_b 2 | barcode01,sample1,test_sample,extra_col_a_1,extra_col_b_1 3 | barcode02,sample2,positive_control,extra_col_a_2,extra_col_b_2 4 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case17/barcode01/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode01-reads0-01 runid=c30df96446bd568dd414fad0d108593635f3a770 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode01-reads0-02 runid=c30df96446bd568dd414fad0d108593635f3a770 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode01-reads0-03 runid=c30df96446bd568dd414fad0d108593635f3a770 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case17/barcode01/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode01-reads1-01 runid=83590c666267156e6c21ace8e167b00ee9fbb8c5 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode01-reads1-02 runid=83590c666267156e6c21ace8e167b00ee9fbb8c5 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode01-reads1-03 runid=83590c666267156e6c21ace8e167b00ee9fbb8c5 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case17/barcode01/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode01-reads2-01 runid=9cab249eb3422999b6d685b4741da2a5def34fee barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode01-reads2-02 runid=9cab249eb3422999b6d685b4741da2a5def34fee barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode01-reads2-03 runid=9cab249eb3422999b6d685b4741da2a5def34fee barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case17/barcode02/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode02-reads0-01 runid=11ad27d184b7e47786ec9a9f3592b6476272e922 barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode02-reads0-02 runid=11ad27d184b7e47786ec9a9f3592b6476272e922 barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode02-reads0-03 runid=11ad27d184b7e47786ec9a9f3592b6476272e922 barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case17/barcode02/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode02-reads1-01 runid=87c05332ac5c634ad32960c5652f39f72372ebab barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode02-reads1-02 runid=87c05332ac5c634ad32960c5652f39f72372ebab barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode02-reads1-03 runid=87c05332ac5c634ad32960c5652f39f72372ebab barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case17/barcode02/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode02-reads2-01 runid=b38ba8a66c2e80ac98beab02089e375b0f7dd678 barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode02-reads2-02 runid=b38ba8a66c2e80ac98beab02089e375b0f7dd678 barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode02-reads2-03 runid=b38ba8a66c2e80ac98beab02089e375b0f7dd678 barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case17/barcode03/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode03-reads0-01 runid=6c82b199e06096a5c37aa0726ed867e7734be822 barcode=barcode03 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode03-reads0-02 runid=6c82b199e06096a5c37aa0726ed867e7734be822 barcode=barcode03 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode03-reads0-03 runid=6c82b199e06096a5c37aa0726ed867e7734be822 barcode=barcode03 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case17/client_fields.json: -------------------------------------------------------------------------------- 1 | { 2 | "operator": "Dwight Schrute", 3 | "requester": "Michael Scott", 4 | "organisation": "Dunder Mifflin", 5 | "sequencer": "GridION" 6 | "location": "Scranton" 7 | } -------------------------------------------------------------------------------- /test_data/fastq_ingress/case17/sample_sheet.csv: -------------------------------------------------------------------------------- 1 | barcode,alias,type,extra_col_a,extra_col_b 2 | barcode01,sample1,test_sample,extra_col_a_1,extra_col_b_1 3 | barcode02,sample2,positive_control,extra_col_a_2,extra_col_b_2 4 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case18/barcode01/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode01-reads0-01 runid=c30df96446bd568dd414fad0d108593635f3a770 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode01-reads0-02 runid=c30df96446bd568dd414fad0d108593635f3a770 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode01-reads0-03 runid=c30df96446bd568dd414fad0d108593635f3a770 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case18/barcode01/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode01-reads1-01 runid=83590c666267156e6c21ace8e167b00ee9fbb8c5 barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode01-reads1-02 runid=83590c666267156e6c21ace8e167b00ee9fbb8c5 barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode01-reads1-03 runid=83590c666267156e6c21ace8e167b00ee9fbb8c5 barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case18/barcode01/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode01-reads2-01 runid=9cab249eb3422999b6d685b4741da2a5def34fee barcode=barcode01 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode01-reads2-02 runid=9cab249eb3422999b6d685b4741da2a5def34fee barcode=barcode01 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode01-reads2-03 runid=9cab249eb3422999b6d685b4741da2a5def34fee barcode=barcode01 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case18/barcode02/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode02-reads0-01 runid=11ad27d184b7e47786ec9a9f3592b6476272e922 barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode02-reads0-02 runid=11ad27d184b7e47786ec9a9f3592b6476272e922 barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode02-reads0-03 runid=11ad27d184b7e47786ec9a9f3592b6476272e922 barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case18/barcode02/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode02-reads1-01 runid=87c05332ac5c634ad32960c5652f39f72372ebab barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode02-reads1-02 runid=87c05332ac5c634ad32960c5652f39f72372ebab barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode02-reads1-03 runid=87c05332ac5c634ad32960c5652f39f72372ebab barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case18/barcode02/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode02-reads2-01 runid=b38ba8a66c2e80ac98beab02089e375b0f7dd678 barcode=barcode02 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode02-reads2-02 runid=b38ba8a66c2e80ac98beab02089e375b0f7dd678 barcode=barcode02 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode02-reads2-03 runid=b38ba8a66c2e80ac98beab02089e375b0f7dd678 barcode=barcode02 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case18/barcode03/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case06-barcode03-reads0-01 runid=6c82b199e06096a5c37aa0726ed867e7734be822 barcode=barcode03 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case06-barcode03-reads0-02 runid=6c82b199e06096a5c37aa0726ed867e7734be822 barcode=barcode03 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case06-barcode03-reads0-03 runid=6c82b199e06096a5c37aa0726ed867e7734be822 barcode=barcode03 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case18/sample_sheet.csv: -------------------------------------------------------------------------------- 1 | barcode,alias,analysis_group 2 | barcode01,sample1,customer01 3 | barcode02,sample2,customer01 4 | barcode03,sample3,customer02 5 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case19/dir01/garbage.txt: -------------------------------------------------------------------------------- 1 | garbage 2 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case19/dir01/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case19-dir01-reads0-01 basecall_model_version_id=dna_r10.4.1_e8.2_400bps_hac@v5.0.0 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case19-dir01-reads0-02 basecall_model_version_id=dna_r10.4.1_e8.2_400bps_hac@v5.0.0 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case19-dir01-reads0-03 basecall_model_version_id=dna_r10.4.1_e8.2_400bps_hac@v5.0.0 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case19/dir01/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case19-dir01-reads1-01 runid=06271005de516bb3556fb3b602fc3dc702e882e2 barcode=barcode01 basecall_model_version_id=dna_r10.4.1_e8.2_400bps_hac@v5.0.0 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case19-dir01-reads1-02 runid=06271005de516bb3556fb3b602fc3dc702e882e2 barcode=barcode01 basecall_model_version_id=dna_r10.4.1_e8.2_400bps_hac@v5.0.0 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case19-dir01-reads1-03 runid=06271005de516bb3556fb3b602fc3dc702e882e2 barcode=barcode01 basecall_model_version_id=dna_r10.4.1_e8.2_400bps_hac@v5.0.0 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case19/dir01/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case19-dir01-reads2-01 runid=75fdcf189562fe5c634abe734686712117fcbbc6 barcode=barcode01 basecall_model_version_id=dna_r10.4.1_e8.2_400bps_hac@v5.0.0 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case19-dir01-reads2-02 runid=75fdcf189562fe5c634abe734686712117fcbbc6 barcode=barcode01 basecall_model_version_id=dna_r10.4.1_e8.2_400bps_hac@v5.0.0 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case19-dir01-reads2-03 runid=75fdcf189562fe5c634abe734686712117fcbbc6 barcode=barcode01 basecall_model_version_id=dna_r10.4.1_e8.2_400bps_hac@v5.0.0 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case19/dir02/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case19-dir02-reads0-01 basecall_model_version_id=dna_r10.4.1_e8.2_400bps_hac@v5.0.0 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case19-dir02-reads0-02 basecall_model_version_id=dna_r10.4.1_e8.2_400bps_hac@v5.0.0 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case19-dir02-reads0-03 basecall_model_version_id=dna_r10.4.1_e8.2_400bps_hac@v5.0.0 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case19/dir02/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case19-dir02-reads1-01 runid=06271005de516bb3556fb3b602fc3dc702e882e2 barcode=barcode01 basecall_model_version_id=dna_r10.4.1_e8.2_400bps_hac@v5.0.0 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case19-dir02-reads1-02 runid=06271005de516bb3556fb3b602fc3dc702e882e2 barcode=barcode01 basecall_model_version_id=dna_r10.4.1_e8.2_400bps_hac@v5.0.0 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case19-dir02-reads1-03 runid=06271005de516bb3556fb3b602fc3dc702e882e2 barcode=barcode01 basecall_model_version_id=dna_r10.4.1_e8.2_400bps_hac@v5.0.0 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case19/dir02/reads2.fastq: -------------------------------------------------------------------------------- 1 | @case19-dir02-reads2-01 runid=75fdcf189562fe5c634abe734686712117fcbbc6 barcode=barcode01 basecall_model_version_id=dna_r10.4.1_e8.2_400bps_hac@v5.0.0 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case19-dir02-reads2-02 runid=75fdcf189562fe5c634abe734686712117fcbbc6 barcode=barcode01 basecall_model_version_id=dna_r10.4.1_e8.2_400bps_hac@v5.0.0 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case19-dir02-reads2-03 runid=75fdcf189562fe5c634abe734686712117fcbbc6 barcode=barcode01 basecall_model_version_id=dna_r10.4.1_e8.2_400bps_hac@v5.0.0 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case19/dir03/reads0.fastq: -------------------------------------------------------------------------------- 1 | @case02-dir03-reads0-01 basecall_model_version_id=dna_r10.4.1_e8.2_400bps_hac@v5.0.0 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case02-dir03-reads0-02 basecall_model_version_id=dna_r10.4.1_e8.2_400bps_hac@v5.0.0 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case02-dir03-reads0-03 basecall_model_version_id=dna_r10.4.1_e8.2_400bps_hac@v5.0.0 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case19/dir04/garbage.txt: -------------------------------------------------------------------------------- 1 | garbage 2 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case22/reads1.fastq: -------------------------------------------------------------------------------- 1 | @case01-reads1-01 runid=1111111111111111111111111111111111111111 barcode=barcode01 basecall_model_version_id=dna_r10.4.1_e8.2_400bps_hac@v5.0.0 2 | CAGTGTACTTCGTTCAGTTACGTATTGCTAAA 3 | + 4 | -$$%*-):>?59?7;5:A@<9;<;9>1-078( 5 | @case01-reads1-02 runid=1111111111111111111111111111111111111111 barcode=barcode01 basecall_model_version_id=dna_r10.4.1_e8.2_400bps_hac@v5.0.0 6 | TGTTGTACTTCGTTCAGTTACGTATTGCTAAG 7 | + 8 | #$$(&)')454146/'*049774004.0778' 9 | @case01-reads1-03 runid=1111111111111111111111111111111111111111 barcode=barcode01 basecall_model_version_id=dna_r10.4.1_e8.2_400bps_hac@v5.0.0 10 | GTTGTACTTCGTTCAGTTACGTATTGCTAAGG 11 | + 12 | %3462246.'>C02+:?>697CCHG6,:78,A 13 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case23/empty.fq: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/fastq_ingress/case23/empty.fq -------------------------------------------------------------------------------- /test_data/fastq_ingress/case24/empty.fq.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/fastq_ingress/case24/empty.fq.gz -------------------------------------------------------------------------------- /test_data/fastq_ingress/case26/sample_sheet.csv: -------------------------------------------------------------------------------- 1 | barcode,alias,type 2 | barcode01,sample1,test_sample 3 | barcode02,sampleN,test_sample 4 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case26/sample_sheet_barcodealias.csv: -------------------------------------------------------------------------------- 1 | barcode,alias,type 2 | barcode01,barcode01,test_sample 3 | barcode02,barcoded,test_sample 4 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case26/sample_sheet_dupealias.csv: -------------------------------------------------------------------------------- 1 | barcode,alias,type 2 | barcode01,sample1,test_sample 3 | barcode02,sample1,test_sample 4 | -------------------------------------------------------------------------------- /test_data/fastq_ingress/case26/sample_sheet_sample_notindir.csv: -------------------------------------------------------------------------------- 1 | barcode,alias,type 2 | barcode13,sample13,test_sample 3 | -------------------------------------------------------------------------------- /test_data/reads.fastq.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/reads.fastq.gz -------------------------------------------------------------------------------- /test_data/workflow_glue/check_sample_sheet/README: -------------------------------------------------------------------------------- 1 | sample_sheet_1.csv # correct 2 | sample_sheet_2.csv # barcode column missing 3 | sample_sheet_3.csv # alias column missing 4 | sample_sheet_4.csv # barcode column not unique 5 | sample_sheet_5.csv # alias column not unique 6 | sample_sheet_6.csv # malformed CSV (unequal number of fields) 7 | sample_sheet_7.csv # type column contains disallowed values 8 | sample_sheet_8.csv # barcodes not all same length 9 | sample_sheet_9.csv # barcodes not correct format 10 | utf8_bom.csv # MS Excel byte order mark weirdness 11 | sample_sheet_1.csv.zip # Provide not a CSV file 12 | sample_sheet_1.xlsx # Provide not a CSV file (Excel format) 13 | sample_sheet_10.csv # Test sniffer bug [CW-3786] 14 | sample_sheet_11.csv # analysis_group column present but contains a missing value 15 | -------------------------------------------------------------------------------- /test_data/workflow_glue/check_sample_sheet/sample_sheet_1.csv: -------------------------------------------------------------------------------- 1 | flow_cell_id,kit,sample_id,experiment_id,barcode,alias,type 2 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode01,patient_id_5,test_sample 3 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode02,patient_id_6,test_sample 4 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode03,patient_id_7,test_sample 5 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode04,patient_id_8,test_sample 6 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode05,patient_id_1,test_sample 7 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode06,patient_id_2,test_sample 8 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode07,patient_id_3,test_sample 9 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode08,patient_id_4,test_sample 10 | -------------------------------------------------------------------------------- /test_data/workflow_glue/check_sample_sheet/sample_sheet_1.csv.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/workflow_glue/check_sample_sheet/sample_sheet_1.csv.zip -------------------------------------------------------------------------------- /test_data/workflow_glue/check_sample_sheet/sample_sheet_1.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/workflow_glue/check_sample_sheet/sample_sheet_1.xlsx -------------------------------------------------------------------------------- /test_data/workflow_glue/check_sample_sheet/sample_sheet_10.csv: -------------------------------------------------------------------------------- 1 | barcode,alias,type 2 | barcode01,sample1,test_sample 3 | barcode02,sample2,test_sample 4 | barcode05,sample5,test_sample 5 | barcode07,sample7,test_sample 6 | -------------------------------------------------------------------------------- /test_data/workflow_glue/check_sample_sheet/sample_sheet_11.csv: -------------------------------------------------------------------------------- 1 | flow_cell_id,kit,sample_id,experiment_id,barcode,alias,type,analysis_group 2 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode01,patient_id_5,test_sample,group_A 3 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode02,patient_id_6,test_sample,group_A 4 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode03,patient_id_7,test_sample,group_A 5 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode04,patient_id_8,test_sample,group_B 6 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode05,patient_id_1,test_sample,group_B 7 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode06,patient_id_2,test_sample,group_B 8 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode07,patient_id_3,test_sample,group_B 9 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode08,patient_id_4,test_sample, 10 | -------------------------------------------------------------------------------- /test_data/workflow_glue/check_sample_sheet/sample_sheet_12.csv: -------------------------------------------------------------------------------- 1 | flow_cell_id,kit,sample_id,experiment_id,barcode,alias,type 2 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode01,barcode01,test_sample 3 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode02,patient_id_6,test_sample 4 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode03,patient_id_7,test_sample 5 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode04,patient_id_8,test_sample 6 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode05,barcode_maximum,test_sample 7 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode06,patient_id_2,test_sample 8 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode07,patient_id_3,test_sample 9 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode08,barcode_barbarian,test_sample 10 | -------------------------------------------------------------------------------- /test_data/workflow_glue/check_sample_sheet/sample_sheet_2.csv: -------------------------------------------------------------------------------- 1 | flow_cell_id,kit,sample_id,experiment_id,alias,type 2 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,patient_id_5,test_sample 3 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,patient_id_6,test_sample 4 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,patient_id_7,test_sample 5 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,patient_id_8,test_sample 6 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,patient_id_1,test_sample 7 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,patient_id_2,test_sample 8 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,patient_id_3,test_sample 9 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,patient_id_4,test_sample 10 | -------------------------------------------------------------------------------- /test_data/workflow_glue/check_sample_sheet/sample_sheet_3.csv: -------------------------------------------------------------------------------- 1 | flow_cell_id,kit,sample_id,experiment_id,barcode,type 2 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode01,test_sample 3 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode02,test_sample 4 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode03,test_sample 5 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode04,test_sample 6 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode05,test_sample 7 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode06,test_sample 8 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode07,test_sample 9 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode08,test_sample 10 | -------------------------------------------------------------------------------- /test_data/workflow_glue/check_sample_sheet/sample_sheet_4.csv: -------------------------------------------------------------------------------- 1 | flow_cell_id,kit,sample_id,experiment_id,barcode,alias,type 2 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode01,patient_id_5,test_sample 3 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode01,patient_id_6,test_sample 4 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode03,patient_id_7,test_sample 5 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode04,patient_id_8,test_sample 6 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode05,patient_id_1,test_sample 7 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode06,patient_id_2,test_sample 8 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode07,patient_id_3,test_sample 9 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode08,patient_id_4,test_sample 10 | -------------------------------------------------------------------------------- /test_data/workflow_glue/check_sample_sheet/sample_sheet_5.csv: -------------------------------------------------------------------------------- 1 | flow_cell_id,kit,sample_id,experiment_id,barcode,alias,type 2 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode01,patient_id_5,test_sample 3 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode02,patient_id_5,test_sample 4 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode03,patient_id_7,test_sample 5 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode04,patient_id_8,test_sample 6 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode05,patient_id_1,test_sample 7 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode06,patient_id_2,test_sample 8 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode07,patient_id_3,test_sample 9 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode08,patient_id_4,test_sample 10 | -------------------------------------------------------------------------------- /test_data/workflow_glue/check_sample_sheet/sample_sheet_6.csv: -------------------------------------------------------------------------------- 1 | flow_cell_id,kit,sample_id,experiment_id,barcode,alias,type 2 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode01,patient_id_5,test_sample,spurious_extra_field 3 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode02,patient_id_6,test_sample 4 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode03,patient_id_7,test_sample 5 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode04,patient_id_8,test_sample 6 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode05,patient_id_1,test_sample 7 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode06,patient_id_2,test_sample 8 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode07,patient_id_3,test_sample 9 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode08,patient_id_4,test_sample 10 | -------------------------------------------------------------------------------- /test_data/workflow_glue/check_sample_sheet/sample_sheet_7.csv: -------------------------------------------------------------------------------- 1 | flow_cell_id,kit,sample_id,experiment_id,barcode,alias,type 2 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode01,patient_id_5,unexpected_type_value 3 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode02,patient_id_6,test_sample 4 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode03,patient_id_7,test_sample 5 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode04,patient_id_8,test_sample 6 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode05,patient_id_1,test_sample 7 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode06,patient_id_2,test_sample 8 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode07,patient_id_3,test_sample 9 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode08,patient_id_4,test_sample 10 | -------------------------------------------------------------------------------- /test_data/workflow_glue/check_sample_sheet/sample_sheet_8.csv: -------------------------------------------------------------------------------- 1 | flow_cell_id,kit,sample_id,experiment_id,barcode,alias,type 2 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode001,patient_id_5,test_sample 3 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode02,patient_id_6,test_sample 4 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode03,patient_id_7,test_sample 5 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode04,patient_id_8,test_sample 6 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode05,patient_id_1,test_sample 7 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode06,patient_id_2,test_sample 8 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode07,patient_id_3,test_sample 9 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode08,patient_id_4,test_sample 10 | -------------------------------------------------------------------------------- /test_data/workflow_glue/check_sample_sheet/sample_sheet_9.csv: -------------------------------------------------------------------------------- 1 | flow_cell_id,kit,sample_id,experiment_id,barcode,alias,type 2 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode01,patient_id_5,test_sample 3 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode02,patient_id_6,test_sample 4 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode03,patient_id_7,test_sample 5 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode04,patient_id_8,test_sample 6 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,arcode05,patient_id_1,test_sample 7 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode06,patient_id_2,test_sample 8 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode07,patient_id_3,test_sample 9 | FA026858,SQK-RBK004,barcoding_run,sequencing_20200522,barcode08,patient_id_4,test_sample 10 | -------------------------------------------------------------------------------- /test_data/workflow_glue/check_sample_sheet/utf8_bom.csv: -------------------------------------------------------------------------------- 1 | barcode,alias 2 | barcode08,hoot 3 | barcode09,meow 4 | -------------------------------------------------------------------------------- /test_data/workflow_glue/client_fields.json: -------------------------------------------------------------------------------- 1 | { 2 | "operator": "Dwight Schrute", 3 | "requester": "Michael Scott", 4 | "organisation": "Dunder Mifflin", 5 | "sequencer": "GridION", 6 | "location": "Scranton", 7 | "interests": [ 8 | "bears", 9 | "beets", 10 | "battlestar" 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /test_data/workflow_glue/client_fields_malformed.json: -------------------------------------------------------------------------------- 1 | { 2 | "operator": "Dwight Schrute", 3 | "requester": "Michael Scott", 4 | "organisation": "Dunder Mifflin", 5 | "sequencer": "GridION", 6 | "location": "Scranton" 7 | "interests": [ 8 | "bears", 9 | "beets", 10 | "battlestar" 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /test_data/xam_ingress/README: -------------------------------------------------------------------------------- 1 | # top-level directory with BAM and uBAM files (causes "Found mixed headers in 2 | # (u)BAM files of sample ..." error) 3 | ├── case01 4 | │ ├── garbage.txt 5 | │ ├── reads0.bam 6 | │ ├── reads1.ubam 7 | │ ├── reads2.bam 8 | │ └── reads3.bam 9 | 10 | # take dir01, dir02, dir03 11 | ├── case02 12 | │ ├── dir1 13 | │ │ ├── reads0.bam 14 | │ │ ├── reads1.bam 15 | │ │ └── reads2.bam 16 | │ ├── dir2 17 | │ │ ├── reads0.bam 18 | │ │ ├── reads1.bam 19 | │ │ └── reads2.bam 20 | │ └── dir3 21 | │ ├── reads0.bam 22 | │ ├── reads1.bam 23 | │ └── reads2.bam 24 | 25 | # dir01 has only BAM files, dir02 has only uBAM files, dir03 has a mixture; the 26 | # sample sheet contains dir1, dir2, and dir4 (for which there is no directory) 27 | ├── case03 28 | │ ├── dir1 29 | │ │ ├── reads0.bam 30 | │ │ ├── reads1.bam 31 | │ │ └── reads2.bam 32 | │ ├── dir2 33 | │ │ ├── reads0.ubam 34 | │ │ ├── reads1.ubam 35 | │ │ └── reads2.ubam 36 | │ ├── dir3 37 | │ │ ├── reads0.bam 38 | │ │ └── reads1.ubam 39 | │ └── sample_sheet.csv 40 | 41 | # both files are BAM, but the `@SQ` lines in their headers are ordered 42 | # differently leading to an error ("Found mixed headers in (u)BAM files of 43 | # sample 'case04'.") 44 | ├── case04 45 | │ ├── reads0.bam 46 | │ └── reads1.bam 47 | 48 | # One input BAM is sorted and indexed, whereas the other is not. 49 | # The workflow should recognize this, acknowledge where input XAM is sorted thanks to 50 | # the HD tag, and recreate the index file where needed. 51 | # This avoids sorting and indexing files that do not need it, saving space with large BAM 52 | # inputs (e.g. human-size genomes). 53 | └── case05 54 | ├── barcode01 55 | │ ├── reads.bam 56 | │ └── reads.bam.bai 57 | └── barcode02 58 | └── reads.bam 59 | 60 | # A single sorted and indexed input BAM. 61 | # The workflow should acknowledge that there is a sorted XAM thanks to 62 | # the presence of the index, and should therefore skip its generation. 63 | # This avoids sorting and indexing files that do not need it, saving 64 | # space with large BAM inputs (e.g. human-size genomes). 65 | └── case06 66 | ├── reads.bam 67 | └── reads.bam.bai 68 | 69 | # A single unsorted BAM. 70 | # The workflow should sort and index this. 71 | └── case07 72 | └── reads.bam 73 | 74 | # A single uBAM. 75 | # The workflow should index this. 76 | └── case08 77 | └── reads.bam 78 | 79 | # A single sorted, but not indexed, BAM. 80 | # The workflow should index this. 81 | └── case09 82 | └── reads.bam 83 | 84 | # A single sorted BAM file, but with a wrong 85 | # index. The workflow should spot this and 86 | # regenerate it. 87 | └── case10 88 | ├── reads.bam 89 | └── reads.bam.bai 90 | 91 | # A BAM file without a `@HD` line in the header. 92 | └── case11 93 | └── reads.bam 94 | 95 | # A single uBAM with RG headers 96 | # The workflow should populate the metamap RG entries. 97 | └── case12 98 | └── reads.bam 99 | 100 | # Multiple uBAM with RG headers with different runid 101 | # The workflow should populate the metamap RG entries with the union of RG DS entries. 102 | └── case13 103 | ├── reads0.bam 104 | ├── reads1.bam 105 | └── reads2.bam 106 | 107 | # Multiple uBAM with RG headers 108 | # The workflow should print a warning as more than one basecall model is present between the input files. 109 | └── case14 110 | ├── reads0.bam 111 | ├── reads1.bam 112 | └── reads2.bam 113 | 114 | # case02 dir1 BAM with additional RG headers with same acquisition style runid 115 | └── case15 116 | ├── reads0.bam 117 | ├── reads1.bam 118 | └── reads2.bam 119 | 120 | # case02 dir1 BAM with additional RG headers with same protocol style runid 121 | └── case16 122 | ├── reads0.bam 123 | ├── reads1.bam 124 | └── reads2.bam 125 | 126 | # case04 but the SQ lines are ordered correctly and feature different 127 | # SQ.UR tags that should not lead to a "Found mixed headers" error 128 | # See CW-4842 129 | ├── case17 130 | │ ├── reads0.bam 131 | │ └── reads1.bam 132 | 133 | # case02 dir1, SO retained to check that sorting skipped for merge 134 | # See CW-4960 135 | ├── case18 136 | │ ├── reads0.bam 137 | │ ├── reads1.bam 138 | │ └── reads2.bam 139 | 140 | # case02 dir1, BAMs collated to lose SO, to check files are sorted before merge 141 | # See CW-4960 142 | ├── case19 143 | │ ├── reads0.bam 144 | │ ├── reads1.bam 145 | │ └── reads2.bam 146 | 147 | # Case20: BAM from SAM with just a header 148 | ├── case20 149 | │ ├── just_header.bam 150 | 151 | # experiment layout [CW-4785] 152 | # xam-case21-exp-no-files: Check case where no files are ingested. 153 | # xam-case21-exp-single-file: Check single BAM in nested layout 154 | # xam-case21-exp-spurious-level: Provide invalid directory layout, check error message. 155 | case21 156 | └── unclassified 157 | ├── bam_fail 158 | │   └── spurious_dir 159 | │   └── reads0.bam 160 | └── bam_pass 161 | └── reads0.bam 162 | 163 | # xam-case22-barcode-name: Provide valid sample name by barcode, ingest single sample. 164 | # xam-case22-barcode-sheet: Provide valid sample sheet, ingest all samples. 165 | # xam-case22-barcode-sheet-name: Provide valid sample sheet and valid sample name, check that sample is ingressed with sample sheet metadata. 166 | # xam-case22-barcode-sheet-sample-notindir: Provide sample sheet for sample that is not in ingress directory, check workflow completes, ingests nothing. Check warning is emitted that sample could not be found. 167 | # xam-case22-barcode-no-sheet: Provide no sample sheet or sample name, check workflow fails with error message 168 | # xam-case22-barcode-sheet-incl-all: Provide valid sample sheet, ingest all samples, ingest unclassified and failed 169 | case22 170 | ├── barcode01 171 | │   ├── YYYYMMDD_HHMM_0A_FLO00000_00000000 172 | │   │   ├── bam_fail 173 | │   │   │   └── reads0.bam 174 | │   │   └── bam_pass 175 | │   │   └── reads0.bam 176 | │   ├── YYYYMMDD_HHMM_0B_FLO11111_11111111 177 | │   │   ├── bam_fail 178 | │   │   │   └── reads1.bam 179 | │   │   └── bam_pass 180 | │   │   └── reads1.bam 181 | │   └── YYYYMMDD_HHMM_0C_FLO22222_22222222 182 | │   ├── bam_fail 183 | │   │   └── reads2.bam 184 | │   └── bam_pass 185 | │   └── reads2.bam 186 | ├── barcode02 187 | │   ├── YYYYMMDD_HHMM_1A_FLO33333_00000000 188 | │   │   └── bam_pass 189 | │   │   └── reads0.bam 190 | │   ├── YYYYMMDD_HHMM_1B_FLO44444_11111111 191 | │   │   └── bam_pass 192 | │   │   └── reads1.bam 193 | │   └── YYYYMMDD_HHMM_1C_FLO55555_22222222 194 | │   └── bam_pass 195 | │   └── reads2.bam 196 | ├── sample_sheet.csv 197 | ├── sample_sheet_sample_notindir.csv 198 | 199 | # case23 uses alias dirs with nested barcodes as well as unclassified 200 | # xam-case23-alias-name: Provide valid sample name by alias, ingest single sample. 201 | # xam-case23-alias-sheet: Provide valid sample sheet, ingest all samples by alias. 202 | # xam-case23-alias-sheet-dupe-alias: Provide invalid sample sheet, check duplicate alias explodes 203 | # xam-case23-alias-sheet-bad-alias: Provide invalid sample sheet, check alias starting "barcode" explodes 204 | # xam-case23-alias-sheet-name: Provide valid sample sheet and alias, check that target sample is ingressed. 205 | # xam-case23-alias-sheet-sample-notindir: Provide sample sheet for sample that is not in ingress directory, check workflow completes, ingests nothing. Check warning is emitted that sample could not be found. 206 | # xam-case23-alias-no-sheet: Provide no sample sheet or sample name, check workflow fails with error message 207 | # xam-case23-alias-sheet-incl-fail: Provide valid sample sheet, ingest all samples, including fail data 208 | # xam-case23-alias-sheet-incl-unclassified: Provide valid sample sheet, ingest all samples, including unclassified 209 | # xam-case23-alias-sheet-incl-all: Provide valid sample sheet, ingest all samples, ingest unclassified and failed 210 | case23 211 | ├── sample1 212 | │   ├── YYYYMMDD_HHMM_0A_FLO00000_00000000 213 | │   │   └── barcode01 214 | │   │   ├── bam_fail 215 | │   │   │   └── reads0.bam 216 | │   │   └── bam_pass 217 | │   │   └── reads0.bam 218 | │   ├── YYYYMMDD_HHMM_0B_FLO11111_11111111 219 | │   │   └── barcode02 220 | │   │   ├── bam_fail 221 | │   │   │   └── reads1.bam 222 | │   │   └── bam_pass 223 | │   │   └── reads1.bam 224 | │   └── YYYYMMDD_HHMM_0C_FLO22222_22222222 225 | │   └── unclassified 226 | │   ├── bam_fail 227 | │   │   └── reads2.bam 228 | │   └── bam_pass 229 | │   └── reads2.bam 230 | ├── sampleN 231 | │   ├── YYYYMMDD_HHMM_1A_FLO33333_00000000 232 | │   │   └── barcode03 233 | │   │   └── bam_pass 234 | │   │   └── reads0.bam 235 | │   ├── YYYYMMDD_HHMM_1B_FLO44444_11111111 236 | │   │   └── barcode04 237 | │   │   └── bam_pass 238 | │   │   └── reads1.bam 239 | │   └── YYYYMMDD_HHMM_1C_FLO55555_22222222 240 | │   └── unclassified 241 | │   └── bam_pass 242 | │   └── reads2.bam 243 | ├── sample_sheet_barcodealias.csv 244 | ├── sample_sheet.csv 245 | ├── sample_sheet_dupealias.csv 246 | └── sample_sheet_sample_notindir.csv 247 | 248 | # case24 use sample sheet, supply a conflicting barcode and alias dir for the same sample row 249 | -------------------------------------------------------------------------------- /test_data/xam_ingress/case01-ubam-only/garbage.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case01-ubam-only/garbage.txt -------------------------------------------------------------------------------- /test_data/xam_ingress/case01-ubam-only/reads1.ubam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case01-ubam-only/reads1.ubam -------------------------------------------------------------------------------- /test_data/xam_ingress/case01-ubam-only/reads3.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case01-ubam-only/reads3.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case01/garbage.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case01/garbage.txt -------------------------------------------------------------------------------- /test_data/xam_ingress/case01/reads0.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case01/reads0.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case01/reads1.ubam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case01/reads1.ubam -------------------------------------------------------------------------------- /test_data/xam_ingress/case01/reads2.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case01/reads2.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case01/reads3.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case01/reads3.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case02/dir1/reads0.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case02/dir1/reads0.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case02/dir1/reads1.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case02/dir1/reads1.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case02/dir1/reads2.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case02/dir1/reads2.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case02/dir2/reads0.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case02/dir2/reads0.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case02/dir2/reads1.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case02/dir2/reads1.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case02/dir2/reads2.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case02/dir2/reads2.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case02/dir3/reads0.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case02/dir3/reads0.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case02/dir3/reads1.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case02/dir3/reads1.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case02/dir3/reads2.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case02/dir3/reads2.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case03/barcode01/reads0.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case03/barcode01/reads0.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case03/barcode01/reads1.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case03/barcode01/reads1.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case03/barcode01/reads2.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case03/barcode01/reads2.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case03/barcode02/reads0.ubam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case03/barcode02/reads0.ubam -------------------------------------------------------------------------------- /test_data/xam_ingress/case03/barcode02/reads1.ubam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case03/barcode02/reads1.ubam -------------------------------------------------------------------------------- /test_data/xam_ingress/case03/barcode02/reads2.ubam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case03/barcode02/reads2.ubam -------------------------------------------------------------------------------- /test_data/xam_ingress/case03/barcode03/reads0.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case03/barcode03/reads0.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case03/barcode03/reads1.ubam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case03/barcode03/reads1.ubam -------------------------------------------------------------------------------- /test_data/xam_ingress/case03/sample_sheet.csv: -------------------------------------------------------------------------------- 1 | barcode,alias,type 2 | barcode01,sample1,positive_control 3 | barcode02,sample2,test_sample 4 | barcode04,sample4,no_template_control 5 | -------------------------------------------------------------------------------- /test_data/xam_ingress/case04/reads0.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case04/reads0.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case04/reads1.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case04/reads1.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case05/barcode01/reads.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case05/barcode01/reads.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case05/barcode01/reads.bam.bai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case05/barcode01/reads.bam.bai -------------------------------------------------------------------------------- /test_data/xam_ingress/case05/barcode02/reads.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case05/barcode02/reads.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case06/reads.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case06/reads.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case06/reads.bam.bai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case06/reads.bam.bai -------------------------------------------------------------------------------- /test_data/xam_ingress/case07/reads.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case07/reads.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case08/reads.ubam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case08/reads.ubam -------------------------------------------------------------------------------- /test_data/xam_ingress/case09/reads.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case09/reads.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case10/reads.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case10/reads.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case10/reads.bam.bai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case10/reads.bam.bai -------------------------------------------------------------------------------- /test_data/xam_ingress/case11/reads.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case11/reads.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case12/reads.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case12/reads.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case13/reads0.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case13/reads0.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case13/reads1.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case13/reads1.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case13/reads2.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case13/reads2.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case14/reads0.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case14/reads0.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case14/reads1.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case14/reads1.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case14/reads2.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case14/reads2.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case15/reads0.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case15/reads0.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case15/reads1.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case15/reads1.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case15/reads2.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case15/reads2.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case17/reads0.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case17/reads0.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case17/reads1.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case17/reads1.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case18/reads0.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case18/reads0.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case18/reads1.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case18/reads1.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case18/reads2.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case18/reads2.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case19/reads0.collated.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case19/reads0.collated.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case19/reads1.collated.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case19/reads1.collated.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case19/reads2.collated.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case19/reads2.collated.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case20/just_header.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case20/just_header.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case21/unclassified/bam_pass/reads0.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case21/unclassified/bam_pass/reads0.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case22/barcode01/YYYYMMDD_HHMM_0A_FLO00000_00000000/bam_pass/reads0.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case22/barcode01/YYYYMMDD_HHMM_0A_FLO00000_00000000/bam_pass/reads0.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case22/barcode01/YYYYMMDD_HHMM_0B_FLO11111_11111111/bam_pass/reads1.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case22/barcode01/YYYYMMDD_HHMM_0B_FLO11111_11111111/bam_pass/reads1.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case22/barcode01/YYYYMMDD_HHMM_0C_FLO22222_22222222/bam_pass/reads2.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case22/barcode01/YYYYMMDD_HHMM_0C_FLO22222_22222222/bam_pass/reads2.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case22/barcode02/YYYYMMDD_HHMM_1A_FLO33333_00000000/bam_pass/reads0.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case22/barcode02/YYYYMMDD_HHMM_1A_FLO33333_00000000/bam_pass/reads0.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case22/barcode02/YYYYMMDD_HHMM_1B_FLO44444_11111111/bam_pass/reads1.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case22/barcode02/YYYYMMDD_HHMM_1B_FLO44444_11111111/bam_pass/reads1.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case22/barcode02/YYYYMMDD_HHMM_1C_FLO55555_22222222/bam_pass/reads2.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case22/barcode02/YYYYMMDD_HHMM_1C_FLO55555_22222222/bam_pass/reads2.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case22/sample_sheet.csv: -------------------------------------------------------------------------------- 1 | barcode,alias,type 2 | barcode01,sample1,test_sample 3 | barcode02,sampleN,test_sample 4 | -------------------------------------------------------------------------------- /test_data/xam_ingress/case22/sample_sheet_sample_notindir.csv: -------------------------------------------------------------------------------- 1 | barcode,alias,type 2 | barcode13,sample13,test_sample 3 | -------------------------------------------------------------------------------- /test_data/xam_ingress/case23/sample1/YYYYMMDD_HHMM_0A_FLO00000_00000000/barcode01/bam_pass/reads0.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case23/sample1/YYYYMMDD_HHMM_0A_FLO00000_00000000/barcode01/bam_pass/reads0.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case23/sample1/YYYYMMDD_HHMM_0B_FLO11111_11111111/barcode02/bam_pass/reads1.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case23/sample1/YYYYMMDD_HHMM_0B_FLO11111_11111111/barcode02/bam_pass/reads1.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case23/sample1/YYYYMMDD_HHMM_0C_FLO22222_22222222/unclassified/bam_pass/reads2.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case23/sample1/YYYYMMDD_HHMM_0C_FLO22222_22222222/unclassified/bam_pass/reads2.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case23/sampleN/YYYYMMDD_HHMM_1A_FLO33333_00000000/barcode03/bam_pass/reads0.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case23/sampleN/YYYYMMDD_HHMM_1A_FLO33333_00000000/barcode03/bam_pass/reads0.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case23/sampleN/YYYYMMDD_HHMM_1B_FLO44444_11111111/barcode04/bam_pass/reads1.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case23/sampleN/YYYYMMDD_HHMM_1B_FLO44444_11111111/barcode04/bam_pass/reads1.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case23/sampleN/YYYYMMDD_HHMM_1C_FLO55555_22222222/unclassified/bam_pass/reads2.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case23/sampleN/YYYYMMDD_HHMM_1C_FLO55555_22222222/unclassified/bam_pass/reads2.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case23/sample_sheet.csv: -------------------------------------------------------------------------------- 1 | barcode,alias,type 2 | barcode01,sample1,test_sample 3 | barcode02,sampleN,test_sample 4 | -------------------------------------------------------------------------------- /test_data/xam_ingress/case23/sample_sheet_barcodealias.csv: -------------------------------------------------------------------------------- 1 | barcode,alias,type 2 | barcode01,barcode01,test_sample 3 | barcode02,barcoded,test_sample 4 | -------------------------------------------------------------------------------- /test_data/xam_ingress/case23/sample_sheet_dupealias.csv: -------------------------------------------------------------------------------- 1 | barcode,alias,type 2 | barcode01,sample1,test_sample 3 | barcode02,sample1,test_sample 4 | -------------------------------------------------------------------------------- /test_data/xam_ingress/case23/sample_sheet_sample_notindir.csv: -------------------------------------------------------------------------------- 1 | barcode,alias,type 2 | barcode13,sample13,test_sample 3 | -------------------------------------------------------------------------------- /test_data/xam_ingress/case24/barcode01/YYYYMMDD_HHMM_0A_FLO00000_00000000/bam_pass/reads0.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case24/barcode01/YYYYMMDD_HHMM_0A_FLO00000_00000000/bam_pass/reads0.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case24/barcode01/YYYYMMDD_HHMM_0B_FLO11111_11111111/bam_pass/reads1.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case24/barcode01/YYYYMMDD_HHMM_0B_FLO11111_11111111/bam_pass/reads1.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case24/barcode01/YYYYMMDD_HHMM_0C_FLO22222_22222222/bam_pass/reads2.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case24/barcode01/YYYYMMDD_HHMM_0C_FLO22222_22222222/bam_pass/reads2.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case24/sample1/YYYYMMDD_HHMM_0A_FLO00000_00000000/bam_pass/reads0.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case24/sample1/YYYYMMDD_HHMM_0A_FLO00000_00000000/bam_pass/reads0.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case24/sample1/YYYYMMDD_HHMM_0B_FLO11111_11111111/bam_pass/reads1.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case24/sample1/YYYYMMDD_HHMM_0B_FLO11111_11111111/bam_pass/reads1.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case24/sample1/YYYYMMDD_HHMM_0C_FLO22222_22222222/bam_pass/reads2.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/case24/sample1/YYYYMMDD_HHMM_0C_FLO22222_22222222/bam_pass/reads2.bam -------------------------------------------------------------------------------- /test_data/xam_ingress/case24/sample_sheet_conflict.csv: -------------------------------------------------------------------------------- 1 | barcode,alias,type 2 | barcode01,sample1,test_sample 3 | -------------------------------------------------------------------------------- /test_data/xam_ingress/reads.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epi2me-labs/wf-template/15e1afad48e9e1a71b372c6ad1f6fdbcdab8f909/test_data/xam_ingress/reads.bam --------------------------------------------------------------------------------