-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
91 lines (71 loc) · 3 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import os
from time import gmtime, strftime
from measurement.backscattering import Bw
from measurement.calibration_factor import Nk
from measurement.correction import Correction
from measurement.half_value_layer import HVL
from measurement.mass_eng_abs import Absorption
from utils.utility import calibration_results, config
def main():
print('------------------------------------------------------------------------\n')
# result directory
result_dir = "./results/"+strftime("%Y-%m-%d", gmtime())
os.makedirs(result_dir, exist_ok=True)
# get config
config_path = './configs/config.yaml'
cnfg = config(config_path)
# calculate correction factor
correction_path = './configs/correction.yaml'
corr_cnfg = config(correction_path)
corr = Correction(corr_cnfg)
corr.initiate(result_dir)
# calculate hvl
hvl = HVL(cnfg)
hvl.initiate(result_dir)
# calculate calibration factor
nk = Nk(cnfg, hvl)
nk.initiate(result_dir)
bw = Bw(cnfg, hvl)
bw.initiate(result_dir)
abs = Absorption(hvl)
abs.initiate(result_dir)
calibration_results(cnfg, corr, hvl, nk, bw, abs, result_dir)
def calibration_results(config, corr:object, hvl_df, nk_df, bw_df, abs_df, result_path):
xpsr_time = config["EXPOSURE_TIME"] # min
xpsr_time_sec = xpsr_time*60
hvl = hvl_df.result
nk = nk_df.result
bw = bw_df.result
abs = abs_df.result
if hvl_df.filter['type'] == 'F1':
df = hvl.loc[:, ['kVp', 'mA', 'HVL [mm in Al]']]
elif hvl_df.filter['type'] == 'F2':
df = hvl.loc[:, ['kVp', 'mA', 'HVL [mm in Cu]']]
else:
print('Invalid filter')
quit()
df['Nk(Gy/nC)'] = nk.loc[:, 'Nk(Gy/nC)']
df['μ/ρ'] = abs.loc[:, 'μ/ρ']
df['Bw'] = bw[bw['diameter'] == bw_df.diameter].iloc[:, 2:].transpose().reset_index(drop=True)
df['M'] = hvl.loc[:, 'N_avg [nC]']*corr.P_Polar*corr.P_Elec*corr.P_TP*corr.P_Ion
df['K_air'] = df['M']*df['Nk(Gy/nC)']*corr.P_Stem_Air
df['Dose rate(Gy/min)'] = (df['M']*df['Nk(Gy/nC)']*df['Bw']*corr.P_Stem_Air*df['μ/ρ'])/(xpsr_time+corr.P_End)
time_for_one_Gy = xpsr_time_sec / df['Dose rate(Gy/min)']
rounded_time_for_one_Gy = round(time_for_one_Gy)
gy_for_rounded_time = (df['Dose rate(Gy/min)'] * rounded_time_for_one_Gy)/xpsr_time_sec
df['time(sec)'] = rounded_time_for_one_Gy.astype(int)
df['Dose(Gy)'] = gy_for_rounded_time
df.to_excel(result_path+f'/{hvl_df.filter["type"]}_results.xlsx', index=False, sheet_name='merge')
print('------------------------------------------------------------------------')
print(f'\nCALIBRATION RESULTS\n')
print(f' Field')
print(f' shape: {config["FIELD"]["shape"]}')
print(f' size: {config["FIELD"]["size"]} cm^2')
print(f'\n SSD: {config["SSD"]} cm')
print(f'\n Filter: {config["FILTER"]["type"]}\n')
print(' Correction factor\n')
print(corr.result, end='\n\n')
print(' Results\n')
print(df)
if __name__ == "__main__":
main()