All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.snpeff.snpEffect.testCases.unity.TestCasesStructuralDup Maven / Gradle / Ivy

The newest version!
package org.snpeff.snpEffect.testCases.unity;

import java.util.HashSet;
import java.util.Set;

import org.junit.Assert;
import org.junit.Test;
import org.snpeff.interval.Gene;
import org.snpeff.interval.Transcript;
import org.snpeff.interval.Variant;
import org.snpeff.interval.Variant.VariantType;
import org.snpeff.snpEffect.EffectType;
import org.snpeff.snpEffect.HgvsDna;
import org.snpeff.snpEffect.HgvsProtein;
import org.snpeff.snpEffect.VariantEffect;
import org.snpeff.snpEffect.VariantEffect.EffectImpact;
import org.snpeff.snpEffect.VariantEffects;
import org.snpeff.util.Gpr;
import org.snpeff.vcf.EffFormatVersion;
import org.snpeff.vcf.VcfEffect;

/**
 * Test case for structural variants: Duplications
 */
public class TestCasesStructuralDup extends TestCasesBase {

	EffFormatVersion formatVersion = EffFormatVersion.FORMAT_ANN;

	public TestCasesStructuralDup() {
		super();
	}

	Set arrayToSet(String array[]) {
		Set set = new HashSet<>();
		if (array != null) {
			for (String h : array)
				set.add(h);
		}
		return set;
	}

	protected void checkEffects(Variant variant, EffectType expEffs[], String expHgvsp[], String expHgvsc[], EffectImpact expectedImpact, String expAnns[]) {
		// Convert to sets
		Set expectedEffs = new HashSet<>();
		if (expEffs != null) {
			for (EffectType et : expEffs)
				expectedEffs.add(et);
		}

		Set expectedHgvsp = arrayToSet(expHgvsp);
		Set expectedHgvsc = arrayToSet(expHgvsc);
		Set expectedAnns = arrayToSet(expAnns);

		// Initialize
		initSnpEffPredictor();

		if (verbose) {
			Gpr.debug("Variant: " + variant);
			for (Gene g : genome.getGenes()) {
				Gpr.debug("\tGene: " + g.getId());
				for (Transcript tr : g)
					Gpr.debug(tr + "\n\n" + tr.toStringAsciiArt(true));
			}
		}

		// Calculate effects
		VariantEffects effects = snpEffectPredictor.variantEffect(variant);
		if (verbose) Gpr.debug("VariantEffects: " + effects);

		// Checknumber of results
		Assert.assertEquals(true, effects.size() >= 1);

		Set effs = new HashSet<>();
		Set hgvscs = new HashSet<>();
		Set hgvsps = new HashSet<>();
		Set anns = new HashSet<>();
		boolean impactOk = false;
		for (VariantEffect varEff : effects) {
			effs.addAll(varEff.getEffectTypes());

			HgvsDna hgvsc = new HgvsDna(varEff);
			String hgvsDna = hgvsc.toString();
			hgvscs.add(hgvsDna);

			HgvsProtein hgvsp = new HgvsProtein(varEff);
			String hgvsProt = hgvsp.toString();
			hgvsps.add(hgvsProt);

			impactOk |= varEff.hasEffectImpact(expectedImpact);

			// Create VcfEffect
			VcfEffect vcfEffect = new VcfEffect(varEff, formatVersion);
			String annField = vcfEffect.toString();
			anns.add(annField);

			if (verbose) Gpr.debug("Effect: " + varEff.toStr() //
					+ "\n\tHGVS.c: " + hgvsDna //
					+ "\n\tHGVS.p: " + hgvsProt //
					+ "\n\tANN   : " + annField //
			);
		}

		// Check effects
		Assert.assertTrue(
				"Effects do not match" //
						+ "\n\tExpected : " + expectedEffs //
						+ "\n\tFound    : " + effs//
				, effs.containsAll(expectedEffs) //
		);

		// Check impact
		Assert.assertTrue("Effect impact '" + expectedImpact + "' not found", impactOk);

		// Check HGVS.c
		Assert.assertTrue(
				"HGVS.c do not match" //
						+ "\n\tExpected : " + expectedHgvsc //
						+ "\n\tFound    : " + hgvscs//
				, hgvscs.containsAll(expectedHgvsc) //
		);

		// Check HGVS.p
		Assert.assertTrue(
				"HGVS.p do not match" //
						+ "\n\tExpected : " + expectedHgvsp //
						+ "\n\tFound    : " + hgvsps//
				, hgvsps.containsAll(expectedHgvsp) //
		);

		// Check ANN fields
		Assert.assertTrue(
				"ANN fields do not match" //
						+ "\n\tExpected : " + expectedAnns //
						+ "\n\tFound    : " + anns //
				, anns.containsAll(expectedAnns) //
		);

	}

	@Override
	protected void init() {
		randSeed = 20151205;
		genomeName = "testCase";
		addUtrs = false;
		onlyPlusStrand = true;
		onlyMinusStrand = false;
		numGenes = 2;
		maxGeneLen = 1000;
		maxTranscripts = 1;
		maxExons = 5;
		minExons = 2;
		shiftHgvs = false;

		initRand();
	}

	/**
	 * Duplication Whole gene
	 */
	@Test
	public void test01_dupGene() {
		Gpr.debug("Test");

		// Create variant
		Variant variant = new Variant(chromosome, 950, 1250, "");
		variant.setVariantType(VariantType.DUP);

		EffectType expEffs[] = { EffectType.GENE_DUPLICATION };
		String expHgvsc[] = null;
		EffectImpact expectedImpact = EffectImpact.MODERATE;

		checkEffects(variant, expEffs, null, expHgvsc, expectedImpact, null);
	}

	/**
	 * Duplication whole transcript
	 */
	@Test
	public void test01_dupTr() {
		Gpr.debug("Test");

		// Create variant
		// Note that Gene ends at 1216, so this variant covers transcript (but not gene)
		Variant variant = new Variant(chromosome, 950, 1200, "");
		variant.setVariantType(VariantType.DUP);

		EffectType expEffs[] = { EffectType.TRANSCRIPT_DUPLICATION };
		String expHgvsc[] = null;
		EffectImpact expectedImpact = EffectImpact.MODERATE;

		checkEffects(variant, expEffs, null, expHgvsc, expectedImpact, null);
	}

	/**
	 * Duplication One coding exon
	 */
	@Test
	public void test02() {
		Gpr.debug("Test");

		Variant variant = new Variant(chromosome, 1040, 1100, "");
		variant.setVariantType(VariantType.DUP);

		EffectType expEffs[] = { EffectType.EXON_DUPLICATION, EffectType.FRAME_SHIFT };
		String expHgvsc[] = { "c.33-5_45+43dup" };
		String expHgvsp[] = { "p.Arg16fs", "p.Arg16_Gly18delinsCysValAlaAsnTerThrTrp" };
		EffectImpact expectedImpact = EffectImpact.HIGH;

		checkEffects(variant, expEffs, expHgvsp, expHgvsc, expectedImpact, null);
	}

	/**
	 * Duplication two coding exons (within the same gene)
	 */
	@Test
	public void test03() {
		Gpr.debug("Test");

		Variant variant = new Variant(chromosome, 1040, 1160, "");
		variant.setVariantType(VariantType.DUP);

		EffectType expEffs[] = { EffectType.EXON_DUPLICATION };
		String expHgvsc[] = { "c.33-5_*3dup" };
		EffectImpact expectedImpact = EffectImpact.LOW;

		checkEffects(variant, expEffs, null, expHgvsc, expectedImpact, null);
	}

	/**
	 * Duplication Part of one coding exon
	 */
	@Test
	public void test04() {
		Gpr.debug("Test");

		Variant variant = new Variant(chromosome, 1040, 1050, "");
		variant.setVariantType(VariantType.DUP);

		EffectType expEffs[] = { EffectType.EXON_DUPLICATION_PARTIAL };
		String expHgvsc[] = { "c.33-5_38dup" };
		String expHgvsp[] = { "p.Val12_Leu13insPheVal" };
		EffectImpact expectedImpact = EffectImpact.HIGH;

		checkEffects(variant, expEffs, expHgvsp, expHgvsc, expectedImpact, null);
	}

	/**
	 * Duplication Part of two coding exons (within the same gene)
	 */
	@Test
	public void test05() {
		Gpr.debug("Test");

		Variant variant = new Variant(chromosome, 1050, 1150, "");
		variant.setVariantType(VariantType.DUP);

		EffectType expEffs[] = { EffectType.EXON_DUPLICATION_PARTIAL };
		String expHgvsc[] = { "c.38_48dup" };
		String expHgvsp[] = { "p.Arg16_???19delinsCysTerLeuGluAspMetAsp" };
		EffectImpact expectedImpact = EffectImpact.HIGH;

		checkEffects(variant, expEffs, expHgvsp, expHgvsc, expectedImpact, null);
	}

	/**
	 * Duplication Two genes
	 */
	@Test
	public void test06() {
		Gpr.debug("Test");

		Variant variant = new Variant(chromosome, 1050, 2150, "");
		variant.setVariantType(VariantType.DUP);

		EffectType expEffs[] = { EffectType.EXON_DUPLICATION //
				, EffectType.EXON_DUPLICATION_PARTIAL //
				, EffectType.TRANSCRIPT_DUPLICATION //
				, EffectType.GENE_FUSION //
		};
		String expHgvsc[] = { "n.1051_2151dup" };
		EffectImpact expectedImpact = EffectImpact.LOW;

		checkEffects(variant, expEffs, null, expHgvsc, expectedImpact, null);
	}

	/**
	 * Duplication After gene's coding region (LOW impact)
	 */
	@Test
	public void test07() {
		Gpr.debug("Test");

		Variant variant = new Variant(chromosome, 1100, 2000, "");
		variant.setVariantType(VariantType.DUP);

		EffectType expEffs[] = { EffectType.EXON_DUPLICATION };
		String expHgvsc[] = { "n.1101_2001dup" };
		EffectImpact expectedImpact = EffectImpact.LOW;

		checkEffects(variant, expEffs, null, expHgvsc, expectedImpact, null);
	}

	/**
	 * Duplication Part of two genes cutting on introns
	 */
	@Test
	public void test08() {
		Gpr.debug("Test");

		Variant variant = new Variant(chromosome, 1100, 2075, "");
		variant.setVariantType(VariantType.DUP);

		EffectType expEffs[] = { EffectType.EXON_DUPLICATION //
				, EffectType.FRAME_SHIFT //
				, EffectType.GENE_FUSION //
		};
		String expHgvsc[] = { "n.1101_2076dup" };
		String expHgvsp[] = { "p.Ser2_Leu10delinsTyrPheProPheThrProThrSerAlaAla???", "p.Ser2fs" };
		EffectImpact expectedImpact = EffectImpact.HIGH;

		checkEffects(variant, expEffs, expHgvsp, expHgvsc, expectedImpact, null);
	}

	/**
	 * Duplication Part of two genes cutting exons
	 */
	@Test
	public void test09() {
		Gpr.debug("Test");

		Variant variant = new Variant(chromosome, 1050, 2120, "");
		variant.setVariantType(VariantType.DUP);

		EffectType expEffs[] = { EffectType.EXON_DUPLICATION //
				, EffectType.EXON_DUPLICATION_PARTIAL //
				, EffectType.GENE_FUSION //
		};
		String expHgvsc[] = { "n.1051_2121dup", "c.38_*963dup", "c.-1016_15dup" };
		String expHgvsp[] = { "p.Pro6_Arg7delinsTyrAlaHisValLeuProPhe" };
		EffectImpact expectedImpact = EffectImpact.HIGH;

		checkEffects(variant, expEffs, expHgvsp, expHgvsc, expectedImpact, null);
	}

	/**
	 * Duplication Intron
	 */
	@Test
	public void test10() {
		Gpr.debug("Test");

		Variant variant = new Variant(chromosome, 991, 1020, "");
		variant.setVariantType(VariantType.DUP);

		EffectType expEffs[] = { EffectType.INTRON };
		String expHgvsc[] = { "c.32+3_33-25dup" };
		EffectImpact expectedImpact = EffectImpact.MODIFIER;

		checkEffects(variant, expEffs, null, expHgvsc, expectedImpact, null);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy