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"])
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)