Skip to content

Commit a698c55

Browse files
committed
Update logic for cellranger VDJ g/d parsing
1 parent cf96e56 commit a698c55

File tree

1 file changed

+21
-8
lines changed

1 file changed

+21
-8
lines changed

singlecell/src/org/labkey/singlecell/run/CellRangerVDJWrapper.java

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,7 @@ public AlignmentStep.AlignmentOutput performAlignment(Readset rs, List<File> inp
436436
//Infer correct chain from the V, J and C genes
437437
String[] tokens = line.split(",");
438438
List<String> chains = new ArrayList<>();
439+
String cGeneChain = null;
439440
for (int idx : new Integer[]{6,8,9}) {
440441
String val = StringUtils.trimToNull(tokens[idx]);
441442
if (val != null)
@@ -454,43 +455,55 @@ else if (val.contains("TRBTRD"))
454455
}
455456

456457
chains.add(val);
458+
if (idx == 9)
459+
{
460+
cGeneChain = val;
461+
}
457462
}
458463
}
459464

460465
Set<String> uniqueChains = new HashSet<>(chains);
461466
String originalChain = StringUtils.trimToNull(tokens[5]);
467+
468+
// Recover TRDV/TRAJ/TRAC:
469+
if (uniqueChains.size() > 1 && cGeneChain != null)
470+
{
471+
uniqueChains.clear();
472+
uniqueChains.add(cGeneChain);
473+
}
474+
462475
if (uniqueChains.size() == 1)
463476
{
464477
String chain = uniqueChains.iterator().next();
465478
if (chain.equals("TRG"))
466479
{
467-
if (!originalChain.equals("TRA"))
480+
if (!originalChain.equals("TRA") && !"None".equals(originalChain))
468481
{
469-
getPipelineCtx().getLogger().error("Unexpected chain: from " + originalChain + " to " + chain);
482+
getPipelineCtx().getLogger().error("Unexpected chain: was " + originalChain + ", to " + chain);
470483
}
471484

472485
totalG++;
473486
}
474487
else if (chain.equals("TRD"))
475488
{
476-
if (!originalChain.equals("TRB"))
489+
if (!originalChain.equals("TRB") && !"None".equals(originalChain))
477490
{
478-
getPipelineCtx().getLogger().error("Unexpected chain: from " + originalChain + " to " + chain);
491+
getPipelineCtx().getLogger().error("Unexpected chain: was " + originalChain + ", to " + chain);
479492
}
480493

481494
totalD++;
482495
}
483496

484497
tokens[5] = chain;
498+
499+
line = StringUtils.join(tokens, ",");
500+
line = line.replaceAll("TRATRG", "TRG");
501+
line = line.replaceAll("TRBTRD", "TRD");
485502
}
486503
else
487504
{
488505
getPipelineCtx().getLogger().warn("Multiple chains detected [" + StringUtils.join(chains, ",")+ "], leaving original call alone: " + originalChain);
489506
}
490-
491-
line = StringUtils.join(tokens, ",");
492-
line = line.replaceAll("TRATRG", "TRG");
493-
line = line.replaceAll("TRBTRD", "TRD");
494507
}
495508

496509
writer.println(line);

0 commit comments

Comments
 (0)