From a97be569af57b493280e226aaf2ed6fdad3d2de0 Mon Sep 17 00:00:00 2001 From: Saurabh Mogre Date: Tue, 25 Apr 2023 12:54:24 -0700 Subject: [PATCH] resolve compartment object for surface gradient (#168) --- cellpack/autopack/Environment.py | 20 +++++++++++++++----- cellpack/autopack/Gradient.py | 13 +++++++++---- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/cellpack/autopack/Environment.py b/cellpack/autopack/Environment.py index 419f5afc9..9cdfaedbc 100644 --- a/cellpack/autopack/Environment.py +++ b/cellpack/autopack/Environment.py @@ -793,6 +793,19 @@ def sortIngredient(self, reset=False): if o.surfaceRecipe: o.surfaceRecipe.sort() + def resolve_gradient_data_objects(self, gradient_data): + """ + Resolves gradient data objects for some modes + """ + # TODO: check if other modes need to be resolved + if gradient_data["mode"] == "surface": + gradient_data["mode_settings"][ + "object" + ] = self.get_compartment_object_by_name( + gradient_data["mode_settings"]["object"] + ) + return gradient_data + def set_gradient(self, gradient_data): """ create a grdaient @@ -800,10 +813,7 @@ def set_gradient(self, gradient_data): listorganelle influenced listingredient influenced """ - if "surface_name" in gradient_data: - gradient_data["object"] = self.get_compartment_object_by_name( - gradient_data["surface_name"] - ) + gradient_data = self.resolve_gradient_data_objects(gradient_data) gradient = Gradient(gradient_data) # default gradient 1-linear Decoy X self.gradients[gradient_data["name"]] = gradient @@ -1369,7 +1379,7 @@ def buildGrid(self, rebuild=True): for g in self.gradients: gradient = self.gradients[g] if gradient.mode == "surface": - gradient.object.get_surface_distances( + gradient.mode_settings["object"].get_surface_distances( self, self.grid.masterGridPositions ) self.gradients[g].build_weight_map( diff --git a/cellpack/autopack/Gradient.py b/cellpack/autopack/Gradient.py index 518c69b34..62571e20b 100644 --- a/cellpack/autopack/Gradient.py +++ b/cellpack/autopack/Gradient.py @@ -157,12 +157,17 @@ def build_surface_distance_weight_map(self): build a map of weights based on the distance from a surface assumes self.distances include surface distances """ - if getattr(self.object, "surface_distances", None) is None: + if getattr(self.mode_settings["object"], "surface_distances", None) is None: raise ValueError("Surface distances are not set") - elif self.scale_to_next_surface: - self.distances = self.object.scaled_distance_to_next_surface + elif self.mode_settings["scale_to_next_surface"]: + self.distances = self.mode_settings[ + "object" + ].scaled_distance_to_next_surface else: - self.distances = self.object.surface_distances / self.object.max_distance + self.distances = ( + self.mode_settings["object"].surface_distances + / self.mode_settings["object"].max_distance + ) self.set_weights_by_mode() def build_directional_weight_map(self, bb, master_grid_positions):