コード例 #1
0
def has_pe1signal(header):
    """Return True if header contains a non-trivial pe1_image_lightfield.

    pe1_image_lightfield must exist and it must have at least 10 unique
    values.
    """
    from dataportal import get_images, get_events
    from filestore.handlers import IntegrityError
    detname = 'pe1_image_lightfield'
    if not header.descriptors:  return False
    e = next(get_events(header, fill=False))
    if detname not in e.data:
        return False
    try:
        imgs = get_images(header, 'pe1_image_lightfield')
    except (IntegrityError, IOError):
        return False
    A = imgs.get_frame(0)
    uniquevalues = set(A.flatten())
    rv = (len(uniquevalues) >= 10)
    return rv
コード例 #2
0
def save_tiff(headers, dark_subtraction = True, *, max_count = None):
    ''' save images obtained from dataBroker as tiff format files. It returns nothing.

    arguments:
        headers - list - a list of header objects obtained from a query to dataBroker
    '''
    F_EXTEN = '.tiff'
    e = '''Can not find a proper dark image applied to this header.
        Files will be saved but not no dark subtraction will be applied'''
    is_dark_subtracted = False # assume not has been done
    
    # prepare header
    if type(list(headers)[1]) == str:
        header_list = list()
        header_list.append(headers)
    else:
        header_list = headers

    for header in header_list:
        print('Saving your image(s) now....')
        # information at header level
        img_field = _identify_image_field(header)
        for ev in get_events(header):
            img = ev['data'][img_field]
            ind = ev['seq_num']
            f_name = _feature_gen(header)
            event_timestamp = ev['timestamps']['pe1_image'] # time when triggering area detector
            
            # dark subtration logic 
            if dark_subtraction:
                try:
                    dark_uid_appended = header.start['sc_params']['dk_field_uid']
                    try:
                        # bluesky only looks for uid it defines
                        dark_search = {'group':'XPD','xp_dark_uid':dark_uid_appended} # this should be refine later
                        dark_header = db(**dark_search)
                        dark_img = np.array(get_images(dark_header, img_field)).squeeze()
                    except ValueError: 
                        print(e) # protection. Should not happen
                        dark_img = np.zeros_like(light_imgs)
                    img -= dark_img
                    is_dark_subtracted = True # label it only if it is successfully done
                except KeyError:
                    print(e) # backward support. For scans with auto_dark turned off
                    pass
            # complete file name
            f_name = f_name +_timestampstr(event_timestamp)
            if is_dark_subtracted:
                f_name = 'sub_' + f_name
            if 'temperature' in ev['data']:
                f_name = f_name + '_'+str(ev['data']['temperature'])+'K'
            # index is still needed as we don't want timestamp in file name down to seconds
            combind_f_name = '{}_{}{}'.format(f_name, ind, F_EXTEN)
            w_name = os.path.join(W_DIR, combind_f_name)
            print(w_name)
            #tif.imsave(w_name, img) 
            #if os.path.isfile(w_name):
                #print('image "%s" has been saved at "%s"' % (combind_f_name, W_DIR))
            #else:
                #print('Sorry, something went wrong with your tif saving')
                #return
            if max_count is not None and ind >= max_count:
                break # break the loop if max_count reach or already collect all images
    print('||********Saving process FINISHED********||')