예제 #1
0
파일: core.py 프로젝트: aarumuga/caton
def klusters_files(table,basename):
    CluFileName,FetFileName,ResFileName,SpkFileName,XMLFileName = (basename + ext for ext in [".clu.1",".fet.1",".res.1",".spk.1",".xml"])
    output.write_clu(table.cols.clu[:],CluFileName)
    output.write_fet(to2d(table.cols.fet[:]),FetFileName,samples=table.cols.time[:])
    output.write_res(table.cols.time[:],ResFileName)
    output.write_spk(table.cols.wave[:],SpkFileName)
    output.write_xml(n_ch=N_CH,n_samp=S_TOTAL,n_feat=N_CH*FPC,sample_rate=SAMPLE_RATE,filepath=XMLFileName)    
예제 #2
0
def klusters_files(table, basename):
    CluFileName, FetFileName, ResFileName, SpkFileName, XMLFileName = (
        basename + ext
        for ext in [".clu.1", ".fet.1", ".res.1", ".spk.1", ".xml"])
    output.write_clu(table.cols.clu[:], CluFileName)
    output.write_fet(to2d(table.cols.fet[:]),
                     FetFileName,
                     samples=table.cols.time[:])
    output.write_res(table.cols.time[:], ResFileName)
    output.write_spk(table.cols.wave[:], SpkFileName)
    output.write_xml(n_ch=N_CH,
                     n_samp=S_TOTAL,
                     n_feat=N_CH * FPC,
                     sample_rate=SAMPLE_RATE,
                     filepath=XMLFileName)
예제 #3
0
파일: core.py 프로젝트: aarumuga/caton
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,[])
예제 #4
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, [])