def _get_filtered_variants(self, vcf_file_path, filters={}):
        genes = set()
        consequences = set()
        sv_types = set()
        if filters.get('gene_ids'):
            genes = set([gene_id.strip() for gene_id in filters['gene_ids']])
        if filters.get('consequence'):
            consequences = set(filters['consequence'])
        if filters.get('sv_types'):
            sv_types = set(filters['sv_types'])
        logger.info("Get variants from {0}".format(vcf_file_path))
        if filters.get('range'):
            range_str = "{0}:{1}-{2}".format(
                filters['range']['chromosome'],
                filters['range']['start'],
                filters['range']['end'])
            vcf = VCF(vcf_file_path)
            handle = vcf(range_str)
        else:
            handle = VCF(vcf_file_path)
        for variant in handle:
            variant_line = str(variant)
            keep_variant = True
            if genes and keep_variant:
                keep_variant = False
                for gene in genes:
                    if "{0}".format(gene) in variant_line:
                        keep_variant = True
                        break
            if consequences and keep_variant:
                keep_variant = False
                for consequence in consequences:
                    if consequence in variant_line:
                        keep_variant = True
                        break
            if sv_types and keep_variant:
                keep_variant = False
                for sv_type in sv_types:
                    if sv_type in variant_line:
                        keep_variant = True
                        break
            if keep_variant:
                yield variant