def graph(task):
    lims = len(task) != 1
    if lims:
        fname = task[2]
    else:
        fname = task[0]

    axis_name = fname
    try:
        fname_index = axis_name.rindex('\\') + 1
        axis_name = axis_name[fname_index:]
    except ValueError:
        pass
    try:
        fname_index = axis_name.rindex('/') + 1
        axis_name = axis_name[fname_index:]
    except ValueError:
        pass
    try:
        dot_index =axis_name.rindex('.')
        axis_name = axis_name[:dot_index]
    except ValueError:
        pass
    matrix_act = fs.load_matrix(fname)

    if matrix_act is not None:
        act = matrix_act[0]
        result_name = "output/analyzer/graph_" + axis_name
        plt.figure(figsize=(max(8, len(act)/50), 6))
        plt.xlabel("time")
        plt.ylabel(axis_name)
        if lims:
            plt.ylim(task[:2])
        plt.plot(act)
        plt.savefig(result_name + ".png")
        plt.close()

        stat = calculate_statistics_sequence(act)
        output = "m = {0}\nD = {1}\na = {2}\nk = {3}".format(stat[0], stat[1], stat[2], stat[3])
        fs.write_file(result_name + ".txt", output)
    else:
        print("cannot read file '" + fname + "'", flush=True)
def parameter(task):
    id = task[0]
    mn = task[1]
    mx = task[2]
    if len(task) == 4:
        st = task[3]
    else:
        st = 1
    val = mn
    pool = [mn]
    while mx - mn - st > EVALUATIONS_EPSILON:
        mn += st
        pool.append(mn)
    pool.append(mx)

    fname = "analyzer_settings.txt"
    neurs = int(fs.load_parameter(fname, "NEURONS", 100))
    elects = int(fs.load_parameter(fname, "ELECTRODES", 30))
    cons = int(fs.load_parameter(fname, "CONNECTIONS", 2000))
    elecons = int(fs.load_parameter(fname, "ELECONS", 150))
    noize = int(fs.load_parameter(fname, "NOIZEVAL", 5))
    testtime = int(fs.load_parameter(fname, "TESTTIME", 500))
    tests = int(fs.load_parameter(fname, "TESTS", 10))
    wind_size = int(fs.load_parameter(fname, "WINDOWSIZE", 7))
    pstart = int(fs.load_parameter(fname, "PACKSTART", 79))
    pend = int(fs.load_parameter(fname, "PACKEND", 21))
    params = (wind_size, pstart, pend)

    data = []
    pool_burst_len = []
    pool_noburst_len = []
    pool_burst_percent = []

    class Callback:
        @staticmethod
        def draw_info(info):
            data.append(info)

    for i in range(len(pool)):
        sbl = 0
        snbl = 0
        sbp = 0
        for j in range(tests):
            data = []
            callback = Callback()
            ntw = Network(callback)
            ntw.add_neurons(neurs)
            ntw.add_electrodes(elects)
            ntw.add_connections(True, cons, 0, neurs - 1, 0, neurs - 1)
            ntw.add_connections(False, elecons, 0, cons - 1, 0, elects - 1)
            ntw.setNoize(True, noize)
            ntw.set_parameter(id, pool[i])
            for k in range(testtime):
                ntw.step()
            bl, nbl, bp = analyze_activity(data, params)
            sbl += bl
            snbl +=nbl
            sbp += bp
        sbl /= tests
        snbl /= tests
        sbp /= tests
        pool_burst_len.append(sbl)
        pool_noburst_len.append(snbl)
        pool_burst_percent.append(sbp)

    lims = [0, max(max(pool_burst_len), max(pool_noburst_len))]
    plt.xlabel("parameter " + str(id))
    plt.ylabel("burst period length")
    plt.ylim(lims)
    plt.plot(pool, pool_burst_len)
    plt.savefig("output/analyzer/id " + str(id) + " burst length" + ".png")
    plt.close()
    plt.xlabel("parameter " + str(id))
    plt.ylabel("interburst period length")
    plt.ylim(lims)
    plt.plot(pool, pool_noburst_len)
    plt.savefig("output/analyzer/id " + str(id) + " interburst length" + ".png")
    plt.close()
    plt.xlabel("parameter " + str(id))
    plt.ylabel("burst percent")
    plt.ylim([0, 1])
    plt.plot(pool, pool_burst_percent)
    plt.savefig("output/analyzer/id " + str(id) + " burst percent" + ".png")
    plt.close()
    output = "id {0}\nvalues: {1}\nburst length: {2}\ninterburst length: {3}\nburst percent {4}"\
        .format(id, pool, pool_burst_len, pool_noburst_len, pool_burst_percent)
    fs.write_file("output/analyzer/id " + str(id) + " testing results" + ".txt", output)