Exemplo n.º 1
0
 def run_once(self, job_dir, ** kwargs):
     
     from neuromllite.utils import print_v
     from neuromllite.utils import load_simulation_json,load_network_json
     from neuromllite.NetworkGenerator import generate_and_run
     from pyneuroml.pynml import get_value_in_si
     
     print_v('Running NeuroMLlite simulation in dir: %s...'%job_dir)
     sim = load_simulation_json(self.nmllite_sim)
     import random
     sim.id = '%s%s'%(sim.id, '_%s'%kwargs['reference'] if 'reference' in kwargs else '')
     network = load_network_json(self.base_dir+'/'+sim.network)
     
     for a in kwargs:
         if a in network.parameters:
             print_v('  Setting %s to %s in network...'%(a, kwargs[a]))
             network.parameters[a] = kwargs[a]
         elif a in sim.fields:
             print_v('  Setting %s to %s in simulator...'%(a, kwargs[a]))
             setattr(sim,a,kwargs[a])
         else:
             print_v('  Cannot set parameter %s to %s in network or simulator...'%(a, kwargs[a]))
             
     traces, events = generate_and_run(sim, 
                                       simulator = self.simulator, 
                                       network = network, 
                                       return_results = True,
                                       base_dir = self.base_dir,
                                       target_dir = job_dir)
                                       
                                       
     print_v("Returned traces: %s, events: %s"%(traces.keys(), events.keys()))
     
     return traces, events 
Exemplo n.º 2
0
    def __init__(self,
                 runner,
                 vary,
                 fixed={},
                 verbose=False,
                 num_parallel_runs=1,
                 plot_all=False,
                 save_plot_all_to=None,
                 heatmap_all=False,
                 save_heatmap_to=None,
                 heatmap_lims=None,
                 show_plot_already=False,
                 peak_threshold=0):

        self.sim = load_simulation_json(runner.nmllite_sim)

        self.colormap = 'jet'

        ps_id = 'ParamSweep_%s_%s' % (self.sim.id, time.ctime().replace(
            ' ', '_').replace(':', '.'))

        print_v(
            "Initialising ParameterSweep %s with %s, %s (%i parallel runs)" %
            (ps_id, vary, fixed, num_parallel_runs))

        os.mkdir(ps_id)
        self.result_dir = os.path.abspath(ps_id)

        self.runner = runner
        self.fixed = fixed
        self.vary = vary
        self.verbose = verbose
        self.num_parallel_runs = num_parallel_runs

        self.plot_all = plot_all
        self.save_plot_all_to = save_plot_all_to
        self.heatmap_all = heatmap_all
        self.save_heatmap_to = save_heatmap_to
        self.heatmap_lims = heatmap_lims
        self.show_plot_already = show_plot_already

        self.index = 0
        self.total_todo = 1
        self.report = OrderedDict()
        self.report['Varied parameters'] = vary
        self.report['Fixed parameters'] = fixed
        self.report['Simulations'] = OrderedDict()
        for v in vary:
            self.total_todo *= len(vary[v])

        self.analysis_var = {
            'peak_delta': 0,
            'baseline': 0,
            'dvdt_threshold': 0,
            'peak_threshold': peak_threshold
        }

        if self.plot_all:
            self.ax = pynml.generate_plot(
                [],
                [],  # Add 2 sets of y values
                "Traces generated from %s" % self.sim.id,  # Title
                labels=[],
                xaxis='Time (ms)',  # x axis legend
                yaxis='Membrane potential (mV)',  # y axis legend
                title_above_plot=True,
                show_plot_already=False)  # Save figure

        if self.heatmap_all:
            if len(self.vary) != 1:
                raise Exception(
                    'Heatmap can only be used when only one parameter is varied...'
                )
            self.hm_x = None
            self.hm_y = []
            self.hm_z = []
Exemplo n.º 3
0
    def __init__(self, nml_sim_file, parent=None):
        """Constructor for the GUI"""
        
        super(NMLliteUI, self).__init__(parent)
        
        self.SPIKES_RASTERPLOT = "Rasterplot"
        self.SPIKES_POP_RATE_AVE = "Pop rate averages"
        
        #print('Styles available: %s'%QStyleFactory.keys())
        QApplication.setStyle(QStyleFactory.create('Fusion'))
        
        header_font = QFont()
        header_font.setBold(True)
        
        self.backup_colors = {} # to ensure consistent random colors for traces... 
        
        self.simulation = load_simulation_json(nml_sim_file)
        self.sim_base_dir = dirname(nml_sim_file)
        if len(self.sim_base_dir) == 0:
            self.sim_base_dir = '.' 
        
        self.network = load_network_json('%s/%s' % (self.sim_base_dir, self.simulation.network))

        nameLabel = QLabel("NMLlite file: %s" % realpath(nml_sim_file))
        nameLabel.setFont(header_font)
        
        paramLayout = QGridLayout()
        topLayout = QGridLayout()
        midLayout = QGridLayout()
        
        self.tabs = QTabWidget()
        self.nmlliteTab = QWidget()
        self.nml2Tab = QWidget()
        self.matrixTab = QWidget()
        
        self.tabs.resize(300, 200)
        
        # Add tabs
        self.simTab = QWidget()
        self.tabs.addTab(self.simTab, "Simulation")
        
        self.simTabLayout = QGridLayout()
        self.simTab.setLayout(self.simTabLayout)
        
        self.plotTabs = QTabWidget()
        
        self.tracesTab = QWidget()
        self.plotTabs.addTab(self.tracesTab, "Traces")
        self.heatmapTab = QWidget()
        self.plotTabs.addTab(self.heatmapTab, "Heatmap")
        
        if self.simulation.plots2D is not None:
            
            self.plot2DTab = QTabWidget()
            self.plotTabs.addTab(self.plot2DTab, "2D plots")

            self.plot2DTabLayout = QGridLayout()
            self.plot2DTab.setLayout(self.plot2DTabLayout)
        
            for plot2D in self.simulation.plots2D:
                info = self.simulation.plots2D[plot2D]
                pLayout = self.add_tab(plot2D, self.plot2DTab, figure=True, toolbar=True, options=True)
        
        if self.simulation.plots3D is not None:
            
            self.plot3DTab = QTabWidget()
            self.plotTabs.addTab(self.plot3DTab, "3D plots")

            self.plot3DTabLayout = QGridLayout()
            self.plot3DTab.setLayout(self.plot3DTabLayout)
        
            for plot3D in self.simulation.plots3D:
                info = self.simulation.plots3D[plot3D]
                pLayout = self.add_tab(plot3D, self.plot3DTab, figure=True, toolbar=False, options=True)
                
        
        offset_opt = 1
        rasterOptionsLayout = self.add_tab(self.SPIKES_RASTERPLOT,self.plotTabs, figure=True, toolbar=True, options=True)
        self.rasterLegend = QCheckBox("Show legend")
        self.rasterLegend.setChecked(True)
        rasterOptionsLayout.addWidget(self.rasterLegend, 0, 0+offset_opt)
        self.rasterLegend.toggled.connect(self.replotSimResults)
        self.rasterInPops = QCheckBox("Include input pops")
        self.rasterInPops.setChecked(True)
        rasterOptionsLayout.addWidget(self.rasterInPops, 0, 1+offset_opt)
        self.rasterInPops.toggled.connect(self.replotSimResults)
        
        spikeStatOptionsLayout = self.add_tab(self.SPIKES_POP_RATE_AVE,self.plotTabs, figure=True, toolbar=True, options=True)
        self.spikeStatInPops = QCheckBox("Include input pops")
        self.spikeStatInPops.setChecked(True)
        spikeStatOptionsLayout.addWidget(self.spikeStatInPops, 0, 0+offset_opt)
        self.spikeStatInPops.toggled.connect(self.replotSimResults)
        
        self.simTabLayout.addWidget(self.plotTabs)
        
        self.tracesTabTopLayout = QGridLayout()
        self.tracesTab.setLayout(self.tracesTabTopLayout)
        
        self.tracesTabOptionsLayout = QGridLayout()
        self.tracesTabTopLayout.addLayout(self.tracesTabOptionsLayout, 0, 0)
        
        self.showTracesLegend = QCheckBox("Legend")
        self.tracesTabOptionsLayout.addWidget(self.showTracesLegend, 0, 0)
        
        self.traceSelectButton = QPushButton("Select traces...")
        self.traceSelectButton.show()
        self.traceSelectButton.setEnabled(False)
        
        self.traceSelectButton.clicked.connect(self.traceSelect)
        self.tracesTabOptionsLayout.addWidget(self.traceSelectButton, 0, 1)
        
        self.tracesTabLayout = QGridLayout()
        self.tracesTabTopLayout.addLayout(self.tracesTabLayout, 1, 0)
        
        self.heatmapLayout = QGridLayout()
        self.heatmapTab.setLayout(self.heatmapLayout)
        self.heatmapColorbar = None
        
        self.tracesFigure = Figure()
        self.tracesCanvas = FigureCanvas(self.tracesFigure)
        self.tracesToolbar = NavigationToolbar(self.tracesCanvas, self)
        self.tracesTabLayout.addWidget(self.tracesCanvas)
        self.tracesTabLayout.addWidget(self.tracesToolbar)
        
        self.heatmapFigure = Figure()
        self.heatmapCanvas = FigureCanvas(self.heatmapFigure)
        self.heatmapLayout.addWidget(self.heatmapCanvas)
        
        
        self.add_tab(self.GRAPH_TAB, self.tabs, image=True, options = True)
        
        graphTabOptionsLayout = self.all_options_layouts[self.GRAPH_TAB]
        
        offset_opt = 4
        graphTabOptionsLayout.addWidget(QLabel("Graph level:"), 0, offset_opt+0)
        
        self.graphLevelComboBox = QComboBox(self)
        self.graphLevelComboBox.addItem('-3')
        self.graphLevelComboBox.addItem('-2')
        self.graphLevelComboBox.addItem('-1')
        self.graphLevelComboBox.addItem('0')
        self.graphLevelComboBox.addItem('1')
        self.graphLevelComboBox.addItem('2')
        self.graphLevelComboBox.addItem('3')
        self.graphLevelComboBox.addItem('4')
        self.graphLevelComboBox.addItem('5')
        self.graphLevelComboBox.addItem('6')
        self.graphLevelComboBox.setCurrentIndex(6)
        graphTabOptionsLayout.addWidget(self.graphLevelComboBox, 0, offset_opt+1)
        self.graphLevelComboBox.currentIndexChanged.connect(self.showGraph)
        
        self.graphTypeComboBox = QComboBox(self)
        self.graphTypeComboBox.addItem('d - dot')
        self.graphTypeComboBox.addItem('c - circo')
        self.graphTypeComboBox.addItem('n - neato')
        self.graphTypeComboBox.addItem('f - fdp')
        self.graphTypeComboBox.setCurrentIndex(0)
        graphTabOptionsLayout.addWidget(QLabel("GraphViz engine:"), 0, offset_opt+2)
        graphTabOptionsLayout.addWidget(self.graphTypeComboBox, 0, offset_opt+3)
        self.graphTypeComboBox.currentIndexChanged.connect(self.showGraph)
        
        
        self.graphShowExtInputs = QCheckBox("Show ext inputs")
        self.graphShowExtInputs.setChecked(True)
        graphTabOptionsLayout.addWidget(self.graphShowExtInputs, 0, offset_opt+4)
        self.graphShowExtInputs.toggled.connect(self.showGraph)
        
        self.graphShowInputPops = QCheckBox("Show input pops")
        self.graphShowInputPops.setChecked(True)
        graphTabOptionsLayout.addWidget(self.graphShowInputPops, 0, offset_opt+5)
        self.graphShowInputPops.toggled.connect(self.showGraph)
        
        
        self.add_tab(self.LEMS_VIEW_TAB, self.tabs, image=True, options = True)
        
        self.add_tab(self.IMAGE_3D_TAB, self.tabs, image=True, options = True)        
        
        self.tabs.addTab(self.matrixTab, "Matrix")
        self.matrixTabLayout = QGridLayout()
        self.matrixTab.setLayout(self.matrixTabLayout)
        
        
        # Add tabs
        self.tabs.addTab(self.nmlliteTab, "NeuroMLlite")
        
        self.nmlliteTabLayout = QGridLayout()
        self.nmlliteTab.setLayout(self.nmlliteTabLayout)
        
        self.nmlliteTabs = QTabWidget()
        self.nmlliteTabLayout.addWidget(self.nmlliteTabs)
        
        self.nmlliteSimTab = QWidget()
        self.nmlliteTabs.addTab(self.nmlliteSimTab, "Simulation")
        self.nmlliteSimTabLayout = QGridLayout()
        self.nmlliteSimTab.setLayout(self.nmlliteSimTabLayout)
        self.nmlliteSimText = QPlainTextEdit()
        self.nmlliteSimTabLayout.addWidget(self.nmlliteSimText,0,0)
        
        self.nmlliteNetTab = QWidget()
        self.nmlliteTabs.addTab(self.nmlliteNetTab, "Network")
        self.nmlliteNetTabLayout = QGridLayout()
        self.nmlliteNetTab.setLayout(self.nmlliteNetTabLayout)
        self.nmlliteNetText = QPlainTextEdit()
        self.nmlliteNetTabLayout.addWidget(self.nmlliteNetText,0,0)
        
        
        self.tabs.addTab(self.nml2Tab, "NeuroML 2")
        self.nml2Layout = QGridLayout()
        self.nml2Tab.setLayout(self.nml2Layout)
        self.nml2Text = QPlainTextEdit()
        self.nml2Text.insertPlainText("\n   Generate an instance of the populations and projections in this network in NeuroML 2"+
                                      "\n   format by pressing the Generate NeuroML 2 button on the left"+
                                      "\n\n\n   WARNING: depending on the size of the generated network, text may take some time to load!")
        self.nml2Layout.addWidget(self.nml2Text,0,0)
        
        
        # Add tabs to widget
        midLayout.addWidget(self.tabs, 0, 0)
        mainLayout = QGridLayout()

        topLayout.addWidget(nameLabel, 0, 0)
        #topLayout.addWidget(self.nameLine, 0, 1)
        
        rows = 0
        
        l = QLabel("Network parameters")
        l.setFont(header_font)
        paramLayout.addWidget(l, rows, 0)
        
        self.param_entries = {}

        if self.network.parameters is not None and len(self.network.parameters) > 0:
            for p in sorted(self.network.parameters.keys()):
                rows += 1
                pval = self.network.parameters[p]
                label = QLabel("%s" % p)
                paramLayout.addWidget(label, rows, 0)
                entry = self.get_value_entry(p, pval, self.param_entries)
                paramLayout.addWidget(entry, rows, 1)
        
        if self.network.seed is not None:
            rows += 1
            pval = self.network.seed
            label = QLabel('Net generation seed')
            paramLayout.addWidget(label, rows, 0)
            entry = self.get_value_entry('seed', pval, self.param_entries)
            paramLayout.addWidget(entry, rows, 1)
            
        if self.network.temperature is not None:
            rows += 1
            pval = self.network.temperature
            label = QLabel('Temperature')
            paramLayout.addWidget(label, rows, 0)
            entry = self.get_value_entry('temperature', pval, self.param_entries)
            paramLayout.addWidget(entry, rows, 1)
            
                
                
        self.graphButton = QPushButton("Generate graph")
        self.graphButton.show()
        self.graphButton.clicked.connect(self.showGraph)
        
        rows += 1
        paramLayout.addWidget(self.graphButton, rows, 0)
                
        self.lemsViewButton = QPushButton("Generate LEMS View")
        self.lemsViewButton.show()
        self.lemsViewButton.clicked.connect(self.showLemsView)
        
        rows += 1
        paramLayout.addWidget(self.lemsViewButton, rows, 0)
                
        self.image3DButton = QPushButton("Generate 3D image")
        self.image3DButton.show()
        self.image3DButton.clicked.connect(self.show3Dimage)
        
        rows += 1
        paramLayout.addWidget(self.image3DButton, rows, 0)
                
        self.matrixButton = QPushButton("Generate matrix")
        self.matrixButton.show()
        self.matrixButton.clicked.connect(self.showMatrix)
        
        rows += 1
        paramLayout.addWidget(self.matrixButton, rows, 0)
                
        self.nml2Button = QPushButton("Generate NeuroML 2")
        self.nml2Button.show()
        self.nml2Button.clicked.connect(self.generateNeuroML2)
        
        rows += 1
        paramLayout.addWidget(self.nml2Button, rows, 0)
                
        rows += 1
        l = QLabel("Simulation parameters")
        l.setFont(header_font)
        paramLayout.addWidget(l, rows, 0)

        self.sim_entries = {}
        svars = ['dt', 'duration', 'seed']

        for s in svars:
            rows += 1
            sval = self.simulation.__getattr__(s)
            if sval is not None:
                label = QLabel("%s" % s)
                paramLayout.addWidget(label, rows, 0)
                
                
                entry = self.get_value_entry(s, sval, self.sim_entries)
                paramLayout.addWidget(entry, rows, 1)

        rows += 1
        
        paramLayout.addWidget(QLabel("Simulator:"), rows, 0)
        
        self.simulatorComboBox = QComboBox(self)
        for sim in self.simulators:
            self.simulatorComboBox.addItem(sim)
        
        paramLayout.addWidget(self.simulatorComboBox, rows, 1)
        rows += 1

        self.runButton = QPushButton("Run simulation")
        self.runButton.show()
        self.runButton.clicked.connect(self.runSimulation)
        
        self.autoRunCheckBox = QCheckBox("Auto run")
        rows += 1
        paramLayout.addWidget(self.runButton, rows, 0)
        paramLayout.addWidget(self.autoRunCheckBox, rows, 1)
        
        
        mainLayout.addLayout(topLayout, 0, 1)
        mainLayout.addLayout(paramLayout, 1, 0)
        mainLayout.addLayout(midLayout, 1, 1)
        
        #self.setLayout(paramLayout)
        self.setLayout(mainLayout)
        
        self.setWindowTitle("NeuroMLlite GUI")
        
        self.update_network_json()
        self.update_simulation_json()