Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • dev
  • master
  • v0.1.0
  • v0.1.2
  • v0.2.0
  • v0.2.1
  • v0.2.2
  • v0.2.3
  • v0.2.4
  • v0.2.5
  • v0.2.6
  • v0.2.7
  • v0.2.8
  • v0.2.9
  • v0.3.0
  • v0.4.0
  • v2.0.0
17 results

Target

Select target project
  • LBMC/regards/nextflow
  • elabaron/nextflow
  • lanani/nextflow
  • mlepetit/nextflow
  • mdjaffar/nextflow
  • LBMC/RMI2/rmi2_pipelines
  • lpicard/nextflow
  • rseraphi/nextflow
  • hregue/nextflow
  • letien02/nextflow
  • mshamjal/nextflow
  • z483801/nextflow
  • fduveau/nextflow
  • cginevra/nextflow
  • dtorresc/nextflow
  • fmortreu/nextflow
  • jshapiro/nextflow
  • carpin/nextflow
  • LBMC/Delattre/JU28_59vs17_SNP
  • jclaud01/nextflow
  • dchalopi/nextflow
  • mvilcot/nextflow
  • mherbett/nextflow
  • lestrada/nextflow
  • nfontrod/nextflow
  • gbenoit/nextflow
  • gyvert/nextflow
  • aguill09/nextflow
  • alapendr/nextflow
  • jprobin/nextflow
  • vvanoost/nextflow
  • jblin/nextflow
  • mparis/nextflow
  • ogandril/nextflow
  • cbourgeo/nextflow
  • ggirau03/nextflow
  • ecombe01/nextflow
  • acorbin/nextflow
  • pberna01/nextflow
  • pmarie01/nextflow
  • rhoury/nextflow
  • lgely/nextflow
  • jvalat/nextflow
  • cfournea/nextflow
  • mprieux/nextflow
  • hpolvech/nextflow
  • LBMC/nextflow
  • mcariou/nextflow
  • z483800/nextflow
  • yjia01/nextflow
  • jkleine/nextflow
  • LBMC/Palladino/RNAseq_nextflow
  • jseimand/nextflow
  • nlecouvr/nextflow-nathan
54 results
Select Git revision
  • dev
  • master
  • v0.1.0
  • v0.1.2
  • v0.2.0
  • v0.2.1
  • v0.2.2
  • v0.2.3
  • v0.2.4
  • v0.2.5
  • v0.2.6
  • v0.2.7
  • v0.2.8
  • v0.2.9
14 results
Show changes
Showing
with 610 additions and 195 deletions
// SPDX-FileCopyrightText: 2022 Laurent Modolo <laurent.modolo@ens-lyon.fr>
//
// SPDX-License-Identifier: AGPL-3.0-or-later
version = "0.6.0"
container_url = "lbmc/rasusa:${version}"
include { index_fasta } from "./../samtools/main.nf"
params.sample_fastq = ""
params.sample_fastq_coverage = ""
params.sample_fastq_size = ""
params.sample_fastq_out = ""
workflow sample_fastq {
take:
fastq
fasta
main:
if (params.sample_fastq_coverage == "" && params.sample_fastq_size == ""){
fastq
.set{ final_fastq }
} else {
index_fasta(fasta)
sub_sample_fastq(fastq, index_fasta.out.index)
sub_sample_fastq.out.fastq
.set{ final_fastq }
}
emit:
fastq = final_fastq
}
process sub_sample_fastq {
container = "${container_url}"
label "small_mem_mono_cpus"
tag "$file_id"
if (params.index_fasta_out != "") {
publishDir "results/${params.sample_fastq_out}", mode: 'copy'
}
input:
tuple val(file_id), path(fastq)
tuple val(index_id), path(idx)
output:
tuple val(file_id), path("sub_*.fastq.gz"), emit: fastq
script:
switch(file_id) {
case {it instanceof List}:
file_prefix = file_id[0]
break
case {it instanceof Map}:
file_prefix = file_id.values()[0]
break
default:
file_prefix = file_id
break
}
sample_option = "-c " + params.sample_fastq_coverage
if (params.sample_fastq_size != ""){
sample_option = "-b " + params.sample_fastq_size
}
if (fastq.size() == 2)
"""
rasusa \
-i ${fastq[0]} ${fastq[1]} \
-g ${idx} \
${sample_option} \
-o sub_${fastq[0].simpleName}.fastq.gz sub_${fastq[1].simpleName}.fastq.gz
"""
else
"""
rasusa \
-i ${fastq} \
-g ${idx} \
${sample_option} \
-o sub_${fastq.simpleName}.fastq.gz
"""
}
\ No newline at end of file
// SPDX-FileCopyrightText: 2022 Laurent Modolo <laurent.modolo@ens-lyon.fr>
//
// SPDX-License-Identifier: AGPL-3.0-or-later
nextflow.enable.dsl=2
/*
./nextflow src/nf_modules/rasusa/test.nf -c src/nextflow.config -profile docker --fasta "data/tiny_dataset/fasta/tiny_v2.fasta" --fastq "data/tiny_dataset/fastq/tiny_R1.fastq"
./nextflow src/nf_modules/rasusa/test.nf -c src/nextflow.config -profile docker --fasta "data/tiny_dataset/fasta/tiny_v2.fasta" --fastq "data/tiny_dataset/fastq/tiny_R{1,2}.fastq" --coverage 1.0
./nextflow src/nf_modules/rasusa/test.nf -c src/nextflow.config -profile docker --fasta "data/tiny_dataset/fasta/tiny_v2.fasta" --fastq "data/tiny_dataset/fastq/tiny_R1.fastq" --size "1Mb"
*/
params.fastq = "data/fastq/*R{1,2}*"
params.fasta = "data/fasta/*.fasta"
params.coverage = ""
params.size = ""
include { sample_fastq } from "./main.nf" addParams(sample_fastq_coverage: params.coverage, sample_fastq_size: params.size, sample_fastq_out: "sample/")
channel
.fromFilePairs( params.fastq, size: -1)
.set { fastq_files }
channel
.fromPath( params.fasta )
.map { it -> [it.simpleName, it]}
.set { fasta_files }
workflow {
sample_fastq(fastq_files, fasta_files.collect())
}
\ No newline at end of file
#! /bin/sh
# SPDX-FileCopyrightText: 2022 Laurent Modolo <laurent.modolo@ens-lyon.fr>
#
# SPDX-License-Identifier: AGPL-3.0-or-later
./nextflow src/nf_modules/rasusa/test.nf -c src/nextflow.config -profile docker --fasta "data/tiny_dataset/fasta/tiny_v2.fasta" --fastq "data/tiny_dataset/fastq/tiny_R1.fastq"
./nextflow src/nf_modules/rasusa/test.nf -c src/nextflow.config -profile docker --fasta "data/tiny_dataset/fasta/tiny_v2.fasta" --fastq "data/tiny_dataset/fastq/tiny_R{1,2}.fastq" --coverage 1.0
./nextflow src/nf_modules/rasusa/test.nf -c src/nextflow.config -profile docker --fasta "data/tiny_dataset/fasta/tiny_v2.fasta" --fastq "data/tiny_dataset/fastq/tiny_R1.fastq" --size "1Mb"
\ No newline at end of file
// SPDX-FileCopyrightText: 2022 Laurent Modolo <laurent.modolo@ens-lyon.fr>
//
// SPDX-License-Identifier: AGPL-3.0-or-later
version = "1.8.0"
container_url = "lbmc/salmon:${version}"
process quantify {
container = "${container_url}"
label "big_mem_multi_cpus"
tag "$file_id"
if (params.salmon_out != "") {
publishDir "results/${params.salmon_out}", mode: 'copy'
}
input:
tuple val(file_id), path(bam)
output:
tuple val(file_id), path("*.sf"), emit: quant
script:
"""
salmon quant -l A --noErrorModel -t XXXXXXXXXX -a ${bam} -p 4 -o ${params.salmon_out}
"""
}
\ No newline at end of file
profiles {
docker {
docker.temp = 'auto'
docker.enabled = true
process {
$index_bam {
container = "sambamba:0.6.7"
}
}
}
sge {
process{
$index_bam {
beforeScript = "module purge; module load sambamba/0.6.7"
}
}
}
}
params.bam = "$baseDir/data/bam/*.bam"
log.info "bams files : ${params.bam}"
Channel
.fromPath( params.bam )
.ifEmpty { error "Cannot find any bam files matching: ${params.bam}" }
.map { it -> [(it.baseName =~ /([^\.]*)/)[0][1], it]}
.set { bam_files }
process index_bam {
tag "$file_id"
cpus 4
input:
set file_id, file(bam) from bam_files
output:
set file_id, "*.bam*" into indexed_bam_file
script:
"""
sambamba index -t ${task.cpus} ${bam}
"""
}
// SPDX-FileCopyrightText: 2022 Laurent Modolo <laurent.modolo@ens-lyon.fr>
//
// SPDX-License-Identifier: AGPL-3.0-or-later
version = "0.6.7"
container_url = "lbmc/sambamba:${version}"
params.index_bam = ""
process index_bam {
container = "${container_url}"
label "big_mem_multi_cpus"
tag "$file_id"
input:
tuple val(file_id), path(bam)
output:
tuple val(file_id), path("*.bam*"), emit: bam
script:
"""
sambamba index ${params.index_bam} -t ${task.cpus} ${bam}
"""
}
params.sort_bam = ""
process sort_bam {
container = "${container_url}"
label "big_mem_multi_cpus"
tag "$file_id"
input:
tuple val(file_id), path(bam)
output:
tuple val(file_id), path("*.bam*"), emit: bam
script:
"""
sambamba sort -t ${task.cpus} ${params.sort_bam} -o ${bam.baseName}_sorted.bam ${bam}
"""
}
params.split_bam = ""
process split_bam {
container = "${container_url}"
label "big_mem_multi_cpus"
tag "$file_id"
input:
tuple val(file_id), path(bam)
output:
tuple val(file_id), path("*_forward.bam*"), emit: bam_forward
tuple val(file_id), path("*_reverse.bam*"), emit: bam_reverse
script:
"""
sambamba view -t ${task.cpus} ${params.split_bam} -h -F "strand == '+'" ${bam} > \
${bam.baseName}_forward.bam
sambamba view -t ${task.cpus} ${params.split_bam} -h -F "strand == '-'" ${bam} > \
${bam.baseName}_reverse.bam
"""
}
profiles {
docker {
docker.temp = 'auto'
docker.enabled = true
process {
$sort_bam {
container = "sambamba:0.6.7"
}
}
}
sge {
process{
$sort_bam {
beforeScript = "module purge; module load sambamba/0.6.7"
}
}
}
}
params.bam = "$baseDir/data/bam/*.bam"
log.info "bams files : ${params.bam}"
Channel
.fromPath( params.bam )
.ifEmpty { error "Cannot find any bam files matching: ${params.bam}" }
.map { it -> [(it.baseName =~ /([^\.]*)/)[0][1], it]}
.set { bam_files }
process sort_bam {
tag "$file_id"
cpus 4
input:
set file_id, file(bam) from bam_files
output:
set file_id, "*_sorted.bam" into sorted_bam_files
script:
"""
sambamba sort -t ${task.cpus} -o ${file_id}_sorted.bam ${bam}
"""
}
profiles {
docker {
docker.temp = 'auto'
docker.enabled = true
process {
$split_bam {
container = "sambamba:0.6.7"
}
}
}
sge {
process{
$split_bam {
beforeScript = "module purge; module load sambamba/0.6.7"
}
}
}
}
params.bam = "$baseDir/data/bam/*.bam"
log.info "bams files : ${params.bam}"
Channel
.fromPath( params.bam )
.ifEmpty { error "Cannot find any bam files matching: ${params.bam}" }
.map { it -> [(it.baseName =~ /([^\.]*)/)[0][1], it]}
.set { bam_files }
process split_bam {
tag "$file_id"
cpus 4
input:
set file_id, file(bam) from bam_files
output:
set file_id, "*_forward.bam*" into forward_bam_files
set file_id, "*_reverse.bam*" into reverse_bam_files
script:
"""
sambamba view -t ${task.cpus} -h -F "strand == '+'" ${bam} > ${file_id}_forward.bam
sambamba view -t ${task.cpus} -h -F "strand == '-'" ${bam} > ${file_id}_reverse.bam
"""
}
./nextflow src/nf_modules/sambamba/sort_bams.nf \
-c src/nf_modules/sambamba/sort_bams.config \
-profile docker \
--bam "data/tiny_dataset/map/tiny_v2.bam"
./nextflow src/nf_modules/sambamba/index_bams.nf \
-c src/nf_modules/sambamba/index_bams.config \
-profile docker \
--bam "data/tiny_dataset/map/tiny_v2.sort.bam"
./nextflow src/nf_modules/sambamba/split_bams.nf \
-c src/nf_modules/sambamba/split_bams.config \
-profile docker \
--bam "data/tiny_dataset/map/tiny_v2.bam"
profiles {
docker {
docker.temp = 'auto'
docker.enabled = true
process {
$dedup_sam {
container = "samblaster:0.1.24"
}
}
}
sge {
process{
$dedup_sam {
beforeScript = "module purge; module load samblaster/0.1.24"
}
}
}
}
params.sam = "$baseDir/data/sam/*.sam"
log.info "sams files : ${params.sam}"
Channel
.fromPath( params.sam )
.ifEmpty { error "Cannot find any sam files matching: ${params.sam}" }
.map { it -> [(it.baseName =~ /([^\.]*)/)[0][1], it]}
.set { sam_files }
process dedup_sam {
tag "$file_id"
cpus 4
input:
set file_id, file(sam) from sam_files
output:
set file_id, "*_dedup.sam*" into dedup_sam_files
script:
"""
samblaster --addMateTags -i ${sam} -o ${file_id}_dedup.sam
"""
}
./nextflow src/nf_modules/samblaster/dedup_sams.nf \
-c src/nf_modules/samblaster/dedup_sams.config \
-profile docker \
--sam "data/tiny_dataset/map/tiny_v2.sam"
// SPDX-FileCopyrightText: 2022 Laurent Modolo <laurent.modolo@ens-lyon.fr>
//
// SPDX-License-Identifier: AGPL-3.0-or-later
version = "1.11"
container_url = "lbmc/samtools:${version}"
params.index_fasta = ""
params.index_fasta_out = ""
process index_fasta {
container = "${container_url}"
label "big_mem_mono_cpus"
tag "$file_id"
if (params.index_fasta_out != "") {
publishDir "results/${params.index_fasta_out}", mode: 'copy'
}
input:
tuple val(file_id), path(fasta)
output:
tuple val(file_id), path("*.fai"), emit: index
script:
"""
if gzip -t ${fasta}; then
zcat ${fasta} > ${fasta.simpleName}.fasta
samtools faidx ${params.index_fasta} ${fasta.simpleName}.fasta
else
samtools faidx ${params.index_fasta} ${fasta}
fi
"""
}
params.filter_bam_quality_threshold = 30
params.filter_bam_quality = "-q ${params.filter_bam_quality_threshold}"
params.filter_bam_quality_out = ""
process filter_bam_quality {
container = "${container_url}"
label "big_mem_multi_cpus"
tag "$file_id"
if (params.filter_bam_quality_out != "") {
publishDir "results/${params.filter_bam_quality_out}", mode: 'copy'
}
input:
tuple val(file_id), path(bam)
output:
tuple val(file_id), path("*_filtered.bam"), emit: bam
script:
"""
samtools view -@ ${task.cpus} -hb ${bam} ${params.filter_bam_quality} > \
${bam.simpleName}_filtered.bam
"""
}
params.filter_bam = ""
params.filter_bam_out = ""
process filter_bam {
container = "${container_url}"
label "big_mem_multi_cpus"
tag "$file_id"
if (params.filter_bam_out != "") {
publishDir "results/${params.filter_bam_out}", mode: 'copy'
}
input:
tuple val(file_id), path(bam)
tuple val(bed_id), path(bed)
output:
tuple val(file_id), path("*_filtered.bam"), emit: bam
script:
"""
samtools view -@ ${task.cpus} -hb ${bam} -L ${bed} ${params.filter_bam} > \
${bam.simpleName}_filtered.bam
"""
}
params.rm_from_bam = ""
params.rm_from_bam_out = ""
process rm_from_bam {
container = "${container_url}"
label "big_mem_multi_cpus"
tag "$file_id"
if (params.rm_from_bam_out != "") {
publishDir "results/${params.rm_from_bam_out}", mode: 'copy'
}
input:
tuple val(file_id), path(bam)
tuple val(bed_id), path(bed)
output:
tuple val(file_id), path("*_filtered.bam"), emit: bam
script:
"""
samtools view -@ ${task.cpus} ${params.filter_bam} -hb -L ${bed} -U ${bam.simpleName}_filtered.bam ${bam} > /dev/null
"""
}
params.filter_bam_mapped = "-F 4"
params.filter_bam_mapped_out = ""
process filter_bam_mapped {
container = "${container_url}"
label "big_mem_multi_cpus"
tag "$file_id"
if (params.filter_bam_mapped_out != "") {
publishDir "results/${params.filter_bam_mapped_out}", mode: 'copy'
}
input:
tuple val(file_id), path(bam)
output:
tuple val(file_id), path("*_mapped.bam"), emit: bam
script:
"""
samtools view -@ ${task.cpus} ${params.filter_bam_mapped} -hb ${bam} > \
${bam.simpleName}_mapped.bam
"""
}
params.filter_bam_unmapped = "-f 4"
params.filter_bam_unmapped_out = ""
process filter_bam_unmapped {
container = "${container_url}"
label "big_mem_multi_cpus"
tag "$file_id"
if (params.filter_bam_unmapped_out != "") {
publishDir "results/${params.filter_bam_unmapped_out}", mode: 'copy'
}
input:
tuple val(file_id), path(bam)
output:
tuple val(file_id), path("*_unmapped.bam"), emit: bam
script:
"""
samtools view -@ ${task.cpus} ${params.filter_bam_unmapped} -hb ${bam} > ${bam.simpleName}_unmapped.bam
"""
}
params.index_bam = ""
params.index_bam_out = ""
process index_bam {
container = "${container_url}"
label "big_mem_mono_cpus"
tag "$file_id"
if (params.index_bam_out != "") {
publishDir "results/${params.index_bam_out}", mode: 'copy'
}
input:
tuple val(file_id), path(bam)
output:
tuple val(file_id), path("${bam}"), path("*.bam.bai"), emit: bam_idx
script:
"""
samtools index ${params.index_bam} ${bam}
"""
}
params.sort_bam = ""
params.sort_bam_out = ""
process sort_bam {
container = "${container_url}"
label "big_mem_multi_cpus"
tag "$file_id"
if (params.sort_bam_out != "") {
publishDir "results/${params.sort_bam_out}", mode: 'copy'
}
input:
tuple val(file_id), path(bam)
output:
tuple val(file_id), path("*.bam*"), emit: bam
script:
"""
samtools sort -@ ${task.cpus} ${params.sort_bam} -O BAM -o ${bam.simpleName}_sorted.bam ${bam}
"""
}
params.split_bam = ""
params.split_bam_out = ""
process split_bam {
container = "${container_url}"
label "big_mem_multi_cpus"
tag "$file_id"
if (params.split_bam_out != "") {
publishDir "results/${params.split_bam_out}", mode: 'copy'
}
input:
tuple val(file_id), path(bam)
output:
tuple val(file_id), path("*_forward.bam*"), emit: bam_forward
tuple val(file_id), path("*_reverse.bam*"), emit: bam_reverse
script:
"""
samtools view -@ ${Math.round(task.cpus/2)} ${params.split_bam} \
-hb -F 0x10 ${bam} > ${bam.simpleName}_forward.bam &
samtools view -@ ${Math.round(task.cpus/2)} ${params.split_bam} \
-hb -f 0x10 ${bam} > ${bam.simpleName}_reverse.bam
"""
}
params.merge_bam = ""
params.merge_bam_out = ""
process merge_bam {
container = "${container_url}"
label "big_mem_multi_cpus"
tag "$file_id"
if (params.merge_bam_out != "") {
publishDir "results/${params.merge_bam_out}", mode: 'copy'
}
input:
tuple val(first_file_id), path(first_bam)
tuple val(second_file_id), path(second_bam)
output:
tuple val(file_id), path("*.bam*"), emit: bam
script:
"""
samtools merge -@ ${task.cpus} ${params.merge_bam} ${first_bam} ${second_bam} \
${first_bam.simpleName}_${second_file.simpleName}.bam
"""
}
params.merge_multi_bam = ""
params.merge_multi_bam_out = ""
process merge_multi_bam {
container = "${container_url}"
label "big_mem_multi_cpus"
tag "$file_id"
if (params.merge_multi_bam_out != "") {
publishDir "results/${params.merge_multi_bam_out}", mode: 'copy'
}
input:
tuple val(file_id), path(bams)
output:
tuple val(file_id), path("*_merged.bam*"), emit: bam
script:
"""
samtools merge -@ ${task.cpus} \
${params.merge_multi_bam} \
${bams[0].simpleName}_merged.bam \
${bams}
"""
}
params.stats_bam = ""
params.stats_bam_out = ""
process stats_bam {
container = "${container_url}"
label "big_mem_multi_cpus"
tag "$file_id"
if (params.stats_bam_out != "") {
publishDir "results/${params.stats_bam_out}", mode: 'copy'
}
input:
tuple val(file_id), path(bam)
output:
tuple val(file_id), path("*.tsv"), emit: tsv
path "*.flagstat.txt", emit: report
script:
"""
samtools flagstat -@ ${task.cpus} ${params.stats_bam} -O tsv ${bam} > ${bam.simpleName}.flagstat.txt
cp ${bam.simpleName}.flagstat.txt ${bam.simpleName}.tsv
"""
}
params.flagstat_2_multiqc = ""
params.flagstat_2_multiqc_out = ""
process flagstat_2_multiqc {
tag "$file_id"
if (params.flagstat_2_multiqc_out != "") {
publishDir "results/${params.flagstat_2_multiqc_out}", mode: 'copy'
}
input:
tuple val(file_id), path(tsv)
output:
tuple val(file_id), path("*.txt"), emit: report
"""
mv ${tsv} ${tsv.simpleName}.flagstat.txt
"""
}
params.idxstat_2_multiqc = ""
params.idxstat_2_multiqc_out = ""
process idxstat_2_multiqc {
tag "$file_id"
if (params.idxstat_2_multiqc_out != "") {
publishDir "results/${params.idxstat_2_multiqc_out}", mode: 'copy'
}
input:
tuple val(file_id), path(tsv)
output:
tuple val(file_id), path("*.txt"), emit: report
"""
mv ${tsv} ${tsv.simpleName}.idxstats.txt
"""
}
\ No newline at end of file
// SPDX-FileCopyrightText: 2022 Laurent Modolo <laurent.modolo@ens-lyon.fr>
//
// SPDX-License-Identifier: AGPL-3.0-or-later
container_url="mlepetit/sanity:latest"
params.sanity_out=""
params.sanity=""
process normalization_sanity
{
container="${container_url}"
label "big_mem_multi_cpus"
if (params.sanity_out != "") {
publishDir "results/${params.sanity_out}", mode: 'copy'
}
else {
publishDir "results/normalize_matrix/", mode: 'copy'
}
input:
tuple val(id_mtx), path(raw_filtered_mtx)
output:
tuple val(id_mtx),path("log_transcription_quotients.txt"), emit: normalize_filtered_mtx
tuple val(id_mtx), path("ltq_error_bars.txt") ,emit: ltq_error
script:
"""
Sanity -f ${raw_filtered_mtx} -n ${task.cpus} ${params.sanity}
"""
}
SPDX-FileCopyrightText: 2022 Laurent Modolo <laurent.modolo@ens-lyon.fr>
SPDX-License-Identifier: CC-BY-SA-4.0
// SPDX-FileCopyrightText: 2022 Laurent Modolo <laurent.modolo@ens-lyon.fr>
//
// SPDX-License-Identifier: AGPL-3.0-or-later
version = "3.0.0"
container_url = "lbmc/sratoolkit:${version}"
params.fastq_dump = ""
params.fastq_dump_out = ""
process fastq_dump {
container = "${container_url}"
label "big_mem_mono_cpus"
tag "$sra"
if (params.fastq_dump_out != "") {
publishDir "results/${params.fastq_dump_out}", mode: 'copy'
}
input:
val sra
output:
tuple val(sra), path("*.fastq"), emit: fastq
script:
"""
fastq-dump ${params.fastq_dump} --split-files --gzip ${sra}
if [ -f ${sra}_1.fastq ]
then
mv ${sra}_1.fastq ${sra}_R1.fastq
fi
if [ -f ${sra}_2.fastq ]
then
mv ${sra}_2.fastq ${sra}_R2.fastq
fi
"""
}