def main(path1, path2, logfile=None): from act_parser import ActParser from act_sample_norm import normalize print_samples = False if logfile: log = open(logfile, "w") def log_score_enabled(o, s): print >> log, o, s global log_score log_score = log_score_enabled else: log = sys.stdout print_samples = True print >> log, "# Reading activity data from %s..." % (path1), p1 = ActParser(path1) l1 = list(normalize(p1.samples())) print >> log, "done, read %d samples" % (len(l1)) print >> log, "# Reading activity data from %s..." % (path2), p2 = ActParser(path2) l2 = list(normalize(p2.samples())) print >> log, "done, read %d samples" % (len(l2)) o = int(l1[0].t - l2[0].t) print >> log, "# Timestamps are offset by %ds" % (o) if abs(o) > min(len(l1), len(l2)): print >> log, "# Offset is too big. Assuming clocks out-of-whack..." o = 0 o, score = find_local_max_correlation_offset(l1, l2, o) print >> log, "# Minimum score at offset %d is %.2f m" % (o, score) if print_samples: for s, t in zip_samples_at_offset(l1, l2, o): print >> log, "{}\n\t{}\n\t{}".format(geodistance(s, t), s, t) return 0
def closer(a, b): """Return a score that's higher, the closer a and b are to eachother.""" return -geodistance(a, b)