def build_kmer_distribution(datafile, kmer_patterns, sampling_proportion, num_processes, builddir, reverse_complement, pattern_window_length, input_driver_config): if os.path.exists(get_save_filename(datafile, builddir)): print("build_kmer_distribution- skipping %s as already done"%datafile) distob = Distribution.load(get_save_filename(datafile, builddir)) distob.summary() else: filetype = get_file_type(datafile) distob = Distribution([datafile], num_processes) distob.interval_locator_parameters = (None,) distob.interval_locator_funcs = (bin_discrete_value,) distob.assignments_files = ("kmer_binning.txt",) distob.file_to_stream_func = seq_from_sequence_file distob.file_to_stream_func_xargs = [filetype,sampling_proportion] distob.weight_value_provider_func = kmer_count_from_sequence distob.weight_value_provider_func_xargs = [reverse_complement, pattern_window_length, 1] + kmer_patterns if filetype == ".cnt": print "DEBUG setting methods for count file" distob.file_to_stream_func = tag_count_from_tag_count_file distob.file_to_stream_func_xargs = [input_driver_config,sampling_proportion] distob.weight_value_provider_func = kmer_count_from_tag_count #distdata = build(distob, use="singlethread") distdata = build(distob, proc_pool_size=num_processes) distob.save(get_save_filename(datafile, builddir)) print "Distribution %s has %d points distributed over %d intervals, stored in %d parts"%(get_save_filename(datafile, builddir), distob.point_weight, len(distdata), len(distob.part_dict)) return get_save_filename(datafile, builddir)
def get_sample_tax_frequency_distribution(sample_tax_summaries): sample_tax_lists = [ Distribution.load(sample_tax_summary).get_distribution().keys() for sample_tax_summary in sample_tax_summaries ] all_taxa = set( reduce(lambda x,y:x+y, sample_tax_lists)) all_taxa_list = list(all_taxa) all_taxa_list.sort(tax_cmp) #print all_taxa_list sample_tax_frequency_distributions = [["%s\t%s"%item for item in all_taxa_list]] + [ Distribution.load(sample_tax_summary).get_frequency_projection(all_taxa_list) for sample_tax_summary in sample_tax_summaries] #print sample_tax_frequency_distributions fd_iter = itertools.izip(*sample_tax_frequency_distributions) heading = itertools.izip(*[["Kingdom\tFamily"]]+[[re.split("\.",os.path.basename(path.strip()))[0]] for path in sample_tax_summaries]) #print heading fd_iter = itertools.chain(heading, fd_iter) for record in fd_iter: print string.join([str(item) for item in record],"\t")
def use_kmer_prbdf(picklefile): distob = Distribution.load(picklefile) distdata = distob.get_distribution() for (interval, freq) in distdata.items(): print interval, freq