Loading pysen/history.py +13 −11 Original line number Diff line number Diff line Loading @@ -41,18 +41,18 @@ def list_variables(filenames): break if rekw.search(line): tag = ElementTree.fromstring(line) vals = _evaluate(tag.text) name = tag.attrib['name'] results[name] = results.setdefault(name, 0) + 1 results = results.keys() results.sort() results[name] = vals return results def extract_data(filenames, patterns, start_date=None, verbose=True): def extract_data(filenames, patterns, start_date=None, stop_date=None, verbose=True): "extract history data from history.log type files" found = patterns[:] header = dict.fromkeys(patterns) result = { patt: list() for patt in patterns } patterns = { patt: re.compile(patt) for patt in patterns } for filename in filenames: _fname, fext = os.path.splitext(filename) _open = open Loading @@ -65,27 +65,29 @@ def extract_data(filenames, patterns, start_date=None, verbose=True): tag = ElementTree.fromstring(line) vals = _evaluate(tag.text) date = datetime.strptime(tag.attrib['time'], "%Y/%m/%d %H:%M:%S") if start_date and date < start_date: continue if not header[patt]: header[patt] = ['Date Time', ] + [ "%s_%d" % (patt, _x+1) for _x in range(len(vals))] if not result[patt]: result[patt] = [] if start_date and date < start_date: continue if stop_date and date > stop_date: break result[patt].append([date, ]+vals) break if verbose: print 'read', filename found = [] for patt in patterns: if header[patt] is None: print "*WARNING*: pattern", patt, "not found" found.remove(patt) continue if verbose: print patt, header[patt] tmp = pd.DataFrame(result[patt], columns=header[patt]) found.append(patt) result[patt] = tmp.sort() return found, result Loading scripts/plot_var.py +87 −28 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ Piotr Zolnierczuk, JCNS FZ-Juelich, 2013 """ import os import argparse import matplotlib.pyplot as plt import datetime as dt Loading @@ -18,12 +18,20 @@ from pysen.history import extract_data, list_variables def plot_var(data, names, columns=None): "plot variable" nplots = len(names) _fig, axes = plt.subplots(nplots, 1, sharex=True) fig, axes = plt.subplots(nplots, 1, sharex=True) min_date = None max_date = None for iplot, name in enumerate(names): datap = data[name] if datap is None: continue xdates = min(datap['Date Time']), max(datap['Date Time']) if min_date is None or xdates[0] < min_date: min_date = xdates[0] if max_date is None or xdates[1] > max_date: max_date = xdates[1] if columns and columns.get(name): cols = columns.get(name) Loading @@ -45,7 +53,11 @@ def plot_var(data, names, columns=None): datap.plot(ax=axs, x='Date Time', y=cols) axs.grid(True) axs.legend(loc='best') axs.set_xlabel('') fig.subplots_adjust(hspace=0.05) fig.suptitle("NSE History from %s to %s" % (min_date.strftime("%Y-%m-%d %H:%M"), max_date.strftime("%Y-%m-%d %H:%M"))) def plot_sc(data): "special plot SC Temps and Currents" Loading @@ -53,7 +65,7 @@ def plot_sc(data): data['i00']['i00_3'] = data['i00']['i00_3'] data['i00'].columns = ['Date Time', 'SC Current', 'SC Setpoint' ,'SC Voltage' ] _fig, ax1 = plt.subplots() fig, ax1 = plt.subplots() ax2 = ax1.twinx() data['SC1'].plot(ax=ax1, x='Date Time', y=['SC1_3', 'SC1_4' ], style=['b-', 'g-']) Loading @@ -63,12 +75,20 @@ def plot_sc(data): ax2.set_ylim((-1, 1)) ax2.set_ylabel('Current [kA], |Voltage[V]|') ax2.set_xlabel('') ax2.legend(loc='upper right') ax1.grid(True) ax1.set_ylabel('SC Temperature [K]') ax1.set_xlabel('') ax1.legend(loc='upper left') min_date, max_date = min(data['i00']['Date Time']), max(data['i00']['Date Time']) fig.subplots_adjust(hspace=0.05) fig.suptitle("NSE History from %s to %s" % (min_date.strftime("%Y-%m-%d %H:%M"), max_date.strftime("%Y-%m-%d %H:%M"))) def parse_indices(args): "parse indices" Loading @@ -82,56 +102,95 @@ def parse_indices(args): cols[key] = vals return names, cols def parse_date(arg): "parse date" formats = [ "%Y-%m-%d", "%Y-%m-%d %H", "%Y-%m-%d %H:%M", "%Y-%m-%d %H:%M:%S" ] res = None for fmt in formats: try: res = dt.datetime.strptime(arg, fmt) break except ValueError: pass if not res: raise ValueError return res def main(): "run the script" coil_patt = ['SC1', 'SC2', 'i00'] coil_patt = ['SC1', 'SC2', 'i00'] # for -C option parser = argparse.ArgumentParser(description='plot var') parser.add_argument('file', metavar='filename', help='file to process', nargs='+') description = """ Plot selected variables from history file. NSE_HISTORY_LOG environment varable may be used to specify history file. """ group = parser.add_mutually_exclusive_group() group.add_argument('--name', '-n', dest='name', default=['Oil',], type=str, nargs='*', help='set variable name (default=%(default)s)') group.add_argument('--coils', '-C', action='store_true', help='special plot - superconducting coils') parser = argparse.ArgumentParser(description=description) parser.add_argument('file', metavar='filename', help='file to process', nargs='*') group = parser.add_mutually_exclusive_group(required=True) group.add_argument('--list', '-l', action='store_true', help='list variables to plot') group.add_argument('--coils', '-C', action='store_true', help='special plot - superconducting coils') group.add_argument('--name', '-n', dest='name', metavar='var', type=str, nargs='+', help='set variable name') #parser.add_argument('--col1', '-c1', dest='c1', type=int, default=1, # help='set first col to show (default=%(default)s)') #parser.add_argument('--col2', '-c2', dest='c2', type=int, default=None, # help='set last col to show (default=%(default)s)') parser.add_argument('--start-date', '-s', dest='start', help='set start date (YYYY-mm-dd)') parser.add_argument('--begin', '-b', dest='begin', metavar='date', type=parse_date, help='set begin/start date (YYYY-mm-dd [HH:MM:SS])') parser.add_argument('--end', '-e', dest='end', metavar='date', type=parse_date, help='set end/stop date (YYYY-mm-dd [HH:MM:SS])') parser.add_argument('--noplot', action='store_true', help=argparse.SUPPRESS) args = parser.parse_args() # list variables # if no files to process let's check NSE_HISTORY_LOG env variable if not args.file: envfile = os.getenv('NSE_HISTORY_LOG') if envfile: args.file = [envfile,] else: parser.error('no files to process') # list available variables if args.list: print list_variables(args.file) vardict = list_variables(args.file) keys = vardict.keys() keys.sort() for key in keys: if vardict[key]: print "%-20s" % key, vardict[key] print return if args.coils: args.name = coil_patt if args.start: try: args.start = dt.datetime.strptime(args.start, "%Y-%m-%d") except ValueError: args.start = dt.datetime.strptime(args.start, "%Y-%m-%d %H:%M:%S") names, columns = parse_indices(args.name) found, data = extract_data(args.file, names, start_date=args.begin, stop_date=args.end) if not found: parser.error("no variables found, use -l to list available vars") found, data = extract_data(args.file, patterns=names, start_date=args.start) if args.coils: plot_sc(data) else: plot_var(data, found, columns=columns) if args.noplot: return plt.show() Loading Loading
pysen/history.py +13 −11 Original line number Diff line number Diff line Loading @@ -41,18 +41,18 @@ def list_variables(filenames): break if rekw.search(line): tag = ElementTree.fromstring(line) vals = _evaluate(tag.text) name = tag.attrib['name'] results[name] = results.setdefault(name, 0) + 1 results = results.keys() results.sort() results[name] = vals return results def extract_data(filenames, patterns, start_date=None, verbose=True): def extract_data(filenames, patterns, start_date=None, stop_date=None, verbose=True): "extract history data from history.log type files" found = patterns[:] header = dict.fromkeys(patterns) result = { patt: list() for patt in patterns } patterns = { patt: re.compile(patt) for patt in patterns } for filename in filenames: _fname, fext = os.path.splitext(filename) _open = open Loading @@ -65,27 +65,29 @@ def extract_data(filenames, patterns, start_date=None, verbose=True): tag = ElementTree.fromstring(line) vals = _evaluate(tag.text) date = datetime.strptime(tag.attrib['time'], "%Y/%m/%d %H:%M:%S") if start_date and date < start_date: continue if not header[patt]: header[patt] = ['Date Time', ] + [ "%s_%d" % (patt, _x+1) for _x in range(len(vals))] if not result[patt]: result[patt] = [] if start_date and date < start_date: continue if stop_date and date > stop_date: break result[patt].append([date, ]+vals) break if verbose: print 'read', filename found = [] for patt in patterns: if header[patt] is None: print "*WARNING*: pattern", patt, "not found" found.remove(patt) continue if verbose: print patt, header[patt] tmp = pd.DataFrame(result[patt], columns=header[patt]) found.append(patt) result[patt] = tmp.sort() return found, result Loading
scripts/plot_var.py +87 −28 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ Piotr Zolnierczuk, JCNS FZ-Juelich, 2013 """ import os import argparse import matplotlib.pyplot as plt import datetime as dt Loading @@ -18,12 +18,20 @@ from pysen.history import extract_data, list_variables def plot_var(data, names, columns=None): "plot variable" nplots = len(names) _fig, axes = plt.subplots(nplots, 1, sharex=True) fig, axes = plt.subplots(nplots, 1, sharex=True) min_date = None max_date = None for iplot, name in enumerate(names): datap = data[name] if datap is None: continue xdates = min(datap['Date Time']), max(datap['Date Time']) if min_date is None or xdates[0] < min_date: min_date = xdates[0] if max_date is None or xdates[1] > max_date: max_date = xdates[1] if columns and columns.get(name): cols = columns.get(name) Loading @@ -45,7 +53,11 @@ def plot_var(data, names, columns=None): datap.plot(ax=axs, x='Date Time', y=cols) axs.grid(True) axs.legend(loc='best') axs.set_xlabel('') fig.subplots_adjust(hspace=0.05) fig.suptitle("NSE History from %s to %s" % (min_date.strftime("%Y-%m-%d %H:%M"), max_date.strftime("%Y-%m-%d %H:%M"))) def plot_sc(data): "special plot SC Temps and Currents" Loading @@ -53,7 +65,7 @@ def plot_sc(data): data['i00']['i00_3'] = data['i00']['i00_3'] data['i00'].columns = ['Date Time', 'SC Current', 'SC Setpoint' ,'SC Voltage' ] _fig, ax1 = plt.subplots() fig, ax1 = plt.subplots() ax2 = ax1.twinx() data['SC1'].plot(ax=ax1, x='Date Time', y=['SC1_3', 'SC1_4' ], style=['b-', 'g-']) Loading @@ -63,12 +75,20 @@ def plot_sc(data): ax2.set_ylim((-1, 1)) ax2.set_ylabel('Current [kA], |Voltage[V]|') ax2.set_xlabel('') ax2.legend(loc='upper right') ax1.grid(True) ax1.set_ylabel('SC Temperature [K]') ax1.set_xlabel('') ax1.legend(loc='upper left') min_date, max_date = min(data['i00']['Date Time']), max(data['i00']['Date Time']) fig.subplots_adjust(hspace=0.05) fig.suptitle("NSE History from %s to %s" % (min_date.strftime("%Y-%m-%d %H:%M"), max_date.strftime("%Y-%m-%d %H:%M"))) def parse_indices(args): "parse indices" Loading @@ -82,56 +102,95 @@ def parse_indices(args): cols[key] = vals return names, cols def parse_date(arg): "parse date" formats = [ "%Y-%m-%d", "%Y-%m-%d %H", "%Y-%m-%d %H:%M", "%Y-%m-%d %H:%M:%S" ] res = None for fmt in formats: try: res = dt.datetime.strptime(arg, fmt) break except ValueError: pass if not res: raise ValueError return res def main(): "run the script" coil_patt = ['SC1', 'SC2', 'i00'] coil_patt = ['SC1', 'SC2', 'i00'] # for -C option parser = argparse.ArgumentParser(description='plot var') parser.add_argument('file', metavar='filename', help='file to process', nargs='+') description = """ Plot selected variables from history file. NSE_HISTORY_LOG environment varable may be used to specify history file. """ group = parser.add_mutually_exclusive_group() group.add_argument('--name', '-n', dest='name', default=['Oil',], type=str, nargs='*', help='set variable name (default=%(default)s)') group.add_argument('--coils', '-C', action='store_true', help='special plot - superconducting coils') parser = argparse.ArgumentParser(description=description) parser.add_argument('file', metavar='filename', help='file to process', nargs='*') group = parser.add_mutually_exclusive_group(required=True) group.add_argument('--list', '-l', action='store_true', help='list variables to plot') group.add_argument('--coils', '-C', action='store_true', help='special plot - superconducting coils') group.add_argument('--name', '-n', dest='name', metavar='var', type=str, nargs='+', help='set variable name') #parser.add_argument('--col1', '-c1', dest='c1', type=int, default=1, # help='set first col to show (default=%(default)s)') #parser.add_argument('--col2', '-c2', dest='c2', type=int, default=None, # help='set last col to show (default=%(default)s)') parser.add_argument('--start-date', '-s', dest='start', help='set start date (YYYY-mm-dd)') parser.add_argument('--begin', '-b', dest='begin', metavar='date', type=parse_date, help='set begin/start date (YYYY-mm-dd [HH:MM:SS])') parser.add_argument('--end', '-e', dest='end', metavar='date', type=parse_date, help='set end/stop date (YYYY-mm-dd [HH:MM:SS])') parser.add_argument('--noplot', action='store_true', help=argparse.SUPPRESS) args = parser.parse_args() # list variables # if no files to process let's check NSE_HISTORY_LOG env variable if not args.file: envfile = os.getenv('NSE_HISTORY_LOG') if envfile: args.file = [envfile,] else: parser.error('no files to process') # list available variables if args.list: print list_variables(args.file) vardict = list_variables(args.file) keys = vardict.keys() keys.sort() for key in keys: if vardict[key]: print "%-20s" % key, vardict[key] print return if args.coils: args.name = coil_patt if args.start: try: args.start = dt.datetime.strptime(args.start, "%Y-%m-%d") except ValueError: args.start = dt.datetime.strptime(args.start, "%Y-%m-%d %H:%M:%S") names, columns = parse_indices(args.name) found, data = extract_data(args.file, names, start_date=args.begin, stop_date=args.end) if not found: parser.error("no variables found, use -l to list available vars") found, data = extract_data(args.file, patterns=names, start_date=args.start) if args.coils: plot_sc(data) else: plot_var(data, found, columns=columns) if args.noplot: return plt.show() Loading