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 ) {
|
||||
|
||||
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);
|
||||
} else if ( vc.hasAttribute(field) ) {
|
||||
addFieldValue(vc.getAttribute(field, null), records);
|
||||
|
|
@ -271,9 +273,7 @@ public class VariantsToTable extends RodWalker<Integer, Integer> {
|
|||
getters.put("REF", new Getter() {
|
||||
public String get(VariantContext vc) {
|
||||
StringBuilder x = new StringBuilder();
|
||||
if ( vc.hasReferenceBaseForIndel() && !vc.isSNP() )
|
||||
x.append((char)vc.getReferenceBaseForIndel().byteValue());
|
||||
x.append(vc.getReference().getDisplayString());
|
||||
x.append(getAlleleDisplayString(vc, vc.getReference()));
|
||||
return x.toString();
|
||||
}
|
||||
});
|
||||
|
|
@ -285,9 +285,7 @@ public class VariantsToTable extends RodWalker<Integer, Integer> {
|
|||
|
||||
for ( int i = 0; i < n; i++ ) {
|
||||
if ( i != 0 ) x.append(",");
|
||||
if ( vc.hasReferenceBaseForIndel() && !vc.isSNP() )
|
||||
x.append((char)vc.getReferenceBaseForIndel().byteValue());
|
||||
x.append(vc.getAlternateAllele(i).getDisplayString());
|
||||
x.append(getAlleleDisplayString(vc, vc.getAlternateAllele(i)));
|
||||
}
|
||||
return x.toString();
|
||||
}
|
||||
|
|
@ -325,5 +323,23 @@ public class VariantsToTable extends RodWalker<Integer, Integer> {
|
|||
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;
|
||||
}
|
||||
|
||||
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)
|
||||
public void testComplexVariantsToTable() {
|
||||
WalkerTestSpec spec = new WalkerTestSpec(variantsToTableCmd(" -AMD"),
|
||||
|
|
@ -51,4 +59,18 @@ public class VariantsToTableIntegrationTest extends WalkerTest {
|
|||
WalkerTestSpec spec = new WalkerTestSpec(variantsToTableCmd(""), 1, UserException.class);
|
||||
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