def diff_pkl2chomp ( files , savedir ) : #grab files, skip directories if os.path.isdir (files): fdir = files + '/' dlist = os.listdir(fdir) frames = [] for f in dlist: if f.endswith('npy') and not os.path.isdir(fdir+f): frames.append(f) else: frames = [ files ] fdir = files.rpartition('/')[0].rpartition('/')[0]+'/' #savedir = '/home/kellys/RBC_Deriv_120125_r01/' #print 'attempting chomp runs..' frames.sort(key=natural_key) for frame in frames: savename = frame.rstrip('npy') + 'cub' #CB.png2chomp(fdir + frame) arr = numpy.load(fdir+frame) w = numpy.where(arr==True) newarr = numpy.vstack( (w[0],w[1])).T CB.array2chomp(newarr,fdir+savename) CB.run_chomp(fdir + savename, savedir+savename)
def run_chomp( cub_name ): """ """ save_prefix = cub_name.rstrip( '.cub' ) chomp_betti.run_chomp( cub_name, save_prefix+'.cbetti' ) chomp_betti.extract_betti( save_prefix )
def run_fft_filter( files, bnd_file, modes, suffix= 'fft_frames/normed_frames/', make_cubs=True, run_chomp=True ): """ For each frame in fdir, compute fft( frame ), then take the top <modes> percent of the frequencies. Threshold these filtered images at the mean (of pixels inside the cell boundary). Save the thresholded image to fft_frames/ directory. fdir : directory to frames modes : percentage of modes (low->high) to use for low-pass filter """ # grab all frames, skip the directories print "files", files if os.path.isdir( files ): fdir = files + '/' dlist = os.listdir( fdir ) if os.uname()[0] == 'Linux': frames = [] for f in dlist: if f.endswith('npy') and not os.path.isdir( fdir+f ): frames.append( f ) else: frames = [ f for f in dlist if not os.path.isdir( fdir+f ) ] else: frames = [ files ] fdir = files.rpartition( '/' )[0].rpartition( '/' )[0] +'/' if not fdir.endswith( '/' ): fdir += '/' savedir = fdir + suffix # create the directory if necessary make_dir( savedir ) # compute fft and filtered ifft on (normed) images for frame in frames: if frame.endswith( 'npy' ): savename = frame.rstrip( '.npy' ) elif frame.endswith( 'txt' ): savename = frame.rstrip( '.txt' ) else: savename = frame fft_data = {} # store the modes fft_data[ 'modes' ] = modes try: image = numpy.loadtxt( fdir+frame ) except ValueError: image = numpy.load( fdir+frame ) except IOError: raise bnd = numpy.loadtxt( bnd_file ) # normalize the images and shift so centered at zero image = normalize_image( image ) # FFT X = fft_image( image ) # Y = H * X Y = ideal_low_pass( X, r=modes ) Yinv = ifft_image( Y ) Ypow = log1p( numpy.abs( Yinv )**2 ) # crop the log of the low pass to get rid of the noise outside # of the cell (zero out external points using boundary array) crop_zeros = bnd * Ypow crop_zeros.resize( Ypow.shape ) # append the cell with zeros cropped [-4] #Y.append( crop_zeros ) m = crop_zeros[numpy.where( crop_zeros!=0 )].mean() # everything above the mean, [-3] #Ymean = numpy.ma.masked_less_equal( crop_zeros, m ) # just the boolean mask, [-2] #Ymask = numpy.ma.masked_less_equal( crop_zeros, m ).mask # now populate fft_data with the essentials and save to disk #fft_data['fft'] = X #fft_data['lowpass'] = Y #fft_data['ifft'] = Yinv #fft_data['fft_mag'] = Ypow fft_data['ifft_nonzero'] = crop_zeros fft_data['mean'] = m # masking is easy, so no need to save. #fft_data['ifft_mask_mean'] = Ymean #fft_data['ifft_mask'] = Ymask # create filename with chomp-readable name (remove the 'dot' # from mode) mode_part = str( modes ).partition( '.' ) mode_str = mode_part[0] + mode_part[2] # split files into subdirectories datadir = savedir + 'r'+mode_str save_suffix = savename+'_r'+mode_str make_dir( datadir ) dataname = datadir + '/' + savename+'_r'+mode_str+'.pkl' # save our thresholded data for later analysis save_fft( fft_data, dataname ) # additional work with chomp if make_cubs: fft2cub( dataname, datadir ) if run_chomp: if not make_cubs: pass else: cub_name = datadir +'_cub/' + save_suffix + '.cub' cbetti_prefix = datadir + '_cbetti/' + save_suffix betti_prefix = datadir + '_betti/' + save_suffix make_dir( datadir + '_cbetti/' ) make_dir( datadir + '_betti/' ) chomp_betti.run_chomp( cub_name, cbetti_prefix+'.cbetti' ) chomp_betti.extract_betti( cbetti_prefix, betti_prefix )
"/sciclone/home04/jberwald/data10/wyss/data/Cells_Jesse/Old/frames/old_50125/" "fft_frames/bandpass/smooth_r0708/" ) # grab files, skip directories if os.path.isdir(files): fdir = files + "/" dlist = os.listdir(fdir) frames = [] for f in dlist: if f.endswith("npy") and not os.path.isdir(fdir + f): frames.append(f) else: frames = [files] fdir = files.rpartition("/")[0].rpartition("/")[0] + "/" # savedir = '/home/kellys/RBC_Deriv_120125_r01/' # savedir = '/home/kellys/RBC_Deriv_110125_r01/' savedir = files + "betti/" #'/home/kellys/RBC_Deriv_120125_r005/' print "attempting chomp runs.." for frame in frames: filename = frame.rstrip("npy") + "cub" savename = frame.rstrip("npy") + "cbetti" # CB.png2chomp(fdir + frame) arr = numpy.load(fdir + frame) w = numpy.where(arr == True) # w2 = numpy.where(w[2] == 0)[0] newarr = numpy.vstack((w[0], w[1])).T CB.array2chomp(newarr, fdir + filename) CB.run_chomp(fdir + filename, fdir + savename) print "finished.."