Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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