Esempio n. 1
0
def TabModels():
    """available_modelscales = ['cells', 'microcircuit', 'network']
    """
    def get_select_menu(menu_type, menu_list):
        if menu_type == "modelscales":
            title = "Modeling Scale Options"
        elif menu_type == "models":
            title = "Choose a model name"
        elif menu_type == "responses":
            title = "Choose a response (file)"
        return Select(title=title, value=menu_list[0][0], options=menu_list)

    def get_menu_modelscales():
        #NOTE: available_modelscale & scale_and_models are global variables
        menu = [("None", "None")]
        for modelscale in available_modelscales:
            # tag the modelscale as first element in the value = modellist
            modellist = ' '.join([modelscale] + scale_and_models[modelscale])
            menu.append(
                (modellist, modelscale))  # tuple (string of models, scale)
        return menu

    def get_menu_models(modellist):
        #NOTE: models_with_filenames is a global variable
        menu = [("None", "Below are available models")]
        if modellist[1] == "No_Models":  #modellist[0]=modelname
            menu[0] = (modellist[1], modellist[1].replace("_", " ")
                       )  #tuple (scale, string of models)
        else:
            for modelname in modellist[1:]:
                # tag modelscale & modelname as 1st-two elements in the value
                itsvalue = ' '.join([modellist[0], modelname])
                menu.append(
                    (itsvalue, modelname))  # tuple (string of models, scale)
        return menu

    def update_models_list(attr, old, new):
        if new == "No_Models":
            menu_list = [''.join(list(new))]  # ["No Models"]
        else:
            menu_list = new.split()
        models_select.options = get_menu_models(menu_list)
        runmodel.disabled = True
        #print new
        #print modelscales_select.value
        #print menu_list
        #print menu_list[0]

    def update_global_model(attr, old, new):
        menu_list = new.split()
        modelscale = menu_list[0]  # update global modelscale
        modelname = menu_list[1]  # update glocal modelname
        #print modelscale, modelname
        sys.path.append(pwd)  # uncomment only when using executiveViz
        chosenmodel = ExecutiveControl.choose_model(modelscale=str(modelscale),
                                                    modelname=str(modelname))
        modeltitle.text = chosenmodel.name
        modeldescr.text = chosenmodel.description
        modelregions.text = "Potential stimulation sites: " + str(
            chosenmodel.regions)
        runmodel.disabled = False

    def update_stimulation_parameters_input_status(attr, old, new):
        if new == "no":
            stim_type_input.disabled = True
            stim_list_input.disabled = True
            stim_loc_input.disabled = True
        else:
            stim_type_input.disabled = False
            stim_list_input.disabled = False
            stim_loc_input.disabled = False

    def clicked():
        print "clicked"

    def simulate():
        print "running"
        #if modelscales_select.value == "No_Models":
        #print modelscales_select.value
        #else:
        #print modelscales_select.value
        print pwd
        sys.path.append(pwd)  # uncomment only when using executiveViz
        ec = ExecutiveControl()
        modelscale = models_select.value.split()[0]
        modelname = models_select.value.split()[1]
        chosenmodel = ec.choose_model(modelscale=modelscale,
                                      modelname=modelname)
        parameters = ast.literal_eval(runtime_input.value)
        print parameters
        print stimulation.value
        if stimulation.value == "yes":
            stimparameters = ast.literal_eval(stim_type_input.value)
            stimparameters.update(
                {"stimlist": ast.literal_eval(stim_list_input.value)})
            ec.launch_model(parameters=parameters,
                            onmodel=chosenmodel,
                            stimparameters=stimparameters,
                            stimloc=stim_loc_input.value)
            #with Profiler() as prof, ResourceProfiler() as rprof:
            #    ec.launch_model ( parameters=parameters, onmodel=chosenmodel,
            #                      stimparameters=stimparameters, stimloc=stim_loc_input.value )
        else:
            ec.launch_model(parameters=parameters, onmodel=chosenmodel)
            #with Profiler() as prof, ResourceProfiler() as rprof:
            #    ec.launch_model( parameters=parameters, onmodel=chosenmodel )
            #myplot = visualize([prof, rprof])
        ec.save_response()
        print "done running"
        #viz_source.data['diagnostic'][0] = prof
        #viz_source.data['diagnostic'][1] = rprof
        #viz_source.data['diagnostic'] = [prof, rprof]
        #viz_source.data['diagnostic'][0].results[0] = prof.results[0]
        #myplot.data['diagplots'][0] = visualize([prof, rprof])

        #return visualize([prof, rprof])

    #
    ### +++++++++++++++++++GENERATE DATA FOR THE OPTIONS MENU++++++++++++++++++
    # available_modelscales -- list
    # scale_and_models -- dictionary with list as key value
    # models_with_filenames -- dictionary with list as key value
    # responses_with_filepaths -- dictionary with string as key value
    # Generate Model Info
    #os.chdir("..") # line required for calling ~/managers/bokehtest.py
    #available_modelscales = fm.available_modelscales()
    #os.chdir(rootwd) # for running it from ~/managers
    available_modelscales = ExecutiveControl.list_modelscales()
    scale_and_models = {}
    for modelscale in available_modelscales:  # get list of models in each scale
        try:
            #modelslist = fm.modelscale_inventory(model_scale=modelscale)
            modelslist = ExecutiveControl.list_models(modelscale=modelscale)
        except:
            modelslist = ["No_Models"]
        scale_and_models.update({modelscale: modelslist})
    #os.chdir(pwd) # for running it from ~/managers
    #print scale_and_models
    ### ++++++++++++++++++++END GENERATE DATA FOR THE OPTIONS++++++++++++++++++
    #
    modelscale = None
    modelname = None
    chosenmodel = None
    #
    menu = get_menu_modelscales()
    modelscales_select = get_select_menu("modelscales", menu)
    #
    dummy_model_menu = [('None', "First select a model scale")]
    models_select = get_select_menu("models", dummy_model_menu)
    #
    runtime_input = TextInput(
        value="{'dt': 0.1, 'celsius': 30, 'tstop': 10, 'v_init': 65}",
        title="Runtime Parameters:")
    #print runtime_input.value
    #print type(runtime_input.value)
    #
    stimulation_menu = [("No", "no"), None, ("Yes", "yes")]
    stimulation = Dropdown(label="Stimulation Yes/No",
                           button_type="warning",
                           menu=stimulation_menu)
    stim_type_input = TextInput(
        value="{'type': ['current', 'IClamp']}",
        title="Stimulation Parameters (Stimulation Type):")
    stim_list_input = TextInput(
        value="[{'amp': 0.5, 'dur': 10.0, 'delay': 5.0}, "
        " {'amp': 1.0, 'dur': 20.0, 'delay': 15.0}]",
        title="Stimulation Parameters (Stimuli):")
    stim_loc_input = TextInput(value='soma', title="Stimulation location:")
    # disable stimulation by DEFAULT
    stim_type_input.disabled = True
    stim_list_input.disabled = True
    stim_loc_input.disabled = True
    #
    runmodel = Button(label="Run Simulation", button_type="success")
    runmodel.disabled = True
    #
    modeltitle = Div(text="""No Model has been selected yet.""",
                     width=290,
                     height=40)
    modeldescr = Paragraph(text="""There is no Model Description.""",
                           width=290,
                           height=200)
    modelregions = Div(
        text="""Main Locations within the model for stimulation""",
        width=290,
        height=50)
    # disable the model texts by DEFAULT
    modeltitle.disabled = True
    modeldescr.disabled = True
    modelregions.disabled = True

    def viz():
        return visualize(viz_source.data['diagnostic'])

    # Put controls in a single element
    viz_source = ColumnDataSource(
        data={'diagnostic': [Profiler(), ResourceProfiler()]})
    myplot = viz()
    #diagplot = visualize( viz_source.data['diagnostic'] )
    #myplot = ColumnDataSource(data={'diagplots': [diagplot]})
    #myplot = ColumnDataSource(data={'diagplots': [visualize([Profiler(), ResourceProfiler()])]})

    # INTERACTION
    modelscales_select.on_change("value", update_models_list)
    models_select.on_change("value", update_global_model)
    #responses_select.on_change("value", update_plot)
    stimulation.on_change("value", update_stimulation_parameters_input_status)
    runmodel.on_click(simulate)

    # Create a row layout
    mylayout = row(
        WidgetBox(modelscales_select, models_select, runtime_input,
                  stimulation, stim_type_input, stim_list_input,
                  stim_loc_input, runmodel),
        WidgetBox(modeltitle, modeldescr, modelregions),
        #row(viz_source.data['diagnostic'][0].visualize()))
        #row(myplot.data['diagplots'][0]))
        row(myplot))
    # Make a tab with the layout
    tab = Panel(child=mylayout, title='Choose Model')

    return tab
Esempio n. 2
0

toggle_2d.on_change('active', show_2d_projection)

fov_input = TextInput(value='870', title='FOV (μm)')


def update_pixel_to_micron(attr, old, new):
    x_pixel_to_micron_input.value = str(calc_x_pixel_to_micron())
    y_pixel_to_micron_input.value = str(calc_y_pixel_to_micron())


fov_input.on_change('value', update_pixel_to_micron)

zoom_factor_input = TextInput(value=config['null'], title='Zoom Factor')
zoom_factor_input.disabled = True
image_shape_input = TextInput(value=config['null'], title='Image Shape')
image_shape_input.disabled = True
x_pixel_to_micron_input = TextInput(value=config['null'],
                                    title='Pixel to Micron (X)')
x_pixel_to_micron_input.disabled = True
y_pixel_to_micron_input = TextInput(value=config['null'],
                                    title='Pixel to Micron (Y)')
y_pixel_to_micron_input.disabled = True
line_rate_input = TextInput(value=config['null'], title='Line Rate (Hz)')
frame_rate_input = TextInput(value=config['null'], title='Frame Rate (Hz)')


def validate_numbers(widget, attr, old, new):
    try:
        float(new)
Esempio n. 3
0
from bokeh.models.widgets import Button, TextInput

m = DEDITECIF()
#m.zero_position()
global deg
deg = 2.5

# Buttons
zero_position = Button(label="reset to zero")
forward = Button(label="forward")
backward = Button(label="backward")
#stop_turning = Button(label="stop turning")

# TextInputs
position = TextInput(value=str(0), title="turntable position")
position.disabled = True
deg_step = TextInput(value=str(deg), title="deg step:")


# callbacks
def change_deg_step(attr, old, new):
    global deg
    deg = int(float(new))


deg_step.on_change("value", change_deg_step)


def back():
    global deg
    m.turn_back(deg)