backscattering-analyzer/src/backscattering_analyzer/settings.py

190 lines
6.9 KiB
Python

from pathlib import Path
from tomllib import load
from rich.console import Console
from rich.theme import Theme
from rich.traceback import install as traceback_install
class Settings:
def __init__(self, options: list):
self.theme = Theme(
{
"main": "white bold",
"option": "grey50 italic",
"argument": "red",
"description": "green italic",
}
)
self.console = Console(theme=self.theme)
traceback_install(console=self.console, show_locals=True)
self.version = "0.1.0"
self.help = (
"[main]display[/main] [option]\\[options][/option]"
"\n [argument]-b --bench[/argument] [description]bench of the experiment[/description]"
"\n [argument]-d --date[/argument] [description]date of the experiment[/description]"
"\n [argument]-h --help[/argument] [description]print this help and exit[/description]"
"\n [argument]-v --verbose[/argument] [description]be verbose[/description]"
"\n [argument]-V --version[/argument] [description]print version number and exit[/description]"
)
self.verbose = False
self.bench = "SDB1"
self.date = "2023_03_24"
with open("values.toml", "rb") as file:
values = load(file)
self.folder = Path(values["general"]["data_folder"])
self.wavelength = values["interferometer"]["wavelength"]
index = 0
while index < len(options):
option = options[index]
try:
if option[0] != "-":
if option == "h":
option = "--help"
if option == "V":
option = "--version"
if "v" in option:
options[index] = option.replace("v", "")
option = "--verbose"
index -= 1
if option == "b":
index += 1
try:
options[index] = "--bench={}".format(
options[index]
)
except IndexError:
raise Exception(
"bench name needed after b option"
)
if option == "d":
index += 1
try:
options[index] = "--date={}".format(
options[index]
)
except IndexError:
raise Exception(
"date needed after d option"
)
if option[0] == "-":
if option[1] != "-":
if option == "-h":
option = "--help"
if option == "-V":
option = "--version"
if "v" in option:
options[index] = option.replace("v", "")
option = "--verbose"
index -= 1
if option == "-b":
index += 1
try:
options[index] = "--bench={}".format(
options[index]
)
except IndexError:
raise Exception(
"bench name needed after -b option"
)
if option == "-d":
index += 1
try:
options[index] = "--date={}".format(
options[index]
)
except IndexError:
raise Exception(
"date needed after -d option"
)
if option[:2] == "--":
if option == "--help":
self.console.print(self.help)
exit(0)
if option == "--version":
self.console.print(self.version)
exit(0)
if option == "--verbose":
self.verbose = True
try:
if option[:8] == "--bench=":
self.bench = str(option[8:]).upper()
except IndexError:
continue
try:
if option[:7] == "--date=":
self.date = option[7:]
except IndexError:
continue
else:
raise Exception("unknown option {}".format(option))
except IndexError:
pass
index += 1
if not self.bench in values["benches"].keys():
raise ValueError("unknow bench {}".format(self.bench))
self.calib_mirror = values["benches"][self.bench]["calib"][
"mirror"
]
self.calib_bench = values["benches"][self.bench]["calib"][
"bench"
]
self.scattering_factor = values["benches"][self.bench][
"scatter_factor"
]
if not self.date in values["dates"].keys():
raise ValueError("unknow date {}".format(self.date))
self.power_in = values["dates"][self.date]["power_in"]
self.power_out = values["dates"][self.date]["power_out"]
self.modelisation = values["dates"][self.date]["modelisation"]
self.vibration_frequency = 0.2
def bench_file(self) -> Path:
return self.folder / (
"{bench}_{date}_ben.csv".format(
bench=self.bench,
date=self.date,
)
)
def mirror_file(self) -> Path:
return self.folder / (
"{bench}_{date}_mir.csv".format(
bench=self.bench,
date=self.date,
)
)
def data_file(self) -> Path:
return self.folder / (
"{bench}_{date}_dat.csv".format(
bench=self.bench,
date=self.date,
)
)
def reference_file(self) -> Path:
return self.folder / (
"{bench}_{date}_ref.csv".format(
bench=self.bench,
date=self.date,
)
)
def modelisation_file(self) -> Path:
return self.folder / (self.modelisation)
def coupling_name(self) -> str:
return "{bench}coupling".format(bench=self.bench)
def log(self, message) -> None:
if self.verbose:
self.console.log(message, _stack_offset=2)