Source code for sirepo.pkcli.myapp

# -*- coding: utf-8 -*-
"""Wrapper to run myapp from the command line.

:copyright: Copyright (c) 2017 RadiaSoft LLC.  All Rights Reserved.
:license: http://www.apache.org/licenses/LICENSE-2.0.html
"""
from __future__ import absolute_import, division, print_function
from pykern import pkio
from pykern import pksubprocess
from pykern.pkdebug import pkdp, pkdc, pkdlog
from sirepo import simulation_db
from sirepo.template import template_common
import csv
import sirepo.template.myapp as template
import sys


_SCHEMA = simulation_db.get_schema(template.SIM_TYPE)


[docs]def run(cfg_dir): with pkio.save_chdir(cfg_dir): try: pksubprocess.check_call_with_signals( [sys.executable, template_common.PARAMETERS_PYTHON_FILE], ) except Exception as e: pkdlog('script failed: dir={} err={}', cfg_dir, e) simulation_db.write_result({ 'error': 'program error occured', }) return data = simulation_db.read_json(template_common.INPUT_BASE_NAME) if data.report == 'heightWeightReport': res = _report( 'Dog Height and Weight Over Time', ('height', 'weight'), data, ) else: raise AssertionError('unknown report: {}'.format(data.report)) simulation_db.write_result(res)
def _csv_to_cols(): with open(template.OUTPUT_NAME, 'r') as f: rows = csv.reader(f) headers = rows.next() cols = [[] for _ in headers] for row in rows: for i, c in enumerate(row): cols[i].append(float(c)) return dict((k.lower(), cols[i]) for i, k in enumerate(headers)) def _label(field): return _SCHEMA.model.dog[field][0] def _plot(dog, field, cols): return { 'name': field, 'label': _label(field), 'points': cols[field], } def _report(title, fields, data): dog = data.models.dog cols = _csv_to_cols() x_points = cols['year'] plots = [_plot(dog, f, cols) for f in fields] return { 'title': title, 'x_range': [x_points[0], x_points[-1]], 'y_label': _label(fields[0]) if len(fields) == 1 else '', 'x_label': 'Age (years)', 'x_points': x_points, 'plots': plots, 'y_range': template_common.compute_plot_color_and_range(plots), }