Exemplo n.º 1
0
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