else: self.splines = [ InterpolatedUnivariateSpline(ti - t0, si, **kwargs) for ti, si in zip(t, s) ] def __len__(self): return len(self.splines) def __call__(self, t): return np.vstack([s(t - self.t0) for s in self.splines]) m = 'animal_id in (20505, 20322, 20457, 20210, 20892)' keys = (fuse.Activity() * stimulus.Sync * tune.StimulusType & stimulus.Trial * stimulus.Condition & m & 'stimulus_type = "stimulus.Trippy"').fetch('KEY') key = keys[0] pipe = (fuse.Activity() & key).module num_frames = (pipe.ScanInfo() & key).fetch1('nframes') num_depths = len( dj.U('z') & (pipe.ScanInfo.Field().proj('z', nomatch='field') & key)) frame_times = (stimulus.Sync() & key).fetch1('frame_times', squeeze=True) # one per depth assert num_frames <= frame_times.size / num_depths <= num_frames + 1 frame_times = frame_times[:num_depths * num_frames:num_depths] # one per volume
# reso/meso (up to SummaryImages) for pipe in [reso, meso]: pipe.ScanInfo().populate(next_scans, reserve_jobs=True, suppress_errors=True) pipe.Quality().populate(next_scans, reserve_jobs=True, suppress_errors=True) pipe.RasterCorrection().populate(next_scans, reserve_jobs=True, suppress_errors=True) pipe.MotionCorrection().populate(next_scans, reserve_jobs=True, suppress_errors=True) pipe.SummaryImages().populate(next_scans, reserve_jobs=True, suppress_errors=True) # Field Registration stack.InitialRegistration().populate(next_scans, reserve_jobs=True, suppress_errors=True) stack.FieldRegistration().populate(next_scans, reserve_jobs=True, suppress_errors=True) # fuse fuse.MotionCorrection().populate(next_scans, reserve_jobs=True, suppress_errors=True) fuse.ScanSet().populate(next_scans, reserve_jobs=True, suppress_errors=True) fuse.Activity().populate(next_scans, reserve_jobs=True, suppress_errors=True) fuse.ScanDone().populate(next_scans, reserve_jobs=True, suppress_errors=True) # tune (these are memory intensive) if POPULATE_TUNE: tune_scans = next_scans & (experiment.Scan() & 'scan_ts > "2017-12-00 00:00:00"') #stimulus.Sync needs to be run from Matlab tune.STA().populate(tune_scans, reserve_jobs=True, suppress_errors=True) tune.STAQual().populate(tune_scans, reserve_jobs=True, suppress_errors=True) tune.STAExtent().populate(tune_scans, reserve_jobs=True) tune.CaMovie().populate(tune_scans, reserve_jobs=True, suppress_errors=True) tune.Drift().populate(tune_scans, reserve_jobs=True, suppress_errors=True) tune.OriDesign().populate(tune_scans, reserve_jobs=True, suppress_errors=True) tune.OriMap().populate(tune_scans, reserve_jobs=True, suppress_errors=True)
# sessions that have both Monet and Trippy from a few recent experiments sessions = (fuse.Activity * stimulus.Sync & 'animal_id in (20505, 20322, 20457, 20210, 20892)' & (stimulus.Trial * stimulus.Monet2) & (stimulus.Trial * stimulus.Trippy)).fetch('KEY') key = sessions[2] # pick one cache = {} for key in sessions: folder = os.path.join(os.path.abspath('..'), 'data', 'sessions', dj.hash.key_hash(key)[:6]) if os.path.isdir(folder): continue print('load frame times.') pipe = (fuse.Activity() & key).module num_frames = (pipe.ScanInfo() & key).fetch1('nframes') num_depths = len( dj.U('z') & (pipe.ScanInfo.Field().proj('z', nomatch='field') & key)) frame_times = (stimulus.Sync() & key).fetch1('frame_times', squeeze=True) # one per depth assert num_frames <= frame_times.size / num_depths <= num_frames + 1 frame_times = frame_times[:num_depths * num_frames:num_depths] # one per volume print('load and cache soma traces') trace_hash = dj.hash.key_hash( {k: v for k, v in key.items() if k not in {'stimulus_type'}}) archive = os.path.join('cache', trace_hash + '-traces.npz') if os.path.isfile(archive):