def import_int_file(self, init): """ Replaces path settings in imported image object with new settings NEED TO RE-DO LATER """ # Generate paths to output files self.params = init.params self.main_log = init.logfile self.input_base = init.input_base self.conv_base = init.conv_base self.int_base = init.int_base self.obj_base = init.obj_base self.fin_base = init.fin_base self.viz_base = init.viz_base self.obj_path = misc.make_image_path(self.conv_img, self.input_base, self.obj_base) self.obj_file = os.path.abspath(os.path.join(self.obj_path, os.path.basename(self.conv_img).split('.')[0] + ".int")) self.fin_path = misc.make_image_path(self.conv_img, self.input_base, self.fin_base) self.fin_file = os.path.abspath(os.path.join(self.fin_path, os.path.basename(self.conv_img).split('.')[0] + "_int.pickle")) self.final['final'] = self.fin_file self.final['img'] = self.conv_img if self.viz_base != None: self.viz_path = misc.make_image_path(self.raw_img, self.input_base, self.viz_base) self.viz_file = os.path.join(self.viz_path, os.path.basename(self.conv_img).split('.')[0] + "_int.png") # Generate output folders and files: # Grid search subfolder or final integration subfolder if not os.path.isdir(self.obj_path): os.makedirs(self.obj_path) if not os.path.isdir(self.fin_path): os.makedirs(self.fin_path) # Grid search / integration log file self.int_log = os.path.join(self.fin_path, os.path.basename(self.conv_img).split('.')[0] + '.log') # Visualization subfolder if self.viz_path != None and not os.path.isdir(self.viz_path): os.makedirs(self.viz_path) # Reset status to 'grid search' to pick up at selection (if no fail) if self.fail == None: self.status = 'grid search' return self
def convert_image(self): """ Converts images into pickle format; crops and masks out beamstop if selected """ self.status = 'imported' img_data, self.img_type = self.load_image() info = [] self.log_info.append('\n{:-^100}\n'.format(self.raw_img)) self.log_info.append('Imported image : {}'.format(self.raw_img)) self.log_info.append('Parameters : BEAM_X = {:<4.2f}, BEAM_Y = {:<4.2f}, '\ 'PIXEL_SIZE = {:<8.6f}, IMG_SIZE = {:<4} X {:<4}, '\ 'DIST = {}'.format(img_data['BEAM_CENTER_X'], img_data['BEAM_CENTER_Y'], img_data['PIXEL_SIZE'], img_data['SIZE1'], img_data['SIZE2'], img_data['DISTANCE'])) if self.params.image_conversion.beamstop != 0 or\ self.params.image_conversion.beam_center.x != 0 or\ self.params.image_conversion.beam_center.y != 0 or\ self.params.image_conversion.distance != 0 or\ self.params.image_conversion.rename_pickle_prefix != 'Auto' or\ self.params.image_conversion.rename_pickle_prefix != None: self.status = 'unconverted' if self.img_type == 'unconverted': # Check for and/or create a converted pickles folder try: if not os.path.isdir(self.conv_base): os.makedirs(self.conv_base) except OSError: pass # Generate converted image pickle filename if self.params.image_conversion.rename_pickle_prefix != None: if str(self.params.image_conversion.rename_pickle_prefix).lower() == "auto": prefix = os.getlogin() suffix = int(os.path.basename(self.conv_base)) else: prefix = self.params.image_conversion.rename_pickle_prefix suffix = int(os.path.basename(self.conv_base)) self.conv_img = os.path.abspath(os.path.join(self.conv_base, "{}_{}_{:05d}.pickle".format(prefix, suffix, self.img_index))) else: img_path = misc.make_image_path(self.raw_img, self.input_base, self.conv_base) self.conv_img = os.path.abspath(os.path.join(img_path, os.path.basename(self.raw_img).split('.')[0] + ".pickle")) # Make subfolder for converted pickles try: if not os.path.isdir(img_path): os.makedirs(img_path) except OSError: pass # Convert raw image to image pickle beamstop = self.params.image_conversion.beamstop distance = self.params.image_conversion.distance beam_center = [self.params.image_conversion.beam_center.x, self.params.image_conversion.beam_center.y] square = self.params.image_conversion.square_mode if beam_center != [0,0]: pixel_size = img_data['PIXEL_SIZE'] img_data['BEAM_CENTER_X'] = int(round(beam_center[0] * pixel_size)) img_data['BEAM_CENTER_Y'] = int(round(beam_center[1] * pixel_size)) if distance != 0: img_data['DISTANCE'] = distance if square != "None": img_data = self.square_pickle(img_data) if beamstop != 0: img_data = self.mask_image(img_data) self.log_info.append('Converted image : {}'.format(self.conv_img)) self.log_info.append('Parameters : BEAM_X = {:<4.2f}, BEAM_Y = {:<4.2f}, '\ 'PIXEL_SIZE = {:<8.6f}, IMG_SIZE = {:<4} X {:<4}, '\ 'DIST = {}'.format(img_data['BEAM_CENTER_X'], img_data['BEAM_CENTER_Y'], img_data['PIXEL_SIZE'], img_data['SIZE1'], img_data['SIZE2'], img_data['DISTANCE'])) self.img_type = 'converted' self.input_base = self.conv_base # Save converted image pickle ep.dump(self.conv_img, img_data) self.status = 'converted' if self.params.image_triage.flag_on and self.status == 'converted': self.fail = self.triage_image() self.status = 'triaged' else: self.fail = None # Generate names for output folders and files: if not self.params.image_conversion.convert_only: self.obj_path = misc.make_image_path(self.conv_img, self.input_base, self.obj_base) self.obj_file = os.path.abspath(os.path.join(self.obj_path, os.path.basename(self.conv_img).split('.')[0] + ".int")) self.fin_path = misc.make_image_path(self.conv_img, self.input_base, self.fin_base) self.fin_file = os.path.abspath(os.path.join(self.fin_path, "int_{}.pickle".format(os.path.basename(self.conv_img).split('.')[0]))) self.final['final'] = self.fin_file self.final['img'] = self.conv_img self.int_log = os.path.join(self.fin_path, os.path.basename(self.conv_img).split('.')[0] + '.log') if self.viz_base != None: self.viz_path = misc.make_image_path(self.conv_img, self.input_base, self.viz_base) self.viz_file = os.path.join(self.viz_path, "int_{}.png".format(os.path.basename(self.conv_img).split('.')[0])) # Create actual folders (if necessary) try: if not os.path.isdir(self.obj_path): os.makedirs(self.obj_path) if not os.path.isdir(self.fin_path): os.makedirs(self.fin_path) if self.viz_base != None: if not os.path.isdir(self.viz_path): os.makedirs(self.viz_path) except OSError: pass # Save image object to file ep.dump(self.obj_file, self) return self