Exemplo n.º 1
0
 def get_expts(self):
     expt_query = db.query(db.Experiment)
     synapse_none = self.data_type['Synapse is None']
     if synapse_none:
         subquery = db.query(db.Pair.experiment_id).filter(
             db.Pair.has_synapse == None).subquery()
         expt_query = expt_query.filter(db.Experiment.id.in_(subquery))
     selected_rigs = [
         rig.name() for rig in self.rig_select.children()
         if rig.value() is True
     ]
     if len(selected_rigs) != 0:
         expt_query = expt_query.filter(
             db.Experiment.rig_name.in_(selected_rigs))
     selected_operators = [
         operator.name() for operator in self.operator_select.children()
         if operator.value() is True
     ]
     if len(selected_operators) != 0:
         expt_query = expt_query.filter(
             db.Experiment.operator_name.in_(selected_operators))
     selected_hashtags = [
         ht.name() for ht in self.hash_select.children()[1:]
         if ht.value() is True
     ]
     if len(selected_hashtags) != 0:
         timestamps = self.get_expts_hashtag(selected_hashtags)
         expt_query = expt_query.filter(
             db.Experiment.ext_id.in_(timestamps))
     expts = expt_query.all()
     self.set_expts(expts)
Exemplo n.º 2
0
    def n_test_spikes(pair):
        syn_type = pair.pre_cell.cell_class_nonsynaptic
        if syn_type not in ['ex', 'in']:
            return np.nan

        p = db.query(db.Pair).filter(db.Pair.id == pair.id).all()[0]
        n_spikes = getattr(p, 'n_%s_test_spikes' % syn_type)
        n_spikes = n_spikes if n_spikes <= 800 else 800
        return n_spikes
Exemplo n.º 3
0
 def baseline_rms_noise(pair):
     post_cell = pair.post_cell
     q = db.query(db.PatchClampRecording)
     q = q.join(db.Recording).join(db.Electrode).join(db.Cell)
     q = q.filter(db.Cell.id == post_cell.id).filter(
         db.PatchClampRecording.clamp_mode == 'ic')
     pcrs = q.all()
     pcr_noise = [pcr.baseline_rms_noise for pcr in pcrs if pcr.qc_pass]
     if len(pcr_noise) > 1:
         return np.mean(pcr_noise)
     else:
         return np.nan
Exemplo n.º 4
0
    def scatter_plot_clicked(self, plt, points):
        for plt in self.data_plots + self.dec_plots + self.spike_plots:
            plt.clear()

        # query raw data for selected points
        ids = [int(pt.data()['pulse_response_id']) for pt in points]

        q = db.query(db.PulseResponse, db.PulseResponse.data,
                     db.PulseResponseFit).outerjoin(
                         db.PulseResponseFit).filter(
                             db.PulseResponse.id.in_(ids))
        recs = q.all()

        print("Selected pulse responses:")
        for rec in recs:
            print(rec.PulseResponse.id, rec.PulseResponse.meta)
            self._plot_pulse_response(rec)

        self.scatter_plot.setSelectedPoints(points)
Exemplo n.º 5
0
    def load_pair(self, pair):
        if pair is not self.loaded_pair:
            print("Loading:", pair)
            self.loaded_pair = pair

            # Load data for scatter plot
            cols = [
                spec['column'].label(name)
                for name, spec in self.fields.items()
            ]
            q = db.query(*cols)
            q = q.outerjoin(
                db.PulseResponseFit,
                db.PulseResponseFit.pulse_response_id == db.PulseResponse.id)
            q = q.outerjoin(
                db.PulseResponseStrength,
                db.PulseResponseStrength.pulse_response_id ==
                db.PulseResponse.id)
            q = q.join(db.StimPulse, db.PulseResponse.stim_pulse)
            q = q.join(db.Recording,
                       db.PulseResponse.recording_id == db.Recording.id)
            q = q.join(db.PatchClampRecording,
                       db.PatchClampRecording.recording_id == db.Recording.id)
            q = q.join(db.MultiPatchProbe)
            q = q.filter(db.PulseResponse.pair_id == pair.id)
            recs = q.all()
            print("loaded %d/%s pulse responses" %
                  (len(recs), len(pair.pulse_responses)))
            self.loaded_recs = recs

            data = np.empty(len(recs), dtype=self.dtype)
            for i, rec in enumerate(recs):
                for name, spec in self.dtype:
                    data[i][name] = getattr(rec, name)
            self.loaded_data = data

            self.scatter_plot.setData(data)
Exemplo n.º 6
0
    def __init__(self, default_session, notes_session):
        pg.QtGui.QWidget.__init__(self)
        self.default_session = default_session
        self.notes_session = notes_session
        self.layout = pg.QtGui.QGridLayout()
        self.setLayout(self.layout)
        self.h_splitter = pg.QtGui.QSplitter()
        self.h_splitter.setOrientation(pg.QtCore.Qt.Horizontal)
        self.pair_analyzer = PairAnalysis()
        self.fit_explorer = None
        self.ctrl_panel = self.pair_analyzer.ctrl_panel
        self.user_params = self.ctrl_panel.user_params
        self.output_params = self.ctrl_panel.output_params
        self.ptree = ptree.ParameterTree(showHeader=False)
        self.pair_param = Parameter.create(name='Current Pair', type='str', readonly=True)
        self.ptree.addParameters(self.pair_param)
        self.ptree.addParameters(self.user_params, showTop=False)
        self.fit_ptree = ptree.ParameterTree(showHeader=False)
        self.fit_ptree.addParameters(self.output_params, showTop=False)
        self.save_btn = pg.FeedbackButton('Save Analysis')
        self.expt_btn = pg.QtGui.QPushButton('Set Experiments')
        self.fit_btn = pg.QtGui.QPushButton('Fit Responses')
        self.ic_plot = self.pair_analyzer.ic_plot
        self.vc_plot = self.pair_analyzer.vc_plot
        self.select_ptree = ptree.ParameterTree(showHeader=False)
        self.hash_select = Parameter.create(name='Hashtags', type='group', children=
            [{'name': 'With multiple selected:', 'type': 'list', 'values': ['Include if any appear', 'Include if all appear'], 'value': 'Include if any appear'}]+
            [{'name': '#', 'type': 'bool'}] +
            [{'name': ht, 'type': 'bool'} for ht in comment_hashtag[1:]])
        self.rigs = db.query(db.Experiment.rig_name).distinct().all()
        self.operators = db.query(db.Experiment.operator_name).distinct().all()
        self.rig_select = Parameter.create(name='Rig', type='group', children=[{'name': rig[0], 'type': 'bool'} for rig in self.rigs])
        self.operator_select = Parameter.create(name='Operator', type='group', children=[{'name': operator[0], 'type': 'bool'} for operator in self.operators])
        self.data_type = Parameter.create(name='Reduce data to:', type='group', children=[
            {'name': 'Pairs with data', 'type': 'bool', 'value': True},
            {'name': 'Synapse is None', 'type': 'bool'}])
        [self.select_ptree.addParameters(param) for param in [self.data_type, self.rig_select, self.operator_select, self.hash_select]]
        self.experiment_browser = self.pair_analyzer.experiment_browser
        self.v_splitter = pg.QtGui.QSplitter()
        self.v_splitter.setOrientation(pg.QtCore.Qt.Vertical)
        self.expt_splitter = pg.QtGui.QSplitter()
        self.expt_splitter.setOrientation(pg.QtCore.Qt.Vertical)
        self.h_splitter.addWidget(self.expt_splitter)
        self.expt_splitter.addWidget(self.select_ptree)
        self.expt_splitter.addWidget(self.expt_btn)
        self.h_splitter.addWidget(self.v_splitter)
        self.v_splitter.addWidget(self.experiment_browser)
        self.v_splitter.addWidget(self.ptree)
        self.v_splitter.addWidget(self.fit_btn)
        self.v_splitter.addWidget(self.fit_ptree)
        self.v_splitter.addWidget(self.save_btn)
        self.v_splitter.setSizes([200, 20, 20,400, 20])
        # self.next_pair_button = pg.QtGui.QPushButton("Load Next Pair")
        # self.v_splitter.addWidget(self.next_pair_button)
        self.h_splitter.addWidget(self.vc_plot.grid)
        self.h_splitter.addWidget(self.ic_plot.grid)
        self.fit_compare = self.pair_analyzer.fit_compare
        self.meta_compare = self.pair_analyzer.meta_compare
        self.v2_splitter = pg.QtGui.QSplitter()
        self.v2_splitter.setOrientation(pg.QtCore.Qt.Vertical)
        self.v2_splitter.addWidget(self.fit_compare)
        self.v2_splitter.addWidget(self.meta_compare)
        self.h_splitter.addWidget(self.v2_splitter)
        self.h_splitter.setSizes([100, 200, 200, 200, 500])
        self.layout.addWidget(self.h_splitter)
        self.fit_compare.hide()
        self.meta_compare.hide()
        self.setGeometry(280, 130, 1500, 900)
        self.show()

        # self.next_pair_button.clicked.connect(self.load_next_pair)
        self.experiment_browser.itemSelectionChanged.connect(self.selected_pair)
        self.save_btn.clicked.connect(self.save_to_db)
        self.expt_btn.clicked.connect(self.get_expts)
        self.fit_btn.clicked.connect(self.pair_analyzer.fit_response_update)
    parser.add_argument('--check', action='store_true')
    parser.add_argument('--timestamps', type=str, nargs='*')
    parser.add_argument('--dbg', default=False, action='store_true')
    parser.add_argument('expt_id', type=str, nargs='?', default=None)
    parser.add_argument('pre_cell_id', type=str, nargs='?', default=None)
    parser.add_argument('post_cell_id', type=str, nargs='?', default=None)

    args = parser.parse_args(sys.argv[1:])

    if args.dbg:
        pg.dbg()

    default_session = db.session()
    notes_session = notes_db.db.session()
    timestamps = [
        r.acq_timestamp for r in db.query(db.Experiment.acq_timestamp).all()
    ]

    mw = MainWindow(default_session, notes_session)
    if args.check is True:
        pair_in_notes = []
        pair_not_in_notes = []
        ghost_pair = []
        print('checking %d pairs...' % len(synapses))
        for pair in synapses:
            pair_notes = pair_notes_query(notes_session, pair).all()
            if len(pair_notes) == 0:
                pair_not_in_notes.append(pair)
            elif len(pair_notes) == 1:
                pair_in_notes.append(pair)
            else:
Exemplo n.º 8
0
import re, argparse, sys
from datetime import datetime
from aisynphys.database import default_db as db

if __name__ == '__main__':

    args = sys.argv[1:]

    start = datetime.strptime(args[0], "%y%m%d")
    stop = datetime.strptime(args[1], "%y%m%d")

    tubes = db.query(db.PatchSeq.tube_id).all()
    n_tubes = 0

    for tube in tubes:
        name_check = re.match(r'P(M|T)S4_(?P<date>\d{6})_(?P<tube_id>\d{3})_A01', tube[0])
        if name_check is not None:
            date=name_check.group('date')
            date=datetime.strptime(date, "%y%m%d")
            if date >= start and date <= stop:
                n_tubes+=1

    print("Number of tubes from %s - %s: %d" % (start.date(), stop.date(), n_tubes))
Exemplo n.º 9
0
import pyqtgraph as pg
import numpy as np
import time, random, sys, argparse

pg.dbg()

parser = argparse.ArgumentParser()
parser.add_argument('--timeline', action='store_true')
parser.add_argument('--hist', action='store_true')

args = parser.parse_args(sys.argv[1:])

species = {'mouse': ['o', (0, 0, 255, 150)],  'human': ['s', (0, 255, 0, 150)]}
metrics = ['area_400_10000bp', 'picogreen_yield','norm_marker_sum', 'genes_detected', 'tree_call']

q = db.query(db.PatchSeq, db.Experiment.acq_timestamp)
q = q.join(db.Cell, db.PatchSeq.cell_id==db.Cell.id)
q = q.join(db.Experiment, db.Cell.experiment_id==db.Experiment.id)
q = q.join(db.Slice, db.Experiment.slice_id==db.Slice.id)
q = q.filter(db.Experiment.operator_name=='Operator Z')

for metric in metrics:
    ticks = None
    if args.timeline:
        time_plt = pg.plot()
        time_plt.addLegend()
    if args.hist:
        hist_plt = pg.plot()
        hist_plt.addLegend()
    for organism, symbols in species.items(): 
        patchseq_cells = q.filter(db.Slice.species==organism)
Exemplo n.º 10
0
parser = argparse.ArgumentParser(parents=[config.parser])
parser.add_argument('experiment_id', type=str)
parser.add_argument('pre_cell_id', type=str, nargs='?')
parser.add_argument('post_cell_id', type=str, nargs='?')

args = parser.parse_args()

cell_ids = [
    cid for cid in (args.pre_cell_id, args.post_cell_id) if cid is not None
]

expt = db.experiment_from_ext_id(args.experiment_id)
pipeline_jobs = {
    job.module_name: job
    for job in db.query(db.Pipeline).filter(
        db.Pipeline.job_id == args.experiment_id).all()
}


def print_attrs(obj, attrs, indent=0, prefix=""):
    maxlen = max([len(a) for a in attrs])
    for attr in attrs:
        if isinstance(attr, tuple):
            attr, fmt, fn = attr
        else:
            fmt = str(maxlen) + "s"
            fn = str
        print(" " * indent +
              ("{prefix}{attr:" + fmt + "}  :  {val:s}"
               ).format(attr=attr, val=fn(getattr(obj, attr)), prefix=prefix))