1
- import argparse
2
- # from pathlib import Path
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
3
4
+ import argparse
4
5
from mpl_toolkits .axes_grid1 import host_subplot
6
+ from matplotlib .ticker import AutoMinorLocator
5
7
import mpl_toolkits .axisartist as AA
6
8
import matplotlib .pyplot as plt
7
- # ^^^ = from matplotlib.pyplot import axvline, savefig, subplots, annotate
8
-
9
9
from pycorn import pc_res3
10
10
11
- parser = argparse . ArgumentParser ()
11
+ pcscript_version = 0.13
12
12
13
+ parser = argparse .ArgumentParser (
14
+ description = "Extract data from UNICORN .res files to .csv/.txt and plot them (matplotlib required)" ,
15
+ epilog = "Make it so!" )
16
+ parser .add_argument ("-c" , "--check" ,
17
+ help = "Perform simple check if file is supported" ,
18
+ action = "store_true" )
19
+ parser .add_argument ("-n" , "--info" ,
20
+ help = "Display entries in header" ,
21
+ action = "store_true" )
22
+ parser .add_argument ("-i" , "--inject" , type = int , default = None ,
23
+ help = "Set injection number # as zero retention, use -t to find injection points" ,
24
+ metavar = "#" )
25
+ parser .add_argument ("-r" , "--reduce" , type = int , default = 1 ,
26
+ help = "Write/Plot only every n sample" ,
27
+ metavar = "#" )
28
+ parser .add_argument ("-t" , "--points" ,
29
+ help = "Display injection points" ,
30
+ action = "store_true" )
31
+
32
+ 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" )
36
+
37
+ group1 = parser .add_argument_group ('Plotting' , 'Options for plotting' )
38
+ group1 .add_argument ("-p" , "--plot" ,
39
+ help = 'Plot curves' ,
40
+ action = "store_true" )
41
+ group1 .add_argument ("--no_fractions" ,
42
+ help = "Disable plotting of fractions" ,
43
+ action = "store_false" )
44
+ group1 .add_argument ("--xmin" , type = float , default = None ,
45
+ help = "Lower bound on the x-axis" ,
46
+ metavar = "#" )
47
+ group1 .add_argument ("--xmax" , type = float , default = None ,
48
+ help = "Upper bound on the x-axis" ,
49
+ metavar = "#" )
50
+ group1 .add_argument ("--par1" , type = str , default = 'Cond' ,
51
+ help = "Data for 2nd y-axis (Default=Cond)" )
52
+ group1 .add_argument ("--par2" , type = str , default = None ,
53
+ help = "Data for 3rd y-axis (Default=None)" )
54
+ group1 .add_argument ('-f' , '--format' , type = str ,
55
+ choices = ['svg' ,'svgz' ,'tif' ,'tiff' ,'jpg' ,'jpeg' ,
56
+ 'png' ,'ps' ,'eps' ,'raw' ,'rgba' ,'pdf' ,'pgf' ],
57
+ default = 'pdf' ,
58
+ help = "File format of plot files (default: pdf)" )
59
+ group1 .add_argument ('-d' , '--dpi' , default = 300 , type = int ,
60
+ help = "DPI (dots per inch) for raster images (png, jpg, etc.). Default is 300." )
61
+ parser .add_argument ("-u" , "--user" ,
62
+ help = "Show stored user name" ,
63
+ action = "store_true" )
64
+ parser .add_argument ('--version' , action = 'version' , version = str (pcscript_version ))
13
65
parser .add_argument ("inp_res" ,
14
66
help = "Input .res file(s)" ,
15
67
nargs = '+' ,
16
68
metavar = "<file>.res" )
17
- parser .add_argument ("-e" , "--ext" , default = '.pdf' ,
18
- help = "Image type to use, e.g. 'jpg', 'png', 'eps', or 'pdf' (default: pdf)" )
19
- parser .add_argument ("--xmin" , default = None , type = float ,
20
- help = "Lower bound on the x-axis" )
21
- parser .add_argument ("--xmax" , default = None , type = float ,
22
- help = "Upper bound on the x-axis" )
23
- parser .add_argument ("--dpi" , default = None , type = int ,
24
- help = "DPI (dots per inch) for raster images (png, jpg, etc.)" )
25
- parser .add_argument ("--par1" , default = None , type = str ,
26
- help = "First parasite" )
27
- parser .add_argument ("--par2" , default = None , type = str ,
28
- help = "Second parasite" )
29
-
30
-
31
69
32
70
args = parser .parse_args ()
33
71
34
-
35
72
def mapper (min_val , max_val , perc ):
36
73
'''
37
74
calculate relative position in delta min/max
@@ -177,26 +214,56 @@ def plotterX(inp,fname):
177
214
print ("Plotting: " + par2_data ['data_name' ])
178
215
p2 , = par2 .plot (x_dat_p2 , y_dat_p2 , label = par2_data ['data_name' ], color = stl ['color' ],
179
216
ls = stl ['ls' ], lw = stl ['lw' ], alpha = stl ['alpha' ])
180
- try :
181
- frac_data = inp ['Fractions' ]['data' ]
182
- frac_x , frac_y = xy_data (frac_data )
183
- frac_delta = [abs (a - b ) for a , b in zip (frac_x , frac_x [1 :])]
184
- frac_delta .append (frac_delta [- 1 ])
185
- frac_y_pos = mapper (host .get_ylim ()[0 ], host .get_ylim ()[1 ], 0.015 )
186
- for i in frac_data :
187
- host .axvline (x = i [0 ], ymin = 0.065 , ymax = 0.0 , color = 'r' , linewidth = 0.85 )
188
- host .annotate (str (i [1 ]), xy = (i [0 ] + frac_delta [frac_data .index (i )] * 0.55 , frac_y_pos ),
217
+ if args .no_fractions :
218
+ try :
219
+ frac_data = inp ['Fractions' ]['data' ]
220
+ frac_x , frac_y = xy_data (frac_data )
221
+ frac_delta = [abs (a - b ) for a , b in zip (frac_x , frac_x [1 :])]
222
+ frac_delta .append (frac_delta [- 1 ])
223
+ frac_y_pos = mapper (host .get_ylim ()[0 ], host .get_ylim ()[1 ], 0.015 )
224
+ for i in frac_data :
225
+ host .axvline (x = i [0 ], ymin = 0.065 , ymax = 0.0 , color = 'r' , linewidth = 0.85 )
226
+ host .annotate (str (i [1 ]), xy = (i [0 ] + frac_delta [frac_data .index (i )] * 0.55 , frac_y_pos ),
189
227
horizontalalignment = 'center' , verticalalignment = 'bottom' , size = 8 , rotation = 90 )
190
- except :
191
- KeyError
228
+ except :
229
+ KeyError
192
230
host .set_xlim (plot_x_min , plot_x_max )
193
- host .legend (fontsize = 8 , fancybox = True , labelspacing = 0.4 )
231
+ host .legend (fontsize = 8 , fancybox = True , labelspacing = 0.4 , loc = 'upper right' )
232
+ host .xaxis .set_minor_locator (AutoMinorLocator ())
233
+ host .yaxis .set_minor_locator (AutoMinorLocator ())
194
234
plt .title (fname , loc = 'left' )
195
235
internal_run_name = str (inp ['Logbook' ]['run_name' ])
196
- plot_file = fname [:- 4 ] + "_" + internal_run_name + "_plot" + args .ext
236
+ plot_file = fname [:- 4 ] + "_" + internal_run_name + "_plot. " + args .format
197
237
plt .savefig (plot_file , bbox_inches = 'tight' , dpi = args .dpi )
198
238
print ("Plot saved to: " + plot_file )
199
- #4e62ff
239
+
240
+ def data_writer1 (fname , inp ):
241
+ '''
242
+ writes sensor/run-data to csv-files
243
+ '''
244
+ run_name = inp ['Logbook' ]['run_name' ]
245
+ for i in inp .keys ():
246
+ print ("Extracting: " + inp [i ]['data_name' ])
247
+ outfile_base = fname [:- 4 ] + "_" + run_name + "_" + inp [i ]['data_name' ]
248
+ type = inp [i ]['data_type' ]
249
+ if type == 'meta' :
250
+ data = inp [i ]['data' ]
251
+ data_to_write = data .encode ('utf-8' )
252
+ ext = '.txt'
253
+ sep = '\t '
254
+ with open (outfile_base + ext , 'wb' ) as fout :
255
+ fout .write (data_to_write )
256
+ else :
257
+ x_dat ,y_dat = xy_data (inp [i ]['data' ])
258
+ ext = '.csv'
259
+ sep = ','
260
+ with open (outfile_base + ext , 'wb' ) as fout :
261
+ for x ,y in zip (x_dat ,y_dat ):
262
+ dp = str (x ) + sep + str (y ) + str ('\r \n ' )
263
+ data_to_write = dp .encode ('utf-8' )
264
+ fout .write (data_to_write )
265
+
266
+
200
267
styles = {'UV' :{'color' : '#1919FF' , 'lw' : 1.6 , 'ls' : "-" , 'alpha' :1.0 },
201
268
'UV1_' :{'color' : '#1919FF' , 'lw' : 1.6 , 'ls' : "-" , 'alpha' :1.0 },
202
269
'UV2_' :{'color' : '#e51616' , 'lw' : 1.4 , 'ls' : "-" , 'alpha' :1.0 },
@@ -208,10 +275,25 @@ def plotterX(inp,fname):
208
275
'Inje' :{'color' : '#d56d9d' , 'lw' : 1.0 , 'ls' : "-" , 'alpha' :0.75 },
209
276
'pH' :{'color' : '#0C7F7F' , 'lw' : 1.0 , 'ls' : "-" , 'alpha' :0.75 },}
210
277
278
+
211
279
def main2 ():
212
280
for fname in args .inp_res :
213
- fdata = pc_res3 (fname )
281
+ if args .inject == None :
282
+ args .inject = - 1
283
+ fdata = pc_res3 (fname , reduce = args .reduce , inj_sel = args .inject )
214
284
fdata .load ()
215
- plotterX (fdata , fname )
285
+ if args .extract :
286
+ data_writer1 (fname , fdata )
287
+ if args .check :
288
+ fdata .input_check (show = True )
289
+ if args .info :
290
+ fdata .showheader ()
291
+ if args .points :
292
+ fdata .inject_det (show = True )
293
+ if args .user :
294
+ user = fdata .get_user ()
295
+ print ("User: " + user )
296
+ if args .plot :
297
+ plotterX (fdata , fname )
216
298
217
299
main2 ()
0 commit comments