示例#1
0
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'))
示例#2
0
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
示例#3
0
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
示例#4
0
 def test_natsort(self):
     self.assertEqual(natsort.natsorted(input_list), ref_list)
示例#5
0
 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)