def build_universal_config(config_dir): """ Build uni_config.yaml in the config_dir :param config_dir: directory where exp_description.yaml :raise: """ config_yaml_filename = os.path.join(config_dir,'exp_description.yaml') res=yamlutils.read_yaml(config_yaml_filename)[0] # pprint(res) if not 'frames' in res: logging.error(str.format('Section FRAMES not found in config file {0}',config_yaml_filename)) raise AttributeError uc = UniversalConfigBuilder() #TODO: fix this hack uc.add_section({'preprocess_config': res['preprocess_config']}) uc.add_section({'description': res['description']}) groups = get_groups(res['frames']) start_data_angle=0 for group_name in natsorted(groups.keys()): group = groups[group_name] files,start_data_angle = get_files_in_group(group, root=config_dir, start_data_angle=start_data_angle) for f in files: uc.add_frame(group_name=group_name, frame_type=f['type'], file_name=f['name'], image_format=f['image_format'], angle=f['angle'], exposure_time=f['exposure_time'], rotation_angle=f['rotation_angle']) uc.save2yaml(os.path.join(config_dir,'uni_config.yaml'))
def get_normalized_frames(frames_groups, image_process_config): """ Build normalized frames from groups of frames. :param frames_groups: :param image_process_config: :return: """ normalized_data = [] for group_name in natsorted(frames_groups.keys()): cur_group = frames_groups[group_name] frames_by_type = build_grouped_by(cur_group, 'frame_type') data_frames_by_angle = build_grouped_by(frames_by_type['data'], 'angle') dark_frames_by_angle = build_grouped_by(frames_by_type['dark'], 'angle') empty_frames_by_angle = build_grouped_by(frames_by_type['empty'], 'angle') mean_dark_frame = get_mean_prepoces_frame(dark_frames_by_angle[dark_frames_by_angle.keys()[0]], image_process_config) mean_empty_frame = get_mean_prepoces_frame(empty_frames_by_angle[empty_frames_by_angle.keys()[0]], image_process_config,dark_frame=mean_dark_frame) for df_angle in data_frames_by_angle: normalized_data.append(normalize_data_frames(data_frames_by_angle[df_angle], mean_empty_frame, mean_dark_frame, image_process_config)) # pylab.figure() # pylab.imshow(normalized_data[-1]['data']) # pylab.colorbar() # pylab.show() return normalized_data
def get_files_in_group(group,root='.',start_data_angle=0): """ Get files in each group. :param group: :param root: :param start_data_angle: :return: """ files=[] stop_data_angle=start_data_angle for type_key in ['dark','data','empty']: if type_key in group: if 'filesnames' in group[type_key]: if 'regexp' in group[type_key]['filesnames']: cur_root=root fname_pattern=group[type_key]['filesnames']['regexp'] if 'folder' in group: cur_root=os.path.join(cur_root,group['folder']) delta_angle=get_value(group,[type_key,],'angles_step') exp_time=get_value(group,[type_key,],'exposure_time') rotation_angle=get_value(group,[type_key,],'rotation_angle') image_format=try_get_value(group,[type_key,],'image_format','fits') frames_per_angle=try_get_value(group,[type_key,],'frames_per_angle',1) tmp_files_names_list=glob.glob(os.path.join(cur_root,fname_pattern)) tmp_files_names_list=natsorted(tmp_files_names_list) tmp_files_list=[] for ef,f in enumerate(tmp_files_names_list): if type_key=='data': angle=start_data_angle+delta_angle*((ef-ef%frames_per_angle)/frames_per_angle) stop_data_angle=start_data_angle+delta_angle*(((ef+1)-(ef+1)%frames_per_angle)/frames_per_angle) else: angle=0 td= {'name': f, 'angle': angle, 'exposure_time': exp_time, 'type': type_key, 'rotation_angle': rotation_angle, 'image_format': image_format} tmp_files_list.append(td) files.extend(tmp_files_list) return files, stop_data_angle
def test_natsort(self): self.assertEqual(natsort.natsorted(input_list), ref_list)
def get_files_list(self, file_pattern): file_list=glob.glob(os.path.join(self.get_full_path(),file_pattern)) full_path=self.get_full_path() file_list=[x[len(full_path)+1:] for x in file_list if x.find(full_path)==0 if os.path.isfile(x)] return natsorted(file_list)