Minor fixes to splitting multi-allelic records (as regards printing indel alleles correctly); minor code refactoring; adding integration tests to cover +/- splitting multi-allelics.
This commit is contained in:
parent
14981bed10
commit
0920a1921e
|
|
@ -194,7 +194,9 @@ public class VariantsToTable extends RodWalker<Integer, Integer> {
|
||||||
|
|
||||||
for ( String field : fields ) {
|
for ( String field : fields ) {
|
||||||
|
|
||||||
if ( getters.containsKey(field) ) {
|
if ( splitMultiAllelic && field.equals("ALT") ) { // we need to special case the ALT field when splitting out multi-allelic records
|
||||||
|
addFieldValue(splitAltAlleles(vc), records);
|
||||||
|
} else if ( getters.containsKey(field) ) {
|
||||||
addFieldValue(getters.get(field).get(vc), records);
|
addFieldValue(getters.get(field).get(vc), records);
|
||||||
} else if ( vc.hasAttribute(field) ) {
|
} else if ( vc.hasAttribute(field) ) {
|
||||||
addFieldValue(vc.getAttribute(field, null), records);
|
addFieldValue(vc.getAttribute(field, null), records);
|
||||||
|
|
@ -271,9 +273,7 @@ public class VariantsToTable extends RodWalker<Integer, Integer> {
|
||||||
getters.put("REF", new Getter() {
|
getters.put("REF", new Getter() {
|
||||||
public String get(VariantContext vc) {
|
public String get(VariantContext vc) {
|
||||||
StringBuilder x = new StringBuilder();
|
StringBuilder x = new StringBuilder();
|
||||||
if ( vc.hasReferenceBaseForIndel() && !vc.isSNP() )
|
x.append(getAlleleDisplayString(vc, vc.getReference()));
|
||||||
x.append((char)vc.getReferenceBaseForIndel().byteValue());
|
|
||||||
x.append(vc.getReference().getDisplayString());
|
|
||||||
return x.toString();
|
return x.toString();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -285,9 +285,7 @@ public class VariantsToTable extends RodWalker<Integer, Integer> {
|
||||||
|
|
||||||
for ( int i = 0; i < n; i++ ) {
|
for ( int i = 0; i < n; i++ ) {
|
||||||
if ( i != 0 ) x.append(",");
|
if ( i != 0 ) x.append(",");
|
||||||
if ( vc.hasReferenceBaseForIndel() && !vc.isSNP() )
|
x.append(getAlleleDisplayString(vc, vc.getAlternateAllele(i)));
|
||||||
x.append((char)vc.getReferenceBaseForIndel().byteValue());
|
|
||||||
x.append(vc.getAlternateAllele(i).getDisplayString());
|
|
||||||
}
|
}
|
||||||
return x.toString();
|
return x.toString();
|
||||||
}
|
}
|
||||||
|
|
@ -325,5 +323,23 @@ public class VariantsToTable extends RodWalker<Integer, Integer> {
|
||||||
return String.format("%.2f", -10 * vc.getGenotype(0).getLog10PError());
|
return String.format("%.2f", -10 * vc.getGenotype(0).getLog10PError());
|
||||||
}});
|
}});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String getAlleleDisplayString(VariantContext vc, Allele allele) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
if ( vc.hasReferenceBaseForIndel() && !vc.isSNP() )
|
||||||
|
sb.append((char)vc.getReferenceBaseForIndel().byteValue());
|
||||||
|
sb.append(allele.getDisplayString());
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Object splitAltAlleles(VariantContext vc) {
|
||||||
|
final int numAltAlleles = vc.getAlternateAlleles().size();
|
||||||
|
if ( numAltAlleles == 1 )
|
||||||
|
return getAlleleDisplayString(vc, vc.getAlternateAllele(0));
|
||||||
|
|
||||||
|
final List<String> alleles = new ArrayList<String>(numAltAlleles);
|
||||||
|
for ( Allele allele : vc.getAlternateAlleles() )
|
||||||
|
alleles.add(getAlleleDisplayString(vc, allele));
|
||||||
|
return alleles;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,14 @@ public class VariantsToTableIntegrationTest extends WalkerTest {
|
||||||
" -L chr1 -o %s" + moreArgs;
|
" -L chr1 -o %s" + moreArgs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String variantsToTableMultiAllelicCmd(String moreArgs) {
|
||||||
|
return "-R " + b37KGReference +
|
||||||
|
" --variant " + validationDataLocation + "/multiallelic.vcf" +
|
||||||
|
" -T VariantsToTable" +
|
||||||
|
" -F CHROM -F POS -F ID -F REF -F ALT -F QUAL -F MULTI-ALLELIC -F AC -F AF" +
|
||||||
|
" -o %s" + moreArgs;
|
||||||
|
}
|
||||||
|
|
||||||
@Test(enabled = true)
|
@Test(enabled = true)
|
||||||
public void testComplexVariantsToTable() {
|
public void testComplexVariantsToTable() {
|
||||||
WalkerTestSpec spec = new WalkerTestSpec(variantsToTableCmd(" -AMD"),
|
WalkerTestSpec spec = new WalkerTestSpec(variantsToTableCmd(" -AMD"),
|
||||||
|
|
@ -51,4 +59,18 @@ public class VariantsToTableIntegrationTest extends WalkerTest {
|
||||||
WalkerTestSpec spec = new WalkerTestSpec(variantsToTableCmd(""), 1, UserException.class);
|
WalkerTestSpec spec = new WalkerTestSpec(variantsToTableCmd(""), 1, UserException.class);
|
||||||
executeTest("testComplexVariantsToTable-FAIL", spec);
|
executeTest("testComplexVariantsToTable-FAIL", spec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(enabled = true)
|
||||||
|
public void testMultiAllelicOneRecord() {
|
||||||
|
WalkerTestSpec spec = new WalkerTestSpec(variantsToTableMultiAllelicCmd(""),
|
||||||
|
Arrays.asList("13dd36c08be6c800f23988e6000d963e"));
|
||||||
|
executeTest("testMultiAllelicOneRecord", spec).getFirst();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(enabled = true)
|
||||||
|
public void testMultiAllelicSplitRecords() {
|
||||||
|
WalkerTestSpec spec = new WalkerTestSpec(variantsToTableMultiAllelicCmd(" -SMA"),
|
||||||
|
Arrays.asList("17a0fc80409d2fc00ad2bbb94b3a346b"));
|
||||||
|
executeTest("testMultiAllelicSplitRecords", spec).getFirst();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue