def populate(self, experiments=None): self.items_by_pair_id = {} self.session = db.Session() if experiments is None: experiments = db.list_experiments(session=self.session) # preload all cells,pairs so they are not queried individually later on pairs = self.session.query(db.Pair, db.Experiment, db.Cell, db.Slice).join(db.Experiment, db.Pair.experiment_id==db.Experiment.id).join(db.Cell, db.Cell.id==db.Pair.pre_cell_id).join(db.Slice).all() experiments.sort(key=lambda e: e.acq_timestamp) for expt in experiments: date = expt.acq_timestamp date_str = datetime.fromtimestamp(date).strftime('%Y-%m-%d') slice = expt.slice expt_item = pg.TreeWidgetItem(map(str, [date_str, '%0.3f'%expt.acq_timestamp, expt.rig_name, slice.species, expt.target_region, slice.genotype, expt.acsf])) expt_item.expt = expt self.addTopLevelItem(expt_item) for pair in expt.pair_list: if pair.n_ex_test_spikes == 0 and pair.n_in_test_spikes == 0: continue cells = '%d => %d' % (pair.pre_cell.ext_id, pair.post_cell.ext_id) conn = {True:"syn", False:"-", None:"?"}[pair.synapse] types = 'L%s %s => L%s %s' % (pair.pre_cell.target_layer or "?", pair.pre_cell.cre_type, pair.post_cell.target_layer or "?", pair.post_cell.cre_type) pair_item = pg.TreeWidgetItem([cells, conn, types]) expt_item.addChild(pair_item) pair_item.pair = pair pair_item.expt = expt self.items_by_pair_id[pair.id] = pair_item # also allow select by ext id self.items_by_pair_id[(expt.acq_timestamp, pair.pre_cell.ext_id, pair.post_cell.ext_id)] = pair_item self.verticalScrollBar().setValue(self.verticalScrollBar().maximum())
def __init__(self): s = db.Session() self._signalHandler = SignalHandler() self.sigOutputChanged = self._signalHandler.sigOutputChanged self.pairs = None self.acsf = None projects = s.query(db.Experiment.project_name).distinct().all() project_list = [{'name': str(record[0]), 'type': 'bool'} for record in projects] acsf = s.query(db.Experiment.acsf).distinct().all() acsf_list = [{'name': str(record[0]), 'type': 'bool'} for record in acsf] internal = s.query(db.Experiment.internal).distinct().all() internal_list = [{'name': str(record[0]), 'type': 'bool'} for record in internal] self.params = Parameter.create(name='Data Filters', type='group', children=[ {'name': 'Projects', 'type': 'group', 'children':project_list}, {'name': 'ACSF', 'type': 'group', 'children':acsf_list, 'expanded': False}, {'name': 'Internal', 'type': 'group', 'children': internal_list, 'expanded': False}, ]) self.params.sigTreeStateChanged.connect(self.invalidate_output)
def __init__(self, expt_browser=None): if expt_browser is None: expt_browser = ExperimentBrowser() self.expt_browser = expt_browser expt_browser.itemSelectionChanged.connect(self.expt_selection_changed) self.session = db.Session() self.pair = None self.response_list = None self.corrected_response_list = None self._plot_items = [] self.params = pg.parametertree.Parameter( name="crosstalk removal", type="group", children=[ dict(name='data', type='group', children=[ dict(name='pre mode', type='list', values=['ic', 'vc']), dict(name='post mode', type='list', values=['ic', 'vc']), dict(name='limit', type='int', value=100), ]), dict(name='correction', type='group', children=[ dict(name='stimulus', type='bool', value=True, children=[ dict(name='auto', type='action'), dict(name='shift', type='int', value=0), dict(name='scale', type='float', value=30e3, dec=True, step=0.5), dict(name='lowpass', type='float', value=7e3, dec=True, step=0.5, suffix='Hz', siPrefix=True), ]), dict(name='charging', type='bool', value=True, children=[ dict(name='auto', type='action'), dict(name='capacitance', type='float', value=10e-12, suffix='F', dec=True, step=0.5, siPrefix=True), dict(name='resistance', type='float', value=10e6, suffix=u'Ω', dec=True, step=0.5, siPrefix=True), dict(name='scale', type='float', value=30e3, dec=True, step=0.5), dict(name='lowpass', type='float', value=7e3, dec=True, step=0.5, suffix='Hz', siPrefix=True), ]), dict(name='spike', type='bool', value=False, children=[ dict(name='scale', type='float', value=0.001, dec=True, step=0.5), dict(name='lowpass', type='float', value=10e3, dec=True, step=0.5, suffix='Hz', siPrefix=True), ]), dict(name='spike dv/dt', type='bool', value=True, children=[ dict(name='plot only', type='bool', value=False), dict(name='scale', type='float', value=0.03, dec=True, step=0.5), dict(name='lowpass', type='float', value=550., dec=True, step=0.5, suffix='Hz', siPrefix=True), ]), ]), dict(name='display', type='group', children=[ dict(name='limit', type='int', value=20), dict(name='plot spike aligned', type='bool', value=False), dict(name='plot dv/dt', type='bool', value=False), dict(name='plot lowpass', type='float', value=10e3, dec=True, step=0.5, suffix='Hz', siPrefix=True), ]) ]) self.ptree = pg.parametertree.ParameterTree() self.ptree.setParameters(self.params) self.params.child('data').sigTreeStateChanged.connect( self.data_filter_changed) self.params.child('correction').sigTreeStateChanged.connect( self.update_analysis) self.params.child('display').sigTreeStateChanged.connect( self.update_display) self.params.child('correction', 'stimulus', 'auto').sigActivated.connect(self.auto_stim_clicked) self.pw = pg.GraphicsLayoutWidget() self.plt1 = self.pw.addPlot(0, 0) self.plt2 = self.pw.addPlot(1, 0) self.plt3 = self.pw.addPlot(2, 0) self.plt2.setXLink(self.plt1) self.plt3.setXLink(self.plt1)
# should result in chronological order q = q.order_by(db.PulseResponse.id).all() return (q) # df = pandas.read_sql_query(q.statement, q.session.bind) # recs = df.to_records() # return recs #uid=1527020350.517 uid = 1483748888.290 pre_cell_id = 3 post_cell_id = 1 # query a pair session = db.Session() expt = db.experiment_from_timestamp(uid, session=session) pair = expt.pairs[(pre_cell_id, post_cell_id)] # get pulse ids from connection strength pulse_responses = get_single_pulse_data(session, pair) for pr in pulse_responses: if pr.id != 317966: continue print('pulse response id', pr.id) out = afpf.fit_single_first_pulse(pr, pair) if pr.clamp_mode == 'vc': plt.plot(out['vc_psp_data'], 'b') plt.plot(out['vc_psp_fit'], 'r') plt.show()