Skip to content
Snippets Groups Projects
Commit e8599bb5 authored by Coda Phillips's avatar Coda Phillips
Browse files

Update interpreting code

parent 047f30b4
No related branches found
No related tags found
No related merge requests found
...@@ -26,70 +26,39 @@ def index(): ...@@ -26,70 +26,39 @@ def index():
@app.route('/qc/<path:qc_path>') @app.route('/qc/<path:qc_path>')
def qc_day(qc_path): def qc_day(qc_path):
qc_path = '/'+qc_path qc_path = '/'+qc_path
cxs_path = qc_path.replace('QC.nc','B1.CXS')
sum_path = qc_path.replace('QC.nc','.SUM') sum_path = qc_path.replace('QC.nc','.SUM')
cxs = get_all_housekeeping(cxs_path) sum_hk = get_all_housekeeping(sum_path)
frame = cxs.combine_first(get_all_housekeeping(sum_path))
qc_frame = get_qc_frame(qc_path)
frame = frame.combine_first(qc_frame)
frame = frame.query('missingDataFlag == 0')
qc_frame_sum = (qc_frame > .95).sum(axis=0).to_string() plots = {}
plots = []
qc_variables = qc_frame.columns
for qc_variable in qc_variables:
if qc_variable.startswith('qc_') and qc_variable not in ['qc_notes','qc_percent']:
qc_variable = qc_variable.replace('qc_','')
plot = plot_variable_qc(frame, qc_variable)
if plot is not None:
plots.append(plot)
return flask.render_template('qc.html', qc_path=qc_path, plots=plots, qc_frame=qc_frame_sum)
def save_plot(filename):
print('saving {}'.format(filename))
plt.savefig(filename, transparent=True)
def plot_variable_qc(frame, loc, filename=None):
qc_loc = 'qc_' + loc
if qc_loc not in frame.columns:
print('{qc_loc} not in frame'.format(qc_loc=qc_loc))
return
if frame[qc_loc].sum() > 0:
fig = plt.figure(figsize=(10,5))
plot_outliers(frame, frame[qc_loc], loc)
if filename is not None:
save_plot(filename)
else:
return mpld3.fig_to_html(fig)
def plot_outliers(frame, qc_mask, loc):
if (~np.isnan(qc_mask) & qc_mask > .95).any():
frame.ix[(np.isnan(qc_mask) | (qc_mask < .95)) & (frame['qc_percent'] < .95), loc].plot(style='b.')
frame.ix[(np.isnan(qc_mask) | (qc_mask < .95)) & (frame['qc_percent'] > .95), loc].plot(style='k.', alpha=.2)
frame.ix[~np.isnan(qc_mask) & (qc_mask > .95) & (frame['qc_percent'] > .95), loc].plot(style='r.')
plt.xlabel('Time')
plt.title(loc)
def make_plots_here(dirname, frame):
for qc_variable in ([
'ABBapexTemp',
'ABBtopTemp',
'ABBbottomTemp',
'HBBapexTemp',
'HBBtopTemp',
'HBBbottomTemp',
'calibrationAmbientTemp']):
plot_variable_qc(frame, qc_variable, os.path.join(dirname, qc_variable+'.png'))
def get_qc_frame(qc_path):
nc = netCDF4.Dataset(qc_path) nc = netCDF4.Dataset(qc_path)
frame = pd.DataFrame({k:v[:] for k,v in nc.variables.items()}) qc_percent_var = nc.variables['qc_percent']
frame.index = pd.to_datetime((frame['base_time'] + frame['time_offset']), utc=True) if (qc_percent_var[:] > .95).any():
dependent_checks = qc_percent_var.depends.split(',')
for check in dependent_checks:
if (nc.variables[check][:] > .95).any():
plots[check] = list(plot_check(nc, check, sum_hk))
nc.close() nc.close()
return flask.render_template('qc.html', qc_path=qc_path, plots=plots)
def plot_check(nc, check, sum_hk):
check_var = nc.variables[check]
passes_qc = check_var[:] < .95
for depend in check_var.depends.split(','):
if depend in sum_hk.columns:
fig = plt.figure()
sum_hk.reset_index()[depend].ix[(nc.variables['qc_percent'][:] < .95) & passes_qc].plot(style='b.')
sum_hk.reset_index()[depend].ix[(nc.variables['qc_percent'][:] > .95) & passes_qc].plot(style='k.',alpha=.2)
sum_hk.reset_index()[depend].ix[~passes_qc].plot(style='r.')
plt.xlabel('Record')
plt.title(depend)
yield mpld3.fig_to_html(fig)
elif depend in nc.variables.keys():
# Recurse
yield from plot_check(nc, depend, sum_hk)
def get_qc_frame(qc_path):
return frame return frame
def generate_plots(qc_file, cxs_file, sum_file): def generate_plots(qc_file, cxs_file, sum_file):
...@@ -108,13 +77,9 @@ if __name__ == '__main__': ...@@ -108,13 +77,9 @@ if __name__ == '__main__':
import argparse import argparse
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument('ftp') parser.add_argument('ftp')
parser.add_argument('--serve', action='store_true')
args = parser.parse_args() args = parser.parse_args()
if not args.serve: global_ftp_dir = os.path.abspath(args.ftp)
generate_all_plots(os.path.abspath(args.ftp)) app.run('0.0.0.0', debug=True)
else:
global_ftp_dir = os.path.abspath(args.ftp)
app.run('0.0.0.0', debug=True)
...@@ -4,9 +4,11 @@ ...@@ -4,9 +4,11 @@
</head> </head>
<body> <body>
<h1>{{qc_path}}</h1> <h1>{{qc_path}}</h1>
<pre>{{qc_frame}}</pre> {% for check,plots in plots.items() %}
{% for plot in plots %} <h2>{{check}}</h2>
{{plot|safe}} {% for plot in plots %}
{{plot|safe}}
{% endfor %}
{% endfor %} {% endfor %}
</body </body
</html> </html>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment