From 75eb9f8483df7a1b79ca1444a106cb2b7e11b6d8 Mon Sep 17 00:00:00 2001 From: Yuuki Galaxy Date: Tue, 29 Aug 2023 14:43:12 +0800 Subject: [PATCH] New: added Barcode qualities keeping in FastqToBam --- src/main/scala/com/fulcrumgenomics/fastq/FastqToBam.scala | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/scala/com/fulcrumgenomics/fastq/FastqToBam.scala b/src/main/scala/com/fulcrumgenomics/fastq/FastqToBam.scala index f2ed903d5..ecc7b6523 100644 --- a/src/main/scala/com/fulcrumgenomics/fastq/FastqToBam.scala +++ b/src/main/scala/com/fulcrumgenomics/fastq/FastqToBam.scala @@ -92,6 +92,7 @@ class FastqToBam @arg(flag='s', doc="If true, queryname sort the BAM file, otherwise preserve input order.") val sort: Boolean = false, @arg(flag='u', doc="Tag in which to store molecular barcodes/UMIs.") val umiTag: String = ConsensusTags.UmiBases, @arg(flag='q', doc="Tag in which to store molecular barcode/UMI qualities.") val umiQualTag: Option[String] = None, + @arg(flag='b', doc="Tag in which to store sample barcode qualities.") val smpQualTag: Option[String] = None, @arg(flag='n', doc="Extract UMI(s) from read names and prepend to UMIs from reads.") val extractUmisFromReadNames: Boolean = false, @arg( doc="Read group ID to use in the file header.") val readGroupId: String = "A", @arg( doc="The name of the sequenced sample.") val sample: String, @@ -157,6 +158,7 @@ class FastqToBam try { val subs = fqs.iterator.zip(structures.iterator).flatMap { case(fq, rs) => rs.extract(fq.bases, fq.quals) }.toIndexedSeq val sampleBarcode = subs.iterator.filter(_.kind == SampleBarcode).map(_.bases).mkString("-") + val smpQual = subs.iterator.filter(_.kind == SampleBarcode).map(_.quals).mkString(" ") val umi = subs.iterator.filter(_.kind == MolecularBarcode).map(_.bases).mkString("-") val umiQual = subs.iterator.filter(_.kind == MolecularBarcode).map(_.quals).mkString(" ") val templates = subs.iterator.filter(_.kind == Template).toList @@ -181,6 +183,7 @@ class FastqToBam } if (sampleBarcode.nonEmpty) rec("BC") = sampleBarcode + if (smpQual.nonEmpty) smpQualTag.foreach(rec(_) = smpQual) // Set the UMI on the read depending on whether we got UMIs from the read names, reads or both (umi, umiFromReadName) match {