コード例 #1
0
ファイル: Filterbank.py プロジェクト: dan-thornton/SigPyProc
    def genMBmask(self,gulp=512,threshold=4):
        outFile = self.filterbanks[0].prepOutfile("MBmask.fil")
        clags = Buffer(self.lags.shape[0],C.c_int)
        clags.Ndarray = self.lags

        for fil,offset in zip(self.filterbanks,self.lags):
            fil.f.seek(fil.hdrlen+offset)
        minlen = min([ fil.info["nsamples"]-offset for fil,offset in zip(self.filterbanks,self.lags)])
        readBuffers = Buffer(gulp*self.info["nchans"],C.c_ubyte,dim=self.nfiles)
        writeBuffer = Buffer(gulp*self.info["nchans"],C.c_ubyte)
        passPlan = ReadPlan(self,readBuffers,multi=True)
        passPlan.readOnce()
        for nsamps,ii in passPlan.makePass():
            self.lib.genMBmask(readBuffers.Cbuffer,writeBuffer.Cbuffer,
                               threshold,self.nfiles,nsamps,self.info["nchans"])
            outFile.cwrite(writeBuffer,nsamps*self.info["nchans"])
コード例 #2
0
ファイル: Filterbank.py プロジェクト: dan-thornton/SigPyProc
    def getStatistics(self,window=10001,gulp=30003):

        if gulp < window: raise ValueError,"gulp must be > window"              

        readBuffer = Buffer(self.info["nchans"]*gulp,self.ctype)
        writeBuffer = Buffer(self.info["nchans"]*gulp,self.ctype)
        maximaBuffer = Buffer(self.info["nchans"],C.c_float)
        minimaBuffer = Buffer(self.info["nchans"],C.c_float)
        meansBuffer = Buffer(self.info["nchans"],C.c_float)
        bpassBuffer = Buffer(self.info["nchans"],C.c_float)
        stdevBuffer = Buffer(self.info["nchans"],C.c_float)

        outFile = self.prepOutfile("%s_RM.fil"%(self.basename))
        passPlan = ReadPlan(self,readBuffer)
        passPlan.readSkipBack(gulp,window)

        for nsamps,ii in passPlan.makePass():
            self.lib.getStats(readBuffer.Cbuffer, meansBuffer.Cbuffer,
                     bpassBuffer.Cbuffer, stdevBuffer.Cbuffer,
                     writeBuffer.Cbuffer,maximaBuffer.Cbuffer,
                     minimaBuffer.Cbuffer,self.info["nchans"],nsamps,window,ii)

            if ii == 0:
                outFile.cwrite(writeBuffer)
            elif ii == passPlan.nreads-1:
                outFile.cwrite(writeBuffer, nunits=nsamps*self.info["nchans"],
                               offset=self.info["nchans"]*window)
            else:
                outFile.cwrite(writeBuffer,
                               nunits = (gulp-window)*self.info["nchans"],
                               offset = self.info["nchans"]*window)

        stdevBuffer.Ndarray = numpy.sqrt(stdevBuffer.Ndarray/self.info["nsamples"])

        infoFile = open("%s_RM.info"%(self.basename),"w+")
        info = {"sigma":stdevBuffer.Ndarray,
                "bandpass":bpassBuffer.Ndarray,
                "maxima":maximaBuffer.Ndarray,
                "minima":minimaBuffer.Ndarray}
        cPickle.dump(info,infoFile)
        infoFile.close()
        return Filterbank(outFile.name)