5
5
import pkgutil
6
6
import sys
7
7
import warnings
8
+ import argparse
8
9
9
10
if not pkgutil .find_loader ('pyhande' ):
10
11
_script_dir = os .path .dirname (os .path .abspath (__file__ ))
11
12
sys .path .append (os .path .join (_script_dir , '../pyhande' ))
12
13
import pyhande
13
14
14
- def main (filename ):
15
+
16
+ def parse_args (args ):
17
+ '''Parse command-line arguments.
18
+
19
+ Parameters
20
+ ----------
21
+ args : list of strings
22
+ command-line arguments.
23
+
24
+ Returns
25
+ -------
26
+ options : :class:`ArgumentParser`
27
+ Options read in from command line.
28
+ '''
29
+ parser = argparse .ArgumentParser (usage = __doc__ )
30
+ parser .add_argument ('-s' , '--sim' , action = 'store_true' , default = False ,
31
+ dest = 'multi_sim' , help = 'Do not average over multiple '
32
+ 'simulations in the same or from multiple data files.' )
33
+ parser .add_argument ('filename' , nargs = '+' , help = 'HANDE output.' )
34
+
35
+ options = parser .parse_args (args )
36
+
37
+ if not options .filename :
38
+ parser .print_help ()
39
+ sys .exit (1 )
40
+
41
+ return options
42
+
43
+
44
+ def main (args ):
15
45
''' Analyse the output from a canonical estimates calculation.
16
46
17
47
Parameters
@@ -20,19 +50,17 @@ def main(filename):
20
50
files to be analysed.
21
51
'''
22
52
23
- if len (filename ) < 1 :
24
- print ("Usage: ./analyse_canonical.py files" )
25
- sys .exit ()
53
+ args = parse_args (args )
26
54
27
- hande_out = pyhande .extract .extract_data_sets (filename )
55
+ hande_out = pyhande .extract .extract_data_sets (args . filename )
28
56
29
57
(metadata , data ) = ([], [])
30
58
for (md , df ) in hande_out :
31
59
# Handle old output with incorrect title...
32
60
if md ['calc_type' ] == 'Canonical energy' or md ['calc_type' ] == 'RNG' :
33
61
metadata .append (md )
34
62
data .append (df )
35
- if data :
63
+ if data and not args . multi_sim :
36
64
data = pd .concat (data )
37
65
38
66
# Sanity check: are all the calculations from the same calculation?
@@ -43,7 +71,11 @@ def main(filename):
43
71
if 'beta' in md and md ['beta' ] != beta :
44
72
warnings .warn ('Beta values in input files not consistent.' )
45
73
46
- results = pyhande .canonical .estimates (metadata [0 ], data )
74
+ if args .multi_sim :
75
+ results = pd .concat ([pyhande .canonical .estimates (m , d ) for (m , d )
76
+ in zip (metadata , data )])
77
+ else :
78
+ results = pyhande .canonical .estimates (metadata [0 ], data )
47
79
48
80
try :
49
81
float_fmt = '{0:-#.8e}' .format
0 commit comments