Example #1
0
 def render(self):
     style0 = dict(position='absolute',
                   left='0px',
                   bottom='0px',
                   height='{}px'.format(self._height))
     divs = [vd.div(tab, style={'float': 'left'}) for tab in self._tabs]
     return vd.div(divs, style=style0)
Example #2
0
 def render(self):
     style_plot = {
         'position': 'relative',
         'border': 'solid 1px black',
         'background-color': 'white',
         'left': '10px',
         'bottom': '10px',
         'width': '{}px'.format(self._size_plot[0]),
         'height': '{}px'.format(self._size_plot[1])
     }
     style1 = {
         'width': '{}px'.format(self._size[0]),
         'height': '{}px'.format(self._size[1])
     }
     if self._selected:
         style1['background-color'] = 'rgb(240,240,200)'
         style1['border'] = 'solid 1px gray'
         if self._current:
             style1['background-color'] = 'rgb(220,220,180)'
     if self._current:
         style1['border'] = 'solid 2px rgb(150,50,50)'
     return vd.div(vd.p('Unit {}'.format(self._unit_id),
                        style={'text-align': 'center'}),
                   vd.div(self._plot, style=style_plot, size=()),
                   style=style1)
Example #3
0
 def render(self):
     if self._geometry is None:
         return vd.div('geometry not set')
     if self._spikes is None:
         return vd.div('spikes not set')
     div = vd.div(id=self._elmt_id)
     js = """
   function wait_for_ready(cb) {
     if ((window.d3)&&(window.Simplot)&&(window.SpikeforestWidgets)&&(document.getElementById('{elmt_id}'))) cb();
     else setTimeout(function() {wait_for_ready(cb);},10);
   }
   wait_for_ready(function() {
     let SpikeWaveformsWidget=window.SpikeforestWidgets.SpikeWaveformsWidget;
     let div=document.getElementById('{elmt_id}');
     $(div).empty();
     let W=new SpikeWaveformsWidget(div);
     W.setSize({width},{height});
     W.setGeometry(JSON.parse('{geom}'))
     let spikes=JSON.parse('{spikes}');
     for (let i=0; i<spikes.length; i++) {
       W.addSpike('spike-'+i,spikes[i]);
     }
     /*
     let geom=[[0.5,1],[1.5,1],[0,0],[1,0],[2,0],[0.5,-1],[1.5,-1]];
     W.setGeometry(geom);
     let num_channels=geom.length;
     let tmp1=[0,1,2,3,4,6,12,20,12,6,4,3,2,1,0];
     let tmp2=[0,1,2,3,4,6,12,5,12,6,4,3,2,1,0];
     let data=[tmp1,tmp2,tmp2,tmp2,tmp2,tmp2,tmp2,tmp2];
     let noise_level=5;
     let num_spikes=35;
     for (let i=0; i<num_spikes; i++) {
       let data0=[];
       for (let m=0; m<num_channels; m++) {
         data0.push(data[m].map(function(v) {return v+Math.random()*noise_level;}));
       }
       W.addSpike('spike-'+i,data0);
     }
     */
   });
 """
     js = js.replace('{elmt_id}', self._elmt_id)
     js = js.replace('{width}', '{}'.format(self._size[0]))
     js = js.replace('{height}', '{}'.format(self._size[1]))
     js = js.replace('{geom}', json.dumps(self._geometry))
     spikes = []
     for spike0 in self._spikes:
         a = []
         for m in range(spike0.shape[0]):
             a.append(spike0[m, :].tolist())
         spikes.append(a)
     js = js.replace('{spikes}', json.dumps(spikes))
     # def array_to_json(X):
     #  return json.dumps([str(v) for v in np.array(X).tolist()])
     # x0=array_to_json(self._x)
     # y0=array_to_json(self._y)
     # js=js.replace('{x}',x0)
     # js=js.replace('{y}',y0)
     vd.devel.loadJavascript(js=js, delay=0)
     return div
Example #4
0
 def render(self):
     style0 = {'border': 'solid 1px black', 'margin': '5px'}
     style1 = {}
     # if self._selected:
     #    style1['background-color']='yellow'
     return vd.div(vd.p('Title'),
                   vd.div(self._plot_div, style=style0),
                   style=style1)
Example #5
0
 def render(self):
     box_style = dict(float='left')
     boxes = [
         vd.div(W, id=self._uuid + '-{}'.format(i), style=box_style)
         for i, W in enumerate(self._widgets)
     ]
     div = vd.div(boxes, style=dict(overflow='auto', height='100%'))
     return div
Example #6
0
 def render(self):
     style0 = {'border': 'solid 1px black', 'margin': '5px'}
     style1 = {}
     if self._selected:
         style1['background-color'] = 'yellow'
     return vd.div(vd.p('Unit {}'.format(self._unit_id),
                        style={'text-align': 'center'}),
                   vd.div(self._plot_div, style=style0),
                   style=style1)
Example #7
0
 def render(self):
     if self._view:
         X = self._view
     else:
         X = vd.components.ScrollArea(
             vd.div(vd.h3('Preparing...'),
                    vd.pre(self._prepare_log_text_view)),
             height=self._size[1] - self._title_bar.height())
     return vd.div(self._title_bar, X)
Example #8
0
 def render(self):
     if self._unit_id is None:
         return vd.div(vd.h3('No current unit selected.'))
     if self._unit_detail_widget:
         return vd.div(self._unit_detail_widget)
     else:
         return vd.div(vd.h3('Initializing......'),
                       vd.pre(self._init_log_text),
                       style=dict(overflow='auto'))
Example #9
0
 def render(self):
     try:
         size = self._child.size()  # if it has the size method
     except:
         print('Warning: child of LazyDiv does not have a size() method')
         size = (300, 300)
     div_style = dict()
     div_style['width'] = '{}px'.format(size[0])
     div_style['height'] = '{}px'.format(size[1])
     if self._has_been_seen:
         return vd.div(self._child, style=div_style)
     else:
         callback_id = 'lazydiv-callback-' + str(uuid.uuid4())
         vd.register_callback(callback_id, self._on_visible)
         js = """
         function do_initialize(elmt) {
           var called=false;
           var io = new IntersectionObserver(
             entries => {
               if (entries[0].isIntersecting) {
                 if (!called) {
                   window.vdomr_invokeFunction('{callback_id}', [], {})
                   called=true;
                   io.disconnect();
                 }
               }
             },
             {
               // Using default options.
             }
           );
           io.observe(elmt);
         }
         var num_initialize_tries=0;
         function initialize() {
           num_initialize_tries=num_initialize_tries+1;
           var elmt=document.getElementById('{div_id}');
           if (elmt) {
             do_initialize(elmt);
           }
           else {
             if (num_initialize_tries>100) {
               console.warn('Problem initializing LazyDiv.');
               return;
             }
             setTimeout(function() {
               initialize();
             },500);
           }
         }
         initialize();
         """
         js = self._div_id.join(js.split('{div_id}'))
         js = callback_id.join(js.split('{callback_id}'))
         vd.devel.loadJavascript(js=js, delay=100)
         return vd.div('Loading...', id=self._div_id, style=div_style)
Example #10
0
 def render(self):
     if self._unit_table_widget:
         return vd.div(
             self._unit_table_widget
         )
     else:
         return vd.div(
             vd.h3('Initializing......'),
             style=dict(overflow='auto')
         )
Example #11
0
 def render(self):
     if self._job is None:
         return vd.div('No job')
     back_button = vd.button('Back to job list', onclick=self._on_back)
     console_out = None
     if 'result' in self._job:
         console_out = mt.loadText(
             path=self._job['result'].get('console_out', None))
     return vd.div(vd.div(back_button), vd.div(vd.pre(console_out or '')),
                   vd.div(vd.pre(json.dumps(self._job, indent=4))))
Example #12
0
 def render(self):
     if self._list_mode:
         refresh_list_button = vd.button('Refresh',
                                         onclick=self._on_refresh_list)
         return vd.div(vd.table(vd.tr(vd.td(refresh_list_button))),
                       vd.components.ScrollArea(self._batchlist_table,
                                                height=500),
                       style=dict(padding='15px'))
     else:
         # back_button=vd.button('Back to list',onclick=self._on_back_to_list)
         return vd.div(self._batch_view, style=dict(padding='15px'))
Example #13
0
 def render(self):
     style0 = {'border': 'solid 1px black', 'margin': '5px'}
     style1 = {}
     if self._selected:
         style1['background-color'] = 'yellow'
     if self._unit1_id == self._unit2_id:
         title0 = 'Unit {}'.format(self._unit1_id)
     else:
         title0 = '{} / {}'.format(self._unit1_id, self._unit2_id)
     return vd.div(vd.p(title0, style={'text-align': 'center'}),
                   vd.div(self._plot_div, style=style0),
                   style=style1)
Example #14
0
 def render(self):
     if self._batch_id is None:
         return vd.div('No batch id')
     if self._list_mode:
         refresh_button = vd.button('Refresh', onclick=self._on_refresh)
         back_button = vd.button('Back to batches', onclick=self._on_back)
         label = self._batch.get('label', 'nolabel')
         return vd.div(vd.div(self._batch_id + ' ' + label),
                       vd.div(refresh_button, back_button), self._job_table)
     else:
         # back_button=vd.button('Back to job list',onclick=self._on_back_to_list)
         return vd.div(self._job_view, style=dict(padding='15px'))
Example #15
0
    def render(self):
        if self._current_window:
            return vd.div(vd.a('home', onclick=self._on_home),
                          self._current_window)

        elmts = [
            vd.a(item['label'],
                 onclick=lambda item=item: self._open_item(item))
            for item in self._contents
        ]
        rows = [vd.tr(vd.td(elmt)) for elmt in elmts]
        table = vd.table(rows)
        return vd.div(table, style=dict(padding='30px'))
Example #16
0
 def render(self):
     style_outer = dict(width='100%', height='100%', position='absolute')
     style_content = dict(left='5px',
                          right='5px',
                          top='{}px'.format(5 + self._tab_bar.height()),
                          bottom='5px',
                          position='absolute')
     onclick = self._on_click
     return vd.div(self._highlight_box,
                   vd.div(self._content,
                          id='content-' + self.componentId(),
                          style=style_content),
                   self._tab_bar,
                   style=style_outer,
                   onclick=onclick)
Example #17
0
    def render(self):
        # row info for the table
        rr = []
        sdkeys = self._context.sorterDefinitionKeys()
        for sdkey in sdkeys:
            sdef = self._context.sorterDefinition(sdkey)
            rr.append(
                dict(label=sdkey, value=vd.pre(json.dumps(sdef, indent=4))))

        rows = []
        for r in rr:
            rows.append(vd.tr(vd.th(r['label']), vd.td(r['value'])))

        table = vd.table(rows,
                         style={
                             'text-align': 'left',
                             'width': 'auto',
                             'font-size': '13px'
                         },
                         class_='table')

        return vd.components.ScrollArea(
            vd.div(vd.h2('Sorter definitions for analysis: {}'.format(
                self._context.analysisName())),
                   table,
                   height=self._size[1]))
Example #18
0
    def __init__(self, group):
        vd.Component.__init__(self)

        self._group = group
        SF = sf.SFData()
        a = kb.loadObject(
            key=dict(name='spikeforest_batch_group', group_name=group))
        for recordings_name in a['recordings_names']:
            try:
                SF.loadRecordings(key=dict(name=recordings_name))
            except:
                raise
                print('Warning: unable to load recordings: ' + recordings_name)
            for batch_name in a['batch_names']:
                try:
                    SF.loadProcessingBatch(batch_name=batch_name)
                except:
                    print('Warning: unable to load processing batch: ' +
                          batch_name)
        self._SF_data = SF
        self._accuracy_threshold_input = vd.components.LineEdit(
            value=0.8, dtype=float, style=dict(width='70px'))
        self._update_button = vd.components.Button(onclick=self._on_update,
                                                   class_='button',
                                                   label='Update')
        self._study_sorter_fig = StudySorterFigure(SF)
        self._study_sorter_table = vd.div()  # dummy

        vd.devel.loadBootstrap()

        self._update_accuracy_table()
Example #19
0
 def render(self):
     list = [self._group_select_widget]
     if self._sf_browser:
         list.append(self._sf_browser)
     return vd.div(
         list
     )
Example #20
0
 def render(self):
     rows = []
     rows.append(
         vd.tr(vd.th('Unit ID'), vd.th('SNR'), vd.th('Peak channel'),
               vd.th('Num. events'), vd.th('Firing rate')))
     if self._true_units_info:
         for unit in self._true_units_info:
             rows.append(
                 vd.tr(vd.td(str(unit['unit_id'])), vd.td(str(unit['snr'])),
                       vd.td(str(unit['peak_channel'])),
                       vd.td(str(unit['num_events'])),
                       vd.td(str(unit['firing_rate']))))
     else:
         print('WARNING: true units info not found.')
     table = vd.table(rows, class_='table')
     return vd.div(ScrollArea(vd.div(table), height=400))
Example #21
0
 def render(self):
     if self._error_message:
         return vd.div(self._error_message)
     box_style = dict(float='left')
     boxes = [
         vd.div(W, style=box_style) for W in [
             self._true_unit_waveform_widget,
             self._sorted_unit_waveform_widget,
             self._unmatched_true_unit_waveform_widget,
             self._unmatched_sorted_unit_waveform_widget
         ]
     ]
     div = vd.div(
         vd.h3('True unit {}, Sorted unit {}'.format(
             self._true_unit_id, self._sorted_unit_id)), vd.div(boxes))
     return ScrollArea(div, size=self._size)
Example #22
0
 def render(self):
     button_style = {'margin': '3px'}
     buttons = [
         vd.button(item[0], onclick=item[1], style=button_style)
         for item in self._data
     ]
     return vd.div(buttons, style={'padding-bottom': '20px'})
Example #23
0
 def render(self):
     style = dict(overflow='auto')
     if self._width:
         style['width'] = '{}px'.format(self._width)
     if self._height:
         style['height'] = '{}px'.format(self._height)
     return vd.div(self._child, style=style)
Example #24
0
 def render(self):
     list = [self._select_widget]
     if self._explorer:
         list.append(self._explorer)
     return vd.div(
         list
     )
Example #25
0
 def render(self):
     print('rendering timeserieswidget...')
     div = vd.div(id=self._div_id)
     js = """
     console.log('testing 111');
     function _base64ToArrayBuffer(base64) {
         var binary_string =  window.atob(base64);
         var len = binary_string.length;
         var bytes = new Uint8Array( len );
         for (var i = 0; i < len; i++)        {
             bytes[i] = binary_string.charCodeAt(i);
         }
         return bytes.buffer;
     }
     let W=new window.TimeseriesWidget();
     //W.setTimeseriesModel(new window.TestTimeseriesModel());
     let X=_base64ToArrayBuffer(window.sfdata['array_b64_{div_id}']);
     let A=new window.Mda();
     A.setFromArrayBuffer(X);
     let TS=new window.TimeseriesModel(A);
     W.setTimeseriesModel(TS);
     W.setSize({width},{height})
     $('#{div_id}').empty();
     $('#{div_id}').css({width:'{width}px',height:'{height}px'})
     $('#{div_id}').append(W.element());
     """
     js = self._div_id.join(js.split('{div_id}'))
     js = js.replace('{width}', str(self._size[0]))
     js = js.replace('{height}', str(self._size[1]))
     js = '{}'.format(self._recording.getSamplingFrequency()).join(
         js.split('{samplerate}'))
     vd.devel.loadJavascript(js=js, delay=1)
     return div
Example #26
0
 def render(self):
     f = self._current_frame
     style0 = dict(width='100%', height='100%', position='absolute')
     style1 = dict(left='5px',
                   right='5px',
                   top='5px',
                   bottom='5px',
                   position='absolute')
     onclick = self._on_click
     if not f:
         style1['background-color'] = 'lightgray'
         f = ''
     return vd.div(self._highlight_box,
                   vd.div(f, style=style1),
                   self._tab_bar,
                   style=style0,
                   onclick=onclick)
Example #27
0
 def render(self):
     rows = []
     rows.append(
         vd.tr(vd.th('Unit ID'), vd.th('Accuracy'), vd.th('Best unit'),
               vd.th('Matched unit'), vd.th('Num. matches'),
               vd.th('False negative rate'), vd.th('False positive rate')))
     for ii in self._comparison_info:
         unit = self._comparison_info[ii]
         rows.append(
             vd.tr(vd.td(str(unit['unit_id'])),
                   vd.td(str(unit['accuracy'])),
                   vd.td(str(unit['best_unit'])),
                   vd.td(str(unit['matched_unit'])),
                   vd.td(str(unit['num_matches'])), vd.td(str(unit['f_n'])),
                   vd.td(str(unit['f_p']))))
     table = vd.table(rows, class_='table')
     return vd.div(ScrollArea(vd.div(table), height=400))
Example #28
0
 def render(self):
     style = self._style
     style['position'] = self._position_mode
     style['width'] = '{}px'.format(self._size[0])
     style['height'] = '{}px'.format(self._size[1])
     style['left'] = '{}px'.format(self._position[0])
     style['top'] = '{}px'.format(self._position[1])
     return vd.div(self._children, style=style)
Example #29
0
    def render(self):
        rec = self._context.recording
        res = self._context.sorting_result

        rows = []
        rows.append(vd.tr(vd.th('Study'), vd.td(rec.study().name())))
        rows.append(vd.tr(vd.th('Recording'), vd.td(rec.name())))
        rows.append(vd.tr(vd.th('Directory'), vd.td(rec.directory())))
        true_units = rec.trueUnitsInfo(format='json')
        rows.append(
            vd.tr(vd.th('Num. true units'),
                  vd.td('{}'.format(len(true_units)))))
        RX = rec.recordingExtractor()
        rows.append(
            vd.tr(vd.th('Num. channels'),
                  vd.td('{}'.format(len(RX.getChannelIds())))))
        rows.append(
            vd.tr(vd.th('Samplerate'),
                  vd.td('{}'.format(RX.getSamplingFrequency()))))

        recording_file_is_local = rec.recordingFileIsLocal()
        if recording_file_is_local:
            elmt = 'True'
        else:
            elmt = vd.span(
                'False', ' ',
                vd.a('(download)', onclick=self._on_download_recording_file))
        rows.append(vd.tr(vd.th('raw.mda is downloaded'), vd.td(elmt)))

        firings_true_file_is_local = rec.firingsTrueFileIsLocal()
        if firings_true_file_is_local:
            elmt = 'True'
        else:
            elmt = vd.span(
                'False', ' ',
                vd.a('(download)',
                     onclick=self._on_download_firings_true_file))
        rows.append(vd.tr(vd.th('firings_true.mda is downloaded'),
                          vd.td(elmt)))

        if res:
            rows.append(vd.tr(vd.th('Sorting result'),
                              vd.td(res.sorterName())))
            sorting = res.sorting()
            rows.append(
                vd.tr(vd.th('Num. sorted units'),
                      vd.td('{}'.format(len(sorting.getUnitIds())))))

        table = vd.table(rows,
                         style={
                             'text-align': 'left',
                             'width': 'auto',
                             'font-size': '13px'
                         },
                         class_='table')

        return ScrollArea(vd.div(table), size=self._size)
Example #30
0
 def render(self):
     rows = [
         vd.tr(vd.td('Select a group:'), vd.td(self._SEL_group)),
     ]
     select_table = vd.table(
         rows, style={'text-align': 'left', 'width': 'auto'}, class_='table')
     return vd.div(
         select_table
     )