From: Philipp Klaus Date: Tue, 1 Aug 2017 14:42:37 +0000 (+0200) Subject: python_suite: updated css_psql_archive package X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=0ac67d9d4b9cce12920fb3f856e4f4fc08814e51;p=mvd_epics.git python_suite: updated css_psql_archive package --- diff --git a/python_suite/css_psql_archive/css_psql_archive.py b/python_suite/css_psql_archive/css_psql_archive.py index e6e53c4..99ddae8 100644 --- a/python_suite/css_psql_archive/css_psql_archive.py +++ b/python_suite/css_psql_archive/css_psql_archive.py @@ -25,19 +25,37 @@ class Archive: pv_names = [el[0] for el in pv_names] return pv_names - def get_single_pv(self, pv_name): + def sql_single_pv(self, channel_id, average=None, start=None, end=None): + if average: + assert average in ["second", "minute", "hour", "day", "week", "month", "quarter", "year"] + sql = "SELECT date_trunc('{}', smpl_time) AS smpl_time, avg(float_val) AS float_val ".format(average) + else: + sql = "SELECT smpl_time, float_val " + sql += "FROM archive.sample " + sql += "WHERE archive.sample.channel_id = {} ".format(channel_id) + if start: sql += "AND smpl_time >= '{}'::timestamp ".format(start.isoformat(sep=' ')) + if end: sql += "AND smpl_time < '{}'::timestamp ".format(end.isoformat(sep=' ')) + if average: + sql += "GROUP BY 1" + sql += ";" + return sql + + def get_single_pv(self, pv_name, **kwargs): channel_id = self.get_channel_id(pv_name) - sql = """SELECT smpl_time, float_val FROM archive.sample - WHERE archive.sample.channel_id = {};""".format(channel_id) + sql = self.sql_single_pv(channel_id, **kwargs) df = pd.read_sql_query(sql, self.conn, index_col='smpl_time') return df - def plot_single_pv(self, pv_name, **kwargs): + def plot_single_pv(self, pv_name, average=None, start=None, end=None, **kwargs): + values = self.get_single_pv(pv_name, average=average, start=start, end=end) + values['float_val'].plot(label=pv_name, **kwargs) + plt.legend() + + def plot_single_pv_resample(self, pv_name, interval='5min', **kwargs): values = self.get_single_pv(pv_name)['float_val'] - low = values.resample('5min').min() - high = values.resample('5min').max() + low = values.resample(interval).min() + high = values.resample(interval).max() times = high.index - values.resample('5min').mean().plot(label='mean', **kwargs) + values.resample(interval).mean().plot(label='mean', **kwargs) plt.fill_between(list(times), list(low), list(high), alpha=0.3) plt.legend() - \ No newline at end of file diff --git a/python_suite/css_psql_archive/setup.py b/python_suite/css_psql_archive/setup.py index fe5639d..a2b38ac 100644 --- a/python_suite/css_psql_archive/setup.py +++ b/python_suite/css_psql_archive/setup.py @@ -4,7 +4,7 @@ except ImportError: from distutils.core import setup setup(name='css_psql_archive', - version='0.2', + version='0.2.2', description='An interface to the CS-Studio PostgreSQL Archive for EPICS PVs', url='', author='Philipp Klaus',