def extract_intra_spikes(DatFileName,IntraChannel,output_dir=None,ExtraChannels=None): """extracts spikes times from intracellular data""" THRESH_FRAC = .5 DatFileName = os.path.abspath(DatFileName) DatDir = os.path.dirname(DatFileName) basename = intra_basename(DatFileName) OutDir = join(output_dir,basename) if output_dir else join(DatDir,basename) with indir(OutDir): SpkFileName = basename+'.spk.1' n_ch_dat,sample_rate = get_dat_pars(DatFileName) global N_CH N_CH = 1 if ExtraChannels is None else 1 + len(ExtraChannels) set_globals_samples(sample_rate) print("extracting intracellular spikes from %s"%DatFileName) n_samples = num_samples(DatFileName,n_ch_dat,n_bytes=np.nbytes[DTYPE]) AllDataArr = np.memmap(DatFileName,dtype=np.int16,shape=(n_samples,n_ch_dat),mode='r') b,a = signal.butter(3,100./(SAMPLE_RATE/2),'high') #filter at 100 Hz IntraArr = AllDataArr[:,IntraChannel].copy() IntraArr = signal.filtfilt(b,a,IntraArr) Thresh = IntraArr.max()*THRESH_FRAC Segs = contig_segs(np.flatnonzero(IntraArr > Thresh),padding=2) TmList = map(lambda Seg: Seg[IntraArr[Seg].argmax()],Segs) CluList = np.ones(len(TmList),dtype=np.int) FetList = np.zeros((len(TmList),1),dtype=np.int) SpkList = [get_padded(IntraArr,PeakSample-S_BEFORE,PeakSample+S_AFTER) for PeakSample in TmList] SpkArr = np.array(SpkList)[:,:,np.newaxis] if ExtraChannels is not None: ExtraArr = AllDataArr[:,ExtraChannels].copy() #b,a = signal.butter(BUTTER_ORDER,(F_LOW/(SAMPLE_RATE/2),.95),'pass') ExtraArr = filtfilt2d(b,a,ExtraArr) ExtraSpkList = [get_padded(ExtraArr,PeakSample-S_BEFORE,PeakSample+S_AFTER) for PeakSample in TmList] ExtraSpkArr = np.array(ExtraSpkList) SpkArr *= ExtraSpkArr[0].max()/SpkArr[0].max() SpkArr = np.concatenate((np.array(ExtraSpkList),SpkArr),axis=2) output.write_spk(np.array(SpkArr),SpkFileName) write_files(basename,CluList,TmList,FetList,[])
def extract_wave_simple(IndList, FilteredArr): IndArr = np.array(IndList, dtype=np.int32) SampArr = IndArr[:, 0] ChArr = IndArr[:, 1] PeakSample = SampArr[FilteredArr[SampArr, ChArr].argmin()] Wave = get_padded(FilteredArr, PeakSample - S_BEFORE, PeakSample + S_AFTER) return Wave, PeakSample, bincount(ChArr, N_CH).astype(np.bool8)
def extract_wave_simple(IndList,FilteredArr): IndArr = np.array(IndList,dtype=np.int32) SampArr = IndArr[:,0] ChArr = IndArr[:,1] PeakSample = SampArr[FilteredArr[SampArr,ChArr].argmin()] Wave = get_padded(FilteredArr,PeakSample-S_BEFORE,PeakSample+S_AFTER) return Wave,PeakSample,bincount(ChArr,N_CH).astype(np.bool8)
def extract_wave_interp(IndList,FilteredArr): IndArr = np.array(IndList,dtype=np.int32) SampArr = IndArr[:,0] ChArr = IndArr[:,1] PeakInd = FilteredArr[SampArr,ChArr].argmin() PeakSample,PeakChannel = SampArr[PeakInd],ChArr[PeakInd] WavePlus = get_padded(FilteredArr,PeakSample-S_BEFORE-1,PeakSample+S_AFTER+1) Wave = interp_around_peak(WavePlus,S_BEFORE+1,PeakChannel,S_BEFORE,S_AFTER,kind=INTERP_METHOD) return Wave,PeakSample,bincount(ChArr,N_CH).astype(np.bool8)
def extract_wave_interp(IndList, FilteredArr): IndArr = np.array(IndList, dtype=np.int32) SampArr = IndArr[:, 0] ChArr = IndArr[:, 1] PeakInd = FilteredArr[SampArr, ChArr].argmin() PeakSample, PeakChannel = SampArr[PeakInd], ChArr[PeakInd] WavePlus = get_padded(FilteredArr, PeakSample - S_BEFORE - 1, PeakSample + S_AFTER + 1) Wave = interp_around_peak(WavePlus, S_BEFORE + 1, PeakChannel, S_BEFORE, S_AFTER, kind=INTERP_METHOD) return Wave, PeakSample, bincount(ChArr, N_CH).astype(np.bool8)
def extract_intra_spikes(DatFileName, IntraChannel, output_dir=None, ExtraChannels=None): """extracts spikes times from intracellular data""" THRESH_FRAC = .5 DatFileName = os.path.abspath(DatFileName) DatDir = os.path.dirname(DatFileName) basename = intra_basename(DatFileName) OutDir = join(output_dir, basename) if output_dir else join( DatDir, basename) with indir(OutDir): SpkFileName = basename + '.spk.1' n_ch_dat, sample_rate = get_dat_pars(DatFileName) global N_CH N_CH = 1 if ExtraChannels is None else 1 + len(ExtraChannels) set_globals_samples(sample_rate) print("extracting intracellular spikes from %s" % DatFileName) n_samples = num_samples(DatFileName, n_ch_dat, n_bytes=np.nbytes[DTYPE]) AllDataArr = np.memmap(DatFileName, dtype=np.int16, shape=(n_samples, n_ch_dat), mode='r') b, a = signal.butter(3, 100. / (SAMPLE_RATE / 2), 'high') #filter at 100 Hz IntraArr = AllDataArr[:, IntraChannel].copy() IntraArr = signal.filtfilt(b, a, IntraArr) Thresh = IntraArr.max() * THRESH_FRAC Segs = contig_segs(np.flatnonzero(IntraArr > Thresh), padding=2) TmList = map(lambda Seg: Seg[IntraArr[Seg].argmax()], Segs) CluList = np.ones(len(TmList), dtype=np.int) FetList = np.zeros((len(TmList), 1), dtype=np.int) SpkList = [ get_padded(IntraArr, PeakSample - S_BEFORE, PeakSample + S_AFTER) for PeakSample in TmList ] SpkArr = np.array(SpkList)[:, :, np.newaxis] if ExtraChannels is not None: ExtraArr = AllDataArr[:, ExtraChannels].copy() #b,a = signal.butter(BUTTER_ORDER,(F_LOW/(SAMPLE_RATE/2),.95),'pass') ExtraArr = filtfilt2d(b, a, ExtraArr) ExtraSpkList = [ get_padded(ExtraArr, PeakSample - S_BEFORE, PeakSample + S_AFTER) for PeakSample in TmList ] ExtraSpkArr = np.array(ExtraSpkList) SpkArr *= ExtraSpkArr[0].max() / SpkArr[0].max() SpkArr = np.concatenate((np.array(ExtraSpkList), SpkArr), axis=2) output.write_spk(np.array(SpkArr), SpkFileName) write_files(basename, CluList, TmList, FetList, [])