Skip to content
Snippets Groups Projects
Commit 68122d3d authored by tjc's avatar tjc
Browse files

handle heterozygous sites

git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@15556 ee4ac58c-ac51-4696-9907-e4b3aa274f04
parent 2f5ec5b2
No related branches found
No related tags found
No related merge requests found
......@@ -42,6 +42,7 @@ import uk.ac.sanger.artemis.FeatureSegment;
import uk.ac.sanger.artemis.FeatureSegmentVector;
import uk.ac.sanger.artemis.FeatureVector;
import uk.ac.sanger.artemis.components.MessageDialog;
import uk.ac.sanger.artemis.components.SequenceViewer;
import uk.ac.sanger.artemis.components.StickyFileChooser;
import uk.ac.sanger.artemis.components.variant.BCFReader.BCFReaderIterator;
import uk.ac.sanger.artemis.io.Key;
......@@ -150,7 +151,7 @@ class IOUtils
// get all CDS features that do not have the /pseudo qualifier
final FeatureVector features = getFeatures(
new FeatureKeyQualifierPredicate(Key.CDS, "pseudo", false), entryGroup);
exportFasta(entryGroup, vcfReaders, chr, vcfView, vcf_v4, features);
exportFasta(entryGroup, vcfReaders, chr, vcfView, vcf_v4, features, false);
}
......@@ -159,7 +160,8 @@ class IOUtils
final String chr,
final VCFview vcfView,
final boolean vcf_v4,
final FeatureVector features)
final FeatureVector features,
final boolean view)
{
String suffix = ".fasta";
if(features.size() == 1)
......@@ -170,8 +172,6 @@ class IOUtils
String vcfFileName = vcfReaders[i].getFileName();
try
{
File filterFile = getFile(vcfFileName, vcfReaders.length, suffix);
FileWriter writer = new FileWriter(filterFile);
for (int j = 0; j < features.size(); j++)
{
Feature f = features.elementAt(j);
......@@ -200,11 +200,22 @@ class IOUtils
header.append( (product == null ? "undefined product" : product) );
header.append(" ").append(f.getWriteRange());
writeSequence(writer, header.toString(), buff.toString());
if(view) // sequence viewer
{
SequenceViewer viewer =
new SequenceViewer ("Feature base viewer for feature:" +
f.getIDString (), false);
viewer.setSequence(">"+header.toString(), buff.toString());
}
else // write to file
{
File filterFile = getFile(vcfFileName, vcfReaders.length, suffix);
FileWriter writer = new FileWriter(filterFile);
writeSequence(writer, header.toString(), buff.toString());
writer.close();
}
}
}
catch (IOException e)
{
e.printStackTrace();
......@@ -262,7 +273,11 @@ class IOUtils
}
else if(vcfRecord.getAlt().isMultiAllele())
{
String base = MultipleAlleleVariant.getIUBCode(vcfRecord);
if(base != null)
buff.append(base);
else
buff.append(bases.charAt(position));
}
else if(vcfRecord.getAlt().isNonVariant()) // non-variant
{
......
package uk.ac.sanger.artemis.components.variant;
public class MultipleAlleleVariant
{
private static String IUB[][] =
{
{"m", "a", "c"},
{"r", "a", "g"},
{"w", "a", "t"},
{"w", "a", "u"},
{"s", "c", "g"},
{"y", "c", "t"},
{"y", "c", "u"},
{"k", "g", "t"},
{"k", "g", "u"}
};
/**
* M (A or C)
* R (A or G)
* W (A or T/U)
* S (C or G)
* Y (C or T/U)
* K (G or T/U)
* @param base
* @return
*/
protected static String getIUBCode(VCFRecord record)
{
String alt = record.getAlt().toString();
String alleles[] = alt.split(",");
String pl;
if ((pl = record.getFormatValue("PL")) != null && pl.split(",").length == 3 &&
pl.split(",")[1].equals("0"))
{
// include ref
String[] temp = new String[alleles.length+1];
System.arraycopy(alleles, 0, temp, 0, alleles.length);
alleles = temp;
alleles[alleles.length-1] = record.getRef();
}
boolean isSNP = true;
for(int i=0; i<alleles.length; i++)
{
alleles[i] = alleles[i].toLowerCase();
if(alleles[i].length() > 1)
isSNP = false;
}
if(isSNP && alleles.length == 2)
{
for(int i=0; i<IUB.length; i++)
{
if(IUB[i][1].equals(alleles[0]) && IUB[i][2].equals(alleles[1]) ||
IUB[i][1].equals(alleles[1]) && IUB[i][2].equals(alleles[0]))
return IUB[i][0];
}
}
return null;
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment