From f63be8a93eb5963c3e501b3c4ea5045c1180c700 Mon Sep 17 00:00:00 2001 From: tjc <tjc@ee4ac58c-ac51-4696-9907-e4b3aa274f04> Date: Thu, 17 Feb 2011 10:46:11 +0000 Subject: [PATCH] fixes to getSeqsVariation() git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@15552 ee4ac58c-ac51-4696-9907-e4b3aa274f04 --- .../artemis/components/variant/IOUtils.java | 48 +++++++++++++------ 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/uk/ac/sanger/artemis/components/variant/IOUtils.java b/uk/ac/sanger/artemis/components/variant/IOUtils.java index 5c806a7e3..344350998 100644 --- a/uk/ac/sanger/artemis/components/variant/IOUtils.java +++ b/uk/ac/sanger/artemis/components/variant/IOUtils.java @@ -45,6 +45,7 @@ import uk.ac.sanger.artemis.components.MessageDialog; import uk.ac.sanger.artemis.components.StickyFileChooser; import uk.ac.sanger.artemis.components.variant.BCFReader.BCFReaderIterator; import uk.ac.sanger.artemis.io.Key; +import uk.ac.sanger.artemis.sequence.Bases; import net.sf.samtools.util.BlockCompressedInputStream; @@ -182,7 +183,7 @@ class IOUtils int sbeg = seg.getRawRange().getStart(); int send = seg.getRawRange().getEnd(); String segBases = seg.getBases(); - + if (vcfReaders[i] instanceof BCFReader) { BCFReaderIterator it = ((BCFReader) vcfReaders[i]).query(chr, sbeg, send); @@ -198,7 +199,7 @@ class IOUtils final String product = f.getProductString(); header.append( (product == null ? "undefined product" : product) ); header.append(" ").append(f.getWriteRange()); - + writeSequence(writer, header.toString(), buff.toString()); } @@ -230,23 +231,30 @@ class IOUtils { int position = vcfRecord.getPos()-sbeg; if(!isFwd) - position = bases.length()-position; + position = bases.length()-position-1; if(position > bases.length()) return bases; + else if(position < 0) + return bases; + if(position < bases.length()-1 && bases.charAt(position) == '-') + return bases; + StringBuffer buff = new StringBuffer(); - if(isFwd) - buff.append(bases.substring(0,position)); - else if(position > 0) - buff.append(bases.substring(0,position-1)); + buff.append(bases.substring(0,position)); if(vcfRecord.getAlt().isDeletion(vcf_v4)) { int ndel = vcfRecord.getAlt().getNumberOfDeletions(vcf_v4); + + if(isFwd) + position+=ndel; + else + buff.delete(position-ndel+1, position); + for(int i=0; i<ndel; i++) buff.append("-"); - position+=ndel; } else if(vcfRecord.getAlt().isInsertion(vcf_v4)) { @@ -256,16 +264,28 @@ class IOUtils { } - else if(vcfRecord.getAlt().isNonVariant()) // non-variant SNP - buff.append(vcfRecord.getRef()); + else if(vcfRecord.getAlt().isNonVariant()) // non-variant + { + if(isFwd) + buff.append(vcfRecord.getRef().toUpperCase()); + else + buff.append(Bases.complement(vcfRecord.getRef()).toUpperCase()); + } else - buff.append(vcfRecord.getAlt().toString().toLowerCase()); // SNP + { + String alt = vcfRecord.getAlt().toString().toLowerCase(); // SNP + if(isFwd) + buff.append(alt); + else + buff.append(Bases.complement(alt)); + } if(isFwd && position < bases.length()) buff.append(bases.substring(position+1)); - else - buff.append(bases.substring(position)); - + else if(!isFwd) + { + buff.append(bases.substring(position+1)); + } return buff.toString(); } -- GitLab