diff --git a/uk/ac/sanger/artemis/components/variant/VCFFilter.java b/uk/ac/sanger/artemis/components/variant/VCFFilter.java index 15da66f2e82ce030489516c0494f21eeec784682..6ed6d75a7d6578107f8f9cd425b0fba829eba821 100644 --- a/uk/ac/sanger/artemis/components/variant/VCFFilter.java +++ b/uk/ac/sanger/artemis/components/variant/VCFFilter.java @@ -59,7 +59,7 @@ public class VCFFilter extends JFrame { private static final long serialVersionUID = 1L; - private static boolean useHeader = true; + //private static boolean useHeader = true; /* private static int MIN_DP = 0; private static float MIN_MQ = 0; private static float MIN_AF1 = 0; @@ -263,7 +263,7 @@ public class VCFFilter extends JFrame if(info.size() == 0) { - useHeader = false; + //useHeader = false; /* // min DP c.gridy = c.gridy+1; c.gridx = 0; @@ -368,7 +368,7 @@ public class VCFFilter extends JFrame String hdrLine = "##FILTER=<ID="+id+",Type=Flag,Number=0,Description=\""+descr+"\">"; HeaderLine hLine = new HeaderLine(hdrLine, HeaderLine.filterFlagStr[hdrIndex], AbstractVCFReader.getLineHash("FILTER", hdrLine)); - FilteredPanel.addFilter(ID, hLine, 0); + filterPanel.addFilter(ID, hLine, 0); } else filterPanel.removeFilter(ID); @@ -431,7 +431,7 @@ public class VCFFilter extends JFrame { final String ID = hLine.getHeaderTypeStr()+":"+hLine.getID(); if(flag.isSelected()) - FilteredPanel.addFilter(ID, hLine, 0); + filterPanel.addFilter(ID, hLine, 0); else filterPanel.removeFilter(ID); filterPanel.updateFilters(); @@ -572,110 +572,105 @@ public class VCFFilter extends JFrame } } - if(useHeader) + final Hashtable<String, RecordFilter> filters = FilteredPanel.getFilters(); + final Enumeration<String> enumFilter = filters.keys(); + while(enumFilter.hasMoreElements()) { - Hashtable<String, RecordFilter> filters = FilteredPanel.getFilters(); - - Enumeration<String> enumFilter = filters.keys(); - while(enumFilter.hasMoreElements()) - { - String recid = enumFilter.nextElement(); - RecordFilter recFilter = filters.get(recid); - String id = recFilter.getHeaderLine().getID(); + final String recid = enumFilter.nextElement(); + final RecordFilter recFilter = filters.get(recid); + final String id = recFilter.getHeaderLine().getID(); - switch (recFilter.getHeaderLine().getHeaderType()) - { - case HeaderLine.FILTER_NV_FLAG: // FILTER non-variant - if( record.getAlt().isNonVariant() ) - return false; - break; - case HeaderLine.FILTER_INS: - if( record.getAlt().isInsertion(vcfReader.isVcf_v4()) ) - return false; - break; - case HeaderLine.FILTER_DEL: - if( record.getAlt().isDeletion(vcfReader.isVcf_v4()) ) - return false; - break; - case HeaderLine.FILTER_OVERLAP_FLAG: // FILTER no overlap - if( !VCFview.isOverlappingFeature(features, basePosition) ) + switch (recFilter.getHeaderLine().getHeaderType()) + { + case HeaderLine.FILTER_NV_FLAG: // FILTER non-variant + if( record.getAlt().isNonVariant() ) + return false; + break; + case HeaderLine.FILTER_INS: + if( record.getAlt().isInsertion(vcfReader.isVcf_v4()) ) + return false; + break; + case HeaderLine.FILTER_DEL: + if( record.getAlt().isDeletion(vcfReader.isVcf_v4()) ) + return false; + break; + case HeaderLine.FILTER_OVERLAP_FLAG: // FILTER no overlap + if( !VCFview.isOverlappingFeature(features, basePosition) ) + return false; + break; + case HeaderLine.INFO_LINE: // INFO line + if (recFilter.getHeaderLine().isFlag()) + { + if(record.containsInfoFlag(id)) return false; - break; - case HeaderLine.INFO_LINE: // INFO line - if (recFilter.getHeaderLine().isFlag()) - { - if(record.containsInfoFlag(id)) - return false; - continue; - } - else - { - String inf = record.getInfoValue(id); - if(inf == null || !recFilter.pass(record, inf.split(","), vcfReader)) - return false; - } - break; - case HeaderLine.FORMAT_LINE: // FORMAT Genotype line - final String samples[] = record.getFormatValues(id); - if(samples == null) + continue; + } + else + { + String inf = record.getInfoValue(id); + if(inf == null || !recFilter.pass(record, inf.split(","), vcfReader)) return false; - - if (recFilter.getHeaderLine().isFlag()) - return true; + } + break; + case HeaderLine.FORMAT_LINE: // FORMAT Genotype line + final String samples[] = record.getFormatValues(id); + if(samples == null) + return false; + if (recFilter.getHeaderLine().isFlag()) + return true; - if(sampleIndex > -1) // look at a specific sample + if(sampleIndex > -1) // look at a specific sample + { + if(samples[sampleIndex] == null || !recFilter.pass(record, samples[sampleIndex].split(","), vcfReader)) + return false; + } + else // look at all samples + { + for(int i=0; i<samples.length; i++) { - if(samples[sampleIndex] == null || !recFilter.pass(record, samples[sampleIndex].split(","), vcfReader)) + if( samples[i] == null || !recFilter.pass(record, samples[i].split(","), vcfReader)) return false; } - else // look at all samples - { - for(int i=0; i<samples.length; i++) - { - if( samples[i] == null || !recFilter.pass(record, samples[i].split(","), vcfReader)) - return false; - } - } - break; - case HeaderLine.FILTER_LINE: // FILTER - break; - case HeaderLine.FILTER_QUAL: // FILTER by quality score - if( !recFilter.pass(record, new String[] { Float.toString(record.getQuality()) }, vcfReader)) - return false; - break; - - case HeaderLine.FILTER_MULTALL_FLAG: // FILTER by quality score - if( record.getAlt().isMultiAllele(sampleIndex) ) - return false; - break; - case HeaderLine.FILTER_NONSYN: - if( !record.getAlt().isDeletion(vcfReader.isVcf_v4()) && - !record.getAlt().isInsertion(vcfReader.isVcf_v4()) && - record.getAlt().length() == 1 && - record.getRef().length() == 1) - { - short isSyn = record.getSynFlag(features, basePosition); - if( (isSyn == 0 || isSyn == 2) ) - return false; - } - break; - case HeaderLine.FILTER_SYN: - if( !record.getAlt().isDeletion(vcfReader.isVcf_v4()) && - !record.getAlt().isInsertion(vcfReader.isVcf_v4()) && - record.getAlt().length() == 1 && - record.getRef().length() == 1) - { - short isSyn = record.getSynFlag(features, basePosition); - if(isSyn == 1) - return false; - } - default: - break; - } + } + break; + case HeaderLine.FILTER_LINE: // FILTER + break; + case HeaderLine.FILTER_QUAL: // FILTER by quality score + if( !recFilter.pass(record, new String[] { Float.toString(record.getQuality()) }, vcfReader)) + return false; + break; + + case HeaderLine.FILTER_MULTALL_FLAG: // FILTER by quality score + if( record.getAlt().isMultiAllele(sampleIndex) ) + return false; + break; + case HeaderLine.FILTER_NONSYN: + if( !record.getAlt().isDeletion(vcfReader.isVcf_v4()) && + !record.getAlt().isInsertion(vcfReader.isVcf_v4()) && + record.getAlt().length() == 1 && + record.getRef().length() == 1) + { + short isSyn = record.getSynFlag(features, basePosition); + if( (isSyn == 0 || isSyn == 2) ) + return false; + } + break; + case HeaderLine.FILTER_SYN: + if( !record.getAlt().isDeletion(vcfReader.isVcf_v4()) && + !record.getAlt().isInsertion(vcfReader.isVcf_v4()) && + record.getAlt().length() == 1 && + record.getRef().length() == 1) + { + short isSyn = record.getSynFlag(features, basePosition); + if(isSyn == 1) + return false; + } + default: + break; } - return true; } - + return true; + /* try { if(VCFFilter.MIN_DP > 0 && Integer.parseInt(record.getInfoValue("DP")) < VCFFilter.MIN_DP)