
org.snpeff.snpEffect.testCases.unity.TestCasesSnps Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of SnpEff Show documentation
Show all versions of SnpEff Show documentation
Variant annotation and effect prediction package.
The newest version!
package org.snpeff.snpEffect.testCases.unity;
import org.junit.Test;
import org.snpeff.codons.CodonTable;
import org.snpeff.interval.Exon;
import org.snpeff.interval.Variant;
import org.snpeff.snpEffect.VariantEffect;
import org.snpeff.snpEffect.VariantEffects;
import org.snpeff.util.Gpr;
import org.snpeff.util.GprSeq;
import junit.framework.Assert;
/**
* Test random SNP changes
*
* @author pcingola
*/
public class TestCasesSnps extends TestCasesBase {
public static int N = 1000;
public TestCasesSnps() {
super();
}
String effectStr(VariantEffect effect) {
String effStr = effect.effect(true, true, true, false, false);
String aaStr = effect.getAaChangeOld();
int idx = effStr.indexOf('(');
return effStr.substring(0, idx) + "(" + aaStr + ")";
}
@Override
protected void init() {
super.init();
randSeed = 20100629;
}
@Test
public void test_01() {
Gpr.debug("Test");
CodonTable codonTable = genome.codonTable();
// Test N times
// - Create a random gene transcript, exons
// - Change each base in the exon
// - Calculate effect
for (int i = 0; i < N; i++) {
initSnpEffPredictor();
if (debug) System.out.println("SNP Test iteration: " + i + "\n" + transcript);
else if (verbose) System.out.println("SNP Test iteration: " + i + "\t" + transcript.getStrand() + "\t" + transcript.cds());
else Gpr.showMark(i + 1, 1);
int cdsBaseNum = 0;
// For each exon...
for (Exon exon : transcript.sortedStrand()) {
int step = exon.isStrandPlus() ? 1 : -1;
int beg = exon.isStrandPlus() ? exon.getStart() : exon.getEnd();
// For each base in this exon...
for (int pos = beg; (pos >= exon.getStart()) && (pos <= exon.getEnd()); pos += step, cdsBaseNum++) {
// Reference base
char refBase = chromoBases[pos]; // exon.basesAt(pos - exon.getStart(), 1).charAt(0);
refBase = Character.toUpperCase(refBase);
// Codon number
int cdsCodonNum = cdsBaseNum / 3;
int cdsCodonPos = cdsBaseNum % 3;
int minCodonPos = cdsCodonNum * 3;
int maxCodonPos = minCodonPos + 3;
if (maxCodonPos < transcript.cds().length()) {
String codon = transcript.cds().substring(minCodonPos, maxCodonPos);
codon = codon.toUpperCase();
String aa = codonTable.aa(codon);
// Get a random base different from 'refBase'
char snp = refBase;
while (snp == refBase) {
snp = Character.toUpperCase(GprSeq.randBase(rand));
}
// Codon change
String newCodon = codon.substring(0, cdsCodonPos) + snp + codon.substring(cdsCodonPos + 1);
String newAa = codonTable.aa(newCodon);
String effectExpected = "";
// Effect
if (newAa.equals(aa)) {
if ((cdsCodonNum == 0) && (codonTable.isStart(codon))) {
if (codonTable.isStart(newCodon)) effectExpected = "SYNONYMOUS_START(" + aa + ")";
else effectExpected = "START_LOST(" + aa + ")";
} else if (aa.equals("*")) effectExpected = "SYNONYMOUS_STOP(" + aa + ")";
else effectExpected = "SYNONYMOUS_CODING(" + aa + ")";
} else {
if ((cdsCodonNum == 0) && (codonTable.isStart(codon))) {
if (codonTable.isStart(newCodon)) effectExpected = "NON_SYNONYMOUS_START(" + aa + "/" + newAa + ")";
else effectExpected = "START_LOST(" + aa + "/" + newAa + ")";
} else if (codonTable.isStop(codon)) effectExpected = "STOP_LOST(" + aa + "/" + newAa + ")";
else if (codonTable.isStop(newCodon)) effectExpected = "STOP_GAINED(" + aa + "/" + newAa + ")";
else effectExpected = "NON_SYNONYMOUS_CODING(" + aa + "/" + newAa + ")";
}
// Create a variant
if (exon.isStrandMinus()) {
snp = GprSeq.wc(snp);
refBase = GprSeq.wc(refBase);
}
Variant variant = new Variant(chromosome, pos, refBase + "", snp + "", "");
if (!variant.isVariant()) effectExpected = "EXON";
// Calculate effects
VariantEffects effects = snpEffectPredictor.variantEffect(variant);
// Checknumber of results
Assert.assertEquals(true, effects.size() == 1);
if (debug) System.out.println(effects);
// Check effect
VariantEffect effect = effects.get();
String effStr = effectStr(effect);
if (debug) System.out.println("\tPos: " + pos //
+ "\tCDS base num: " + cdsBaseNum + " [" + cdsCodonNum + ":" + cdsCodonPos + "]" //
+ "\t" + variant //
+ "\tCodon: " + codon + " -> " + newCodon //
+ "\tAA: " + aa + " -> " + newAa //
+ "\tEffect: " + effStr);
// Check effect
Assert.assertEquals(effectExpected, effStr);
}
}
}
}
System.err.println("");
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy