class TestAcghCnvPy(unittest.TestCase): """ test the ACGH CNV filters """ def setUp(self): """ define a default VcfInfo object """ extra = 'OR5A1;CNSOLIDATE;WSCORE=0.5;CALLP=0.000;COMMONFORWARDS=0.000;MEANLR2=0.5;MADL2R=0.02;' cnv = create_cnv('F', 'deNovo', extra_info=extra) self.var = ACGH_CNV(cnv) def test_fails_mad_ratio(self): """ test that fails_mad_ratio() works correctly. """ # check that var passes when MAD ratio >= 15 self.var.cnv.info["MEANLR2"] = "0.3" self.var.cnv.info["MADL2R"] = "0.02" self.assertFalse(self.var.fails_mad_ratio()) # check that var fails when MAD ratio < 10 self.var.cnv.info["MEANLR2"] = "0.29" self.var.cnv.info["MADL2R"] = "0.03" self.assertTrue(self.var.fails_mad_ratio()) # check that var passes when MAD ratio == 0 self.var.cnv.info["MEANLR2"] = "0.3" self.var.cnv.info["MADL2R"] = float("inf") self.assertTrue(self.var.fails_mad_ratio()) # check that var fails when trying to divide by zero self.var.cnv.info["MEANLR2"] = "0.2" self.var.cnv.info["MADL2R"] = "0" self.assertTrue(self.var.fails_mad_ratio()) # check that var passes when the fields are NA self.var.cnv.info["MEANLR2"] = "0.2" self.var.cnv.info["MADL2R"] = "NA" self.assertFalse(self.var.fails_mad_ratio()) def test_fails_wscore(self): """ test that fails_wscore() works correctly """ # check that var passes when WSCORE > 0.45 self.var.cnv.info["WSCORE"] = "0.45" self.assertFalse(self.var.fails_wscore()) # check that var fails when WSCORE < 0.45 self.var.cnv.info["WSCORE"] = "0.449" self.assertTrue(self.var.fails_wscore()) def test_fails_callp(self): """ test that fails_callp() works correctly """ # check that var passes when CALLP < 0.01 self.var.cnv.info["CALLP"] = "0.0" self.assertFalse(self.var.fails_callp()) # check that var passes when CALLP == 0.01 self.var.cnv.info["CALLP"] = "0.01" self.assertFalse(self.var.fails_callp()) # check that var fails when CALLP > 0.01 self.var.cnv.info["CALLP"] = "0.0101" self.assertTrue(self.var.fails_callp()) def test_fails_commmon_forwards(self): """ test that fails_commmon_forwards() works correctly """ # check that var passes when COMMONFORWARDS < 0.8 self.var.cnv.info["COMMONFORWARDS"] = "0.0" self.assertFalse(self.var.fails_commmon_forwards()) # check that var fails when COMMONFORWARDS == 0.8 self.var.cnv.info["COMMONFORWARDS"] = "0.8" self.assertFalse(self.var.fails_commmon_forwards()) # check that var fails when COMMONFORWARDS > 0.8 self.var.cnv.info["COMMONFORWARDS"] = "0.9" self.assertTrue(self.var.fails_commmon_forwards()) def test_fails_mean_lr2_dup(self): """ test that fails_mean_lr2() works correctly on duplications """ # set the var as a duplication self.var.cnv.alt_alleles = ["<DUP>"] self.var.cnv.set_genotype() # check that dup passes with MEANLR2 > 0.4 self.var.cnv.info["MEANLR2"] = "0.4" self.assertFalse(self.var.fails_meanlr2()) # check that dup passes with MEANLR2 < 0.4 self.var.cnv.info["MEANLR2"] = "0.399" self.assertTrue(self.var.fails_meanlr2()) def test_fails_mean_lr2_del(self): """ test that fails_mean_lr2() works correctly on deletions """ # set the var as a deletion self.var.cnv.alt_alleles = ["<DEL>"] self.var.cnv.set_genotype() # check that del passes with MEANLR2 < -0.5 self.var.cnv.info["MEANLR2"] = "-0.5" self.assertFalse(self.var.fails_meanlr2()) # check that del fails with MEANLR2 > -0.41 self.var.cnv.info["MEANLR2"] = "-0.499" self.assertTrue(self.var.fails_meanlr2()) def test_fails_no_exons(self): """ test that fails_no_exons() works correctly """ self.var.cnv.info["NUMBEREXONS"] = "1" self.assertFalse(self.var.fails_no_exons()) self.var.cnv.info["NUMBEREXONS"] = "0" self.assertTrue(self.var.fails_no_exons()) def test_fails_frequency(self): """ test that fails_frequency() works correctly """ # a low population frequency will pass self.var.cnv.info["ACGH_RC_FREQ50"] = "0.01" self.assertFalse(self.var.fails_frequency()) # a high population frequency will fail self.var.cnv.info["ACGH_RC_FREQ50"] = "0.011" self.assertTrue(self.var.fails_frequency()) # if population frequency information is unavailable, it should pass, # since this suggests the frequency is 0. del self.var.cnv.info["ACGH_RC_FREQ50"] self.assertFalse(self.var.fails_frequency()) def test_fails_cifer_inh(self): """ test that fails_cifer_inh() works correctly """ # CNVs annotated as not_inherited, or inherited will pass self.var.cnv.format["CIFER_INHERITANCE"] = "not_inherited" self.assertFalse(self.var.fails_cifer_inh()) # CNVs annotated as false_positive will fail self.var.cnv.format["CIFER_INHERITANCE"] = "false_positive" self.assertTrue(self.var.fails_cifer_inh())
class TestAcghCnvPy(unittest.TestCase): """ test the ACGH CNV filters """ def setUp(self): """ define a default VcfInfo object """ chrom = "1" pos = "15000000" snp_id = "." ref = "A" alt = "<DUP>" filt = "PASS" # set up a SNV object, since SNV inherits VcfInfo cnv = CNV(chrom, pos, snp_id, ref, alt, filt) self.var = ACGH_CNV(cnv) info = "HGNC=TEST;HGNC_ALL=TEST,OR5A1;CQ=missense_variant;CNSOLIDATE;WSCORE=0.5;CALLP=0.000;COMMONFORWARDS=0.000;MEANLR2=0.5;MADL2R=0.02;END=16000000;SVLEN=1000000" format_keys = "inheritance:DP" sample_values = "deNovo:50" self.var.cnv.add_info(info) self.var.cnv.add_format(format_keys, sample_values) self.var.cnv.set_gender("F") def test_fails_mad_ratio(self): """ test that fails_mad_ratio() works correctly """ # check that var passes when MAD ratio > 15 self.var.cnv.info["MEANLR2"] = "0.5" self.var.cnv.info["MADL2R"] = "0.02" self.assertFalse(self.var.fails_mad_ratio()) # check that var passes when MAD ratio == 15 self.var.cnv.info["MEANLR2"] = "0.3" self.var.cnv.info["MADL2R"] = "0.02" self.assertFalse(self.var.fails_mad_ratio()) # check that var fails when MAD ratio < 15 self.var.cnv.info["MEANLR2"] = "0.2" self.var.cnv.info["MADL2R"] = "0.02" self.assertTrue(self.var.fails_mad_ratio()) # check that var fails when trying to divide by zero self.var.cnv.info["MEANLR2"] = "0.2" self.var.cnv.info["MADL2R"] = "0" self.assertTrue(self.var.fails_mad_ratio()) def test_fails_wscore(self): """ test that fails_wscore() works correctly """ # check that var passes when WSCORE > 0.4 self.var.cnv.info["WSCORE"] = "0.5" self.assertFalse(self.var.fails_wscore()) # check that var passes when WSCORE == 0.4 self.var.cnv.info["WSCORE"] = "0.4" self.assertFalse(self.var.fails_wscore()) # check that var fails when WSCORE > 0.4 self.var.cnv.info["WSCORE"] = "0.399" self.assertTrue(self.var.fails_wscore()) def test_fails_callp(self): """ test that fails_callp() works correctly """ # check that var passes when CALLP < 0.01 self.var.cnv.info["CALLP"] = "0.0" self.assertFalse(self.var.fails_callp()) # check that var passes when CALLP == 0.01 self.var.cnv.info["CALLP"] = "0.01" self.assertFalse(self.var.fails_callp()) # check that var fails when CALLP > 0.01 self.var.cnv.info["CALLP"] = "0.0101" self.assertTrue(self.var.fails_callp()) def test_fails_commmon_forwards(self): """ test that fails_commmon_forwards() works correctly """ # check that var passes when COMMONFORWARDS < 0.8 self.var.cnv.info["COMMONFORWARDS"] = "0.0" self.assertFalse(self.var.fails_commmon_forwards()) # check that var fails when COMMONFORWARDS == 0.8 self.var.cnv.info["COMMONFORWARDS"] = "0.8" self.assertFalse(self.var.fails_commmon_forwards()) # check that var fails when COMMONFORWARDS > 0.8 self.var.cnv.info["COMMONFORWARDS"] = "0.9" self.assertTrue(self.var.fails_commmon_forwards()) def test_fails_mean_lr2_dup(self): """ test that fails_mean_lr2() works correctly on duplications """ # set the var as a duplication self.var.cnv.alt_allele = "<DUP>" self.var.cnv.set_genotype() # check that dup passes with MEANLR2 > 0.36 self.var.cnv.info["MEANLR2"] = "0.4" self.assertFalse(self.var.fails_meanlr2()) # check that dup passes with MEANLR2 == 0.36 self.var.cnv.info["MEANLR2"] = "0.36" self.assertFalse(self.var.fails_meanlr2()) # check that dup passes with MEANLR2 < 0.36 self.var.cnv.info["MEANLR2"] = "0.359" self.assertTrue(self.var.fails_meanlr2()) def test_fails_mean_lr2_del(self): """ test that fails_mean_lr2() works correctly on deletions """ # set the var as a deletion self.var.cnv.alt_allele = "<DEL>" self.var.cnv.set_genotype() # check that del passes with MEANLR2 < -0.41 self.var.cnv.info["MEANLR2"] = "-0.5" self.assertFalse(self.var.fails_meanlr2()) # check that del passes with MEANLR2 == -0.41 self.var.cnv.info["MEANLR2"] = "-0.41" self.assertFalse(self.var.fails_meanlr2()) # check that del passes with MEANLR2 > -0.41 self.var.cnv.info["MEANLR2"] = "-0.409" self.assertTrue(self.var.fails_meanlr2()) def test_fails_no_exons(self): """ test that fails_no_exons() works correctly """ self.var.cnv.info["NUMBEREXONS"] = "1" self.assertFalse(self.var.fails_no_exons()) self.var.cnv.info["NUMBEREXONS"] = "0" self.assertTrue(self.var.fails_no_exons())
class TestAcghCnvPy(unittest.TestCase): """ test the ACGH CNV filters """ def setUp(self): """ define a default VcfInfo object """ chrom = "1" pos = "15000000" snp_id = "." ref = "A" alt = "<DUP>" filt = "PASS" # set up a SNV object, since SNV inherits VcfInfo cnv = CNV(chrom, pos, snp_id, ref, alt, filt) self.var = ACGH_CNV(cnv) info = "HGNC=TEST;HGNC_ALL=TEST,OR5A1;CQ=missense_variant;CNSOLIDATE;WSCORE=0.5;CALLP=0.000;COMMONFORWARDS=0.000;MEANLR2=0.5;MADL2R=0.02;END=16000000;SVLEN=1000000" format_keys = "inheritance:DP" sample_values = "deNovo:50" self.var.cnv.add_info(info) self.var.cnv.add_format(format_keys, sample_values) self.var.cnv.set_gender("F") def test_fails_mad_ratio(self): """ test that fails_mad_ratio() works correctly. """ # check that var passes when MAD ratio > 0 self.var.cnv.info["MEANLR2"] = "0.5" self.var.cnv.info["MADL2R"] = "0.02" self.assertFalse(self.var.fails_mad_ratio()) # check that var passes when MAD ratio == 0 self.var.cnv.info["MEANLR2"] = "0.3" self.var.cnv.info["MADL2R"] = float("inf") self.assertFalse(self.var.fails_mad_ratio()) # check that var fails when trying to divide by zero self.var.cnv.info["MEANLR2"] = "0.2" self.var.cnv.info["MADL2R"] = "0" self.assertTrue(self.var.fails_mad_ratio()) def test_fails_wscore(self): """ test that fails_wscore() works correctly """ # check that var passes when WSCORE > 0.4 self.var.cnv.info["WSCORE"] = "0.5" self.assertFalse(self.var.fails_wscore()) # check that var passes when WSCORE == 0.4 self.var.cnv.info["WSCORE"] = "0.4" self.assertFalse(self.var.fails_wscore()) # check that var fails when WSCORE > 0.4 self.var.cnv.info["WSCORE"] = "0.399" self.assertTrue(self.var.fails_wscore()) def test_fails_callp(self): """ test that fails_callp() works correctly """ # check that var passes when CALLP < 0.01 self.var.cnv.info["CALLP"] = "0.0" self.assertFalse(self.var.fails_callp()) # check that var passes when CALLP == 0.01 self.var.cnv.info["CALLP"] = "0.01" self.assertFalse(self.var.fails_callp()) # check that var fails when CALLP > 0.01 self.var.cnv.info["CALLP"] = "0.0101" self.assertTrue(self.var.fails_callp()) def test_fails_commmon_forwards(self): """ test that fails_commmon_forwards() works correctly """ # check that var passes when COMMONFORWARDS < 0.8 self.var.cnv.info["COMMONFORWARDS"] = "0.0" self.assertFalse(self.var.fails_commmon_forwards()) # check that var fails when COMMONFORWARDS == 0.8 self.var.cnv.info["COMMONFORWARDS"] = "0.8" self.assertFalse(self.var.fails_commmon_forwards()) # check that var fails when COMMONFORWARDS > 0.8 self.var.cnv.info["COMMONFORWARDS"] = "0.9" self.assertTrue(self.var.fails_commmon_forwards()) def test_fails_mean_lr2_dup(self): """ test that fails_mean_lr2() works correctly on duplications """ # set the var as a duplication self.var.cnv.alt_allele = "<DUP>" self.var.cnv.set_genotype() # check that dup passes with MEANLR2 > 0.36 self.var.cnv.info["MEANLR2"] = "0.4" self.assertFalse(self.var.fails_meanlr2()) # check that dup passes with MEANLR2 == 0.36 self.var.cnv.info["MEANLR2"] = "0.36" self.assertFalse(self.var.fails_meanlr2()) # check that dup passes with MEANLR2 < 0.36 self.var.cnv.info["MEANLR2"] = "0.359" self.assertTrue(self.var.fails_meanlr2()) def test_fails_mean_lr2_del(self): """ test that fails_mean_lr2() works correctly on deletions """ # set the var as a deletion self.var.cnv.alt_allele = "<DEL>" self.var.cnv.set_genotype() # check that del passes with MEANLR2 < -0.41 self.var.cnv.info["MEANLR2"] = "-0.5" self.assertFalse(self.var.fails_meanlr2()) # check that del passes with MEANLR2 == -0.41 self.var.cnv.info["MEANLR2"] = "-0.41" self.assertFalse(self.var.fails_meanlr2()) # check that del passes with MEANLR2 > -0.41 self.var.cnv.info["MEANLR2"] = "-0.409" self.assertTrue(self.var.fails_meanlr2()) def test_fails_no_exons(self): """ test that fails_no_exons() works correctly """ self.var.cnv.info["NUMBEREXONS"] = "1" self.assertFalse(self.var.fails_no_exons()) self.var.cnv.info["NUMBEREXONS"] = "0" self.assertTrue(self.var.fails_no_exons()) def test_fails_frequency(self): """ test that fails_frequency() works correctly """ # a low population frequency will pass self.var.cnv.info["ACGH_RC_FREQ50"] = "0.01" self.assertFalse(self.var.fails_frequency()) # a high population frequency will fail self.var.cnv.info["ACGH_RC_FREQ50"] = "0.011" self.assertTrue(self.var.fails_frequency()) # if population frequency information is unavailable, it should pass, # since this suggests the frequency is 0. del self.var.cnv.info["ACGH_RC_FREQ50"] self.assertFalse(self.var.fails_frequency()) def test_fails_cifer_inh(self): """ test that fails_cifer_inh() works correctly """ # CNVs annotated as not_inherited, or inherited will pass self.var.cnv.format["CIFER_INHERITANCE"] = "not_inherited" self.assertFalse(self.var.fails_cifer_inh()) # CNVs annotated as false_positive will fail self.var.cnv.format["CIFER_INHERITANCE"] = "false_positive" self.assertTrue(self.var.fails_cifer_inh())