diff --git a/uk/ac/sanger/artemis/components/variant/VCFview.java b/uk/ac/sanger/artemis/components/variant/VCFview.java index bc6d9b5962490c00a7aa4484fdecf3b46789165c..1e93200498722081c13d52ebd4a10d1ad38bb26b 100644 --- a/uk/ac/sanger/artemis/components/variant/VCFview.java +++ b/uk/ac/sanger/artemis/components/variant/VCFview.java @@ -122,6 +122,8 @@ public class VCFview extends JPanel private String chr; private String mouseOverVCFline; private int mouseOverIndex = -1; + + private boolean vcf_v4 = false; //record of where a mouse drag starts private int dragStart = -1; private JPopupMenu popup; @@ -136,7 +138,7 @@ public class VCFview extends JPanel private boolean showNonOverlappings = true; private float MIN_QUALITY = -10; - private Pattern multiAllelePattern = Pattern.compile("^[AGCT],[AGCT,]+$"); + private Pattern multiAllelePattern = Pattern.compile("^[AGCT]+,[AGCT,]+$"); private static Pattern tabPattern = Pattern.compile("\t"); public VCFview(final JFrame frame, @@ -495,6 +497,10 @@ public class VCFview extends JPanel { if(!line.startsWith("##")) break; + + if(line.indexOf("VCFv4") > -1) + vcf_v4 = true; + buff.append(line+"\n"); } } @@ -653,9 +659,14 @@ public class VCFview extends JPanel * @param variant * @return */ - private boolean isDeletion(String variant) + private boolean isDeletion(String ref, String variant) { - if(variant.indexOf("D")>-1) + if(vcf_v4) + { + if( variant.length() < ref.length() && !(variant.indexOf(",") > -1) ) + return true; + } + else if(variant.indexOf("D")>-1) return true; return false; } @@ -665,19 +676,24 @@ public class VCFview extends JPanel * @param variant * @return */ - private boolean isInsertion(String variant) + private boolean isInsertion(String ref, String variant) { - if(variant.indexOf("I")>-1) + if(vcf_v4) + { + if( variant.length() > ref.length() && !(variant.indexOf(",") > -1) ) + return true; + } + else if(variant.indexOf("I")>-1) return true; return false; } - private boolean showVariant(String variant, FeatureVector features, int basePosition, String quality) + private boolean showVariant(String ref, String variant, FeatureVector features, int basePosition, String quality) { - if(!showDeletions && isDeletion(variant)) + if(!showDeletions && isDeletion(ref, variant)) return false; - if(!showInsertions && isInsertion(variant)) + if(!showInsertions && isInsertion(ref, variant)) return false; try @@ -694,7 +710,7 @@ public class VCFview extends JPanel return false; if( (!showSynonymous || !showNonSynonymous) && - !isDeletion(variant) && !isInsertion(variant) && variant.length() == 1) + !isDeletion(ref, variant) && !isInsertion(ref, variant) && variant.length() == 1) { boolean isSyn = isSynonymous(features, basePosition, variant.toLowerCase().charAt(0)); @@ -735,23 +751,23 @@ public class VCFview extends JPanel String parts[] = tabPattern.split(line, 0); int basePosition = Integer.parseInt(parts[1]); - if( !showVariant(parts[4], features, basePosition, parts[5]) ) + if( !showVariant(parts[3], parts[4], features, basePosition, parts[5]) ) return; int pos[] = getScreenPosition(basePosition, pixPerBase, start, index); - - if(parts[4].equals("C")) + + if(isDeletion(parts[3], parts[4])) + g.setColor(Color.gray); + else if(isInsertion(parts[3], parts[4])) + g.setColor(Color.yellow); + else if(parts[4].equals("C") && parts[3].length() == 1) g.setColor(Color.red); - else if(parts[4].equals("A")) + else if(parts[4].equals("A") && parts[3].length() == 1) g.setColor(Color.green); - else if(parts[4].equals("G")) + else if(parts[4].equals("G") && parts[3].length() == 1) g.setColor(Color.blue); - else if(parts[4].equals("T")) + else if(parts[4].equals("T") && parts[3].length() == 1) g.setColor(Color.black); - else if(isDeletion(parts[4])) - g.setColor(Color.gray); - else if(isInsertion(parts[4])) - g.setColor(Color.yellow); else { Matcher m = multiAllelePattern.matcher(parts[4]); @@ -879,7 +895,7 @@ public class VCFview extends JPanel String parts[] = tabPattern.split(s, 7); int basePosition = Integer.parseInt(parts[1]); - if( !showVariant(parts[4], features, basePosition, parts[5]) ) + if( !showVariant(parts[3], parts[4], features, basePosition, parts[5]) ) continue; int pos[] = getScreenPosition(basePosition, pixPerBase, start, i);