Skip to content

Commit f87a42d

Browse files
committed
xlsx output added
- output to xlsx possible (requires xlsxwriter) - minor fixes
1 parent db699ec commit f87a42d

2 files changed

Lines changed: 73 additions & 17 deletions

File tree

examplescripts/pycorn-bin.py

Lines changed: 71 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,33 @@
11
#!/usr/bin/env python
22
# -*- coding: utf-8 -*-
3-
3+
'''
4+
PyCORN - script to extract data from .res (results) files generated
5+
by UNICORN Chromatography software supplied with ÄKTA Systems
6+
(c)2014-2015 - Yasar L. Ahmed
7+
v0.14
8+
'''
49
import argparse
5-
from mpl_toolkits.axes_grid1 import host_subplot
6-
from matplotlib.ticker import AutoMinorLocator
7-
import mpl_toolkits.axisartist as AA
8-
import matplotlib.pyplot as plt
910
from pycorn import pc_res3
11+
try:
12+
from mpl_toolkits.axes_grid1 import host_subplot
13+
from matplotlib.ticker import AutoMinorLocator
14+
import mpl_toolkits.axisartist as AA
15+
import matplotlib.pyplot as plt
16+
plotting = True
17+
except:
18+
ImportError
19+
print("WARNING: Matplotlib not found - Plotting disabled!")
20+
plotting = False
21+
22+
try:
23+
import xlsxwriter
24+
xlsx = True
25+
except:
26+
ImportError
27+
print("WARNING: xlsxwriter not found - xlsx-output disabled!")
28+
xlsx = False
1029

11-
pcscript_version = 0.13
30+
pcscript_version = 0.14
1231

1332
parser = argparse.ArgumentParser(
1433
description = "Extract data from UNICORN .res files to .csv/.txt and plot them (matplotlib required)",
@@ -30,9 +49,8 @@
3049
action = "store_true")
3150

3251
group0 = parser.add_argument_group('Extracting', 'Options for writing csv/txt files')
33-
group0.add_argument("-e", "--extract",
34-
help = "Write csv file for supported data blocks",
35-
action = "store_true")
52+
group0.add_argument("-e", "--extract", type=str, choices=['csv','xlsx'],
53+
help = "Write data to csv or xlsx file for supported data blocks")
3654

3755
group1 = parser.add_argument_group('Plotting', 'Options for plotting')
3856
group1.add_argument("-p", "--plot",
@@ -185,6 +203,8 @@ def plotterX(inp,fname):
185203
stl = styles[i[:4]]
186204
p0, = host.plot(x_dat, y_dat, label=inp[i]['data_name'], color=stl['color'],
187205
ls=stl['ls'], lw=stl['lw'],alpha=stl['alpha'])
206+
if args.par1 == 'None':
207+
args.par1 = None
188208
if args.par1:
189209
try:
190210
par1_inp = args.par1
@@ -238,15 +258,14 @@ def plotterX(inp,fname):
238258
KeyError
239259
if inp.inject_vol != 0.0:
240260
injections = inp.injection_points
241-
host.axvline(x=injections[args.inject], ymin=0.10, ymax=0.0, color='#FF3292',
261+
host.axvline(x=0, ymin=0.10, ymax=0.0, color='#FF3292',
242262
ls ='-', marker='v', markevery=2, linewidth=1.5, alpha=0.85, label='Inject')
243263
host.set_xlim(plot_x_min, plot_x_max)
244264
host.legend(fontsize=8, fancybox=True, labelspacing=0.4, loc='upper right', numpoints=1)
245265
host.xaxis.set_minor_locator(AutoMinorLocator())
246266
host.yaxis.set_minor_locator(AutoMinorLocator())
247267
plt.title(fname, loc='left', size=8)
248-
internal_run_name = str(inp['Logbook']['run_name'])
249-
plot_file = fname[:-4] + "_" + internal_run_name + "_plot." + args.format
268+
plot_file = fname[:-4] + "_" + inp.run_name + "_plot." + args.format
250269
plt.savefig(plot_file, bbox_inches='tight', dpi=args.dpi)
251270
print("Plot saved to: " + plot_file)
252271
plt.clf()
@@ -255,10 +274,9 @@ def data_writer1(fname, inp):
255274
'''
256275
writes sensor/run-data to csv-files
257276
'''
258-
run_name = inp['Logbook']['run_name']
259277
for i in inp.keys():
260-
print("Extracting: " + inp[i]['data_name'])
261-
outfile_base = fname[:-4] + "_" + run_name + "_" + inp[i]['data_name']
278+
print("Writing: " + inp[i]['data_name'])
279+
outfile_base = fname[:-4] + "_" + inp.run_name + "_" + inp[i]['data_name']
262280
type = inp[i]['data_type']
263281
if type == 'meta':
264282
data = inp[i]['data']
@@ -277,6 +295,40 @@ def data_writer1(fname, inp):
277295
data_to_write = dp.encode('utf-8')
278296
fout.write(data_to_write)
279297

298+
def generate_xls(inp, fname):
299+
'''
300+
Input = pycorn object
301+
output = xlsx file
302+
'''
303+
xls_filename = fname[:-4] + "_" + inp.run_name + ".xlsx"
304+
workbook = xlsxwriter.Workbook(xls_filename)
305+
worksheet = workbook.add_worksheet()
306+
writable_blocks = [inp.Fractions_id, inp.Fractions_id2, inp.SensData_id, inp.SensData_id2]
307+
d_list = []
308+
for i in inp.keys():
309+
if inp[i]['magic_id'] in writable_blocks:
310+
d_list.append(i)
311+
for i in d_list:
312+
dat = inp[i]['data']
313+
try:
314+
unit = inp[i]['unit']
315+
except:
316+
KeyError
317+
unit = 'Fraction'
318+
header1 = (inp[i]['data_name'], '')
319+
header2 = ('ml', unit)
320+
dat.insert(0, header1)
321+
dat.insert(1, header2)
322+
row = 0
323+
col = d_list.index(i) *2
324+
print("Writing: " + i)
325+
for x_val, y_val in (dat):
326+
worksheet.write(row, col, x_val)
327+
worksheet.write(row, col + 1, y_val)
328+
row += 1
329+
workbook.close()
330+
print("Data written to: " + xls_filename)
331+
280332

281333
styles = {'UV':{'color': '#1919FF', 'lw': 1.6, 'ls': "-", 'alpha':1.0},
282334
'UV1_':{'color': '#1919FF', 'lw': 1.6, 'ls': "-", 'alpha':1.0},
@@ -296,8 +348,10 @@ def main2():
296348
args.inject = -1
297349
fdata = pc_res3(fname, reduce = args.reduce, inj_sel=args.inject)
298350
fdata.load()
299-
if args.extract:
351+
if args.extract == 'csv':
300352
data_writer1(fname, fdata)
353+
if args.extract == 'xlsx' and xlsx == True:
354+
generate_xls(fdata, fname)
301355
if args.check:
302356
fdata.input_check(show=True)
303357
if args.info:
@@ -307,7 +361,7 @@ def main2():
307361
if args.user:
308362
user = fdata.get_user()
309363
print("User: " + user)
310-
if args.plot:
364+
if args.plot and plotting:
311365
plotterX(fdata, fname)
312366

313367
main2()

pycorn/pycorn.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ def __init__(self, file_name, reduce=1, inj_sel=-1):
3939
self.inj_sel = inj_sel
4040
self.inject_vol = None
4141
self.header_read = False
42+
self.internal_name = ''
4243

4344
with open(self.file_name, 'rb') as f:
4445
self.raw_data = f.read()
@@ -249,6 +250,7 @@ def load(self, show=False):
249250
extract all data and store in list
250251
'''
251252
self.readheader()
253+
self.run_name = self['Logbook']['run_name']
252254
self.inject_det()
253255
try:
254256
self.inject_vol = self.injection_points[self.inj_sel]

0 commit comments

Comments
 (0)