def test_add_thousand_g(self, variant): adapter = GeminiPlugin() gemini_variant = {'aaf_1kg_all':0.01} adapter._add_thousand_g(variant, gemini_variant) assert variant.thousand_g == 0.01 assert len(variant.frequencies) == 1
def test_is_variant(case_obj): adapter = GeminiPlugin() genotypes = ['G/A', 'G/A', 'G/G', 'G/G', './.'] ind_objs = [ Individual(ind_id=0, ind_index=0), Individual(ind_id=1, ind_index=1), ] #Mock a gemini variant gemini_variant = { 'gts':genotypes, 'alt':'A' } assert adapter._is_variant(gemini_variant, ind_objs) #Check with individuals that are hom ref ind_objs = [ Individual(ind_id=0, ind_index=2), Individual(ind_id=1, ind_index=3), ] assert not adapter._is_variant(gemini_variant, ind_objs) #Check with individual that has no call ind_objs = [ Individual(ind_id=0, ind_index=4), ] assert not adapter._is_variant(gemini_variant, ind_objs)
def test_add_exac(self, variant): adapter = GeminiPlugin() gemini_variant = {'aaf_exac_all': 0.01} adapter._add_exac(variant, gemini_variant) assert variant.thousand_g == None assert len(variant.frequencies) == 1
def test_filters_consequence(self, gemini_path): adapter = GeminiPlugin(db=gemini_path) filters = {'consequence':['stop_gained']} variants = [] for variant in adapter.variants('643594', filters=filters): variants.append(variant) assert len(variants) == 2
def test_add_gmaf_no_frequency(self, variant): adapter = GeminiPlugin() gemini_variant = {'max_aaf_all': None} adapter._add_gmaf(variant, gemini_variant) assert len(variant.frequencies) == 0 assert variant.max_freq == None
def test_add_genotypes(self, variant): adapter = GeminiPlugin() gemini_variant = { 'gts': ['G/A', 'G/A', './.', './.', './.'], 'gt_depths': [17, 19, -1, -1, -1], 'gt_ref_depths': [10, 13, -1, -1, -1], 'gt_alt_depths': [7, 6, -1, -1, -1], 'gt_quals': [99, 99, -1, -1, -1], } ind = DotDict() ind.ind_index = 0 ind.ind_id = '1' ind.case_id = 'Case_1' ind.phenotype = 2 ind_objs = [ind] adapter._add_genotypes(variant, gemini_variant, ind_objs) genotype = variant.individuals[0] assert genotype.sample_id == ind.ind_id assert genotype.sample_id == ind.ind_id assert genotype.genotype == 'G/A' assert genotype.case_id == ind.case_id assert genotype.phenotype == ind.phenotype assert genotype.ref_depth == 10 assert genotype.alt_depth == 7 assert genotype.depth == 17 assert genotype.genotype_quality == 99
def test_add_genotypes(self, variant): adapter = GeminiPlugin() gemini_variant = { 'gts': ['G/A', 'G/A', './.', './.', './.'], 'gt_depths': [17, 19, -1, -1, -1], 'gt_ref_depths': [10, 13, -1, -1, -1], 'gt_alt_depths': [7, 6, -1, -1, -1], 'gt_quals': [99, 99, -1, -1, -1], } ind = DotDict() ind.ind_index = 0 ind.ind_id = '1' ind.phenotype = 2 ind_objs = [ind] adapter._add_genotypes(variant, gemini_variant, 'dummy', ind_objs) genotype = variant.individuals[0] assert genotype.sample_id == ind.ind_id assert genotype.sample_id == ind.ind_id assert genotype.genotype == 'G/A' assert genotype.case_id == 'dummy' assert genotype.phenotype == ind.phenotype assert genotype.ref_depth == 10 assert genotype.alt_depth == 7 assert genotype.depth == 17 assert genotype.genotype_quality == 99
def test_is_variant(gemini_case_obj): plugin = GeminiPlugin() genotypes = ['G/A', 'G/A', 'G/G', 'G/G', './.'] gt_types = [1, 1, 0, 0, 2] ind_objs = [ Individual(ind_id=0, ind_index=0), Individual(ind_id=1, ind_index=1), ] #Mock a gemini variant gemini_variant = {'gts': genotypes, 'gt_types': gt_types, 'alt': 'A'} assert plugin._is_variant(gemini_variant, ind_objs) #Check with individuals that are hom ref ind_objs = [ Individual(ind_id=0, ind_index=2), Individual(ind_id=1, ind_index=3), ] assert not plugin._is_variant(gemini_variant, ind_objs) #Check with individual that has no call ind_objs = [ Individual(ind_id=0, ind_index=4), ] assert not plugin._is_variant(gemini_variant, ind_objs)
def test_add_gmaf_no_frequency(self, variant): adapter = GeminiPlugin() gemini_variant = {'max_aaf_all':None} adapter._add_gmaf(variant, gemini_variant) assert len(variant.frequencies) == 0 assert variant.max_freq == None
def test_add_thousand_g(self, variant): adapter = GeminiPlugin() gemini_variant = {'aaf_1kg_all': 0.01} adapter._add_thousand_g(variant, gemini_variant) assert variant.thousand_g == 0.01 assert len(variant.frequencies) == 1
def test_add_exac(self, variant): adapter = GeminiPlugin() gemini_variant = {'aaf_exac_all':0.01} adapter._add_exac(variant, gemini_variant) assert variant.thousand_g == None assert len(variant.frequencies) == 1
def test_filters_gene_ids(self, gemini_path): adapter = GeminiPlugin(db=gemini_path) filters = {'gene_ids':['HLA-DRB5']} variants = [] for variant in adapter.variants('643594', filters=filters): variants.append(variant) assert len(variants) == 5
def test_filters_impact_severities(self, gemini_path): adapter = GeminiPlugin(db=gemini_path) filters = {'impact_severities':['HIGH']} variants = [] for variant in adapter.variants('643594', filters=filters): variants.append(variant) assert len(variants) == 2
def test_filters_cadd(self, gemini_path): adapter = GeminiPlugin(db=gemini_path) filters = {'cadd':'20'} variants = [] for variant in adapter.variants('643594', filters=filters): variants.append(variant) assert len(variants) == 4
def test_filters_frequency(self, gemini_path): adapter = GeminiPlugin(db=gemini_path) filters = {'frequency':'0.01'} variants = [] for variant in adapter.variants('643594', filters=filters): variants.append(variant) assert len(variants) == 13
def test_get_all_variants(gemini_path): """Test to get some variants from the gemini adapter""" adapter = GeminiPlugin(db=gemini_path) variants = [] for variant in adapter.variants('643594'): variants.append(variant) assert len(variants) == 14
def test_no_filters_sv(self, gemini_sv_case_obj): plugin = GeminiPlugin() plugin.add_case(gemini_sv_case_obj) filters = {} result = plugin.variants('hapmap', filters=filters, count=1000) variants = result.variants nr_of_variants = result.nr_of_variants assert nr_of_variants == 513
def test_filters_no_filters(self, gemini_case_obj): plugin = GeminiPlugin() plugin.add_case(gemini_case_obj) filters = {} result = plugin.variants('643594', filters=filters, count=1000) variants = result.variants nr_of_variants = result.nr_of_variants assert nr_of_variants == 14
def test_variant(gemini_case_obj): """Test to get one variant""" plugin = GeminiPlugin() plugin.add_case(gemini_case_obj) variant = plugin.variant(case_id='643594', variant_id=4) assert variant['CHROM'] == '6' assert variant['POS'] == '32487163' assert type(variant['genes']) == type([])
def test_build_gemini_query(): plugin = GeminiPlugin() query = "SELECT * from variants" extra_info = "max_aaf_all < 0.01" new_query = plugin.build_gemini_query(query, extra_info) assert new_query == "SELECT * from variants WHERE max_aaf_all < 0.01" extra_info = "cadd_score > 10" new_query = plugin.build_gemini_query(new_query, extra_info) assert new_query == "SELECT * from variants WHERE max_aaf_all < 0.01 AND cadd_score > 10"
def test_build_gemini_query(): adapter = GeminiPlugin() query = "SELECT * from variants" extra_info = "max_aaf_all < 0.01" new_query = adapter.build_gemini_query(query, extra_info) assert new_query == "SELECT * from variants WHERE max_aaf_all < 0.01" extra_info = "cadd_score > 10" new_query = adapter.build_gemini_query(new_query, extra_info) assert new_query == "SELECT * from variants WHERE max_aaf_all < 0.01 AND cadd_score > 10"
def test_get_all_variants(gemini_case_obj): """Test to get some variants from the gemini adapter""" plugin = GeminiPlugin() plugin.add_case(gemini_case_obj) filters = {} result = plugin.variants('643594', filters=filters, count=1000) variants = result.variants nr_of_variants = result.nr_of_variants assert nr_of_variants == 14
def test_variant(gemini_path): """Test to get one variant""" adapter = GeminiPlugin(db=gemini_path) variant = adapter.variant( case_id='643594', variant_id=4 ) assert variant['CHROM'] == '6' assert variant['POS'] == '32487163' assert type(variant['genes']) == type([])
def test_filters_impact_severities_medium(self, gemini_case_obj): plugin = GeminiPlugin() plugin.add_case(gemini_case_obj) filters = {'impact_severities':['MEDIUM']} result = plugin.variants('643594', filters=filters, count=1000) variants = result.variants nr_of_variants = result.nr_of_variants for variant_obj in variants: assert variant_obj.impact_severity == 'MEDIUM' assert nr_of_variants == 10
def test_filters_impact_severities_medium(self, gemini_case_obj): plugin = GeminiPlugin() plugin.add_case(gemini_case_obj) filters = {'impact_severities': ['MEDIUM']} result = plugin.variants('643594', filters=filters, count=1000) variants = result.variants nr_of_variants = result.nr_of_variants for variant_obj in variants: assert variant_obj.impact_severity == 'MEDIUM' assert nr_of_variants == 10
def test_filters_sv_len(self, gemini_sv_case_obj): plugin = GeminiPlugin() plugin.add_case(gemini_sv_case_obj) filters = {'sv_len': '800'} result = plugin.variants('hapmap', filters=filters, count=1000) variants = result.variants nr_of_variants = result.nr_of_variants for variant_obj in variants: assert variant_obj.sv_len >= 800 assert nr_of_variants == 176
def test_filters_sv_len(self, gemini_sv_case_obj): plugin = GeminiPlugin() plugin.add_case(gemini_sv_case_obj) filters = {'sv_len':'800'} result = plugin.variants('hapmap', filters=filters, count=1000) variants = result.variants nr_of_variants = result.nr_of_variants for variant_obj in variants: assert variant_obj.sv_len >= 800 assert nr_of_variants == 176
def test_filters_gene_ids(self, gemini_case_obj): plugin = GeminiPlugin() plugin.add_case(gemini_case_obj) filters = {'gene_ids':['HLA-DRB5']} result = plugin.variants('643594', filters=filters, count=1000) variants = result.variants nr_of_variants = result.nr_of_variants for variant_obj in variants: assert 'HLA-DRB5' in variant_obj.gene_symbols assert nr_of_variants == 5
def test_variant(gemini_case_obj): """Test to get one variant""" plugin = GeminiPlugin() plugin.add_case(gemini_case_obj) variant = plugin.variant( case_id='643594', variant_id=4 ) assert variant['CHROM'] == '6' assert variant['POS'] == '32487163' assert type(variant['genes']) == type([])
def test_filters_cadd(self, gemini_case_obj): plugin = GeminiPlugin() plugin.add_case(gemini_case_obj) filters = {'cadd':'20'} result = plugin.variants('643594', filters=filters, count=1000) variants = result.variants nr_of_variants = result.nr_of_variants for variant_obj in variants: assert variant_obj.cadd_score > 20 assert nr_of_variants == 4
def test_filters_gene_ids(self, gemini_case_obj): plugin = GeminiPlugin() plugin.add_case(gemini_case_obj) filters = {'gene_ids': ['HLA-DRB5']} result = plugin.variants('643594', filters=filters, count=1000) variants = result.variants nr_of_variants = result.nr_of_variants for variant_obj in variants: assert 'HLA-DRB5' in variant_obj.gene_symbols assert nr_of_variants == 5
def test_filters_consequence(self, gemini_case_obj): plugin = GeminiPlugin() plugin.add_case(gemini_case_obj) filters = {'consequence': ['stop_gained']} result = plugin.variants('643594', filters=filters, count=1000) variants = result.variants nr_of_variants = result.nr_of_variants for variant_obj in variants: assert 'stop_gained' in variant_obj.consequences assert nr_of_variants == 2
def test_filters_frequency(self, gemini_case_obj): plugin = GeminiPlugin() plugin.add_case(gemini_case_obj) filters = {'frequency': '0.01'} result = plugin.variants('643594', filters=filters, count=1000) variants = result.variants nr_of_variants = result.nr_of_variants for variant_obj in variants: assert variant_obj.max_freq < 0.01 assert nr_of_variants == 13
def test_filters_frequency(self, gemini_case_obj): plugin = GeminiPlugin() plugin.add_case(gemini_case_obj) filters = {'frequency':'0.01'} result = plugin.variants('643594', filters=filters, count=1000) variants = result.variants nr_of_variants = result.nr_of_variants for variant_obj in variants: assert variant_obj.max_freq < 0.01 assert nr_of_variants == 13
def test_filters_consequence(self, gemini_case_obj): plugin = GeminiPlugin() plugin.add_case(gemini_case_obj) filters = {'consequence':['stop_gained']} result = plugin.variants('643594', filters=filters, count=1000) variants = result.variants nr_of_variants = result.nr_of_variants for variant_obj in variants: assert 'stop_gained' in variant_obj.consequences assert nr_of_variants == 2
def test_filters_cadd(self, gemini_case_obj): plugin = GeminiPlugin() plugin.add_case(gemini_case_obj) filters = {'cadd': '20'} result = plugin.variants('643594', filters=filters, count=1000) variants = result.variants nr_of_variants = result.nr_of_variants for variant_obj in variants: assert variant_obj.cadd_score > 20 assert nr_of_variants == 4
def test_filters_range(self, gemini_case_obj): plugin = GeminiPlugin() plugin.add_case(gemini_case_obj) start = 92498060 end = 92498100 filters = {'range': {'chromosome': 'chr1', 'start': start, 'end':end}} result = plugin.variants('643594', filters=filters, count=1000) variants = result.variants nr_of_variants = result.nr_of_variants for variant_obj in variants: assert variant_obj.start >= start assert variant_obj.stop <= end assert nr_of_variants == 1
def test_filters_range(self, gemini_case_obj): plugin = GeminiPlugin() plugin.add_case(gemini_case_obj) start = 92498060 end = 92498100 filters = {'range': {'chromosome': 'chr1', 'start': start, 'end': end}} result = plugin.variants('643594', filters=filters, count=1000) variants = result.variants nr_of_variants = result.nr_of_variants for variant_obj in variants: assert variant_obj.start >= start assert variant_obj.stop <= end assert nr_of_variants == 1
def test_get_transcripts(gemini_path): adapter = GeminiPlugin(db=gemini_path) gemini_variant = {'variant_id': 1} transcripts = [] for transcript in adapter._get_transcripts(gemini_variant): transcripts.append(transcript) assert len(transcripts) == 2 first_transcript = transcripts[0] assert first_transcript.transcript_id == 'ENST00000370383' assert first_transcript.hgnc_symbol == 'EPHX4' assert first_transcript.consequence == 'missense_variant' assert first_transcript.ensembl_id == None assert first_transcript.biotype == 'protein_coding' assert first_transcript.sift == 'deleterious' assert first_transcript.polyphen == 'probably_damaging'
def test_check_gemini_db(gemini_path, vcf_file): adapter = GeminiPlugin() adapter.db = gemini_path assert adapter.test_gemini_db() adapter.db = vcf_file with pytest.raises(DatabaseError): adapter.test_gemini_db()
def test_setup_no_db(): """Test to initialize a gemini database without any file""" adapter = GeminiPlugin() assert adapter.db == None assert adapter.variant_type == 'snv' assert adapter.filters.can_filter_gene == True assert adapter.filters.can_filter_inheritance == False
def test_get_genotypes(gemini_variant): adapter = GeminiPlugin() ind = DotDict() ind.ind_index = 0 ind.ind_id = '1' ind.case_id = 'Case_1' ind.phenotype = 2 ind_objs = [ind] individual = adapter._get_genotypes(gemini_variant, ind_objs)[0] assert individual.sample_id == ind.ind_id assert individual.sample_id == ind.ind_id assert individual.genotype == 'G/A' assert individual.case_id == ind.case_id assert individual.phenotype == ind.phenotype assert individual.ref_depth == 10 assert individual.alt_depth == 7 assert individual.depth == 17 assert individual.genotype_quality == 99
class TestGeminiAdapter(object): """Setup and test a gemini adapter""" def setup(self): """docstring for setup""" self.adapter = GeminiPlugin(GEMINI_DB) def test_gemini_individuals(self): """docstring for test_gemini_individuals""" ind_ids = set([individual['ind_id'] for individual in self.adapter.individuals]) assert ind_ids == set(['NA12877', 'NA12878', 'NA12882']) def test_gemini_cases(self): """docstring for test_gemini_individuals""" cases = set([case['name'] for case in self.adapter.cases()]) assert cases == set(['643594']) def test_get_variants(self): """Test to get some variants from the gemini adapter""" variants = [] for variant in self.adapter.variants('643594', count=5): variants.append(variant) assert len(variants) == 5 def test_get_variant(self): """Test to get one variant""" variant = self.adapter.variant( case_id='643594', variant_id=4 ) assert variant['CHROM'] == '6' assert variant['POS'] == '32487163'
def select_plugin(self, case_obj): """Select and initialize the correct plugin for the case.""" if case_obj.variant_mode == 'vcf': logger.debug("Using vcf plugin") plugin = VcfPlugin(case_obj.variant_type) elif case_obj.variant_mode == 'gemini': logger.debug("Using gemini plugin") plugin = GeminiPlugin(case_obj.variant_type) #Add case to plugin plugin.add_case(case_obj) self.variant_type = case_obj.variant_type case_id = case_obj.case_id return plugin, case_id
def browser_puzzle(args): host = args.host port = args.port try: # Puzzle browser plugin from puzzle.server import factory as puzzle_app from puzzle.plugins import GeminiPlugin from puzzle.server.settings import BaseConfig except ImportError as e: raise ImportError("%s\nPlease 'pip install puzzle' if you want to run it\n" % e) plugin = GeminiPlugin(db=args.db, vtype="sv") root = os.path.expanduser("~/.puzzle") BaseConfig.PUZZLE_BACKEND = plugin BaseConfig.UPLOAD_DIR = os.path.join(root, 'resources') puzzle_srv = puzzle_app.create_app(config_obj=BaseConfig) webbrowser.open_new_tab("http://{}:{}".format(host, port)) run(puzzle_srv, host=host, port=port)
def test_add_transcripts(self, gemini_case_obj, variant): adapter = GeminiPlugin() adapter.add_case(gemini_case_obj) adapter.db = gemini_case_obj.variant_source gemini_variant = {'variant_id': 1} adapter._add_transcripts(variant, gemini_variant) transcripts = variant.transcripts assert len(transcripts) == 2 first_transcript = transcripts[0] assert first_transcript.transcript_id == 'ENST00000370383' assert first_transcript.hgnc_symbol == 'EPHX4' assert first_transcript.consequence == 'missense_variant' assert first_transcript.ensembl_id == None assert first_transcript.biotype == 'protein_coding' assert first_transcript.sift == 'deleterious' assert first_transcript.polyphen == 'probably_damaging'
def test_setup_with_variant_type(gemini_path): adapter = GeminiPlugin('sv') assert adapter.variant_type == 'sv'
def test_add_exac_no_frequency(self, variant): adapter = GeminiPlugin() gemini_variant = {'aaf_exac_all': None} adapter._add_exac(variant, gemini_variant) assert len(variant.frequencies) == 0
def test_add_exac_no_frequency(self, variant): adapter = GeminiPlugin() gemini_variant = {'aaf_exac_all':None} adapter._add_exac(variant, gemini_variant) assert len(variant.frequencies) == 0