def execute(self): corgie_logger.debug(f"ComputeFieldTask") src_bcube = self.bcube.uncrop(self.pad, self.mip) tgt_bcube = src_bcube.translate(z_offset=self.tgt_z_offset) processor = procspec.parse_proc(spec_str=self.processor_spec) corgie_logger.debug(f"Read target") tgt_translation, tgt_data_dict = self.tgt_stack.read_data_dict( tgt_bcube, mip=self.mip, stack_name="tgt") # Compensate if target was moved to one side a lot # tgt_drift = helpers.percentile_trans_adjuster( # tgt_data_dict["tgt_agg_field"], unaligned_img=tgt_data_dict["tgt_img"] # ) tgt_drift = helpers.Translation(0, 0) corgie_logger.debug(f"Read source") src_translation, src_data_dict = self.src_stack.read_data_dict( src_bcube, mip=self.mip, stack_name="src", translation=tgt_drift) # translation_adjuster=helpers.percentile_trans_adjuster) # ) processor_input = {**src_data_dict, **tgt_data_dict} corgie_logger.debug(f"Compute field") predicted_field = processor(processor_input, output_key="src_cf_field") predicted_field.x += tgt_drift.x predicted_field.y += tgt_drift.y cropped_field = helpers.crop(predicted_field, self.crop) corgie_logger.debug(f"Write field") self.dst_layer.write(cropped_field, bcube=self.bcube, mip=self.mip)
def read_data_dict(self, bcube, mip, translation_adjuster=None, stack_name=None, add_prefix=True, translation=None): data_dict = {} if translation is None: translation = helpers.Translation(0, 0) if stack_name is None: stack_name == self.name if stack_name is None or not add_prefix: name_prefix = "" else: name_prefix = f"{stack_name}_" agg_field = None field_layers = self.get_layers_of_type("field") # Assume that the last field is the final one if len(field_layers) > 0: l = field_layers[-1] global_name = "{}{}".format(name_prefix, l.name) this_field = l.read(bcube=bcube, mip=mip) data_dict[global_name] = this_field agg_field = this_field '''for l in field_layers: global_name = "{}{}".format(name_prefix, l.name) this_field = l.read(bcube=bcube, mip=mip) data_dict[global_name] = this_field agg_field = this_field if agg_field is None: agg_field = this_field else: agg_field = this_field.field().from_pixels()(agg_field.field().from_pixels()).pixels()''' assert (f"{name_prefix}agg_field" not in data_dict) data_dict[f"{name_prefix}agg_field"] = agg_field if translation_adjuster is not None: src_field_trans = translation_adjuster(agg_field) translation.x += src_field_trans.x translation.y += src_field_trans.y #if translation.x != 0 or translation.y != 0: #import pdb; pdb.set_trace() final_bcube = copy.deepcopy(bcube) final_bcube = final_bcube.translate(x_offset=translation.y, y_offset=translation.x, mip=mip) for l in self.get_layers_of_type(["mask", "img"]): global_name = f"{name_prefix}{l.name}" data_dict[global_name] = l.read(bcube=final_bcube, mip=mip) return translation, data_dict
def read_data_dict(self, bcube, mip, translation_adjuster=None, stack_name=None): data_dict = {} field_layers = self.get_layers_of_type("field") agg_field = None if stack_name is None: stack_name == self.name if stack_name is None: name_prefix = "" else: name_prefix = f"{stack_name}_" for l in field_layers: this_field = l.read(bcube=bcube, mip=mip) global_name = "{}{}".format(name_prefix, l.name) data_dict[global_name] = this_field if agg_field is not None: agg_field = compose_fields(agg_field, this_field, is_pix_res=True) else: agg_field = this_field assert (f"{name_prefix}_agg_field" not in data_dict) data_dict[f"{name_prefix}agg_field"] = agg_field if translation_adjuster is not None: translaiton = translation_adjuster(agg_field) else: translation = helpers.Translation(0, 0) final_bcube = copy.deepcopy(bcube) final_bcube = final_bcube.translate(x=translation.x, y=translation.y) for l in self.get_layers_of_type(["mask", "img"]): global_name = f"{name_prefix}{l.name}" data_dict[global_name] = l.read(bcube=bcube, mip=mip) return translation, data_dict