Skip to content

Commit d05504b

Browse files
committed
list of output files must be explicitly passed as cmd argument; files with no data are ignored; other minor edits
1 parent af799ad commit d05504b

File tree

1 file changed

+20
-9
lines changed

1 file changed

+20
-9
lines changed

mctools/fluka/stats.py

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@
44
from sys import exit
55
from glob import glob
66
import re
7+
from math import sqrt, log10, floor
78
import numpy as np
89
import ROOT
910
ROOT.PyConfig.IgnoreCommandLineOptions = True
1011

1112
def Print(vals, ttype):
1213
data = np.array(vals)
13-
print("%s: %.5g stdev: %.5g" % (ttype, np.average(data), np.std(data)))
14+
n = len(data)
15+
print("%s: %.5g ± %.5g sec" % (ttype, np.average(data), np.std(data)/sqrt(n)))
1416

1517
def get(fname, ttype):
1618
if ttype == "average":
@@ -36,31 +38,40 @@ def get(fname, ttype):
3638
except ValueError:
3739
print(f"Can't convert \"{val}\" to float")
3840
raise
39-
raise NameError(f"String \"{sss}\" not found in {fname}")
41+
return None
4042

4143
def main():
4244
""" Print/draw the CPU time statistics based on the FLUKA output files"""
4345

4446
parser = argparse.ArgumentParser(description=main.__doc__,
4547
epilog="Homepage: https://github.com/kbat/mc-tools")
46-
parser.add_argument('-o', dest="out", type=str, default=None, help='optional output file name', required=False)
48+
parser.add_argument('out', type=str, nargs="+", help='List of FLUKA output file(s)')
49+
parser.add_argument('-o', dest="pdf", type=str, default=None, help='optional output PDF file name', required=False)
4750
parser.add_argument('-n', dest="N", type=int, default=10, help='number of histogram bins (make sense with the -o option only)', required=False)
4851
parser.add_argument('-v', '--verbose', action='store_true', default=False, dest='verbose', help='explain what is being done')
4952

5053
args = parser.parse_args()
5154

55+
if args.pdf and not args.pdf.endswith(".pdf"):
56+
print(f"Error: PDF file name is expected: {args.pdf}")
57+
return 1
58+
5259
avals = []
5360
mvals = []
5461

55-
for fname in glob("*.out"):
56-
avals.append(get(fname, "average"))
57-
mvals.append(get(fname, "maximum"))
62+
for fname in args.out:
63+
aval = get(fname, "average")
64+
if aval is not None:
65+
mval = get(fname, "maximum")
66+
if mval is not None:
67+
avals.append(aval)
68+
mvals.append(mval)
5869

5970
Print(avals, "Average")
6071
Print(mvals, "Maximum")
6172
print("TODO: take into account weight reported in Total number of primaries run")
6273

63-
if args.out:
74+
if args.pdf:
6475

6576
ha = ROOT.TH1F("ha", "Average;Time [s];Number of runs", args.N, min(avals)*0.99, max(avals)*1.01)
6677
hm = ROOT.TH1F("hm", "Maximum;Time [s];Number of runs", args.N, min(mvals)*0.99, max(mvals)*1.01)
@@ -72,10 +83,10 @@ def main():
7283
hm.Fill(v)
7384

7485
ha.Draw("hist e")
75-
ROOT.gPad.Print("%s(" % args.out)
86+
ROOT.gPad.Print("%s(" % args.pdf)
7687

7788
hm.Draw("hist e")
78-
ROOT.gPad.Print("%s)" % args.out)
89+
ROOT.gPad.Print("%s)" % args.pdf)
7990

8091
if __name__ == "__main__":
8192
exit(main())

0 commit comments

Comments
 (0)