def perform_match(self, parser_manager): """ Perform image alignment and crystal matching returning a results object. :param . :return: ServiceResult object. """ log = logging.getLogger(".".join([__name__, self.__class__.__name__])) log.addFilter(logconfig.ThreadContextFilter()) extra = self._config_align.all_to_json() extra.update(self._config_crystal.all_to_json()) log = logging.LoggerAdapter(log, extra) log.info("Matching Started") log.debug(extra) input_poi = parser_manager.parse_selected_points_from_args() beamline_image = parser_manager.get_focused_image() parser_manager.save_focused_image(beamline_image) focused_image_path = parser_manager.get_focused_image_path() formulatrix_image_path = parser_manager.get_formulatrix_image_path() job_id = parser_manager.get_job_id() # Create the images image1 = Image.from_file(formulatrix_image_path) image2 = beamline_image # Create results object service_result = ServiceResult(job_id, formulatrix_image_path, focused_image_path) # Perform alignment try: aligned_images, scaled_poi = self._perform_alignment( image1, image2, input_poi) service_result.set_image_alignment_results(aligned_images) # Perform Crystal Matching - only proceed if we have a valid alignment if aligned_images.alignment_status_code( ) == ALIGNED_IMAGE_STATUS_OK: match_results = self._perform_matching(aligned_images, scaled_poi, parser_manager) service_result.append_crystal_matching_results(match_results) except Exception as e: if sys.version_info[0] < 3: log.error("ERROR: " + e.message) else: log.error("ERROR: " + str(e)) service_result.set_err_state(e) return service_result
def from_file(filename, pixel_size=0): image = Image.from_file(filename) return SizedImage(image, pixel_size)