Example #1
0
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,[])
Example #2
0
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)
Example #3
0
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)
Example #4
0
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)
Example #5
0
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)
Example #6
0
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, [])