filter_t *region_exact_filter_new(char *region_descriptor, int use_region_file, char *type, const char *url, const char *species, const char *version) { assert(region_descriptor); assert(url); assert(species); assert(version); filter_t *filter = (filter_t*) malloc (sizeof(filter_t)); filter->type = REGION; filter->filter_func = region_filter; filter->free_func = region_filter_free; filter->priority = 2; region_filter_args *filter_args = (region_filter_args*) malloc (sizeof(region_filter_args)); if (use_region_file) { snprintf(filter->name, 11, "RegionFile"); snprintf(filter->description, 64, "Regions read from '%s'", region_descriptor); if (ends_with(region_descriptor, ".gff")) { filter_args->regions = parse_regions_from_gff_file(region_descriptor, url, species, version); } else if (ends_with(region_descriptor, ".bed")) { filter_args->regions = parse_regions_from_bed_file(region_descriptor, url, species, version); } else { LOG_FATAL_F("Region file %s format not supported! Please use BED or GFF formats\n", region_descriptor); } } else { snprintf(filter->name, 11, "RegionList"); snprintf(filter->description, 64, "Regions (could be more) %s", region_descriptor); filter_args->regions = parse_regions(region_descriptor, 1, url, species, version); } filter_args->type = type; filter->args = filter_args; return filter; }
void setup_gff(void) { region_table = parse_regions_from_gff_file("test_parse_regions_01.gff", "http://ws.bioinfo.cipf.es", "hsa", "latest"); }