diff --git a/daqviewer/daqviewer.py b/daqviewer/daqviewer.py index e7b77ee..2bd666a 100644 --- a/daqviewer/daqviewer.py +++ b/daqviewer/daqviewer.py @@ -76,7 +76,40 @@ def parse_contents(contents, filename): # Round dataframe to save disk space df = df.round(1) - return df.to_json(orient='table') + # Create dataframe for statistics + stats = pd.DataFrame(columns=range(15)) + + # Create datafrae for energy spectrum + f = np.arange(0, 2.5, step=0.01) + dfs = pd.DataFrame(index=f) + + for col in df.columns: + t = df.index.values[:, np.newaxis] + x = df[[col]].values + + # Get spectral statistics + xx = wo.mat2timeseries(np.hstack([t, x])) + S = xx.tospecdata() + values, _, keys = S.characteristic(range(15)) + S.freqtype = 'f' + + # Interpolate + dfs[col] = np.interp(f, S.args, S.data) + + # Update column names + if stats.columns[0] == 0: + stats.columns = keys + + # Add spectral values to dataframe + stats.loc[col, keys] = values + + + json_data = {} + json_data['timeseries'] = df.to_json(orient='table') + json_data['spectrum'] = dfs.to_json(orient='table') + json_data['statistics'] = stats.to_json(orient='table') + + return json.dumps(json_data) @app.callback(Output('json-storage', 'children'), [ @@ -94,7 +127,7 @@ def read_json_data(json_data): if json_data is None: return html.Div([]) - df = pd.read_json(json_data, orient='table') + df = pd.read_json(json.loads(json_data)['timeseries'], orient='table') ts = [] for col in df.columns: trace = go.Scatter(x=df.index, y=df[col], name=col, opacity=0.8) @@ -107,29 +140,12 @@ def read_json_data(json_data): 'layout': layout }) - # Create spectral dataframe - dfs = pd.DataFrame(columns=range(15)) - + dfs = pd.read_json(json.loads(json_data)['spectrum'], + orient='table') spec = [] - for col in df.columns: - t = df.index.values[:, np.newaxis] - x = df[[col]].values - - # Get spectral statistics - xx = wo.mat2timeseries(np.hstack([t, x])) - S = xx.tospecdata() - values, _, keys = S.characteristic(range(15)) - S.freqtype = 'f' - - # Update column names - if dfs.columns[0] == 0: - dfs.columns = keys - - # Add spectral values to dataframe - dfs.loc[col, keys] = values - + for col in dfs.columns: # Plot energy spectrum - trace = go.Scatter(x=S.args, y=S.data, name=col, opacity=0.8) + trace = go.Scatter(x=dfs.index, y=dfs[col], name=col, opacity=0.8) spec.append(trace) graph_energy = dcc.Graph(id='energy-spectrum', @@ -145,6 +161,9 @@ def read_json_data(json_data): # Add location column dfs['location'] = dfs.index + # Round spectral values + dfs = dfs.round(1) + variables = { 'location': '', 'Hm0': '◊',