BmnRoot
Loading...
Searching...
No Matches
utils.py
Go to the documentation of this file.
1import matplotlib.pyplot as plt
2import numpy as np
3import subprocess
4
5from log_time.log_time import TimeStatComputer
6from file_size.file_size import SizeStatComputer
7import file_size.config as config_size
8import log_time.config as config_time
9
10from exceptions import NoDataException
11
12def plot_all_stats(size, time, config_dict, _dir, output, recursive):
13 plt.clf()
14 if size and time:
15 # data = {}
16 print("Calculating both size and time statistics...")
17 computer = SizeStatComputer(config_dict)
18 arr, unit, title, arr_per_event, unit_per_event, title_per_event \
19 = computer.compute(_dir, recursive)
20
21 computer_time = TimeStatComputer(config_dict)
22 arr_time, unit_time, title_time, arr_per_event_time, unit_per_event_time, title_per_event_time \
23 = computer_time.compute(_dir, recursive)
24
25 fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(20, 10))
26
27 axs[0][0].set_title(title)
28 axs[0][0].hist(arr, bins=config_size.BINS)
29 axs[0][0].axvline(np.mean(arr) if arr.size > 0 else 0, linestyle='dashed', linewidth=1)
30
31 axs[0][1].set_title(title_per_event)
32 axs[0][1].hist(arr_per_event, bins=config_size.BINS_PER_EVENT)
33 axs[0][1].axvline(np.mean(arr_per_event) if arr_per_event.size > 0 else 0, linestyle='dashed', linewidth=1)
34
35 axs[1][0].set_title(title_time)
36 axs[1][0].hist(arr_time, bins=config_time.BINS)
37 axs[1][0].axvline(np.mean(arr_time) if arr_time.size > 0 else 0, linestyle='dashed', linewidth=1)
38
39 axs[1][1].set_title(title_per_event_time)
40 axs[1][1].hist(arr_per_event_time, bins=config_time.BINS_PER_EVENT)
41 axs[1][1].axvline(np.mean(arr_per_event_time) if arr_per_event_time.size > 0 else 0, linestyle='dashed', linewidth=1)
42
43 elif size:
44 print("Calculating file size statistics...")
45 computer = SizeStatComputer(config_dict)
46 try:
47 arr, unit, title, arr_per_event, unit_per_event, title_per_event \
48 = computer.compute(_dir, recursive)
49 except NoDataException:
50 print("\nNo data to display - returning!")
51 return
52
53 fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(20, 10))
54
55 axs[0].set_title(title)
56 axs[0].hist(arr, bins=config_size.BINS)
57 axs[0].axvline(np.mean(arr) if arr.size > 0 else 0, linestyle='dashed', linewidth=1)
58
59 axs[1].set_title(title_per_event)
60 axs[1].hist(arr_per_event, bins=config_size.BINS_PER_EVENT)
61 axs[1].axvline(np.mean(arr_per_event) if arr_per_event.size > 0 else 0, linestyle='dashed', linewidth=1)
62
63 elif time:
64 print("Calculating time statistics...")
65 computer = TimeStatComputer(config_dict)
66 try:
67 arr, unit, title, arr_per_event, unit_per_event, title_per_event \
68 = computer.compute(_dir, recursive)
69 except NoDataException:
70 print("\nNo data to display - returning!")
71 return
72
73 fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(20, 10))
74
75 axs[0].set_title(title)
76 axs[0].hist(arr, bins=config_time.BINS)
77 axs[0].axvline(np.mean(arr) if arr.size > 0 else 0, linestyle='dashed', linewidth=1)
78
79 axs[1].set_title(title_per_event)
80 axs[1].hist(arr_per_event, bins=config_time.BINS_PER_EVENT)
81 axs[1].axvline(np.mean(arr_per_event) if arr_per_event.size > 0 else 0, linestyle='dashed', linewidth=1)
82
83 else:
84 raise Exception('No stats to compute')
85
86 if output is None:
87 plt.show()
88 else:
89 print(f"\nWriting output to {output}")
90 plt.savefig(output, dpi=computer.DPI)
91 try:
92 print("Trying to open graphics...", end="", flush=True)
93 subprocess.getoutput(f"xdg-open {output}")
94 print(" ...ok")
95 except KeyboardInterrupt:
96 print(" ...finishing after ^C")
97 except:
98 print(" ...unsuccessful, please open it yourself.")