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)
Esempio n. 3
0
    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()