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+ '''
49import 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
910from 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
1332parser = argparse .ArgumentParser (
1433 description = "Extract data from UNICORN .res files to .csv/.txt and plot them (matplotlib required)" ,
3049 action = "store_true" )
3150
3251group0 = 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
3755group1 = parser .add_argument_group ('Plotting' , 'Options for plotting' )
3856group1 .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
281333styles = {'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
313367main2 ()
0 commit comments