def plot_track_props(tracks, nx, ny, len_cutoff=20): pl.ioff() wdist = wraparound_dist(nx, ny) val_fig = pl.figure() area_fig = pl.figure() psn_fig = pl.figure() delta_vals = [] delta_dists = [] for tr in tracks: if len(tr) < len_cutoff: continue idxs, regs = zip(*tr) delta_vals.extend([abs(regs[idx].val - regs[idx + 1].val) for idx in range(len(regs) - 1)]) dists = [wdist(regs[i].loc, regs[i + 1].loc) for i in range(len(regs) - 1)] delta_dists.extend([abs(dists[idx] - dists[idx + 1]) for idx in range(len(dists) - 1)]) pl.figure(val_fig.number) pl.plot(idxs, [reg.val for reg in regs], "s-", hold=True) pl.figure(area_fig.number) pl.semilogy(idxs, [reg.area for reg in regs], "s-", hold=True) pl.figure(psn_fig.number) pl.plot(idxs[:-1], dists, "s-", hold=True) pl.figure(val_fig.number) pl.savefig("val_v_time.pdf") pl.figure(area_fig.number) pl.savefig("area_v_time.pdf") pl.figure(psn_fig.number) pl.savefig("psn_v_time.pdf") pl.figure() pl.hist(delta_vals, bins=pl.sqrt(len(delta_vals))) pl.savefig("delta_vals.pdf") pl.figure() pl.hist(delta_dists, bins=pl.sqrt(len(delta_dists))) pl.savefig("delta_dists.pdf") pl.close("all")
def track_regions_greedy(tslice_to_regions, nx, ny): tracks = [] wdist = wraparound_dist(nx, ny) tracks = {} # initialize tracks with the 0th tslice t0, r0s = tslice_to_regions[0] for r0 in r0s: tracks[r0] = [(t0, r0)] for (t0,r0s), (t1,r1s) in zip(tslice_to_regions, tslice_to_regions[1:]): fitness_r0_r1 = [] for r0 in r0s: row = [fitness(r0, r1, wdist(r0.loc, r1.loc)) for r1 in r1s] fitness_r0_r1.append(row) fitness_r0_r1 = np.array(fitness_r0_r1, dtype=np.double) r0_to_r1 = row_to_col_mins(fitness_r0_r1, r0s, r1s) r1_to_r0 = row_to_col_mins(fitness_r0_r1.T, r1s, r0s) for r0, r1 in r0_to_r1.items(): if r0 not in tracks: import pdb; pdb.set_trace() r0_back = r1_to_r0[r1] if r0_back is r0: # forward <--> back mapping is consistent, add to tracks. try: tr = tracks.pop(r0) except KeyError: import pdb; pdb.set_trace() tr.append((t1, r1)) tracks[r1] = tr for r1 in r1s: if r1 not in tracks: tracks[r1] = [(t1, r1)] return tracks.values()