Skip to content
Snippets Groups Projects
Unverified Commit 795a285e authored by Ruben Vorderman's avatar Ruben Vorderman Committed by GitHub
Browse files

Merge pull request #231 from biowdl/BIOWDL-484

Update images
parents 4bfae066 34163a93
No related branches found
No related tags found
No related merge requests found
......@@ -11,6 +11,11 @@ that users understand how the changes affect the new version.
version 4.0.0-develop
---------------------------
+ Reworked bcf2vcf task into bcftools view task.
+ Removed the redundant format flag from the htseq interface. This is
autodetected in newer versions of htseq.
+ Update docker images for samtools, bcftools, picard, GATK, cutadapt, htseq
and chunked-scatter.
+ Default docker images for bwa, bwakit and hisat2 updated to include samtools
1.10.
+ Alignment tasks (STAR, Hisat2, BWA) now produce BAM files at level 1
......
......@@ -22,23 +22,31 @@ version 1.0
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
task Bcf2Vcf {
task View {
input {
File bcf
String outputPath = "./bcftools/SV.vcf"
String memory = "2G"
Int timeMinutes = 1 + ceil(size(bcf, "G"))
String dockerImage = "quay.io/biocontainers/bcftools:1.9--ha228f0b_3"
File inputFile
String outputPath = "output.vcf.gz"
String memory = "256M"
Int timeMinutes = 1 + ceil(size(inputFile, "G"))
String dockerImage = "quay.io/biocontainers/bcftools:1.10.2--h4f4756c_2"
String outputType = "z"
Int compressionLevel = 1
}
command {
set -e
mkdir -p "$(dirname ~{outputPath})"
bcftools view ~{bcf} -O v -o ~{outputPath}
bcftools view \
-o ~{outputPath} \
-O ~{outputType} \
-l ~{compressionLevel} \
~{inputFile}
bcftools index --tbi ~{outputPath}
}
output {
File outputVcf = outputPath
File outputVcfIndex = outputPath + ".tbi"
}
runtime {
......@@ -48,9 +56,11 @@ task Bcf2Vcf {
}
parameter_meta {
bcf: {description: "The generated BCF from an SV caller", category: "required"}
inputFile: {description: "A vcf or bcf file.", category: "required"}
outputPath: {description: "The location the output VCF file should be written.", category: "common"}
outputType: {description: "Output type: v=vcf, z=vcf.gz, b=bcf, u=uncompressed bcf"}
memory: {description: "The amount of memory this job will use.", category: "advanced"}
compressionLevel: {description: "Compression level from 0 (uncompressed) to 9 (best).", category: "advanced"}
timeMinutes: {description: "The maximum amount of time the job will run in minutes.", category: "advanced"}
dockerImage: {description: "The docker image used for this task. Changing this may result in errors which the developers may choose not to address.", category: "advanced"}
}
......@@ -87,7 +97,7 @@ task Stats {
Int threads = 0
Int timeMinutes = 1 + 2* ceil(size(select_all([inputVcf, compareVcf]), "G")) # TODO: Estimate, 2 minutes per GB, refine later.
String memory = "256M"
String dockerImage = "quay.io/biocontainers/bcftools:1.9--ha228f0b_3"
String dockerImage = "quay.io/biocontainers/bcftools:1.10.2--h4f4756c_2"
}
command {
......@@ -159,4 +169,4 @@ task Stats {
memory: {description: "The amount of memory this job will use.", category: "advanced"}
timeMinutes: {description: "The maximum amount of time the job will run in minutes.", category: "advanced"}
}
}
\ No newline at end of file
}
......@@ -30,7 +30,7 @@ task ChunkedScatter {
String memory = "256M"
Int timeMinutes = 2
String dockerImage = "quay.io/biocontainers/chunked-scatter:0.2.0--py_0"
String dockerImage = "quay.io/biocontainers/chunked-scatter:1.0.0--py_0"
}
command {
......
......@@ -81,7 +81,7 @@ task Cutadapt {
Int cores = 4
String memory = "~{300 + 100 * cores}M"
Int timeMinutes = 1 + ceil(size([read1, read2], "G") * 12.0 / cores)
String dockerImage = "quay.io/biocontainers/cutadapt:2.8--py37h516909a_0"
String dockerImage = "quay.io/biocontainers/cutadapt:2.10--py37h516909a_0"
}
String realRead2output = select_first([read2output, "cut_r2.fq.gz"])
......
......@@ -35,7 +35,7 @@ task AnnotateIntervals {
String memory = "3G"
String javaXmx = "2G"
Int timeMinutes = 5
String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
}
command {
......@@ -96,7 +96,7 @@ task ApplyBQSR {
Int memoryMb = javaXmxMb + 512
Int javaXmxMb = 2048
Int timeMinutes = 120 # This will likely be used with intervals, as such size based estimation can't be used.
String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
}
command {
......@@ -168,7 +168,7 @@ task BaseRecalibrator {
Int memoryMb = javaXmxMb + 512
Int javaXmxMb = 1024
Int timeMinutes = 120 # This will likely be used with intervals, as such size based estimation can't be used.
String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
}
command {
......@@ -227,7 +227,7 @@ task CalculateContamination {
String memory = "13G"
String javaXmx = "12G"
Int timeMinutes = 180
String dockerImage = "quay.io/biocontainers/gatk4:4.1.2.0--1"
String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
}
command {
......@@ -271,7 +271,7 @@ task CallCopyRatioSegments {
String memory = "3G"
String javaXmx = "2G"
Int timeMinutes = 2
String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
}
command {
......@@ -320,7 +320,7 @@ task CollectAllelicCounts {
String memory = "11G"
String javaXmx = "10G"
Int timeMinutes = 120
String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
}
command {
......@@ -376,7 +376,7 @@ task CollectReadCounts {
String memory = "8G"
String javaXmx = "7G"
Int timeMinutes = 1 + ceil(size(inputBam, "G") * 5)
String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
}
command {
......@@ -433,7 +433,7 @@ task CombineGVCFs {
String memory = "5G"
String javaXmx = "4G"
Int timeMinutes = 1 + ceil(size(gvcfFiles, "G") * 8)
String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
}
command {
......@@ -560,7 +560,7 @@ task CreateReadCountPanelOfNormals {
String memory = "8G"
String javaXmx = "7G"
Int timeMinutes = 5
String dockerImage = "broadinstitute/gatk:4.1.4.0" # The biocontainer causes a spark related error for some reason...
String dockerImage = "broadinstitute/gatk:4.1.8.0" # The biocontainer causes a spark related error for some reason...
}
command {
......@@ -607,7 +607,7 @@ task DenoiseReadCounts {
String memory = "5G"
String javaXmx = "4G"
Int timeMinutes = 5
String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
}
command {
......@@ -665,7 +665,7 @@ task FilterMutectCalls {
String memory = "13G"
String javaXmx = "12G"
Int timeMinutes = 60
String dockerImage = "quay.io/biocontainers/gatk4:4.1.2.0--1"
String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
}
command {
......@@ -728,7 +728,7 @@ task GatherBqsrReports {
Int memoryMb = 256 + javaXmxMb
Int javaXmxMb = 256
Int timeMinutes = 1
String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
}
command {
......@@ -774,7 +774,7 @@ task GenomicsDBImport {
String memory = "5G"
String javaXmx = "4G"
Int timeMinutes = 180
String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
}
command {
......@@ -833,7 +833,7 @@ task GenotypeGVCFs {
String memory = "7G"
String javaXmx = "6G"
Int timeMinutes = 120 # This will likely be used with intervals, as such size based estimation can't be used.
String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
}
command {
......@@ -899,7 +899,7 @@ task GetPileupSummaries {
String memory = "13G"
String javaXmx = "12G"
Int timeMinutes = 120
String dockerImage = "quay.io/biocontainers/gatk4:4.1.2.0--1"
String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
}
command {
......@@ -966,7 +966,7 @@ task HaplotypeCaller {
# Memory increases with time used. 4G should cover most use cases.
Int javaXmxMb = 4096
Int timeMinutes = 400 # This will likely be used with intervals, as such size based estimation can't be used.
String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
}
command {
......@@ -1040,7 +1040,7 @@ task LearnReadOrientationModel {
String memory = "13G"
String javaXmx = "12G"
Int timeMinutes = 120
String dockerImage = "quay.io/biocontainers/gatk4:4.1.2.0--1"
String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
}
command {
......@@ -1079,7 +1079,7 @@ task MergeStats {
String memory = "15G"
String javaXmx = "14G"
Int timeMinutes = 30
String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
}
command {
......@@ -1126,7 +1126,7 @@ task ModelSegments {
String memory = "11G"
String javaXmx = "10G"
Int timeMinutes = 60
String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
}
command {
......@@ -1202,7 +1202,7 @@ task MuTect2 {
String memory = "5G"
String javaXmx = "4G"
Int timeMinutes = 240
String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
}
command {
......@@ -1271,7 +1271,7 @@ task PlotDenoisedCopyRatios {
String memory = "4G"
String javaXmx = "3G"
Int timeMinutes = 2
String dockerImage = "broadinstitute/gatk:4.1.4.0" # The biocontainer doesn't seem to contain R.
String dockerImage = "broadinstitute/gatk:4.1.8.0"
}
command {
......@@ -1289,7 +1289,7 @@ task PlotDenoisedCopyRatios {
output {
File denoisedCopyRatiosPlot = outputDir + "/" + outputPrefix + ".denoised.png"
File denoisedCopyRatiosLimitedPlot = outputDir + "/" + outputPrefix + ".denoisedLimit4.png"
File? denoisedCopyRatiosLimitedPlot = outputDir + "/" + outputPrefix + ".denoisedLimit4.png"
File standardizedMedianAbsoluteDeviation = outputDir + "/" + outputPrefix + ".standardizedMAD.txt"
File denoisedMedianAbsoluteDeviation = outputDir + "/" + outputPrefix + ".denoisedMAD.txt"
File deltaMedianAbsoluteDeviation = outputDir + "/" + outputPrefix + ".deltaMAD.txt"
......@@ -1331,7 +1331,7 @@ task PlotModeledSegments {
String memory = "4G"
String javaXmx = "3G"
Int timeMinutes = 2
String dockerImage = "broadinstitute/gatk:4.1.4.0" # The biocontainer doesn't seem to contain R.
String dockerImage = "broadinstitute/gatk:4.1.8.0"
}
command {
......@@ -1389,7 +1389,7 @@ task PreprocessIntervals {
String memory = "4G"
String javaXmx = "3G"
Int timeMinutes = 1 + ceil(size(referenceFasta, "G") * 6)
String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
}
command {
......@@ -1447,7 +1447,7 @@ task SelectVariants {
String memory = "5G"
String javaXmx = "4G"
Int timeMinutes = 60
String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
}
command {
......@@ -1507,7 +1507,7 @@ task SplitNCigarReads {
String memory = "5G"
String javaXmx = "4G"
Int timeMinutes = 120 # This will likely be used with intervals, as such size based estimation can't be used.
String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
}
command {
......@@ -1576,7 +1576,7 @@ task VariantEval {
String javaXmx = "4G"
# TODO: Refine estimate. For now 4 minutes per GB of input.
Int timeMinutes = ceil(size(flatten([evalVcfs, comparisonVcfs, select_all([referenceFasta, dbsnpVCF])]), "G") * 20)
String dockerImage = "quay.io/biocontainers/gatk4:4.1.7.0--py38_0"
String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
}
command {
......@@ -1647,7 +1647,7 @@ task VariantFiltration {
String memory = "5G"
String javaXmx = "4G"
Int timeMinutes = 120
String dockerImage = "quay.io/biocontainers/gatk4:4.1.0.0--0"
String dockerImage = "quay.io/biocontainers/gatk4:4.1.8.0--py38h37ae868_0"
}
command {
......
......@@ -25,23 +25,23 @@ task HTSeqCount {
Array[File]+ inputBams
File gtfFile
String outputTable = "output.tsv"
String format = "bam"
String order = "pos"
String stranded = "no"
String? featureType
String? idattr
Array[String] additionalAttributes = []
Int nprocesses = 1
String memory = "8G"
Int timeMinutes = 10 + ceil(size(inputBams, "G") * 60)
String dockerImage = "quay.io/biocontainers/htseq:0.11.2--py37h637b7d7_1"
String dockerImage = "quay.io/biocontainers/htseq:0.12.4--py37hb3f55d8_0"
}
command {
set -e
mkdir -p "$(dirname ~{outputTable})"
htseq-count \
-f ~{format} \
--nprocesses ~{nprocesses} \
-r ~{order} \
-s ~{stranded} \
~{"--type " + featureType} \
......@@ -49,7 +49,7 @@ task HTSeqCount {
~{true="--additional-attr " false="" length(additionalAttributes) > 0 }~{sep=" --additional-attr " additionalAttributes} \
~{sep=" " inputBams} \
~{gtfFile} \
> ~{outputTable}
-c ~{outputTable}
}
output {
......@@ -57,6 +57,7 @@ task HTSeqCount {
}
runtime {
cpu: nprocesses
time_minutes: timeMinutes
memory: memory
docker: dockerImage
......@@ -66,7 +67,7 @@ task HTSeqCount {
inputBams: {description: "The input BAM files.", category: "required"}
gtfFile: {description: "A GTF/GFF file containing the features of interest.", category: "required"}
outputTable: {description: "The path to which the output table should be written.", category: "common"}
format: {description: "Equivalent to the -f option of htseq-count.", category: "advanced"}
nprocesses: {description: "Number of processes to run htseq with.", category: "advanced"}
order: {description: "Equivalent to the -r option of htseq-count.", category: "advanced"}
stranded: {description: "Equivalent to the -s option of htseq-count.", category: "common"}
featureType: {description: "Equivalent to the --type option of htseq-count.", category: "advanced"}
......
......@@ -89,7 +89,7 @@ task CollectMultipleMetrics {
Int javaXmxMb = 3072
# Additional * 2 because picard multiple metrics reads the reference fasta twice.
Int timeMinutes = 1 + ceil(size(referenceFasta, "G") * 3 * 2) + ceil(size(inputBam, "G") * 6)
String dockerImage = "quay.io/biocontainers/picard:2.20.5--0"
String dockerImage = "quay.io/biocontainers/picard:2.23.2--0"
}
......@@ -205,7 +205,7 @@ task CollectRnaSeqMetrics {
String javaXmx = "8G"
# With 6 minutes per G there were several timeouts.
Int timeMinutes = 1 + ceil(size(inputBam, "G") * 12)
String dockerImage = "quay.io/biocontainers/picard:2.20.5--0"
String dockerImage = "quay.io/biocontainers/picard:2.23.2--0"
}
command {
......@@ -263,7 +263,7 @@ task CollectTargetedPcrMetrics {
String memory = "4G"
String javaXmx = "3G"
Int timeMinutes = 1 + ceil(size(inputBam, "G") * 6)
String dockerImage = "quay.io/biocontainers/picard:2.20.5--0"
String dockerImage = "quay.io/biocontainers/picard:2.23.2--0"
}
command {
......@@ -322,7 +322,7 @@ task CreateSequenceDictionary {
String memory = "3G"
String javaXmx = "2G"
String dockerImage = "quay.io/biocontainers/picard:2.22.3--0"
String dockerImage = "quay.io/biocontainers/picard:2.23.2--0"
}
command {
......@@ -370,7 +370,7 @@ task GatherBamFiles {
Boolean createMd5File = false
# One minute per input gigabyte.
Int timeMinutes = 1 + ceil(size(inputBams, "G") * 1)
String dockerImage = "quay.io/biocontainers/picard:2.20.5--0"
String dockerImage = "quay.io/biocontainers/picard:2.23.2--0"
}
command {
......@@ -422,7 +422,7 @@ task GatherVcfs {
String memory = "5G"
String javaXmx = "4G"
Int timeMinutes = 1 + ceil(size(inputVcfs, "G") * 2)
String dockerImage = "quay.io/biocontainers/picard:2.20.5--0"
String dockerImage = "quay.io/biocontainers/picard:2.23.2--0"
}
command {
......@@ -478,7 +478,7 @@ task MarkDuplicates {
String memoryMb = javaXmxMb + 512
Int timeMinutes = 1 + ceil(size(inputBams, "G") * 8)
String dockerImage = "quay.io/biocontainers/picard:2.20.5--0"
String dockerImage = "quay.io/biocontainers/picard:2.23.2--0"
# The program default for READ_NAME_REGEX is appropriate in nearly every case.
# Sometimes we wish to supply "null" in order to turn off optical duplicate detection
......@@ -554,7 +554,7 @@ task MergeVCFs {
String memory = "5G"
String javaXmx = "4G"
Int timeMinutes = 1 + ceil(size(inputVCFs, "G"))
String dockerImage = "quay.io/biocontainers/picard:2.20.5--0"
String dockerImage = "quay.io/biocontainers/picard:2.23.2--0"
}
# Using MergeVcfs instead of GatherVcfs so we can create indices
......@@ -603,7 +603,7 @@ task SamToFastq {
String memory = "17G"
String javaXmx = "16G" # High memory default to avoid crashes.
String dockerImage = "quay.io/biocontainers/picard:2.20.5--0"
String dockerImage = "quay.io/biocontainers/picard:2.23.2--0"
File? NONE
}
......@@ -640,7 +640,7 @@ task ScatterIntervalList {
String memory = "4G"
String javaXmx = "3G"
String dockerImage = "quay.io/biocontainers/picard:2.20.5--0"
String dockerImage = "quay.io/biocontainers/picard:2.23.2--0"
}
command {
......@@ -681,9 +681,7 @@ task SortSam {
# GATK Best practices uses 75000 here: https://github.com/gatk-workflows/broad-prod-wgs-germline-snps-indels/blob/d2934ed656ade44801f9cfe1c0e78d4f80684b7b/PairedEndSingleSampleWf-fc-hg38.wdl#L778
Int XmxGb = ceil(maxRecordsInRam / 125001.0)
Int timeMinutes = 1 + ceil(size(inputBam, "G") * 3)
# A mulled container is needed to have both picard and bwa in one container.
# This container contains: picard (2.18.7), bwa (0.7.17-r1188)
String dockerImage = "quay.io/biocontainers/picard:2.23.1--h37ae868_0"
String dockerImage = "quay.io/biocontainers/picard:2.23.2--0"
}
command {
......
......@@ -114,7 +114,7 @@ task Fastq {
Int threads = 1
String memory = "1G"
Int timeMinutes = 1 + ceil(size(inputBam) * 2)
String dockerImage = "quay.io/biocontainers/samtools:1.8--h46bd0b3_5"
String dockerImage = "quay.io/biocontainers/samtools:1.10--h9402c20_2"
}
command {
......@@ -170,7 +170,7 @@ task FilterShortReadsBam {
String outputPathBam
String memory = "1G"
Int timeMinutes = 1 + ceil(size(bamFile, "G") * 8)
String dockerImage = "quay.io/biocontainers/samtools:1.8--h46bd0b3_5"
String dockerImage = "quay.io/biocontainers/samtools:1.10--h9402c20_2"
}
String outputPathBamIndex = sub(outputPathBam, "\.bam$", ".bai")
......@@ -211,7 +211,7 @@ task Flagstat {
String memory = "256M" # Only 40.5 MiB used for 150G bam file.
Int timeMinutes = 1 + ceil(size(inputBam, "G"))
String dockerImage = "quay.io/biocontainers/samtools:1.8--h46bd0b3_5"
String dockerImage = "quay.io/biocontainers/samtools:1.10--h9402c20_2"
}
command {
......@@ -247,7 +247,7 @@ task Index {
String? outputBamPath
String memory = "2G"
Int timeMinutes = 1 + ceil(size(bamFile, "G") * 4)
String dockerImage = "quay.io/biocontainers/samtools:1.8--h46bd0b3_5"
String dockerImage = "quay.io/biocontainers/samtools:1.10--h9402c20_2"
}
# Select_first is needed, otherwise womtool validate fails.
......@@ -296,7 +296,7 @@ task Markdup {
String outputBamPath
Int timeMinutes = 1 + ceil(size(inputBam, "G") * 2)
String dockerImage = "quay.io/biocontainers/samtools:1.8--h46bd0b3_5"
String dockerImage = "quay.io/biocontainers/samtools:1.10--h9402c20_2"
}
command {
......@@ -332,7 +332,7 @@ task Merge {
Int threads = 1
Int timeMinutes = 1 + ceil(size(bamFiles, "G") * 2)
String dockerImage = "quay.io/biocontainers/samtools:1.8--h46bd0b3_5"
String dockerImage = "quay.io/biocontainers/samtools:1.10--h9402c20_2"
}
String indexPath = sub(outputBamPath, "\.bam$",".bai")
......@@ -483,7 +483,7 @@ task View {
Int threads = 1
String memory = "1G"
Int timeMinutes = 1 + ceil(size(inFile, "G") * 5)
String dockerImage = "quay.io/biocontainers/samtools:1.8--h46bd0b3_5"
String dockerImage = "quay.io/biocontainers/samtools:1.10--h9402c20_2"
}
String outputIndexPath = basename(outputFileName) + ".bai"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment