Skip to content

Commit 821c82f

Browse files
committed
Improve pindel calls
1 parent 0c0076c commit 821c82f

File tree

4 files changed

+30
-13
lines changed

4 files changed

+30
-13
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -621,7 +621,7 @@ public Output performAnalysisPerSampleRemote(Readset rs, File inputBam, Referenc
621621
String[] line;
622622
while ((line = reader.readNext()) != null)
623623
{
624-
if (!("D".equals(line[0]) || "I".equals(line[0])))
624+
if (!("D".equals(line[0]) || "I".equals(line[0]) || "S".equals(line[0])))
625625
{
626626
continue;
627627
}
@@ -639,7 +639,7 @@ public Output performAnalysisPerSampleRemote(Readset rs, File inputBam, Referenc
639639
continue;
640640
}
641641

642-
if ("D".equals(line[0]) && refLength > MAX_DELETION_LENGTH)
642+
if (("D".equals(line[0]) || "S".equals(line[0])) && refLength > MAX_DELETION_LENGTH)
643643
{
644644
continue;
645645
}
@@ -655,7 +655,7 @@ public Output performAnalysisPerSampleRemote(Readset rs, File inputBam, Referenc
655655
eventCoverage = Double.parseDouble(line[11]);
656656
}
657657

658-
if ("D".equals(line[0]) && eventCoverage > MAX_DEL_EVENT_COVERAGE)
658+
if (("D".equals(line[0]) || "S".equals(line[0])) && eventCoverage > MAX_DEL_EVENT_COVERAGE)
659659
{
660660
continue;
661661
}

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

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import htsjdk.samtools.reference.IndexedFastaSequenceFile;
99
import htsjdk.samtools.reference.ReferenceSequence;
1010
import htsjdk.variant.utils.SAMSequenceDictionaryExtractor;
11+
import org.apache.commons.lang.StringUtils;
1112
import org.json.JSONObject;
1213
import org.labkey.api.pipeline.PipelineJobException;
1314
import org.labkey.api.reader.Readers;
@@ -308,7 +309,7 @@ private static void parsePindelOutput(PipelineContext ctx, CSVWriter writer, Fil
308309

309310
//NOTE: this is the indel region itself, no flanking. so for a deletion with REF/ALT of ATTC / A--C, it reports TT. for an insertion of ATT / AGTT, it reports G
310311
String pindelAllele = tokens[2].split(" ")[2];
311-
pindelAllele = pindelAllele.replaceAll("\"", "");
312+
pindelAllele = StringUtils.trimToNull(pindelAllele.replaceAll("\"", ""));
312313

313314
File dict = new File(fasta.getPath().replace("fasta", "dict"));
314315
if (!dict.exists())
@@ -353,6 +354,10 @@ private static void parsePindelOutput(PipelineContext ctx, CSVWriter writer, Fil
353354

354355
eventCoverage = eventCoverage / (baseAfterEnd - basePriorToStart - 1);
355356
}
357+
else if ("I".equals(type))
358+
{
359+
eventCoverage = (double)depth;
360+
}
356361

357362
double meanCoverage = (leadingCoverage + trailingCoverage) / 2.0;
358363
double pct = (double)support / meanCoverage;
@@ -368,24 +373,31 @@ private static void parsePindelOutput(PipelineContext ctx, CSVWriter writer, Fil
368373
String ref = "";
369374
if ("I".equals(type))
370375
{
376+
if (pindelAllele == null)
377+
{
378+
throw new IllegalArgumentException("Unexpected empty allele for insertion: " + basePriorToStart);
379+
}
380+
371381
ref = sequence.getBaseString().substring(basePriorToStart-1, basePriorToStart);
372382
alt = ref + pindelAllele;
373383
}
374384
else if ("D".equals(type))
375385
{
376386
ref = sequence.getBaseString().substring(basePriorToStart-1, trueEnd);
377387
alt = sequence.getBaseString().substring(basePriorToStart-1, basePriorToStart);
378-
379-
// Pindel reports the region over the deletion. so add the leading base to match the reference (VCF-style)
380-
// Our sequence based on coordinates should match what pindel reported
381-
String predictedPindelAllele = alt + pindelAllele;
382-
if (!predictedPindelAllele.equals(ref))
388+
if (pindelAllele != null)
383389
{
384-
throw new IllegalArgumentException("Unexpected pindel allele: " + ref + " / " + predictedPindelAllele + " / " + pindelAllele);
390+
type = "S";
391+
alt = alt + pindelAllele;
392+
393+
if (alt.length() != ref.length())
394+
{
395+
throw new IllegalArgumentException("Unexpected pindel allele at " + basePriorToStart + ": " + ref + " / " + alt + " / " + pindelAllele);
396+
}
385397
}
386398
}
387399

388-
writer.writeNext(new String[]{type, contig, String.valueOf(basePriorToStart), String.valueOf(trueEnd), String.valueOf(depth), String.valueOf(support), String.valueOf(pct), String.valueOf(meanCoverage), String.valueOf(leadingCoverage), String.valueOf(trailingCoverage), (eventCoverage == null ? "" : String.valueOf(eventCoverage)), ref, alt, pindelAllele});
400+
writer.writeNext(new String[]{type, contig, String.valueOf(basePriorToStart), String.valueOf(trueEnd), String.valueOf(depth), String.valueOf(support), String.valueOf(pct), String.valueOf(meanCoverage), String.valueOf(leadingCoverage), String.valueOf(trailingCoverage), (eventCoverage == null ? "" : String.valueOf(eventCoverage)), ref, alt, (pindelAllele == null ? "" : pindelAllele)});
389401
totalPassing++;
390402
}
391403
else

jbrowse/build.gradle

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,11 @@ project.task("copyJBrowseCss",
9393
}
9494
})
9595

96+
project.tasks.register("cleanJBrowse", Delete) {
97+
delete files("./resources/web/jbrowseApp")
98+
}
99+
100+
project.tasks.cleanModule.dependsOn(project.tasks.named('cleanJBrowse'))
96101

97102
project.tasks.copyJBrowse.dependsOn(project.tasks.npmInstall)
98103

jbrowse/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
"build": "npm run build-dev",
88
"start": "cross-env NODE_ENV=development LK_MODULE_CONTAINER=DiscvrLabKeyModules LK_MODULE=jbrowse webpack-dev-server --config config/watch.config.js",
99
"build-dev": "npm run clean && cross-env NODE_ENV=development LK_MODULE_CONTAINER=DiscvrLabKeyModules LK_MODULE=jbrowse webpack --config config/dev.config.js --progress --profile",
10-
"build-prod": "npm run clean && cross-env NODE_ENV=production PROD_SOURCE_MAP=source-map LK_MODULE_CONTAINER=DiscvrLabKeyModules LK_MODULE=jbrowse webpack --config config/prod.config.js --progress --profile --colors",
11-
"clean": "rimraf resources/web/jbrowseApp && rimraf resources/web/jbrowse/gen && rimraf resources/views/gen && rimraf resources/views/browser*",
10+
"build-prod": "npm run clean && cross-env NODE_ENV=production PROD_SOURCE_MAP=source-map LK_MODULE_CONTAINER=DiscvrLabKeyModules LK_MODULE=jbrowse webpack --config config/prod.config.js --progress --profile",
11+
"clean": "rimraf resources/web/jbrowse/gen && rimraf resources/views/gen && rimraf resources/views/browser*",
1212
"test": "cross-env NODE_ENV=test jest"
1313
},
1414
"dependencies": {

0 commit comments

Comments
 (0)