]> jspc29.x-matter.uni-frankfurt.de Git - mvd_epics.git/commitdiff
python_suite: updated css_psql_archive package
authorPhilipp Klaus <klaus@physik.uni-frankfurt.de>
Tue, 1 Aug 2017 14:42:37 +0000 (16:42 +0200)
committerPhilipp Klaus <klaus@physik.uni-frankfurt.de>
Tue, 1 Aug 2017 14:42:37 +0000 (16:42 +0200)
python_suite/css_psql_archive/css_psql_archive.py
python_suite/css_psql_archive/setup.py

index e6e53c47db67473789a6d3b04b97241d7a58572b..99ddae86921db68dfa89c353565862841676331d 100644 (file)
@@ -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
index fe5639ded3e39d3874b114734381947d47a896e6..a2b38acc3adede61b0dbccfbff4bd4a9e22b594b 100644 (file)
@@ -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',