Source code for dials.extensions.simple_background_ext

from __future__ import annotations


[docs] class SimpleBackgroundExt: """An extension class implementing simple background subtraction.""" name = "simple"
[docs] @staticmethod def phil(): from libtbx.phil import parse phil = parse( """ outlier .help = "Outlier rejection prior to background fit" { algorithm = *null nsigma truncated normal plane tukey .help = "The outlier rejection algorithm." .type = choice nsigma .help = "Parameters for nsigma outlier rejector" .expert_level = 1 { lower = 3 .help = "Lower n sigma" .type = float upper = 3 .help = "Upper n sigma" .type = float } truncated .help = "Parameters for truncated outlier rejector" .expert_level = 1 { lower = 0.01 .help = "Lower bound" .type = float upper = 0.01 .help = "Upper bound" .type = float } normal .help = "Parameters for normal outlier rejector" .expert_level = 1 { min_pixels = 10 .help = "The minimum number of pixels to use in calculating the" "background intensity." .type = int } plane .help = "Parameters for mosflm-like outlier rejector. This algorithm" "is mainly used in conjunction with a linear 2d background." .expert_level = 1 { fraction = 1.0 .help = "The fraction of pixels to use in determining the initial" "plane used for outlier rejection." .type = float n_sigma = 4.0 .help = "The number of standard deviations above the threshold plane" "to use in rejecting outliers from background calculation." .type = float } tukey .help = "Parameters for tukey outlier rejector" .expert_level = 1 { lower = 1.5 .help = "Lower IQR multiplier" .type = float upper = 1.5 .help = "Upper IQR multiplier" .type = float } } model .help = "Background model" { algorithm = constant2d *constant3d linear2d linear3d .help = "The choice of background model" .type = choice } min_pixels = 10 .type = int(value_min=1) .help = "The minimum number of pixels to compute the background" """ ) return phil
[docs] def __init__(self, params, experiments): """ Initialise the algorithm. :param params: The input parameters :param experiments: The list of experiments """ from libtbx.phil import parse from dials.algorithms.background.simple import BackgroundAlgorithm # Create some default parameters if params is None: params = self.phil().fetch(parse("")).extract() else: params = params.integration.background.simple # Create some keyword parameters kwargs = { "model": params.model.algorithm, "outlier": params.outlier.algorithm, "min_pixels": params.min_pixels, } # Create all the keyword parameters if params.outlier.algorithm == "null": pass elif params.outlier.algorithm == "truncated": kwargs["lower"] = params.outlier.truncated.lower kwargs["upper"] = params.outlier.truncated.upper elif params.outlier.algorithm == "nsigma": kwargs["lower"] = params.outlier.nsigma.lower kwargs["upper"] = params.outlier.nsigma.upper elif params.outlier.algorithm == "normal": kwargs["min_pixels"] = params.outlier.normal.min_pixels elif params.outlier.algorithm == "plane": kwargs["fraction"] = params.outlier.plane.fraction kwargs["n_sigma"] = params.outlier.plane.n_sigma elif params.outlier.algorithm == "tukey": kwargs["lower"] = params.outlier.tukey.lower kwargs["upper"] = params.outlier.tukey.upper # Create the algorithm self._algorithm = BackgroundAlgorithm(experiments, **kwargs)
[docs] def compute_background(self, reflections, image_volume=None): """ Compute the background. :param reflections: The list of reflections """ return self._algorithm.compute_background( reflections, image_volume=image_volume )