def load_tracksets(data, trackids=None, min_length=10, verbose=False, run_remove_dupes=False, run_fill_gaps=False, run_track_orient=False): """ Returns a dict of slices into data based on trackid """ if trackids is None: # copy actually speeds it up by a factor of two trackids = data['t'].copy() elif not trackids.flags.owndata: # copy in case called as ...(data, data['t']) trackids = trackids.copy() lengths = np.bincount(trackids+1)[1:] if min_length > 1: lengths = lengths >= min_length longtracks = np.where(lengths)[0] tracksets = {track: data[trackids==track] for track in longtracks} if run_remove_dupes: from tracks import remove_duplicates remove_duplicates(tracksets=tracksets, inplace=True, verbose=verbose) if run_fill_gaps: from tracks import fill_gaps fill_gaps(tracksets=tracksets, inplace=True, verbose=verbose) if run_track_orient: from orientation import track_orient for track in tracksets: tracksets[track]['o'] = track_orient(tracksets[track]['o']) return tracksets
def load_tracksets(data, trackids, odata=None, omask=True, min_length=10): """ Returns a dict of slices into data based on trackid """ if omask is not True: trackids = trackids[omask] longtracks = np.where(np.bincount(trackids + 1)[1:] >= min_length)[0] tracksets = {track: data[(data["lab"] == track) & omask] for track in longtracks} if odata is not None: otracksets = { track: orient.track_orient(odata[(data["lab"] == track) & omask]["orient"], onetrack=True) for track in longtracks } return tracksets, otracksets else: return tracksets
def load_tracksets(data, trackids, odata=None, omask=True, min_length=10): """ Returns a dict of slices into data based on trackid """ if omask is not True: trackids = trackids[omask] longtracks = np.where(np.bincount(trackids + 1)[1:] >= min_length)[0] tracksets = { track: data[(data['lab'] == track) & omask] for track in longtracks } if odata is not None: otracksets = { track: orient.track_orient(odata[(data['lab'] == track) & omask]['orient'], onetrack=True) for track in longtracks } return tracksets, otracksets else: return tracksets
def trackmsd(track, dt0, dtau, data, trackids, odata, omask, mod_2pi=False): """ trackmsd(track, dt0, dtau, data, trackids, odata, omask) finds the track msd, as function of tau, averaged over t0, for one track (worldline) """ tmask = (trackids==track) & omask trackdots = data[tmask] if mod_2pi: trackodata = odata[tmask]['orient'] else: from orientation import track_orient trackodata = track_orient(odata, track, trackids, omask) if dt0 == dtau == 1: if verbose: print "Using correlation" from correlation import msd as corrmsd return corrmsd(trackodata, ret_taus=True) trackbegin, trackend = trackdots['f'][[0,-1]] tracklen = trackend - trackbegin + 1 if verbose: print "tracklen =",tracklen print "\t from %d to %d"%(trackbegin, trackend) if isinstance(dtau, float): taus = helpy.farange(dt0, tracklen, dtau) elif isinstance(dtau, int): taus = xrange(dtau, tracklen, dtau) tmsd = [] for tau in taus: # for tau in T, by factor dtau #print "tau =", tau avg = t0avg(trackdots, tracklen, tau, trackodata, dt0, mod_2pi=mod_2pi) #print "avg =", avg if avg > 0 and not np.isnan(avg): tmsd.append([tau,avg[0]]) if verbose: print "\t...actually", len(tmsd) return tmsd
def trackmsd(track, dt0, dtau, data, trackids, odata, omask, mod_2pi=False): """ trackmsd(track, dt0, dtau, data, trackids, odata, omask) finds the track msd, as function of tau, averaged over t0, for one track (worldline) """ tmask = (trackids == track) & omask trackdots = data[tmask] if mod_2pi: trackodata = odata[tmask]['orient'] else: from orientation import track_orient trackodata = track_orient(odata, track, trackids, omask) if dt0 == dtau == 1: if verbose: print "Using correlation" from correlation import msd as corrmsd return corrmsd(trackodata, ret_taus=True) trackbegin, trackend = trackdots['f'][[0, -1]] tracklen = trackend - trackbegin + 1 if verbose: print "tracklen =", tracklen print "\t from %d to %d" % (trackbegin, trackend) if isinstance(dtau, float): taus = helpy.farange(dt0, tracklen, dtau) elif isinstance(dtau, int): taus = xrange(dtau, tracklen, dtau) tmsd = [] for tau in taus: # for tau in T, by factor dtau #print "tau =", tau avg = t0avg(trackdots, tracklen, tau, trackodata, dt0, mod_2pi=mod_2pi) #print "avg =", avg if avg > 0 and not np.isnan(avg): tmsd.append([tau, avg[0]]) if verbose: print "\t...actually", len(tmsd) return tmsd