
org.snpeff.snpEffect.testCases.unity.TestCasesIntervalVariant 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.interval.Exon;
import org.snpeff.interval.Intron;
import org.snpeff.interval.Variant;
import org.snpeff.snpEffect.EffectType;
import org.snpeff.snpEffect.VariantEffect;
import org.snpeff.snpEffect.VariantEffects;
import org.snpeff.util.Gpr;
import junit.framework.Assert;
/**
* Test random Interval Variants (e.g. when reading a BED file)
*
* @author pcingola
*/
public class TestCasesIntervalVariant extends TestCasesBase {
public static int N = 1000;
public TestCasesIntervalVariant() {
super();
}
@Override
protected void init() {
super.init();
randSeed = 20120426;
}
@Test
public void test_01() {
Gpr.debug("Test");
// Test N times
// - Create a random gene transcript, exons
// - Create a random Insert at each position
// - Calculate effect
for (int i = 0; i < N; i++) {
initSnpEffPredictor();
if (debug) System.out.println("INTERVAL (Variant) Test iteration: " + i + "\n" + transcript);
else Gpr.showMark(i + 1, 1);
// For each base in the transcript
// For each base in this exon...
for (int pos = 0; pos < chromosome.size(); pos++) {
//---
// Create seqChange
//---
// Interval length
int intLen = rand.nextInt(100) + 1;
int start = pos;
int end = Math.min(pos + intLen, chromosome.getEnd());
// Create a variant
Variant variant = new Variant(chromosome, start, end, "");
// Sanity checks
Assert.assertEquals(true, variant.isInterval()); // Is it an interval?
//---
// Expected Effect
//---
EffectType expectedEffect = null;
if (transcript.intersects(variant)) {
// Does it intersect any exon?
for (Exon ex : transcript)
if (ex.intersects(variant)) expectedEffect = EffectType.EXON;
for (Intron intron : transcript.introns())
if (intron.intersects(variant)) expectedEffect = EffectType.INTRON;
} else if (gene.intersects(variant)) {
// Gene intersects but transcript doesn't?
if (expectedEffect == null) expectedEffect = EffectType.INTRAGENIC;
} else expectedEffect = EffectType.INTERGENIC;
//---
// Calculate Effect
//---
VariantEffects effects = snpEffectPredictor.variantEffect(variant);
//---
// Check effect
//---
// There should be only one effect in most cases
Assert.assertEquals(false, effects.isEmpty()); // There should be at least one effect
if (debug && (effects.size() > 1)) {
System.out.println("Found more than one effect: " + effects.size() + "\n" + transcript);
for (VariantEffect eff : effects)
System.out.println("\t" + eff);
}
boolean isExpectedOK = false;
StringBuilder effSb = new StringBuilder();
for (VariantEffect effect : effects) {
String effstr = effect.effect(true, true, true, false, false);
isExpectedOK |= effect.hasEffectType(expectedEffect);
effSb.append(effstr + " ");
}
if (debug || !isExpectedOK) //
System.out.println("\nVariant : " + variant //
+ "\nExpected Effect : '" + expectedEffect + "'" //
+ "\nEffects : '" + effSb + "'" //
+ "\n--------------------------------------------------------------\n" //
);
Assert.assertEquals(true, isExpectedOK);
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy