From 13514696d1bd995fad18f675890a9099b8485208 Mon Sep 17 00:00:00 2001 From: sarakurkowska Date: Sat, 4 Apr 2026 13:49:05 -0700 Subject: [PATCH] add weights to the fits --- pytheranostics/dosimetry/base_dosimetry.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/pytheranostics/dosimetry/base_dosimetry.py b/pytheranostics/dosimetry/base_dosimetry.py index f599f86..4309be9 100644 --- a/pytheranostics/dosimetry/base_dosimetry.py +++ b/pytheranostics/dosimetry/base_dosimetry.py @@ -477,6 +477,20 @@ def smart_fit_selection( lmfit.model.ModelResult The best fit model based on Akaike Information Criterion. """ + y_data = numpy.array(region_data["Activity_MBq"], dtype=float) + sigma_config = self.config["VOIs"][region].get("sigma", None) + + if sigma_config is None: + sigma = None + elif sigma_config["type"] == "fraction": + sigma = sigma_config["value"] * y_data + elif sigma_config["type"] == "sqrt": + sigma = numpy.sqrt(y_data) + elif sigma_config["type"] == "absolute": + sigma = numpy.full_like(y_data, sigma_config["value"], dtype=float) + else: + raise ValueError(f"Unknown sigma type: {sigma_config['type']}") + # If fit_order is defined by user: if self.config["rois"][region]["fit_order"] is not None: fit_results, _ = exponential_fit_lmfit( @@ -487,6 +501,7 @@ def smart_fit_selection( bounds=self.config["rois"][region]["bounds"], params_init=self.config["rois"][region]["param_init"], with_uptake=self.config["rois"][region]["with_uptake"], + sigma=sigma, ) return fit_results