def calculate(A, n, p, H, dist): """ A: Alphabet (unicode string) n: length of random text (int) p: desired number of occurences of pattern words (int) H: pattern (dict - see above) dist: description of probability distribution (dict - see above) """ if H["type"]=="list": mode = 0 elif H["type"]=="random": mode = 1 elif H["type"]=="pssm/cutoff": mode = 2 elif H["type"]=="pssm/footprints": mode = 3 elif H["type"]=="word/mismatches": mode = 4 elif H["type"]=="consensus": mode = 5 if dist["type"]=="markov": order = int(dist["order"]) elif dist["type"]=="bernoulli": order = 0 elif dist["type"]=="dhmm": order = -1 elif dist["type"]=="hmm": order = -2 #sys.stderr.write("Order: "+str(order)+"\n"+\ # "Mode: "+str(mode)+"\n"+\ # "n: "+str(n)+"\n"+\ # "p: "+str(p)+"\n") ret = sf.set_input_data(order, mode, n, p) if ret!=0: return __error_text__(ret), 0.0, "", [] if dist["type"]=="markov": ret = sf.analis_alp_mark_data(A, dist["probs"], dist["initial_probs"]) elif dist["type"]=="bernoulli": ret = sf.analis_alp_bern_data(A, dist["probs"]) elif dist["type"]=="dhmm": ret = sf.analis_alp_dhhm_data(A, len(dist["probs"]), dist["probs"], dist["trans"]) elif dist["type"]=="hmm": ret = sf.analis_alp_hhm_data(A, len(dist["probs"]), dist["probs"]) if ret!=0: return __error_text__(ret), 0.0, "", [] if H["type"]=="list": ret = sf.analis_pattern_data_0(H["words"]) elif H["type"]=="random": ret = sf.analis_pattern_data_1(H["word_count"], H["word_length"], H["probs"]) elif H["type"].startswith("pssm"): if H["type"]=="pssm/footprints": footprints = H["footprints"] cutoff = 0.0 else: footprints = [] cutoff = H["cutoff"] ret = sf.analis_pattern_data_2_3(len(H["pssm"]), footprints, H["pssm"], cutoff) elif H["type"]=="word/mismatches": ret = sf.analis_pattern_data_4(H["word"], int(H["mismatches"]), H["constpositions"]) elif H["type"]=="consensus": ret = sf.analis_pattern_data_5(H["word"], H["alphabet"]) if ret!=0: return __error_text__(ret), 0.0, "", [] err_no, result, report, res_words = sf.main() return __error_text__(err_no), result, report, res_words