Skip to content

Commit b69f7ca

Browse files
committed
Better preserve read groups when merging unaligned reads
1 parent 26610dd commit b69f7ca

File tree

2 files changed

+24
-9
lines changed

2 files changed

+24
-9
lines changed

SequenceAnalysis/src/org/labkey/sequenceanalysis/run/util/FastqToSamWrapper.java

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.labkey.sequenceanalysis.run.util;
22

33
import htsjdk.samtools.SAMFileHeader;
4+
import htsjdk.samtools.SAMReadGroupRecord;
45
import htsjdk.samtools.util.FastqQualityFormat;
56
import org.apache.log4j.Logger;
67
import org.jetbrains.annotations.Nullable;
@@ -31,12 +32,12 @@ public File execute(File file, @Nullable File file2) throws PipelineJobException
3132
return execute(file, file2, null, null);
3233
}
3334

34-
public File execute(File file, @Nullable File file2, @Nullable SAMFileHeader.SortOrder sortOrder, @Nullable String readGroupName) throws PipelineJobException
35+
public File execute(File file, @Nullable File file2, @Nullable SAMFileHeader.SortOrder sortOrder, @Nullable SAMReadGroupRecord rg) throws PipelineJobException
3536
{
3637
getLogger().info("Converting FASTQ to BAM: " + file.getPath());
3738
getLogger().info("\tFastqToSam version: " + getVersion());
3839

39-
execute(getParams(file, file2, sortOrder, readGroupName));
40+
execute(getParams(file, file2, sortOrder, rg));
4041
File output = new File(getOutputDir(file), getOutputFilename(file));
4142
if (!output.exists())
4243
{
@@ -51,7 +52,7 @@ protected String getToolName()
5152
return "FastqToSam";
5253
}
5354

54-
private List<String> getParams(File file, File file2, SAMFileHeader.SortOrder sortOrder, String readGroupName) throws PipelineJobException
55+
private List<String> getParams(File file, File file2, SAMFileHeader.SortOrder sortOrder, @Nullable SAMReadGroupRecord rg) throws PipelineJobException
5556
{
5657
List<String> params = getBaseArgs();
5758
inferMaxRecordsInRam(params);
@@ -64,9 +65,23 @@ private List<String> getParams(File file, File file2, SAMFileHeader.SortOrder so
6465
params.add("SORT_ORDER=" + sortOrder.name());
6566
}
6667

67-
if (readGroupName != null)
68+
if (rg != null)
6869
{
69-
params.add("READ_GROUP_NAME=" + readGroupName);
70+
params.add("READ_GROUP_NAME=" + rg.getReadGroupId());
71+
72+
if (rg.getPlatform() != null)
73+
params.add("PLATFORM=" + rg.getPlatform());
74+
75+
if (rg.getPlatformUnit() != null)
76+
params.add("PLATFORM_UNIT=" + rg.getPlatformUnit());
77+
78+
if (rg.getPlatformUnit() != null)
79+
params.add("SAMPLE_NAME=" + rg.getSample());
80+
}
81+
else
82+
{
83+
params.add("READ_GROUP_NAME=null");
84+
params.add("SAMPLE_NAME=SAMPLE");
7085
}
7186

7287
FastqQualityFormat encoding = _fastqEncoding;
@@ -85,7 +100,6 @@ private List<String> getParams(File file, File file2, SAMFileHeader.SortOrder so
85100
}
86101

87102
params.add("QUALITY_FORMAT=" + encoding);
88-
params.add("SAMPLE_NAME=SAMPLE");
89103
params.add("OUTPUT=" + new File(getOutputDir(file), getOutputFilename(file)).getPath());
90104

91105
return params;

SequenceAnalysis/src/org/labkey/sequenceanalysis/run/util/MergeBamAlignmentWrapper.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.labkey.sequenceanalysis.run.util;
22

33
import htsjdk.samtools.SAMFileHeader;
4+
import htsjdk.samtools.SAMReadGroupRecord;
45
import htsjdk.samtools.SamReader;
56
import htsjdk.samtools.SamReaderFactory;
67
import htsjdk.samtools.ValidationStringency;
@@ -65,10 +66,10 @@ public File executeCommand(File refFasta, File alignedBam, File inputFastq1, @Nu
6566

6667
File unmappedReadsBam;
6768
SamReaderFactory fact = SamReaderFactory.makeDefault();
69+
SAMReadGroupRecord rg = null;
6870
try (SamReader reader = fact.open(alignedBam))
6971
{
7072
SAMFileHeader header = reader.getFileHeader();
71-
String rgId = null;
7273
if (header.getReadGroups().size() == 0)
7374
{
7475
getLogger().warn("No read groups found in input BAM");
@@ -79,13 +80,13 @@ else if (header.getReadGroups().size() > 1)
7980
}
8081
else
8182
{
82-
rgId = header.getReadGroups().get(0).getId();
83+
rg = header.getReadGroups().get(0);
8384
}
8485

8586
FastqToSamWrapper fq = new FastqToSamWrapper(getLogger());
8687
fq.setOutputDir(alignedBam.getParentFile());
8788
fq.setStringency(ValidationStringency.SILENT);
88-
unmappedReadsBam = fq.execute(inputFastq1, inputFastq2, SAMFileHeader.SortOrder.queryname, rgId == null ? "null" : rgId);
89+
unmappedReadsBam = fq.execute(inputFastq1, inputFastq2, SAMFileHeader.SortOrder.queryname, rg);
8990
if (!unmappedReadsBam.exists())
9091
{
9192
throw new PipelineJobException("BAM file not created, expected: " + unmappedReadsBam.getPath());

0 commit comments

Comments
 (0)