Skip to content

Commit 79d7433

Browse files
committed
Better support of indels for pindel
1 parent 84a40d5 commit 79d7433

File tree

2 files changed

+25
-11
lines changed

2 files changed

+25
-11
lines changed

SequenceAnalysis/src/org/labkey/sequenceanalysis/run/analysis/MergeLoFreqVcfHandler.java

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -340,26 +340,37 @@ public void processFilesRemote(List<SequenceOutputFile> inputFiles, JobContext c
340340
continue;
341341
}
342342

343+
int start0 = Integer.parseInt(line[2]) - 1; //for consistency with VCFs, retain the first REF base, as pindel reports
343344
int end1 = Integer.parseInt(line[3]) - 1; //pindel reports the end as one bp downstream of the event, so drop 1 bp even though we're keeping 1-based
344-
int length = end1 - Integer.parseInt(line[2]); //NOTE: pindel reports one base upstream+downstream as part of the indel
345-
if ("D".equalsIgnoreCase(line[0]))
345+
if ("D".equalsIgnoreCase(line[0]) || "I".equalsIgnoreCase(line[0]))
346346
{
347347
ReferenceSequence rs = getReferenceSequence(ctx, genomeIds.iterator().next(), line[1]);
348-
int start0 = Integer.parseInt(line[2]) - 1; //for consistency with VCFs, retain the first REF base, as pindel reports
349-
char alt = (char)rs.getBases()[start0];
350-
348+
int refLength = end1 - start0;
351349
String ref = new String(Arrays.copyOfRange(rs.getBases(), start0, end1), StringUtilsLabKey.DEFAULT_CHARSET);
352-
if (ref.length() != length + 1)
350+
if (ref.length() != refLength)
353351
{
354-
throw new PipelineJobException("Improper pindel parsing: " + so.getRowid() + "/" + line[2] + "/" + line[3] + "/" + ref + "/" + alt);
352+
throw new PipelineJobException("Improper pindel parsing: " + so.getRowid() + "/" + line[2] + "/" + line[3] + "/" + ref);
355353
}
356354

357-
uniqueIndels.add(line[1] + "<>" + line[2] + "<>" + ref + "<>" + alt);
355+
String alt = "";
356+
int length = -1;
357+
if ("D".equals(line[0]))
358+
{
359+
length = end1 - Integer.parseInt(line[2]); //NOTE: pindel reports one base upstream+downstream as part of the indel
360+
alt = String.valueOf(rs.getBases()[start0]);
361+
}
362+
else if ("I".equals(line[0]))
363+
{
364+
alt = (char)rs.getBases()[start0] + line[7];
365+
length = alt.length();
366+
}
358367

359-
writer.writeNext(new String[]{ctx.getSequenceSupport().getCachedReadset(so.getReadset()).getName(), String.valueOf(so.getRowid()), String.valueOf(so.getReadset()), "Pindel", line[1], line[2], String.valueOf(end1), String.valueOf(length), ref, String.valueOf(alt), line[4], "", line[5], line[6]});
368+
uniqueIndels.add(line[1] + "<>" + line[2] + "<>" + ref + "<>" + alt);
369+
writer.writeNext(new String[]{ctx.getSequenceSupport().getCachedReadset(so.getReadset()).getName(), String.valueOf(so.getRowid()), String.valueOf(so.getReadset()), "Pindel", line[1], line[2], String.valueOf(end1), String.valueOf(length), ref, alt, line[4], "", line[5], line[6]});
360370
}
361371
else
362372
{
373+
int length = end1 - start0;
363374
writer.writeNext(new String[]{ctx.getSequenceSupport().getCachedReadset(so.getReadset()).getName(), String.valueOf(so.getRowid()), String.valueOf(so.getReadset()), "Pindel", line[1], line[2], String.valueOf(end1), String.valueOf(length), "", line[0], line[4], "", line[5], line[6]});
364375
}
365376
}

SequenceAnalysis/src/org/labkey/sequenceanalysis/run/analysis/PindelAnalysis.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ public static File runPindel(AnalysisOutputImpl output, PipelineContext ctx, Rea
227227
File outTsv = new File(outDir, FileUtil.getBaseName(inputBam) + ".pindel.txt");
228228
try (CSVWriter writer = new CSVWriter(PrintWriters.getPrintWriter(outTsv), '\t', CSVWriter.NO_QUOTE_CHARACTER))
229229
{
230-
writer.writeNext(new String[]{"Type", "Contig", "Start", "End", "Depth", "ReadSupport", "Fraction"});
230+
writer.writeNext(new String[]{"Type", "Contig", "Start", "End", "Depth", "ReadSupport", "Fraction", "Alt"});
231231
parsePindelOutput(ctx, writer, new File(outPrefix.getPath() + "_D"), minFraction, minDepth, gatkDepth);
232232
parsePindelOutput(ctx, writer, new File(outPrefix.getPath() + "_SI"), minFraction, minDepth, gatkDepth);
233233
parsePindelOutput(ctx, writer, new File(outPrefix.getPath() + "_LI"), minFraction, minDepth, gatkDepth);
@@ -271,12 +271,15 @@ private static void parsePindelOutput(PipelineContext ctx, CSVWriter writer, Fil
271271
continue;
272272
}
273273

274+
String alt = tokens[2].split(" ")[2];
275+
alt = alt.replaceAll("\"", "");
276+
274277
double pct = (double)support / depth;
275278
if (pct >= minFraction)
276279
{
277280
int end = Integer.parseInt(tokens[5]);
278281
String type = tokens[1].split(" ")[0];
279-
writer.writeNext(new String[]{type, contig, String.valueOf(start), String.valueOf(end), String.valueOf(depth), String.valueOf(support), String.valueOf(pct)});
282+
writer.writeNext(new String[]{type, contig, String.valueOf(start), String.valueOf(end), String.valueOf(depth), String.valueOf(support), String.valueOf(pct), alt});
280283
}
281284
}
282285
}

0 commit comments

Comments
 (0)