def create_and_write_report(flydra_db, sample, image_name): view_start = 'saccades_view_start_%s' % image_name view_stop = 'saccades_view_stop_%s' % image_name view_rstop = 'saccades_view_rstop_%s' % image_name db = FlydraDB(flydra_db, False) saccades = db.get_saccades(sample) values_start = db.get_table(sample, view_start) values_stop = db.get_table(sample, view_stop) values_rstop = db.get_table(sample, view_rstop) r = Report(sample) for i in range(len(saccades)): ri = r.node("saccade-%04d" % i) ri.data_rgb('start', plot_luminance(values_start[i]['value'])) ri.data_rgb('stop', plot_luminance(values_stop[i]['value'])) ri.data_rgb('rstop', plot_luminance(values_rstop[i]['value'])) f = ri.figure(shape=(1, 3)) f.sub('start', 'At saccade start') f.sub('stop', 'At saccade stop') #f.sub('rstop', '(random stop)') db.release_table(saccades) db.release_table(values_start) db.release_table(values_stop) db.release_table(values_rstop) filename = "%s/out/saccade_view_show/%s_%s.html" % (flydra_db, image_name, sample) print "Writing to %s" % filename r.to_html(filename)
def main(): parser = OptionParser(usage=description) parser.add_option("--db", default='flydra_db', help="FlydraDB directory") parser.add_option("--nocache", help="Ignores already computed results.", default=False, action="store_true") parser.add_option("--white", help="Computes luminance_w, with the arena" " painted white.", default=False, action="store_true") parser.add_option("--host", help="Use a remote rfsee. Otherwise," "use local process.", default=None) (options, args) = parser.parse_args() if options.db is None: logger.error('Please specify a directory using --db.') sys.exit(-1) db = FlydraDB(options.db) if args: do_samples = args else: # look for samples with the rows table all_samples = db.list_samples() do_samples = filter(lambda x: db.has_saccades(x) and db.has_attr(x, 'stimulus_xml'), all_samples) logger.info('Found %d/%d samples with saccades and stimulus info.' % (len(do_samples), len(all_samples))) image = 'luminance_w' if options.white else 'luminance' target_start = 'saccades_view_start_%s' % image target_stop = 'saccades_view_stop_%s' % image target_rstop = 'saccades_view_rstop_%s' % image target_sstop = 'saccades_view_sstop_%s' % image target_random = 'saccades_view_random_%s' % image for i, sample_id in enumerate(do_samples): logger.info('Sample %s/%s: %s' % (i + 1, len(do_samples), sample_id)) if not db.has_sample(sample_id): raise Exception('Sample %s not found in db.' % sample_id) if not db.has_saccades(sample_id): raise Exception('Sample %s does not have saccades table.' % sample_id) if not db.has_attr(sample_id, 'stimulus_xml'): raise Exception('Sample %s does not have the stimulus' ' information ("stimulus_xml")' % sample_id) # todo: check stale dependencies if db.has_table(sample_id, target_start) and \ db.has_table(sample_id, target_stop) and \ db.has_table(sample_id, target_rstop) and \ db.has_table(sample_id, target_sstop) and \ db.has_table(sample_id, target_random) and \ not options.nocache: logger.info('Targets already computed for %s; skipping' % sample_id) continue # Get the stimulus description stimulus_xml = db.get_attr(sample_id, 'stimulus_xml') saccades = db.get_saccades(sample_id) view_start, view_stop, view_rstop, view_random, view_sstop = \ render_saccades_view( saccades=saccades, stimulus_xml=stimulus_xml, host=options.host, white=options.white) db.set_table(sample_id, target_start, view_start) db.set_table(sample_id, target_stop, view_stop) db.set_table(sample_id, target_rstop, view_rstop) db.set_table(sample_id, target_random, view_random) db.set_table(sample_id, target_sstop, view_sstop) db.release_table(saccades) db.close()