Source code for patato.convenience_scripts.data_analysis.analyse_dce
# Copyright (c) Thomas Else 2023-25.
# License: MIT
import argparse
import glob
from os.path import join
from ...io.msot_data import PAData
from ...unmixing.unmixer import DCEAnalyser
from ...utils import sort_key
from ...utils.pipeline import run_pipeline
[docs]
def init_argparse():
parser = argparse.ArgumentParser(description="Analyse Gas Challenge Data.")
parser.add_argument("input", type=str, help="Data Folder")
parser.add_argument("-p", "--prefix", type=str, help="Gas Challenge name prefix")
parser.add_argument(
"-w", "--window", type=int, help="Smoothing window size", default=10
)
parser.add_argument(
"-b", "--buffer", type=int, help="Buffer around changes", default=5
)
parser.add_argument(
"-d", "--display", type=bool, help="Display steps", default=True
)
parser.add_argument(
"-s", "--sigma", type=float, help="Smoothing window sigma", default=4
)
parser.add_argument(
"-g",
"--gas",
type=lambda x: -1 if "air" == x else 1,
help="The starting gas for the challenge. If air then standard GC, "
"if o2 then it switches from o2->air",
default="o2",
)
parser.add_argument("--skipstart", type=int, help="Skip Runs at Start", default=0)
return parser
[docs]
def main():
p = init_argparse()
args = p.parse_args()
data_folder = args.input
prefix = args.prefix
if prefix is None:
prefix = ""
raise RuntimeWarning(
"Warning: You should usually set a prefix for this analysis."
)
for file in sorted(glob.glob(join(data_folder, "*.hdf5")), key=sort_key):
data = PAData.from_hdf5(file, "r+")
scan_name = data.get_scan_name().lower()
prefices = prefix.lower().split(",")
if not any([x in scan_name for x in prefices]):
continue
data.clear_dso2()
print(scan_name, file)
scan_unmixed = data.get_scan_unmixed()
if not scan_unmixed:
print("Skipped", file, "- no unmixing.")
continue
analyser = DCEAnalyser(args.window, args.display, args.sigma, args.buffer)
try:
for recon in list(scan_unmixed.keys()):
unmixed = scan_unmixed[recon]
run_pipeline(analyser, unmixed, data, -1, True)
except RuntimeError:
print("---- SCAN NOT PROCESSED (no reference region) ---")
data.file.close()
if __name__ == "__main__":
main()