示例#1
0
文件: IO.py 项目: nico202/pyNeMo
def ImageFromSpikes(input_spikes,
                    file_path="./latest.png",
                    show=True,
                    save=True,
                    xmin=False,
                    xmax=False):
    '''Input: get converted to:
    spikes = list of lists (neurons) of ms
    ie. [[1, 3, 5], [2, 4, 5]] # 2 neurons, 3 spikes/neuron, ms 1, 3...
    '''
    global sp
    from plugins.importer import spikesDictToArray

    spikes = spikesDictToArray(input_spikes)
    if xmax or xmin: #TODO: Use numpy (faster) v1.0
        new_spikes = []
        for i in spikes:
            i = [l for l in i if l < xmax and l > xmin]
            new_spikes.append(i)
        spikes = new_spikes

    if save:
        cprint("\t*\tSaving image to %s" % file_path, 'info')
    sp.set_fig_name(file_path)
    sp.set_figsize((24, 18))
    sp.set_linestyle('-')
    sp.set_markerscale(0.8)
    sp.plot_spikes(spikes, draw=show, savefig=save)
#    del sp #fixes memory leak? Seems not
    del spikes
    del input_spikes
    # Debug code
    # from subprocess import call
    # call(["feh", file_path])
    return True
示例#2
0
文件: Runner.py 项目: nico202/pyNeMo
                , save=args.save_spikes
            )
        if args.show_membrane:
            ImageIO.ImageFromMembranes(output["NeMo"][0])
        if args.angle_images:
            ImageIO.ImageFromAngles(
                (output["YARP"]["read"],
                 output["YARP"]["wrote"]), #FIXME: should be pyspike
                file_path=output_dir + "/" + uniqueId + "_angles.png")

#Analysis:
if args.analyze_spikes_frequency: #TODO: write all conditions etc
    from plugins.analysis import spikes
    from plugins.importer import spikesDictToArray
    neuron_number = 0
    for i in spikesDictToArray(output["NeMo"][1]):
#        print "ANALYSIS not working yet"
        #Fixme: changed function names, doesn't match anymore
        freq = spikes.getFreq(spikes.neuronSpikesToSquare(i, split_range=(5000, 30000)))
        duty_cycle = float(freq[1]) / (freq[0] + freq[1])
        # for on, p in enumerate(freq[3]):
        #     for l in p.items():
        #         f.write("%s,%s,%s\n" % (l[0], l[1], on))

        if freq:
            print ("Neuron: %s, duty cycle: %f, osc-freq: %f"
                   %
                   (neuron_number, duty_cycle, 1000./(freq[0] + freq[1])))
        neuron_number += 1

print "All done, thanks!"
示例#3
0
def main_loop(outputs, master_ip = False, in_data = False, split_range = (False, False)):
    from plugins.analysis import spikes
    from plugins.importer import spikesDictToArray
    #???? Depends on kind of analysis, what to do??
    neurons_to_analyze = [4, 5] #FIXME: read from cli
    #TODO: add loop count
    idx = 0
    total = len(outputs)
    for f in outputs:
        if not master_ip: #Locale, read file
            data, input_conf = read_output(f, args.path, idx, total)
        else: #Already read file from host
            data, input_conf = in_data[idx][0], in_data[idx][1]
        idx += 1
        if not data:
            continue

        # FIXME: re-enable when dispatch works
        # if args.save_images:
        #     cprint("Saving image",'info')
        #     ImageIO.ImageFromSpikes(
        #         data["NeMo"][1]
        #         , file_path = "./latest.png" #FIXME: set wright path
        #         , save = True
        #         , show = False #Quite useless if True, right?
        #     )
        #     if args.images_only:
        #         continue

        neuron_number = 0
        neurons_info = {}
        all_neurons_spikes_list = spikesDictToArray(data["NeMo"][1])
        if len(all_neurons_spikes_list) < max(neurons_to_analyze) -1:
            neurons_info={}
            for n in neurons_to_analyze:
                neurons_info[n] = {}
                neurons_info[n]["on_time"] = 0
                neurons_info[n]["off_time"] = 0
                neurons_info[n]["mode"] = 3 #Dead neuron
                neurons_info[n]["not_burst_freq"] = 0
                neurons_info[n]["burst_freq"] = 0
        else:
            for i in all_neurons_spikes_list:
                #What's the pythonic way to do this?
                if neuron_number not in neurons_to_analyze:
                    neuron_number +=1 
                    continue

                raw, thresholded = spikes.neuronSpikesToSquare(
                    i,
                    data["ran_steps"],
                    split_range=split_range)
                
                off_time, on_time, osc, periods = spikes.getFreq(
                    (raw, thresholded), data["ran_steps"])
                not_burst_freq, burst_freq = spikes.getBurstFreq(raw, thresholded)
                                
                if not osc: #Not oscillating
                    state = max(off_time, on_time)
                    if state == off_time:
                        mode = 0 #Neuron is stable OFF
                    else:
                        mode = 2 #Neuron is stable ON
                else: #Neuron IS oscillating
                    mode = 1 #Neuron is both ON and OFF
                neurons_info[neuron_number] = {}
                neurons_info[neuron_number]["on_time"] = on_time
                neurons_info[neuron_number]["off_time"] = off_time
                neurons_info[neuron_number]["mode"] = mode
                neurons_info[neuron_number]["not_burst_freq"] = not_burst_freq
                neurons_info[neuron_number]["burst_freq"] = burst_freq
                neuron_number += 1

        to_write = return_analysis_output(f,
                                          neurons_info,
                                          input_conf,
                                          data["ran_steps"])

        general_config, config_hash = f.split("_")[0:2]
        with open("ANALYSIS_period.csv", 'a') as filewriter:
            for on, p in enumerate(periods):
                for l in p.items():
                    filewriter.write("%s,%s,%s,%s,%s\n" % (
                        general_config, config_hash,
                        l[0], l[1], on))

        if not master_ip:
            #        is_folder("analysis") TODO: better dir organization
            save = open("ANALYSIS.csv", 'a')#We could open this before
            save.write(to_write)
            save.close() #And close it after, to speed up
        else:
            response_request(to_write, master_ip, "10665")